news 2026/7/12 11:25:02

基于STM32与TPS61170的高效DC-DC升压系统设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32与TPS61170的高效DC-DC升压系统设计

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

在工业控制、医疗设备和实验室仪器等领域,经常需要将低压直流电源转换为高压直流电源。传统方案采用分立元件搭建,存在效率低、体积大、稳定性差等问题。本项目采用TI的TPS61170升压转换器与ST的STM32F745ZG微控制器组合,构建高效可靠的DC-DC升压系统。

TPS61170是一款集成1.2A开关管的单片升压转换器,具有以下突出特性:

  • 输入电压范围3-18V,输出电压最高可达38V
  • 固定1.2MHz开关频率,允许使用小型电感和陶瓷电容
  • 集成93%占空比的功率MOSFET
  • 支持轻载时的跳周期模式(Skip Mode)提高效率
  • 6引脚2x2mm QFN封装节省空间

STM32F745ZG作为主控芯片的优势在于:

  • 带FPU的216MHz Cortex-M7内核
  • 丰富的定时器资源(PWM生成)
  • 1MB Flash+320KB RAM
  • 多种通信接口(SPI/I2C/USART)
  • 内置12位ADC用于电压监测

2. 硬件电路设计详解

2.1 升压转换器核心电路

TPS61170的典型应用电路如图1所示。关键设计参数计算如下:

  1. 输出电压设定: Vout = Vref × (1 + R1/R2) 其中Vref=1.229V,选取R2=10kΩ,则R1=(Vout/1.229-1)×10k 例如需要24V输出时:R1=(24/1.229-1)×10k≈184kΩ

  2. 电感选型计算: 电感电流纹波通常取最大开关电流的20%-40% ΔIL = (Vin × D)/(L × fsw) 其中D=1-Vin/Vout,fsw=1.2MHz 以Vin=5V,Vout=24V为例: D=1-5/24≈0.79 取ΔIL=0.3A则: L=(5×0.79)/(0.3×1.2e6)≈11μH

  3. 输入电容选择: 输入电容需满足: Cin > Iout × D/(fsw × ΔVin) 假设允许输入纹波ΔVin=50mV: Cin > 0.3×0.79/(1.2e6×0.05)≈3.95μF 实际选用10μF陶瓷电容

2.2 STM32接口电路设计

STM32与TPS61170的硬件连接主要包括:

  • PWM输出:使用TIM1_CH1连接CTRL引脚
  • ADC输入:配置PA0为ADC1_IN0监测输出电压
  • GPIO控制:PG13连接EN引脚实现使能控制
  • 调试接口:USART1连接PC串口调试

特别注意:

  • PWM频率建议设置为1kHz-10kHz
  • ADC采样率需与PWM周期同步
  • EN引脚需加10k上拉电阻

3. 软件控制策略实现

3.1 基础PWM调压方案

通过改变PWM占空比调节输出电压是最直接的控制方式:

// PWM初始化代码 TIM_HandleTypeDef htim1; TIM_OC_InitTypeDef sConfigOC; htim1.Instance = TIM1; htim1.Init.Prescaler = 215; // 216MHz/(215+1)=1MHz htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 999; // 1MHz/1000=1kHz PWM HAL_TIM_PWM_Init(&htim1); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; // 初始50%占空比 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

3.2 闭环电压控制算法

采用PID算法实现精确电压调节:

#define KP 0.5 #define KI 0.01 #define KD 0.1 float pid_control(float target, float actual) { static float integral = 0; static float prev_error = 0; float error = target - actual; integral += error; float derivative = error - prev_error; prev_error = error; return KP*error + KI*integral + KD*derivative; } void adjust_voltage(float target) { float adc_value = read_adc(); float actual_voltage = adc_value * 3.3 / 4096 * (184+10)/10; // 分压比计算 float adjust = pid_control(target, actual_voltage); uint16_t new_pulse = __HAL_TIM_GET_COMPARE(&htim1, TIM_CHANNEL_1); new_pulse += (uint16_t)adjust; new_pulse = (new_pulse > 950) ? 950 : (new_pulse < 50) ? 50 : new_pulse; __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, new_pulse); }

3.3 保护功能实现

  1. 过压保护:
