在线采纳求解c51单片机程序100例什么叫24位ad模块,这个24位什么意思,比如HX711

电子秤专用HX711模块原理图等资料下载
& & & &该专用HX711模块采用24位高精度的A/D转换器芯片hx711,是一款专为高精度电子称而设计的,具有两路模拟通道输入,内部集成128倍增益可编程放大器。输入电路可配置为提供桥压的电桥式(如压力、称重)传感器模式,是一款理想的高精度、低成本采样前端模块。HX711模块应用电路参考:以下为20kg电子称实例效果图:附件内容包括:
电路相关文件(请在PC端查看下载)
扫码关注电路设计技能
电路城电路折扣劵获取途径:
电路城7~10折折扣劵(全场通用):对本电路进行评分获取;
电路城6折折扣劵(限购≤100元电路):申请成为卖家,上传电路,审核成功后获取。
版权声明:电路城所有电路均源于网友上传或网上搜集,供学习和研究使用,其版权归原作者所有,对可以提供充分证据的侵权信息,本站将在确认后24小时内删除。对本电路进行投诉建议,点击反馈给电路城。
使用说明:直接使用附件资料或需要对资料PCB板进行打样的买家,请先核对资料的完整性,如果出现问题,电路城不承担任何经济损失!
大家都在看:
BME680结合了温度,湿度,压力和气体传感!来自博世的期待已久的BME680为您提供了一个小包装中所需的所有环境感应功能。 这个小传感器包含温度,湿度,气压和VOC气体传感功能。 全部通过SPI或I2C!与BME280和BMP280一样,博世的这款精密传感器可以测量湿度,精度为±3%,气压为±1 hPa绝对精度,温度精度为±1.0°C。 由于压力随高度而变化,压力测量结果如此之好,您还可以将其用作±1米或更高精度的高度计!BME680将这些传感器带到下一步,因为它包含一个小型MOX传感器。加热的金属氧化物基于空气中的挥发性有机化合物(VOC)而改变电阻,因此可用于检测气体和酒精,如乙醇,酒精和一氧化碳,并执行空气质量测量。请注意,它会给你一个阻力值,并且总VOC含量不能区分气体或酒精。请注意,此传感器与所有VOC /气体传感器一样,具有可变性,为了获得精确的测量结果,您需要对其与已知来源进行校准!这就是说,对于一般的环境传感器,它会给你一个关于趋势和比较的好主意。我们建议您在第一次接收到“烧入”时运行该传感器48小时,然后每次使用传感器时,在所需模式下运行30分钟。这是因为传感器的灵敏度水平在早期使用时会改变,随着MOX加热到其基线读数,阻力会随着时间缓慢上升。
来自:时间:
基于51单片机的电子秤设计功能:1.可以实现为去皮按键。2.可以进行校准。3.精度要求高。附件资料截图:
来自:时间:
此设计是以STC89C51单片机为控制核心,称重传感器组输出信号,并利用高精度24位HX711作为A/D转换芯片以及用LCD1602来显示数据的一款多功能电子秤。其将被广泛应用日常生活有各种应用场合,尤其商品杂货店、工农业、医疗等领域。该电子秤不仅精度高、使用便捷智能、稳定性好而且电子秤的效率很高并将称重与数据处理集中在一个模块,能够满足现实生活中需求应用。附件资料截图:
来自:时间:
该模块采用CS1237作为转换芯片,用于把微小的电压信号转换成具有24位精度的数字信号。模块信号输入端可以接受差分信号,内部具有可编程运算放大器用于放大输入端的弱小信号。该24位ADC转换模块主要应用于多种控制场合,比如电子秤,血压计或智能变换器等。基于CS1237芯片的24位ADC转换专用模块特性:
模块支持差分输入,-0.5VCC 到+0.5VCC模块内置温度传感器简单的两线 SPI 通信芯片内置 PGA,放大倍数可选可用于称重传感器等输出信号处理CS1237-24位ADC转换器接口说明:
来自:时间:
又到了毕业季啦。分享一个单片机电子秤的毕业设计,仿真,电路都有,下载之后就可以用。去皮 校准加 校准减 清除等功能一应俱全。HX711电子秤仿真图如下:电路原理图:
来自:时间:
猜你喜欢(实时推荐最适合你的电路)
电流输出压力传感器变送器工作原理:
当压力信号作用于传感器时,压力传感器将压力信号转换成电信号,经差分放大和输出放大器放大,最后经V/A电压电流转换成与被测介质(液体)的液位压力成线性对应关系的4-20mA标准电流输出信号。PGA300 电流输出压力传感器变送器功能概述:
该设计的压力传感器主要应用于一体式片上系统 (SoC) 解决方案。可驱动 4 至 20 mA 电流回路,并为电阻式电桥传感器提供激励电压。它利用 3 阶压力和温度补偿算法进行线性化。此 TI 设计在不影响精度和性能的情况下,最大限度地减小了压力传感器发送器的典型元件数目和板尺寸。并已进行 IEC61000-4 EMC 和 EMI 测试,支持2.5V 电阻式电桥激励。PGA300 电流输出压力传感器变送器实物截图:PGA300 电流输出压力传感器变送器电路 PCB截图:附件内容截图:
来自:时间:
基于AD7195精密电子秤概述:
AD7195是一款超低噪声、低漂移24位Σ-Δ ADC,内置PGA和驱动器来实现称重传感器的交流激励。该器件将大多数系统构建模块置于芯片内,因此能够简化电子秤设计。在4.7 Hz至4.8 kHz的完整输出数据速率范围内,AD7195均能保持良好的性能,可用于以较低速度工作的电子秤系统,以及较高速电子秤系统。基于AD7195精密电子秤实物电路板截图:如上图所示为电子秤实际的测试设置。为实现最佳系统性能,该测试设置使用一个6线式称重传感器。除激励、接地和2个输出连接外,6线式称重传感器还有2个检测引脚。这些检测引脚分别与惠斯登电桥的高端和低端相连。因此,尽管线路电阻会引起压降,但仍能精确测量该电桥上产生的电压。此外,AD7195具有差分模拟输入,接受差分基准电压。称重传感器差分SENSE线路与AD7195基准电压输入端相连,可构成一个比率式配置,不受电源激励电压的低频变化影响,也无需精密基准电压源。如果采用4线式称重传感器,则不存在检测引脚,ADC基准电压引脚将与激励引脚EXC +和EXC -相连。这种配置中,由于存在线路电阻,EXC +/ EXC –引脚与SENSE+/SENSE-之间将有压降,因此系统不是完全比率式。附件内容截图:
来自:时间:
环路供电电流变送器功能概述:
该环路供电电流变送器, 可将压力传感器的差分电压输出转换为4 mA至20 mA电流 输出。针对各种桥式电压或电流驱动型压力传感器而优 化,仅使用了4个有源器件,总不可调整误差低于1%。环 路电源电压范围为12 V至36 V。该电路的输入具有ESD保护功能,并且可提供高于供电轨 的电压保护,是工业应用的理想选择。环路供电电流变送器实物展示:环路供电电流变送器电路描述:该设计提供完整的4 mA至20 mA变送器压力传感器检测解决方案,整个电路由环路供电。有三个重要的电路级:传感器激励驱动、传感器输出放大器和电压-电流转换器。电路所需总电流为1.82 mA(最大值),如表1所示。因此,可在不超过4 mA最大可用环路电流的情况下使用电桥驱动电流高达2 mA的压力传感器。25°C时最大电路电流鲁棒的环路供电压力传感器信号调理电路,具有4 mA至20 mA输出:附件内容截图:
来自:时间:
该电子秤硬件设计电路主要是基于单片机STC89S52为核心的控制单元实现数据的处理,采用压力传感器对数据进行采集,电子秤专用24位AD转换芯片HX711对传感器采集到的模拟量进行AD转换,转换后的数据送到单片机进行处理显示,数据显示由LCD1602液晶实现,液晶显示效果稳定无闪烁。电子秤实物展示:有键盘输入及液晶显示的结构简图:HX711传感器电子秤程序源码:
来自:时间:
主控:stm32f103c8t6DAC:hx711量程:4KG精度:0.1g输入:矩阵按键输出:nokia5110(lcd12864,需要重写驱动)供电:18650或外置USB供电,当外置USB插入时,自动进入电池充电模式,通过开关选择此刻电池供电还是USB供电(可同时给电池充电)资料分类:电路设计,代码设计,亚克力图纸注意事项:传感器需采用质量好的高精度的传感器,即针对于mg级别能够识别出来STM32高精度电子秤实物展示:整个硬件设计包括2部分,主控板与传感器采集板主控板 PCB 3D截图展示:硬件设计附件内容见截图:STM32 高精度电子秤程序源码有详细的中文注释,见截图展示:
来自:时间:
2015 年 08 月 28日
xiaochaoniba购买了:
llyzero购买了:
xjbd076416购买了:
嗷嗷叫的老马购买了:
yaningli购买了:
笑对人生ㄟ购买了:
crabzhou购买了:
nume531fa购买了:
免费下载!
您想购买此电路吗?,上传电路,审核成功后获取电路城6折折扣劵。
6折折扣劵只能购买小于100元(含100元)的电路。查看: 138230|回复: 231
基于24位AD转换模块HX711的重量称量实验(已补充皮重存储,线性温度漂移修正)
本帖最后由 shenhaiyu 于
10:44 编辑
以前在X宝上买过一个称重放大器,180+大洋。原理基本上就是把桥式拉力传感器输出的mV级信号放大到5V供单片机读取。连接实验电路的时候很完美,能实现重量的转换,但是实际组装后却发现这种A/A模块受到的干扰太严重了,包括电源的干扰,导线长短的干扰,导线位置变化的干扰,无线电的干扰等等等等……实在是恼人。
后来感觉是思路错误了,就不该用模拟信号来传输,于是决定使用A/D模块来把重量转换成数字信号传输,A/D模块就固定在离传感器最近的地方,将输出的数字信号用导线传输给单片机,这样能很大程度减小各种干扰。
在网上搜了一下A/D模块,基本上有两种廉价成品:HX711和PCF8591,它们分别是8位转换模块和24位转换模块。
PCF8591.png (319.11 KB, 下载次数: 523)
11:34 上传
功能简介: 基于I2C接口的AD/DA转换模块,8位精度,四通道AD,单通道DA,电压输出型
最大特点: 1. 支持两种接口类型接入目标板:排针或排座
& && && &&&2. 支持I2C总线级联(通过排针、排座对接的方法,可同时使用多个I2C模块)
典型应用: 低速AD/DA转换
主要资源: PCF8591,I2C接口排针,I2C接口排座,可调电阻,AD输入口,DA输出口,地址跳线端口
HX711.jpg (149.81 KB, 下载次数: 381)
23:35 上传
模块工作电压:4.8-5.5v
典型电流 1.6mA
体积:长 2.9cm * 宽 1.7cm * 高 0.4cm
● 带金属屏蔽,强抗干扰,预留MCU(STC15F104)位置,可自行升级二次开发。
● 两路可选择差分输入
● 片内低噪声可编程放大器,可选增益为32、64 和128
● 片内稳压电路可直接向外部传感器和芯片内A/D 转换器提供电源
● 片内时钟振荡器无需任何外接器件,必要时也可使用外接晶振或时钟
● 上电自动复位电路
● 简单的数字控制和串口通讯:所有控制由管脚输入,芯片内寄存器无需编程
● 可选择10Hz 或80Hz 的输出数据速率
● 同步抑制50Hz 和60Hz 的电源干扰
● 耗电量(含稳压电源电路):
典型工作电流:& 1.7mA, 断电电流:& 1μA
● 工作电压范围:2.6 ~ 5.5V
● 工作温度范围:-20 ~ +85℃
HX711n.jpg (77.27 KB, 下载次数: 440)
11:46 上传
===============================我叫分割线=================================
我要使用的拉力传感器为传统的桥式传感器,量程1kg,想要达到1g的精度,这就要求模块输出位数至少为10位(2^10=1024),8位的PCF8591无法胜任,因为它的精度只有2^8=256位。所以决定使用HX711作为我的A/D模块,而且我选的HX711模块还带屏蔽壳,正符合我的要求。
先来看一下该模块的常用接法:
1.jpg (168.8 KB, 下载次数: 417)
11:45 上传
通道 A 模拟差分输入可直接与桥式传感器的差分输出相接。由于桥式传感器输出的信号较小,为了充分利用A/D 转换器的输入动态范围,该通道的可编程增益较大,为128 或64。这些增益所对应的满量程差分输入电压分别±20mV 或±40mV。
通道B 为固定的32 增益,所对应的满量程差分输入电压为±80mV。通道B 应用于包括电池在内的系统参数检测。
数字电源(DVDD)应使用与MCU 芯片相同的的数字供电电源。HX711 芯片内的稳压电路可同时向 A/D 转换器和外部传感器提供模拟电源。稳压电源的供电电压(VSUP)可与数字电源(DVDD)相同。稳压电源的输出电压值(VAVDD)由外部分压电阻R1、R2 和芯片的输出参考电压VBG 决定(图1),VAVDD=VBG(R1+R2)/R2。应选择该输出电压比稳压电源的输入电压(VSUP)低至少100mV。
如果不使用芯片内的稳压电路,管脚VSUP应连接到DVDD 或AVDD 中电压较高的一个管脚上。管脚VBG 上不需要外接电容,管脚VFB 应接地,管脚BASE 为无连接。时钟选择如果将管脚 XI 接地,HX711 将自动选择使用内部时钟振荡器,并自动关闭外部时钟输入和晶振的相关电路。这种情况下,典型输出数据速率为10Hz 或80Hz。如果需要准确的输出数据速率,可将外部输入时钟通过一个20pF 的隔直电容连接到XI管脚上,或将晶振连接到XI 和XO 管脚上。这种情况下,芯片内的时钟振荡器电路会自动关
闭,晶振时钟或外部输入时钟电路被采用。此时,若晶振频率为11.0592MHz, 输出数据速率为准确的10Hz 或80Hz。输出数据速率与晶振频率以上述关系按比例增加或减少。使用外部输入时钟时,外部时钟信号不一定需要为方波。可将MCU 芯片的晶振输出管脚上的时钟信号通过20pF 的隔直电容连接到XI管脚上,作为外部时钟输入。外部时钟输入信号的幅值可低至150mV。
串口通讯线由管脚PD_SCK 和DOUT 组成,用来输出数据,选择输入通道和增益。当数据输出管脚DOUT 为高电平时,表明
A/D 转换器还未准备好输出数据,此时串口时钟输入信号PD_SCK 应为低电平。当DOUT 从高电平变低电平后,PD_SCK 应输入25 至27 个不等的时钟脉冲(图二)。其中第一个时钟脉冲的上升沿将读出输出24 位数据的最高位(MSB),直至第24 个时钟脉冲完成,24 位输出数据从最高位至最低位逐位输出完成。第25至27 个时钟脉冲用来选择下一次A/D 转换的输入通道和增益,参见表三。
2.jpg (28.18 KB, 下载次数: 264)
11:47 上传
PD_SCK 脉冲数输入通道 增益
3.jpg (63.93 KB, 下载次数: 302)
11:48 上传
PD_SCK 的输入时钟脉冲数不应少于25 或多于27,否则会造成串口通讯错误。当A/D 转换器的输入通道或增益改变时,A/D 转换器需要4 个数据输出周期才能稳定。DOUT 在4 个数据输出周期后才会从高电平变低电平,输出有效数据。
==============================我也是分割线================================
好了,看了这么多原理很多人一定已经晕了,下面来简单的:HX711在Arduino上的使用!
经过各种搜索,仅仅在Google Project上找到了一个
写的 Arduino 库(感谢啊!),功能很完善,而且支持多版本的Arduino。
我备份在这里吧,以免以后找不到:
(1.3 KB, 下载次数: 3954)
11:51 上传
点击文件名下载附件
再来看一下接线:
5.jpg (76 KB, 下载次数: 426)
11:55 上传
1. VCC 可以是 2.6-5.5 中的任意值,因为我们使用的是 Arduino ,所以直接5V供电,GND 接地。
2. SCK 接 Arduino 的 Pin 9,DT 接 Pin10,这两个接脚可以在程序中改变。
3. E+、E-、A+ 和 A- 分别接桥式传感器的:激励电压正、负,输出电压正、负
&&(E+ 接红线;E- 接黑线;A+ 接绿或蓝线;A- 接白线)。
4. B+ 和 B- 接通道B的传感器,也可以通过分压电路接电源,用来检测电源电压。不用的话最好接GND,不过我试验不接也没问题。
在 Arduino 中打开示例代码,可以看到非常简单:#include &HX711.h& // 包含库的头文件
HX711 hx(9, 10); // 数据接脚定义
void setup() {
&&Serial.begin(9600);
}
void loop()
{
&&double sum = 0;& & // 为了减小误差,一次取出10个值后求平均值。
&&for (int i = 0; i & 10; i++) // 循环的越多精度越高,当然耗费的时间也越多
& & sum += hx.read();&&// 累加
&&Serial.println(sum/10); // 求平均值进行均差
}复制代码给的示例程序非常简单,但是我查看库中含有很多示例没有给出的函数:HX711(byte sck, byte dout, byte amp = 128, double co = 1); // 定义 sck、dout 接脚,增益倍数(默认128)和修正系数(默认1)
void set_amp(byte amp); // 改变增益倍数和对应的通道,至少调用一次 read() 后起作用
bool is_ready(); // 返回 hx711 是否可用,在 read() 函数中会被调用
long read(); // 返回传感器电压值,如果 hx711 不可用则程序会暂停在此函数
double bias_read(); // 返回:(read() - 偏移值) * 修正系数
void tare(int t = 10); // 将皮重添加到偏移值,影响每次 read(); 的调用
void set_co(double co = 1); // 修改修正系数(默认为1)
void set_offset(long offset = 0); // 修改偏移值(默认为0)复制代码可以看到,HX711还可以使用四参数方式定义,同时指定增益倍数及修正系数。在程序运行中还可以随时改变增益倍数,修正系数以及利用偏移值实现去皮重等功能,非常实用。
这里唯一需要解释的是第一个函数,HX711 hx(9, 10); // 这样用说明只定义SCK和DOUT接脚,AMP默认使用A通道的128位增益,修正系数默认为1;
HX711 hx(9, 10, 64); // 这样用说明定义SCK和DOUT接脚,AMP使用A通道的64增益,修正系数默认为1;
HX711 hx(9, 10, 32, 1.4); // 这样用说明定义SCK和DOUT接脚,AMP使用B通道的32位增益,修正系数为1.4;
复制代码这里有关通道和增益倍数的选择,资料中已经提及过,A通道只有128和64位两种增益倍数,对应满载电压为 20mV 和 40mV,B通道只有固定的32位增益倍数,满载电压为 80mV,使用时各个通道输入电压不要超过对应增益倍数的满载电压。当然,程序中额可以随时切换增益倍数和通道,使用set_amp(amp)函数即可,当然,amp 的值只能是 128、64或32。
再强调一句,如果增益倍数选择32位增益,那么读出的数据就是B通道的。
==============================我真的是分割线================================
下面写一个具体应用示例:
我选择的传感器参数如下:
满量程输出电压=激励电压x灵敏度1.0mV/V
例如:供电电压是5V乘以灵敏度1.0mV/V=满量程5mV
实际上我选用的这个模块,当电源电压是5V时,供给传感器的供电电压是4V,于是我的传感器满量程电压为4mV。
这样我就完全可以选择增益倍数最高的A通道128位增益来得到最高的精度。
电子称连接图示:
weight.jpg (51.43 KB, 下载次数: 281)
15:52 上传
图中绿色的为HX711模块,右下角为Arduino UNO,吊臂上挂着的就是桥式传感器(我连接的方式为悬吊式测拉力值),AD模块与传感器间的电线越短越好,过长的话会受到各种干扰,AD模块与Arduino之间的连线最好也不要超过30cm,如果必须加长的话,可以考虑使用带电磁屏蔽的线以及信号放大器。
首先使用库自带的例子测试一下,可以看到悬挂上1kg砝码以及托盘等部件后得到的值为:
复制代码去掉一个500g砝码后值为:
复制代码可以粗略的计算:
1315500 - 742800 = 572700
所以修正系数大概为: 500 / 572700 = 0.
那么程序就可以写成(这时可以适当的减小些读取速度,增加个delay,比如让程序半分钟一读取):
#include &HX711.h&
HX711 hx(9, 10, 128, 0.);
void setup() {
&&Serial.begin(9600);
}
void loop() {
&&delay(500);
&&double sum = 0;
&&for (int i = 0; i & 10; i++)
& & sum += hx.read();
&&Serial.println(sum/10);
}
复制代码编译写入Arduino后,将砝码全部取下,仅保留称体,得到结果是:
复制代码说明偏移值近似为 169600,那么我们在setup中调用偏移值的函数(使用bias_read()读取带修正系数及偏移值的读数,与read()对比作参考):#include &HX711.h&
HX711 hx(9, 10, 128, 0.);
void setup() {
&&Serial.begin(9600);
&&hx.set_offset(169600);
}
void loop() {
&&delay(500);
&&double sum0 = 0;
&&double sum1 = 0;
&&for (int i = 0; i & 10; i++) {
& & sum0 += hx.read();
& & sum1 += hx.bias_read();
&&}
&&Serial.print(sum0/10);
&&Serial.print(& &);
&&Serial.println(sum1/10);
}复制代码这时读出的数据变为:
复制代码然后再放上500g砝码查看一下数据:
500.19
复制代码再放上一个500g砝码试试: 1000.25
1000.26
复制代码可以看到第一位小数发生了大概0.2的变化,这说明我们粗略取的修正系数还不够精确,但是完全符合1g精度的要求。
接下来就是完善程序,增加去皮重的功能了,在Arduino上接一个按钮,为了阻止电磁干扰发生误判断,我采用了常输出高电平的按钮,当按下按钮的时候输出低电平,按钮接在 4 号口上:#include &HX711.h&
HX711 hx(9, 10, 128, 0.);
void setup() {
&&Serial.begin(9600);
&&hx.set_offset(169600);
}
void loop() {
&&if(digitalRead(4) == LOW) hx.tare();
&&double sum0 = 0;
&&double sum1 = 0;
&&for (int i = 0; i & 10; i++) {
& & sum0 += hx.read();
& & sum1 += hx.bias_read();
&&}
&&Serial.print(sum0/10);
&&Serial.print(& &);
&&Serial.println(sum1/10);
}复制代码这样每次按下按钮的时候就可以去皮重了。
============================不要怀疑我是分割线=============================
去皮重也实现了,可是最求完美的我发现每次掉电后都要重新设置皮重,很是麻烦,于是决定将皮重信息存到EEPROM中保存,这样每次上电后就会自动读取存储的皮重信息,从0点开始称量了!
看了一下 HX711 的库,在去皮重的时候只需调用 hx.tare();,tare() 函数内容如下:void HX711::tare(int t) {
& & double sum = 0;
& & for (int i = 0; i & i++) {
& && &&&sum += read();
& & }
& & set_offset(sum / t);
}复制代码里面又调用了 read() 和 set_offset(),read() 不用看了,就是读取一次不带修正系数和偏移量的传感器数据。set_offset() 如下:void HX711::set_offset(long offset) {
& & OFFSET =
}复制代码仅仅是把偏移量赋值给OFFSET,而OFFSET会在 bias_read() 中起作用:double HX711::bias_read() {
& & return (read() - OFFSET) * COEFFICIENT;
}复制代码也就是说,我们在调用 tare() 的时候如果能返回 OFFSET 值就可以存储它用作去皮重了。
不幸的是,HX711库并不允许我们这么做。也许有人要说了,那就调用 tare() 后&&再调用一次 read() 来获取 OFFSET呗。这样可不行,首先调用 tare() 的时候本身就会调用 10 次 read() 并求平均值作为 OFFSET 来使用,我们再调用一次 read() 读出的数既不是之前那个平均值,精度也不如前面的平均值高,就算再求一次 10个 数的平均值,也得不到之前那个 OFFSET了,精度会大打折扣的。
看来唯一的办法就是自己手动改一下 HX711 的库,让它在调用 tare() 的时候直接返回个 OFFSET,这样就解决了我们的需求。为了和官方库区分,我们改一下库的名字,将 HX711 库文件夹复制一份改名为 HX711A ,然后将 HX711.cpp 改为 HX711A.cpp,同样 HX711.h 改为 HX711A.h。然后打开 HX711A.cpp 和 HX711A.h,作出修改。改动如下:
HX711A.cpp:#include &HX711.h&&&-&&&#include &HX711A.h&
void HX711::tare(int t) {& && &- &&&double HX711::tare(int t) {
并在 tare&&函数结尾加入: return sum /
复制代码HX711A.h:
#ifndef HX711_H& & -&& &#ifndef HX711A_H
#define HX711_H& & -&& &#define HX711A_H
void tare(int t = 10);& &-&& &double tare(int t = 10);
复制代码这样在调用 tare() 的时候就可以返回 OFFSET 值了,我们存储 OFFSET值就可以了。
可是新的问题又出现了,OFFSET 值是 double 类型的,而我们 Arduino 提供的 EEPROM 库一次仅能存储1个 char 类型数据。于是上网查资料,发现弘版有个帖子提到了多类型存储,可是相应的库编译后有点庞大,还是自己解决吧,写了个共用体实现的double类型存储,见我的帖子:,可以在程序里加入这一部分内容。
另外,经过查询资料,桥式传感器受温度影响的偏移量也不容忽视,可以在系统中加入温度传感器(例如DS18B20),并在计算重量的时候加入线性温度漂移修正,这里我就不写温度相关代码了,仅给出温度漂移修正的函数供大家参考:#include &HX711A.h&
#include &EEPROM.h&
HX711 hx(9, 10, 128, 0.);
int i=0;
// 用于在 EEPROM 中储存 double 类型数据的共用体
unsigned char *
union data {
&&
&&unsigned char dchar[8];
}
void setup() {
&&Serial.begin(9600);
&&for(i = 0; i & 8; i++) dvalue.dchar[i] = EEPROM.read(i); // 从 EEPROM 读取偏移量
&&hx.set_offset(dvalue.v);& && && && && && && && && && && &// 设置已读取的偏移量
}
void loop() {
&&if(digitalRead(4) == LOW) {
& & dvalue.v = hx.tare();& &&&// 去皮重并读取偏移量
& & hx.set_offset(dvalue.v);&&// 设置已读取的偏移量
& & dpointer = dvalue.&&// 以下程序将偏移量分解并储存到 EEPROM
& & for(i = 0; i & 8; i++) {
& && &EEPROM.write(i,*dpointer);
& && &dpointer++;
& & }
&&}
&&double sum = 0;
&&for (i = 0; i & 10; i++) {
& & sum += hx.bias_read();
&&}
&&Serial.println(sum/10);
&&//Serial.println(sum / 10 * (1 + (20 - temprature) / 10 * 0.02)); // 带线性温度补偿的输出,注意temprature单位为摄氏度。
}
复制代码============================我分割线又回来啦=============================
此外,程序可以增加的功能还有:
2.键盘输入及语音功能
3.标准砝码校准功能(如500g),其实就是修正系数的自我修正功能。
这几个功能我就不再研究了,都不难,留给各位自己发挥的空间吧
By shenhaiyu
楼主强大了
fairsky 发表于
我是1.05版本怎么编译不过呢?
你把HX711库放到IDE的对应目录了么。。。
等待后续,再问桥式拉力传感器是怎么使用的,就是重物压在上面,然后会输出与重量相关的电压?那为什么要两个呢?
后续完成~~~~&
正在写,别急哈。桥式传感器使用一个就可以了,只不过HX711提供了两个通道,可以接两个传感器,也可以把B通道作为电压参考,一般电子称设计中常用到电压修正的&
呵呵,又加了点功能,这回写完了&
继续写后续啦&
这个思路太好了
呵呵,就是介绍的详细点,思路很混乱&
感谢Shenhaiyu提供了HX711库!
太巧合了!上周我也刚好买了10片HX711,准备做拉力设备用.因为等待拉力机台和推拉力传感器,闲来就把以前报废的2000g电子天平拆了,利用旧的2000g传感器,HX711和ARDUINO,在卖家提供C程序的基础上修改成ARDUINO,也加了去皮按键,利用LCD1602显示,在量程范围内能稳定在0.2g(可能接线长,没有注意干扰),修正系数感觉也和LZ的很接似,我是用十次24位读数的平均值除874点几可惜程序都在单位的电脑里.小数部分记不清了.
有时间我也利用ARDUINO库完善一下自己的程序.
EEPROM存储皮重信息搞定了,看看我的程序吧&
EEPROM存double数据有点麻烦,但是能实现。目前有个思路就是把修正系数拆解成:(87300+x)/10e8,这样X就差不多能在0-255之间变化了,存到EEPROM中没有压力&
呵呵,可以的话把你的程序共享出来呗,大家一起交流一下。我正研究如何将修正系数和偏移量存入EEPROM以备下次读取呢&
很好的思路啊
谢谢支持!&
思路很好,我以前用AVR(非Arduino)做过简单的电子秤!楼主继续!
版主,帖子基本上写完了,来看看我存储皮重的思路吧,呵呵&
嗯,以后慢慢写,加上DS18B20的温度补偿,曲线回归滤波算法之类的,没准能用上PID呢&
Randy 发表于
思路很好,我以前用AVR(非Arduino)做过简单的电子秤!楼主继续!
好的,辛苦了!
不错,我画过基于ADS1231的板子和用51写过称重程序,国产的HX711廉价很多,不过我以前的芯片是申请的样片,嘿嘿
哈哈,靠申请样片搞设计绝对是个省钱的思路&
Saint 发表于
不错,我画过基于ADS1231的板子和用51写过称重程序,国产的HX711廉价很多,不过我以前的芯片是申请的样片, ...
除了 ADS1231 外还有什么好AD模块吗?
Saint 发表于
我觉得ADS1231对于测量体重精确度已经够高了,不用这么高的精度,这个芯片更多是做精确测量。我那个时候字 ...
是啊,我这个就是高精度测量,实在是没有别的选择了……
zhuangpeng 发表于
请教:我已经购买了HX711,现想给女朋友做一个人体称,请问购买哪一款称重传感器好?能帮忙发个T宝链接吗? ...
你上X宝搜&&人体秤称重传感器&&就能搜出来好大一堆
悠然小调 发表于
如果使用2个传感器,用到了两个通道,想同步显示两个通道的数值,程序应该如何修改?
首先,HX711的芯片设计的通道B为固定的32增益,所对应的满量程差分输入电压为±80mV。其次通道B通常应用于包括电池在内的系统参数检测,不建议使用。
至于通道B的使用,前文有个图:
看HX711库中的HX711.cpp,17-19行就是AMP选择,在35行起作用,也就是说,定义HX711对象时,如果想选择通道和增益,那么必须以4参数形式定义:
HX711 hx(A0, A1, 64, 1);& &// SCK, DT, AMP, co
其中AMP就是增益和通道选择,
AMP=32 B通道,32增益
AMP=64 A通道,64增益
AMP=128 A通道,128增益
双参数定义时,AMP默认为128,co为1
sunpower 发表于
太棒了,不错!
谢谢支持~~~~~~~~~
lz_kwok 发表于
我准备用stm32来做一个高精度电子秤,楼主提供了很好的思路
谢谢,但是你想选用什么AD模块呢?
lz_kwok 发表于
初步考虑也是用HX711,但一般电子称通用的好像是台湾的一款AD模块,具体名称我记不清了
感觉711还是挺好用的,可能是我用过的ad比较少的原因吧
hxkdtc 发表于
大神,为什么我输入代码提示错误?原因在哪里?
Serial:3: error: 'HX711' does not name a type
你连711的库都没用,当然出错了
shenhaiyu 发表于
除了 ADS1231 外还有什么好AD模块吗?
我觉得ADS1231对于测量体重精确度已经够高了,不用这么高的精度,这个芯片更多是做精确测量。我那个时候字从TI官网上根据自己的需求选择,然后找的一块芯片,貌似做体重测量最多的就是你用的这个过程的芯片
请问楼主我连接好以后用例程输出总是不变是怎么回事?一直输出-,传感器一侧固定,一侧悬空了,压力在悬空的一侧,求救求救
估计是你接线或者通讯有问题,没有详细描述没法帮你喽&
Saint 发表于
不错,我画过基于ADS1231的板子和用51写过称重程序,国产的HX711廉价很多,不过我以前的芯片是申请的样片, ...
我正在用hx711,我用52单片机做的求52单片机c程序
这个。。。我只会Arduino&
板主真的很厲害
谢谢支持哈~~~&
hxkdtc 发表于
嗯,已经解决了,非常感谢
但是新的问题又来了,先全部接好后,上传代码,但是反馈的数字全部是0.手按 ...
你得把你代码贴上来才能帮你分析啊
hxkdtc 发表于
嗯,已经解决了,非常感谢
但是新的问题又来了,先全部接好后,上传代码,但是反馈的数字全部是0.手按 ...
还有看你最后一张图,接线貌似不对吧,E+为什么接传感器的黑线,红黑线应该对调才对,而且你都没焊接,有可能是解除不良
lz_kwok 发表于
请问楼主在用HX711的时候,有没有遇到需要挺长一段时间数据才能稳定显示的情况?我用stm32,开机后几乎十 ...
没遇到这个问题,我用的时候上电就很稳定啊。是不是传感器的问题?
本帖最后由 shenhaiyu 于
08:03 编辑
mypsddhm 发表于
你好,楼主,我现在还是没明白HX711的AD参考电压到底是哪一个,求解,谢谢
你可以上百度搜一下&&hx711(海芯)&&的datasheet,里面写得很细了,第六脚是参考电源输出。
mypsddhm 发表于
你好,我能跟你交流一下HX711的数据处理问题吗,我的扣扣,谢谢
在论坛里交流也很方便么
Powered by

我要回帖

更多关于 单片机编程入门 的文章

 

随机推荐