本帖最后由 goodbaiy 于 2018-12-25 18:28 编辑
应用笔记(AN2834)对于如何在STM32F10xxx上获得最佳的ADC精度进行了详细的说明,对于ADC误差的种类以及如何得到最佳的ADC精度进行了详细的阐述。 但是在实用中,我也遇到的ADC精度差的问题,虽然也可以使用应用笔记中的方法解决,但是个人觉得有必要跟大家讲述一下事情的来龙去脉,帮大家避免类似的问题,总结如下: 先重点说一下,我的系统由于某些现实的原因,从系统上到电源达到正常工作电源所需要的时间可能非常长;ADC模块电源与单片机共用同一套电源。 大家在实际使用STM32F1/F0等芯片时,都知道ADC模块需要先校准再使用。但是什么时机进行校准呢?我之前的做法是在程序初始化完成后立刻进行ADC校准,之后直接使用ADC模块。可是在测试时发现ADC经常读不准数据的问题,而且该问题一旦发生就会持续到系统停机。经过反复试验及手册查阅,最终确定为ADC校准时机不对。 根据STM32F1《硬件开发指南》,在系统上电时,当芯片电源电压低于POR时芯片一直处于复位状态,当电源电压高于POR,且持续一个稳定期后,芯片结束复位状态,开始正常工作。 根据STM32F1《数据手册》,稳定期的持续时间最大只有4.5ms。 如此算来,系统在结束复位后很快就要执行ADC校准指令。而执行校准指令时,我的电源没有达到最终的电源电压,所以校准指令所得的结果在当时是正确的,但是在电源真正达到最终的电压时,该值却是一个错误的,从而导致最终的ADC结果不准确。
对该问题,解决方法也很简单,软件方面就是在整个系统工作时进行反复校准,这样就能够保证系统在正常电压工作时可以有一个正确的ADC结果。
|