目前市场上大概有两种称重传感器。一种是4条线的全桥称重传感器,另外一种是3条线的半桥称重传感器。
这里说的全桥和半桥,指的是传感器身上的电阻应变片组成的桥。
全桥称重传感器的内部有4个应变片,组成了电阻桥,引出4条线,颜色分别是红色、黑色、白色、绿色。
半桥称重传感器的内部有2个电阻应变片,引出3条线,实际上组合的是一个半桥。这3条线的颜色分别是红、黑、白,其中,红色是电阻应变片中间引出的。
HX711模块是比较常用的一种电子称测量模块。HX711芯片内部实际上是由“放大器+ADC模数转换器”组成的一种芯片。其中,A通道的放大倍数为128或者64,B通道的放大倍数为32,ADC精度是24位。
全桥称重传感器的红线接E+、黑色接E-、白色接A-、绿色接A+。
半桥称重传感器有两种应用,一种是两个半桥传感器组成的应用,另外一种是四个半桥传感器组成的应用。
两个半桥传感器的接法:假设两个传感器为A和B,传感器的白线接B传感器的黑线,一起接到E+;A传感器的黑线接B传感器的白线,一起接到E-;A传感器的红线接到S+;B传感器的红线接到S-。
四个半桥传感器的接法:相邻黑接黑、相邻白接白、最后4个红线分别接到E+、E-、S+、S-。
unsigned long ReadCount(void)
{
unsigned long Count;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for(i=0;i<24;i++)
{
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO)Count++;
}
ADSK=1;
Count=Count^0x800000;
ADSK=0;
return(Count);
}
要点1:该函数的返回值就是采集到的ADC值,这是一个24位的值,所以确保在定义的时候,要把接收ADC值的变量定义为32位的,不可以定义成16位的或者8位的。
要点2:很多人不理解为什么要把采集到的值与0x800000进行“异或”运算。这是因为,HX711直接取出来的数值,是以补码的形式出现的,并且是有符号的值。
-
以十进制表示,最小值为-8388608,最大值为8388607。
-
以十六进制补码表示,最小值是0x800000,最大值是0x7FFFFF。这就是我们得到的还没有与0x800000进行异或运算之前的ADC值。
“异或”运算的作用是把得到的ADC值,由原来的“-8388608~8388607”变成“0~16777215”。这是一个结论,如果你想知道是怎么实现的,举几个例子进行一下运算就知道了。
我们最终得到的ADC值,是24位的,如果你想降低精度,比如你只需要16位精度,那么,你可以把最终的值右移8位就可以。
链接:https://mrs.pub/elemod/sensor/3578.html