• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

【CW32模塊使用】HX711稱重傳感器

2024/11/08
2055
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

該模塊采用24位高精度的A/D轉(zhuǎn)換器芯片hx711,是一款專為高精度電子秤而設(shè)計(jì)的,具有兩路模擬通道輸入,內(nèi)部集成128倍增益可編程放大器。輸入電路可配置為提供橋壓的電橋式(如壓力、稱重)傳感器模式,是一款理想的高精度、低成本采樣前端模塊。

一、模塊來(lái)源

資料下載鏈接:https://pan.baidu.com/s/1V2NdHCmvusPDhBp00VvIvQ

密碼:j2sh

規(guī)格參數(shù)

工作電壓:2.6V-5.5V

工作電流:100~1500uA

ADC精度:24位

輸出方式: 串行輸出

管腳數(shù)量:4 Pin

以上信息見(jiàn)廠家資料文件

移植過(guò)程

我們的目標(biāo)是將例程移植至CW32F030C8T6開(kāi)發(fā)板上【能夠判斷測(cè)量10Kg以內(nèi)的稱重】。首先要獲取資料,查看數(shù)據(jù)手冊(cè)應(yīng)如何實(shí)現(xiàn)讀取數(shù)據(jù),再移植至我們的工程。

3.1查看資料

3.2引腳選擇

接線表

3.3查移植至工程

移植步驟中的導(dǎo)入.c和.h文件與【CW32模塊使用】DHT11溫濕度傳感器相同,只是將.c和.h文件更改為bsp_hx711.c與bsp_hx711.h。這里不再過(guò)多講述,移植完成后面修改相關(guān)代碼。bsp_hx711

在文件bsp_hx711.c中,編寫(xiě)如下代碼。

/* * Change Logs: * Date           Author       Notes * 2024-06-20     LCKFB-LP    first version */
#include "bsp_hx711.h"#include "stdio.h"


unsigned int HX711_Buffer;unsigned int Weight_Maopi;int Weight_Shiwu;unsigned char Flag_Error = 0;
//校準(zhǔn)參數(shù)//因?yàn)椴煌膫鞲衅魈匦郧€不是很一致,因此,每一個(gè)傳感器需要矯正這里這個(gè)參數(shù)才能使測(cè)量值很準(zhǔn)確。//當(dāng)發(fā)現(xiàn)測(cè)試出來(lái)的重量偏大時(shí),增加該數(shù)值。//如果測(cè)試出來(lái)的重量偏小時(shí),減小改數(shù)值。//該值可以為小數(shù)#define GapValue 207.00

