[导读] 本文来解析一个盆友在使用STM32采集电池电压踩过的坑。以STM32F4 的ADC属于逐次逼近SAR 型ADC为例进行分析,参考STM32F405xx  Datasheet,对于如何编写ADC程序就不做描述了。

先描述一下坑

采集电池电压,利用两个电阻将电池电压分压,然后送入单片机,当电阻如上分别取4M欧/1M欧时,ADC采集到的ADC值与万用表测得的ADC输入端相差很大,取30K欧以及10k欧时,则相差变小。

盆友咨询我这是为什么?我给出了建议,先卖个关子,先来看看应用最为广泛的STM32单片机的一些特性。

STM32 ADC:

STM32 12位ADC是逐次逼近型的模数转换器。它有多达19个多路复用通道,允许它测量来自16个外部源、2个内部源和VBAT通道的信号。通道的A/D转换可以在单次、连续、扫描或间断模式下进行。ADC的结果存储在左对齐或右对齐的16位数据寄存器中。模拟看门狗功能允许应用程序检测输入电压是否超过用户定义的、更高或更低的阈值。

主要功能,具体操作,怎么编程这些细节,有大量的资料就不罗嗦了,主要来看看电气特性。

电气特性

  1. ADC 可支持采样频率受供电电压影响,供电电压高,可支持采样频率范围更高

  2. 可支持输入电压范围须在参考电压范围内

  3. 外部输入阻阻抗最大为

  4. 开关切换阻抗 最大为

  5. 内部采样保持电容 为4pF

上面的公式用于确定误差小于1/4 LSB时允许的最大外阻抗。N = 12(12位分辨率),k是在ADC_SMPR1寄存器中定义的采样周期数。

ADC精度vs.负注入电流:应该避免在任何模拟输入引脚上注入负电流,因为这会显著降低在另一个模拟输入上执行转换的精度。建议在模拟引脚上增加一个肖特基二极管(引脚接地),这可能会注入负电流。

Page 136 图例(上图中标识解释):

  1. 见表68

  2. 实际转移曲线的示例。

  3. 理想转移曲线

  4. 终点相关线

  5. ET =未调整总误差:实际和理想传递曲线之间的最大偏差。EO =偏移误差:第一个实际过渡与第一个理想过渡之间的偏差。EG =增益误差:最后一个理想过渡与最后一个实际过渡之间的偏差。ED =微分线性误差:实际步长与理想步长之间的最大偏差。EL =积分线性误差:任何实际过渡和终点相关线之间的最大偏差。

寄生电容表示PCB的电容(取决于焊接和PCB布局质量)加上焊盘电容(大约5 pF)。寄生电容值高会降低转换精度。为了解决这个问题,应该减少fADC。

回到坑里

将盆友的电路等效绘制一下,忽略ADC采样通道内部ESD保护二极管,以及等效电流源,如下图:

好了,这图一画出来,问题的原因就显而易见了,SAR ADC是将采样电容上的电压通过逐次逼近原理转换为数字量的,按上述图,由于R2为兆级电阻,那么等效加载在采样电容上的电压就不能简单的看成是R1/R2的分压了,此时ADC的输入阻抗在百50K欧级别,简化定性看一下,忽略分布电容影响,计算方便将输入阻抗看成50K直流电阻(实际深入动态分析的话则不可忽略,假定电池电压为5V),具体计算就不做了。

为什么电阻选这么大呢?我想估计是为了将电池电压监控取样回路的电流降低,以节省电量。

跳出坑里

怎么办呢?我觉得这样应该可以:

找一个低功耗的运放做一个阻抗变换就可以兼顾两者需求,当然如果更完善一点,还可以考虑串入一个RC低通滤波环节,可以有效降低噪声。

总结一下

对于单片机ADC的使用,个人总结了这几点:

  • 将输入短路,可测量热噪声。实际应用时,将输入端短路,采集一定数量的样本,由于热噪声符合高斯分布,可计算出其期望、方差,接入真实信号可以利用统计规律进行相应的噪声滤波处理。

  • 量化噪声,可以通过输入一定幅度及频率的正弦波,进行度量系统的量化噪声。

  • 设计ADC采样电路时,需要注意阅读芯片手册的电气特性参数,这个对于设计一个稳定的模数采集系统至关重要。

至此,我想要写的关于ADC的笔记文章就暂时总结分享到此了,如果觉得本文有价值,在看转发起来,也算对我的肯定支持。

END

===========

  

PS想加入技术群的同学,加了我好友后,就给我发「篮球的大肚子」这句话,有可能机器人打瞌睡,可以多发几次,不要发与技术无关的消息或者推广。

如果想获取学习资料,就在公众号后台回复「1024」,足够多的学习资料可以让你学习。

