世纪电源网社区logo
社区
Datasheet
标题
返回顶部
原创

STM32-ADC踩过的坑

[复制链接]
查看: 5166 |回复: 3
1
yzpc05d_x04
  • 积分:6298
  • |
  • 主题:85
  • |
  • 帖子:1034
积分:6298
版主
  • 2020-10-30 14:07:42
用ST的ADC调试NTC电路,发现电路偏差太大。发现有个坑。
考虑成本,信号没有加运放跟随。
以下内容来源网络
STM32 ADC 是一个12 位精度、 一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。转换时最快为1us,当ADC的输入时钟超过14MHz 时其会损失一些精度。当然如果可以达到我们的精度,输入时钟高点也没事。
在网上看到一回答ADC不超过14MHz 的答案:资料上的都是推荐,事实上很多芯片的设计都是有超额余量的,很多人都会超额的利用这些资源,并且很好的工作。
若所看的程序频率是超过14M,也没有错,可能作者的目的在于快速而宁愿损失一些精度,ADC的分辨率是12位,若是超过这个频率也是工作的,只不过采样到的精度可能仅到10位,若这个已到 作者的要求,也无错误之说了。
2、看参考手册,确定ADC 的时钟以及通道采样时间:
1)ADC 时钟 ADC 接在APB2 上,APB2的时钟为72MHz,通过分频的方式给ADC 提供时钟,预分频主要有2、4、6、8 四种分频方式。
2)通道采样时间 通道采样时间会影响采样的精度。
3、转换时间
公式:TCONV = 采样时间+ 12.5 个周期
例如:当
ADCCLK=14MHz和1.5周期的采样时间
TCONV = 1.5 + 12.5 = 14
周期=1μs
例如:当ADCCLK=14MHz 和1.5 周期的采样时间 TCONV = 1.5 + 12.5 = 14 周期 = 1μs
1)一般情况,如果是软件启动,那么转换时间即是采样周期。
2)若通过定时器进行触发启动ADC,则还需要加上定时器的相关时间。
4、确定采样率
1)如果我们的输入信号是 20KHz (周期为 50us),若要将它恢复出来,一个周期最少采样20个点,此时采样率要达到400KHz,所以ADC的采样率必须在400KHz 以上。为
了达到最好的精度,我们选取ADC时钟为12MHz,即6分频。在12MHz 以及保证采样率的情况下,采样时间越长其,准确性就越好。
可以计算 2.5us = (12.5 + 采样时间)/ 12MHz ,可以求得采样时间为17.5;所以采样时间的选择必须小于等于17.5个周期,才能保证采样率在400KHz 以上。所以我们可以选
择1.5、7.5、13.5,为获得更高的精准度,我们可以选择13.5个周期。
切记采样点数必须达到要求。

需要采集电池电压(3.3V-4.2V),同时在休眠的时候希望尽量减小待机电流。电池电压采集电路采用两个1%的300K电阻进行分压,由该电路引起的待机电路为4.2/(300+300)mA=7uA.此时比较合理(整机的待机电流要求30uA以内)。
初始设计电路如下:
1.png
在编程采集数据时发现测试电压与实际电压有偏差,测试值总比实际值偏小一点。在软件上做补偿,把值修正了。
但是换一个板子测试的时候发现测试的电压又不准了,此时知道通过软件补偿这种方法行不通。那么只能从硬件找原因。
查找datasheet发现AD的输入阻抗最大只有50KΩ。
2.png
图中RAIN:外部输入阻抗,STM32芯片中这个值最大为50KΩ;
RADC:采样开关电阻,最大值为1KΩ;
CADC:内部采样和保持电容,最大值为8pF.
在ADC数据采集的时候需要有电流流入,那么RAIN会产生一个压降。阻容网络中的RADC和CADC上,对电容的充电由RADC控制。随着源电阻(RADC)的增加,对保持电容的充电时间也相应增加。
对CADC的充电由RAIN+RADC控制,因此充电时间常数为tc = (RADC + RAIN) × CADC。如果时间过短,ADC转换的数值会小于实际值。
通过以上数据知道,采集精度跟采集时间和输入阻抗有关。但是通过计算得知,如果输入阻抗为300KΩ,那么充电时间约为2.4uS。在软件上把采样周期调到最大(ADC_SampleTime_239_5Cycles,频率为12M,时间19.9uS),还是存在误差。说明此时跟周期不是主要原因。
问题出在输如阻抗大于IC里ADC允许的最大阻抗。充电时电流分两路,一路经过R1到R2到地,还有一路经过R1流入MCU的AD接口。(不知是不是IO口会有一定的漏电流到地,IL)此时相当于在R2旁边并了一个电阻到地,检测点的电压不是标准的1/2Vbat.
那么为了更准确地检测电池电压,那么只好把电阻改小。如果选两个50K的电阻,那么此处带来的电流会后42uA.所以在电路上做了个调整:
3.png
原来接地的地方改接到一个IO口,在需要检测的时候输出低电平,不需要的时候输出高电平。然后分压电阻使用两个30K的问题得到解决,电压检测误差小于0.02V,待机电流比原来的还小了几个微安。
4-1.png
5-1.png
6-1.png
7-1.png
8-1.png
9.jpg

综上所述,ST单片机的ADC功能一定需要考虑输入阻抗的匹配,以及采样速率。




PWR86553388
  • 积分:6134
  • |
  • 主题:17
  • |
  • 帖子:101
积分:6134
LV8
副总工程师
  • 2020-10-30 19:39:35
  • 倒数3
 
写的很详细,但是有个疑问,用IO输出低电平代替接地,有没有电位的不一致?IO口的低电平是内部的MOS导通。
yzpc05d_x04
  • 积分:6298
  • |
  • 主题:85
  • |
  • 帖子:1034
积分:6298
版主
  • 2020-11-11 14:32:42
  • 倒数2
 
这个还没有试过,后续会试一下。谢谢提醒了。
jiangyp
  • 积分:264
  • |
  • 主题:0
  • |
  • 帖子:40
积分:264
LV3
助理工程师
最新回复
  • 2020-12-2 20:20:16
  • 倒数1
 
学习学习,天天向上
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号