/****************************************************************** * 函 數(shù) 名 稱:HX711_GPIO_Init * 函 數(shù) 說(shuō) 明:HX711的引腳初始化 * 函 數(shù) 形 參:無(wú) * 函 數(shù) 返 回:無(wú) * 作       者:LC * 備       注:無(wú)******************************************************************/void HX711_GPIO_Init(void){    GPIO_InitTypeDef GPIO_InitStruct; // GPIO初始化結(jié)構(gòu)體
    RCC_HX711_ENABLE();        // 使能GPIO時(shí)鐘
    GPIO_InitStruct.Pins = GPIO_SCK|GPIO_DT;    // GPIO引腳    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽輸出    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;    // 輸出速度高    GPIO_Init(PORT_HX711, &GPIO_InitStruct);    // 初始化}
/****************************************************************** * 函 數(shù) 名 稱:HX711_Read * 函 數(shù) 說(shuō) 明:讀取HX711 * 函 數(shù) 形 參:無(wú) * 函 數(shù) 返 回:讀取到的值 * 作       者:LC * 備       注:無(wú)******************************************************************/unsigned int HX711_Read(void)        //增益128{        unsigned long count;        unsigned char i;
        DT_OUT();        delay_us(5);
        DT(1);        delay_us(4);        SCK(0);        count=0;
        DT_IN();        delay_us(5);
        while(DT_GET());        for(i=0;i<24;i++)        {            SCK(1);            count=count<<1;            delay_us(4);            SCK(0);            if(DT_GET())                count++;            delay_us(4);        }        SCK(1);        count=count^0x800000;//第25個(gè)脈沖下降沿來(lái)時(shí),轉(zhuǎn)換數(shù)據(jù)        delay_us(4);        SCK(0);        return(count);}
/****************************************************************** * 函 數(shù) 名 稱:Get_Maopi * 函 數(shù) 說(shuō) 明:測(cè)量初始重量 * 函 數(shù) 形 參:無(wú) * 函 數(shù) 返 回:無(wú) * 作       者:LC * 備       注:后續(xù)的重量都是以該初始重量為0值,因此在初始化時(shí),秤上不要放任何東西******************************************************************/void Get_Maopi(void){        Weight_Maopi = HX711_Read();}/****************************************************************** * 函 數(shù) 名 稱:Get_Weight * 函 數(shù) 說(shuō) 明:稱重 * 函 數(shù) 形 參:無(wú) * 函 數(shù) 返 回:稱重值,單位g * 作       者:LC * 備       注:無(wú)******************************************************************/float Get_Weight(void){    float Weight=0;    HX711_Buffer = HX711_Read();    if(HX711_Buffer > Weight_Maopi)    {        Weight_Shiwu = HX711_Buffer - Weight_Maopi; //獲取實(shí)物的AD采樣數(shù)值。        Weight = (float)Weight_Shiwu / (float)GapValue;//計(jì)算實(shí)物的實(shí)際重量        //因?yàn)椴煌膫鞲衅魈匦郧€不一樣,因此,每一個(gè)傳感器需要矯正這里的GapValue這個(gè)除數(shù)。        //當(dāng)發(fā)現(xiàn)測(cè)試出來(lái)的重量偏大時(shí),增加該數(shù)值。        //如果測(cè)試出來(lái)的重量偏小時(shí),減小改數(shù)值。    }    return Weight;}

在文件bsp_hx711.h中,編寫(xiě)如下代碼。

/* * Change Logs: * Date           Author       Notes * 2024-06-20     LCKFB-LP    first version */#ifndef _BSP_HX711_H_#define _BSP_HX711_H_
#include "board.h"
//端口移植#define RCC_HX711_ENABLE()  __RCC_GPIOB_CLK_ENABLE()#define PORT_HX711          CW_GPIOB
#define GPIO_SCK            GPIO_PIN_8#define GPIO_DT             GPIO_PIN_9
//設(shè)置DT輸出模式#define DT_OUT()     {                                GPIO_InitTypeDef GPIO_InitStruct;                                        GPIO_InitStruct.Pins = GPIO_DT;                                         GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;                              GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;                                 GPIO_Init(PORT_HX711, &GPIO_InitStruct);                            }//設(shè)置DT輸入模式#define DT_IN()      {                                GPIO_InitTypeDef GPIO_InitStruct;                                        GPIO_InitStruct.Pins = GPIO_DT;                                         GPIO_InitStruct.Mode = GPIO_MODE_INPUT;                                 GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;                                 GPIO_Init(PORT_HX711, &GPIO_InitStruct);                           }//獲取DT引腳的電平變化#define DT_GET()        GPIO_ReadPin(PORT_HX711, GPIO_DT)//DT與SCK輸出#define DT(x)           GPIO_WritePin(PORT_HX711,GPIO_DT, (x?GPIO_Pin_SET:GPIO_Pin_RESET))#define SCK(x)          GPIO_WritePin(PORT_HX711,GPIO_SCK,(x?GPIO_Pin_SET:GPIO_Pin_RESET))
void HX711_GPIO_Init(void);float Get_Weight(void);void Get_Maopi(void);#endif

?04移植驗(yàn)證

在自己工程中的main主函數(shù)中,編寫(xiě)如下。

/* * Change Logs: * Date           Author       Notes * 2024-06-20     LCKFB-LP    first version */#include "board.h"#include "stdio.h"#include "bsp_uart.h"#include "bsp_hx711.h"
int32_t main(void){    board_init();        // 開(kāi)發(fā)板初始化
    uart1_init(115200);        // 串口1波特率115200
    HX711_GPIO_Init();
    Get_Maopi();  //稱毛皮重量    delay_ms(500);    Get_Maopi();  //重新獲取毛皮重量
    printf("startrn");    while(1)    {        printf("w = %.2fgrn",Get_Weight());        delay_ms(500);
    }}

移植現(xiàn)象:往秤上放一個(gè)200g的砝碼,輸出稱重后的結(jié)果。

模塊移植成功案例代碼:

鏈接:https://pan.baidu.com/s/1Wq242kTzWVpcDTBsCRDyYg?pwd=LCKF

提取碼:LCKF

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄

以開(kāi)放、共享、互助為理念,致力于構(gòu)建武漢芯源半導(dǎo)體CW32系列MCU生態(tài)社區(qū)。無(wú)論是嵌入式MCU小自還是想要攻破技術(shù)難題的工程師,亦或是需求解決方案的產(chǎn)品經(jīng)理都可在CW32生態(tài)社區(qū)汲取營(yíng)養(yǎng)、共同成長(zhǎng)。

B站