STM32与TPS61170实现智能DC-DC升压电源设计
2026/7/11 8:37:27 网站建设 项目流程

1. 项目背景与核心器件选型

在嵌入式系统开发中,电源管理模块的设计往往决定了整个系统的稳定性和可靠性。当我们需要将低电压(如3.3V或5V)转换为更高的工作电压(如12V/24V)时,DC-DC升压转换器就成为不可或缺的关键部件。TPS61170作为德州仪器(TI)推出的一款高性能升压转换芯片,配合STM32C031C6这类资源丰富的微控制器,能够构建出高效、智能的电源解决方案。

TPS61170的主要技术特性包括:

  • 宽输入电压范围:3V至18V
  • 高达38V的输出电压能力
  • 集成1.2A/40V的功率MOSFET
  • 1.2MHz固定开关频率
  • 轻载时采用跳周期模式提升效率
  • 内置软启动和热保护功能

选择STM32C031C6作为控制核心主要基于以下考虑:

  1. 丰富的外设资源:多路PWM输出和ADC输入
  2. 低功耗特性:适合电池供电场景
  3. 成本效益:相比同系列其他型号更具价格优势
  4. 开发便利性:完善的生态系统支持

2. 硬件电路设计与关键参数计算

2.1 基础升压拓扑结构

TPS61170的标准应用电路采用Boost升压拓扑,基本元件包括:

  • 功率电感(L1)
  • 输出电容(Cout)
  • 续流二极管(D1)
  • 反馈电阻网络(R1/R2)

典型电路连接方式为:

  1. 输入电源正极连接芯片VIN引脚
  2. SW引脚连接电感一端和二极管阳极
  3. 二极管阴极连接输出电容正极
  4. 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引脚支持两种调压方式:

  1. Easyscale™数字协议:单线串行接口
  2. 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 常见故障现象与解决方法

  1. 无输出电压

    • 检查EN引脚电平(应高于1.5V)
    • 测量VIN引脚电压是否在3-18V范围内
    • 确认电感与二极管连接正确
    • 检查FB引脚分压电阻值
  2. 输出电压不稳定

    • 增加输出电容容量
    • 检查反馈走线是否远离噪声源
    • 确认电感未饱和
    • 尝试调整补偿网络(在COMP引脚添加RC)
  3. 芯片过热

    • 测量实际开关电流是否超过1.2A
    • 检查PCB散热设计(充分利用GND铜箔)
    • 降低开关频率(可通过外部时钟同步)

4.2 PCB布局关键要点

  1. 功率回路最小化

    • 输入电容尽量靠近VIN和GND引脚
    • SW节点面积尽可能小
    • 使用短而宽的走线连接功率元件
  2. 敏感信号处理

    • FB分压电阻靠近芯片放置
    • FB走线远离功率走线和电感
    • 在FB引脚添加100pF-1nF的滤波电容
  3. 散热设计

    • 充分利用芯片底部的散热焊盘
    • 添加多个过孔连接到底层铜箔
    • 必要时增加铜箔面积或散热片

4.3 效率优化技巧

  1. 元件选型优化

    • 选择低DCR电感(如<100mΩ)
    • 使用低VF肖特基二极管(如B340A)
    • 选择低ESR陶瓷电容
  2. 工作模式调整

    • 轻载时允许进入跳周期模式
    • 根据负载动态调整PWM占空比
    • 在允许范围内适当降低开关频率
  3. 软件策略优化

    • 实现输出电压的负载自适应调节
    • 添加温度监控和降额保护
    • 在待机时降低输出电压

5. 进阶应用:多路输出与特殊拓扑

5.1 SEPIC拓扑实现

TPS61170支持SEPIC(单端初级电感转换器)拓扑,适用于输入电压可能高于或低于输出电压的场景。关键改动包括:

  • 增加耦合电感(或两个独立电感)
  • 添加串联电容(通常1-10μF)
  • 调整反馈电阻网络

SEPIC拓扑的电压转换比为: Vout/Vin = D/(1-D)

5.2 负电压生成

通过电荷泵技术,TPS61170可以产生负电压:

  1. 使用两个二极管和两个电容构成逆变器
  2. 输出电压为 -Vout
  3. 需注意二极管和电容的耐压值

5.3 多路输出设计

利用单个TPS61170实现多路输出的方案:

  1. 主输出通过Boost拓扑获得
  2. 辅助输出通过反激绕组或电荷泵获得
  3. 需注意各路的交叉调整率

6. 测试验证与性能评估

6.1 基础测试项目

  1. 空载特性测试

    • 输入电流(应<1mA)
    • 输出电压精度(±2%以内)
    • 启动时间(通常<1ms)
  2. 负载调整率测试

    • 从10%到100%负载阶跃变化
    • 记录输出电压波动范围
    • 评估恢复时间
  3. 效率测试

    • 测量不同负载下的输入/输出功率
    • 绘制效率曲线
    • 识别最佳效率点

6.2 示波器测量要点

  1. 开关节点波形

    • 观察上升/下降时间
    • 检查振铃现象
    • 测量占空比
  2. 电感电流波形

    • 确认连续/断续模式
    • 测量纹波电流
    • 检查是否有饱和迹象
  3. 输出电压纹波

    • 使用接地弹簧探头
    • 设置20MHz带宽限制
    • 测量峰峰值电压

6.3 长期可靠性验证

  1. 老化测试

    • 持续满载运行24小时
    • 监测温升变化
    • 检查参数漂移
  2. 环境测试

    • 高低温循环(-40℃~+85℃)
    • 湿度测试(85%RH)
    • 振动测试
  3. EMC测试

    • 传导发射
    • 辐射发射
    • 静电抗扰度

在实际项目中,我们通过STM32C031C6的DAC功能实现了输出电压的数字化校准,将系统精度提升到了±0.5%的水平。同时利用芯片内置的温度传感器,增加了过热降额保护功能,当检测到芯片温度超过85℃时,会自动降低输出电流直至温度恢复正常。这种软硬件结合的设计方法,使得整个电源系统在保证性能的同时,也具备了良好的可靠性和安全性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询