基于STM32与TPS61170的高效可编程DC-DC升压转换器设计
1. 项目背景与核心器件选型
在工业控制、医疗设备和实验室仪器等领域,经常需要将低电压直流电源转换为高电压直流电源。传统方案采用分立元件搭建,存在效率低、体积大、稳定性差等问题。本项目采用TI的TPS61170升压转换器与ST的STM32F070RB微控制器组合,构建一个高效、可编程的高压DC-DC转换系统。
TPS61170是一款集成1.2A开关管的单片升压转换器,具有以下突出特性:
- 输入电压范围3-18V,输出电压最高可达38V
- 固定1.2MHz开关频率,允许使用小型电感和陶瓷电容
- 集成软启动、过流保护和热关断功能
- 采用2x2mm QFN封装,节省PCB空间
STM32F070RB作为控制核心,其优势在于:
- 48MHz Cortex-M0内核,满足实时控制需求
- 内置12位ADC,可用于输出电压采样
- 多路PWM输出,适合驱动TPS61170的CTRL引脚
- 丰富的通信接口(I2C/SPI/UART)便于系统集成
2. 硬件电路设计与关键参数计算
2.1 升压拓扑基础原理
升压转换器(Boost Converter)通过开关管周期性储能/释能实现电压提升。当开关管导通时,电感储能;关断时,电感电压与输入电压叠加,通过二极管向输出电容充电。输出电压由占空比D决定: Vout = Vin / (1 - D)
TPS61170采用峰值电流模式控制,相比电压模式具有更好的瞬态响应和内在过流保护能力。
2.2 外围元件选型计算
以输入12V升压至24V/150mA为例:
电感选择: 临界电感值Lmin = (Vin × D) / (ΔIL × fsw) 取ΔIL为30%额定电流(0.45A),D=0.5: Lmin = (12×0.5)/(0.45×1.2M) ≈ 11μH 选用15μH/1.5A饱和电流的屏蔽电感(如TDK VLS201510ET-150M)
输出电容: 为保持输出电压纹波<1%,需: Cout ≥ Iout × D / (fsw × ΔVout) = 0.15×0.5/(1.2M×0.24) ≈ 0.26μF 实际选用10μF/50V X7R陶瓷电容(如Murata GRM32ER71H106KA12L)
二极管选择: 需满足反向电压>38V,正向电流>1.2A 选用肖特基二极管SS34(40V/3A)
2.3 PCB布局要点
- 功率回路(输入电容-电感-开关管-地)路径尽量短
- FB分压电阻靠近芯片放置,走线避免噪声耦合
- 使用大面积地平面,功率地和信号地单点连接
- 芯片底部散热焊盘必须良好焊接
3. STM32控制程序设计
3.1 PWM调压实现
TPS61170的CTRL引脚支持两种调压方式:
- Easyscale数字接口:通过特定脉冲序列调整FB基准电压
- PWM模拟调压:PWM占空比线性调节输出电压
本设计采用PWM方式,STM32配置如下:
// PWM配置(TIM3 CH1, 10kHz) TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct; TIM_OCInitTypeDef TIM_OCInitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStruct.TIM_Prescaler = 48-1; // 1MHz TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStruct.TIM_Period = 100-1; // 10kHz TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStruct); TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStruct.TIM_Pulse = 50; // 初始50%占空比 TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStruct); TIM_Cmd(TIM3, ENABLE); TIM_CtrlPWMOutputs(TIM3, ENABLE);3.2 电压闭环控制
通过ADC采样输出电压实现闭环调节:
#define VOUT_TARGET 2400 // 24.00V #define KP 0.5 #define KI 0.01 int32_t error_sum = 0; void ADC_IRQHandler(void) { static uint16_t adc_value; if(ADC_GetITStatus(ADC1, ADC_IT_EOC)) { adc_value = ADC_GetConversionValue(ADC1); float vout = adc_value * 3.3 / 4096 * 11; // 分压比1:10 int32_t error = VOUT_TARGET - (int32_t)(vout*100); error_sum += error; int32_t pwm_val = 50 + KP*error + KI*error_sum; pwm_val = (pwm_val < 0) ? 0 : (pwm_val > 90) ? 90 : pwm_val; TIM3->CCR1 = pwm_val; } ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); }4. 系统测试与性能优化
4.1 基础测试项目
启动特性测试:
- 输入12V,测量输出电压建立时间
- 观察软启动过程是否平滑(约1ms)
负载调整率测试:
- 空载至满载(150mA)阶跃变化
- 记录输出电压波动应<±2%
效率测量:
- 使用四线法测量输入/输出功率
- 典型效率曲线应>85%(12V→24V)
4.2 常见问题解决
输出电压振荡:
- 检查补偿网络(RC串联在COMP引脚)
- 适当增加输出电容ESR(可并联1Ω电阻)
轻载效率低:
- 确认芯片进入skip模式
- 减小电感值(但需保证重载连续导通)
EMI超标:
- 在开关节点添加1nF-100Ω snubber电路
- 使用三明治绕法电感
4.3 进阶功能扩展
多级输出电压:
void SetOutputVoltage(uint16_t mv) { float ratio = (mv / 1000.0) / 24.0 * 10; // 分压比校准 uint16_t pwm = (uint16_t)(ratio * 100); TIM3->CCR1 = (pwm > 90) ? 90 : pwm; }故障保护机制:
- 过压保护:ADC检测到Vout超限时关闭PWM
- 过流保护:检测输入电流(通过采样电阻+ADC)
通信接口:
void UART_CommandHandler(char* cmd) { if(strncmp(cmd, "SET ", 4) == 0) { uint16_t voltage = atoi(cmd+4); SetOutputVoltage(voltage); } }
5. 实际应用案例与设计验证
在某工业传感器供电项目中,该系统实现了以下性能指标:
- 输入范围:9-18VDC
- 输出精度:24V±1%(全温度范围)
- 转换效率:89%@12V输入/150mA负载
- 纹波噪声:<50mVpp
关键改进措施:
- 在FB引脚添加1nF滤波电容,抑制高频噪声
- 使用开尔文连接法测量输出电压
- 高温环境下增加散热铜箔面积
长期运行测试数据表明:
- 连续工作1000小时输出电压漂移<0.5%
- 负载瞬态响应时间<200μs(50%-100%阶跃)
- 环境温度-20℃~+85℃范围内工作稳定
对于需要更高电压的应用,可采用级联方案:第一级升压至24V,第二级再升至48V。此时需注意:
- 级间添加LC滤波,降低纹波累积
- 合理分配两级转换比,优化整体效率
- 采用隔离反馈方案,避免地回路干扰
