1. 从一块“蓝色药丸”说起:STM32F103C8T6最小系统板的供电架构
手头这块蓝色的小板子,玩嵌入式的朋友应该都不陌生。STM32F103C8T6最小系统板,江湖人称“蓝色药丸”,几乎是每个单片机入门者的第一块开发板。但很多人拿到手之后,直接插上USB线就开始点灯、跑串口,从来没想过一个问题:这块板子上那颗三只脚的稳压芯片到底在干什么?为什么STM32芯片的供电引脚标的是3.3V,而板子却可以从USB的5V直接取电?
这背后涉及的就是LDO(低压差线性稳压器)的工作机制,以及STM32F103C8T6最小系统板整个供电链路的设计逻辑。我见过太多新手在画自己的PCB时,直接把5V接到STM32的VDD引脚上,结果芯片瞬间发烫冒烟;也见过有人用外部5V电源供电时,板子工作不稳定,程序跑飞,最后查了半天发现是稳压芯片的压差不够。这些问题看起来是“小问题”,但背后牵扯的是对供电架构的理解深度。
这篇文章我会从最小系统板的实际电路出发,把5V供电的来龙去脉、稳压芯片的选型逻辑、LDO的工作原理、以及实际使用中容易踩的坑,全部拆开讲清楚。不管你是刚接触STM32的新手,还是已经画过几版板子的老手,相信都能从中找到一些之前忽略的细节。尤其是那些准备自己画最小系统板、或者在做项目时需要从5V降压给STM32供电的朋友,这篇文章的内容可以直接拿来参考。
2. 最小系统板的供电链路全解析
2.1 从USB 5V到3.3V:一条完整的供电路径
先看最小系统板的典型供电结构。板子上通常有一个Micro USB接口或者Type-C接口,这个接口提供的是标准的5V电压。这个5V来自电脑的USB口或者充电器,电压范围一般在4.75V到5.25V之间,纹波和噪声取决于电源质量。
5V进来之后,分两路走:一路直接引到板子的5V排针上,方便你给其他5V外设供电;另一路送到稳压芯片的输入端。稳压芯片的输出端就是3.3V,这个3.3V连接到STM32F103C8T6的VDD引脚(通常是第24、36、48脚)以及VDDA引脚(第9脚)。同时,3.3V也会引到板子的3.3V排针上。
这里有一个关键点:STM32F103C8T6的供电范围是2.0V到3.6V,典型值是3.3V。绝对不能让VDD超过3.6V,否则芯片会永久损坏。所以5V绝对不能直接接到VDD上,必须经过稳压。
板子上还有一个细节:VDDA和VDD之间通常会接一个磁珠或者0欧电阻,然后各自配一组去耦电容。VDDA是模拟部分的供电,对噪声更敏感,所以滤波要求更高。很多廉价的最小系统板在这部分偷工减料,导致ADC采样精度很差,如果你要用ADC功能,这一点要特别注意。
2.2 为什么是LDO而不是DC-DC
你可能会问:为什么最小系统板都用LDO,而不是效率更高的DC-DC开关电源?答案其实很简单:成本、噪声和静态电流。
LDO的电路极其简单,只需要输入电容、输出电容和芯片本身,三个元件搞定。而DC-DC需要电感、二极管、开关管、控制芯片,布板面积大,成本高,而且开关噪声对STM32的模拟部分和射频部分影响很大。最小系统板的目标是简单、便宜、够用,LDO完美匹配这个需求。
但LDO有一个致命缺点:效率低。LDO的本质是“把多余的电压以热量的形式消耗掉”。从5V降到3.3V,压差是1.7V,如果你的负载电流是100mA,那么LDO上消耗的功率就是1.7V × 100mA = 170mW。这个功耗不算大,但如果负载电流到了500mA,功耗就是850mW,芯片会非常烫,甚至触发过热保护。
所以LDO适合小电流、低压差的场景。STM32F103C8T6本身的工作电流在几十毫安级别,加上一些外设,一般不会超过200mA,用LDO完全没问题。但如果你要驱动大电流的外设,比如WS2812灯带、电机、继电器,那就不能从板子的3.3V取了,需要单独供电或者用DC-DC。
2.3 常见稳压芯片型号与选型对比
最小系统板上最常见的稳压芯片是AMS1117-3.3,这是一颗经典的LDO,输出电流可达1A(实际受封装和散热限制),压差在1.1V左右(1A输出时)。它的优点是便宜、好买、封装大容易焊接;缺点是静态电流大(约5mA)、压差偏高、纹波抑制比一般。
除了AMS1117-3.3,还有一些常见的替代型号:
| 型号 | 输出电流 | 压差 | 静态电流 | 特点 |
|---|---|---|---|---|
| AMS1117-3.3 | 1A | 1.1V @ 1A | 5mA | 便宜、通用、发热大 |
| LM1117-3.3 | 800mA | 1.2V @ 800mA | 5mA | 与AMS1117 pin-to-pin兼容 |
| RT9013-3.3 | 500mA | 250mV @ 500mA | 25uA | 低静态电流、低压差 |
| ME6211C33 | 500mA | 100mV @ 300mA | 40uA | 超低压差、适合电池供电 |
| HT7333 | 250mA | 100mV @ 100mA | 4uA | 超低功耗、适合低功耗场景 |
如果你只是做普通的STM32开发,AMS1117-3.3完全够用。但如果你要做电池供电的低功耗项目,AMS1117的5mA静态电流就是灾难——电池还没给STM32供电,就被LDO自己消耗光了。这时候就要换ME6211或者HT7333这类低静态电流的LDO。
还有一个细节:AMS1117-3.3的输出电容要求至少10uF,而且最好是钽电容或者低ESR的电解电容。如果用普通的陶瓷电容,可能会引起振荡。这一点在数据手册里有明确说明,但很多人画板子的时候不看,随便放一个0.1uF的电容,结果输出电压不稳,STM32工作异常。
3. LDO工作原理:不只是“降压”那么简单
3.1 LDO的内部结构与负反馈机制
LDO的全称是Low Dropout Regulator,低压差线性稳压器。它的核心是一个负反馈环路,包含四个关键部分:参考电压源、误差放大器、功率调整管、反馈电阻分压网络。
工作原理是这样的:输出电压通过两个电阻分压,得到一个反馈电压,这个反馈电压送到误差放大器的反相输入端。同相输入端接的是一个高精度的参考电压,通常在1.25V左右(不同芯片可能不同)。误差放大器比较这两个电压,如果反馈电压低于参考电压,说明输出偏低,误差放大器就增大功率调整管的栅极电压,让调整管导通更多,输出电流增大,电压回升;反之则减小导通,电压下降。
这个过程是连续动态调整的,最终输出电压稳定在:Vout = Vref × (1 + R1/R2)。对于AMS1117-3.3,内部已经集成了分压电阻,所以输出固定是3.3V。如果是可调版本,就需要外部接两个电阻来设定输出电压。
功率调整管通常是一个PNP晶体管或者P沟道MOSFET。PNP晶体管的压差较大,因为它的基极-发射极结需要一定的驱动电压;P沟道MOSFET的压差可以做到很低,因为它的导通电阻很小。这也是为什么新一代LDO的压差可以做到100mV甚至更低。
3.2 压差电压:LDO最关键的参数
压差电压(Dropout Voltage)是LDO最重要的参数之一。它定义为:维持输出电压稳定所需的最小输入-输出压差。比如AMS1117-3.3在1A输出时,压差是1.1V,意味着输入电压至少要4.4V才能保证输出3.3V。如果输入降到4.0V,输出就会跟着降到2.9V左右,不再稳定。
这个参数为什么重要?因为很多电池供电的场景,电池电压会随着放电不断下降。比如一节锂电池从4.2V放到3.0V,如果你用AMS1117-3.3,当电池电压降到4.4V以下时,输出就不再是3.3V了,STM32可能会因为电压不足而复位或者工作异常。这时候就需要低压差的LDO,比如ME6211,它在300mA输出时压差只有100mV,电池电压降到3.4V还能稳定输出3.3V。
计算压差功耗也很简单:P = (Vin - Vout) × Iout。假设Vin=5V,Vout=3.3V,Iout=200mA,那么LDO消耗的功率是(5-3.3) × 0.2 = 0.34W。AMS1117的SOT-223封装热阻大约是60°C/W,那么温升就是0.34 × 60 = 20.4°C。如果环境温度是25°C,芯片表面温度就是45.4°C,摸起来温热但不烫手。但如果Iout到了500mA,功耗就是0.85W,温升51°C,芯片表面76°C,就很烫了。
3.3 纹波抑制与噪声:LDO的“隐藏技能”
LDO除了降压,还有一个重要作用:滤除输入端的纹波和噪声。这个能力用纹波抑制比(PSRR)来衡量,单位是dB。PSRR越高,LDO对输入纹波的抑制能力越强。
AMS1117的PSRR在低频时大约60dB,也就是说输入端的1V纹波,输出端只剩1mV。但在高频时PSRR会急剧下降,比如在100kHz时可能只有20dB。如果你用开关电源给LDO供电,开关频率的纹波可能会穿透LDO,影响STM32的ADC精度。
这时候可以在LDO输入端加一个π型滤波器(电容-磁珠-电容),或者在输出端加一个LC滤波器。但要注意,LDO对输出电容的ESR有要求,如果ESR太低(比如纯陶瓷电容),可能会引起环路不稳定,导致输出振荡。AMS1117的数据手册建议输出电容的ESR在0.1Ω到10Ω之间,所以用钽电容或者电解电容比较稳妥。
如果你对噪声特别敏感,比如在做高精度ADC采集,可以考虑用两级LDO级联:第一级从5V降到3.6V,第二级从3.6V降到3.3V。这样第二级的压差只有0.3V,功耗小,而且PSRR更高。但成本也会增加,适合对性能要求高的场景。
4. 实操:最小系统板供电电路的设计与验证
4.1 原理图设计与关键元件选型
如果你要自己画一块STM32F103C8T6最小系统板,供电部分的设计可以按照以下步骤来。
第一步,确定输入电源。通常用Micro USB接口,VBUS引脚提供5V。在VBUS和GND之间接一个10uF的电解电容和一个0.1uF的陶瓷电容,用于滤除USB电源的噪声。然后串联一个自恢复保险丝(比如500mA),防止短路烧毁电脑USB口。
第二步,选择LDO芯片。如果只是普通开发,AMS1117-3.3就够了。输入端接10uF电解电容加0.1uF陶瓷电容,输出端接22uF钽电容加0.1uF陶瓷电容。注意AMS1117的引脚定义:对于SOT-223封装,从左到右依次是GND、VOUT、VIN,最上面的散热片和VOUT相连。很多人第一次画板子会把引脚顺序搞反,结果5V接到输出端,3.3V接到输入端,芯片不工作。
第三步,连接STM32的供电引脚。VDD引脚(24、36、48)全部接到3.3V,每个引脚旁边放一个0.1uF的去耦电容,尽量靠近引脚。VDDA引脚(9)通过一个磁珠或者0欧电阻接到3.3V,然后配一个1uF加0.1uF的电容。VBAT引脚(1)如果不用电池,直接接到3.3V。VSS和VSSA全部接地。
第四步,引出5V和3.3V排针。5V排针直接从USB的VBUS引出,3.3V排针从LDO输出引出。注意5V排针不能给STM32供电,只能给5V外设供电。如果你要从外部给板子供电,可以从5V排针输入5V,经过LDO降压后给STM32供电。
4.2 实测:AMS1117-3.3的温升与负载特性
我拿了一块常见的蓝色最小系统板,做了一组实测。测试条件:输入5V来自USB口,输出3.3V,用电子负载模拟不同的电流。
| 负载电流 | 输入电压 | 输出电压 | LDO功耗 | 芯片表面温度 |
|---|---|---|---|---|
| 50mA | 5.02V | 3.31V | 85mW | 32°C |
| 100mA | 5.01V | 3.30V | 171mW | 38°C |
| 200mA | 4.98V | 3.29V | 338mW | 52°C |
| 300mA | 4.95V | 3.28V | 501mW | 68°C |
| 500mA | 4.90V | 3.25V | 825mW | 92°C |
从数据可以看出,当负载电流超过300mA时,芯片温度已经比较高了。500mA时表面温度到了92°C,虽然还没到AMS1117的过热保护阈值(通常150°C),但长期工作在这种温度下,芯片寿命会受影响,而且周围的塑料件可能会变形。
所以我的建议是:AMS1117-3.3的持续输出电流不要超过300mA。如果确实需要更大电流,要么换用开关电源,要么给LDO加散热片,要么用两颗LDO并联(但要注意均流问题,不推荐)。
另外注意,输入电压也会影响功耗。如果你用5.5V输入,压差变成2.2V,同样200mA负载下功耗就是440mW,温度会更高。所以尽量用5V输入,不要超过5.5V。
4.3 用示波器看LDO的输出纹波
很多人以为LDO输出就是干净的3.3V直流,实际上输出端会有纹波和噪声。我用示波器(带宽100MHz,探头用弹簧地针)测了AMS1117-3.3的输出纹波。
在空载时,输出纹波大约2mVpp,主要是高频噪声。加上100mA负载后,纹波增加到5mVpp左右,低频部分能看到明显的工频干扰。如果把输入换成开关电源(比如12V转5V的DC-DC),输出纹波会明显增大,高频成分更多。
对于STM32的数字部分,5mVpp的纹波完全没问题。但如果你要用ADC采集小信号,比如热电偶、应变片,这个纹波就会影响精度。这时候可以在LDO输出端再加一级RC滤波(比如10Ω加100uF),或者用专门的低噪声LDO(比如TPS7A4700,噪声只有4uVrms)。
还有一点:示波器测量纹波时,探头的接地方式很关键。用长地线会引入很大的环路噪声,测出来的纹波可能比实际大好几倍。一定要用弹簧地针,或者把探头尖端和地针直接接触测试点。这是我踩过的坑,一开始测出来50mVpp的纹波,换了接地方式后只有5mVpp。
5. 常见问题与排查技巧实录
5.1 稳压芯片发烫严重怎么办
这是最常见的问题。首先确认负载电流是否超过了LDO的承受能力。如果电流在300mA以内,芯片还是很烫,检查输入电压是否过高。比如用9V电源输入,压差5.7V,200mA负载下功耗就是1.14W,不烫才怪。
解决办法有几个:降低输入电压到5V左右;换用低压差的LDO;加散热片;或者改用DC-DC。如果是因为负载电流太大,那就必须换方案,LDO不适合大电流场景。
还有一个容易被忽略的点:AMS1117的散热片是连接到VOUT的,不是GND。如果你把散热片焊到地平面上了,那就短路了。我见过有人这么干,芯片直接烧掉。
5.2 输出电压不稳定或振荡
LDO输出振荡通常是因为输出电容的ESR不合适。AMS1117要求输出电容的ESR在0.1Ω到10Ω之间。如果你用了一个ESR很低的陶瓷电容(比如10uF X5R,ESR只有几毫欧),LDO的反馈环路可能会不稳定,输出出现几百kHz的振荡。
解决办法:换用钽电容或者电解电容,或者在陶瓷电容上串联一个1Ω左右的电阻。但串联电阻会影响负载调整率,所以最好还是用钽电容。我一般用22uF的钽电容,ESR大约1Ω,很稳定。
另外,如果输出电容容量太小,比如只放了0.1uF,负载突变时输出电压会跌落很多。STM32在运行过程中电流是动态变化的,比如从睡眠模式唤醒时电流会突然增大,如果输出电容不够,电压跌落可能导致芯片复位。所以输出电容至少10uF,推荐22uF。
5.3 5V和3.3V排针的使用禁忌
最小系统板上的5V排针是直接从USB VBUS引出的,没有经过任何保护。如果你从5V排针输入外部电源,注意电压不要超过5.5V,否则可能烧毁LDO或者STM32。如果你从5V排针输出给外设供电,注意总电流不要超过USB口的限制(通常500mA),否则电脑可能会保护性断电。
3.3V排针是从LDO输出引出的,同样有电流限制。如果你要驱动WS2812灯带,一颗灯珠全亮时电流约60mA,10颗就是600mA,超过了AMS1117的推荐输出电流。这时候应该从5V排针取电,然后单独用一个DC-DC降到5V给灯带供电(WS2812的工作电压是5V,不是3.3V)。很多人以为WS2812可以用3.3V驱动,实际上3.3V数据电平可能识别不了,而且灯珠供电不足会导致颜色偏暗或者闪烁。
还有一个细节:STM32的GPIO输出高电平是3.3V,如果你用3.3V的GPIO去驱动5V的逻辑电路,可能会因为电平不匹配而无法识别。这时候需要用电平转换芯片,或者用开漏输出加上拉电阻到5V。但注意,STM32的GPIO不是5V容忍的(除了某些特定引脚),直接上拉到5V可能会损坏引脚。具体哪些引脚是5V容忍的,查数据手册的引脚定义表,标有FT的就是5V容忍。
5.4 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| LDO发烫严重 | 负载电流过大、输入电压过高 | 测负载电流和输入电压 | 降低输入电压、换DC-DC、加散热片 |
| 输出电压不稳 | 输出电容ESR不合适 | 换不同ESR的电容测试 | 用钽电容或电解电容 |
| STM32频繁复位 | 3.3V电压跌落、去耦电容不足 | 示波器看3.3V纹波和跌落 | 增加输出电容、每个VDD加0.1uF |
| ADC采样不准 | VDDA噪声大、LDO纹波大 | 测VDDA纹波 | 加磁珠隔离、加LC滤波 |
| 5V外设不工作 | 5V排针电流不足 | 测5V排针电压 | 外设单独供电 |
| 芯片烧毁 | 5V直接接VDD | 检查VDD电压 | 确保经过LDO降压 |
6. 进阶:从最小系统板到实际项目的供电设计
6.1 电池供电场景的LDO选型
如果你要做电池供电的项目,比如智能门锁、温度监控节点,LDO的选型就完全不一样了。AMS1117的5mA静态电流在电池供电场景下是不可接受的。假设你用一节2000mAh的锂电池,AMS1117自己就要消耗5mA,2000/5 = 400小时,也就是不到17天电池就耗光了,STM32还没怎么工作。
这时候要选低静态电流的LDO,比如HT7333,静态电流只有4uA,几乎可以忽略。但HT7333的输出电流只有250mA,压差在100mA时是100mV。对于STM32加一些传感器的应用,250mA足够了。
还有一个方案是用DC-DC加LDO的混合架构:DC-DC先把电池电压降到3.6V,效率很高,然后用LDO从3.6V降到3.3V,压差只有0.3V,LDO的功耗很小,而且能提供干净的3.3V。这个方案适合对功耗和噪声都有要求的场景。
6.2 多电压域系统的供电设计
在实际项目中,系统往往需要多个电压:5V给传感器和执行器,3.3V给STM32和通信模块,1.8V给某些特定的芯片。这时候供电设计就复杂了。
我的建议是:先用一个DC-DC把输入电压(比如12V)降到5V,然后5V分三路:一路直接给5V外设;一路经过LDO降到3.3V给STM32;一路经过另一个LDO降到1.8V。每个电压域之间用磁珠或者0欧电阻隔离,防止相互干扰。
注意上电顺序。有些芯片要求核心电压先上,IO电压后上,否则会有闩锁风险。STM32F103对上下电顺序没有严格要求,但如果你外接了其他芯片,要查它们的数据手册。一般来说,先上3.3V,再上5V比较安全。
6.3 从STM32F103C8T6到国产替代的供电兼容性
现在很多项目在考虑国产替代,比如用GD32、APM32、CH32等替换STM32F103C8T6。这些芯片的引脚基本兼容,供电也是3.3V,所以硬件上可以直接替换。但要注意几点:国产芯片的功耗可能略有不同,LDO的余量要留够;有些国产芯片的内部LDO输出电容要求不一样,比如CH32V103要求外部接1uF电容到VDD,而STM32只需要0.1uF。替换之前一定要看数据手册的供电部分。
另外,国产替代芯片的ADC参考电压可能不同,如果VDDA的滤波不够好,ADC精度会受影响。我在一个项目里用APM32替换STM32,ADC采样值总是跳动,后来在VDDA上加了LC滤波才稳定下来。
7. 个人实操体会与几个容易忽略的细节
折腾了这么多块最小系统板,我最大的体会是:供电部分看起来简单,但它是整个系统稳定性的基石。很多人把精力花在写代码、调外设上,结果因为供电问题导致各种玄学bug,查了半天查不出来。
第一个细节:去耦电容一定要靠近引脚。我见过有人把0.1uF电容放在板子边缘,离STM32的VDD引脚好几厘米远,这样电容基本不起作用。正确的做法是每个VDD引脚旁边放一个0.1uF,距离不超过5mm,走线尽量短粗。
第二个细节:VDDA的滤波不能省。如果你要用ADC,VDDA的噪声直接决定采样精度。我一般用磁珠加1uF加0.1uF的π型滤波,效果很好。磁珠选100MHz时阻抗600Ω左右的,不要选太大的,否则压降会影响VDDA电压。
第三个细节:LDO的输入输出电容要按数据手册来。不同LDO对电容的要求不一样,有的要求钽电容,有的可以用陶瓷电容。不要凭感觉随便放,否则可能遇到振荡或者启动问题。
第四个细节:如果你从外部给5V排针供电,注意电源的纹波。有些便宜的5V适配器纹波很大,能达到100mVpp,经过LDO后虽然能抑制一部分,但高频纹波还是会穿透。这时候可以在5V输入端加一个LC滤波,或者用线性电源供电。
最后分享一个小技巧:如果你怀疑供电有问题,先用万用表测电压,再用示波器看纹波,最后用手摸芯片温度。这三步下来,大部分供电问题都能定位。不要一上来就怀疑代码,供电不稳什么代码都跑不起来。