1. 项目背景与核心器件选型
在工业控制、医疗设备和实验室仪器等领域,经常需要将低压直流电源转换为高压直流电源。传统方案采用分立元件搭建,存在效率低、体积大、稳定性差等问题。本项目采用TI的TPS61170升压转换器与ST的STM32F765ZI微控制器组合,构建了一套智能可调的高压DC-DC转换系统。
TPS61170是一款集成1.2A开关管的单片升压转换器,具有以下突出特性:
- 输入电压范围3-18V,输出电压最高可达38V
- 固定1.2MHz开关频率,允许使用小型电感和陶瓷电容
- 内置软启动、过流保护和热关断功能
- 6引脚2x2mm QFN封装,节省PCB空间
STM32F765ZI作为主控芯片的优势在于:
- 216MHz Cortex-M7内核,带FPU和DSP指令集
- 丰富的外设接口(12个定时器、3个ADC、4个USART等)
- 内置256KB SRAM和2MB Flash,满足复杂控制算法需求
- 支持硬件CRC校验,提升通信可靠性
2. 硬件电路设计与关键参数计算
2.1 升压转换器基本拓扑
TPS61170典型应用电路采用boost拓扑结构,核心元件包括:
- 功率电感(L1):存储和传递能量
- 输出电容(Cout):平滑输出电压
- 反馈电阻(R1/R2):设置输出电压
- 肖特基二极管(D1):提供电流通路
输出电压计算公式: Vout = Vfb × (1 + R1/R2) 其中Vfb为反馈基准电压1.229V
2.2 电感选型计算
电感值直接影响纹波电流和工作模式,计算公式为: L = (Vin × D) / (ΔIL × fsw) 其中:
- D = (Vout - Vin) / Vout (占空比)
- ΔIL建议取最大输入电流的20-40%
- fsw=1.2MHz(固定开关频率)
例如Vin=5V, Vout=24V时: D = (24-5)/24 ≈ 0.79 假设Iin_max=0.5A, 取ΔIL=0.2A 则L ≈ (5×0.79)/(0.2×1.2×10⁶) ≈ 16.5μH 实际选用22μH/2A的屏蔽电感
2.3 输出电容选择
输出电容需满足两方面要求:
- 电压额定值:至少1.2倍最大输出电压
- 容量计算:Cout ≥ Iout × D / (fsw × ΔVout) 其中ΔVout为允许的输出纹波电压
以24V/150mA输出为例,允许纹波100mV: Cout ≥ 0.15×0.79 / (1.2×10⁶×0.1) ≈ 0.99μF 实际选用10μF/50V X7R陶瓷电容
3. STM32控制接口实现
3.1 PWM调压接口
TPS61170的CTRL引脚支持两种调压方式:
- Easyscale™数字协议:通过单线接口调整Vfb
- PWM模拟调压:PWM占空比线性调节输出电压
本项目采用PWM方式,STM32配置如下:
// TIM1 Channel1 PWM输出初始化 void PWM_Init(void) { TIM_HandleTypeDef htim1; htim1.Instance = TIM1; htim1.Init.Prescaler = 215; // 1MHz时钟 htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 999; // 1kHz PWM htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim1); TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; // 初始50%占空比 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); }3.2 电压电流监测
通过STM32内置ADC监测输入输出参数:
// ADC多通道采集配置 void ADC_Config(void) { ADC_ChannelConfTypeDef sConfig = {0}; hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = ENABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 2; hadc1.Init.DMAContinuousRequests = ENABLE; HAL_ADC_Init(&hadc1); // 通道0 - 输入电压检测 sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_480CYCLES; HAL_ADC_ConfigChannel(&hadc1, &sConfig); // 通道1 - 输出电压检测 sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = 2; HAL_ADC_ConfigChannel(&hadc1, &sConfig); }4. 系统软件设计与保护策略
4.1 闭环控制算法
采用增量式PID算法实现电压精确调节:
typedef struct { float Kp, Ki, Kd; float err_prev, err_accum; } PID_Controller; float PID_Update(PID_Controller* pid, float setpoint, float measured) { float err = setpoint - measured; float d_err = err - pid->err_prev; pid->err_accum += err; float output = pid->Kp * err + pid->Ki * pid->err_accum + pid->Kd * d_err; pid->err_prev = err; return output; } // PWM占空比限幅处理 void Update_PWM_Duty(float duty) { duty = (duty < 0) ? 0 : (duty > 0.95) ? 0.95 : duty; __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, (uint32_t)(duty * 999)); }4.2 多重保护机制
- 输入欠压保护:Vin<3.0V时关闭输出
- 输出过压保护:Vout>设定值10%时触发
- 过流保护:通过检流电阻监测开关电流
- 温度保护:NTC监测PCB温度
保护触发处理流程:
void Protection_Handler(void) { static uint32_t fault_timestamp = 0; // 读取各保护标志 bool ovp = (Read_OVP_Flag() == SET); bool ocp = (Read_OCP_Flag() == SET); bool otp = (Read_OTP_Flag() == SET); if(ovp || ocp || otp) { // 首次触发记录时间 if(fault_timestamp == 0) { fault_timestamp = HAL_GetTick(); Disable_Converter(); Set_Fault_LED(); } // 持续1秒后尝试恢复 else if(HAL_GetTick() - fault_timestamp > 1000) { Clear_Protection_Flags(); Enable_Converter(); fault_timestamp = 0; } } }5. 实测性能与优化建议
5.1 效率测试数据
| 输入电压(V) | 输出电压(V) | 负载电流(mA) | 效率(%) |
|---|---|---|---|
| 5.0 | 12.0 | 100 | 89.2 |
| 5.0 | 24.0 | 50 | 85.7 |
| 12.0 | 24.0 | 150 | 92.3 |
| 12.0 | 36.0 | 80 | 88.9 |
5.2 PCB布局要点
- 功率回路最小化:SW引脚→电感→二极管→输出电容的路径要短而宽
- 地平面分割:模拟地(反馈网络)与功率地单点连接
- 热设计:QFN封装底部需有足够散热焊盘和过孔
- 噪声敏感信号:FB走线远离SW和电感,必要时加屏蔽
5.3 常见问题排查
启动失败:
- 检查EN引脚电平(需>1.5V)
- 确认输入电容足够大(建议≥10μF)
- 测量电感是否饱和
输出电压不稳:
- 检查反馈电阻精度(建议1%)
- 确认CTRL引脚无干扰
- 优化补偿网络(RC参数)
效率偏低:
- 测量二极管正向压降(建议使用低压降肖特基)
- 检查电感DCR值(越低越好)
- 评估开关波形是否有异常振荡
在实际项目中,这种组合方案特别适合需要可编程高压输出的便携式设备。通过STM32的智能控制,可以实现输出电压的动态调整、运行状态监测以及故障自诊断等高级功能。一个实用的技巧是在PCB上预留TPS61170EVM兼容的接口,方便快速更换不同型号进行性能对比测试。