ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

STM32F103 3.3V电源设计实战:LDO选型与滤波电路详解

STM32F103 3.3V电源设计实战:LDO选型与滤波电路详解 1. 3.3V电源需求分析与LDO选型思路1.1 为什么STM32F103对3.3V的“质量”这么敏感玩STM32F103最小系统板很多人习惯直接找一块现成的开发板插上USB线就开始点灯。但如果你自己画板子、自己搭电路就会发现一个非常现实的问题芯片能不能稳定跑起来一大半取决于你给它的那路3.3V电源够不够干净、够不够稳。先看STM32F103的供电要求。这颗芯片的标称工作电压是2.0V到3.6V推荐值3.3V听起来范围很宽似乎随便弄个电源都能带。但实际上芯片内部同时存在数字逻辑、Flash读写、内部RC振荡器、ADC采样、PLL倍频等多套子系统它们对电源的敏感度完全不同。数字逻辑对电压的容忍度相对高一点但ADC的精度、内部参考电压的稳定性、Flash在低温或高温下的读写可靠性都会受到电源纹波和跌落的影响。尤其是当你用ADC采集信号、用SPI或DMA高速搬运数据、用定时器输出高精度PWM时电源上的毛刺会直接耦合进信号链路造成采样值跳动或者通信误码。我调试过一块板子现象很典型系统空载时一切正常一旦让MCU进入正常运行状态、外设全部打开3.3V上就会出现幅度接近50mV的周期性纹波ADC采集的最后一个bit一直跳。后来用示波器一看根本原因就是电源设计太随意——输入端只用了一个100uF电解电容LDO输出端只有一个10uF电容而且走线长、地回路面积大。把滤波电路重新做了一遍之后纹波压到了10mV以内问题彻底消失。所以3.3V电源设计的核心目标很明确在LDO输入侧把外部扰动挡在门外在输出侧把LDO自身的噪声和负载瞬态响应压到可接受范围。1.2 LDO选型的4个关键参数与典型型号做3.3V电源很多人的第一反应是AMS1117-3.3因为便宜、常见、开发板上一抓一大把。但“能用”和“用得好”是两回事。选LDO不是看封装能不能焊上去而是要对着手册把下面几个参数逐一确认。第一个是Dropout Voltage也就是压差。LDO要稳定输出3.3V输入电压必须高于3.3V加上压差否则它就会失去调整能力输出电压跟着输入往下掉。AMS1117的压差在1A负载时能到1.1V左右这意味着输入至少要4.4V。如果你用3.7V锂电池直供AMS1117在负载稍大时就会进入“失效区”输出电压一路掉到3.1V甚至更低MCU随时可能复位。如果是5V输入AMS1117没问题但换到锂电池供电场景就应该选压差更低的型号比如RT9013压差约250mV300mA或XC6206P332MR压差约200mA负载时200mV左右。第二个是静态电流Iq。对插电设备来说Iq大一点无所谓但对电池供电的设备LDO自身的消耗往往比MCU睡眠功耗还大。AMS1117的Iq高达5mA而XC6206这类微功耗LDO可以做到1uA级别差了整整三个数量级。我做过一个低功耗采集器MCU睡眠电流只有3uAAMS1117直接吃掉了5mA电池寿命缩水到原来的几十分之一后来换成HT7333才把整机待机电流压到10uA以下。第三个是输出噪声和PSRR电源纹波抑制比。PSRR表示LDO对输入纹波的抑制能力单位dB数值越大越好。低频段所有LDO表现都不错但到了几百kHz甚至MHz级别普通LDO的抑制能力会急剧下降。如果系统里同时存在DCDC、电机、LED驱动等强干扰源就要选PSRR在100kHz时还能保持50dB以上的型号并在输入侧配合LC或RC滤波。第四个是最大输出电流。STM32F103满负载运行加外部外设电流一般在50mA到150mA之间看似不大但要注意动态峰值。如果板子上还要驱动蜂鸣器、小继电器、WiFi模块或传感器阵列峰值电流可能冲到300mA以上。选LDO时要留出至少30%的余量不要卡着电流值选否则负载跳变时输出电压跌落会非常明显。下面是我常用的几颗3.3V LDO对比都是实际验证过的型号不同场景直接照着选就行型号输入范围压差静态电流输出电流适用场景AMS1117-3.34.75V~12V1.1V1A5mA1A5V/12V输入、大电流、不关心功耗HT73333.5V~12V0.2V100mA2uA250mA电池供电、低功耗设备XC6206P332MR3.6V~6V0.2V100mA1uA200mA纽扣电池/锂电池、轻负载RT90132.5V~5.5V0.25V300mA50uA500mA3.3V/3.7V输入、PSRR较高ME62112.5V~6V0.15V300mA40uA500mA低噪声、电源敏感场景选型建议就一条不要只盯着“能输出3.3V”这一个指标要把输入电压范围、负载电流、功耗预算、纹波要求放到同一个坐标系里衡量。STM32F103最小系统做原型验证AMS1117足够做正式产品除非输入固定5V且对功耗无要求否则我更推荐RT9013或XC6206。2. LDO工作原理深度拆解从压差到散热2.1 线性稳压器的内部结构与工作逻辑想知道LDO的滤波电路该怎么配光会接引脚是不够的至少要理解它内部在干什么。LDO的字面意思是Low Dropout Regulator低压差线性稳压器它本质上是一个由误差放大器驱动的可变电阻串联在输入和输出之间用反馈来动态调节这个“电阻”的阻值让输出电压稳定在3.3V。内部结构大致分四个部分基准电压源、误差放大器、调整管、反馈电阻分压网络。调整管通常是PMOS或NMOS它在输入和输出之间承担压降。误差放大器不断比较输出分压和内部基准电压一般是0.6V到1.25V如果输出电压偏低就把调整管的导通程度加大让更多电流流过如果偏高就调小导通程度。整个过程在微秒级别内不断进行所以输出电压能基本保持恒定。这就能解释很多现象了。为什么LDO输入电压不能太低因为调整管两端的电压差Vin - Vout一旦低到某个阈值调整管就进入了完全导通状态失去调节余地输出电压随输入变化。为什么LDO输入电压也不能太高因为多出来的电压都变成热量耗散在调整管上了。线性稳压器的效率约等于Vout / Vin输入5V输出3.3V效率只有66%剩下的34%全部变成热量如果输入12V效率更是跌到27.5%散热压力巨大。2.2 PSRR、纹波抑制与应用场景选择LDO对输入纹波的抑制能力用PSRR描述计算公式是PSRR 20 × log(Vin_ripple / Vout_ripple)如果输入纹波是100mV输出纹波是1mVPSRR就是40dB。这个数值通常会在数据手册上给出一条随频率变化的曲线低频段10Hz到1kHz可以做到60dB以上中频段10kHz到100kHz降到40dB左右到了1MHz以上很多LDO的PSRR只有20dB甚至更低。这说明一个关键问题LDO不是万能滤波器它对付不了高频噪声。如果板子上有DC-DC开关电源开关频率通常200kHz到2MHz其输出的高频纹波和尖峰噪声LDO的抑制能力已经比较有限了。这时候必须靠输入侧的LC滤波或磁珠加电容来先衰减一轮高频成分再交给LDO处理低频纹波。反过来如果输入是电池这种本身就比较干净的电源LDO的PSRR压力就小很多输出侧做好去耦即可。我习惯把LDO的PSRR曲线和实际工作频率结合起来决定滤波方案。比如给STM32F103供电MCU主频72MHz内部数字开关会产生几十到几百MHz的噪声此时LDO的PSRR已经不起作用了必须在靠近MCU电源引脚处放100nF高频去耦电容由电容来提供高频低阻抗路径。理解这一层你再看最小系统板的电源设计就不会把所有希望都寄托在LDO上。2.3 热耗散计算——设计中最容易被忽略的环节LDO设计里最容易踩的坑就是发热。计算公式非常简单P (Vin - Vout) × Iout举例来说输入5V、输出3.3V、负载电流200mAP (5 - 3.3) × 0.2 0.34W这个功耗放在SOT-23封装上热阻大约是200°C/W到250°C/W温升就是68°C到85°C。假设环境温度25°C芯片结温已经到93°C到110°C接近甚至超过多数LDO的推荐工作范围。如果换成SOT-89封装热阻约50°C/W温升只有17°C就安全得多。有没有必要算这么细很有必要。我见过一块板子用AMS1117把12V降到3.3V给MCU供电负载电流只有80mA看似不大但功耗是0.7WAMS1117的SOT-223封装热阻约90°C/W温升63°C实际温度到了90°C左右板子放在塑料外壳里直接烫手工作几个小时后出现偶发复位。后来把供电改成先DCDC降压到5V再LDO降到3.3V温度立刻降下来问题消失。所以凡是输入输出压差超过2V、负载电流超过100mA的场景我都建议重新核算功耗。至少要让LDO的结温控制在100°C以内否则长时间运行不仅可靠性下降LDO内部的过温保护还会周期性地把输出关断表现出来就是设备工作一会儿停机冷却一会儿又恢复。记住LDO从来不是把电压“变”低而是把多余的电压“烧”掉这个物理代价躲不开。3. 滤波电路设计与实操让3.3V真正“干净”3.1 输入滤波应对USB/DC适配器的动态环境很多STM32F103最小系统板直接靠USB的5V供电USB电源看似干净实际在热插拔、电脑休眠唤醒、外设上电瞬间都会出现明显的电压波动。所以LDO输入侧的滤波电路不能省它的作用有两层一是吸收来自上游电源的动态干扰二是抑制负载突变时输入线的压降。输入电容一般选择10uF到22uF的陶瓷电容或者100uF左右的电解电容。两者取谁取决于上游是什么。USB供电时我习惯放一个100uF电解电容再并联一个100nF陶瓷电容电解电容负责提供低频能量缓冲陶瓷电容负责吸收高频尖峰。电池供电时电池内阻本身会随着负载变化产生电压跌落此时输入电容反而要以“尽可能靠近LDO输入引脚”为优先容量选10uF到22uF就够了太大的电容反而会在拔电池瞬间通过LDO体二极管倒灌电流。如果输入线比较长比如从接插件到LDO走了3cm以上建议在输入端加一个简单的磁珠或小电阻。磁珠选600Ω100MHz的规格串联在电源路径上可以和输入电容组成低通滤波衰减线缆感应进来的高频噪声。用电阻的话10Ω到22Ω比较合适但要注意电阻本身会分压输入电压要留出余量。3.2 输出电容容值、ESR与环路稳定性的三角关系输出滤波是LDO设计里最容易产生争议的地方因为在很多LDO的数据手册里对输出电容的容量和ESR等效串联电阻都有明确要求。这不是随便选一个就能稳定工作的输出电容直接参与了LDO环路补偿。多数LDO要求输出电容至少在1uF以上很多推荐10uF。原因很好理解LDO的反馈环路需要输出电容提供一个低频主极点电容太小相位裕度不足电路会振荡电容太大又会降低系统带宽影响瞬态响应。我在用AMS1117的时候输出侧用10uF钽电容或100uF电解电容都试过表现正常但换成某些高性能LDO比如RT9013如果输出电容ESR过大动态负载下输出电压会出现振铃严重时直接自激振荡。陶瓷电容现在用得多因为体积小、ESR低但要注意直流偏压效应。一颗标称10uF的0603陶瓷电容在3.3V直流偏压下实际容量可能只有标称值的50%到70%如果选的是X5R或X7R介质会好一些Y5V介质衰减更严重。所以设计时我习惯按标称值的两倍去选比如实际需要10uF就放两个10uF并联或者直接选22uF的0603电容。注意低压差LDO对输出电容的ESR范围要求比普通稳压器更严格。选电容之前务必看数据手册里的“Output Capacitor”章节有些LDO会明确给出ESR推荐范围比如0.05Ω到0.5Ω超出范围就可能振荡。3.3 磁珠与RC滤波对付高频噪声的组合拳LDO输出侧的噪声来源主要有两个一是LDO自身基准源的宽带噪声二是负载电流快速变化引起的瞬态跌落。对于STM32F103这种以数字电路为主的负载前者影响相对小真正要重点处理的是高频冲击电流。在最小系统板的电源设计里我有一个固定做法LDO输出先接一个10uF电容然后在靠近MCU的VDD引脚网络上串联磁珠磁珠后面再接100nF电容。这样等于把MCU的电源和LDO输出之间加了一道隔离墙LDO输出侧的低频纹波先被10uF电容抑制MCU内部产生的高频开关噪声又被磁珠和100nF电容组成的低通滤波器挡住无法反向传导到LDO输出两个方向都得到了净化。RC滤波是另一个常用手段特别是在给ADC的VDDA引脚供电时。RC滤波的截止频率公式是fc 1 / (2π × R × C)比如用10Ω串联电阻、1uF对地电容截止频率就是fc 1 / (2π × 10 × 1e-6) ≈ 15.9kHz这个频率远高于ADC采样率但足以去除大部分高频干扰。R的取值不能太大因为ADC采样瞬间会从VDDA抽取电流R越大压降越大一般控制在10Ω到47Ω。3.4 去耦电容布置每个电源引脚都值得被认真对待为什么MCU每个VDD引脚旁边都要放一个100nF电容原因在于数字芯片在时钟翻转瞬间会有非常大的电流尖峰这个电流尖峰频率可以高达几十MHz主电源路径上的电感和电阻无法及时供应只能靠就近的去耦电容瞬间放电补充。去耦电容要注意两个物理原则一是要尽可能靠近对应的电源引脚走线越短越好我一般控制在3mm以内并且通过过孔直接连接到电源平面和地平面而不是绕一圈再回来二是地端连接不能和信号地混在一起否则高频回流电流会在地线上产生电压差把噪声耦合进别的电路。STM32F103的电源引脚包括多个VDD、VDDA、VSS、VSSA实际设计时我至少保证每个VDD引脚一个100nF陶瓷电容VDDA引脚除了100nF再额外加一个1uF到4.7uF电容并通过RC或磁珠与数字电源隔离如果有外部参考电压VREF引脚也按VDDA的标准处理。整体上3.3V主电源路径的电容布局顺序是LDO输出10uF → 磁珠 → MCU侧100nF/引脚这样从源头到负载形成分级滤波结构每一级都各司其职。4. 基于最小系统板的完整电路复盘与PCB细节4.1 原理图要点启动配置、复位、外部晶振与电源的关系STM32F103最小系统的原理图网上能找到很多版本看似一样实际上电源部分的做法差距很大。我根据自己做过的几块板子把原理图里和电源相关的关键点整理出来。复位电路NRST引脚接一个100nF电容到地再接一个10kΩ电阻到3.3V。电容的作用是滤除复位引脚上的高频干扰阻值给芯片内部复位电路的充放电提供时间常数。有人省掉这个电阻芯片也能工作但在电磁干扰较强的环境里复位引脚会出现毛刺导致MCU莫名其妙重启。BOOT0引脚STM32F103的BOOT0需要下拉到地否则上电后芯片可能进入串口下载模式而不是运行Flash里的程序。下拉电阻用10kΩ注意这个电阻不能省浮空输入在干扰下会跳变。BOOT1在实际设计中也建议定义清楚虽然STM32F103在BOOT0为低时BOOT1任意但保持确定电平可以避免后续调试时的迷惑。外部晶振8MHz主晶振的两个负载电容通常选20pF但这不是固定的要看晶振厂商给出的CL值。32.768kHz的RTC晶振负载电容一般在6pF到12.5pF之间。晶振下方的地铜皮要干净不能在晶振走线下面穿过其他信号线否则时钟信号会耦合到别的电路形成EMI问题。电源入口如果是USB供电建议在USB的VBUS和GND之间加一个ESD保护器件比如USBLC6-2SC6再串一个磁珠或0Ω电阻把模拟地、数字地、USB地分开在一点汇合。这个细节不做ESD测试或者插拔瞬间MCU死机的概率会明显增加。4.2 PCB布局布线的地线策略电源设计有一半的功夫在PCB布局上。原理图再干净如果布局布线一塌糊涂3.3V依然会是脏的。我在STM32F103最小系统板上采用的分区策略是把LDO放在板子边缘靠近电源输入接插件输出电容紧贴LDO的输出引脚MCU放在板子中部数字地、模拟地、电源地在MCU下方的单点汇合。3.3V走线尽量加宽至少1mm以上如果空间允许用铺铜代替走线铜皮会比细走线低很多阻抗流过大电流时压降更小。地平面策略上不要搞“一个板子一个完整地就完事”的简单思维。如果板子上有ADC、传感器模拟信号建议把一小块模拟地区域分出来从数字地单点连接过去。STM32F103的VDDA、VSSA引脚直接接到模拟地区域。需要注意的是分割地平面的缝隙不能跨过任何高速信号线否则信号回流路径会被拉长EMI反而恶化。LDO的散热焊盘也要处理到位。SOT-89封装的中间焊盘是地也是散热通道PCB上要放足够的过孔连接到地平面把热量导走。很多人忽略这个细节LDO的地焊盘就一个引脚大小热全憋在器件里温度自然高。4.3 实测方法与波形解读电源设计得好不好最终要用示波器说话。测3.3V电源纹波的正确姿势示波器通道设置AC耦合带宽限制20MHz探头用接地弹簧而不是鳄鱼夹地线。探头的地线如果太长会像一个天线把环境噪声捡进来测出来的波形根本不能反映真实的电源纹波。测量点在LDO输出电容两端和MCU的VDD引脚附近各测一次对比两个位置的波形。正常情况下MCU附近的纹波会比LDO输出略大但如果差距超过一倍说明去耦电容摆放或地平面处理有问题。用示波器实测一块设计良好的STM32F103最小系统板空载时LDO输出纹波通常在5mV到15mV以内MCU正常运行时VDD引脚附近纹波应该在20mV以内ADC采样时VDDA上不应出现超过几mV的周期性尖峰。如果测出来纹波超过50mV先别急着怀疑LDO把负载断开用假负载电阻单独测LDO看它自身是否干净再逐步加负载观察纹波增大的规律。纹波总是和主频同步跳变多半是去耦不足纹波是几十kHz到几百kHz的低频振荡多半是LDO环路不稳定需要调整输出电容。5. 常见问题排查与避坑实录5.1 典型故障速查表我在调试STM32F103最小系统板以及给客户做技术支持时遇到过不少电源相关的问题整理成下面的速查表可以直接对照排查故障现象可能原因排查方向解决方案MCU上电后无法烧录3.3V电压低于2.8V或纹波过大实测VDD电压、纹波换LDO、加大输出电容、检查BOOT0状态程序运行一段时间后死机LDO过热进入过温保护测LDO外壳温度、输入输出电压降低压差、改用DCDCLDO两级方案ADC采样值跳动大VDDA噪声超标、参考电压不稳测VDDA纹波VDDA加RC滤波、磁珠隔离、单独参考电压USB插拔时MCU复位电源跌落、ESD干扰测电源波形、加ESD保护输入加大电容、加TVS/ESD器件高频PWM输出时误码率升高数字电路开关噪声窜入电源观察MCU附近VDD纹波增强去耦电容、磁珠隔离LDO自身振荡输出几百kHz纹波输出电容ESR不满足要求测输出波形频率按手册调整电容容量或ESR5.2 负载突变导致复位一个定位实例有一次调一块用继电器控制水泵的板子MCU是STM32F103C8T6电源是AMS1117从12V降到5V、再降到3.3V的方案。现象是继电器吸合瞬间MCU偶尔复位概率不高但足以让人头疼。用示波器同时抓3.3V和继电器控制引脚的波形发现复位瞬间3.3V有一个约10us的跌落幅度到了2.6V左右正好低于MCU的欠压复位阈值。继续查发现继电器电源是从5V上取的继电器吸合瞬间电流从0跳到70mA5V被拉低再传递到3.3V。单纯改3.3V的滤波无法解决因为跌落来自上游。最后在5V输出端加大电容并在继电器电源路径上串联一个磁珠隔离同时给继电器线圈并联续流二极管问题才彻底消失。这个案例提醒我3.3V电源设计不能只盯着3.3V这一条支路要看整个供电链路特别是大电流、感性负载带来的瞬态冲击。STM32F103最小系统本身功耗不大但如果板子上还有继电器、电机、蜂鸣器它们的瞬态噪声才是真正的威胁。5.3 个人经验总结与实用建议做了这么多块STM32F103相关的板子我对3.3V电源设计有几个固定的看法分享出来供参考。第一电源部分的成本不要省。多一个磁珠、多两颗去耦电容成本增加不到几毛钱但带来的稳定性能省掉大量调试时间。相反为省一个电阻、一个电容导致现场故障返工成本远超省下的那几毛钱。第二LDO选型从需求反推。先列清楚输入电压范围、最大负载电流、功耗预算、纹波要求四件事再去看选型表不要先挑封装再硬凑参数。特别是电池供电的场景静态电流这一项直接决定整机待机功耗比什么都重要。第三滤波电路要分级而不是一把抓。输入级处理上游噪声中间级靠LDO的PSRR衰减低频纹波输出级用磁珠和电容隔离MCU的高频开关噪声每一级都有明确任务。不分级、靠一个电容解决所有问题的设计思路基本都会在某个环节露出问题。第四测试波形要留档。每次改版后把空载、满载、动态负载下的电源波形截图保存下次改版对比时一目了然。电源问题很多时候是间歇性的只在特定负载条件和温度下暴露没有基线数据你根本分不清新版是变好了还是变差了。3.3V电源看起来是整个最小系统里最简单的一部分实际上它决定了整个系统的下限。把这个环节做扎实STM32F103才能发挥出应有的性能后面调程序、调通信、调算法的时候不用在“MCU为什么偶发重启”这种低级问题上消耗精力。希望这篇文章能帮你一次性把电源设计这块基础打牢。
返回列表