一:增加了纹波滤波,当纹波板有电阻时打开辅助继电器应该为3帧过冲,使用五次过滤可以消除异常纹波

二、修改了负载启动的顺序,先开启辅助继电器使地相通,再开启D+D-继电器

feat: 发布V1.1.23版本,优化负载初始化继电器时序

- 更新所有头文件版本号至V1.1.21~V1.1.23,协议板固件版本更新为0x0127
- 新增纹波滤波相关宏定义与函数,实现继电器闭合后纹波过滤
- 调整负载初始化流程:先下发辅助继电器,等待回码后延迟30ms再打开北向继电器
- 优化D+/D-寄存器上位机显示单位,适配0.001V解析格式
- 补充YMODEM升级文档说明,完善传输校验与重发规则
- 清理冗余调试打印与Allegro工程日志文件
This commit is contained in:
wrh
2026-09-14 15:13:20 +08:00
parent d231a49771
commit 05309dfb41
15 changed files with 1343 additions and 3490 deletions
+101 -949
View File
File diff suppressed because it is too large Load Diff
+921 -2487
View File
File diff suppressed because it is too large Load Diff
+52
View File
@@ -1,5 +1,57 @@
# 修改日志
## V1.1.23 - 2026-09-11
### 负载初始化继电器时序调整
- 负载初始化先单独下发辅助继电器 `FU_REL_ON (0x01 0x02)`。
- 只有收到匹配回码后,等待 `30ms` 才打开北向负载继电器。
- 北向继电器打开后,再继续下发电流、模式、V_On等初始化参数。
- 辅助继电器回码失败时只重发当前初始化阶段,不提前打开北向继电器。
- 协议板版本号更新为 `V1.1.23`,固件版本寄存器更新为 `0x0127`。
### 待验证
- 上电初始化日志中确认先收到 `01 02`,约30ms后才出现北向继电器打开。
- 辅助继电器无回码时确认北向继电器保持关闭。
## V1.1.22 - 2026-09-11
### 增加纹波滤波调试打印
- 记录每个通道主继电器闭合的 tick 和忽略帧配置。
- 打印忽略帧的序号、原始纹波值及继电器闭合后的经过时间。
- 打印实际进入滤波的帧序号、原始值、滤波值及经过时间。
- 协议板版本号更新为 `V1.1.22`,固件版本寄存器更新为 `0x0126`。
- 待验证:确认宏调整后忽略帧数量和实际进入滤波的时间同步变化。
## V1.1.21 - 2026-09-11
### 继电器切换纹波滤波
- 主继电器闭合回码成功后,忽略 `RIPPLE_RELAY_IGNORE_P1_COUNT` 个新P1采样帧;当前值为 `2U`,可在 `chrg_north.h` 中调整。
- 后续纹波持续使用三点中值滤波,滤除单帧尖峰;连续异常纹波仍会正常显示。
- LCD和上位机纹波寄存器统一使用滤波后的纹波值。
- 协议板版本号更新为 `V1.1.21`,固件版本寄存器更新为 `0x0125`。
### 验证记录
- 待硬件验证:继电器闭合瞬间出现约500mV尖峰时,LCD和上位机不显示该尖峰;忽略2帧后再累计3帧并更新为稳定纹波。
- 待硬件验证:持续三帧以上的高纹波仍能在LCD和上位机显示。
## V1.1.20 - 2026-09-10
### D+/D-上位机显示单位修正
- 上位机读取各通道 `D+`、`D-` 保持寄存器时,返回值由内部原始值放大 `10` 倍,适配上位机按 `0.001V` 解析。
- LCD显示、北向回码解析及内部控制值保持原有 `0.01V` 单位,不受影响。
- 增加16位寄存器上限保护,放大结果超过 `65535` 时返回 `65535`。
- 协议板版本号更新为 `V1.1.20`,固件版本寄存器更新为 `0x0124`。
### 验证记录
- 待硬件验证:D+或D-内部值为 `260` 时,LCD继续显示 `2.60V`,上位机读取值为 `2600` 并显示 `2.600V`。
## V1.1.19 - 2026-09-10
### 短路测试绕过 V_ON 门槛
+15
View File
@@ -20,6 +20,21 @@
- 上位机必须从偏移 0 开始以 `STX/1024` 发送;第一个 STX 是头区,真正 body 从第二个 STX 开始。
- YMODEM 最后一帧的 `0x1A` 补齐仅属于传输层,不能计入文件大小、`raw_size` 或 `pkg_size`。
### YMODEM 1K 帧字节数
`STX/1024` 中的 `1024` 指数据区长度,不是串口线上完整帧长度。每个完整 STX 数据帧固定为 **1029 字节**:
```text
STX 1 字节
PacketNo 1 字节
~PacketNo 1 字节
Data 1024 字节
CRC16 2 字节
总计 1029 字节
```
因此,UPK 首数据块和后续固件数据块的有效数据均为 1024 字节,实际串口发送时均应连续发送 1029 字节。YMODEM 元数据使用 SOH 帧,完整帧为 133 字节(128 字节数据区 + 5 字节控制/校验字段)。
界面中的“表头尺寸 `1024 (ymodem1k)`”应改名为“YMODEM 首数据块/头区尺寸”,并固定为 1024;UPK 逻辑头固定为 96,不能让用户修改。
## 3. 输入、分区与版本
@@ -56,8 +56,8 @@ CRC 覆盖 `Data` 的全部固定长度字节(128 或 1024),并按 **高
1. 元数据包必须使用 `SOH`,`PacketNo=0x00`,反码为 `0xFF`。
2. 首个文件数据包使用 `PacketNo=0x01`;每得到 ACK 后序号加 1,按 8 位自然回绕。
3. 本 Boot 的 `.upk` 使用 1K 首数据块布局,因此文件数据包必须使用 `STX`(1024 字节);最后一包不足 1024 字节时仍应补齐到 1024 字节,建议补 `0x1A`。
4. Boot 校验包号、包号反码、帧长度与 CRC。任一校验失败会回复 NAK。
5. 收到 NAK 时,必须重发**原完整帧**,包号不得递增。该 Boot 不将“前一帧重复包”当作成功帧,因此不能依赖重复包自动 ACK。
4. Boot 校验包号、包号反码、帧长度与 CRC。任一校验失败会立即回复 NAK;当前 Boot 随后会重置 YMODEM 包号和流程。
5. 对于业务层处理失败产生的 NAK,可以重发**原完整帧**,包号不得递增。对于 CRC、包号或帧长度错误产生的 NAK,不能只重发当前帧,必须重新进入 Boot 并从元数据包开始完整传输。
## 5. 元数据包规则
@@ -171,7 +171,7 @@ WAIT_END_ACK
| 事件 | 上位机处理 |
| --- | --- |
| 收到 ACK | 仅推进到下一协议状态;数据包 ACK 后才递增包号 |
| 收到明确 NAK | 重发当前完整帧;建议最多连续 3 次 |
| 收到明确 NAK | 业务层 NAK 可重发当前完整帧;协议校验 NAK 应重新进入 Boot,从元数据包开始传输 |
| 等待 ACK 超时 | 标记“传输结果不确定”,停止本次会话;重新进入 Boot 后从元数据包开始完整传输 |
| 明确 NAK 重发耗尽 | 发送 CAN 两次,标记升级传输失败 |
| 收到 CAN | 立即停止,标记 Boot 取消升级 |
@@ -180,7 +180,7 @@ WAIT_END_ACK
Boot 对单个 CAN 会进入取消流程并回 ACK;上位机仍建议按标准发送两个 CAN,并接受可能出现的 ACK。
> **当前 Boot 的可靠性限制:** 成功接收一个数据包后,Boot 已把期望包号加一;若该包的 ACK 在串口上丢失,上位机重发同一包会被 Boot 判为“重复包”并回复 NAK,而不是再次回复 ACK。因此“ACK 超时后无条件重发当前包”不能可靠恢复。本文规则可在直连、稳定的串口环境中正常升级;若要支持 ACK 丢失后的可靠自动重发,需要修改 Boot,使其收到“期望包号减一”的重复帧且 CRC 正确时直接回复 ACK、不再次写入数据。
> **当前 Boot 的可靠性限制:** 成功接收一个数据包后,Boot 已把期望包号加一;若该包的 ACK 在串口上丢失,上位机重发同一包会被 Boot 判为“重复包”并回复 NAK,同时触发 YMODEM 重置。因此“ACK 超时后无条件重发当前包”不能可靠恢复,必须重新进入 Boot 并从元数据包开始传输。若要支持当前会话内的可靠自动重发,需要修改 Boot,使其保留期望包号,并对 CRC 正确的重复帧直接回复 ACK、不再次写入数据。
`WAIT_*_ACK` 的建议超时为 3~10 秒,元数据后的 `WAIT_C_DATA`、结束阶段的 `WAIT_C_END` 建议为 10 秒。上位机可将串口接收设计为持续缓存并按字节解析,忽略调试文本或仅识别 `C/ACK/NAK/CAN` 控制字符,避免因分段到达造成误判。