打印
[STM32F1]

[学习笔记]STM32F1在实用中获得最佳精度的注意点

[复制链接]
686|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
goodbaiy|  楼主 | 2018-12-25 18:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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结果。

沙发
mmuuss586| | 2018-12-25 21:49 | 只看该作者
感谢分享;

使用特权

评论回复
板凳
st代理| | 2018-12-26 11:58 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

75

帖子

1

粉丝