Extension 寄存器布局
协议 v9.0 的块参考。偏移量从每个块的开头开始;它们不是单独的旧寄存器地址。以准确的长度读取每个完整的块。分别参见数据包格式和启动命令。
偏移量 是字段的起始字节,在其块内从零开始计数。以下偏移量为十进制;选择器使用十六进制表示法( 0x... )。所有写入均使用指令0x91;读取使用 0x90 和精确的字节数。
| 选择器 | 块 | 访问 | 字节 |
|---|---|---|---|
0x90 |
能力 | 阅读 | 8 |
0xA0 |
配置 | 读/写 | 24 |
0xB8 |
控制器选择和会话设置 | 写 | 3 |
0xC1 |
运营反馈 | 阅读 | 32 |
0xC2 |
调整反馈 | 阅读 | 54 |
功能 — 0x90
| 偏移量 | 类型 | 价值/意义 |
|---|---|---|
| 0–3 | 4 字节 | ASCII ARMC |
| 4 | u8 |
主要版本:9 |
| 5 | u8 |
次要版本:0 |
| 6 | u8 |
保留:0 |
| 7 | u8 |
正常控制器更新间隔:1 ms |
协议版本定义了可用的块及其确切长度。选择和会话设置共享一个只写块,如下所述。
配置 — 0xA0
| 偏移量 | 类型 | 领域 | 单位/有效范围 |
|---|---|---|---|
| 0 | u16 |
kp_q8 |
增益×256; 0 – 65535 |
| 2 | u16 |
kd_q8 |
增益×256; 0 – 65535 |
| 4 | u16 |
ki_q8 |
增益×256; 0 – 65535 |
| 6 | u16 |
integral_limit |
电机输出指令; 0 – effort_limit |
| 8 | u16 |
effort_limit |
电机输出指令; 1 – 1000 |
| 10 | u16 |
velocity_limit |
计数/秒; 1 – 65535 |
| 12 | u16 |
acceleration_limit |
计数/s²; 1 – 30000 |
| 14 | u8 |
velocity_filter_q8 |
速度滤波器响应; 1 – 255,更高响应更快 |
| 15 | u8 |
ramp_time_ms |
加速斜坡; 1 – 255 毫秒 |
| 16 | u16 |
velocity_ff.positive_gain_q8 |
输出/(计数/秒)× 256 ; 0 – 65535 |
| 18 | u16 |
velocity_ff.negative_gain_q8 |
输出/(计数/秒)× 256 ; 0 – 65535 |
| 20 | u16 |
velocity_ff.effort_limit |
电机输出指令; 0 –主effort_limit |
| 22 | u16 |
gravity_slew |
薪酬变化、工作量单位/秒; 1 – 10000 |
增益以所需值乘以 256 的形式发送。P 的单位为输出/计数,D 的单位为输出/(计数/秒),I 的单位为输出/(计数·秒)。例如,P = 4.5 根据错误计数生成 4.5 输出单位,并作为 1152 发送。
伺服有 1个主动配置。写入它需要关闭电机电源并撤防会话。每次写入都会替换整个配置,包括前馈设置。无效的设置会拒绝整个写入而不更改任何内容。读取 0xA0 以检查已接受的设置。
速度前馈增益是非负的。零前馈输出限制要求两个增益都为零。相同的前馈输出限制适用于两个方向,并且不得超过主输出限制。
复位后,在启用电机电源之前配置伺服。在主机上保留保存的设置和替代调整值;改变在手臂支撑和电机电源关闭的情况下运行之间的增益。
选择和会话设置 — 0xB8
| 偏移量 | 类型 | 含义 |
|---|---|---|
| 0 | u8 |
模式:0 传统、1 扩展 |
| 1 | u16 |
会话:0(用于旧版)、1–65535(用于扩展) |
确切的负载长度是 3 字节 ,会话采用小端顺序。例如,会话 0x1234 的扩展模式为 01 34 12 ;传统模式是 00 00 00 。无效组合拒绝整个写入而不改变状态。两种模式都需要关闭电机电源并替换任何早期的会话设置。仅选择并不能开始控制或占领保持位置。
传统扭矩使能寄存器 40 在写入 1 时启动准备好的扩展会话。它需要可用的电机输出、有效的配置、读数不超过 2 毫秒的初始化传感器、没有需要关闭的故障以及可用的已保存的旧位置限制。启用这些限制后,测量的位置必须在这些限制内。这些检查发生在启用时,因此会考虑设置和启用之间的移动或故障。
扭矩关闭会取消运行控制和未使用的设置。传感器故障、保护关闭、位置限制或编码器偏移更改、校准和保存永久设置也会使会话设置无效。读取反馈,检查控制是否真正开始;没有单独的 ARM 命令。前 0xBA 选择器和前一字节选择有效负载被拒绝。
操作反馈 — 0xC1
| 偏移量 | 类型 | 领域/单位 |
|---|---|---|
| 0 | u32 |
测量时间,自启动起毫秒; 4294967295 后返回零 |
| 4 | u16 |
测量数量; 65535 后返回零 |
| 6 | u16 |
会话 |
| 8 | u16 |
接受的目标序列 |
| 10 | u16 |
接受的重力序列 |
| 12 | u16 |
旗帜,如下 |
| 14 | i32 |
测量位置,Q8 计数 |
| 18 | i32 |
滤波后的测量速度,Q8 计数/秒 |
| 22 | i16 |
应用输出;编码器计数增加后为正值 |
| 24 | i16 |
电流传感器读数相对于其基线;不是安培 |
| 26 | u8 |
电源电压,0.1 V 单位 |
| 27 | u8 |
验证温度,°C |
| 28 | u8 |
传统伺服故障/状态标志 |
| 29 | u8 |
保留:零 |
| 30 | u16 |
读取时的测量年龄,ms;最大报告值 65535 |
| 标志位 | 设置时的含义 |
|---|---|
| 0 | 样品是新鲜的并且可用于当前的臂控制状态 |
| 1 | 控制器激活 |
| 2 | 保留:零 |
| 3 | 电机输出受限 |
| 4 | 手臂驱动启用 |
| 5 | 会话由扭矩启用启动 |
| 6 | 保留:零 |
| 7 | 输出就绪 |
| 8 | 已收到重力命令 |
| 9 | 保留:零 |
| 10 | 可用的验证温度 |
| 11 | 保留:零 |
| 12 | 运动目标激活 |
| 13 | 保留:零 |
| 14 | 已选择手臂控制器 |
| 15 | 保留:零 |
每个标志都是一位:位 0 的值为 1 ,位 1 的值为 2 ,位 2 的值为 4 ,依此类推。可以同时设置多个标志。位 12 清零的活动控制器正在保存其目的地。单独的清晰运动位并不意味着电机已通电或准备就绪。
反馈描述了记录的测量结果。如果伺服器的状态在主机读取之前发生变化,则某些字段可能会描述较早的状态。当测量值超过 2 毫秒,控制器不再被选择、布防、驱动或就绪,或者其会话/序列号不再匹配时,位 0 被清除。一起检查位 0 、年龄、会话和接受的序列。
在传统模式和电机电源关闭的情况下也可以获取位置和健康状况读数。不可用的控制字段为零。采样序列在获取测量值时前进,而不是每次主机读取测量值时前进。它区分共享相同毫秒时间戳的样本。意外的大温度变化出现在此处之前,需要通过多个读数进行检查;请参阅下面的保护限制。
调音反馈 — 0xC2
字节 0 – 31 具有完全相同的 0xC1 布局。剩余的字节是:
| 偏移量 | 类型 | 领域/单位 |
|---|---|---|
| 32 | i32 |
参考位置,Q8 计数 |
| 36 | i32 |
参考速度,Q8 计数/秒 |
| 40 | i16 |
在其配置的限制之后、电机保护之前请求的输出 |
| 42 | i16 |
P 贡献、电机输出指令 |
| 44 | i16 |
D 贡献、电机输出指令 |
| 46 | i16 |
整体贡献、电机输出指令 |
| 48 | i16 |
当前应用的重力补偿,电机输出指令 |
| 50 | i16 |
局部速度前馈、电机输出指令 |
| 52 | u16 |
累计额外控制器延迟,ms;最大65535 |
每当控制器更新花费的时间超过正常 1 毫秒 ( elapsed_ms − 1 ) 时,延迟计数器就会添加额外时间。它不计算丢失的消息。报告的 P 和 D 贡献仅限于 ± 32767 ,因此添加显示的值可能无法重现完整的内部计算。
伺服系统仅在被要求时才发送反馈。正常监控时使用 0xC1,调整需要附加值时使用 0xC2。读取 0xC2 已经包含了所有 0xC1 ,因此读取两者会不必要地增加流量。单独的阅读可以指代不同的时刻;比较它们的时间戳和样本数。
解释规则
effort 是有符号的 PWM 输出指令,不是以安培表示的电流,也不是测得的力矩。currentAdcDelta 是电流传感器的相对读数,必须另行换算才能得到实际电流。Q8 位置与速度使用不同单位:除以 256 只能去除定点缩放,不能把编码器计数换算成角度。关节角度需要建立物理对应关系。
Extension 温度反馈检查可抑制隔离跳变。电机温度保护仍然使用原始读数:C1/C2 没有跳变并不能证明它不会影响保护。
