Skip to content

Repository files navigation

数控直流恒流电源

2026年东南大学电子设计竞赛 B题参赛作品

基于 STM32F103C8T6 + LM5175 四开关同步升降压拓扑的数控直流恒流电源,输入 12V,输出电流 0~2A 可调,效率实测 90.5%。


主要特性

  • 宽范围恒流输出:0~2A 连续可调,精度优于 ±5mA(校准后)
  • 自动 CC/CV 切换:输出电压低于 18V 时恒流,超过 18V 自动限压
  • 高效率:2A/8Ω 工况实测效率 95.5%,超出题目 90% 要求
  • 三重硬件保护:CS/CSG 逐周期峰值限流(2.66A)、ISNS 平均电流限制(2.27A)、LM5175 Hiccup 短路保护
  • 自适应 PID:基于负载电阻和误差大小的双重增益调度,全负载范围(0~10Ω)稳定控制
  • 数字人机交互:4×4 矩阵键盘设定电流,OLED 实时显示电流、电压、负载电阻、工作模式

系统架构

12V 输入
    │
    ├── MSMP2307DN(12V→5V)→ STM32 最小板 LDO(5V→3.3V)  辅助电源
    │
    └── LM5175 四开关升降压功率级
           │  (4× IRLR7843 MOSFET + 1mH 电感)
           │
        Rsample(20mΩ) ← INA226(I2C1, Alert→EXTI)
           │
        0~2A 输出 → 负载(0~10Ω)

STM32F103C8T6
    ├── TIM1 CH1 PWM → RC 滤波 → 注入 LM5175 FB 引脚(调节输出电压)
    ├── I2C1 → INA226(电流/电压采样)
    ├── I2C2 → OLED SSD1306(DMA 刷新)
    ├── I2C2 → 4×4 矩阵键盘
    └── GPIO → EN/UVLO(输出使能)、PGOOD(状态监测)

硬件选型

模块 器件 说明
功率拓扑控制 LM5175 四开关同步升降压控制器,内置补偿、保护
功率 MOSFET IRLR7843TR (UMW) ×4 30V/161A,Rds(on)=2.6mΩ,Qg=9.1nC
储能电感 1mH / 80mΩ 扁线绕线 大电感方案,纹波电流仅约 10mA
电流/电压采样 INA226 16-bit,增益误差 0.1%,I2C 数字输出
主控 STM32F103C8T6 72MHz,TIM1 高级定时器 PWM
辅助电源 MSMP2307DN-LF-Z 同步 Buck,12V→5V,效率约 90%
肖特基二极管 BAT54S 自举充电 + GPIO 保护,统一型号
显示 OLED SSD1306 128×64 I2C,DMA 异步刷新,水平寻址模式
键盘 4×4 矩阵键盘 I2C 接口扩展

电路参数

LM5175 外围关键参数

输入电压范围:7-21V 最大输出电流:2.45A左右(ISNS限流)

参数 数值 说明
开关频率 300 kHz RT = 84.5 kΩ(减小电阻则增大频率)
工作模式 CCM + Hiccup MODE = 93.1 kΩ to GND
输出电压范围 1~20V 由 PWM 注入量决定
FB 上分压 RFB2 365 kΩ Vout 基准设定 18V
FB 下分压 RFB1 20 kΩ
PWM 注入总阻 Rinj 63.4 kΩ 含两级 RC 滤波电阻 20kΩ
斜坡补偿 CSLOPE 27 nF (C0G) 配合 1mH 大电感
补偿零点 Rc1/Cc1 680Ω / 4.7μF 钽 环路带宽约 68Hz
高频极点 Cc2 3.9 nF (C0G) 60 kHz,Fsw/5
逐周期限流 Rsense 20 mΩ 限流约 2.66A
平均电流限制 RISNS 20 mΩ 限流约 2.45A

INA226 配置

参数 数值
I2C 地址 0x40(A0=A1=GND)
采样电阻 Rsample 20 mΩ
Current LSB 100 μA/bit
校准寄存器 CAL 0x09E0(2528,实测校准后)
平均次数 16 次
单次转换时间 4.156 ms(双通道)
更新周期 133 ms
电压软件修正系数 1.006

软件结构

