stm32使用HX711读电子秤的值

发布者:未来感觉最新更新时间:2022-07-12 来源: csdn关键字:stm32  HX711  电子秤 手机看文章 扫描二维码
随时随地手机看文章

使用HX711变送器模块+5kg的传感器。


#define HX711_DATA  PEin(0)

#define HX711_SCK   PEout(1)


void HX711_init(void)

{

    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOE, &GPIO_InitStructure);

    GPIO_SetBits(GPIOE, GPIO_Pin_1);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOE, &GPIO_InitStructure);

}


uint8_t HX711_GetValue(uint32_t *value)

{

    int retry = 0;

    uint32_t ret = 0;


    HX711_SCK = 0;

    while (retry < 200)

    {

        delay_us(1);

        if (HX711_DATA == 0)

            break;

        else

            retry++;

    }

    if (retry == 200)  return 1;


    for (int i = 0; i < 24; i++)

    {

        HX711_SCK = 1;

        delay_us(1);

        ret = ret << 1;

        HX711_SCK = 0;

        ret |= HX711_DATA;

        delay_us(1);

    }


    HX711_SCK = 1;

    delay_us(1);

    *value = ret ^ 0x800000;

    //*value = ret;

    HX711_SCK = 0;

    delay_us(1);


    return 0;

}


int main(void)

{

    u16 t;

    u16 len;

    u16 times = 0;

    uint32_t value = 0;

    delay_init();            //延时函数初始化

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

    uart_init(115200);   //串口初始化为115200

    LED_Init();              //LED端口初始化

    KEY_Init();          //初始化与按键连接的硬件接口

    HX711_init();

    HX711_GetValue(&value);

    printf("0x%xrn", value);

    delay_ms(500);

    HX711_GetValue(&value);

    printf("0x%xrn", value);

    delay_ms(500);

    HX711_GetValue(&value);

    printf("0x%xrn", value);

    delay_ms(500);

    HX711_GetValue(&value);

    printf("0x%xrn", value);

    delay_ms(500);

    HX711_GetValue(&value);

    printf("0x%xrn", value);

    delay_ms(500);

    uint32_t zero = value;

    printf("0x%xrn", value);

    while (1)

    {

        if (HX711_GetValue(&value) == 0)

        {

            printf("0x%xt%drn", value, value - zero);

            if (value < zero) value = zero;

            uint32_t weight = (value - zero) / 430;

            weight = weight / 0.89;

            printf("%dtrn", weight);

        }

        else

        {

            printf("read errorrn");

        }

        delay_ms(1000);

    }

}


代码中的*value = ret^0x800000;相当于把传感器读到的值加了0x800000,即原来的差分读出来假设是-2.5V ~ +2.5V,现在变成了0V ~ 5V,转换成了无符号数更加好计算。

在这里插入图片描述
在这里插入图片描述

测量出来的重量uint32_t weight = (value - zero) / 430;,由于应变片工艺问题,可能其值并不等效于,最终通过砝码标定,得出重量:weight = weight / 0.89;

关键字:stm32  HX711  电子秤 引用地址:stm32使用HX711读电子秤的值

上一篇:LAN8720A移植笔记
下一篇:stm32仿真设置

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved