一、实物图
二、原理图
编号 | 名称 | 功能 |
1 | GND | 电源地 |
2 | DT | 数据输出引脚 |
3 | SCK | 时钟引脚 |
4 | VCC | 电源正 |
三、简介
HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片是专门为称重传感器设计的,称重传感器只需要一个HX711芯片即可完成称重信号的处理及AD转换;对于单片机来说,获取此刻的重量值,只需一个简单函数读取此时AD值,并通过一个线性方程的转换后即可获取此时物体的精确重量。
HX711芯片与单片机的通讯只需要两个引脚,时钟引脚PD_SCK及数据引脚DOUT,用来输出数据,选择输入通道和增益。当数据输出管脚DOUT为高电平时,表明A/D转换器还未准备好输出数据,此时串口时钟输入信号PD_SCK应为低电平。当DOUT从高电平变低电平后,PD_SCK应输入25至27个不等的时钟脉冲,如图:
其中第一个时钟脉冲的上升沿将读出输出24位数据的最高位(MSB),直至第24个时钟脉冲完成,24位输出数据从最高位至最低位逐位输出完成。第25至27个时钟脉冲用来选择下一次A/D转换的输入通道和增益,时序如图:
四、称重原理
1.HX711模块可以看成由三个部分组成:压力传感器、电压放大器、ad转换芯片
压力传感器:感知物体重力,并转化为电压信号。这里是0~10kg压力传感器,灵敏电压为1mv,即1kg重力产生1mv电压
电压放大器:由于压力传感器产生电压太小,需要对电压信号放大。这里用的是128倍电压增益。
ad转换芯片(24位):将模拟信号(放大后的电压值)转化为数字信号(ad值)
2.ad值转化为重力大小
假设重力为x kg,ad = (x/10)*128*2^24*(5/5000),(满量程为10kg,128倍放大,精度为2^24,传感器满偏电压5mv,单片机为5v)
ad = 214748.3648x >> x = ad/214748.3648 (按g显示再乘1000即可)
//ad转化为重力大小公式,(float)将整除转化为小数运算,再将运算结果强制转化为无符号整型数值
Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/240);
//理论上是除以214.7,实际上存在误差(传感器曲线以及电压的微小误差),需要根据显示情况来调整这一数值
五、程序
/****
******* 读取HX711数值
*****/
ulong HX711_Read(void)
{
ulong count; //存ad值
uchar i;
HX711_DOUT = 1; //数据端口拉高,参照时序图写
Hx711_delay_us(); //延时
HX711_SCK = 0; //时钟端口拉低,使能AD
count = 0; //ad值初始化
while(HX711_DOUT); //AD转换未结束则等待,否则开始读取
for(i=0; i
{
HX711_SCK = 1; //准备转换数据
count = count
HX711_SCK = 0; //时钟脉冲下降延,数据开始转换
if(HX711_DOUT)
count++; //数据端为高则最低位+1,为1,数据端为低则最低位不变,为0(左移把最低位空出)
}
HX711_SCK = 1; //第25个脉冲延
count = count^0x800000; //异或输出原码
Hx711_delay_us(); //延时
HX711_SCK = 0; //结束ad转换
return(count); //传出ad值
}
六、流程设计
首先初始化引脚,然后数据引脚拉高,延时一段时间后,将时钟引脚拉低,等待AD转换结束,然后开始读取数据。接下来循环24次数据接收,在第25个脉冲将数据异或转换,并拉低时钟引脚结束AD转换。通过采集第一次数据为毛皮重量,采集第二次数据减去第一次数据即为最终称重重量。