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 系统自检完成

系统自检,是逆变器上电后的「体检」。体检项目包括:

  1. 硬件自检:检查ADC、PWM、通信接口是否正常
  2. 绝缘检测:测量光伏侧对地绝缘电阻
  3. 继电器粘连检测:确保继电器能正常断开
  4. 参数校验:检查EEPROM中的配置参数是否完整

自检完成后,会设置一个标志位。状态机检测到这个标志位为true,就知道可以进入待机状态了。

个人经验:自检流程不要设计成「全有或全无」。我习惯把自检分成「关键项」和「非关键项」。关键项(如绝缘检测)不通过,直接报错停机;非关键项(如某个通信接口异常)不通过,可以降级运行,但要在日志里记录下来。

最后,我把这四类触发条件整理成一个表格,方便你对照设计:

触发条件 来源 响应速度要求 典型处理方式
电网电压异常 外部环境 200ms以内 去抖后切换状态
过流/过温保护 内部设备 微秒级(硬件) 硬件保护+软件确认
用户指令响应 外部输入 毫秒级 中断或消息队列
系统自检完成 内部流程 秒级 标志位触发

嗯,这四类条件基本覆盖了逆变器运行中会遇到的所有情况。下一节我们聊聊状态机怎么把这些条件串起来,形成完整的运行流程。