No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

7.0 KiB

PLSR 问题总清单(2026-08-10)

汇总截至今日所有未关闭的问题、待验证项与待办功能。
均为上板验证/代码扫描实证,非猜测。


一、未解决 Bug(4 个主问题 + 2 个低优先级)

1. AB 启动边沿(Q0/Q1 = 7501 而非 7500)

内容
现象 段1 起步瞬间 A-R 与 B-R 同刻上升(0.33~0.37µs),每相各多 1 个上升沿 → 7501/7501;首周期从 11 开始而非 00→10→11
复现 6 版固件稳定复现(00:06 / 13:41 / 13:57 / 13:59 / 14:15),现象、位置、结构完全一致
影响 启动瞬间 1 个非法跳变;多数驱动器正交解码忽略,位置误差最多 1 脉冲
已排除 调频/重定相路径无同升(稳定段 <10µs 间隔 0 个)——问题只在首次启动路径
代码现状 PlsrHwBeginAbOutput:GPIO 保持 00 → UG → CNT 初值(lead 3/4T、lag 1/2T)→ 切 PWM1 → CEN → update 分时释放引脚;abStartupPriming 预热机制已写(首次启动吞周期)待上板验证
根因方向 两路"释放"几乎同时 → 两路第一次 update 同时 → CNT 初值 1/4T 相位差未体现;或 CC1E 先于 PWM1 切换(RM0090:切模式瞬间 OCREF 跳变)+ 落后相 CNT 写入 = CCR 触发比较事件
验证方法 ① 两 ISR 各翻转调试 GPIO 抓先后;② SetPwmMode1 移到 SetCc1e 之前;③ 启动后读两路 CNT 确认初值
状态 🔴 未关闭(验收:严格 7500)

2. 正软限位边界精度(502 脉冲 vs 验收 499~501)

内容
现象 目标 +10000、正软限位 +500、1000Hz、减速 100ms → 实测 Q0=502 上升沿,超停 1~2 个
波形结构 恒定段 460 个 @1000Hz → 减速段 42 个(84.5ms,535→134Hz 平滑)→ 停止后零边沿
偏差 验收"接近第 450 个脉冲开始减速"→ 实测 459 开始(晚 9 个);理论提前量 = 50 脉冲(应在 450 触发、正好停 500)
影响 超停 1~2 个工程单位;软限位是安全功能,偏差为系统性(速度/限位配置变化时超停量随之变化)
根因方向 ① 限位判定位置源(hardwarePulses/虚拟计数/logicalPosition)与判定 tick 采样点;② 提前量(减速距离)计算与实际减速段脉冲数(42 vs 50)不一致;③ 收尾差 1 与 DONE vs 硬件计数边界可能同源
验证方法 调限位值/速度复测多组(+200/+1000、500Hz/2000Hz),统计触发位置偏差是否随参数线性变化
状态 🟡 已修复待上板:制动距离改用真实硬件输出频率,新增四轴正/负、500/2000Hz矩阵测试(验收±1脉冲)

3. CW/CCW 段尾截断窄脉冲(2.5µs / 5µs)

内容
现象 段1 最后脉冲只持续 2.5µs 高(0.167797→0.167800)、段2 最后脉冲 5.0µs——最后脉冲上升沿后即拉低,未走完完整周期
影响 计数不受影响(Q0=300、Q1=200 精确,中断计数不依赖脉冲宽度);但部分驱动器可能把窄脉冲当噪声忽略(物理少走最后 1 个脉冲)
根因方向 CW/CCW 停止时机在"最后脉冲上升沿 + 2.5~5µs”(比 CC1 下降沿早半个周期)——停止应延迟到最后脉冲 CC1 匹配(下降沿)之后
状态 🟡 未关闭(验收"微秒级毛刺 0 个"严格不达标;主验收已过)

4. P14 硬件计数少 1 个脉冲(Q0/Q1 = 199999 而非 200000)【新增】

