解读 63 · hl2915_bench.py:单舵机台架六课逐课解读
解读对象:
microduck-replica/rl-series/scripts/hl2915_bench.py(744 行,唯一依赖pyserial)
需要的前置:解读 60(同风格的 testbench)· 解读 53(飞特帧格式)
744 行、一个文件、六节课——这是"控制工程师第一天怎么摸一颗新舵机"的通用方法论。协议层只有三个函数:packet()(FF FF + ID/LEN/指令 + 取反和)、parse()(容忍串口里残留的 0xFF 填充,校验不过就滑动)、Bus.transact()(发一收一,0.1s 超时并计数)。
1. 课 1–2:确认"它在,且读数可信"
lesson1() 体检:先 PING(指令 0x01),失败就打印排障三要素——线序(1=GND 2=Vcc 3=Signal)、电压(要 9-14V)、波特率(默认 1Mbps);通了再 bus.read(sid, 0, 17) 读出厂快照 17 字节:固件版本(0 号)、ID(5)、波特率档位(6,0=1M)、返回延时(7)、应答级别(8)、行程限制(9/11)、温度上限(13)、电压窗(14/15)。若 14 号 <140 直接警告:12V 供电会立刻过压保护。telemetry() 是全脚本的公共件:读 56 号起 14 字节,一次拿回 pos/speed/load/volt(0.1V)/temp/status/moving/current(×6.5mA)。lesson2() 遥测流:每 0.02s 一读(50Hz),统计丢包率、电压最低、温度最高;有丢包先查共地与线长,再降波特率对照。
2. 课 3–4:从"会动"到"敢开机"
lesson3() 闭环小步幅:±100 步(≈±8.8°),41 号加速度写 10、48 号扭矩限制写 500(50% 堵转),速度 300 步/s。move_to() 与协议手册例 4 同构:42 号起连写 位置(2B)+时间(2B)+速度(2B) 六字节。每步读回实际位置,误差判据 DEAD_ZONE_STEPS + 2(26/27 号不灵敏区出厂 1 步,DEAD_ZONE_STEPS = 3 再留余量)。注释点破意图:"绝对编码器不该有'无人知晓'"。
lesson4() 拷机:50Hz 连发(--minutes 10 默认十分钟),每 5s 在 ±200 步间摆动;温度 ≥70°C 立即停;PASS 判据写死为丢包率 <0.001 且温度 <65°C。main() 里 sys.exit(lesson4(...)) 把结论变成进程退出码——验收可以进脚本、进 CI。
3. 课 5–6:从一只到一队,从动作到数据
lesson5 --ids 1,2 双舵机:一条 sync_read(0x82 广播 0xFE)同时收两只 14 字节遥测(各舵机按 ID 顺序逐个回独立应答包),一条 sync_write(0x83,广播不应答)让两只反向摆动 ±100 步、速度 300 步/s。注释:"真机 50Hz 控制环就是这两个指令的形状(15 只舵机一次收发),先用 2 只把它跑通"——对照 duck-control/src/bus.rs 的 READ_ADDR = 124,形状一致。误差判据写的是 DEAD_ZONE_STEPS + 4;教程 §2 的验收口径更严:"读数误差 ≤4 步"。
lesson6 阶跃录制:--kp/--kd 写 21/22 号(P/D 增益,EPROM,先 unlock() 写 55=0;EPROM 有擦写寿命,测完自动还原,--keep 才保留);阶跃默认 --steps 200(≈17.6°),速度写 0(全速,越陡越接近真阶跃),41 号加速度默认 50(×100 步/s²)。record_phase() 50Hz 逐行落 CSV——丢包也记时间格(数值留空),"拟合时看得到空洞在哪,而不是曲线被悄悄拉直";step_metrics() 算超调/稳态误差/整定时间/峰速/峰值电流;unique_path() 保证扫 kp 时出一串文件一个不少。up/back 两向稳态误差之差 ≈ 回差佐证。这批 (P, D, 超调, 稳态误差, 整定) 记录,就是阶段 F 填 microduck_constants.py 的原料。
你带走的收获
- 新执行器上手的六课法:体检→遥测流→闭环小步幅→拷机→双机 SYNC→阶跃录制,顺序即依赖关系。
- 验收判据要写成机器可判的数字(丢包 <0.1%、<65°C),退出码让 PASS/FAIL 可脚本化。
- 写 EPROM 类寄存器的纪律:先读旧值、解锁、测完还原。
- 录数据时丢包不能让时间轴塌缩:空值占格比事后插值诚实。
- 台架是缩微的控制环:课 5 的 SYNC_READ/WRITE 就是整机 50Hz 控制环的形状。