解读 64 · 飞特磁编码协议:寄存器表逐段解读
解读对象:
microduck-replica/rl-series/scripts/hl2915_bench.py(744 行)寄存器定义段——脚本头注释如实转引来源:飞特《舵机协议内存表-磁编码版本》220328、《HL-2915-C001 规格书》A/0
需要的前置:解读 53(Dynamixel 侧对照)· 解读 01(读块设计的官方版)
飞特磁编码这一族的内存表,读法是把三十多个寄存器分成三段:EPROM 配置、RAM 动作、遥测块。三段的写策略完全不同——这是这张表最值得学的地方。
1. 包层:FF FF + 取反和
packet() 生成 FF FF | ID | LEN | INSTR | PARAMS | ~sum,parse() 校验不过就滑一个字节继续找。指令码:PING=01、READ=02、WRITE=03、SYNC_READ=82、SYNC_WRITE=83;广播 ID 254(0xFE),广播写不应答(transact(rx_params=None) 跳过收包)。对照 Dynamixel V2 的 FF FF FD 00 + CRC16(解读 53):物理层同为 TTL 半双工 1 Mbps,变的只是包头与校验。
2. EPROM 段:掉电保存,写前解锁
0 固件版本、5 ID、6 波特率档位(0=1M、1=500k、2=250k、3=128k、4=115200、5=76800、6=57600、7=38400)、7 返回延时(×2µs;内存表注"STS 此地址无功能",HL 上是否生效待实测)、8 应答级别(1=全应答,0=仅 read/ping)、9/11 行程限制、13 温度上限、14/15 电压窗(0.1V)、16 最大扭矩(1000=100%)、21/22/23 位置环 P/D/I、31 位置校正(±2047 步,BIT11=方向)、33 运行模式(0=位置伺服)、55 锁(0=EPROM 可写)。
两个坑:14 号出厂值若 <140(=14.0V),12V 一上即过压保护,症状是"假死"——lesson1() 快照专门检查它。21/22/23 与 XL330 的增益生命周期完全不同:bus.rs 里 XL330 增益是 RAM,每次上电回出厂值;HL 的 21/22 是 EPROM,有擦写寿命,写前解锁 55,课 6 测完自动还原。
3. 动作段与遥测块:给 50Hz 省事务
动作段:40 扭矩开关(0=关、1=开、128=把当前位置校正为 2048)、41 加速度(×100 步/s²)、42 目标位置、44 运行时间(转引中另见"恒力输出的目标扭矩"一说的记载——口径冲突,先按内存表用,待实测)、46 目标速度(步/s)、48 扭矩限制(1000=100%)。
遥测块 56..69 连续 14 字节:56 当前位置、58 当前速度(负速为两位补码)、60 负载(0.1% 占空比)、62 电压(0.1V)、63 温度(°C)、65 状态位(BIT0 电压/BIT1 磁编码/BIT2 温度/BIT3 电流/BIT5 负载)、66 移动标志、69 电流(×6.5mA)。一笔 READ 全拿回——对照 XL330 要两笔(READ_ADDR=124/READ_LEN=12 + 慢速 144/3),飞特把电压温度并进了主块,50Hz 下省掉一整类事务。
12V 限流 0.5A 的原因:HL-2915 堵转电流 1.5A(规格书 A/0),而限流是保护参数不是工作点——第一次上电时,电压窗没放开、接线错误、意外堵转都可能发生,0.5A 把这些最坏情况的后果钳在安全范围;同时"顺便测出 0.5A 够不够撑住动作"(教程 §2)。新手文档红线:12V 限流 0.5A 起步,堵转异响立刻断电。
你带走的收获
- 寄存器表按"EPROM/动作/遥测"三段读:锁、寿命、还原策略各不相同。
- 遥测设计成连续块是给控制环省事务数:一笔 READ 拿六个量,对应
bus.rs的一个读块。 - 电压窗寄存器(14/15)是过压保护的动作值:换供电前先读它,出厂值低会"假死"。
- 官方文档互相冲突时(44 号、7 号),以能读回的实测为准,并如实标"待实测"。
- 限流是故障场景的预算,不是额定工作点:它保护的是第一次上电的你。