02 目标、状态与模式切换
PULSE 方波与 VECTOR FOC 沿用同一命令空间;驱动技术和具体型号由通用 Get Info.TargetID 及型号资料识别。当前 vector-fw-vesc 的 INFO 返回业务协议主版本 1、功能修订 7;不把修订号当作驱动技术枚举。TARGET 用同一 CMD 承载下列控制方式,具体型号未实现的 Mode 仍按返回码判断。
| Mode | 控制方式 | Value 字节数 | Value 单位与范围 | 适用驱动技术 |
1 | DUTY · 调制比例 | 2 | 单位 0.1%;−100.0% 至 +100.0% | PULSE / VECTOR |
2 | CURRENT · 转矩电流 | 4 | 单位 0.001 A;−500.000 A 至 +500.000 A,受 MAX_IQ 限制;采用 Iq 幅值约定 | VECTOR |
3 | SPEED · 电气转速 | 4 | 单位 1 eRPM;−200,000 eRPM 至 +200,000 eRPM | PULSE / VECTOR |
4 | POSITION · 单圈机械位置 | 4 | 单位 0.1°;−179.9° 至 +179.9°,相对本次位置零点,走最短路径 | VECTOR + 编码器 |
5 | MIT · 连续机械位置阻抗控制 | 20 | 位置、速度、Kp、Kd、前馈力矩五字段;连续累计位置范围 −2147.483647 至 +2147.483647 rad | VECTOR + 编码器;ESC 功能修订 ≥7 |
DUTY 不等于转速百分比。DUTY、CURRENT、SPEED 的正负号分别表示调制方向、转矩方向和旋转方向。POSITION 的 0 是零点目标而非停机;该模式是单圈最短路径,不累计圈数。MIT 的 Position 是自本次 SET_POSITION_ZERO 起累计的机械弧度,跨圈连续,不按 360° 取模。eRPM = 机械 RPM × 极对数。具体型号未实现的 Mode 返回 UNSUPPORTED_MODE;Mode 未定义或长度错误返回 BAD_PAYLOAD。
| State | 含义 | 控制规则 |
0 LOCKED | 输出关闭;上电或 LOCK 后尚未确认停稳 | 可读写参数;待设备确认停稳后进入 STOPPED |
1 READY | 已解锁,输出关闭 | Mode=NONE 时首次选择;否则只能继续原 Mode |
2 RUNNING | 正在驱动或保持位置 | 只能更新原 Mode 的目标 |
3 FAULT | 输出关闭,故障锁存 | 原因解除后 CLEAR_FAULT,回到 LOCKED |
4 STOPPED | 输出关闭,设备已确认电机停稳 | 可 UNLOCK 后选择新的 Mode,也可设置位置零点 |
5 DETECTING | 电机辨识或编码器标定中,设备可能正在通电或旋转 | Mode=NONE、Target=0;禁止普通控制和参数修改,LOCK 可取消当前任务 |
切换 Mode 的步骤固定为 LOCK → 等待 STATUS.State=STOPPED → UNLOCK → TARGET(新 Mode, Value)。LOCK 清除旧 Mode 和目标,关闭输出;设备确认电机停稳后才报告 STOPPED,主机不得仅凭 LOCK 成功或单次速度读数为 0 判定停稳。未完成上述步骤就改变 Mode,返回 BAD_STATE,旧 Mode 和目标不变。同一 Mode 可在 RUNNING 时更新 Value。
STOPPED 的判据:输出已关闭,且设备依据有效反馈确认转子停稳并连续保持 STOP_CONFIRM_MS(默认 250 ms)。当前 VECTOR 固件在输出关闭时将 STATUS.ERPM 置为不可用,另以被动相电压变化判断静止;主机不得把 ERPM 不可用、LOCK 成功或单次读数为 0 当作停稳。STOPPED 不作为机械安全防护功能。
DUTY、CURRENT、SPEED 的 Value=0 关闭主动驱动并进入 READY,但保留当前 Mode;POSITION 与 MIT 即使到达目标仍保持 RUNNING,需用 LOCK 停止保持。MIT 的五个目标须作为同一条 TARGET 原子更新。成功响应 OK 表示目标已接受,不表示已达到速度或位置。
03 MIT 连续位置阻抗控制
当前 VECTOR 固件用 TARGET 的 Mode=5 进行 MIT 控制。位置以电机轴机械弧度表示,从本次 SET_POSITION_ZERO 的零点起累计,允许跨越多圈;普通 POSITION(Mode=4) 仍是单圈最短路径。MIT 目标报文一次发送位置、速度、刚度、阻尼和前馈力矩,不能只发其中一个字段。
Mode1字节 = 5
Position4字节
Velocity4字节
Kp + Kd各4字节
Torque4字节
| 字段 | 编码 | 物理量与限制 |
Position | 有符号4字节;1 µrad | 电机轴累计机械位置,−2147.483647 rad 至 +2147.483647 rad;0x80000000 保留为无效值,不可发送 |
Velocity | 有符号4字节;0.001 rad/s | 期望机械角速度;型号还受 MAX_SPEED 和极对数限制,|Velocity| ≤ MAX_SPEED × 2π / (60 × POLE_PAIRS) |
Kp | 无符号4字节;0.001 Nm/rad | 位置刚度,0 至 500.000 Nm/rad |
Kd | 无符号4字节;0.001 Nm·s/rad | 速度阻尼,0 至 20.000 Nm·s/rad |
Torque | 有符号4字节;0.001 Nm | 前馈力矩,受型号正负电机电流限值与 Kt 限制;该字段不是直接电流指令 |
设备按约 1 ms 周期计算 Iq = [Kp × (Position − 实际位置) + Kd × (Velocity − 实际速度) + Torque] / Kt,再把 Iq 限制在电机电流上下限内。Kt 是电机转矩常数,单位 Nm/A;默认由 1.5 × POLE_PAIRS × FLUX_LINKAGE(Wb) 估算,可用 ParamID 154 覆盖,用 ParamID 155 或 MIT_STATUS.Kt 查询当前值。达到电流上限时 MIT_STATUS.SATURATED 置位;实际力矩仍取决于电机、参数和测量误差。
启动前须选择 SENSOR_SOURCE=ENCODER、建立本次上电有效编码器参考、在 STOPPED 状态执行 SET_POSITION_ZERO,并确认 Kt 有效。未建立参考、未归零或反馈不可用时 Mode=5 返回 BAD_STATE,不驱动;发送超限目标返回 BAD_PAYLOAD,旧目标保持不变。首次发送前按既有流程 UNLOCK;运行中定期重发完整 21 字节目标,间隔小于 TARGET_TIMEOUT_MS(默认 3000 ms)。MIT_STATUS 可读取反馈,但查询不续约。目标超时、运行中位置反馈失效或实际位置越界时设备关闭输出并进入 FAULT;停止使用 LOCK。
例如 Position=1.000000 rad、Velocity=0、Kp=1.000 Nm/rad、Kd=0.100 Nm·s/rad、Torque=0.200 Nm,TARGET 请求 PAYLOAD 为 05 40 42 0F 00 00 00 00 00 E8 03 00 00 64 00 00 00 C8 00 00 00,共 21 字节。此示例仅说明小端编码,不代表适合具体电机的安全控制增益。
04 电调命令 · 0x50–0x5F
0x50
INFO
读取业务接口版本请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 3字节Result(1) + Major(1) + Revision(1)
| 字段 | 字节数 | 定义 |
|---|
Result | 1 | 成功为 OK |
Major | 1 | 电调业务协议主版本;当前为 1 |
Revision | 1 | 该型号的功能修订;当前 vector-fw-vesc 返回 7,MIT 连续位置接口从修订 7 提供。客户仍应以实际 CMD 返回码探测可用性 |
驱动技术和硬件型号由通用 Get Info.TargetID 与型号资料确定;Revision 不是 PULSE / VECTOR 枚举。
0x51
STATUS
读取控制与测量状态请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 29字节Result(1) + State(1) + Mode(1) + Target(4) + Voltage(2) + BusCurrent(4) + MotorCurrent(4) + ERPM(4) + Degree(4) + Temp(2) + MotorTemp(2)
| 字段 | 字节数 | 定义 | 取值范围 |
Result | 1 | 成功为 OK | 0x00 |
State | 1 | 0 LOCKED;1 READY;2 RUNNING;3 FAULT;4 STOPPED;5 DETECTING。故障详情用 GET_FAULT 查询;辨识、标定进度分别用 MOTOR_DETECT、ENCODER_CALIBRATE 查询 | LOCKED / READY / RUNNING / FAULT / STOPPED / DETECTING |
Mode | 1 | 0 NONE;1 DUTY;2 CURRENT;3 SPEED;4 POSITION;5 MIT;LOCK 后为 NONE | NONE / DUTY / CURRENT / SPEED / POSITION / MIT |
Target | 4 | 有符号;按 Mode 返回当前已接受目标的数值;DUTY 在此字段符号扩展为4字节,MIT 仅回显 Position 原始 µrad,其他四个 MIT 目标由主机自行保留 | NONE:0;DUTY:−100.0% 至 +100.0%;CURRENT:−500.000 A 至 +500.000 A;SPEED:−200,000 eRPM 至 +200,000 eRPM;POSITION:−179.9° 至 +179.9°;MIT:−2147.483647 rad 至 +2147.483647 rad |
Voltage | 2 | 无符号,直流母线电压,单位 0.1 V | 0.0 V 至 300.0 V;0xFFFF 表示不可用 |
BusCurrent | 4 | 有符号,直流母线电流,单位 0.001 A;正值为从电源取电,负值为向电源回馈,与旋转方向无关 | −500.000 A 至 +500.000 A;0x80000000 表示不可用 |
MotorCurrent | 4 | 有符号,电机转矩电流,单位 0.001 A;VECTOR 为 Iq,正负表示转矩方向,与 CURRENT.Value / MAX_IQ 采用相同幅值约定;无法提供同定义测量的型号返回不可用 | −500.000 A 至 +500.000 A;0x80000000 表示不可用 |
ERPM | 4 | 有符号,实时电气转速,单位 1 eRPM;POSITION 模式下也返回实时转速 | −200,000 eRPM 至 +200,000 eRPM;0x80000000 表示不可用 |
Degree | 4 | 有符号,相对本次位置零点的单圈机械角度,单位 0.1°;范围按 [−180°, 180°) 折返,MIT 运行中也保持此布局 | −180.0° 至 +179.9°;未建立零点或反馈不可用时为 0x80000000 |
Temp | 2 | 有符号,电调温度,单位 0.1 °C | −50.0 °C 至 250.0 °C;0x7FFF 表示不可用 |
MotorTemp | 2 | 有符号,电机温度,单位 0.1 °C | −50.0 °C 至 250.0 °C;0x7FFF 表示不可用 |
BusCurrent 与 MotorCurrent 独立返回,不得互相替代。仅有母线电流测量的 PULSE 型号,MotorCurrent 返回不可用;电机电流正负表示转矩方向,不能据此判断母线是否回馈。电流原始值 12345 表示 12.345 A。不支持电机温度测量的型号返回 MotorTemp=0x7FFF。表中是协议范围,实际允许的工作范围仍由型号规格和保护参数决定。STATUS.Degree 与普通 POSITION 是单圈角度;需要跨圈连续位置、速度和力矩反馈时使用 MIT_STATUS。设备复位后须重新建立位置零点。
0x52
UNLOCK
允许输出请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 1字节Result(1)
仅 State=STOPPED 且无故障时接受;成功进入 READY,Mode=NONE、Target=0,不自动驱动。尚未确认停稳时返回 BAD_STATE。INPUT_SOURCE 为外部输入时,解锁前还须连续 INPUT_NEUTRAL_MS(默认 250 ms)收到有效零目标;输入无效或已有非零目标时返回 BAD_STATE,保持 STOPPED。选择 SENSOR_SOURCE=ENCODER 且本次上电尚无有效编码器参考时,不允许进入编码器闭环;即使已 UNLOCK 也不得据此驱动。
0x53
LOCK
关闭输出请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 1字节Result(1)
任何状态均可请求;清零目标、关闭主动驱动并将 Mode 设为 NONE。无故障时先进入 LOCKED,设备确认电机停稳后进入 STOPPED;故障已锁存时仍为 FAULT。LOCK 成功不代表转子已停稳。MOTOR_DETECT 或 ENCODER_CALIBRATE 运行时,须先关闭测试输出、取消任务并恢复任务前的配置,再回复 OK。
0x54
TARGET
设置控制目标请求 PAYLOAD · 3、5或21字节Mode(1) + DUTY.Value(2) / 普通Value(4) / MIT五字段(20)
成功响应 PAYLOAD · 1字节Result(1)
Mode=1(DUTY)请求 3 字节;Mode=2/3/4(CURRENT / SPEED / POSITION)请求 5 字节;Mode=5(MIT)请求 Mode(1)+Position(4)+Velocity(4)+Kp(4)+Kd(4)+Torque(4) 共 21 字节,字段编码见 MIT 控制节。当前 Mode 不为 NONE 时改用其他 Mode 返回 BAD_STATE,须先 LOCK、等待 STOPPED、UNLOCK。Mode 未定义、长度或编码不合法返回 BAD_PAYLOAD;型号不支持普通控制 Mode 时返回 0x80 UNSUPPORTED_MODE。MIT 在编码器参考、位置零点或 Kt 未就绪时返回 BAD_STATE;目标超出限制返回 BAD_PAYLOAD。失败时旧 Mode、目标与输出不变。
HOST 模式运行中,相邻两条当前 Mode 的有效 TARGET 间隔不得超过 TARGET_TIMEOUT_MS(默认 3000 ms);POSITION 保持及 MIT 都须重发目标。STATUS、MIT_STATUS 查询不续约。超时关闭输出并进入 FAULT,不会自动重新解锁。
0x55
GET_PARAM
读取参数请求 PAYLOAD · 1字节ParamID(1)
成功响应 PAYLOAD · 3+N字节Result(1) + ParamID(1) + Length(1) + Value(N)
ParamID 是 1 至 255 的十进制编号,报文中占 1 字节。仅返回该型号实现的 ParamID;未知、预留或不适用时返回 BAD_PAYLOAD。
0x56
SET_PARAM
修改参数请求 PAYLOAD · 2+N字节ParamID(1) + Length(1) + Value(N)
成功响应 PAYLOAD · 1字节Result(1)
仅 LOCKED 或 STOPPED 状态接受;INPUT_SOURCE、INPUT_CONTROL_MODE、SENSOR_SOURCE、ABZ_COUNTS_PER_REV 只允许在 STOPPED 时修改。其余状态返回 BAD_STATE。未知、预留或不适用的 ParamID,以及 Length、取值范围或参数关系不合法时返回 BAD_PAYLOAD。修改仅在 RAM 生效,不能超过型号硬件安全极限。ABZ 有效标定与本次上电参考的失效规则见参数表。
0x57
SAVE_PARAM
持久化参数请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 1字节Result(1)
仅 LOCKED 或 STOPPED 时接受;完成非易失存储写入并校验后回复 OK。不支持持久化的型号返回 BAD_COMMAND。
0x58
CLEAR_FAULT
清除故障请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 1字节Result(1)
原因已消失且输出关闭后清除锁存,State 从 FAULT 回到 LOCKED;不会自动解锁。原因仍存在时返回 BAD_STATE。
0x59
SET_POSITION_ZERO
建立位置零点请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 1字节Result(1)
仅支持 POSITION 的 VECTOR + 编码器型号实现;STOPPED 且位置传感器可用时,将当前位置设为逻辑零点。主机须确保轴处于预期零点。零点仅在本次上电期间有效,复位后须重新建立。ABZ 型号还须先完成本次上电的 Z 参考建立,且 SENSOR_STATUS.ReferenceValid=1;未满足时返回 BAD_STATE。
0x5A
GET_FAULT
查询故障码请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 2字节Result(1) + Fault(1)
任何状态均可查询;无故障时 Fault=0。STATUS.State=FAULT 时用此命令读取锁存的原因。
0x5B
MOTOR_DETECT 无感 FOC 自动辨识
VECTOR
在无感 FOC 策略下辨识电机电阻、电感和磁链。启动时可以直接指定最大辨识电流,也可以选择电机类型预设;母线电压由设备测量,测试转速和总时长由设备按型号限制。本流程不检测或标定霍尔、编码器,不修改传感器配置。极对数继续通过现有 POLE_PAIRS 配置,不作为辨识请求参数,也不由本流程自动确定。
自定义电流 START · 5字节Action(1)=0 + MaxDetectCurrent(4)
QUERY · 1字节 / 电机类型 START · 2字节Action(1)=1 / Action(1)=2 + ProfileID(1)
| 请求字段 | 字节数 | 定义 |
Action | 1 | 0 按指定最大电流 START;1 QUERY;2 按电机类型预设 START。中止复用 LOCK |
MaxDetectCurrent | 4 | 仅 Action=0 携带;无符号,单位 0.001 A。当前 VECTOR 固件接受 0.100 A 至型号允许上限,且不得超过 MAX_IQ;该值是 Iq 测试限流,不是母线电流 |
ProfileID | 1 | 仅 Action=2 携带,取 0 至 8;设备使用该类型预设的损耗功率和 VESC 原生辨识策略。未知编号返回 BAD_PAYLOAD |
电机类型预设 ProfileID 0–8
| ID | 类型 | 损耗功率 | 开环 eRPM | 无感 eRPM |
| 0 | 迷你外转子 | 20 W | 1400 | 4000 |
| 1 | 小型外转子 | 50 W | 1400 | 4000 |
| 2 | 中型外转子 | 120 W | 700 | 4000 |
| 3 | 大型外转子 | 400 W | 700 | 4000 |
| 4 | 小型内转子 | 50 W | 1400 | 4000 |
| 5 | 中型内转子 | 140 W | 1400 | 4000 |
| 6 | 大型内转子 | 400 W | 1000 | 4000 |
| 7 | 直驱轮毂 | 150 W | 300 | 2000 |
| 8 | 小型涵道内转子 | 110 W | 1400 | 4000 |
ProfileID 只是预设的测试条件,不是对实际电机类型或极对数的自动识别;极对数仍须由客户设置。此预设路径不带 MaxDetectCurrent,电流仍受设备硬件保护。
仅支持本功能的 VECTOR 型号、INPUT_SOURCE=HOST、采用无感控制策略、State=STOPPED 且无故障时接受 START;实现 SENSOR_SOURCE 的型号须取 SENSORLESS。状态不符返回 BAD_STATE,未实现返回 BAD_COMMAND。母线测量无效或供电超出型号允许的辨识范围时拒绝开始。启动成功立即返回 OK 与 RUNNING 快照,表示任务已建立,后续由 QUERY 查询;不主动推送最终响应。
START / QUERY 成功响应 PAYLOAD · 18字节Result(1) + DetectState(1) + Stage(1) + Progress(1) + Error(1) + Applied(1) + MotorR(4) + MotorL(4) + FluxLinkage(4)
请求被拒绝 PAYLOAD · 1字节Result(1)
| 响应字段 | 字节数 | 定义 |
Result | 1 | 命令执行结果。QUERY 成功读取快照时为 OK,即使辨识任务失败;任务结果读 DetectState、Error |
DetectState | 1 | 0 IDLE;1 RUNNING;2 SUCCESS;3 FAILED;4 CANCELLED。任何状态均可 QUERY,快照保留到下一次成功接受 START 或设备复位;复位后为 IDLE |
Stage | 1 | 0 NONE;1 RESISTANCE;2 INDUCTANCE;3 FLUX;4 APPLY。完成后保留最后阶段,失败时用于定位 |
Progress | 1 | 0% 至 100%;成功为 100,无法估算时为 255。IDLE 为 0,不要求进度按时间匀速变化 |
Error | 1 | 0 NONE;1 RESISTANCE_FAILED;2 INDUCTANCE_FAILED;3 FLUX_FAILED;4 PROTECTION;5 TIMEOUT;6 LINK_TIMEOUT;7 USER_CANCEL;8 INVALID_RESULT。发生保护时通过 GET_FAULT 查询具体保护原因 |
Applied | 1 | SUCCESS 时为 1,表示本次结果已完整应用于 RAM;其他状态为 0。不表示已写入 Flash |
MotorR | 4 | 无符号,单位 0.1 mΩ;与 ParamID 151 MOTOR_R 编码相同 |
MotorL | 4 | 无符号,单位 0.01 µH;与 ParamID 152 MOTOR_L 编码相同 |
FluxLinkage | 4 | 无符号,单位 1 µWb;与 ParamID 153 FLUX_LINKAGE 编码相同 |
三个结果字段仅在 DetectState=SUCCESS 且 Applied=1 时有效,其他状态均填 0,不对外返回未通过验证的部分结果。设备从较小电流开始选择测试电流,实际电流始终受 MaxDetectCurrent、MAX_IQ 与硬件限制;依次测量电阻、电感、旋转测量磁链,并验证结果。成功后一次性应用 MOTOR_R、MOTOR_L、FLUX_LINKAGE 及对应内部无感 FOC 控制设置,不自动提高电流限制。随后关闭输出;客户用 GET_PARAM 检查 RAM 中的参数、用 SAVE_PARAM 持久化。快照记录本次结果,之后手动修改的当前参数以 GET_PARAM 为准。
开始辨识是单独的通电授权,不需要先 UNLOCK;执行期间 STATUS.State=DETECTING、Mode=NONE、Target=0,测量字段仍按可用性返回。普通 TARGET、UNLOCK、SET_PARAM、SAVE_PARAM、SET_POSITION_ZERO、Reboot 和 Enter Boot 均返回 BAD_STATE。
中止使用 LOCK:辨识期间收到 LOCK,须先关闭输出、中止任务并恢复开始前的配置,再返回 LOCK 的 OK;辨识快照设为 CANCELLED / USER_CANCEL、Applied=0、结果字段为 0。失败同样关闭输出、恢复原配置;成功、失败或中止后,无保护故障时回到 LOCKED,确认停稳后进入 STOPPED,有保护故障时进入 FAULT。结束后不会自动 UNLOCK 或恢复普通控制。
重复收到相同 CMD、SEQ、PAYLOAD 的 START 重发不得重新起动任务;运行中收到新的 START 返回 BUSY。开始时启动通信计时,建议每 500 ms QUERY 一次;连续 3000 ms 未收到有效 QUERY 则关闭输出并结束为 FAILED / LINK_TIMEOUT,STATUS 查询不续约。整个任务最多运行 120,000 ms,超时为 FAILED / TIMEOUT;保护关断优先于全部辨识步骤。
辨识会通电并旋转电机,须空载、轴可自由转动。尚未测得电机参数时,型号须具备不依赖旧参数的停稳判断,才能接受首次辨识。该流程不建立机械位置零点。
接入顺序:等待 STOPPED → MOTOR_DETECT(Action=0, MaxDetectCurrent) 或 MOTOR_DETECT(Action=2, ProfileID) → 循环 QUERY → SUCCESS 且 Applied=1 → 等待 STOPPED → GET_PARAM(151 / 152 / 153) → SAVE_PARAM。需要中止时随时发送 LOCK。
0x5C
SENSOR_STATUS 读取编码器状态
VECTOR · 编码器 · 只读
请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 14字节Result(1) + RawCount(8) + SignalValid(1) + IndexSeen(1) + CalibrationValid(1) + ReferenceValid(1) + IndexError(1)
| 字段 | 字节数 | 定义 |
Result | 1 | 成功为 OK;型号没有编码器状态功能时只返回 BAD_COMMAND |
RawCount | 8 | 有符号,设备本次上电以来的 AB 正交四倍频累计原始计数;正负号仅表示 A/B 计数方向,未经标定方向和位置零点修正;上电为 0,标定、见到 Z、SET_POSITION_ZERO 均不清零 |
SignalValid | 1 | 0 未确认有效 A/B 信号或已检测到异常;1 已观察到符合正交相序的有效计数,且未检测到信号丢失。外设初始化成功不能直接置 1;轴静止时没有新脉冲本身不构成丢失 |
IndexSeen | 1 | ABZ 时表示本次上电观察到 Z;AB+PWM 时表示 PWM 绝对角参考当前有效。单次 Z 或 PWM 外设初始化本身都不等于闭环参考有效 |
CalibrationValid | 1 | 0 无可用的方向/电角度偏移标定;1 RAM 中有与当前 SENSOR_SOURCE、ABZ_COUNTS_PER_REV、POLE_PAIRS、REVERSE_DIRECTION 匹配的已验证标定。由 SAVE_PARAM 保存的标定可在重新上电后保持 1 |
ReferenceValid | 1 | 0 当前无可用于编码器闭环的参考;1 当前已取得并验证参考,且标定与信号有效、无索引错误。ABZ 重新上电后须再次见到并验证 Z;保存的标定可在验证后恢复参考,无需每次重新测方向和偏移。AB+PWM 可凭有效 PWM 绝对角参考恢复 |
IndexError | 1 | 0 无已检测到的参考异常;1 ABZ 的 Z 缺失、重复或相邻 Z 间隔不符,或 AB+PWM 的绝对角参考异常。异常锁存到下一次成功标定或设备复位;置 1 时 ReferenceValid 必为 0 |
当前 VECTOR 固件在 SENSOR_SOURCE=SENSORLESS 时返回 RawCount=0、各状态标志=0;切回编码器后重新读取。信号质量要由真实脉冲或有效绝对角参考确认,不能仅依据外设初始化。编码器闭环运行时信号失效或出现索引错误,设备关闭输出并进入 FAULT,GET_FAULT 返回 0x06。RawCount 用于诊断,不直接作为 STATUS.Degree、POSITION 或 MIT 的逻辑零点。
0x5D
ENCODER_CALIBRATE 编码器自动标定
VECTOR · ABZ / AB+PWM
按编码器电气接口标定,不按芯片型号区分。ABZ 使用 A/B 正交增量信号及每圈一次的 Z;AB+PWM 使用 A/B 增量信号及 PWM 绝对角参考,接口由 ParamID 204 选择。具体电平、电源、引脚与 PWM 周期、角度映射以型号资料为准。设备收到用户明确发送的 START 后自行限流转动,测方向和电角度偏移;不要求手动转轴,也不上电自动转动电机。MOTOR_DETECT 的无感 R/L/磁链辨识与本流程互不替代。
START 请求 PAYLOAD · 5字节Action(1)=0 + MaxCalCurrent(4)
QUERY / CANCEL 请求 PAYLOAD · 1字节Action(1)=1 或 2
| 请求字段 | 字节数 | 定义 |
Action | 1 | 0 START;1 QUERY;2 CANCEL。其他值或请求长度错误返回 BAD_PAYLOAD |
MaxCalCurrent | 4 | 仅 START 携带;无符号,单位 0.001 A,0.001 A 至 500.000 A。与 CURRENT.Value / MAX_IQ 使用同一 Iq 幅值约定;必须不超过 MAX_IQ 和型号标定电流上限,否则返回 BAD_PAYLOAD。设备可使用更低电流 |
仅支持编码器的 VECTOR 型号,且 INPUT_SOURCE=HOST、SENSOR_SOURCE=ENCODER、ABZ_COUNTS_PER_REV 与 POLE_PAIRS 有效、State=STOPPED、无故障、供电及母线测量有效时接受 START;不满足条件返回 BAD_STATE,值或报文错误返回 BAD_PAYLOAD,型号未实现返回 BAD_COMMAND。START 是单独的测试通电授权,无需先 UNLOCK;成功立即返回 OK 与 RUNNING 快照,不主动推送最终响应。MOTOR_DETECT 与 ENCODER_CALIBRATE 不能同时运行;运行中另一任务的 START 返回 BUSY。
START / QUERY / CANCEL 成功响应 PAYLOAD · 9字节Result(1) + CalState(1) + Stage(1) + Progress(1) + Error(1) + Applied(1) + Direction(1) + ElectricalOffset(2)
请求被拒绝 PAYLOAD · 1字节Result(1)
| 响应字段 | 字节数 | 定义 |
Result | 1 | 命令执行结果;QUERY 成功读取快照时为 OK,即使标定任务失败。任务结果由 CalState 和 Error 表示 |
CalState | 1 | 0 IDLE;1 RUNNING;2 SUCCESS;3 FAILED;4 CANCELLED。任何状态均可 QUERY;快照保留到下一次成功接受 START 或设备复位,复位后为 IDLE |
Stage | 1 | 0 NONE;1 SIGNAL_CHECK;2 FIND_Z;3 DIRECTION;4 OFFSET;5 APPLY。结束后保留最后阶段 |
Progress | 1 | 0% 至 100%;成功为 100;无法估算时为 255;IDLE 为 0 |
Error | 1 | 0 NONE;1 NO_ABZ_SIGNAL;2 Z_NOT_FOUND;3 INDEX_MISMATCH;4 DIRECTION_FAILED;5 OFFSET_FAILED;6 PROTECTION;7 TIMEOUT;8 LINK_TIMEOUT;9 USER_CANCEL;10 INVALID_RESULT。保护详情用 GET_FAULT 查询 |
Applied | 1 | 仅 SUCCESS 为 1,表示方向和偏移已原子应用于 RAM 且本次编码器参考有效;其余为 0。不表示已保存到 Flash |
Direction | 1 | 有符号,成功时 +1:RawCount 增加对应正向机械旋转;−1:RawCount 减少对应正向机械旋转。正方向已考虑 REVERSE_DIRECTION;其他状态为 0 |
ElectricalOffset | 2 | 无符号,单位 0.1° 电角度;成功时 0.0° 至 359.9°,定义为 Z 或 PWM 绝对角参考点对应的电角度偏移;其他状态为 0 |
START 接受后先将 ReferenceValid 置 0,测试电流受 MaxCalCurrent、MAX_IQ 和硬件限制;设备按型号限制转速、转动距离和总时长。ABZ 需确认 A/B 有效并验证至少一组相邻 Z 的每圈计数;AB+PWM 需验证 PWM 绝对角参考和 A/B 计数。两者都须验证方向和电角度偏移,不能凭外设初始化宣布成功。成功时一次性将标定应用于 RAM,置 CalibrationValid=1、ReferenceValid=1,关闭输出;用既有 SAVE_PARAM 显式保存,未保存的新标定重新上电后不保留。
运行中 STATUS.State=DETECTING、Mode=NONE、Target=0;TARGET、UNLOCK、SET_PARAM、SAVE_PARAM、SET_POSITION_ZERO、Reboot、Enter Boot 返回 BAD_STATE。QUERY 建议每 500 ms 一次;连续 3000 ms 未收到有效 QUERY 则关闭输出,结束为 FAILED / LINK_TIMEOUT;STATUS、SENSOR_STATUS 不续约。总时长上限 120,000 ms,超时为 FAILED / TIMEOUT。重复收到相同 CMD、SEQ、PAYLOAD 的 START 不得重启任务;运行中新的 START 返回 BUSY。
取消:运行中发送 CANCEL 或 LOCK,设备须先关闭输出、取消任务并恢复开始前的标定配置,再返回 OK;快照为 CANCELLED / USER_CANCEL、Applied=0、结果字段为 0。无运行中的标定时新 CANCEL 返回 BAD_STATE,不改变既有结果;同一 CMD、SEQ、PAYLOAD 的超时重发按通用重发规则回放首次响应。失败也关闭输出、恢复开始前的配置,不应用部分结果;本次 ReferenceValid=0。若有可用的旧标定,其 CalibrationValid 可保留,但不得据此跳过重新找 Z。无保护故障时结束为 LOCKED,停稳后为 STOPPED;有保护故障时为 FAULT,均不自动解锁。保护导致的异常优先于取消。
重新上电后,已保存且参数匹配的标定可保持 CalibrationValid=1;ABZ 仍需重新见到并验证 Z,AB+PWM 需重新取得有效 PWM 绝对角参考。在参考建立前禁止编码器闭环;设备不会自动驱动电机找 Z。用户可点击“自动标定”让设备自行转动建立新标定;对已保存的标定,ABZ 也可在无感转动中重新验证 Z 而恢复参考。SET_POSITION_ZERO 仍须在本次上电单独执行,不改变电角度偏移。
接入顺序:设置 SENSOR_INTERFACE、SENSOR_SOURCE=ENCODER、ABZ_COUNTS_PER_REV 和 POLE_PAIRS → 等待 STOPPED → ENCODER_CALIBRATE(START, MaxCalCurrent) → 循环 QUERY → SUCCESS 且 Applied=1 → SENSOR_STATUS 确认 ReferenceValid=1 → SAVE_PARAM(需要掉电保留标定时)→ 按原有 UNLOCK / TARGET 流程控制。
0x5E
FACTORY_RESET_MOTOR 恢复电机参数出厂值
VECTOR · 已实现
请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 1字节Result(1)
仅 State=STOPPED、无故障、输出关闭且电机已停稳时执行;否则返回 BAD_STATE。清除已保存的电机控制配置、编码器接口及标定、位置运动限制和 MIT_KT_OVERRIDE,并写入该型号的电机默认配置;当前固件将 SENSOR_SOURCE 设回无感、编码器接口设回 ABZ、每圈计数设回 4096。STOP_CONFIRM_MS、TARGET_TIMEOUT_MS 等业务超时参数保持原值。成功后保持输出关闭,编码器参考和位置零点均无效;写入或校验失败返回 IO_ERROR。
0x5F
MIT_STATUS 读取 MIT 连续反馈
VECTOR · 功能修订 ≥7
请求 PAYLOAD · 0字节空
成功响应 PAYLOAD · 33字节Result(1) + Position(4) + Velocity(4) + EstimatedTorque(4) + IqCommand(4) + Kt(4) + PeriodUs(4) + LateCycles(4) + Flags(4)
| 字段 | 字节数 | 编码及含义 |
Position | 4 | 有符号,1 µrad;相对本次 SET_POSITION_ZERO 累计的电机轴机械位置。0x80000000 表示反馈不可用;跨圈连续,不等同 STATUS.Degree |
Velocity | 4 | 有符号,0.001 rad/s;电机轴机械角速度。0x80000000 表示不可用 |
EstimatedTorque | 4 | 有符号,0.001 Nm;由测得的 Iq 与 Kt 估算,0x80000000 表示不可用;不是外部转矩传感器读数 |
IqCommand | 4 | 有符号,0.001 A;MIT 回路经过电流限幅后的 Iq 指令,非母线电流;无运行中的 MIT 指令时通常为 0 |
Kt | 4 | 无符号,1 µNm/A;当前使用的转矩常数,0xFFFFFFFF 表示不可用;与 ParamID 155 相同单位 |
PeriodUs | 4 | 无符号,1 µs;最近一次 MIT 控制线程循环周期,目标约 1000 µs |
LateCycles | 4 | 无符号;本次上电 MIT 运行期间周期超过 2000 µs 的累计次数,用于诊断调度延迟 |
Flags | 4 | 无符号位标志;位 0 ACTIVE、位 1 REFERENCE、位 2 ZERO、位 3 SATURATED、位 4 MANUAL_KT、位 5 CONTINUOUS;高位预留,忽略未知位 |
ACTIVE 表示 MIT 控制正在运行;REFERENCE 表示本次上电的编码器参考有效;ZERO 表示本次位置零点已建立;SATURATED 表示所需 Iq 超出电机电流上下限并已限幅;MANUAL_KT 表示 ParamID 154 的覆盖值正在生效;CONTINUOUS 表示支持跨圈连续位置。读 MIT_STATUS 不刷新 TARGET_TIMEOUT_MS,也不会启动电机。旧固件不实现时返回 BAD_COMMAND。
电调专用 Result:0x80 UNSUPPORTED_MODE 仅用于 TARGET,表示 Mode 已定义但本设备未实现。其他结果码沿用通用协议。
05 参数定义
ParamID 使用十进制编号 1 至 255,报文中占 1 字节;0 无效。每个 ParamID 的 Value 长度和数值编码由下表确定;多字节整数为小端,有符号值用二进制补码。已实现的参数可通过 GET_PARAM 读取;除明确标注“只读”外,可在 LOCKED 或 STOPPED 状态通过 SET_PARAM 修改,部分配置项仅允许 STOPPED。修改先在 RAM 生效,SAVE_PARAM 才持久化;出厂值与可设上限不得越过型号硬件范围。
按用途展开下列参数组。参数名、ParamID 与报文编码不受页面分组影响。
基础与控制 ParamID 1–4、12–13
| ParamID | 参数 | 适用 | 长度 | 单位 / 编码 | 定义 |
1 | POLE_PAIRS | 通用 | 1字节 | 无符号;极对数 | 1 至 100 极对;机械 RPM = eRPM ÷ 极对数 |
2 | REVERSE_DIRECTION | 通用 | 1字节 | 无符号;0 或 1 | 反转电机轴的正方向定义;所有有符号目标与测量的方向一致翻转 |
3 | INPUT_SOURCE | 通用 | 1字节 | 无符号;枚举 | 0 HOST(本协议 TARGET);1 PWM;2 ADC;3 DSHOT。设备不支持的来源返回 BAD_PAYLOAD |
4 | INPUT_CONTROL_MODE | 通用 | 1字节 | 无符号;Mode | 外部输入所控制的模式:1 DUTY;2 CURRENT;3 SPEED。仅 INPUT_SOURCE 非 HOST 时使用;模式受设备能力限制 |
12 | STOP_CONFIRM_MS | 通用 | 2字节 | 无符号;1 ms | 转速满足停稳阈值后须连续保持的时间,100 ms 至 5,000 ms;默认 250 ms |
13 | TARGET_TIMEOUT_MS | 通用 | 2字节 | 无符号;1 ms | HOST 模式运行中相邻有效 TARGET 的最大间隔,100 ms 至 10,000 ms;默认 3,000 ms |
输入校准 ParamID 5–9、14–16
| ParamID | 参数 | 适用 | 长度 | 单位 / 编码 | 定义 |
5 | PWM_MIN_US | 通用 | 2字节 | 无符号;1 µs | PWM 有效输入下限,500 µs 至 2,500 µs;须小于 PWM_MAX_US |
6 | PWM_MAX_US | 通用 | 2字节 | 无符号;1 µs | PWM 有效输入上限,500 µs 至 2,500 µs;须大于 PWM_MIN_US |
7 | ADC_MIN_MV | 通用 | 2字节 | 无符号;1 mV | 模拟输入下限,0 mV 至 3,000 mV;须小于 ADC_MAX_MV |
8 | ADC_MAX_MV | 通用 | 2字节 | 无符号;1 mV | 模拟输入上限,0 mV 至 3,000 mV;须大于 ADC_MIN_MV |
9 | INPUT_NEUTRAL_MS | 通用 | 2字节 | 无符号;1 ms | 外部输入解锁前有效零目标须连续保持的时间,100 ms 至 5,000 ms;默认 250 ms |
14 | PWM_MID_US | 通用 | 2字节 | 无符号;1 µs | PWM 零目标中点,须大于 PWM_MIN_US 且小于 PWM_MAX_US;默认 1,500 µs |
15 | ADC_MID_MV | 通用 | 2字节 | 无符号;1 mV | ADC 零目标中点,须大于 ADC_MIN_MV 且小于 ADC_MAX_MV;默认 1,500 mV |
16 | INPUT_DEADBAND | 通用 | 1字节 | 无符号;0.1% 全量程 | PWM / ADC 中点两侧各自的零目标死区宽度,0.0% 至 10.0%;默认 2.0%;死区边界须分别落在 MIN 与 MAX 之间 |
输出限制与保护 ParamID 10–11、17、20–41
| ParamID | 参数 | 适用 | 长度 | 单位 / 编码 | 定义 |
10 | MAX_DUTY | 通用 | 2字节 | 无符号;0.1% | 调制比例绝对值上限,0.1% 至 100.0% |
11 | MAX_SPEED | 通用 | 4字节 | 无符号;1 eRPM | 电气转速目标绝对值上限,1 eRPM 至 200,000 eRPM;不支持 SPEED 的型号可不实现 |
17 | DUTY_SLEW_RATE | 通用 | 1字节 | 无符号;0.1%/ms | DUTY 模式的实际调制比例最大变化速率,0 表示不另行限制;1 至 100 表示每毫秒最多变化 0.1% 至 10.0%;默认 0。作用于 HOST 与外部输入,跨越零点时同样生效,不改变 STATUS.Target;零目标、LOCK 与故障关断须立即关闭输出,不受此速率限制 |
20 | MAX_BUS_CURRENT | 通用 | 4字节 | 无符号;0.001 A | 直流母线取电上限,0.001 A 至 500.000 A |
21 | MAX_REGEN_CURRENT | 通用 | 4字节 | 无符号;0.001 A | 回馈到母线的电流绝对值上限,0.000 A 至 500.000 A;0 表示不允许主动回馈 |
30 | MIN_BUS_VOLTAGE | 通用 | 2字节 | 无符号;0.1 V | 欠压保护阈值,0.0 V 至 300.0 V,须小于过压阈值 |
31 | MAX_BUS_VOLTAGE | 通用 | 2字节 | 无符号;0.1 V | 过压保护阈值,0.0 V 至 300.0 V,须大于欠压阈值 |
40 | ESC_TEMP_LIMIT | 通用 | 2字节 | 有符号;0.1 °C | 电调过温阈值,不得高于硬件允许值 |
41 | MOTOR_TEMP_LIMIT | 通用 | 2字节 | 有符号;0.1 °C | 有电机温度传感器时实现;传感器缺失的型号不实现 |
PULSE 方波专用 ParamID 100–102
| ParamID | 参数 | 适用 | 长度 | 单位 / 编码 | 定义 |
100 | COMMUTATION_ADVANCE | PULSE | 2字节 | 无符号;0.1° 电角度 | 方波换相进角:相对理想换相点提前的电角度,0.0° 至 30.0°;默认 15.0°。与常称的 timing 属同一调校概念,本协议直接传实际电角度,不传档位编号 |
101 | STARTUP_DUTY | PULSE | 2字节 | 无符号;0.1% | 起转阶段的调制比例上限,0.1% 至 MAX_DUTY |
102 | STALL_ERPM | PULSE | 4字节 | 无符号;1 eRPM | 方波失速检测阈值 |
VECTOR FOC 与 MIT ParamID 150–155
| ParamID | 参数 | 适用 | 长度 | 单位 / 编码 | 定义 |
150 | MAX_IQ | VECTOR | 4字节 | 无符号;0.001 A | 电机侧 Iq 目标绝对值上限,0.001 A 至 500.000 A;与 MotorCurrent、CURRENT.Value 采用相同幅值约定,仍受硬件电流保护约束 |
151 | MOTOR_R | VECTOR | 4字节 | 无符号;0.1 mΩ | FOC 校准所得电机相电阻;可根据电机实测值修改 |
152 | MOTOR_L | VECTOR | 4字节 | 无符号;0.01 µH | FOC 校准所得电机相电感;可根据电机实测值修改 |
153 | FLUX_LINKAGE | VECTOR | 4字节 | 无符号;1 µWb | FOC 校准所得磁链;可根据电机实测值修改 |
154 | MIT_KT_OVERRIDE | VECTOR + 编码器 | 4字节 | 无符号;1 µNm/A | MIT 转矩常数覆盖值,0 表示自动估算;非零范围 0.000001 至 100.000000 Nm/A。SET_PARAM 仅改 RAM;SAVE_PARAM 显式保存 |
155 | MIT_KT | VECTOR + 编码器 | 4字节 | 无符号;1 µNm/A | 只读;当前生效的 Kt。非零覆盖值优先,否则按 1.5 × 极对数 × 磁链(Wb)估算;SET_PARAM 返回 BAD_PAYLOAD |
编码器与位置 ParamID 200–204
| ParamID | 参数 | 适用 | 长度 | 单位 / 编码 | 定义 |
200 | POSITION_MAX_SPEED | VECTOR + 编码器 | 4字节 | 无符号;1 eRPM | 位置运动电气转速上限 |
201 | POSITION_MAX_ACCEL | VECTOR + 编码器 | 4字节 | 无符号;1 eRPM/s | 位置运动电气转速变化率上限 |
202 | SENSOR_SOURCE | VECTOR + 编码器 | 1字节 | 无符号;枚举 | 0 SENSORLESS(无感);1 ENCODER(使用 ParamID 204 指定的 ABZ 或 AB+PWM 接口)。默认 0;型号无编码器硬件时写入 1 返回 BAD_PAYLOAD。只在 STOPPED 修改,先写 RAM;由 SAVE_PARAM 显式保存 |
203 | ABZ_COUNTS_PER_REV | VECTOR + 编码器 | 4字节 | 无符号;计数/机械圈 | A/B 四倍频后的计数,4 至 65,536,必须为 4 的倍数;原始 PPR × 4。1024 PPR 配为 4096。AB+PWM 接口固定 1024;只在 STOPPED 修改,SAVE_PARAM 保存 |
204 | SENSOR_INTERFACE | VECTOR + 编码器 | 1字节 | 无符号;枚举 | 0 ABZ(A/B 增量 + Z 索引);1 AB+PWM(A/B 增量 + PWM 绝对角参考)。当前 VECTOR 固件的 AB+PWM 接口强制 1024 计数/圈;切换接口撤销旧标定与位置零点,需重新确认参考并标定。SET_PARAM 先改 RAM,SAVE_PARAM 保存 |
当前 VECTOR 固件中,POLE_PAIRS、REVERSE_DIRECTION、ABZ_COUNTS_PER_REV 或 SENSOR_INTERFACE 的有效值发生变化时,旧标定、参考与位置零点失效;同值重写不作失效处理。SENSOR_SOURCE 在同一次上电中切到无感再切回编码器,可保留已验证且仍有效的原参考;在无感模式下 SENSOR_STATUS 不报告该参考。保存的标定与接口、计数、极对数、方向绑定;重新上电需重新取得参考。旧固件不支持新增 ParamID 时返回 BAD_PAYLOAD。
INPUT_SOURCE=HOST 时通过 TARGET 控制。选择 PWM、ADC 或 DSHOT 后,UNLOCK 仍须等待 STOPPED,且输入须连续 INPUT_NEUTRAL_MS 保持有效零目标;解锁后新收到的非零目标才可驱动,按 INPUT_CONTROL_MODE 产生目标,不再用 TARGET 续约。PWM、ADC 的 MIN 对应最大反向目标、MAX 对应最大正向目标;MID 为零目标中点,INPUT_DEADBAND 定义中点两侧各自占全量程的零目标区间,区间两侧分别线性映射到反向和正向目标。DSHOT 的零油门为零目标,有效非零油门映射为正向目标;反向需由具体型号另行定义,不属于本版通用 DSHOT 映射。
外部输入解锁后,PWM / DSHOT 连续 100 ms 未收到有效帧,或 ADC 测量无效、超出型号允许电气范围时,立即关闭输出,进入 FAULT,GET_FAULT 返回 0x08;输入恢复后仍须 CLEAR_FAULT、等待 STOPPED 并重新 UNLOCK,不自动恢复驱动。ADC 无法仅凭位于正常范围的电压识别断线,型号硬件须提供断线检测或确保断线时落在无效区,不得把断线当作非零目标。各型号的引脚、供电、采样和信号电气要求由型号资料给出;不支持的输入来源或控制模式返回 BAD_PAYLOAD。
ParamID 分段:1 至 99 通用;100 至 149 PULSE 专用;150 至 199 VECTOR 专用;200 至 255 其他扩展,当前 200 至 204 用于带编码器的 VECTOR 型号。表中“通用”表示编号可跨驱动技术使用,不保证各型号全部实现。当前 vector-fw-vesc 仅实现 HOST 输入,ParamID 3 只能为 0;页面中的 PWM、ADC、DSHOT 参数保留为协议定义,当前固件未实现时 GET_PARAM / SET_PARAM 返回 BAD_PAYLOAD。