简介
HX711是一个用于电子称的ADC芯片,分辨率为24bit,内置2个通道的低噪放大器,可选增益32/64/128倍。
通道A可选增益64倍或128倍。当增益为64倍时,满量程为±40mV;当增益为128倍时,满量程为±20mV。
通道B固定增益32倍。满量程为±80mV。
通信
HX711与MCU通信采用的是2线串行数据通信,一条时钟线(PD_SCK),一条数据线(DOUT)。时序和SPI类似,但不是标准的SPI协议。
它要求每次通信至少25个时钟,至多27个时钟。前面24个时钟传送ADC采样数据,后面3个时钟决定下次采样的通道和增益。
ADC采样数据为24位有符号整数。
注意:
1.如果PD_SCK保持高电平超过60us,芯片会进入掉电模式。重新拉低PD_SCK芯片会重新上电并复位。
2.数据线DOUT必须使用上拉才能正常通信,可以使用MCU的上拉输入模式,也可以在硬件上连接外部上拉电阻。
代码
以下代码仅供参考:
硬件平台使用STM32,使用2个GPIO模拟时序读取采样数据,此处固定使用通道A,增益128。
#include "bsp.h"
#include "delay.h"
#define PIN_SCK PA,2
#define PIN_SDA PA,3
//连续发送25个时钟,读取ADC并设置下次采样为通道A,增益128
int hx711_recv(void)
{
int i;
uint32_t data;
data = 0;
gpio_write(PIN_SCK, 0);
while(gpio_read(PIN_SDA));
for(i=0; i<24; i++)
{
gpio_write(PIN_SCK, 1);
delay_us(1);
gpio_write(PIN_SCK, 0);
delay_us(1);
data <<= 1;
data |= gpio_read(PIN_SDA);
}
gpio_write(PIN_SCK, 1);
delay_us(1);
gpio_write(PIN_SCK, 0);
data <<= 8;
return ((int)(data)) >> 8;
}
//初始化GPIO
void hx711_init(void)
{
gpio_open(PIN_SDA, GPIO_MODE_IN, GPIO_IN_PULLUP);
gpio_open(PIN_SCK, GPIO_MODE_OUT, GPIO_OUT_PP);
gpio_write(PIN_SCK, 0);
}