- 主题:[求助]求问个诡异的ADC问题
- 结贴了,自己写的bug...
 
 -----------
 
 片内没有ADC,外扩了片TI的ADC081S021来测锂电池电压,想着简单搞定的事没想到折这上面了...
 
 源电压3V3,Vin分压后进来1.5-2.1吧,按着手册拉了片选,给clk,然后取数据,诡异的是取到的数据根据输入变化反复波动:
 输入电压4V时转换完毕的读数也是4V,但是降到3.9V时转出来的读数就变成3.7V了,降到3.8V时读数又恢复正常,基本上每隔0.1V左右就会出现读数不准.
 倒不是读数有波动,当输入稳定不变时读数结果也基本不变,排除了电源不稳这些可能,反复刷了几遍手册都没看出来问题在哪,网上找了下该芯片的驱动,时序操作也基本一致.
 实在没头绪了,哪位大佬遇到过类似现象没?
 --
 修改:wazowski FROM 222.128.87.*
 FROM 222.128.87.*
 
- 板上有大电流或者负载?
 
 【 在 wazowski 的大作中提到: 】
 : 片内没有ADC,外扩了片TI的ADC081S021来测锂电池电压,想着简单搞定的事没想到折这上面了...
 : 源电压3V3,Vin分压后进来1.5-2.1吧,按着手册拉了片选,给clk,然后取数据,诡异的是取到的数据根据输入变化反复波动:
 : 输入电压4V时转换完毕的读数也是4V,但是降到3.9V时转出来的读数就变成3.7V了,降到3.8V时读数又恢复正常,基本上每隔0.1V左右就会出现读数不准.
 : ...................
 --
 FROM 115.47.166.*
 
- 查下输入端阻抗要求
 
 - 来自 水木社区APP v3.4.4
 
 
 【 在 wazowski 的大作中提到: 】
 片内没有ADC,外扩了片TI的ADC081S021来测锂电池电压,想着简单搞定的事没想到折这上面了...
 
 源电压3V3
 
 
 - 来自 水木社区APP v3.4.4
 --
 FROM 113.200.204.*
 
- 没有大负载,一共就100多mA
 【 在 toec 的大作中提到: 】
 : 板上有大电流或者负载?
 :
 --
 FROM 222.128.87.*
 
- 换一个呢?我最近也遇到了类似,换了一个就好了 
 
 就那个片子的问题
 
 
 【 在 wazowski (邻家妹子叫玛丽) 的大作中提到: 】
 : 片内没有ADC,外扩了片TI的ADC081S021来测锂电池电压,想着简单搞定的事没想到折这上面了...
 : 源电压3V3,Vin分压后进来1.5-2.1吧,按着手册拉了片选,给clk,然后取数据,诡异的是取到的数据根据输入变化反复波动:
 : 输入电压4V时转换完毕的读数也是4V,但是降到3.9V时转出来的读数就变成3.7V了,降到3.8V时读数又恢复正常,基本上每隔0.1V左右就会出现读数不准.
 : ...................
 --
 FROM 124.126.229.*
 
- 已定位,程序bug导致的...真想给自己一脚
 【 在 Doraemon628 的大作中提到: 】
 : 换一个呢?我最近也遇到了类似,换了一个就好了
 : 就那个片子的问题
 :
 --
 FROM 222.128.87.*
 
- 这那能舍得
 
 
 【 在 wazowski (邻家妹子叫玛丽) 的大作中提到: 】
 : 已定位,程序bug导致的...真想给自己一脚
 --
 FROM 124.126.229.*
 
- 我之前也觉得这么大的非线性的误差不会是ADC本身的问题;
 不过始终想不通什么样的操作错误能导致这种现象;
 话说能透露一下吗?MCU采集后在软件侧出的问题?
 
 
 【 在 wazowski (邻家妹子叫玛丽) 的大作中提到: 】
 : 已定位,程序bug导致的...真想给自己一脚
 --
 FROM 171.88.140.*
 
- 非常二的一个bug,感觉脑子正常的人错不了这么离谱...捂着脸说吧:
 基本逻辑是移位收一个UINT16的值tmpVal,返一个UINT8的有效值,有效值为P13-P5,MSB在前.
 接收的时候就是循环拉clk,然后通过异或来取SDIO的值再移位.最后return (tmpVal>>5) & 0xFF;
 傻缺就傻缺在tmpVal这个变量在声明时被我错给了个初值0xFF而不是0,这就导致了异或的结果是低3位全被取反了...
 所以现象就是低3位000时读数111,低三位111时读数000.而恰好低3位读数在100时错误的读数结果与正确值只差一个LSB,因此现象就体现为ADC读数低3位为100时读数看上去是对的,然后在000和111的读数上偏离最大且周期波动...
 然后我就走上了怀疑走线太渣有串扰->采样电压有波动->参考电压有波动->MD这鸟芯片有毛病的脑抽之旅,直到最终发现真相
 【 在 ericking0 的大作中提到: 】
 : 我之前也觉得这么大的非线性的误差不会是ADC本身的问题;
 : 不过始终想不通什么样的操作错误能导致这种现象;
 : 话说能透露一下吗?MCU采集后在软件侧出的问题?
 : ...................
 --
 FROM 1.89.13.*
 
- 汗,果然够奇葩,哈哈
 
 
 【 在 wazowski (邻家妹子叫玛丽) 的大作中提到: 】
 : 非常二的一个bug,感觉脑子正常的人错不了这么离谱...捂着脸说吧:
 : 基本逻辑是移位收一个UINT16的值tmpVal,返一个UINT8的有效值,有效值为P13-P5,MSB在前.
 : 接收的时候就是循环拉clk,然后通过异或来取SDIO的值再移位.最后return (tmpVal>>5) & 0xFF;
 : ...................
 --
 FROM 171.88.140.*