《INV-MCU Lab》汽油变频发电机逆变器软件用户手册
CMS_BAT139_DigInv 数字逆变器控制软件用户手册
版本:Rev0.1
日期:2026-05-11
适用工程:CMS_BAT139_DigInv_3KW230V_V01
适用 MCU:BAT32G139GK48FA / BAT32G139GH48 工程目标
声明与安全
本工程面向高压交流/直流功率变换场景。调试和运行时可能涉及 230 VAC 输出、数百伏直流母线、储能电容和高速开关器件。使用者应具备功率电子和嵌入式调试经验,并在隔离供电、限流、放电、示波器探头耐压和接地方式确认后再进行上电。
本文档不替代硬件规格书、安规测试报告、量产测试规范和最终产品用户说明书。产品级使用前,应完成硬件耐压、温升、短路、过载、EMC、异常掉电、并机投入和长期可靠性验证。
版本修订记录
| 版本 | 日期 | 说明 | 作者 |
|---|---|---|---|
| Rev0.1 | 2026-05-11 | 基于源码生成用户手册初版 | naiva |
目录
- 简介
- 控制系统概述
- 开发环境与交付物
- 软件结构与运行时序
- 硬件接口与资源分配
- 开始调试
- 软件参数配置
- 数据采样、标定与换算
- 控制算法说明
- 故障保护与处理
- 维护、移植与二次开发
- 附录:
1. 简介
1.1 手册范围
本手册说明 BAT32G139 数字逆变器控制软件的工程结构、运行逻辑、参数配置、调试步骤、故障处理和二次开发注意事项。当前源码配置面向 230 VAC / 50 Hz 输出,功率等级宏配置为 Inv_Power_2000W,工程目录名称保留 3KW230V 字样。
需要确认的产品定义:
| 项目 | 当前源码/工程信息 | 说明 |
|---|---|---|
| 额定输出电压 | 230 VAC | 谐波失真 THD ≤3% |
| 输出频率 | 50 Hz,支持 60 Hz 表 | 50/60 Hz |
| 额定功率 | Inv_Power_Model = Inv_Power_3000W |
2 kW/3 kW |
| 直流母线 | 380/400VDC | |
| MCU | BAT32G139GK48FA | |
| 调试接口 | Keil 工程、J-Link/CMSIS-DAP、UART1 |
1.2 适用读者
本文面向以下人员:
| 读者 | 关注内容 |
|---|---|
| 嵌入式开发 | 工程构建、状态机、外设初始化、中断调度、参数移植 |
| 功率算法开发 | 采样链路、双环控制、重复控制、限功率、下垂控制 |
| 硬件调试 | 引脚资源、ADC 通道、PWM 输出、过流/短路/温度保护 |
| 测试验证 | 故障注入、保护阈值、串口观测、回归清单 |
| 技术支持 | 故障码、LED/按键行为、恢复流程 |
1.3 手册编写依据
本手册依据以下工程文件整理:
| 内容 | 主要文件 |
|---|---|
| 工程目标与构建 | keil/INVERTER.uvprojx |
| 主循环 | code/source/2_user_s/main.c |
| 硬件初始化 | code/source/2_user_s/sys_hardware_init.c |
| 参数配置 | code/head/2_user_h/sys_define_config.h、sys_define_parar.h |
| 状态机 | code/source/2_user_s/sys_state_machine.c |
| 中断调度 | code/source/2_user_s/interrupt.c |
| 采样计算 | code/source/2_user_s/user_sample.c |
| 故障保护 | code/source/2_user_s/user_fault_check.c |
| 逆变控制 | code/source/3_powerlib_s/Inverter_Ctrl.c |
2. 控制系统概述
2.1 系统功能
当前软件实现以下主要功能:
- 230 VAC / 50 Hz 单相逆变输出控制。
- 基于 TMM 的中心对称 SPWM 生成,当前载波频率 19.2 kHz。
- ADC 采样输出电压、电感电流、母线电压、辅助电源、温度、参考电压。
- 输出电压/电流闭环控制,支持单环/双环配置。
- 重复控制、PQ 下垂控制、限功率控制和直流分量校正。
- 母线、输出电压、输出电流、过载、短路、过温、转速、辅助电源、VREF 等保护。
- Ready/Run/Fault 等状态机管理。
- UART1 + DMA 调试输出,适配波形观测工具。
- 步进电机控制、按键、LED、并机/同步相关逻辑。
2.2 系统框图
2.3 控制模式
| 配置项 | 当前值 | 说明 |
|---|---|---|
OPERATING_MODE |
NORMAL_MODE |
正常模式下启用保护逻辑;DEBUG_MODE 会跳过部分正常流程,需谨慎使用 |
CM_Inverter_Loop_Ctrl |
CM_Inverter_Double_Loop |
逆变电压/电流双环 |
InvVol_Type |
Out_Vol_230 |
230 V 输出参数组 |
InvVol_Freq |
InvVol_Freq_50Hz |
50 Hz 正弦表,19.2 kHz / 384 点 |
Inv_Power_Model |
Inv_Power_2000W |
功率等级相关参数分支 |
INV_POWER_CTRL_SELECT |
INV_POWER_ENABLE |
启用限功率控制 |
INV_SOFTWARE_CTRL_SELECT |
INV_SOFTWARE_DISABLE |
当前关闭输出电压缓启动宏 |
3. 开发环境与交付物
3.1 硬件环境
| 条目 | 说明 |
|---|---|
| 控制器 | BAT32G139GK48FA / BAT32G139GH48 工程目标 |
| 功率板 | 整流铝基板1、IGBT铝基板1 |
| 调试器 | J-Link /CMSIS-DAP |
| 供电 | 直流母线、电源限流、辅助电源规格 |
| 负载 | 阻性/感性/电机/整机负载规格 |
3.2 软件环境
| 条目 | 当前信息 |
|---|---|
| 操作系统 | Windows,建议 Windows 10/11 |
| IDE | Keil MDK,工程文件 keil/INVERTER.uvprojx |
| 编译目标 | BAT32G139GH48 |
| Device | BAT32G139GK48FA |
| 输出文件 | Objects/INV_Ctrl.hex |
| 语言 | C |
[补充] Keil MDK 版本 V5.32.0.0、BAT32G139 DFP/pack 版本 Cmsemicon.BAT32G139.1.0.4
3.3 交付物
| 类型 | 路径/说明 |
|---|---|
| 源码 | code/source、code/head |
| Keil 工程 | keil/INVERTER.uvprojx、keil/INVERTER.uvoptx |
| 构建产物 | keil/Objects/INV_Ctrl.hex |
| 说明文档 | 本手册 |
| 硬件资料 | 原理图、PCB、BOM、接口定义] |
4. 软件结构与运行时序
4.1 目录结构
CMS_BAT139_DigInv_3KW230V_V01/
├─ code/
│ ├─ head/
│ │ ├─ 1_driver_h/ MCU 外设驱动头文件
│ │ ├─ 2_user_h/ 系统配置、状态机、用户层头文件
│ │ └─ 3_powerlib_h/ 控制算法头文件
│ └─ source/
│ ├─ 1_driver_s/ ADC、TMM、TMB、SCI、DMA、GPIO 等驱动
│ ├─ 2_user_s/ 主循环、状态机、采样、保护、人机接口
│ └─ 3_powerlib_s/ PID、重复控制、PQ 下垂、逆变控制、功率计算
├─ keil/ Keil 工程、RTE、Objects、Listings
└─ docs/ 补充文档
4.2 软件分层
| 层级 | 目录 | 职责 |
|---|---|---|
| 驱动层 | 1_driver_* |
直接配置 BAT32G139 外设寄存器,提供 ADC、TMM、TMB、SCI、DMA、GPIO 等基础接口 |
| 用户层 | 2_user_* |
组织状态机、硬件初始化、采样处理、故障保护、按键/LED、并机和调试输出 |
| 算法层 | 3_powerlib_* |
实现逆变控制、PID、重复控制、PQ 下垂、限功率和功率计算 |
二次开发时建议保持分层边界:硬件资源修改优先放在驱动/硬件初始化层,运行策略放在用户层,控制环路改动放在算法层。
4.3 主循环
main.c 的主流程如下:
Sys_HardConfigInit()
while (1) {
State_Context.ContextPtr(&State_Context)
Sys_StateMachine_Task()
User_CommonFunction()
处理 1ms 标志清零
}
主循环不直接执行高速闭环。高速采样和控制在 TMM1 PWM 中断内完成,主循环主要承担状态机推进和慢任务调度。
4.4 中断与任务优先级
| 优先级 | 入口 | 周期/触发 | 主要职责 |
|---|---|---|---|
| 最高 | tmm1_interrupt() |
19.2 kHz PWM 周期 | 关驱动检查、频率检测、采样、限功率、直流分量校正、逆变算法、PWM 更新、周期统计、串口观测触发 |
| 高 | 硬件 PWM 截止/INTP0 | 硬件触发 | 输入过流/强制截断,具体阈值与外部硬件相关 |
| 普通 | SysTick_Handler() |
1 ms | 故障检测、步进电机节拍、温度恢复计时、短路检测窗口 |
| 低 | main() |
轮询 | 状态机、LED/按键、用户慢任务 |
| 低 | tmb0_interrupt() |
捕获触发 | 外部同步/转速信号捕获,计算频率/速度 |
注意:在 19.2 kHz 载波下,PWM 周期约 52 us。新增代码进入 tmm1_interrupt() 前必须评估最坏执行时间,避免 ADC 时序异常、PWM 更新延迟或控制不稳定。
4.5 状态机
状态机定义在 sys_state_machine.c,主要状态如下:
| 状态 | 进入条件 | 主要动作 | 退出条件 |
|---|---|---|---|
CM_INITIAL_STATE |
上电/复位 | 软件变量初始化,绑定算法函数指针 | Initial_Ok = E_TRUE |
CM_WAITING_STATE |
初始化完成或故障释放 | 使能 SCR,等待延时 | Waiting_Ok = E_TRUE |
CM_READY_STATE |
等待完成 | 主从识别,母线/辅助电源/温度启动自检 | Ready_Ok = E_TRUE 进入 Run;Ready_Ok = E_FAIL 进入 Fault |
CM_RUN_STATE |
Ready 通过 | 开驱动,执行运行态故障检查/处理,高速中断进行闭环 | 停机指令或故障 |
CM_FAULT_STATE |
自检失败或运行故障 | 关闭 SCR,保持故障,等待释放 | Fault_Release = E_TRUE 返回 Waiting |
CM_STOP_STATE |
停机指令 | 停机占位 | - |
5. 硬件接口与资源分配
5.1 时钟与基础外设
| 资源 | 当前配置 | 文件 |
|---|---|---|
| 主频 | 外部晶振经 PLL,8 MHz * 16 / 2 = 64 MHz | SystemClock_Init() |
| SysTick | 1 ms | SysTick_ConfigInit() |
| PWM | TMM0/TMM1 互补 PWM,中心对称 | EPWM_ConfigInit() |
| ADC | 高速模式,软件触发,选择通道单次转换 | ADC_ConfigInit() |
| TMB | fCLK/8 = 8 MHz 输入捕获 | TMB_InputCapture_Init() |
| ACMP0 | 内部 2.5 V 参考,用于输出过零/同步检测 | ACMP0_ConfigInit() |
| UART1 | SCI0 CH2/CH3,当前按 1 Mbps 配置 | UART1_ConfigInit() |
| DMA | DMA_VECTOR_ST1 发送 20 Byte 调试帧 |
Sys_HardConfigInit() |
5.2 GPIO 与功能引脚
| 功能 | 引脚/端口 | 方向 | 说明 |
|---|---|---|---|
| 绿灯 | P60 | 输出开漏 | 运行/状态指示 |
| 红灯 | P61 | 输出开漏 | 故障/状态指示 |
| 逆变输出继电器 | P70 | 输出 | User_PWM_Enable/Disable 相关运行控制需结合硬件确认 |
| SCR/整流使能 | P30 | 输出 | INV_SCR_ENABLE/DISABLE |
| 故障复位输入 | P31 | 上拉输入 | FAULT_RST |
| ECO 模式输入 | P74 | 上拉输入 | ECOMODE |
| 频率选择输入 | P71 | 上拉输入 | FRESWITCH,当前频率切换宏关闭 |
| 硬件过流/截止 | P136 / INTP0 | 上拉输入 | TMM 强制截断源 |
| 步进电机 A/B/C/D | P24/P25/P26/P27 | 输出 | 24BYJ28 等步进控制 |
| UART1 TXD | P72 | 输出 | 调试发送 |
| UART1 RXD | P73 | 输入 | 当前接收配置被关闭 |
| TMB 捕获 | P50 | 输入 | 同步/转速捕获 |
| ACMP0 输入 | P22 | 模拟输入 | 输出电压比较输入 |
5.3 ADC 通道
| 通道 | 引脚 | 变量 | 说明 |
|---|---|---|---|
ANI0 / ADC_CHANNEL_0 |
P20 | Temp_External_AD |
散热器/外部温度 |
ANI3 / ADC_CHANNEL_3 |
P23 | AC_Vol_Peak |
逆变输出交流电压 |
ANI9 / ADC_CHANNEL_9 |
P10 | ref_AD |
参考电压/2.5 V 中点 |
ANI10 / ADC_CHANNEL_10 |
P01 | Bus_Vol_AD |
母线电压 |
ANI11 / ADC_CHANNEL_11 |
P00 | Power_AuxVcc_AD |
辅助电源 |
ANI15 / ADC_CHANNEL_15 |
P146 | Inv_Cur_Peak |
电感电流 |
当前 ADC 在中断内软件触发并阻塞等待转换完成。若提高载波频率或增加采样通道,需要重新评估 PWM 中断执行时间。
5.4 PWM 输出
| 项目 | 当前值 |
|---|---|
MCU_CLK |
64 MHz |
PWM_FREQ |
19.2 kHz |
DEADTIME |
约 1.8 us |
PWM_PERIOD |
MCU_CLK / (PWM_FREQ * 2) + DEADTIME - 2 |
| 输出方式 | TMM 中心对称互补 PWM |
| 更新点 | TM1 下溢时从缓冲寄存器加载 |
6. 开始调试
6.1 调试前检查
上电前确认:
- 控制板、功率板、驱动电源和直流母线连接正确。
- 示波器、电流探头、差分探头量程和接地方式正确。
- 直流电源限流、电子负载或隔离负载配置正确。
- 功率级无短路,栅极驱动供电正常。
- Keil 工程目标、芯片型号和下载算法匹配。
- 当前宏配置符合硬件版本:电压增益、电流增益、母线增益、功率等级。
6.2 打开工程
- 打开
keil/INVERTER.uvprojx。 - 确认 Target 为
BAT32G139GH48。 - 确认 Device 为
BAT32G139GK48FA。 - 确认 Include Path 包含:
..\code\head\3_powerlib_h;..\code\head\1_driver_h;..\code\head\2_user_h;..\code\source\2_user_s
Keil 工程窗口截图、Pack 安装截图、Debug Adapter 配置截图:



