ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

DAC监控脚读数不跟手?四个坑层层叠加的排查全记录

DAC监控脚读数不跟手?四个坑层层叠加的排查全记录 一句话: MUX监测读数不随电流变化排查踩了四个坑控制引脚没初始化、悬空通道漂移、万用表恒3.3V最后靠回读全码扫描反推定位到编码位序错误。芯片和硬件从头到尾都是好的。适合谁读用带监控脚的DAC/电流源芯片、遇到读数不跟手/恒为固定电压的嵌入式工程师。现象MUX 读数完全不跟手一块激光驱动板五通道电流 DAC 驱动激光二极管和光放大器靠内部监控引脚MUX轮流输出各通道电压/电流接 16 位 ADC 采样。现象很奇怪设通道电流 0 → 300mA 阶梯MUX 读数几乎不动切参考电压应 1.25V、电源轨应 3.3V这些已知电压通道读数全部收敛到同一个值万用表测 MUX 引脚恒 3.29V≈电源电压怎么切通道都不变换成另一块板子现象一样。看起来铁定是硬件问题。坑一芯片的控制引脚根本没初始化排查从最小测试工程开始——只保留 DAC ADC 串口。换板子后才发现这个测试工程从没初始化过芯片的控制引脚。主项目里片选、清除、加载这几个 GPIO 是在另一个初始化函数里配的测试工程精简时没调用它。结果片选引脚复位后浮空输入电平不定——SPI 命令从未被芯片接收。SPI 命令发得再对片选没拉对芯片一个字都收不到。修法初始化片选/清除/加载引脚推挽输出 正确初始电平。经验精简测试工程最容易漏的就是别人顺手初始化过的东西——从主项目拆代码时把初始化函数调用链完整保留别只拿看起来相关的部分。修完再测——读数有变化了但数值仍然不对。继续。坑二连续读悬空通道读数漂移像建立慢新现象读数开始爬升/漂移各通道读到的值逐渐逼近同一个数。第一反应DAC 的 MUX 输出阻抗高15kΩADC 采样抽电荷是不是建立时间不够把切换后的延时从 2ms 加到 3 秒——读数还是不对各通道全部收敛到同一个值悬空节点的特征。真正的问题出在读取方式用连续读 8 通道的命令验证时ADC 的 8 个输入里有一半是悬空的没接信号。悬空通道的读数受采样保持电容残留电荷影响会漂移、会爬升两次读同一通道结果都不同。于是被误导成MUX 切换有反应其实那是悬空漂移又误导成建立时间不够其实等多久都一样。修法改用设 MUX → 单通道直读的方式悬空漂移被排除读数立刻稳定可区分。经验悬空 ADC 通道的读数会骗人——会漂移、会爬升、会随采样时序变化。验证信号链路时只用已知电压通道和独立单通道读取别用连续多通道读悬空脚来观察。坑三万用表测引脚恒 3.3V差点拆板软件侧越来越像MUX 输出没接上让同事拿万用表测 DAC 的 MUX 引脚——恒 3.29V怎么切通道都不变。3.29V ≈ 电源电压。两个猜想MUX 引脚到 ADC 的连线断了还是被外部电路拉到 3.3V准备拆板查飞线了。先做个便宜的验证软件侧设不同 MUX 码看 ADC 读数——结果读数有区分度不同码不同值说明 MUX 输出信号是到得了 ADC 的连线没断。经验万用表测到恒定电压 ≠ 信号没变化——如果切换频率低于万用表采样你测到的只是最近一次的值。软件侧能读出来的话以软件读数为准。坑四回读验证 全码扫描定位编码位序到这一步SPI 通路通芯片能收命令、MUX 输出能到 ADC、读数有区分但不符预期。剩最后一个可能命令编码的位序不对。第一步回读验证证明芯片确实收到了命令很多 SPI 芯片的串行输出脚会回读上一条指令Echo Readback。连发两条相同指令第二条的回读应出现第一条的命令字节——如果回读内容对得上芯片确实收到了问题不在通路。第二步全码扫描反推芯片实际解析的映射把 MUX 控制码全部发一遍记录每个码的读数对照手册的信号表反推发参考电压码实际读数却是电源轨的 3.3V 饱和 → 它解析成了电源通道发某通道电流码实际读数是 0V → 它解析成了地两个不同的码读数完全相同→ 它们发出的帧里低 5 位相同 → 芯片只认数据低 5 位铁证芯片实际解析的是数据字节低 5 位而我按手册的理解把 MUX 码放在了帧的高位。根因数据手册位序图读歪了手册的 MUX 命令位布局初读以为是命令 一堆不用管位 MUX 码于是把 5 位 MUX 码塞进帧的高位。实测证明芯片解析的是数据低 5 位// 错误写法: MUX 码放高位 SPI_Write8(0xB0 | ((mux 1) 0x0F), (mux 0x01) 7, 0x00); // 正确写法: MUX 码放数据低 5 位 SPI_Write8(0xB0, 0x00, mux 0x1F);改完再测参考电压读到 1.247V精确、参考地 ≈ 0V、电流通道线性度 0.3%。全部正常。之前万用表测到的恒 3.29V 也解释通了编码错位后发出去的参考电压选择实际选中了电源通道——芯片和硬件从头到尾都是好的。总结四个坑四条经验坑现象经验控制引脚没初始化芯片收不到任何命令精简工程时完整保留初始化调用链悬空通道读数漂移误判成建立慢/MUX 有反应只用已知电压通道 独立单通道读取验证万用表恒 3.3V差点拆板查断线软件读数优先万用表测到的可能是旧值编码位序错读数恒 3.3V/不跟手回读验证 全码扫描反推零猜测纯实证调试顺序建议先软件后硬件——SPI 通路回读验证→ 命令接收回读内容→ 命令语义编码/位序→ 才轮到怀疑硬件连线。这条链路走完之前别拆板。实测对比按手册理解编码读数恒3.3V不跟手 | 回读全码扫描反推位序修正线性度0.3%有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。下一篇一个引脚接五路通道——MUX 选择窗口的正确打开方式——MUX 使用的另一个角度
返回列表