找回密码
 立即注册

QQ登录

只需一步,快速开始

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

TM7705双通道切换后采集数据对应不一致问题

[复制链接]
跳转到指定楼层
楼主
ID:1170970 发表于 2026-5-8 12:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1 概述
2026年1月,一个实验性的项目中,利用安富莱TM7705模组采集电压,在使用其多通道采集模式时,遇到采集通道与数据对应不一致的问题,经查看多种TM7705/AD7705手册、网友案例以及组件厂家源码文档,基本弄清了该问题的原因。作为这段时间的思考总结以及后来者“避坑”考虑,特意将该问题的原因分析及解决过程总结整理存档。
2  问题现象
    使用TM7705组件时,单通道采集,设置参数后,单独使用各通道采集,一切正常。但需要使用通道1、通道2快速交替采集时,发现通道1、2的数据与通道号正好相反,设备报上来的1通道数据被报送到2通道,2通道数据也报送到1通道。以为是硬件接反了,经检查采集程序各环节、硬件连接,均未发现问题。程序中调整1、2通道的先后采集顺序,现象依旧。                              




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

使用道具 举报

沙发
ID:1170970 发表于 2026-5-12 21:44 | 只看该作者
3 分析排查
    结合数据手册、网友案例以及DeepSeek讨论。基本确定为7705内部结构以及工作机制造成的问题。期间怀疑过很多情况,最终一一排除,下面直接上干货,其他的就不讲了。
    先说明一下,试验采用的组件默认使用4.9152MHz晶体。测试中,数据率设定为50Hz,这个参数作为本次实验默认设置参数,后面不再赘述,一律称作“试验参数条件”。3.1 DRDY信号的怀疑
根据手册等资料理解,在正确的操作流程中,DRDY引脚扮演着重要角色:
a)       当新通道的数据转换完成,DRDY引脚会变为低电平,提示MCU可以读取数据了;
b)       第一次读取操作完成后,DRDY通常会返回高电平。
c)       紧接着,需要再次查询或等待DRDY再次变低,这标志着新通道的最新有效数据已经准备就绪,此时进行第二次读取,就能拿到正确的结果。
所以,当进行通道切换时,标准的数据读取流程应该是:写通信寄存器切换通道→等待DRDY变低(通道切换后立即检测DRDY,这时大概率就是低电平(原因见后),结果寄存器里面存的是通道切换前的数据,应等待一个完整的DRDY脉冲后,即切换后重新采集的才是新通道的数据)→第一次读取数据(刷新/丢弃旧数据)→等待DRDY再次变低→第二次读取数据(获得新通道的有效值)。
3.2  问题查找及分析
基本可以确认,由于7705正常工作期间,是按照固定频率采集的,其DRDY引脚输出的波形也能看出其采集周期(数据率)遵循了已设定的参数。DRDY高电平时间相对比较短(试验参数下,200us以内),而数据率周期比较大(试验中是20ms),这就使得切换通道指令设置的时机,具有极大可能是处在DRDY为0电平期间。这时,如果切换后,立即读取数据,其数据寄存器中的数据一定是上次(通道切换前的)的采集数据,而并非切换后的通道(此时,该通道还没有开始新的采集)的数据。切换需要一定的时间(试验中DRDY切换时,信号是保持约60ms的高电平),DRDY会拉高,开始新通道的采集,当DRDY再次变低后,读取的才是通道切换后的正确数据。下面的波形图中蓝色波形为DRDY信号,黄色的为CS信号。
因此,可以采用两种方法规避:
a)  连续读取两次(包含两次完整的通道切换操作,安富莱的例程就是这样处理的);
回复

使用道具 举报

板凳
ID:1034262 发表于 2026-5-13 12:46 | 只看该作者
我从零几年开始大量使用TM7705,两通道差分16位ADC,没有遇到过你说的情况哦。
回复

使用道具 举报

地板
ID:1170970 发表于 2026-5-13 18:53 | 只看该作者
coody_sz 发表于 2026-5-13 12:46
我从零几年开始大量使用TM7705,两通道差分16位ADC,没有遇到过你说的情况哦。

这是个人第一次用TM7705,准确的踩到了这个坑,后面会提到,模组厂家的代码中连读了两次,解决了这个问题,这里想做个排查记录,给后面想研究的同仁一些参考,可能是个人当前水平问题吧,找了很多资料,确实比较少见。就当个人教训,给各位一个参考。这帖子发的忒难了,发个截图都给审核成“包含%”~~~
回复

使用道具 举报