6.3 编译与下载
建议流程:
Clean。Rebuild all target files。- 确认生成
Objects/INV_Ctrl.hex。 - 连接 J-Link 下载。
- 下载后先低压/限流上电观察变量和 PWM 输出。
关键编译输出:
| 输出 | 说明 |
|---|---|
INV_Ctrl.axf |
调试文件 |
INV_Ctrl.hex |
烧录文件 |
INV_Ctrl.map |
链接和内存占用分析 |
6.4 在线调试观察变量
建议优先观察:
| 变量 | 说明 | 正常期望 |
|---|---|---|
State_Context.State_Identifier |
状态机状态 | Initial -> Waiting -> Ready -> Run |
System_ProtectFlag_Info.all |
当前保护位 | 正常为 0 |
System_ProtectFlag_Info_First_Value |
首次故障锁存 | 正常为 0 |
ADSample_Info.Bus_Vol_AD |
母线原始 ADC | 与母线电压对应 |
ADSample_Info.Bus_Vol_Filiter_AD |
母线滤波值 | 稳定,无明显跳变 |
ADSample_Info.AC_Vol_RMS |
输出电压有效值,0.25 V/LSB | 230 V 约 920 |
ADSample_Info.Inv_Cur_RMS |
电感电流 RMS | 需结合负载 |
System_Power_Info.Active_Power_Total |
有功功率 W | 需结合负载 |
Inv_SineCtrl_Info.InvVol_SPWM_Duty |
SPWM 调制量 | 不应长期饱和 |
PID_Vol_Loop.Out / PID_Curr_Loop.Out |
环路输出 | 不应异常发散 |
6.5 串口调试
当前工程初始化 UART1,P72 为 TXD1,DMA 从 txBuf[1] 向 SCI0->TXD1 发送 19 字节,面向 20 Byte 调试帧。
| 项目 | 当前信息 |
|---|---|
| 端口 | UART1 TXD1 / P72 |
| 波特率 | 1 Mbps |
| 发送入口 | User_UART_View() |
| 调用位置 | tmm1_interrupt() 中 test_cnt >= 50 |
| 工具 | VOFA/cktszsss32 |
串口帧格式
void Function_TxSendDebug(int32_t data1,int32_t data2,int32_t data3,int32_t data4)
{
num[0] = data1;
num[1] = data2;
num[2] = data3;
num[3] = data4;
memcpy(txBuf,(uint8_t *)num,16);
txBuf[16] = 0x00;
txBuf[17] = 0x00;
txBuf[18] = 0x80;
txBuf[19] = 0x7f;
DMAVEC->CTRL[0].DMSAR = (uint32_t)(txBuf+1);
DMAVEC->CTRL[0].DMACT = 19;
DMA->DMAEN1 |= 1<<6;
SCI0->TXD1 = txBuf[0];
}
当前 VOFA+ 发送格式没有 CRC,数据1 float + 数据2 float + 数据3 float + 数据4 float + 帧尾,也就是16字节数据 + 4字节帧尾
7. 软件参数配置
7.1 基本配置文件
| 文件 | 配置内容 |
|---|---|
sys_define_config.h |
PWM、串口、工作模式、输出电压/频率、功率等级、采样增益、正弦表点数 |
sys_define_parar.h |
保护阈值、校准上下限、启动自检、功率等级参数、控制比例系数 |
sys_variable_init.c |
运行时结构体初始化、函数指针绑定、PID/并机/重复控制/功率计算参数初始化 |
7.2 PWM 与频率
| 参数 | 当前值 | 修改影响 |
|---|---|---|
MCU_CLK |
64 MHz | 决定 PWM、定时和串口计算基础 |
PWM_FREQ |
19.2 kHz | 改变 PWM 周期和正弦表点数 |
DEADTIME |
1.8 us | 过小可能直通,过大影响输出波形 |
SPWMWAVE_DOT_50Hz |
384 | 19.2 kHz / 384 = 50 Hz |
SPWMWAVE_DOT_60Hz |
320 | 19.2 kHz / 320 = 60 Hz |
修改载波频率时必须同时核对:
SPWMWAVE_DOT_*点数是否能整除目标频率。- 正弦表长度是否匹配。
RepeatCtrl_Info.SPWM_Point是否匹配。- PWM 中断执行时间是否仍小于周期。
- 死区时间是否仍满足功率器件要求。
7.3 输出电压与功率等级
| 参数 | 当前值 | 说明 |
|---|---|---|
INV_AC_VOL_AMP_VAL_NORMAL_REF |
2100 | 230 VAC 目标幅值对应的内部 ADC 码 |
INV_LOAD_PWR_SLOPE_NUM |
30 | 负载功率对输出电压幅值补偿斜率 |
InvVol_Type |
Out_Vol_230 |
输出电压类型 |
Inv_Power_Model |
Inv_Power_2000W |
功率等级参数分支 |
INV_POWER_CTRL_SELECT |
INV_POWER_ENABLE |
启用限功率 |
7.4 采样增益
| 参数 | 当前值 | 说明 |
|---|---|---|
HW_ADC_REF |
5.0 | ADC 参考/供电基准 |
HW_VBUS_GAIN |
144.4 | 母线电压分压倍数 |
HW_V_ACOUT_GAIN |
256.0 | 输出电压采样倍数 |
HW_I_INDUC_GAIN |
49.7 | 电感电流采样倍数 |
HW_AUX_POWER_GAIN |
6.0 | 辅助电源采样倍数 |
HW_TEMP_DIVIDE_RES |
10.00 kΩ | NTC 分压上/下拉电阻之一 |
修改硬件采样电阻或放大倍数后,必须同步修改上述参数,并重新验证 RMS、功率、过压、欠压、过流和过温保护。
7.5 软启动和运行模式
| 参数 | 当前值 | 说明 |
|---|---|---|
INV_SOFTWARE_CTRL_SELECT |
INV_SOFTWARE_DISABLE |
是否启用输出电压缓启动 |
INV_SOFTWARE_STEP_VALUE |
50 | 缓启动每步递增值 |
INV_SOFTWARE_SHIFT_VALUE |
6 | 缓启动缩放移位 |
INV_SOFTWARE_HOLD_INIT |
450 << 6 |
缓启动初始幅值 |
OPERATING_MODE |
NORMAL_MODE |
正常/调试模式 |
建议:调试模式会改变状态机和保护行为,只应在低压、限流、明确观察目标下使用。
8. 数据采样、标定与换算
8.1 采样链路
高速采样在 tmm1_interrupt() 内触发,核心链路为:
ADC原始码
-> 左移/读取
-> 上电偏置校准
-> 扣除 2.5 V 中点偏置
-> 峰值量写入 ADSample_Info
-> 周期内平方和/功率累加
-> 周期结束转存 Back
-> Update_AC_Data() 计算 RMS 和功率
-> 保护与控制算法读取
8.2 偏置校准
| 校准对象 | 样本数 | 合格范围 | 变量 |
|---|---|---|---|
| VREF | 512 | 3896 ~ 4296 | AD_Correct_Vref |
| 输出电压 | 1024 | 3896 ~ 4296 | AD_Correct_V_ACOUT |
| 电感电流 | 1024 | 3896 ~ 4296 | AD_Correct_I_Induc |
校准值用于扣除围绕 ADC 中点的直流偏置。若硬件偏置、电源或采样网络异常,校准无法置位,后续 RMS、功率和保护都会偏移。
8.3 输出电压换算
输出电压采样通道将 12 bit ADC 结果左移一位存储:
InvVol_Store_One = ADC->ADCR << 1
AC_Vol_Peak = InvVol_Store_One - AD_Correct_V_ACOUT.ADRef_Correct_Value
近似物理量换算:
Vadc_delta = (AC_Vol_Peak / 2) / 4096 * HW_ADC_REF
Vout_peak = Vadc_delta * HW_V_ACOUT_GAIN
Vout_rms = Vout_peak / sqrt(2)
ADSample_Info.AC_Vol_RMS 采用 0.25 V/LSB 存储,因此:
Vout_rms(V) = ADSample_Info.AC_Vol_RMS / 4
8.4 功率与电流
User_EffectiveValue_Calc() 在 PWM 周期内累加:
| 累加项 | 含义 |
|---|---|
AC_Vol_Sum |
输出电压峰值平方和 |
Inv_Cur_Sum |
电感电流峰值平方和 |
Load_Cur_Sum |
估算负载电流平方和 |
AC_Active_Power_Sum |
输出电压峰值 * 负载电流峰值 |
Update_AC_Data() 在整周期后计算 RMS、有功功率和视在功率,并写入 ADSample_Info 和 System_Power_Info。
9. 控制算法说明
9.1 逆变算法入口
Inverter_AlgCtrl() 在 sys_variable_init.c 中绑定到 Inv_SineCtrl_Info.Calc,并在 tmm1_interrupt() 运行态内调用。
主要步骤:
- 根据软启动配置调整目标幅值。
- 读取功率计算结果,执行 PQ 下垂控制。
- 根据母线电压和限功率输出修正幅值。
- 生成正弦电压参考。
- 计算虚拟阻抗补偿。
- 执行重复控制。
- 执行电压环 PI。
- 执行电流环 PI 和限幅。
- 根据开环/闭环、单机/并机模式生成调制量。
- 限幅后计算 PWM 周期和比较值。
9.2 电压/电流双环
| 环路 | 输入 | 输出 | 说明 |
|---|---|---|---|
电压环 PID_Vol_Loop |
电压参考、输出电压峰值反馈 | 电流参考或调制修正量 | 保持输出电压 |
电流环 PID_Curr_Loop |
电压环输出、电感电流峰值反馈 | PWM 调制修正量 | 限制和调节电感电流 |
当前初始化中电流环限幅为 +800/-800,运行中还会根据电流 RMS 和功率进行补偿。
9.3 重复控制
重复控制使用当前正弦表索引 SineTab_Index,将电压参考和反馈误差映射到周期性补偿缓存,用于降低稳态周期误差。启用或修改重复控制参数时,需要同步确认:
- 正弦表点数与输出频率匹配。
- 缓存长度与
SPWM_Point匹配。 - 故障释放时缓存是否清零。
- 负载突变下是否引入过冲。
9.4 PQ 下垂与并机
PQ_Droop_Ctrl() 读取有功/无功和母线电压,输出幅值与频率补偿。当前 InvVol_Omiga_MultiCalc 被固定为 4096,频率下垂输出未直接叠加;幅值补偿仍参与 InvVol_AM_MultiCalc。
9.5 限功率控制
限功率由 INV_POWER_CTRL_SELECT 使能,相关入口包括:
| 模块 | 作用 |
|---|---|
INV_Power_Ctrl() |
运行中根据功率限制输出幅值/参考 |
INV_PID_Power |
限功率控制器输出 |
INV_LOAD_PWR_SLOPE_NUM |
负载功率对电压幅值补偿 |
10. 故障保护与处理
10.1 保护判定机制
保护项通过 Protect_Check_Var_t 描述阈值、回差、延时和保护位。Get_The_Protect_Flag() 按比较类型进行计时,超过持续时间后锁存对应保护位。
Fault_State_Check() 在 1 ms 节拍下运行,仅在 CM_RUN_STATE 且当前无故障时继续判定。首次故障会记录到 System_ProtectFlag_Info_First_Value,用于追溯首因。
10.2 主要保护项
| 类别 | 变量 | 当前阈值/说明 |
|---|---|---|
| 输出过压 | ADSample_Info.AC_Vol_RMS |
255 V,300 ms,回差 5 V |
| 输出欠压 | ADSample_Info.AC_Vol_RMS |
130 V 或 160 V 分支,1500 ms,回差 5 V |
| 输出短路 | AC_Vol_RMS + Inv_Cur_Peak |
启动屏蔽后,低输出电压且高峰值电流触发 |
| 电感过流 | ADSample_Info.Inv_Cur_RMS |
OCP1/OCP2,阈值在参数文件中配置 |
| 过载 | System_Power_Info.Active_Power_Total |
OLP1~OLP4 |
| 母线过压 | ADSample_Info.Bus_Vol_AD |
OVP1~OVP3 |
| 母线欠压 | ADSample_Info.Bus_Vol_AD |
UVP1~UVP3 |
| 辅助电源 | Power_AuxVcc_AD |
OVP/UVP,15.0 V / 8.5 V 相关 |
| 过温 | Temp_External_AD |
80℃、90℃ 对应 NTC 阈值 |
| VREF 异常 | ref_AD_Fir >> 1 |
1848 ~ 2248,回差 80 |
| 转速异常 | s16_GeneratorSpeedAvg |
过速/欠速 |
10.3 故障进入流程
保护条件持续满足
-> System_ProtectFlag_Info.all 置位
-> System_ProtectFlag_Info_First_Value 锁存
-> 状态机检测 Fault_Occur
-> 进入 CM_FAULT_STATE
-> 关闭 SCR / PWM / 驱动相关输出
-> 等待释放条件
10.4 故障释放
Protect_Release() 会清除故障标志、启动自检标志、保护计数、并机状态、重复控制缓存和 PID 积分,并置位 State_Context.flag.bit.Fault_Release,状态机随后返回 Waiting。
当前释放条件包括:
- 保护释放计数小于 20 且复位按键为 OFF。
- 首次故障为过温且温度恢复计时超过 3000 ms。
10.5 故障处理建议
| 现象 | 可能原因 | 检查方向 |
|---|---|---|
| 上电进入 Fault | 母线/辅助电源/温度启动自检失败 | 检查 ADC 原码、分压倍数、启动阈值 |
| 输出电压偏低 | 电压采样增益、幅值目标、限功率、环路参数异常 | 核对 HW_V_ACOUT_GAIN、INV_AC_VOL_AMP_VAL_NORMAL_REF、INV_PID_Power.out |
| 输出波形抖动 | ADC 偏置、PWM ISR 超时、环路参数过激 | 观测偏置值、GPIO 翻转测 ISR 耗时、降低 PI |
| 短路保护误触发 | 启动屏蔽时间、输出电压阈值、电流峰值噪声 | 调整 INV_ACOUT_SCP_*,检查电流采样滤波 |
| 过流保护 | 负载过大、采样增益错误、环路饱和 | 对比电流探头与 Inv_Cur_RMS |
| VREF 异常 | 2.5 V 偏置、ADC 参考、电源纹波 | 测量 P10/VREF 通道波形 |
11. 维护、移植与二次开发
11.1 修改硬件采样网络
修改采样电阻、运放增益或 ADC 参考后,必须同步更新:
HW_VBUS_GAINHW_V_ACOUT_GAINHW_I_INDUC_GAINHW_AUX_POWER_GAIN- 保护阈值和启动自检阈值
- 串口显示换算
- 测试报告中的校准系数
11.2 修改输出频率或 PWM 频率
需要检查:
PWM_FREQSPWMWAVE_DOT_50Hz/60Hz- 正弦表长度
- 重复控制缓存长度
- TMM 周期和死区
- PWM 中断执行时间
- ADC 采样相位和等待时间
11.3 修改功率等级
当前工程已有 1000 W、1600 W、2000 W 等宏分支。修改功率等级时,需要核对:
Inv_Power_Model- 电流限幅和过流保护
- 过载 OLP1~OLP4
- 限功率参数
- 温升测试
- 母线电压范围
- 功率器件 SOA
11.4 代码维护建议
- 不建议将
keil/Objects、keil/Listings、用户本地.uvguix.*作为长期人工维护对象。 - 新增功能优先保持在现有三层目录结构内。
- PWM 中断内只保留必须的高速闭环逻辑。
- 跨中断和主循环共享的关键变量应明确并发访问策略。
- 每次修改保护阈值、采样增益、PI 参数后,应补充测试记录。
浙公网安备 33010602011771号