完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
通俗易懂之电子称开发软件篇 :程序才是一个项目的灵魂,就像心于人一样。。。
前两篇链接: 通俗易懂之电子称开发立项篇 https://bbs.elecfans.com/jishu_919726_1_1.html 通俗易懂之电子称开发硬件篇 https://bbs.elecfans.com/jishu_919727_1_1.html 这里我们重点讲解下HX711AD采集这块: unsigned long HX711_Read(void) { unsigned long val = 0; unsigned char i = 0; GPIO_SetBits(ADIO,DATA); GPIO_ResetBits(ADIO,CLK); while(GPIO_ReadInputDataBit(ADIO,DATA)); delay_us(1); for(i=0;i<24;i++) { GPIO_SetBits(ADIO,CLK); val=val<<1; delay_us(1); GPIO_ResetBits(ADIO,CLK); if(GPIO_ReadInputDataBit(ADIO,DATA)) val++; delay_us(1); } GPIO_SetBits(ADIO,CLK); val = val^0x800000; delay_us(1); GPIO_ResetBits(ADIO,CLK); delay_us(1); return val; } 简单的128增益采集AD值函数; *********************************** void Get_Maopi() { HX711_Buffer = HX711_Read(); Weight_Maopi = HX711_Buffer/100; } *********************************** void Get_Weight(void) { unsigned int g; HX711_Buffer = HX711_Read(); HX711_Buffer = HX711_Buffer/100; if(HX711_Buffer > Weight_Maopi) { Weight_Shiwu = HX711_Buffer; Weight_Shiwu = Weight_Shiwu - Weight_Maopi; Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.22+0.05); } } *********************************** 简单的去皮和称重函数 下面讲解下重量转换: 基本原理讲解 1. 5kg 传感器 满量程输出电压=激励电压*灵敏度1.0mv/v 例如:供电电压是5v 乘以灵敏度1.0mv/v=满量程5mv。 相当于有5Kg 重力产生时候产生5mV 的电压。 2. 711模块对产生的5mV 电压进行采样。 概述:711模块 A 通道带有128倍信号增益,可以将5mV 的电压放大128倍,然 后采样输出24bit AD 转换的值,单片机通过指定时序将24bit 数据读出。 详细讲解程序计算原理: 小强电子设计 步骤1 :如何计算传感器供电电压 HX711可以在产生 VAVDD 和 AGND 电压,即711模块上的 E+和 E-电压。 该电压通过 VAVDD=VBG(R1 +R2 )/R2计算。 VBG 为模块儿基准电压1.25v R1 = 20K,R2 = 8.2K 因此得出 VAVDD = 4.3V (为了降低功耗,该电压只在采样时刻才有输出, 因此用万用表读取的值可能低 于4.3v,因为万用表测量的是有效值。 ) 步骤2 :如何计算 AD 输出最大值 在4.3V 的供电电压下5Kg 的传感器最大输出电压是4.3v*1mv/V = 4.3mV 经过128倍放大后,最大电压为4.3mV*128 = 550.4mV 经过 AD 转换后输出的24bit 数字值最大为: 550.4mV*2 24 /4.3V ≈ 2147483 步骤3 :程序中数据如何转换 小强电子设计 程序中通过 HX711_Buffer = HX711_Read(); 获取当前采样的 AD 值,最大2147483,存放在 long 型变量 HX711_Buffer 中, 因 long 型变量计算速率和存放空间占用资源太多,固除以100,缩放为 int 型, 便于后续计算。 Weight_Shiwu = HX711_Buffer/100; Weight_Shiwu 最大为21474。 步骤4 :如何将 AD 值反向转换为重力值 。 假设重力为 A Kg, (x<5Kg),测量出来的 AD 值为 y 5Kg 传感器输出,发送给 AD 模块儿的电压为 A Kg * 4.3mV / 5Kg= 0.86A mV 经过128倍增益后为 128 * 0.86A= 110.08AmV 转换为24bit 数字信号为 110.08AmV * 2 24 / 4.3V = 429496.7296A 所以 y = 429496.7296A /100 = 4294.967296 A 因此得出 A = y / 4294.967296 Kg≈ y / 4.30 g 所以得出程序中计算公式 Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.30+0.05); //+0.05是为了四舍五入百分位 特别注意: 因为不同的传感器斜率特性曲线不一样,因此,每一个传感器需要矫正这里 其实最最简单的办法就是 找几个砝码 标定出这个系数,简单实用!
评分
|
||
相关推荐
24 个讨论
|
||
384 浏览 0 评论
398 浏览 0 评论
405 浏览 0 评论
780 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
741 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16996 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-11 14:32 , Processed in 0.609413 second(s), Total 50, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
10340