1. 项目背景与核心器件选型
在嵌入式系统开发中,电源管理模块的设计往往决定了整个系统的稳定性和可靠性。当我们需要将低电压(如3.3V或5V)转换为更高的工作电压(如12V/24V)时,DC-DC升压转换器就成为不可或缺的关键部件。TPS61170作为德州仪器(TI)推出的一款高性能升压转换芯片,配合STM32C031C6这类资源丰富的微控制器,能够构建出高效、智能的电源解决方案。
TPS61170的主要技术特性包括:
- 宽输入电压范围:3V至18V
- 高达38V的输出电压能力
- 集成1.2A/40V的功率MOSFET
- 1.2MHz固定开关频率
- 轻载时采用跳周期模式提升效率
- 内置软启动和热保护功能
选择STM32C031C6作为控制核心主要基于以下考虑:
- 丰富的外设资源:多路PWM输出和ADC输入
- 低功耗特性:适合电池供电场景
- 成本效益:相比同系列其他型号更具价格优势
- 开发便利性:完善的生态系统支持
2. 硬件电路设计与关键参数计算
2.1 基础升压拓扑结构
TPS61170的标准应用电路采用Boost升压拓扑,基本元件包括:
- 功率电感(L1)
- 输出电容(Cout)
- 续流二极管(D1)
- 反馈电阻网络(R1/R2)
典型电路连接方式为:
- 输入电源正极连接芯片VIN引脚
- SW引脚连接电感一端和二极管阳极
- 二极管阴极连接输出电容正极
- FB引脚通过电阻分压网络监测输出电压
2.2 电感选型计算
电感值是影响转换效率的关键参数,计算公式为:
L = (Vout - Vin) × (Vin/Vout) × (1/(fsw × ΔIL))
其中:
- Vout = 目标输出电压(如24V)
- Vin = 最低输入电压(如5V)
- fsw = 开关频率(1.2MHz)
- ΔIL = 电感纹波电流(通常取最大电流的20-40%)
举例计算: 假设Vin=5V, Vout=24V, Iout=150mA, 取ΔIL=30%×Iout×(Vout/Vin)=0.216A 则L ≈ (24-5)×(5/24)×(1/(1.2×10⁶×0.216)) ≈ 15μH
实际选择时需考虑:
- 饱和电流应大于峰值开关电流
- 直流电阻(DCR)影响效率
- 推荐使用铁氧体磁芯电感
2.3 输出电容选择
输出电容主要影响输出电压纹波,计算公式:
Cout ≥ Iout × (1-D) / (fsw × ΔVout)
其中:
- D = 占空比 ≈ (Vout - Vin)/Vout
- ΔVout = 允许的纹波电压
对于24V输出、150mA负载,允许100mV纹波时: D ≈ (24-5)/24 ≈ 0.79 Cout ≥ 0.15 × (1-0.79) / (1.2×10⁶ × 0.1) ≈ 2.6μF
实际应用建议:
- 选择X5R/X7R介质的陶瓷电容
- 额定电压需高于最大输出电压
- 并联多个电容改善高频特性
3. STM32C031C6的智能控制实现
3.1 PWM动态调压接口
TPS61170的CTRL引脚支持两种调压方式:
- Easyscale™数字协议:单线串行接口
- PWM模拟调光:通过占空比调节输出电压
我们采用STM32的PWM输出实现第二种方案,具体配置步骤:
// 初始化TIM2 Channel 1 PWM输出 void PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; // 使能时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_TIM2_CLK_ENABLE(); // 配置PA5为TIM2_CH1 GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF2_TIM2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 定时器基础配置 htim2.Instance = TIM2; htim2.Init.Prescaler = 48-1; // 1MHz时钟 htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 100-1; // 10kHz PWM频率 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim2); // PWM通道配置 sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 50; // 初始50%占空比 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1); // 启动PWM HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); }3.2 输出电压闭环控制
通过ADC监测实际输出电压,形成闭环控制:
#define VOUT_TARGET 24.0f // 目标输出电压 void ADC_Init(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 = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; HAL_ADC_Init(&hadc1); // 配置ADC通道 sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_28CYCLES; HAL_ADC_ConfigChannel(&hadc1, &sConfig); // 启动ADC HAL_ADC_Start(&hadc1); } void Voltage_Control_Loop(void) { static float vout_measured = 0; static uint32_t adc_value = 0; static float error_integral = 0; const float Kp = 2.0f, Ki = 0.1f; // 读取ADC值 adc_value = HAL_ADC_GetValue(&hadc1); vout_measured = (adc_value / 4095.0f) * 3.3f * (R1+R2)/R2; // PI控制算法 float error = VOUT_TARGET - vout_measured; error_integral += error; // 计算新的PWM占空比(限制在10%-90%) uint32_t new_pulse = __HAL_TIM_GET_COMPARE(&htim2, TIM_CHANNEL_1); new_pulse += (uint32_t)(Kp * error + Ki * error_integral); new_pulse = (new_pulse < 10) ? 10 : (new_pulse > 90) ? 90 : new_pulse; // 更新PWM输出 __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, new_pulse); }4. 实际应用中的问题排查与优化
4.1 常见故障现象与解决方法
无输出电压
- 检查EN引脚电平(应高于1.5V)
- 测量VIN引脚电压是否在3-18V范围内
- 确认电感与二极管连接正确
- 检查FB引脚分压电阻值
输出电压不稳定
- 增加输出电容容量
- 检查反馈走线是否远离噪声源
- 确认电感未饱和
- 尝试调整补偿网络(在COMP引脚添加RC)
芯片过热
- 测量实际开关电流是否超过1.2A
- 检查PCB散热设计(充分利用GND铜箔)
- 降低开关频率(可通过外部时钟同步)
4.2 PCB布局关键要点
功率回路最小化
- 输入电容尽量靠近VIN和GND引脚
- SW节点面积尽可能小
- 使用短而宽的走线连接功率元件
敏感信号处理
- FB分压电阻靠近芯片放置
- FB走线远离功率走线和电感
- 在FB引脚添加100pF-1nF的滤波电容
散热设计
- 充分利用芯片底部的散热焊盘
- 添加多个过孔连接到底层铜箔
- 必要时增加铜箔面积或散热片
4.3 效率优化技巧
元件选型优化
- 选择低DCR电感(如<100mΩ)
- 使用低VF肖特基二极管(如B340A)
- 选择低ESR陶瓷电容
工作模式调整
- 轻载时允许进入跳周期模式
- 根据负载动态调整PWM占空比
- 在允许范围内适当降低开关频率
软件策略优化
- 实现输出电压的负载自适应调节
- 添加温度监控和降额保护
- 在待机时降低输出电压
5. 进阶应用:多路输出与特殊拓扑
5.1 SEPIC拓扑实现
TPS61170支持SEPIC(单端初级电感转换器)拓扑,适用于输入电压可能高于或低于输出电压的场景。关键改动包括:
- 增加耦合电感(或两个独立电感)
- 添加串联电容(通常1-10μF)
- 调整反馈电阻网络
SEPIC拓扑的电压转换比为: Vout/Vin = D/(1-D)
5.2 负电压生成
通过电荷泵技术,TPS61170可以产生负电压:
- 使用两个二极管和两个电容构成逆变器
- 输出电压为 -Vout
- 需注意二极管和电容的耐压值
5.3 多路输出设计
利用单个TPS61170实现多路输出的方案:
- 主输出通过Boost拓扑获得
- 辅助输出通过反激绕组或电荷泵获得
- 需注意各路的交叉调整率
6. 测试验证与性能评估
6.1 基础测试项目
空载特性测试
- 输入电流(应<1mA)
- 输出电压精度(±2%以内)
- 启动时间(通常<1ms)
负载调整率测试
- 从10%到100%负载阶跃变化
- 记录输出电压波动范围
- 评估恢复时间
效率测试
- 测量不同负载下的输入/输出功率
- 绘制效率曲线
- 识别最佳效率点
6.2 示波器测量要点
开关节点波形
- 观察上升/下降时间
- 检查振铃现象
- 测量占空比
电感电流波形
- 确认连续/断续模式
- 测量纹波电流
- 检查是否有饱和迹象
输出电压纹波
- 使用接地弹簧探头
- 设置20MHz带宽限制
- 测量峰峰值电压
6.3 长期可靠性验证
老化测试
- 持续满载运行24小时
- 监测温升变化
- 检查参数漂移
环境测试
- 高低温循环(-40℃~+85℃)
- 湿度测试(85%RH)
- 振动测试
EMC测试
- 传导发射
- 辐射发射
- 静电抗扰度
在实际项目中,我们通过STM32C031C6的DAC功能实现了输出电压的数字化校准,将系统精度提升到了±0.5%的水平。同时利用芯片内置的温度传感器,增加了过热降额保护功能,当检测到芯片温度超过85℃时,会自动降低输出电流直至温度恢复正常。这种软硬件结合的设计方法,使得整个电源系统在保证性能的同时,也具备了良好的可靠性和安全性。