3. 状态转移条件:电网电压异常触发、过流/过温保护触发、用户指令响应、系统自检完成
好,咱们接着聊状态机。上一节我们把状态节点搭好了,就像画好了地图上的城市。但城市之间怎么走?什么时候走?这就是状态转移条件要干的事。
我个人习惯把转移条件分成四类:外部环境异常、内部设备保护、用户主动干预、系统自身流程。说白了,就是「天灾、人祸、指令、自检」这四件事。
3.1 电网电压异常触发
电网这东西,说变就变。我在项目里遇到过,好好的逆变器突然跳闸,查了半天发现是电网电压闪了一下。嗯,这里要注意:电网异常不是单一事件,而是一系列条件的组合。
常见的电网电压异常包括:
- 过压:电网电压超过额定值110%以上,持续超过200ms
- 欠压:电网电压低于额定值85%以下,持续超过2s
- 频率异常:电网频率超出49.5Hz~50.5Hz范围
- 电压骤降/骤升:短时间内电压变化超过20%
你想想看,如果电网电压异常了,逆变器还继续并网发电,那会怎样?轻则烧保险,重则把电网拖垮。所以触发条件必须可靠。
关键设计原则:电网异常检测需要「去抖」处理。不能电网抖一下就跳闸,那逆变器就没法正常工作了。我一般用连续采样3次都异常,才判定为真异常。
代码实现上,我习惯这样写:
// 电网电压异常检测
bool checkGridAbnormal(void) {
static uint8_t faultCount = 0;
float voltage = readGridVoltage();
if (voltage > GRID_OVP_THRESHOLD || voltage < GRID_UVP_THRESHOLD) {
faultCount++;
if (faultCount >= 3) {
faultCount = 0;
return true; // 确认异常
}
} else {
faultCount = 0; // 恢复正常,计数器清零
}
return false;
}
3.2 过流/过温保护触发
过流和过温,是逆变器的「保命符」。我曾经见过一个项目,因为过流保护阈值设得太高,IGBT直接炸了。从那以后,我对保护参数格外小心。
过流保护通常分两级:
| 保护级别 | 触发条件 | 响应动作 |
|---|---|---|
| 一级过流 | 电流超过额定值120%,持续100ms | 降功率运行,发出告警 |
| 二级过流 | 电流超过额定值150%,立即触发 | 紧急停机,锁死PWM输出 |
过温保护也是类似逻辑。散热器温度超过85°C时,先降功率;超过95°C,直接停机。这里有个坑——温度采样点位置。我踩过这个坑:温度传感器贴在散热器边缘,核心温度都120°C了,传感器才读到80°C。后来我把传感器挪到了IGBT正下方,数据才靠谱。
避坑指南:过流保护一定要用硬件比较器做快速通道,不能全靠软件ADC采样。软件再快也有延迟,硬件保护才是最后一道防线。我曾经因为省成本只用软件保护,结果...嗯,不提了。
3.3 用户指令响应
用户指令,说白了就是人按按钮或者发命令。常见的指令有:
- 启动指令:从待机状态进入运行状态
- 停机指令:从运行状态回到待机状态
- 参数设置指令:修改运行参数,比如功率限制
- 紧急停机指令:无论什么状态,立即停止所有输出
这里有个设计要点:指令优先级。紧急停机指令必须最高优先级,哪怕系统正在自检,也要立即响应。我见过一个设计,紧急停机指令被放在消息队列里排队,结果排了500ms才执行...这要是真出了事,后果不堪设想。
我的做法是:紧急停机用独立的中断引脚,不经过任何软件队列。这样无论CPU在干什么,都能在微秒级响应。
3.4 系统自检完成
系统自检,是逆变器上电后的「体检」。体检项目包括:
- 硬件自检:检查ADC、PWM、通信接口是否正常
- 绝缘检测:测量光伏侧对地绝缘电阻
- 继电器粘连检测:确保继电器能正常断开
- 参数校验:检查EEPROM中的配置参数是否完整
自检完成后,会设置一个标志位。状态机检测到这个标志位为true,就知道可以进入待机状态了。
个人经验:自检流程不要设计成「全有或全无」。我习惯把自检分成「关键项」和「非关键项」。关键项(如绝缘检测)不通过,直接报错停机;非关键项(如某个通信接口异常)不通过,可以降级运行,但要在日志里记录下来。
最后,我把这四类触发条件整理成一个表格,方便你对照设计:
| 触发条件 | 来源 | 响应速度要求 | 典型处理方式 |
|---|---|---|---|
| 电网电压异常 | 外部环境 | 200ms以内 | 去抖后切换状态 |
| 过流/过温保护 | 内部设备 | 微秒级(硬件) | 硬件保护+软件确认 |
| 用户指令响应 | 外部输入 | 毫秒级 | 中断或消息队列 |
| 系统自检完成 | 内部流程 | 秒级 | 标志位触发 |
嗯,这四类条件基本覆盖了逆变器运行中会遇到的所有情况。下一节我们聊聊状态机怎么把这些条件串起来,形成完整的运行流程。