24小(xiǎo)时联系電(diàn)话:18217114652、13661815404
中文(wén)
- 您当前的位置:
- 首页>
- 電(diàn)子资讯>
- 技术专题>
- 单片机开发之HX711的...
技术专题
单片机开发之HX711的计算
最近接了一个单片机开发项目,需要使用(yòng)HX711芯片来处理(lǐ)称重传感器的值。作為(wèi)一个多(duō)年老司机,在HX711官网上没找到称重值的计算方法,网上的资料也不全。因此在调试出HX711的称重值之后,将项目过程做一个记录,為(wèi)后面开发的人提供微薄的帮助。
硬件電(diàn)路在此略过不提了,简略说下HX711在STM32单片机开发的过程。
1、初始化硬件HX711_init;
2、实现HX711 AD值读取函数HX711_Read_AD;
3、记录没有(yǒu)物(wù)品时HX711_Read_AD读取的AD值adj;
4、编译烧录运行程序,将一个质量為(wèi)M的物(wù)品放到托盘上,HX711_Read_AD读出物(wù)品的AD值A1。可(kě)计算得到称重系数 γ=M/(A1-adj);
5、将γ常量系数写入到代码中,实现HX711_Read_Weight函数,例如HX711_Read_AD读取待测物(wù)的AD值是A,待测物(wù)品质量m=(A-adj)*γ = M*(A-adj)/(A1-adj);
以下代码是HX711在STM32F103上的代码实现,已经过验证:
#define HX711_SCK PBout(13) //SCK
#define HX711_READ_SDA PBin(12)
//输入SDA
static u32 adj = 0;//无物(wù)称重时HX711读出的AD值
/*初始化硬件*/
void HX711_init(void)
{
u32
sum=0;
int
i=0;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_GPIOB, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode
= GPIO_Mode_Out_PP ; //推挽输出
GPIO_InitStructure.GPIO_Speed
= GPIO_Speed_50MHz;
GPIO_Init(GPIOB,
&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode
= GPIO_Mode_IN_FLOATING ; //浮空输入
GPIO_InitStructure.GPIO_Speed
= GPIO_Speed_50MHz;
GPIO_Init(GPIOB,
&GPIO_InitStructure);
delay_ms(100);
sum+=HX711_Read_AD();
}
adj
= sum/10;
}
/**************************************************************
24bit HX711读取AD值
***************************************************************/
u32 HX711_Read_AD(void)
{
u32
count;
u8
i;
HX711_SCK = 0; //使能(néng)AD(PD_SCK 置低)
count=0;
while(HX711_READ_SDA); //AD转换未结束则等待,否则开始读取
delay_us(1);
for
(i=0;i<24;i++)
{
HX711_SCK=1;
//PD_SCK 置高(发送脉冲)
count=count<<1;
//下降沿来时变量count左移一位,右侧补零
if(HX711_READ_SDA)
count++;
delay_us(1);
HX711_SCK=0;
//PD_SCK 置低
delay_us(1);
}
HX711_SCK=1;
delay_us(1);
HX711_SCK=0;
count=count^0x800000;//第25个脉冲下降沿来时,转换数据
return
count;
}
/*读取物(wù)品质量,单位0.1g*/
u32 HX711_Read_Weight(void)
{
u32
weight = 0;
u32 count = HX711_Read_AD();
weight=((count-adj)*0.029017+5)/10;//加5是為(wèi)了四色五入,0.029017是称重系数 ,这里的单位是0.1g,如果想更换单位,请将系数乘以或除以10
return
weight;
}
本计算方法依据是通过HX711读出的AD值与物(wù)品质量程線(xiàn)性关系。另注意:每个HX711空载时的AD值都不一样,所以每个设备的HX711模块都需要校零。
作者:Winston
转载请注明出处:/TechnologyNews/c5a0fe24-4fa2-a112-54b6-3a8a33050b89.shtml