调试小细节 之 ADC采样值出错

首先简单介绍一下ADC相关基本知识,本文引用正点原子开发指南的STM32F103系列MCU举例教程介绍

STM32F103 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC),这些 ADC 可以
独立使用,也可以使用双重模式(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 18 个通道,可测量 16
个外部和 2 个内部信号源。 各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16
位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。

STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你
正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换,
在注入通道被转换完成之后,规则通道才得以继续转换

一般来说在ADC使用的时候只要做好基本,都可以正常读取数据,12位的精度也足够我们大部分的使用场景;但是在最近一个项目中读取出的AD采样值所换算出的电压缺相差很大,经过反复查找,最终发现问题所在,总结一下所有目前能想到的AD采样问题做个记录,为以后查找问题留个思路:

  1. AD计算所使用的参考电源是否是mcu实际使用的参考电压
    (像项目中使用的是4.5V的参考电压,不可以固定思维认为参考电压一定是3.3V或5V或者mcu工作电压)

  2. 计算的采样宽度是否正确,正常来讲除非部分特殊场景采样选用高精度采样芯片外,我们大部分使用的MCU都是12位或13位(其实本质就是两个12位AD采样组合起来使用)的采样宽度,
    但是在做电力系统分析计算时,会采用标幺的做法(本人做无刷电控),比如我这次遇到问题的项目中就是采取将读取的12宽度AD值左移3位做法,将数据扩大为15位,这样我们在计算采样电压就必须注意:AD采样值除以32767再乘以参考电压VREF才是实际电压,这也是需要注意的一点;

  3. 第三种情况就是硬件问题,这是一种不常见的错误,也是本次项目实际遇到的问题,由于硬件工程师是今年应届大学生,他把两个AD通道的温度采样和电压采样的芯片引脚画反了(其实之前这个系列这两个脚就是错的,只不过之前大家知道,他给改正确了,新人也很无辜*-*),所以导致只要一上电就硬件过流,最后做了各种尝试花了好几天才发现根本问题是画错了,回顾一下发现有时候遇到问题总习惯往复杂的想,其实可能是个很简答的问题;

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值