if(actual_voltage > target * 1.1) { // 超过10% HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_RESET); // 关闭EN error_handler(); }
  1. 软启动实现:
void soft_start(float target, uint16_t steps) { uint16_t pulse = 50; // 初始5% __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pulse); HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET); for(int i=0; i<steps; i++) { pulse += (950-50)/steps; __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, pulse); HAL_Delay(10); } }

4. 实测性能与优化建议

4.1 效率测试数据

在不同输入输出电压组合下的实测效率:

Vin(V)Vout(V)Iout(mA)效率(%)
51210089
5245085
122410092
12365088

4.2 常见问题解决方案

  1. 输出电压振荡:

    • 检查FB引脚走线,需远离电感等噪声源
    • 在FB引脚添加100pF-1nF的滤波电容
    • 调整PID参数,降低KP增加KI
  2. 轻载时效率低:

    • 启用Skip Mode:CTRL引脚接高电平
    • 输出端并联100kΩ假负载
  3. 芯片过热:

    • 检查电感饱和电流是否足够
    • 加强PCB散热设计,增加散热过孔
    • 降低开关频率(通过外部时钟同步)

4.3 PCB布局要点

  1. 功率回路最小化:

    • 输入电容→电感→TPS61170→GND的环路面积要小
    • 使用短而宽的走线(至少20mil)
  2. 敏感信号处理:

    • FB引脚走线远离功率元件
    • CTRL信号加33Ω串联电阻防振铃
  3. 散热设计:

    • 芯片底部焊盘必须良好焊接
    • 在电源层添加散热过孔阵列

5. 进阶应用扩展

5.1 多级升压方案

对于需要更高电压的应用,可采用两级升压架构:

  1. 第一级:TPS61170升压至24V
  2. 第二级:MOSFET+变压器推挽电路

STM32可统一控制两级电路,实现软启动同步。

5.2 电池供电优化

针对电池供电场景的特殊优化:

  1. 动态电压调节:
    • 根据电池电量降低输出电压
    • 实现方法:
float get_battery_voltage() { // 读取电池电压ADC值 return adc_value * 3.3 / 4096 * 2; // 假设分压比1:1 } void dynamic_adjust() { float bat_voltage = get_battery_voltage(); if(bat_voltage < 3.3) { // 低电量模式 adjust_voltage(18.0); // 降额输出 } else { adjust_voltage(24.0); } }
  1. 低功耗模式:
    • 空闲时关闭PWM进入Skip Mode
    • 定期唤醒检测负载需求

5.3 数字通信接口

通过STM32的USART或I2C接口实现:

  1. 输出电压远程设置
  2. 工作状态查询
  3. 故障日志上传

示例协议帧格式:

[HEAD][CMD][LEN][DATA][CRC] HEAD: 0xAA CMD: 0x01 - 设置电压 0x02 - 读取状态 DATA: 对于0x01命令:2字节电压值(单位0.1V) 对于0x02命令:1字节状态码
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 11:25:02

C++ bitset性能优化实战:从底层原理到高效位运算编程

1. 项目概述 在C的世界里&#xff0c;处理海量的布尔状态或标志位是家常便饭。从游戏开发中的碰撞检测标记&#xff0c;到网络协议中的标志位解析&#xff0c;再到算法竞赛中的状态压缩&#xff0c;我们总希望用最小的内存、最快的速度来完成这些操作。很多开发者第一反应是使用…

作者头像 李华
网站建设 2026/7/12 11:21:14

中国骨干网演进史:从4大元老到10大网络,30年技术路线图解析

中国骨干网30年技术演进&#xff1a;从四大元老到全场景智能化的跃迁之路1994年4月20日&#xff0c;一条64Kbps的国际专线从北京中关村接入全球互联网&#xff0c;这个带宽仅能支持同时传输4张手机照片的数据通道&#xff0c;却成为中国互联网时代的起点。三十年间&#xff0c;…

作者头像 李华
网站建设 2026/7/12 11:19:33

猫抓浏览器扩展:让网页视频下载变得前所未有的简单

猫抓浏览器扩展&#xff1a;让网页视频下载变得前所未有的简单 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页上的精彩视频无法保存而烦…

作者头像 李华