|
目前F0系列的MCU,我只用过F030和F051(F031)两者各有自己的Reference Manual 以及 DataSheet 8 a7 y" G5 T" x" M2 l8 x 我发现ST的文档还是比较坑的,就如何利用内部CH17通道ADC采样求得VCC电压,F030的参考手册里面并没有( Q0 _3 d; j& O% F8 h 解释得很清楚,网上的帖子也是一大堆,不过没有一个准确的,至少我没找到。7 [- g: e2 M! W 4 {5 Y& r- K5 J: R- R 今天就这个问题,作一个笔记,方便以后查阅:* \. b+ Y! P- Y* J. Z. c 首先,我们翻开F030的DataSheet来看看(F030的DataSheet:DS9773)% @& o8 G3 H! l$ V
看看这段英文,大概的意思就是MCU有一个内部参考电压,是和ADC通道17相连的。ST公司在MCU" X5 w2 ]7 j) H' v: Y; H1 X 生产过程中,会在这样一个环境下对MCU作一个校准: R* y9 w6 O4 @9 O) W 温度30度,为MCU加上较为精确的3.3V电压时,获取ADC CH17的AD值Vrefint_cal,并且把此AD值记录 到MCU的内部存储器里面作为一个只读的数据,作为参考。此数据地址为0x1ffff7ba,长度2字节 & g& o6 i% v- y 然后呢?怎么用呢?datasheet就没下文了,好吧,那我们再去查查Reference Manual8 _! }" T8 Q6 t I% D# U( Y9 X 找到STM32F030的[RM0360],找到ADC这一章,204页(我这个是Rev3的)/ S1 ]+ D0 |. a, `" J+ E" r
7 \ S) X: [1 h- j1 V' G 我想说:然并卵!!!) F. b" {& o3 J file:///C:/Users/Administrator/AppData/Local/YNote/data/qq64CFFFD5BCF5D79E15E658E5AFC24512/e77d702919e9404aafe723892f30752b/clipboard.png, _: B7 \" N! A1 S! J) U, I / m! Q$ y% f. v: e+ F4 p 看到这里我突然无语了,只讲了内部温度如何求得,居然没讲内部参考电压的用法!!! 所以我说ST的文档坑呢。。。. n: V9 o. p A * u6 a1 { o3 O! ?' U$ I; T 不过还好,我发现虽然这个RM0360里面没有提及VREFINT的用法,但是另一款MCU; z$ c# {9 ? I2 d STM32F051的参考手册里面有说到:' \4 D3 p4 _. X! T 打开[RM0091] file:///C:/Users/Administrator/AppData/Local/YNote/data/qq64CFFFD5BCF5D79E15E658E5AFC24512/b7f2c021c1b1452b8ee1cf39f729f6f9/clipboard.png
终于找到了用法,这段英文大概的意思是这样的: VDDA提供电压给MCU(MCU能工作的前提条件),但是VDDA的值可能是波动的,或者我们不能知道 其精确值,那么内部的参考电压VREFINT和记录在MCU里的参考值会帮助我们求得当前VDDA的精确值 并且给了一个很简单的公式。2 ]( O% m/ n- C V, x8 ` VREFINT_CAL 就是前面提到的生产时记录到MCU内部的一个数据4 e+ P4 l" N: L8 |' U VREFINT_DATA 则为ADC CH17采集到的AD值6 M6 H4 F7 B6 y1 J! ?3 t% P % B+ ~8 g1 J: F8 l n 自此,我们终于知道这个内部参考电压是怎么用的了,简单的讲,就是:6 ]' u/ U3 B& q& _0 _6 d6 m 当我们无法知道当前VDD的值到底是多少时,可以利用ADC CH17采样值 以及MCU内部的参考值去求得 0 i+ L9 D; Z8 x 此方法,我已经做过实验了,F030和F051上都试过,并且应用于实际产品(估算电池电量),准确性还是挺高的。 9 u8 R4 d2 C; V8 p2 V( f PS: 从公式来看,VDD越高,CH17的值越小;VDD越低,CH17的值反而越大 那么,内部的原理图到底是怎样的呢?很好奇。 % b6 O* i- m9 q. }6 ]' t 4 Z. ]+ _/ G4 g" V2 p 6 z4 P" \+ O3 O3 G" X2 B + q. W2 y4 M/ t$ w" p& ^; G ! b m, x" k; H% P2 `6 C- C* N m 8 ^& U4 l6 q& Q) u ( V- J6 \* p J+ t1 U7 V B! m: W - b' m4 L* C3 p # v; k$ M2 y+ n2 g% Z, D- ? ' i4 j& _# r; f; K* W# z & h( Z$ ?' S6 a! V( b" c/ h 7 l4 P) t+ M* A9 K 8 b$ F5 b0 D* ]0 ?- ?2 Q# r/ y , i" ?6 X' O9 O2 N 6 m) n" d2 Q9 N * Z P- `3 S6 ]' ?( u( H # b6 j% J7 M9 Y* w- Y* z 0 n. h+ A/ R* E" T9 c8 z7 ~ 1 `6 S0 v. @; O; v& z 9 ~" W; I7 b1 Y/ C1 f! d 0 A9 V. S' v4 @4 W2 R 5 ?: K& w+ z' U7 d! _+ x, o 5 D; i6 o: c3 S ; a- v. M- C0 x1 J3 Z& e & k9 `7 c0 W- g0 l3 P& a2 b 8 B1 q# ^# P# V5 e ' [9 s* k2 p j) a $ @& h& g0 R7 S. [; t7 D6 L7 E5 m |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
小白也能明白的STM32的低功耗与唤醒机制
STM32系统中2种数据掉电保护的方法
分享STM32F051中文参考手册(重制书签版)
AI工具训练营-用ChatGPT解决HID Keyboard实现的问题
STM32固件库分享,超全系列整理
STM32小白入门指南:从基础到OTA实现方案
STM32超详细学习笔记
新手必看!STM32单片机应该怎么学?
如果你解决了这些问题,就可以直接学STM32
微信公众号
手机版
就是不知道他的量化值是否由一个与电源无关的恒压参考源提供
! i. ]. n( g% g0 G" e