找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 38775|回复: 19
收起左侧

基于24位AD转换模块HX711的重量称量实验

  [复制链接]
ID:104126 发表于 2016-1-23 00:55 | 显示全部楼层 |阅读模式
以前在X宝上买过一个称重放大器,180+大洋。原理基本上就是把桥式拉力传感器输出的mV级信号放大到5V供单片机读取。连接实验电路的时候很完美,能
实现重量的转换,但是实际组装后却发现这种A/A模块受到的干扰太严重了,包括电源的干扰,导线长短的干扰,导线位置变化的干扰,无线电的干扰等等等
等……实在是恼人。



后来感觉是思路错误了,就不该用模拟信号来传输,于是决定使用A/D模块来把重量转换成数字信号传输,A/D模块就固定在离传感器最近的地方,将输出的数字信号用导线传输给单片机,这样能很大程度减小各种干扰。



在网上搜了一下A/D模块,基本上有两种廉价成品:HX711和PCF8591,它们分别是8位转换模块和24位转换模块。

PCF8591:



113403yljygeouubgbooyo.png




功能简介: 基于I2C接口的AD/DA转换模块,8位精度,四通道AD,单通道DA,电压输出型

最大特点: 1. 支持两种接口类型接入目标板:排针或排座

           2. 支持I2C总线级联(通过排针、排座对接的方法,可同时使用多个I2C模块)

典型应用: 低速AD/DA转换

主要资源: PCF8591,I2C接口排针,I2C接口排座,可调电阻,AD输入口,DA输出口,地址跳线端口



HX711:



233501r6766iuo0csk0o1u.jpg



模块工作电压: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℃




114637shy565thz23nfzfx.jpg


===============================我叫分割线=================================



我要使用的拉力传感器为传统的桥式传感器,量程1kg,想要达到1g的精度,这就要求模块输出位数至少为10位(2^10=1024),8位的
PCF8591无法胜任,因为它的精度只有2^8=256位。所以决定使用HX711作为我的A/D模块,而且我选的HX711模块还带屏蔽壳,正符合我
的要求。





先来看一下该模块的常用接法:




114513lmwalwvc5wj1j1j5.jpg



模拟输入

通道 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 转换的输入通道和增益,参见表三。




114746w2jwooj4cew4d99o.jpg






PD_SCK 脉冲数输入通道 增益






114820jxy141ixdiee34e4.jpg






时序图



PD_SCK 的输入时钟脉冲数不应少于25 或多于27,否则会造成串口通讯错误。当A/D 转换器的输入通道或增益改变时,A/D 转换器需要4 个数据输出周期才能稳定。DOUT 在4 个数据输出周期后才会从高电平变低电平,输出有效数据。







==============================我也是分割线================================





好了,看了这么多原理很多人一定已经晕了,下面来简单的:HX711在Arduino上的使用!





经过各种搜索,仅仅在Google Project上找到了一个 phk@FreeBSD.ORG 写的 Arduino 库(感谢啊!),功能很完善,而且支持多版本的Arduino。



我备份在这里吧,以免以后找不到:




hx711-arduino-v0.01.tar.gz (1.3 KB, 下载次数: 179)
回复

使用道具 举报

ID:106553 发表于 2016-8-17 21:13 | 显示全部楼层
太强大了
回复

使用道具 举报

ID:24730 发表于 2017-3-2 16:48 | 显示全部楼层
厉害厉害厉害厉害厉害
回复

使用道具 举报

ID:171726 发表于 2017-3-21 16:41 | 显示全部楼层
能将数据的转化贴出来吗,为什么我算出来的和实际差好多?
回复

使用道具 举报

ID:185896 发表于 2017-4-3 23:24 | 显示全部楼层
非常感谢,很需要!
回复

使用道具 举报

ID:186127 发表于 2017-4-4 21:34 | 显示全部楼层
你好,我想请问一下,这个传感器是悬挂测压还是放东西去压它?为什么我按照卖家的教程做出来的显示错误,数据也有误,可以指点一下吗?
可以留一个QQ吗?
回复

使用道具 举报

ID:189792 发表于 2017-4-15 12:13 | 显示全部楼层

 好资料,谢谢楼主分享
回复

使用道具 举报

ID:217792 发表于 2017-7-7 08:42 | 显示全部楼层
学到了
回复

使用道具 举报

ID:92231 发表于 2017-7-19 06:50 来自手机 | 显示全部楼层
这个太强大了
回复

使用道具 举报

ID:221051 发表于 2017-7-23 12:06 | 显示全部楼层
很全面的文章,谢谢楼主,正在做个电子秤,正好用上这些资料!
回复

使用道具 举报

ID:237817 发表于 2017-10-8 15:22 | 显示全部楼层

nb,很好,厉害了
回复

使用道具 举报

ID:242054 发表于 2017-10-23 13:09 | 显示全部楼层
厉害啊
回复

使用道具 举报

ID:248689 发表于 2017-11-18 23:08 | 显示全部楼层
楼主,为什么我出来的数据很杂乱,负的、正的、零都有
回复

使用道具 举报

ID:248689 发表于 2017-11-19 15:37 | 显示全部楼层
楼主,按照上面的教程做数据为什么会有很大的跳变,正负零都有??采样率要考虑吗?直接用自带的hx711示例应该出不来吧
回复

使用道具 举报

ID:257864 发表于 2017-12-5 20:07 | 显示全部楼层
问问大神,这个每克对应的ad数值怎么确定,标定怎么做的呢
回复

使用道具 举报

ID:257864 发表于 2017-12-5 20:10 | 显示全部楼层
987675539 发表于 2017-3-21 16:41
**** 作者被禁止或删除 内容自动屏蔽 ****

对对对 想看看ad数值和每克对应关系
回复

使用道具 举报

ID:239426 发表于 2017-12-15 13:34 | 显示全部楼层
厉害,厉害,厉害,厉害,厉害,厉害,厉害,厉害,厉害,
回复

使用道具 举报

ID:284872 发表于 2018-2-23 05:20 | 显示全部楼层
楼主简直太厉害了
回复

使用道具 举报

ID:19440 发表于 2018-7-11 11:00 | 显示全部楼层
这是转发的吧,楼主测过么?
回复

使用道具 举报

ID:382195 发表于 2018-8-8 10:24 | 显示全部楼层
请问HX711 hx(9,10);总是报错是什么原因;Arduino:1.8.5 (Windows 10), 开发板:"Arduino/Genuino Uno"

sketch_aug07b:5: error: 'HX711' does not name a type

HX711 hx(9,10);

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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