无桥 PFC 软件库架构与功能全景解析
——基于 NXP DSP56800EX 的 TPPFC82748V1.0 实现
一、定位与总体设计目标
TPPFC82748V1.0 是一套面向 500 W 无桥图腾柱 PFC(Totem-Pole Bridgeless PFC)的完整数字电源参考实现。其核心诉求是在单颗 MC56F82748 数字信号控制器上,同时完成:
- 输入电流 THD≤5 %、PF≥0.99 的功率因数校正;
- 直流母线电压 0.1 % 稳态精度、±5 V 动态纹波;
- 全负载范围(10 %–100 %)软启动、过压/欠压/过流/过温保护;
- 支持在线参数辨识与环路自整定,方便客户二次开发。
软件库采用“分层-组件化”思路,将算法、驱动、保护、调度彻底解耦。通过“配置头 + 静态库”方式交付,客户只需在 user_cfg.h 中打开/关闭宏,即可在“全功能参考设计”与“最小资源占用”两种形态间自由切换。
二、架构剖面:三横四纵的矩阵组织
横向三域:
┌──────────────┬─────────────────────────────┐
│ 算法域(ALG) │ 电流环、电压环、前馈、观测器、PLL │
├──────────────┼─────────────────────────────┤
│ 驱动域(DRV) │ ADC 触发、PWM 更新、CMP 中断、GPIO 保护 │
├──────────────┼─────────────────────────────┤
│ 调度域(SCH) │ 1 ms 主节拍、事件触发、状态机、故障管理 │
└──────────────┴─────────────────────────────┘
纵向四条“总线”贯穿三域:
- 数据总线:统一 16/32 bit Q 格式,所有接口采用结构体封装,避免全局标量;
- 参数总线:系数表、限幅值、滤波器缓冲全部放在 const 段,支持 ROM 重映射;
- 事件总线:中断仅置位“事件字”,由主循环调度,保证 0 级中断延迟 < 200 ns;
- 诊断总线:内部状态快照、故障码、黑匣子记录,通过 JTAG/SWD 可实时读取。
三、算法域深度拆解
- 电流环:
采用“预测-校正”型 PI,结合单周期采样保持(SH)模型,将计算提前到 PWM 重载前 250 ns 完成。核心状态机仅 3 个入口函数,全部内联,保证 16 MHz CPU 下 64 kHz 控制频率 CPU 占用 < 42 %。
- 电压环:
在 1 ms 任务中执行,使用带抗饱和的增量式 PI;输出自动限幅到电流环给定范围,避免“外环打脸”。参数通过 Ziegler–Nichols 预整定后,允许用户在线切换“快调/慢调”两组系数,满足 PFC 启动与稳态双工况。
- 前馈通道:
输入电压经二阶 IIR 陷波(120 Hz)后,计算实时功率前馈量,直接叠加到电流环给定。前馈系数以 32-bit 无符号定点存放,0x00010000 代表 1.0,避免浮点。
- 观测器:
内置输入电压幅值观测器、负载阶跃观测器。幅值观测器采用滑动平均 + 峰值保持混合结构,在 1/4 周期内完成收敛;负载阶跃观测器利用直流母线斜率预测,提前 2 ms 通知电流环“预增压”,可将 50 %→100 % 负载跳变下的母线跌落从 18 V 压缩到 7 V。
- 数字 PLL:
基于双二阶广义积分器(DSOGI)提取正交信号,再通过 Park 锁相。频率跟踪范围 45–65 Hz,相位抖动 < 0.02°。PLL 输出的 sin/cos 直接供给电流环坐标变换,保证 THD 在轻载下仍 < 3 %。
四、驱动域关键技术
- ADC 触发:
利用 eFlexPWM submodule0 的“计数器归零”触发 ADC,采样点落在 PWM 谷值,避开反向恢复噪声;采样序列固化在 ADC 预存队列,一次触发完成 4 路电流+2 路电压共 6 次采样,DMA 自动搬运到双缓冲 RAM。
- PWM 更新:
采用“影子寄存器双缓冲”机制,电流环计算结果写入 A 缓冲,在下一个计数周期自动生效,保证 0 周期延迟。图腾柱上下管插入 50 ns 死区,死区宽度根据实时母线电压在线补偿,防止轻载时电流失真。
- 过流保护:
模拟比较器(CMP)与 DAC 阈值联动,响应时间 60 ns;一旦触发,硬件强制拉低 PWM,同时记录故障快照(含 16 个历史采样点),供上位机回放。
- 温度/电压监视:
片内 12-bit ADC 测量 NTC 与母线电压,利用“窗口看门狗”机制:连续 3 次采样超出阈值才确认故障,避免误触发。
五、调度域状态机
顶层状态机仅 5 态:
IDLE → SOFTSTART → RUN → FAULT → SAFESHUTDOWN
所有状态迁移通过“事件字”驱动,事件字由中断、定时器、通信命令共同设置。主循环每 125 µs 扫描一次事件字,保证最坏情况下的响应延迟 < 250 µs。
六、内存与性能指标
Flash 占用:算法 12 K,驱动 4 K,调度 2 K,合计 18 K/64 K;
RAM 占用:双缓冲 1.5 K,状态机 0.5 K,堆栈 1 K,合计 3 K/8 K;
CPU 负载:64 kHz 电流环 42 %,1 kHz 电压环 3 %,后台通信 2 %,余量 53 %;
中断延迟:电流采样→PWM 更新 250 ns,过流→PWM 封锁 60 ns;
稳态指标:230 VAC 输入,400 VDC 母线,500 W 满载,THD 2.1 %,PF 0.998,效率 98.7 %。
七、二次开发指南
- 快速裁剪:在 usercfg.h 中关闭 GFLIBRAMP、GMCLIB_DECOUPLING 等宏,可把 Flash 降至 10 K;
- 参数自整定:运行前接入 UART,发送 $AUTO_TUNE,软件将自动注入 2 % 小信号,测量环路响应并改写 PI 系数;
- 保护阈值:所有阈值以 Q16 格式存放在 const 段,客户可直接修改数组,无需重新编译算法;
- 调试接口:通过 JTAG 读取结构体 ALGDbg、DRVDbg、SCH_Dbg,可实时查看电流环输出、PWM 占空、状态机历史;
- 移植到同系列 MCU:只需替换 device.h 中的寄存器映射,算法层 100 % 复用。
八、小结
TPPFC82748V1.0 以“高内聚、低耦合”为设计核心,把无桥 PFC 的复杂控制问题拆成可插拔的算法组件。客户无需深入底层寄存器,即可在 1 小时内完成从编译到带载运行的全过程;同时又保留完整源码与文档,方便在 500 W–3000 W 区间做功率升级。该软件库不仅是一套参考代码,更是一张“数字电源开发路线图”,为后续图腾柱双向、CRM/DCM 多模式演进奠定了坚实框架。