24小時聯(lián)系電話:18217114652、13661815404
中文
技術(shù)專題
單片機(jī)開發(fā)之HX711的計算
最近接了一個單片機(jī)開發(fā)項目,需要使用HX711芯片來處理稱重傳感器的值。作為一個多年老司機(jī),在HX711官網(wǎng)上沒找到稱重值的計算方法,網(wǎng)上的資料也不全。因此在調(diào)試出HX711的稱重值之后,將項目過程做一個記錄,為后面開發(fā)的人提供微薄的幫助。
硬件電路在此略過不提了,簡略說下HX711在STM32單片機(jī)開發(fā)的過程。
1、初始化硬件HX711_init;
2、實(shí)現(xiàn)HX711 AD值讀取函數(shù)HX711_Read_AD;
3、記錄沒有物品時HX711_Read_AD讀取的AD值adj;
4、編譯燒錄運(yùn)行程序,將一個質(zhì)量為M的物品放到托盤上,HX711_Read_AD讀出物品的AD值A1。可計算得到稱重系數(shù) γ=M/(A1-adj);
5、將γ常量系數(shù)寫入到代碼中,實(shí)現(xiàn)HX711_Read_Weight函數(shù),例如HX711_Read_AD讀取待測物的AD值是A,待測物品質(zhì)量m=(A-adj)*γ = M*(A-adj)/(A1-adj);
以下代碼是HX711在STM32F103上的代碼實(shí)現(xiàn),已經(jīng)過驗證:
#define HX711_SCK PBout(13) //SCK
#define HX711_READ_SDA PBin(12)
//輸入SDA
static u32 adj = 0;//無物稱重時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; //使能AD(PD_SCK 置低)
count=0;
while(HX711_READ_SDA); //AD轉(zhuǎn)換未結(jié)束則等待,否則開始讀取
delay_us(1);
for
(i=0;i<24;i++)
{
HX711_SCK=1;
//PD_SCK 置高(發(fā)送脈沖)
count=count<<1;
//下降沿來時變量count左移一位,右側(cè)補(bǔ)零
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個脈沖下降沿來時,轉(zhuǎn)換數(shù)據(jù)
return
count;
}
/*讀取物品質(zhì)量,單位0.1g*/
u32 HX711_Read_Weight(void)
{
u32
weight = 0;
u32 count = HX711_Read_AD();
weight=((count-adj)*0.029017+5)/10;//加5是為了四色五入,0.029017是稱重系數(shù) ,這里的單位是0.1g,如果想更換單位,請將系數(shù)乘以或除以10
return
weight;
}
本計算方法依據(jù)是通過HX711讀出的AD值與物品質(zhì)量程線性關(guān)系。另注意:每個HX711空載時的AD值都不一樣,所以每個設(shè)備的HX711模塊都需要校零。
作者:Winston
轉(zhuǎn)載請注明出處:http://www.hjthrb.cn/TechnologyNews/c5a0fe24-4fa2-a112-54b6-3a8a33050b89.shtml