- 主题:[求助]求问个诡异的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.*