基于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为例:

  1. 电感选择: 临界电感值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)

  2. 输出电容: 为保持输出电压纹波<1%,需: Cout ≥ Iout × D / (fsw × ΔVout) = 0.15×0.5/(1.2M×0.24) ≈ 0.26μF 实际选用10μF/50V X7R陶瓷电容(如Murata GRM32ER71H106KA12L)

  3. 二极管选择: 需满足反向电压>38V,正向电流>1.2A 选用肖特基二极管SS34(40V/3A)

2.3 PCB布局要点

  • 功率回路(输入电容-电感-开关管-地)路径尽量短
  • FB分压电阻靠近芯片放置,走线避免噪声耦合
  • 使用大面积地平面,功率地和信号地单点连接
  • 芯片底部散热焊盘必须良好焊接

3. STM32控制程序设计

3.1 PWM调压实现

TPS61170的CTRL引脚支持两种调压方式:

  1. Easyscale数字接口:通过特定脉冲序列调整FB基准电压
  2. 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 基础测试项目

  1. 启动特性测试

    • 输入12V,测量输出电压建立时间
    • 观察软启动过程是否平滑(约1ms)
  2. 负载调整率测试

    • 空载至满载(150mA)阶跃变化
    • 记录输出电压波动应<±2%
  3. 效率测量

    • 使用四线法测量输入/输出功率
    • 典型效率曲线应>85%(12V→24V)

4.2 常见问题解决

  1. 输出电压振荡

    • 检查补偿网络(RC串联在COMP引脚)
    • 适当增加输出电容ESR(可并联1Ω电阻)
  2. 轻载效率低

    • 确认芯片进入skip模式
    • 减小电感值(但需保证重载连续导通)
  3. EMI超标

    • 在开关节点添加1nF-100Ω snubber电路
    • 使用三明治绕法电感

4.3 进阶功能扩展

  1. 多级输出电压

    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; }
  2. 故障保护机制

    • 过压保护:ADC检测到Vout超限时关闭PWM
    • 过流保护:检测输入电流(通过采样电阻+ADC)
  3. 通信接口

    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

关键改进措施:

  1. 在FB引脚添加1nF滤波电容,抑制高频噪声
  2. 使用开尔文连接法测量输出电压
  3. 高温环境下增加散热铜箔面积

长期运行测试数据表明:

  • 连续工作1000小时输出电压漂移<0.5%
  • 负载瞬态响应时间<200μs(50%-100%阶跃)
  • 环境温度-20℃~+85℃范围内工作稳定

对于需要更高电压的应用,可采用级联方案:第一级升压至24V,第二级再升至48V。此时需注意:

  • 级间添加LC滤波,降低纹波累积
  • 合理分配两级转换比,优化整体效率
  • 采用隔离反馈方案,避免地回路干扰