内容
现象 四轴 100kHz 压力测试:Q0/Q1(TIM9/TIM12 硬件计数)各 199999 个上升沿;Q2/Q3(软件计数回退)精确 200000
影响 每轴少 1 个脉冲(0.0005%),位置误差 -1 脉冲/次,系统性(非随机);影响硬件计数"转正”
代码现状 硬件计数本轮新接入:TIM9 对 Q0/Q2、TIM12 对 Q1/Q3 累计;16 位溢出扩展(counterBlockPulses)+ 目标脉冲比较(CC1IF 判定,PlsrHwOnCounterInterrupt);本轮同时修复"启动 UG 事件被误计”
根因方向 代码实证:pulses = counterBlockPulses + CNTCC1IF && pulses >= targetPulses 判 DONE——启动时计数器初值偏移 +1(CNT 从 1 开始或第一个 OC 事件被 UG 清除时序吞掉)→ pulses 提前达到 200000 → 提前 1 个停止(实际只发 199999);注释"TIMx_OC rises at the PWM update boundary = 物理下降沿”——启动瞬间的计数边界对齐即嫌疑点
验证方法 DONE 判定处打印硬件计数器最终值(199999 → 少计 1 个;200000 → 停止判定滞后);或对比 Q0(硬件)与 Q2(软件)启动前 3 个脉冲边沿
状态 🟡 已修复待上板:从计数器延迟到源OC启动UG完成后再配置/使能,消除无物理脉冲的内部首沿;验收仍为四轴均200000

5.(低)AB 段3 反向切换 10ms 过渡期

内容
现象 段2→段3 反向切换有 ~10ms 混合相序过渡(A-R→B-R→B-F→A-F)后才进入标准 B 超前 00→01→11→10→00;无毛刺、每状态时长正常
影响 若要求"反向也严格从 00 起步"则未达标;实际影响很小
状态 🟢 低优先级,可暂缓

6.(低)方向信号 Q5 启动瞬间 1µs 毛刺

内容
现象 方向逻辑测试(17:20)中 Q5 在方向建立瞬间出现 1µs 低→高→低毛刺(0.128780)
影响 方向信号 1µs 抖动,一般不影响(方向在脉冲开始前已稳定 10ms)
状态 🟢 低优先级,可暂缓

二、待验证项

内容 状态
AB 启动预热机制(abStartupPriming) 代码已写(首次启动吞周期),未上板验证 待测
四轴 100kHz AB 模式 本次只测了 PULSE/DIR 100kHz;AB 高频加速段重定相干扰未实测 待测
双 AB 并发(Q0/Q1 + Q2/Q3 同时 AB) 未实测 待测

三、未实现功能(清单剩余 2 项)

现状 说明
Modbus 剩余批次 P13 控制窗口 (已提交 fdbbe71)、P14 硬件计数 ✅(待提交) 按 P14 说明"剩余 3 批”,当前已完成 2 批 → 剩余约 2 批(具体内容见 Codex 规划)
收尾清理 未做 上电自测移除、调试快照(P4 后删除标记)、tmp 资料清理、git 历史重写(1GB bin 松散对象)

FOLLOW/前馈已关闭(不再列入待办):P14 批按信捷手册明确 FOLLOW/FOLLOW_AB 为独立随动指令(输出 = 输入 × 乘系数/除系数),PLSR 仅保留共用参数字段(follow 1~100、feedforward 0~100)的存储与校验,不实现随动运算。


四、优先级建议

  1. 尽快修:P14 硬件计数 -1(新路径转正门票,预期小改动)
  2. 次优先:AB 启动边沿(预热机制已写,上板验证即可见分晓)
  3. 可并行:Modbus 剩余批次、软限位/段尾截断按实验定位后修
  4. 暂缓:低优先级两项(反向过渡/方向毛刺)、FOLLOW 运算(等需求明确)