数控 CV/CC 线性稳压电源 + 线性电子负载测控平台
独立完成 0~12V/2A 数控线性电源与 0~2A/40W 线性电子负载全套硬件与固件开发,涵盖 CV/CC 双闭环控制、差分采样、地平面分层与多重软硬件保护。
- STM32F103C8T6
- DAC(模拟基准输出)
- 12-bit ADC(电压/电流/温度采样)
- 双运放闭环反馈网络
- N-MOS 线性负载阵列
- NTC 热敏电阻
- 0.96 寸 OLED
- Keil MDK
- FreeRTOS
- 标准库开发
- 多级软件保护逻辑
项目概述
本项目为独立完成的 数控线性稳压电源 + 线性电子负载一体化测控平台。硬件上完成了从原理图设计、器件选型、双层 PCB 绘制到整机焊接的全流程;软件上基于 FreeRTOS 实现多任务调度,配合多级软硬件保护,构建了一套可靠的电源测控系统。
核心指标:
| 模块 | 参数 | |------|------| | 数控电源 | 0 ~ 12 V 连续可调,0 ~ 2 A 限流 | | 电子负载 | 0 ~ 2 A 程控恒流,最大 40 W 耗散 | | 输出纹波 | < 10 mVpp(轻载) | | 负载调整率 | < 1% | | 温控保护 | NTC 采集 MOS 管温度,> 85°C 自动关断 |
系统架构
┌────────────────────────────────────────────────┐
│ STM32F103 主控 │
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ DAC │ │ ADC │ │ FreeRTOS │ │
│ │ 基准输出 │ │ 多路采样 │ │ 多任务调度 │ │
│ └────┬─────┘ └────┬─────┘ └──────┬──────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ 电源闭环 │ │ 负载闭环 │ │ 按键/OLED │ │
│ │ CV/CC │ │ 恒流控制 │ │ 交互任务 │ │
│ └──────────┘ └──────────┘ └─────────────┘ │
└────────────────────────────────────────────────┘
硬件设计
数控线性电源 — CV/CC 双运放闭环
采用 双运放独立闭环 架构,分别实现恒压(CV)与恒流(CC)控制:
- CV 环路:电阻分压采样输出电压 → 误差放大器 → 调整管栅极
- CC 环路:采样电阻检测电流 → 误差放大器 → 限制输出电流
- 自动切换:两个环路输出取 或逻辑,低者生效,实现无缝 CV/CC 切换
密勒相位补偿
为防止环路自激,在运放反馈回路中并联 47 pF 密勒电容:
R1
┌────//\/\────┐
│ │
│ C1 │
│ ┌──┐ │
└─────┤ ├─────┘
└──┘
47pF
补偿后实测相位裕度 > 45°,全负载范围无自激振荡。
线性电子负载 — N-MOS 架构 + 差分采样
采用 N-MOS 线性负载 架构,通过控制栅极电压调节漏极电流:
15 倍差分放大采样
采样电阻仅 0.1 Ω,满载压降仅 200 mV。采用 差分放大 + 15 倍增益 提升分辨率:
V_sense = I_load × 0.1Ω = 0 ~ 200 mV
V_amp = V_sense × 15 = 0 ~ 3 V (可直接送入 ADC)
- 差分前端 无 RC 滤波,保留信号带宽
- 后端 1 kΩ + 100 pF 低通滤波,抑制高频干扰
地平面分层与抗干扰
采用 三地分割 + 单点共地 策略:
| 地平面 | 连接内容 | 处理方式 | |--------|---------|---------| | 功率保护地 | 电源输入、保险丝、TVS | 独立铺铜 | | 模拟地 | 运放、采样电阻、NTC | 独立铺铜 | | 数字地 | MCU、DAC、OLED、按键 | 独立铺铜 | | 共地点 | 三地唯一连接处 | 星型单点汇合 |
此外,运放栅极驱动串联 10 Ω 阻尼电阻,抑制 MOS 管输入电容与走线寄生电感引起的高频振铃。
多重硬件保护
- 防反接:输入端串联肖特基二极管
- 过流保护:保险丝 + 软件快速关断
- 浪涌吸收:输入端 TVS 二极管(SMBJ15A)
- 过热保护:NTC 热敏电阻贴装于 MOS 管散热片,> 85°C 蜂鸣报警并关断输出
软件设计
FreeRTOS 任务划分
| 任务 | 优先级 | 职责 | |------|--------|------| | 采样采集任务 | 3(高) | ADC 多通道轮询,软件滤波 | | 按键交互任务 | 2(中) | 编码器/按键扫描,菜单导航 | | 屏幕显示任务 | 1(低) | OLED 实时曲线与数值刷新 | | 保护检测任务 | 3(高) | 过压、过流、过热检测与响应 |
任务间通过 消息队列 传递采样数据,避免全局变量竞争。
采样校准与数值换算
/* 零点校准:短路/空载时采样 */
void ADC_Calibrate(void) {
adc_offset_voltage = ReadADC(CHANNEL_VOUT);
adc_offset_current = ReadADC(CHANNEL_IOUT);
}
/* 线性换算 */
float GetVoltage(void) {
uint16_t raw = ReadADC(CHANNEL_VOUT) - adc_offset_voltage;
return raw * ADC_LSB * VOLTAGE_DIV_RATIO;
}
float GetCurrent(void) {
uint16_t raw = ReadADC(CHANNEL_IOUT) - adc_offset_current;
return raw * ADC_LSB / (SENSE_R * DIFF_AMP_GAIN);
}
多级软件保护逻辑
typedef enum {
PROTECT_NONE = 0,
PROTECT_WARN, /* 降功率运行 */
PROTECT_SHUTDOWN, /* 关断输出 */
} ProtectLevel_t;
ProtectLevel_t CheckProtection(void) {
if (temperature > 85.0f) return PROTECT_SHUTDOWN;
if (temperature > 75.0f) return PROTECT_WARN;
if (voltage > 12.5f) return PROTECT_SHUTDOWN;
if (current > 2.2f) return PROTECT_SHUTDOWN;
return PROTECT_NONE;
}
- Warning 级:蜂鸣器间歇鸣响,OLED 闪烁提示,自动降功率 50%
- Shutdown 级:立即关断 PWM/DAC 输出,蜂鸣器长鸣,需手动复位解除
实测数据
电源输出特性
| 设定电压 | 负载电流 | 实测电压 | 纹波 Vpp | |---------|---------|---------|---------| | 5.00 V | 0.1 A | 5.002 V | 4.2 mV | | 5.00 V | 1.0 A | 4.985 V | 6.8 mV | | 5.00 V | 2.0 A | 4.968 V | 9.5 mV | | 12.00 V | 0.5 A | 12.01 V | 5.1 mV | | 12.00 V | 2.0 A | 11.92 V | 8.7 mV |
- CV/CC 切换点:当负载电流达到设定限流值时,自动由 CV 转入 CC,切换过程无过冲
电子负载特性
| 设定电流 | 电源电压 | 实测电流 | 功耗 | |---------|---------|---------|------| | 0.50 A | 5 V | 0.502 A | 2.5 W | | 1.00 A | 5 V | 0.998 A | 5.0 W | | 2.00 A | 5 V | 1.995 A | 10.0 W | | 1.00 A | 12 V | 1.002 A | 12.0 W |
踩坑记录
- 采样零点漂移:温升导致运放失调电压漂移,上电后增加 30 s 预热与自动零点校准流程
- MOS 管栅极振铃:未加阻尼电阻时,栅极驱动波形出现 50 MHz 振铃,导致负载电流抖动;串联 10 Ω 电阻后振铃消除
- OLED I2C 地址冲突:电源模块与 OLED 共用 I2C 总线时,因上电时序导致 OLED 偶尔不响应;软件增加 I2C 总线复位与重试机制