├── Core/
│   ├── Src/
│   │   ├── main.c          # 主循环、PID 控制、CC/CV 模式管理
│   │   ├── INA226.c        # INA226 中断驱动(状态机 + I2C_IT)
│   │   └── oled.c          # OLED 驱动(水平寻址 + DMA 异步刷新)
│   └── Inc/
│       ├── INA226.h        # INA226 寄存器定义、状态枚举、函数声明
│       └── oled.h
├── Middlewares/
│   └── KeyBoard/           # 矩阵键盘驱动
└── README.md

INA226 驱动设计

采用中断驱动状态机,Alert 引脚下降沿触发读取,全程无阻塞:

Alert EXTI(转换完成)
    → INA226_StartRead()
    → HAL_I2C_Mem_Read_IT(读 Current 寄存器)
    → MemRxCplt 回调 → 保存电流,读 VBus 寄存器
    → MemRxCplt 回调 → 保存电压,读 Mask/Enable(清除 CVRF)
    → MemRxCplt 回调 → 计算电阻,data_ready=1,回到 IDLE

状态通过 ina226_stateINA226_State 枚举)对外可见,主循环和 EXTI 均可判断是否空闲。

PID 控制策略

  • CC 模式:自适应 PID,增益随负载电阻(gain_R = R/5Ω)和误差大小(平滑非线性 gain_E)动态调度
  • CV 模式:独立 PI 控制器,维持输出电压 18V
  • 防震荡:CC↔CV 切换采用 0.5V 迟滞带(进入 CV:V≥18.0V,退出 CV:V<17.5V)+ 无冲击积分初始化(跟踪抗积分饱和)

OLED 刷新

使用SD1306-0.96寸显示屏,代码来自b站up主keysking 切换为水平寻址模式,全屏 1024 字节单次 DMA 发送,CPU 在传输期间完全空闲:

// 每帧:重置列/页指针 → 触发 DMA → busy 标志 → 回调中清零
OLED_ShowFrame();  // 非阻塞,约 20ms 后 DMA 完成

PCB 设计要点

采用 2 层板

关键布局原则:

  • 单点接地:AGND 与 PGND 仅在 Rsense 负端处单点相连
  • 开尔文连接:Rsense 和 Rsample 两端各用细线(0.1mm)单独引出到 IC 引脚,不与功率铜皮共路
  • SW 节点留空:SW1/SW2 正面仅小面积铺铜,背面在 SW 投影区域挖空,消除寄生电容
  • 自举电容就近放置:BOOT1/BOOT2 电容横跨 IC 引脚,HDRV 走线从电容焊盘间隙穿出到背面
  • INA226 放背面:远离 SW 高 dv/dt 区域,模拟测量环境更干净

实测结果

电流精度(校准后)

设定值 实测值 偏差
1.000 A 1.000 A +0 mA
1.500 A 1.500 A +0 mA
2.000 A 2.000 A +0 mA
(当然是准的啦)

效率(Vin=12V)

工况 Vout Pout 效率
2A / 8Ω 16V 32W 90.5%

系统指标汇总

指标 要求 实测
电流调节范围 0~2A 0~2A ✓
电流精度 ±20mA <±1mA
CV 限压 18V 18.0V ✓
效率(2A/8Ω) >90% 90.5%
负载电阻显示 实时显示 ✓

快速上手

硬件连接

  1. 12V 直流输入接功率级 VIN 和 GND
  2. 负载(0~10Ω 滑动变阻器,PCB中小功率电位器不可作负载)接输出端
  3. 12V 直流输入通过XH2.54连接到辅助电源输入
  4. STM32 最小板 5V 引脚接辅助电源输出

固件编译

使用 STM32CubeIDE 打开工程,直接编译烧录即可。工程基于 STM32CubeMX 生成,HAL 库版本无特殊要求。

首次校准

上电后通过串口或 OLED 调试界面观察 INA226 读数,对比实验室万用表:

k_I = I_真实 / I_INA226
CAL_new = 2560 × k_I

INA226.hINA226_CALIB_VAL 修改为计算值,重新烧录。


调试记录中的典型问题

LM5175 上电 SS=0.8V,无输出

原因:确保LM5175引脚焊接


许可证

MIT License

About

Buck-boost constant current circuit using LM5175 INA226 STM32F103C8T6

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages