找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1343|回复: 4
打印 上一主题 下一主题
收起左侧

单片机hx711做200kg体重秤,AD值一直返回8388608 是2的23次方 求助

[复制链接]
跳转到指定楼层
楼主
ID:1024266 发表于 2022-5-6 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用hx711做ad转换,四个半桥50kg的连接成全桥,主ic用的GD32F330,引脚配置和具体读ad代码我放下面

单片机源程序如下:
unsigned long HX711_Read(void) //选择芯片工作方式并进行数据读取
{
unsigned long count;   ///储存输出值  
unsigned char i;     
//   high--高电平 1  low--低电平 0  
                 gpio_bit_set(GPIOA, GPIO_PIN_2);     //digitalWrite作用: DT=1;
                 delay_us(1); //延时 1微秒  
                 gpio_bit_reset(GPIOA, GPIO_PIN_3);    //digitalWrite作用: SCK=0;
                 delay_us(1);   //延时 1微秒  
                 count=0;
                        while(gpio_output_bit_get(GPIOA, GPIO_PIN_3));    //当DT的值为1时,开始ad转换
                        for(i=0;i<24;i++)   ///24个脉冲,对应读取24位数值
                 {
                         gpio_bit_set(GPIOA, GPIO_PIN_3);    //digitalWrite作用: SCK=0;
                                                                                                                                                /// 利用 SCK从0--1 ,发送一次脉冲,读取数值
                        delay_us(1);  //延时 1微秒  
                        count=count<<1;    ///用于移位存储24位二进制数值
                        gpio_bit_reset(GPIOA, GPIO_PIN_3);    //digitalWrite作用: SCK=0;为下次脉冲做准备
                        delay_us(1);
                        if(gpio_output_bit_get(GPIOA, GPIO_PIN_3))    ///若DT值为1,对应count输出值也为1
                         count++;
                 }
                        gpio_bit_set(GPIOA, GPIO_PIN_3);    ///再来一次上升沿 选择工作方式  128增益
                 count ^= 0x800000;   //按位异或  不同则为1   0^0=0; 1^0=1;
                ///对应二进制  1000 0000 0000 0000 0000 0000  作用为将最高位取反,其他位保留原值
                 delay_us(1);
                 gpio_bit_reset(GPIOA, GPIO_PIN_3);      /// SCK=0;     
                 delay_us(1);  //延时 1微秒  
                 return(count);     ///返回传感器读取值
}

PA2是DT脚 PA3是SCK

void gpio_config(void)
{
    rcu_periph_clock_enable(RCU_GPIOA);
   gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_2);   
   gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_3);

                gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_2);
    gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3);
    gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);

                gpio_bit_set(GPIOA, GPIO_PIN_3);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:883242 发表于 2022-5-6 14:13 | 只看该作者
输入电压有多高?
回复

使用道具 举报

板凳
ID:162343 发表于 2022-7-5 14:44 | 只看该作者
这个问题,大概率是应变片接线错误造成的,用万用表测量一下应变片三条线两两之间的阻值,找到半桥的公共端,把四个公共端接到E+、E-、A+、A-上就可以了,其他的线相互连接组成一个全桥。
回复

使用道具 举报

地板
ID:1113734 发表于 2024-5-19 21:05 | 只看该作者
请问大佬解决了吗?
回复

使用道具 举报

5#
ID:1034262 发表于 2024-5-20 10:32 | 只看该作者
HX711输出的是补码,读到23次方说明已经溢出了,看看输入的电压是不是过大,传感器接错线了?不放重物时传感器输出电压一般不超过1mV的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表