本项目使用主控stm32f103c8t6(最小系统核心板),称重模块hx711,串口打印到电脑端显示数值。
这个传感器内部是一组半桥应变片,使用方法可以有以下三种:
1、使用一只传感器配合外接电阻组成全桥测量,量程为一个传感器的量程:50kg。对外接电阻要求较高。
2、使用二只传感器组成全桥测量,量程为两只传感器的量程之和:50kgx2=100kg
3、使用四只传感器组成全桥测量,量程为四只传感器的量程之和:50kgx4=200kg
我的称重组成是4个应变片半桥传感器串联组成一个桥路,供电后输出一组模拟电压信号。
连线: 黑线连信号正 白(黄)线连信号负 红线连 电源 。这里的V+连接E+,V-连接E-,Vout+连A+,Vout-连A-;hx711的另一边vcc接5V,gnd连gnd,SCK 和DT连自己设的引脚
桥结构图如下:
单片机称重AD模块-HX711
这个模块采用24位高精度的A/D转换器芯片hx711,是一款专为高精度电子称而设计的,具有两路模拟通道输入,内部集成128倍增益可编程放大器。输入电路可配置为提供桥压的电桥式(如压力、称重)传感器模式,是一款理想的高精度、低成本采样前端模块;
代码:
void Init_HX711pin(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //HX711_SCK GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOC //HX711_DOUT GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //输入上拉 GPIO_Init(GPIOB, & GPIO_InitStructure); //GPIO_SetBits(GPIOB, GPIO_Pin_1); //初始化设置为0 } u32 HX711_Read(void) //增益128 { u32 count; u8 i; HX711_DOUT = 1; delay_us(1); HX711_SCK = 0; count = 0; while (HX711_DOUT); for (i = 0; i < 24; i++) { HX711_SCK = 1; count = count << 1; delay_us(1); HX711_SCK = 0; if (HX711_DOUT) count++; delay_us(1); } HX711_SCK = 1; count=count^0x800000;//第25个脉冲下降沿来时,转换数据 delay_us(1); HX711_SCK = 0; return(count); } void Get_Maopi(void) { Weight_Maopi = HX711_Read(); } //**************************************************** //称重 //**************************************************** void Get_Weight(void) { HX711_Buffer = HX711_Read(); if(HX711_Buffer > Weight_Maopi) { Weight_Shiwu = HX711_Buffer; Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取实物的AD采样数值。 printf("实物ad值是:%d\r\n",Weight_Shiwu); Weight_Shiwu = (s32)((float)Weight_Shiwu/GapValue-0.0383); //计算实物的实际重量 //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。 //当发现测试出来的重量偏大时,增加该数值。 //如果测试出来的重量偏小时,减小改数值。 } }
int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 初始化RGB彩灯 */ LED_GPIO_Config(); delay_init(); /* 初始化USART 配置模式为 115200 8-N-1 */ USART_Config(); Init_HX711pin(); //HX711初始化 Get_Maopi(); delay_ms(1000); Get_Maopi(); printf("皮毛值是:%d\r\n",Weight_Maopi); while(1) { LED0 =~LED0; Get_Weight(); delay_ms(4000); weight=(float)Weight_Shiwu/1000; printf("重量值是:%0.3fkg\r\n",weight); printf("ad值是:%d\r\n",Weight_Shiwu); } }
代码中GapValue要自己根据传感器值的不同来调试,我是用一个5kg和一个20kg的重物来测的,因为ad值的重物的重量是有着线性关系的,相当于解一个二元一次方程组,提供二元一次方程计算器。 2个重物之间的值尽量大一些,准度会稍微准一点。
程序源码和电子秤HX711AD模块资料 :
链接:https://pan.baidu.com/s/1-tT6jRfDV8SAvVVFOBH8qg
提取码:dd11
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章