
目录前言一、功能与需求分析二、拓扑介绍2.1传统控制方式2.2 等效BUCK\BOOST控制方式2.2.1 BUCK模式2.2.2 BOOST模式三、关键参数计算3.1 电感感量计算3.1.1 Buck 模式最恶劣工况3.1.2 Boost 模式最恶劣工况3.2 电感峰值电流计算3.2.1 Buck 模式峰值电流计算3.2.2 Boost 模式峰值电流计算3.3 输入输出电容计算3.3.1 基于稳态电压纹波限制计算容量3.3.2 基于瞬态负载响应计算容量3.4 校验电感有效值电流与电容纹波电流3.4.1 电感有效值电流3.4.2 电容有效值电流3.5 电感选型3.6 输入输出电容选型四、2025.09.28初版设计4.1 主功率回路与栅极驱动器器件选型不具备参考价值4.2 电流电压采样电路4.3 辅助电源4.4 单片机最小系统4.5 其它外围电路4.6 PCB展示4.7 成品展示4.8 伪代码数控电源控制系统架构状态机设计思路HRTIM中断回调中的PID控制前言这个项目在25年9月的时候就已经完成初版的制作当时是为了快速入门程控电源并丰富自己的简历所以在制作这一版的时候电容电感的计算比较粗糙主要是为了能先让板子“跑起来”。在前段时间实习结束后决定深入研究开关电源理论计算这部分的内容也决定未来向电源方向发展在计算电感电容等参数时发现初版设计时存在些许问题主要是电感电容和开关管的选型所以在第一版实物设计部分会与理论计算有偏差在后续本篇文章也会持续更新逐渐产出第二版的实物设计UP制作本项目的主要目的是为了学习运算放大器与PID环路控制电流和电压检测由运算放大器构成采样放大电路可选择专用检流、检压芯片以获得更高控制精度。在学习该设计前建议先深入理解斩波变换、PID控制原理以便更快上手该项目设计。一、功能与需求分析我们需要打造一款电流方向能在两级之间自由切换、输出电压可程序控制的电源板由于需求的特殊性常规的拓扑结构如BUCK、BOOST、BUCK-BOOST单一拓扑只能满足单一方向的升压或降压无法满足电流双方向的升降压功能需求基于此我们选用四开关Buck-Boost拓扑结构Four-Switch Buck-Boost通常缩写为FSBB进行电路设计图1.初版主功率回路器件选型仅供参考二、拓扑介绍2.1传统控制方式对于四开关BUCK-BOOST它本身具有一种传统的控制模式Q1与Q3为一组Q2和Q4为1组两组MOS管交替导通这种拓扑结构在CCM模式下输入输出电压公式如下此公式在稳态条件下基于伏秒平衡得出推导过程这里大家可以自行查阅资料。由此可得出这种拓扑结构的输入输出电压公式与CUK丘克拓扑是一样的这种控制方式不涉及时的模态切换后面会提及控制较为简单但是四个管子都在工作损耗较大。2.2 等效BUCK\BOOST控制方式BUCK模式与BOOST模式拓扑结构其实相似度很高仔细观察可发现斩波MOSFET是以电感为对称轴镜像对称所以可以根据电流流向分别控制3颗MOS组合成BUCK\BOOST拓扑对电压进行斩波变换2.2.1 BUCK模式在BUCK模式下以电流从VA流向VB为例Q3为常开状态Q4为常闭状态在导通阶段Q1导通Q2断开输出电压上升电感储存电能电感电压左正右负红色线路续流阶段Q1断开Q2导通电源不再直接为负载提供能量输出电压下降由电感与输出电容为负载提供能量蓝色线路此时BUCK模式下输入电压与输出电压的数学关系式为其中为输出电压为输入电压为开关管的占空比即PWM波的高电平时间与周期之比。如果电流从VB流向VA则为Q1常开Q2常闭Q3与Q4交替导通输入与输出公式亦然如上。2.2.2 BOOST模式在BOOST模式下以电流从VA流向VB为例Q1为常开状态Q2为常闭状态在储能阶段Q4导通Q3断开负载由输出电容供电电感储存电能电感电压左正右负红色线路升压阶段Q4断开Q3导通电感电压串联在电源上电感电压左负右正电感与电源共同输出能量实现实现升压蓝色线路此时BOOST模式下输入电压与输出电压的数学关系式为其中为输出电压为输入电压为开关管的占空比即PWM波的高电平时间与周期之比。如果电流从VB流向VA则为Q3常开Q4常闭Q1与Q2交替导通输入与输出公式亦然如上。若想详细了解BUCK、BOOST控制原理分析推荐阅读这篇大佬写的博客BUCK、BOOST、BUCK-BOOST电路原理分析_buck电路-CSDN博客三、关键参数计算在进行参数计算之前还需要确定固定的工作工作背景即输入输出电压范围、最大电流、和开关频率A侧电压范围左侧半桥B侧电压范围左侧半桥额定输出电流开关频率在制作这块板子之前UP曾买过一块数控电源的开发板调试过发现商家给出的历程是传统控制模式交替导通等效BUCK-BOOST模式的参数计算是翻阅TI的LM5175设计手册找到的网上的简化通用公式计算出来也没有太大差距膜拜万能的TI感兴趣的读者可以通过半导小芯或立创商城等平台查阅相关数据手册LM5175 德州仪器-TI_PDF_数据手册_Datasheet_规格书_德州仪器-TI产品 - 半导小芯 | 42V 宽输入电压 4 开关同步降压/升压控制器详细的理论推导可阅读这位技术大拿的博客手撕BuckBuck公式推导过程_buck电路输出电压公式-CSDN博客这里我就直接采用TI的LM5175设计手册 9.2.2.3 InductorSelection 第21页中的公式进行计算3.1 电感感量计算由于本设计输入输出电压在一个范围内变化电压大小与电流流向需要随程序变换所以根据 TI 手册Buck-Boost 拓扑的电感选型必须分别计算降压Buck和升压Boost模式的最恶劣边界条件然后取最大值。3.1.1 Buck 模式最恶劣工况工况设定输入最高压输出最低压满载电流TI手册公式其中表示纹波电流系数这里取 0.4即允许峰峰值纹波电流。对于大电流应用通常推荐在 0.2~0.4 之间取值。3.1.2 Boost 模式最恶劣工况工况设定输入最低压输出最高压满载电流TI手册公式对比可知4.2μH1.18μH电感量由Buck 模式决定。考虑工程降额裕量最终推荐选用标准值4.7μH 或 5.6μH的功率电感。3.2 电感峰值电流计算计算开关电源电感的峰值电流是确保电感不发生磁饱和、避免开关管过流烧毁的关键步骤。根据数据手册和电源设计理论峰值电流由电感平均电流与纹波电流的一半叠加而成由于这是一个双向 Buck-Boost 电路我们需要分别计算Buck降压和Boost升压两种极端工况下的峰值电流并取其中的最大值作为最终选型的依据。3.2.1 Buck 模式峰值电流计算工况设定输入最高压输出最低压满载电流在 Buck 拓扑中电感的平均电流直接等于负载输出电流即。基于前文设定的 40% 纹波系数可得出峰值电流3.2.2 Boost 模式峰值电流计算工况设定输入电压最低输出电压最高满载输出。在 Boost 拓扑中电感串联在输入端其平均电流等于输入侧的平均电流。假设系统转换效率90% 则电感平均电流同样纹波系数取40%3.3 输入输出电容计算在双向系统中任意一端都可能作为 Boost 模式的输入源承受极大的高频 RMS 纹波电流。电容选型需同时满足稳态纹波和瞬态响应要求。3.3.1 基于稳态电压纹波限制计算容量在实际电路中输出电压纹波由两部分叠加而成ESR 压降纹波电流流过等效串联电阻产生的瞬时压降。容抗充放电压降电容本身吸收或释放电荷引起的电压变化。为了推导出纯粹的电容容量需求我们通常假设使用极低 ESR 的陶瓷电容阵列此时总纹波主要由容抗部分决定即公式推导在连续导通模式CCM下电感的纹波电流近似为三角波。在一个完整的开关周期内电容充放电各占一半时间。充电或放电的时间跨度流过电容的交流电流幅值由于平均直流电流全部流向负载电容仅承担交流分量其峰值为 。根据几何学半个周期内电容充放的电荷量三角波面积为底 * 高结合电容基本方程.根据电容的基础物理定义电荷的变化量等于电容乘以电压的变化量表示输出纹波大小此处取50mV即为0.05V代入表达式得出方程3.3.2 基于瞬态负载响应计算容量当负载发生剧烈阶跃时控制环路尚未反应过来电容必须独自“扛下”所有能量缺口为负载提供响应滞后时间内的所有能量。假设负载电流突然增加了一个巨大的阶跃量例如增加了 10A。由于电感电流不能突变这额外的 10A 只能完全由输出电容放电来提供。在开关电源的控制环路中检测到电压跌落并调整占空比使电感电流跟上新的负载需求通常需要约2个开关周期的时间即。在这 2 个周期的“空窗期”内电容必须以恒定的电流差值持续放电。公式推导利用电容电荷守恒定律安秒积根据电荷放电公式电容放电电流等于阶跃电流电容放电持续时间两个周期允许的电压最大跌落幅度在这段最恶劣的时间内电容需要释放的总电荷量为将上述电荷量代入电容的基本方程移项后可得瞬态响应的电容计算公式:假设发生最恶劣的阶跃情况——从空载瞬间跳变至满载即。由于这是一个双向宽范围电源我们以最高输出电压 25V 作为基准允许其跌落 5%即最大电压跌落幅度。综上述计算可知道输入输出电容有效容值必须大于 53.33uF3.4 校验电感有效值电流与电容纹波电流无论是电感的铜线绕组还是电容内部的等效串联电阻ESR它们本质上都是纯阻性发热元件。根据焦耳定律 PI2×RPI2×R 器件的发热损耗完全取决于流过它的交流有效值电流RMS而不是平均直流电流DC。对于电感如果 RMS 电流过大其内部漆包线的铜损会急剧增加导致温升过高绝缘层老化甚至短路。对于电容电容并非理想器件内部存在 ESR。纹波电流流过 ESR 产生的热量是电容内部温升的唯一来源。长期超温会导致电解电容寿命下降电解液干涸、鼓包甚至爆裂。因此计算 RMS 的根本目的只有一个确保所选择的器件在最恶劣工况下的热应力在安全范围内。3.4.1 电感有效值电流开关电源中的电感电流是一个带有三角波纹波的直流波形。我们可以将其分解为两部分直流分量 ( IAVGIAVG )代表稳态的平均电流。交流分量 ( iaciac )代表以 0 为中心上下波动的三角波其峰峰值为 。根据均方根RMS的积分定义一个包含直流和交流分量的周期性信号其总 RMS 等于各分量 RMS 平方和的平方根(对于一个标准的等腰三角形交流波形其 RMS 值为幅值除以。因为三角波的峰峰值是单边幅值是所以交流有效值这意味着您选用的电感温升额定电流必须大于 40A否则电感会迅速烫手。3.4.2 电容有效值电流电容只负责吸收高频的交流脉动阻断直流以最严苛的 Boost 模式输入电容为例当开关管导通占空比时输入电源直接给电感充电此时输入电容需要独自向后续电路放电提供全部负载电流当开关管关断时间时电感释放能量给输出输入电容开始从电源充电。这就形成了一个周期性的充放电矩形脉冲电流。根据 RMS 的定义对这个矩形脉冲进行积分计算(注如果是 Buck 模式的输出电容由于电感电流直接流入电容节点其 RMS 公式则简化为)对于 7-25V 双向变换器当一端处于 Boost 模式例如 7V 升压至 25V 10A时该端的“输出电容”实际上充当了另一侧的“输入电容”承受着极大的高频脉动电流。如果忽略此项电容极易过热烧毁。带入参数计算可得Boost 模式占空比输入平均电流:此时效率取90%电容承受的 RMS 纹波电流3.5 电感选型对比两种工况可知该电路的电感峰值电流与电感有效值电流主要由Boost 模式7V 升压至 25V决定最大峰值电流达到了惊人的41.68A最大有效值电流达到40.3A。在实际工程选型中为了防止电感在高温或大直流偏置下发生磁芯饱和导致失效必须为饱和电流预留充足的安全裕量。通常要求电感的饱和电流至少大于峰值电流的 1.3 倍即电感饱和电流至少大于51.2A同时电感温升电流大于于电感有效电流40.3A如下图所示可选择PQ3220封装6.8uH贴片电感该电感饱和电流75A、温升电流60A。3.6 输入输出电容选型综合稳态纹波、瞬态响应与RMS 纹波电流指标输入输出电容必须满足以下要求1.电容容值总有效容值必须大于53.33μF。考虑到陶瓷电容在高压直流偏置下会有严重的容值衰减通常衰减至额定值的50%~60%建议实际配置的标称总容值至在100μF∼150μF之间。2.RMS 额定电流所选电容阵列的总 RMS 纹波电流额定值必须严格大于17.85 A。单靠普通贴片陶瓷电容或电解电容无法同时兼顾大容量和高 RMS 电流此时可采用电解电容固态电容更佳与MLCC并联组合的方式以达到上述要求以这颗 松下35V\82uF顶级固态电容数据手册为例纹波电流Ripple current单位mAr.m.s4A等效串联电阻ESR20mΩ纹波电流频率修正系数Frequency correction factor for ripple current1在300KHz条件下纹波电流修正系数为1此时单颗松下35V\82uF固态电容能提供82uF容值和4A的纹波电流额定值。为了容量额定值与总纹波电流额定值至少需要并联 5颗这种规格的电容此时总容值达到400uF纹波电流最大提供20AESR降低至3.5mΩ完全满足设计需求当然松下的电容也是巨巨巨贵的不差钱或者高端产品的可以用松下的电容UP还是学生实在无力承受5块一颗的电容……这里UP就选用国产的电容替代由下图可知需要并联至少7颗35V 100uF 6.3*9尺寸的固态电容四、2025.09.28初版设计这一版为初版设计在电感电容和MOSFET选型上存在问题与上文计算结论存在出入主功率回路器件选型部分不具备参考价值还请各位谅解UP近期将会更新第二版设计过程可以点个免费的关注支持一下UP4.1 主功率回路与栅极驱动器器件选型不具备参考价值这里选用CJAC80SN10作为开关管 源极与漏极耐压100V在25℃条件下内阻为6.2mΩ 栅极驱动器选用IR2104自举型半桥驱动器存在高侧MOSFET无法100%导通的问题并且这款驱动器死区时间高达520ns在300KHz开关频率下周期仅为3333ns。同时开关滞后时间分别为680ns开通和150ns关断巨大的传播延迟会导致反馈存在滞后不利于控制环路的设计所以这款半桥驱动芯片不适用于高频开关电源。电感电容选型也需要按上述计算进行修改4.2 电流电压采样电路电压采样采用同向放大电路放大倍数0.1倍计算可知最大采样电压33V同向放大器与单片机ADC引脚间使用电压跟随器隔离输入与输出提高输入端输入阻抗降低输出端输出阻抗提高总体采样精度。电流采样电路采用差分放大电路考虑电阻额定功率此处串联1206封装 额定1W 3mΩ 0.1%精度采样电阻对电流进行双向采样计算可知差分放大倍数为53.6倍。当有10A电流流过采样电阻时采样电阻产生0.03V压降经差分放大器放大53.6倍输出正负1.605V电压到后级加法器将输出电压增压1.65V直流偏置将正负10A电流转为0.45~3.25V 的可供单片机ADC采样的正电压注此处为学习差分放大器与加法器单独使用了一个加法器进行1.65V直流偏置此处直流偏置可集成到差分放大电路中4.3 辅助电源为了给单片机和运算放大器提供稳定的直流电源采用DC-DC搭配LDO的电源结构将AB端输入的电源转化为5V和3.3V选用德州仪器TPS60403电荷泵电压逆变器将5V转为-5V为运算放大器提供稳定的负电源选用0.1%精度10K电阻分压3.3V采用电压跟随器对电源进行隔离提供稳定的1.65V直流偏置。4.4 单片机最小系统主控芯片采用STM32G4系列单片机采用COTEX-M4内核具有170M主频且G4系列单片机自带专为数字电源设计高精度定时器HRTIM具有多路互补PWM输出通道并且HRTIM 可以在 PWM 周期的严格中点占空比 50% 处精确产生同步触发脉冲强制 ADC 在此刻启动转换。这恰好处于开关管的“静默期”有效规避了高频开关噪声耦合导致的采样失真。4.5 其它外围电路集成0.96寸SSD1306 OLED屏幕相比插件模块该模块直接集成在板子上不易晃动且更加美观。集成RGB灯珠、五向按键、正交编码器、CAN、无线调试接口方便显示并配置当前输入输出电压4.6 PCB展示4.7 成品展示由于这块板子是去年9月做的这半年的时间借给学弟拿去学习学弟保存不当把板子给压变形了现在板子没办法正常工作目前手机里只有做好板子上电测启动阶跃的照片后续继续改进第二版会在立创开源广场完全开源各位可以一键三连关注这篇博客最新消息实物正面实物反面去年上电测试空载启动波形简单调整PID参数后可以观察到示波器电压波形缓慢上升在20ms左右电压线性地从0V上升到5V并稳定收敛4.8 伪代码数控电源控制系统架构状态机设计思路本系统采用有限状态机FSM架构实现电源管理的模块化控制将复杂的电源保护、启动流程分解为6个独立状态初始化 → 输入电压检测 → 输出电压检测 → 输出电流检测 → 上位机命令处理 → 软启动核心状态说明1. Task_0_Initial_state初始化状态1.1 复位所有变量和标志位1.2 初始化PID控制器1.3 点亮红色LED指示待机状态2.Task_1_Vin_detc输入电压保护2.1 过压保护OVP当Vin ≥ Vin_ovp时触发错误需降至Vin_ovp - 2V才恢复2.2 欠压保护UVP当Vin ≤ Vin_uvp时触发错误需升至Vin_uvp 2V才恢复2.3 采用滞回比较机制防止临界点抖动3. Task_2_Vout_detc输出电压监控3.1 连续1000次检测到Vout ≥ Vout_ovp才判定为故障3.2 通过计数器滤波避免瞬时干扰误触发4. Task_3_Iout_detc输出电流监控4.1连续1000次检测到Iout ≥ Iout_ocp才判定为过流4.2 与电压保护采用相同的去抖策略4.3 检测上位机启动指令flag_start_Control4.4 未收到指令时循环返回电压检测状态4.5 延时1秒确保系统稳定4.6 点亮绿色LED指示运行状态4.7 使能软启动标志进入PID闭环控制HRTIM中断回调中的PID控制在HRTIM定时器A的重复事件中断中执行实时控制每周期执行 { 1. ADC采样更新 - 读取输入/输出电压、电流值 - 应用传感器校准系数 2. PID闭环控制 if (系统已启动) { 执行双环PID控制电压环电流环 if (软启动进行中) { Vref 0.01V // 电压参考值斜坡上升 Iref 0.01A // 电流参考值斜坡上升 if (Vref ≥ Target_voltage Iref ≥ Target_Current) 退出软启动模式 更新PID目标值 } } }核心代码由于板子还需优化这里就只发布初版的状态机控制的代码完整代码将在下一版完全开源//状态机控制 void state_machine(void) { Next_StateCurrent_StateTask_0_Initial_state; while(1) { Current_State Next_State; switch (Current_State) { case Task_0_Initial_state: { Reset_VAR(); LED_Red_ON(); PID_Init(); Next_State Task_1_Vin_detc; } break; case Task_1_Vin_detc: //输入电压检测 { /*-------过压检测-------*/ if(Vin Vin_ovp) { flag_Vin_ovp Error; Next_State Task_0_Initial_state; break; } if(flag_Vin_ovp Error) { if(Vin Vin_ovp - 2.0f){flag_Vin_ovp Normal;} else{Next_State Task_0_Initial_state;break;} } /*-------欠压检测-------*/ if(Vin Vin_uvp) { flag_Vin_uvp Error; Next_State Task_0_Initial_state; } if(flag_Vin_uvp Error) { if(Vin Vin_uvp 2.0f){flag_Vin_uvp Normal;} else{Next_State Task_0_Initial_state;break;} } Next_State Task_2_Vout_detc; } break; case Task_2_Vout_detc://输出电压检测 { if(Vout Vout_ovp)OVP_CNT; else{OVP_CNT 0;} if(OVP_CNT 1000) {flag_Vout_ovp Error;Next_State Task_0_Initial_state;break;} Next_State Task_3_Iout_detc; } break; case Task_3_Iout_detc://输出电流检测 { if(Iout Iout_ocp)OCP_CNT; else{OCP_CNT 0;} if(OCP_CNT 1000) {flag_Iout_ovp Error;Next_State Task_0_Initial_state;break;} Next_State Task_4_PC_command; } break; case Task_4_PC_command: { if(flag_start_Control ! STOP)Next_State Task_5_Soft_start; else Next_State Task_1_Vin_detc; } break; case Task_5_Soft_start: { Delay_ms(1000); LED_Green_ON(); flag_Soft_start Run; } break; } } } //高精度定时器回调函数 void HAL_HRTIM_RepetitionEventCallback(HRTIM_HandleTypeDef *hhrtim,uint32_t TimerIdx) { if (TimerIdx HRTIM_TIMERINDEX_TIMER_A ) // 判断是否是TIMA定时器 { Vin (float)((ADC1_DMA_Value[1]*3300)12)*0.011f; Iin (float)((ADC1_DMA_Value[0]*3300)12)*0.00757575f-12.49998f; Vout (float)((ADC2_DMA_Value[0]*3300)12)*0.011f; Iout (float)((ADC2_DMA_Value[1]*3300)12)*0.00757575f-12.49998f; if(flag_start_ControlSTOP) { PID_control(Vout,Iout); if(flag_Soft_start!STOP) { if(VrefTarget_voltage IrefTarget_Current){flag_Soft_startSTOP;} if(VrefTarget_voltage)Vref0.01f; if(IrefTarget_Current)Iref0.01f; PID_tatgrt_value_modify(Vref,Voltage_control); PID_tatgrt_value_modify(Iref,Current_control); } } } }更新时间 2026.6.6此次更新为第一次更新发布了理论计算与初版设计更新时间 2026.8.26此次更新为第二次更新修改了纹波计算输入输出电容的错误