两轮BMS 电源模式管理 (PMM) 详解 📅 2026/7/6 3:06:13 BMS 电源模式管理 (PMM) 详解基于量产 60V BMSSTM32F0 SH367306 AFE拆解 PMM 五大系统模式的定义、切换逻辑与联动关系。一、五大系统模式PMM.h:45-52┌──────────┐ 上电 ──→│ kIdle │ 空闲模式 └────┬─────┘ │ ┌─────────────┼─────────────┐ │ 充电电流 │ 放电电流 │ 超时/欠压 ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌──────────┐ │ kChg │ │ kDsg │ │ kSleep │ │ 充电模式 │ │ 放电模式 │ │ 休眠模式 │ └─────────┘ └─────────┘ └──────────┘ │ ┌──────────┐ │ kReset │ 复位模式 └──────────┘模式充电 MOS放电 MOS预充 MOSkIdle空闲防打火使能闭合断开通断时序kIdle空闲防打火关闭闭合闭合断开kChg充电闭合闭合断开kDsg放电闭合闭合断开kSleep休眠断开断开断开kReset复位断开断开断开充放电 MOS 是背靠背串联的正常工作时充电或放电两个都闭合。只在保护触发时才单独关断——forbidCharge关充电 MOSforbidDisCharge关放电 MOS。充电时放电 MOS 闭合可以减少体二极管导通损耗MOSFET Rds(on) 远小于体二极管 Vf。二、模式切换逻辑核心在kPMMMode_IdleModeMPMM.c:256-297只根据电流方向判断if(SystemCurrent-500mA)→ kChg// 检测到充电电流if(SystemCurrent ≈0或 防打火中)→ kIdle// 维持空闲if(SystemCurrent500mA)→ kDsg// 检测到放电电流各模式内部也有返回空闲或切换到其他模式的逻辑kIdle ──→ 充电电流 ──→ kChg kIdle ──→ 放电电流 ──→ kDsg kIdle ──→ 超时欠压 ─→ kSleep kChg ──→ 电流归零 500ms ─→ kIdle kChg ──→ 放电电流 ──────→ kDsg 拔充电器直接走 kDsg ──→ 电流归零 1s ────→ kIdle kDsg ──→ 充电电流 ──────→ kChg 插充电器直接走三、各模式详解3.1 空闲模式 (kIdle)系统的大厅——不上不下不充不放时都在这里。内部还有一个四级子状态机管理防打火PMM.c:33-39kIdleInit → kIdleFirePrevent → kIdlePowerOn → 转 kDsg同时在此模式下判断休眠条件静置超时、单体欠压、单体超低压。3.2 充电模式 (kChg)充电电流触发充电 MOS 和放电 MOS 均闭合。进入后做的事满充检测超过 3 分钟重置 Idle 子状态机禁止充电/放电检查FDR 故障标志位会强制关断对应 MOS满充断开收到BatFullChrgState kFullChg时断开充电 MOS退出电流归零 500ms → kIdle出现放电电流 → kDsg3.3 放电模式 (kDsg)放电电流触发闭合充放电 MOS。进入后做的事运行限流调节kPMMMode_CurLimitRegulate占空比增减检测充电电流 → 切 kChg检测电流归零 1s → 切 kIdle禁止放电标志位强制关断放电 MOS3.4 休眠模式 (kSleep)全部 MOS 断开MCU 低功耗。四种触发类型PMM.h:57类型触发条件典型场景1上位机强制命令远程关停2单体欠压电池快没电保护性休眠3单体超低压紧急电池严重亏电4静置超时 SOC20%用户长时间不用唤醒方式休眠前 MCU 将唤醒源配置为 GPIO 边沿中断然后进入 STOP 模式。唤醒后硬件复位软件根据中断标志识别唤醒源唤醒源硬件说明通信唤醒(ComWakeup)UART/RS485 RX 引脚边沿中断充电柜或 4G 模组发来数据时触发充电唤醒(ChgWakeUp)充电器插入检测引脚上升沿充电器插入瞬间电压跳变触发各休眠类型的唤醒配置PMM.c:709-743类型ComWakeupChgWakeUp说明1 强制✅✅通信或充电都能唤醒2 欠压✅✅通信或充电都能唤醒3 超低压❌✅只能充电唤醒通信已关闭以省电4 静置✅✅通信或充电都能唤醒超低压休眠类型 3是最极端的情况——电池电压已经低到不足以维持通信模块所以关闭通信唤醒只保留充电器插入这一条救命路径。3.5 复位模式 (kReset)强制全关 状态归零。触发上位机下发复位命令。所有 MOS 断开内部计数器清零回到kIdleInit。3.6 存储模式kIdle 下的子状态存储模式不是独立的 PMM 顶层模式而是空闲模式下的低活动优化状态。MCU 仍在运行MOS 同空闲模式只是降低非必要操作的频率。进入后 4G 模组上报battery_state 6。进入条件PMM.c:608-618空闲模式下满足全部四种条件且持续60 分钟——if(SystemModekIdle循环次数3// 电池已完整充放过至少 3 次无系统故障有密钥)// 防盗无密钥不进存储{if(StoreMode_Cnt60分钟)BmsStoreMode_flg1;}进入后的变化模块正常空闲存储模式DSM 数据存储间隔10 分钟2 小时减少 Flash 擦写4G 上报状态battery_state4battery_state6退出条件—有电流 / 出故障 / 密钥被清 → 立即退出与休眠模式 (kSleep) 的区别存储模式休眠模式MCU正常运行STOP 低功耗MOS同空闲全部断开通信保持关闭等唤醒本质闲着少干点活彻底关等唤醒恢复有电流立退必须唤醒源触发设计意图电池长期放在仓库或柜子里不用时没必要每 10 分钟写 Flash 浪费寿命把存储间隔拉到 2 小时就够了。用户一取用立退恢复正常。四、对外的 SystemStatusPMM 内部用SystemMode做状态机对外用SystemStatus上报PMM.h:19-24kPMMIdle0// 空闲kPMMChging1// 充电中kPMMDsging2// 放电中SystemStatus被 LED 指示灯、4G 模块、Modbus 寄存器使用告知外部电池在干什么。它和内部SystemMode不是一一对应——比如在kIdle里跑防打火子状态机对外仍报kPMMIdle。五、工厂模式 vs 运营模式这不是 PMM 的系统模式而是 EEPROM 中FuncConfig2.FactoryMode的一个配置位影响多个模块的行为标志位 0 1FactoryMode运营模式工厂模式下线检测由上位机在生产线下线时写入出厂前置 0。三处行为差异模块运营模式 (0)工厂模式 (1)PMM 限流SOP 查表动态限流35A~1.5C固定 1.5C避免检测时触发限流防盗 AntiLossbBatOperate 1防盗使能bBatOperate 0防盗禁用存储模式循环 3 次后可进入不能进入本质生产线上做下线检测时防盗、限流这些保护逻辑不能干扰测试流程。出厂前把标志位从 1 改成 0电池才进入正常运营状态。本文基于量产 BMS 代码分析。