前言 本应用笔记旨在展示对于使用 STM32F2xx 和 STM32F4xx 微控制器的应用,怎样提高其A/D 转换的精度。) @8 _4 M. s s" x" D 本文还讲解了可应用于降低 ADC 误差的固件方法,给出了为得到更好的 ADC 精度,编写固件的一些通用技巧。/ h T7 L* N3 P0 K' ^" A 请注意,本应用笔记提供的数据仅供参考。除非特别指出,测量条件皆为实验室典型条件而非生产环境。7 T1 l, B. h, m0 i) G2 x 表 1 列出了本应用笔记涉及的微控制器。/ D" S" f5 h( o3 \( q. [9 {5 w 1 会影响 ADC 精度的参数概述 模数转换的精度会影响系统的质量和效率。为提高精度,您需要理解与 ADC 有关的误差,以及对它们有影响的参数。' w# U+ T. ?" c/ _6 O" g* X8 r5 S ADC 本身无法确保结果的精度。它取决于您的系统设计。因此,在您开始开发之前,需要仔细的做些准备。+ x- x- y j5 Y2 y5 [) G 具体影响 ADC 精度的参数与应用密切相关。比较常见的因素有:PCB 布局、参考电压源、I/O 切换所造成的影响和模拟输入源的输出阻抗。 若需 ADC 误差的更详细信息,请参考应用笔记 AN2834:如何在 STM32F10xxx 器件中得到最佳的 ADC 精度及 AN3137:STM8L 器件上的 A/D 转换器。" |4 Q8 t, C% s, c 2 提高转换精度的固件技巧 2.1 平均 平均是一个简单的技巧,即您对模拟输入多次采样,取所有转换结果的均值。此技巧有助于消除模拟输入上的噪声或错误转换的影响。5 v! P. \/ `; m7 v4 Y3 u- H9 X4 ]1 C 2.1.1 平均 N 个 ADC 采样 当使用此方法时,采样数最好为 2 的倍数 (N 应为 2 的倍数)。这会使平均计算更有效率,因为对转换值之和求平均时的除法可通过向右移位做到。这节省了 CPU 时间和执行除法算法所需的代码存储器 (在 Cortex-Mx 内核中,右移操作仅花费 1 个 CPU 周期)。9 N7 u+ N2 h% ]2 T4 D+ q4 y3 j$ z - o8 P+ l, b4 {9 k- j 7 z* B9 ~$ F( I0 M 7 G, v( Y: l8 Q# O. h' Q 2.1.2 平均 N-X 个 ADC 采样 此方法基于先取 N 个 ADC 采样,将它们从最大值到最小值 (或相反顺序)排序,然后删除两端的 X 个采样。 建议选择 N 和 X 为 2 的倍数。 此平均方法比之前一个更有效,因为它删除了会影响平均的两端值,而且它在执行时间和转换精度之间给出了一个较好的折中。' x1 A" u+ O) P. I ; \ R1 O9 U1 q0 y. m / s5 {$ E" j0 A1 E" K3 \! r7 D5 R3 p 2.2 其他建议 ADC 转换结果为输入电压与参考电压的比值。如果参考电压不准确 (噪声影响),转换结果也会不准确。因此,为取得更高的转换精度,除了固件设计外,硬件设计时也需要尽可能的降低噪声。 微控制器在执行指令时会在内部电源网络上产生一些不容忽视的噪声。若要过滤此噪声,可使用微控制器封装上的 VDDA (或 VREF)和 VSSA 模拟供电引脚;您可连接一个电容滤波器至这些电源引脚以过滤高频噪声。 这里是一些通用的固件设计技巧,可用来降低系统噪声,达到更好的 ADC 转换精度:" o: X' {) r) h1 j; E0 }& ^- m 1. 在即将开始 ADC 转换时,避免启动任何通信外设的数据传输。I/O 的切换可能会在供电电压中产生一些噪声。 2. 避免切换高灌电流 I/O,因为会在电源中产生噪声波纹。! C- t# @* s9 L% Q/ u9 q; K 3. 避免在同一 I/O 端口上切换数字输出,因为 A/D 输入正在被转换。这会将切换噪声引入模拟输入中。+ q- J Q7 c7 b 4. 建议将 STM32F2/F4 ART 配置为启用数据缓存 + 指令缓存,禁用预取。这可避免 CPU对 Flash 额外访问而导致额外的噪声,在一些应用中这会极大降低 ADC 精度。2 c/ G4 a6 T/ K6 K, g6 B1 n 完整版请查看:附件 ! p0 b0 Z( K: p( _+ D0 d |
DM00050879_ZHV5.pdf
下载602.11 KB, 下载次数: 3
STM32固件库分享,超全系列整理
【中文文档】AN3965_STM32F40x和STM32F41x基于串口的IAP
STM32F4-DISC 实现USB主机(U盘)和USB设备(虚拟串口)自动切换
STM32F4中文用户手册
基于STM32F407的FreeRTOS阶段性的总结(13)
STM32F400、STM32F402 Cortex-M4超值单片机
基于STM32F407的FreeRTOS获取各任务运行时间及占用情况(4)
基于STM32F407的FreeRTOS任务的挂起与恢复(3)
基于STM32F407的FreeRTOS任务的创建与删除经验分享(2)
基于STM32F407的FreeRTOS环境搭建经验分享(1)