一个单片机ADC的挖坑填坑之旅相关推荐

  1. 32f4怎样同时采集两个adc_一个单片机ADC的挖坑填坑之旅

    欢迎FPGA工程师加入官方微信技术群 点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群 [导读] 本文来解析一个盆友在使用STM32采集电池电压踩过的坑.以STM32F4 的ADC属于 ...

  2. 一次动态代理的填坑之旅

    转载自  一次动态代理的填坑之旅 背景 想在现有的接口加上熔断降级或者限流的功能,比较好的方式是通过注解的方式,并基于动态代理进行实现,下面代码是Rhino的实现 @Rhino public clas ...

  3. React Native填坑之旅--动画篇

    React Native填坑之旅--Button篇 React Native填坑之旅--动画 React Native填坑之旅--HTTP请求篇 动画是提高用户体验不可缺少的一个元素.恰如其分的动画可 ...

  4. Jenkins项目实战之-MacOS High Sierra自动化打包方案的填坑之旅

    前面我介绍了如何在android和iOS实现公司内部app的自动化打包构建的过程.这里写一个关于这个app自动化打包平台从想法到实践再到放机房平稳运行的一个回忆录.总的来说,在jenkins上实现an ...

  5. 【填坑之旅】手把手教你如何用AndroidStudio上传自己的library到Jcenter库

    [填坑之旅]手把手教你如何用AndroidStudio上传自己的library到Jcenter库 前言:我们在使用AndroidStudio的时候,会经常用到第三方的代码库.引入第三方库的方式无非就是 ...

  6. 《Getting Started with D3》填坑之旅(六):第三章(下)

    Chapter 3. Scales, Axes and Lines(比例尺.坐标轴与线) (接上篇:<Getting Started with D3>填坑之旅(五):第三章(上)) 示例2 ...

  7. AppCode Updating indexes一直不停的填坑之旅

    最近在做APP安装包瘦身,找到了传说中的AppCode神器. AppCode 提供了 Inspect Code 来诊断代码,其中含有查找无用代码的功能.它可以帮助我们查找出 AppCode 中无用的类 ...

  8. DIY M328晶体管测试仪 挖坑 填坑

    网上挺火的晶体管测试仪看着很不错,买成品感觉不个性.!嘿嘿.没事网上爬了几天感觉也不是很复杂,所以就有了以下的坎坷.其实这东西是个老外开发的.咱们今天只聊硬件不聊软件.第一编程环境为GCC AVR俺不 ...

  9. 微信云托管-填坑之旅

    微信云开发开始收费了,一个月20块钱,贼贵,用不起.而按用量收费.资源还能复用的兄弟产品微信云托管还像还行.所以就有了一场填坑旅行. windows10下安装docker之坑 在本地开发,需要使用do ...

最新文章

  1. 044_Properties工具类
  2. 《剑指Offer》——二维数组中的查找(JZ1)C++
  3. DDD关键知识点整理汇总
  4. 时间管理-暗世界-时间碎片
  5. 灵魂拷问:a = 1 + 2 究竟是怎么被 CPU 执行的
  6. Android蓝牙通信具体解释
  7. 解封装(一):ffmpeg解封装
  8. 你的老婆你做主:画风自定义,内容自定义,南加大AI助你走上人生巅峰
  9. 移动端手势库设计与实践
  10. 本地通过Eclipse链接Hadoop操作Mysql数据库问题小结
  11. 计算机 未保存,电脑突然关机wps没保存怎么办
  12. 请给孩子多一点点空间
  13. 字节跳动资深面试官亲述:15个经典面试问题及回答思路,知乎上转疯了!
  14. automapper自动创建映射_.NetCore学习笔记:四、AutoMapper对象映射
  15. 养生之道?阴阳平衡也!
  16. 贝壳找房户外拓展(中等) 扫描线
  17. html5以图片为背景的代码,HTML5画布背景图片
  18. 16岁女孩攻陷著名安全企业HBGary
  19. JZOJ-senior-5935. 【NOIP2018模拟10.29】小凯学数学
  20. 数字电路使用555定时器,74163,74194设计跑马灯电路

热门文章

  1. 注册Tomcat服务为系统服务
  2. 《Effective Objective-C 2.0》1、熟悉Objective-C
  3. VS 2005 或 VS 2008 在安装VSS 2005后,看不到源代码管理的解决办法
  4. JAVA中protected的作用
  5. 预防死锁可以破坏哪些死锁的必要条件
  6. 37--计算一个字符串中每个字符出现次数
  7. php柱状图实现年龄分布,考官雅思写作小作文满分范文 柱状图:年龄分布
  8. pyecharts对于经纬度_一文带你掌握Pyecharts地理数据可视化的方法
  9. 镜像上传到linux失败,Docker push镜像失败解决方法
  10. 便携式三星mysql_JDBC链接mysql - 三星蓝