|
目前F0系列的MCU,我只用过F030和F051(F031)两者各有自己的Reference Manual 以及 DataSheet9 M& i0 [: }( j1 ~8 L+ C2 l 0 i& B" @# ~. K" s$ v 6 B' R8 N" M! K 我发现ST的文档还是比较坑的,就如何利用内部CH17通道ADC采样求得VCC电压,F030的参考手册里面并没有 解释得很清楚,网上的帖子也是一大堆,不过没有一个准确的,至少我没找到。 今天就这个问题,作一个笔记,方便以后查阅:) l3 p" p7 Y: H( K, M, l- Q0 _2 V 首先,我们翻开F030的DataSheet来看看(F030的DataSheet:DS9773)' H$ T5 j5 O, H" u3 f
! ~4 D+ w* F" ]. c9 a) C 看看这段英文,大概的意思就是MCU有一个内部参考电压,是和ADC通道17相连的。ST公司在MCU 生产过程中,会在这样一个环境下对MCU作一个校准:8 `& O; G, d2 t# ^* p7 K6 W 温度30度,为MCU加上较为精确的3.3V电压时,获取ADC CH17的AD值Vrefint_cal,并且把此AD值记录 到MCU的内部存储器里面作为一个只读的数据,作为参考。此数据地址为0x1ffff7ba,长度2字节0 |7 N" H- I" ? 然后呢?怎么用呢?datasheet就没下文了,好吧,那我们再去查查Reference Manual 找到STM32F030的[RM0360],找到ADC这一章,204页(我这个是Rev3的)6 z# p7 B) r+ ~
我想说:然并卵!!!" e/ d5 s+ R! X: R" Y! N. e# N file:///C:/Users/Administrator/AppData/Local/YNote/data/qq64CFFFD5BCF5D79E15E658E5AFC24512/e77d702919e9404aafe723892f30752b/clipboard.png$ s" `% D- b( P2 f( \ 4 j' V/ {7 U3 ^3 V5 K& N 看到这里我突然无语了,只讲了内部温度如何求得,居然没讲内部参考电压的用法!!!- r! q. S/ R$ l; `/ L, t, H3 A 所以我说ST的文档坑呢。。。! W6 n% C) Q* N( U6 T! Y; ~ , }# A! ~; S; t" [8 Q, O0 m 不过还好,我发现虽然这个RM0360里面没有提及VREFINT的用法,但是另一款MCU STM32F051的参考手册里面有说到:3 X* z3 Y1 a: H0 Q7 _7 T& d 打开[RM0091] file:///C:/Users/Administrator/AppData/Local/YNote/data/qq64CFFFD5BCF5D79E15E658E5AFC24512/b7f2c021c1b1452b8ee1cf39f729f6f9/clipboard.png& g; e) w. A L; h" Y
终于找到了用法,这段英文大概的意思是这样的: VDDA提供电压给MCU(MCU能工作的前提条件),但是VDDA的值可能是波动的,或者我们不能知道 其精确值,那么内部的参考电压VREFINT和记录在MCU里的参考值会帮助我们求得当前VDDA的精确值 并且给了一个很简单的公式。 VREFINT_CAL 就是前面提到的生产时记录到MCU内部的一个数据 VREFINT_DATA 则为ADC CH17采集到的AD值 - p4 q {& y* B6 m 自此,我们终于知道这个内部参考电压是怎么用的了,简单的讲,就是: 当我们无法知道当前VDD的值到底是多少时,可以利用ADC CH17采样值 以及MCU内部的参考值去求得 5 `3 f* M$ D) O) V) M 此方法,我已经做过实验了,F030和F051上都试过,并且应用于实际产品(估算电池电量),准确性还是挺高的。3 T* B! z+ B7 D. W+ |7 z 1 L& i b$ M, s PS: 从公式来看,VDD越高,CH17的值越小;VDD越低,CH17的值反而越大 那么,内部的原理图到底是怎样的呢?很好奇。 " w, p9 _5 ~% ?( ^ - G" M5 }- p9 V+ C1 [3 F : ]+ U( a: k7 w& N G" m {7 V, [8 D% H+ [+ R " |) ?" g) `, \; H2 W1 w5 [ , [ }7 Q H6 M' `* M- z7 Q2 _4 x ; `3 j- R% E" r9 \! V - G9 B0 C' z4 U4 x & C, g( y2 d) e7 l/ a' \8 D6 C , J. g4 B% v+ K, U ; b- R3 @. @6 g7 l - _% }# N3 j4 q9 ~. T( } u5 N( |4 `, B / r3 O( |. J* H 5 _$ R: X& X2 K% B* } & S- G( j( ?) m% j1 p5 P 9 c. X) r( a2 `& F, E ( v6 [( {4 X3 }7 g/ b' D 0 Y1 G O z3 U3 x8 Y / n/ ~- N" W& B8 H$ d e, E' G* }9 D9 x7 v' [/ s 5 |, z8 Y+ o5 D( e! n% O 6 H' Z( j$ d9 `# n5 Y% g7 o * Z9 w, ]+ ]/ p0 g : e# |! R/ C/ D/ `, M. v% n3 `5 o# i; Z( H , u, F( t0 I1 m, n 4 W: H3 q* ^ b % o$ Z, K6 R# U9 Z$ C7 w |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
小白也能明白的STM32的低功耗与唤醒机制
STM32系统中2种数据掉电保护的方法
分享STM32F051中文参考手册(重制书签版)
AI工具训练营-用ChatGPT解决HID Keyboard实现的问题
STM32固件库分享,超全系列整理
STM32小白入门指南:从基础到OTA实现方案
STM32超详细学习笔记
新手必看!STM32单片机应该怎么学?
如果你解决了这些问题,就可以直接学STM32
微信公众号
手机版
就是不知道他的量化值是否由一个与电源无关的恒压参考源提供
4 J( a' y8 i+ @' \