5#
ID:1170970 发表于 2026-5-13 19:05 | 只看该作者
b)   切换通道后,先等待DRDY变高(即等待芯片按照采集周期自动开始新的一次采集,所以当前数据可不读,读了也是切换前的旧数据)后,再等待DRDY变低(新通道切换后的第一次采集已完成)后立即读取;
查看波形,对于b方法,切换通道指令发出后,DRDY持续保持低电平,大约60ms后拉高(此时应该完成了内部切换处理),拉高大约200us(试验参数条件下,这个自动采集时间是DRDY高电平约为200us)后,DRDY拉低(完成新通道信号采集),立即读取。数据读取后,DRDY持续拉高20ms后再次拉低(由于时间原因,这里拉高20ms,没进一步去弄清什么原因,有知道的宝子可以说说),如果后面没有读取操作,则后面DRDY以200us的高电平宽度(转换时间),按照20ms周期连续采集(即使MCU不读,也不耽误芯片自己持续干活),直到遇到下一个通道切换指令重复上述过程。
经测试,这两种方法的切换准备耗时是一样的(约60ms),但DRDY波形上有差异,分析波形,可看出这与操作流程对器件内部工作状态的影响是对应的。
4 一点感受该问题在网络上的讨论相对比较少见,应该是一个很多开发者在刚接触TM7705时会有的困惑(我也是第一次用这个TM7705)。明明数据手册里写了相关描述,这么多人用,实际也应该有人会遇到类似的问题,但在网上的技术文章和讨论里,却很少被作为一个明显的问题来讨论。根据我了解、查到、测试及分析的信息,结合AI讨论,总结可能有三个原因:a)       手册描述隐晦,容易被忽略TM7705的中文数据手册里,其实是有相关描述的。在介绍DRDY信号和读操作的部分,TM7705手册提到:“即使是在第一次读操作后DRDY线返回高电平,也可能出现两次从输出寄存器读到同样数据的情况。必须注意确保在下一次输出更新进行之前,读操作已经完成。”。可见,手册将该现象表述为一种“可能出现”的情况,并且重点在于强调“读操作必须在输出更新前完成”的时序要求。这种表述方式,比较隐晦,隐藏了一些操作细节,很容易让开发者误以为这只是一个需要留意的时序边界情况,而没有意识到这是通道切换后必须执行的标准操作。很多人在快速阅读手册时,很可能会直接跳过或误解这段话的含义。b)       网络上的“成品代码”帮后来者“避坑”搜索到的很多例程,尤其是那些被广泛引用、验证过的驱动代码(比如出自安富莱等开发板的例程),它们已经内置了处理这个问题的逻辑(切换通道的代码中,读了两次,其代码注释也验证了这一点。并且,main函数的调用示例中,切换通道时,也注明了需要80ms的时间)。在这些成熟代码的流程中,开发者已经通过严谨的流程或对DRDY的精确控制,自动完成了“丢弃旧数据、等待新数据”的过程。当直接使用或参考这些代码时,底层已处理好了,自然就不会在应用层遇到这个问题,也就不会特意去发帖询问了。造成了“知其然,而不知其所以然”的问题,对于有强迫症的人来说,那就是抓心挠肺的感觉了,总感觉程序可能不健壮,藏了不好的东西。c)       芯片的“平替”属性导致讨论焦点偏移这是一个比较实际的原因。TM7705及类似型号常被认为AD7705的国产替代或“山寨”版本,价格优势明显。这导致使用它的开发者更关注一些更“致命”或更基础的问题,比如:芯片是否能稳定工作?数据为什么跳变?很多帖子都在讨论数据跳动、线性度差、通道间串扰等直接影响测量结果的问题。DRDY信号为什么不正常?经常有开发者遇到程序卡在等待DRDY信号的环节。相比之下,“读两次”更像是一个在代码流程中就能通过逻辑规避的“小细节”,只要代码能跑通、数据能读对,大家通常不会深究背后的原因,而是直接采纳了例程里的做法。所以,该问题在开发者的实践中,要么被成熟的代码模板悄悄解决了,要么被其他更棘手的硬件或稳定性问题所掩盖了。所以,这也造成了我这次使用中的困惑,断断续续花了不少时间分析和验证。用没彻底弄清楚的东西来做开发,心里总是有疙瘩,浑身难受得紧,好在最终解决了。5说明由于临时使用、时间、经验有限等原因,我并没有全面的对这款芯片做应用测试,可能有些地方存在错误或描述不当,各位同仁且看且辨,欢迎指出不当之处。由于初次发帖,还不会用,图片也发不上来,磕磕巴巴的,各位莫笑,完整的见附件吧~~

TM7705通道切换后采集数据对应不一致问题-GeSi-20260513.pdf

336.26 KB, 下载次数: 0

实验记录

回复

使用道具 举报

6#
ID:1170970 发表于 2026-5-14 21:31 | 只看该作者
图片上传不了,完整的见附件吧
回复

使用道具 举报

7#
ID:1034262 发表于 2026-5-15 12:08 | 只看该作者
GeSi 发表于 2026-5-13 18:53
这是个人第一次用TM7705,准确的踩到了这个坑,后面会提到,模组厂家的代码中连读了两次,解决了这个问题 ...

其实TM7705用起来比较简单的,/DRDY低电平即有新数据可以读,此时读取数据即可。
由于是Sigma Delta ADCC, 当改变滤波参数、数据率、通道时,产生第一个有效数据通常需要几个转换周期,还是以检测/DRDY为准(硬件引脚或读取寄存器即可)。
我用这个芯片有20年了,超过百万片,当年是为了替换米帝昂贵的AD7705的,测试发现差不多,零几年也才1元多RMB,AD7705要十几元。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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