模块采用24位高精度的A/D转换器芯片hx711,是一款专为高精度电子称而设计的, 具有两路模拟通道输入, 内部集成128倍增益可编程放大器。输入电路可配置为 提供桥压的电桥式(如压力、称重)传感器模式 是一款理想的高精度低成本采样前端模块。采样hx711 24位ad芯片,双通道 差分输入。全贴片 机器焊接,带金属屏蔽,配送直、弯两种插针,满足各种安装焊接方式,板上使用了2个47uF的胆电容,用料很足,内置上拉电阻,且预留CPU焊接位置,很适合自己二次开发各种各样的传感器相关应用。
模块电原理图
模块主要特点
● 带金属屏蔽,强抗干扰,预留cpu(STC15F104)位置,可自行升级二次开发。
● 两路可选择差分输入
● 片内低噪声可编程放大器,可选增益为32、64 和128
● 片内稳压电路可直接向外部传感器和芯片内A/D 转换器提供电源
● 片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟
● 上电自动复位电路
● 简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程
● 可选择10Hz 或80Hz 的输出数据速率
● 同步抑制50Hz 和60Hz 的电源干扰
● 耗电量(含稳压电源电路):
典型工作电流:< 1.7mA, 断电电流:< 1μA
● 工作电压范围:2.6 ~ 5.5V
● 工作温度范围:-20 ~ +85℃
模块检测方法
1,初步快速判断:断开模块所有连线,仅仅给模块供电5v(就是vcc接+5v,gnd接地),然后把模块的ck端口对地短接,然后再去测 out+对地电压,应该4.5v左右,接着测DO/RX端口对地电压,应该0v左右,如果电压都符合,说明模块99%正常。
2,完整测试判断:使用测试电路图搭个电路,给单片机烧入测试程序,然后用串口线连接电脑,在电脑上运行串口助手,就可以接收到测试电路发出来的读数报告,读数正常,表明模块正常。
实验准备接线时,才发现收来的四个称重传感器中,有一个只有二根线(其它3个都是3根接线),看来要搞不定了:'( :'( :'(
HX711.h头文件
#ifndef HX711_h
#define HX711_h
#include "Arduino.h"
class Hx711
{
private:
int DOUT;//定义数据引脚
int SCK;//定义时钟引脚
float scale;//定义比例系数
long offset;//定义补偿值
public:
Hx711(int IO_DOUT,int IO_SCK);//构造函数
void setScale(float IO_scale);//设置比例系数
void setOffset(long IO_offset);//设置补偿值
long getValue();//采集一次ADC值
long getAverageValue(char IO_times);//采集ADC平均值
float getWeight(char IO_times);//得出重量值
};
#endif
HX711.cpp 文件
#include "HX711.h"
#include "Arduino.h"
//int DOUT;//定义数据引脚
//int SCK;//定义时钟引脚
//float scale;//定义比例系数
//long offset;//定义补偿值
//int times;//定义采集次数
Hx711::Hx711(int IO_DOUT,int IO_SCK)//构造函数
{
DOUT = IO_DOUT;
SCK = IO_SCK;
pinMode(SCK, OUTPUT);//设置IO口工作方式
pinMode(DOUT, INPUT);
}
void Hx711::setScale(float IO_scale)//设置比例系数
{
scale = IO_scale;
}
void Hx711::setOffset(long IO_offset)//设置补偿值
{
offset = IO_offset;
}
long Hx711::getValue()//采集一次ADC值
{
unsigned long Count;
unsigned char i;
digitalWrite(SCK,LOW);
Count = 0;
while(digitalRead(DOUT) == 1);//低电平时数据可以输出
for(i=0;i<24;i++)//循环读取数据
{
digitalWrite(SCK,HIGH);
Count = Count<<1;
digitalWrite(SCK,LOW);
if(digitalRead(DOUT) == 1) Count++;//最低位置1
}
digitalWrite(SCK,HIGH);
Count = Count^0x800000;//最高位置0
digitalWrite(SCK,LOW);//128增益
return Count;
}
long Hx711::getAverageValue(char IO_times)//采集ADC平均值
{
long sum=0;
char i;
for(i=0;i<IO_times;i++)
{
sum += getValue();
}
return sum/IO_times;
}
float Hx711::getWeight(char IO_times)//得出重量值
{
long temp;
temp = getAverageValue(IO_times) - offset;
return (float)temp/scale;
}
实验没有通过,一直卡在HX711库上,编译无法通过.......
/*
【Arduino】66种传感器模块系列实验(73)
实验七十三:人体秤50kg称重传感器模块(电阻应变半桥式)
*/
#include <HX711.h>
HX711 hx(9, 10);
void setup() {
Serial.begin(9600);
}
void loop()
{
double sum = 0;
for (int i = 0; i < 10; i++)
sum += hx.read();
Serial.println(sum/10);
delay(3000);
}