motors
上游未提供说明。
motors/MI/mi.cpp:340.2.0+d8ebbce805b253 / 98 个公开 API 符号没有说明。
上游未提供说明。
motors/MI/mi.cpp:34小米 CyberGear 电机驱动对象 注册到某条 CAN 总线的反馈映射表 解析 Type 2 反馈报文,展开多圈连续角度 打包并发送 MIT 控制指令(Type 1) 发送使能 / 失能 / 归零指令 提供参数读写接口(Type 17 / 18) 负责: 电机上电后默认处于 MIT 运控模式 角度对外统一使用 deg,速度使用 rpm,力矩使用 Nm MIT 接口的 v_ref 使用 deg/s(MIT 语义下的速度前馈,非普通转速指令) 当前库约定:
motors/MI/mi.hpp:55上游未提供说明。
motors/MI/mi.cpp:43CyberGear 电机配置
motors/MI/mi.hpp:100上游未提供说明。
motors/MI/mi.hpp:268
void MI_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
MI FIFO0 中断回调包装 如果项目没有统一 CAN 分发器,可直接使用此 HAL 包装; 否则推荐统一把报文分发到 CANBaseReceiveCallback()。
motors/MI/mi.hpp:297
void MI_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
MI FIFO1 中断回调包装 如果项目没有统一 CAN 分发器,可直接使用此 HAL 包装; 否则推荐统一把报文分发到 CANBaseReceiveCallback()。
motors/MI/mi.hpp:304
void motors::MIMotor::CANBaseReceiveCallback (const CAN_HandleTypeDef *hcan, const CAN_RxHeaderTypeDef *header, const uint8_t *data)
统一 CAN 接收入口 如果项目里已有 CAN 分发器,推荐注册到分发器中; 否则可在 HAL FIFO 回调里直接调用。
motors/MI/mi.hpp:227
void motors::MIMotor::CAN_FilterInit (CAN_HandleTypeDef *hcan, uint32_t filter_bank)
初始化 CyberGear 反馈对应的 CAN 滤波器 接收所有扩展帧,由软件层按 Type 和 ID 分发。
motors/MI/mi.hpp:220
motors::MIMotor::MIMotor (const Config &cfg)
上游未提供说明。
motors/MI/mi.hpp:111
void motors::MIMotor::decode (const uint8_t data[8], uint16_t fault, RunState run_state)
解码 Type 2 反馈帧
motors/MI/mi.hpp:242
controllers::ControlMode motors::MIMotor::defaultControlMode () const override
上游未提供说明。
motors/MI/mi.hpp:123
bool motors::MIMotor::disable (bool clear_fault=false)
发送失能报文(Type 4) clear_fault 是否同时清除故障 是否发送成功
motors/MI/mi.hpp:166
bool motors::MIMotor::enable ()
发送使能报文(Type 3) 是否发送成功
motors/MI/mi.hpp:160
uint16_t motors::MIMotor::fault () const
上游未提供说明。
motors/MI/mi.hpp:206
float motors::MIMotor::getAngle () const override
上游未提供说明。
motors/MI/mi.hpp:116
float motors::MIMotor::getVelocity () const override
上游未提供说明。
motors/MI/mi.hpp:117
bool motors::MIMotor::isConnected () const override
上游未提供说明。
motors/MI/mi.hpp:119
void motors::MIMotor::ping ()
心跳保活 未使能时用失能包代替心跳,维持通信但不使能电机。
motors/MI/mi.hpp:178
bool motors::MIMotor::readParam (uint16_t index, float &value)
读取电机内部参数(Type 17) index 参数索引号 value [out] 读回的 float 值 是否发送成功
motors/MI/mi.hpp:192
void motors::MIMotor::releaseController (controllers::IController *ctrl) override
上游未提供说明。
motors/MI/mi.hpp:211
void motors::MIMotor::resetAngle () override
上游未提供说明。
motors/MI/mi.hpp:118
RunState motors::MIMotor::runState () const
上游未提供说明。
motors/MI/mi.hpp:205
bool motors::MIMotor::sendEnableDisable (uint8_t comm_type, uint8_t data0)
发送使能 / 失能 / 归零内部实现
motors/MI/mi.hpp:254
void motors::MIMotor::setCurrent (float current) override
低层力矩输入 current 力矩,单位 Nm 在 MIT 模式下退化为纯力矩控制:发包时 Kp=Kd=0,仅写入力矩前馈。
motors/MI/mi.hpp:135
void motors::MIMotor::setInternalMIT (float t_ff, float p_ref, float v_ref, float kp, float kd) override
发送 MIT 控制指令(Type 1) 一次将位置、速度、力矩、刚度、阻尼打包下发。 注意这里的 v_ref 不是普通速度模式下的目标转速,而是 MIT 五元组里的速度前馈项, 通常与 p_ref 配套使用,可理解为位置参考的导数。因此单位采用 deg/s 而非 rpm。 t_ff 前馈力矩,单位 Nm,范围 -12 ~ +12 p_ref 位置参考,单位 deg v_ref 速度参考,单位 deg/s(MIT 语义下的速度前馈) kp 刚度,范围 0.0 ~ 500.0 kd 阻尼,范围 0.0 ~ 5.0
motors/MI/mi.hpp:152
bool motors::MIMotor::setMechanicalZero ()
设置当前角度为机械零位(Type 6,掉电丢失) 是否发送成功
motors/MI/mi.hpp:171
bool motors::MIMotor::supportsCurrent () const override
上游未提供说明。
motors/MI/mi.hpp:128
bool motors::MIMotor::supportsInternalMIT () const override
上游未提供说明。
motors/MI/mi.hpp:137
float motors::MIMotor::temperature () const
上游未提供说明。
motors/MI/mi.hpp:203
float motors::MIMotor::torque () const
上游未提供说明。
motors/MI/mi.hpp:204
bool motors::MIMotor::tryAcquireController (controllers::IController *ctrl) override
上游未提供说明。
motors/MI/mi.hpp:210
CAN_TxHeaderTypeDef motors::MIMotor::tx_header (uint8_t comm_type, uint16_t data_area2) const
生成发送报文头 comm_type 通信类型(bit28~24) data_area2 数据区2(bit23~8)
motors/MI/mi.hpp:249
bool motors::MIMotor::writeParam (uint16_t index, float value)
写入电机内部参数(Type 18,掉电丢失) index 参数索引号 value 写入的 float 值 是否发送成功
motors/MI/mi.hpp:199
motors::MIMotor::~MIMotor () override
上游未提供说明。
motors/MI/mi.hpp:112
void motors::MI_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
上游未提供说明。
motors/MI/mi.cpp:502
void motors::MI_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
上游未提供说明。
motors/MI/mi.cpp:517
static FeedbackMap * motors::find_map (const CAN_HandleTypeDef *hcan)
上游未提供说明。
motors/MI/mi.cpp:51
static uint16_t motors::kd_to_raw (float kd)
上游未提供说明。
motors/MI/mi.cpp:194
static uint16_t motors::kp_to_raw (float kp)
上游未提供说明。
motors/MI/mi.cpp:187
static uint16_t motors::pos_deg_to_raw (float deg)
上游未提供说明。
motors/MI/mi.cpp:154
static float motors::pos_raw_to_deg (uint16_t raw)
上游未提供说明。
motors/MI/mi.cpp:148
static uint16_t motors::read_u16_be (const uint8_t *src)
上游未提供说明。
motors/MI/mi.cpp:107
static uint16_t motors::read_u16_le (const uint8_t *src)
上游未提供说明。
motors/MI/mi.cpp:112
static bool motors::register_motor (CAN_HandleTypeDef *hcan, const size_t id, MIMotor *motor)
上游未提供说明。
motors/MI/mi.cpp:61
static uint16_t motors::tor_nm_to_raw (float nm)
上游未提供说明。
motors/MI/mi.cpp:180
static float motors::tor_raw_to_nm (uint16_t raw)
上游未提供说明。
motors/MI/mi.cpp:174
static bool motors::unregister_motor (CAN_HandleTypeDef *hcan, const size_t id)
上游未提供说明。
motors/MI/mi.cpp:85
static float motors::vel_raw_to_rps (uint16_t raw)
上游未提供说明。
motors/MI/mi.cpp:161
static uint16_t motors::vel_rps_to_raw (float rps)
上游未提供说明。
motors/MI/mi.cpp:167
static void motors::write_float_le (uint8_t *dst, float val)
上游未提供说明。
motors/MI/mi.cpp:123
static void motors::write_u16_be (uint8_t *dst, uint16_t val)
上游未提供说明。
motors/MI/mi.cpp:117故障标志位(bit16~21 of Extended ID)
FaultHallEncoder = 1 << 4FaultMagEncoder = 1 << 3FaultNone = 0FaultNotCalibrated = 1 << 5FaultOverCurrent = 1 << 1FaultOverTemp = 1 << 2FaultUnderVoltage = 1 << 0CyberGear 运控模式 对应驱动器内部 run_mode 参数(index 0x7005)。
Cur = 3MIT = 0Pos = 1Vel = 2反馈状态码 从反馈帧 Extended ID 的 bit22~23 提取。
Cali = 1Reset = 0Run = 2
CAN_HandleTypeDef* motors::FeedbackMap::hcan
上游未提供说明。
motors/MI/mi.cpp:45
FixedPointerMap<size_t, MIMotor, MOTORS_MI_MAX_NUM> motors::FeedbackMap::motors
上游未提供说明。
motors/MI/mi.cpp:46
bool motors::MIMotor::Config::auto_zero
上电收到足够稳定反馈后,是否自动把当前角度设为零点
motors/MI/mi.hpp:106
CAN_HandleTypeDef* motors::MIMotor::Config::hcan
所在 CAN 总线
motors/MI/mi.hpp:102
uint8_t motors::MIMotor::Config::id
电机 CAN ID,范围 0~127,出厂默认 127
motors/MI/mi.hpp:103
uint8_t motors::MIMotor::Config::master_id
主机 CAN ID,默认 0
motors/MI/mi.hpp:104
float motors::MIMotor::Config::reduction_rate
外接减速比
motors/MI/mi.hpp:108
bool motors::MIMotor::Config::reverse
是否把输出方向整体反向
motors/MI/mi.hpp:107
float motors::MIMotor::Feedback::angle
电机当前位置(单圈范围内),单位 deg
motors/MI/mi.hpp:270
uint16_t motors::MIMotor::Feedback::fault
上游未提供说明。
motors/MI/mi.hpp:275
int32_t motors::MIMotor::Feedback::round_cnt
跨圈累计,用于展开成连续角度
motors/MI/mi.hpp:277
RunState motors::MIMotor::Feedback::run_state
上游未提供说明。
motors/MI/mi.hpp:274
float motors::MIMotor::Feedback::temperature
电机温度,单位 degC
motors/MI/mi.hpp:273
float motors::MIMotor::Feedback::torque
反馈力矩,单位 Nm
motors/MI/mi.hpp:272
float motors::MIMotor::Feedback::velocity
电机侧速度,单位 rpm
motors/MI/mi.hpp:271
float motors::MIMotor::abs_angle_
输出轴绝对角度,单位 deg
motors/MI/mi.hpp:281
float motors::MIMotor::angle_zero_
零点角度,单位 deg
motors/MI/mi.hpp:280
Config motors::MIMotor::cfg_
上游未提供说明。
motors/MI/mi.hpp:256
bool motors::MIMotor::enabled_
是否已发送使能报文
motors/MI/mi.hpp:258
struct motors::MIMotor::Feedback motors::MIMotor::feedback_
上游未提供说明。
motors/MI/mi.hpp:278
uint32_t motors::MIMotor::feedback_count_
反馈计数,用于上电自动归零
motors/MI/mi.hpp:266
float motors::MIMotor::inv_reduction_rate_
外接减速比倒数
motors/MI/mi.hpp:283
float motors::MIMotor::kKdMax
Kd 量程
motors/MI/mi.hpp:236
float motors::MIMotor::kKpMax
Kp 量程
motors/MI/mi.hpp:235
float motors::MIMotor::kPosMaxRad
位置量程,单位 rad(对应 P_MIN=-12.5, P_MAX=12.5)
motors/MI/mi.hpp:232
float motors::MIMotor::kTorqueMax
力矩量程,单位 Nm
motors/MI/mi.hpp:234
float motors::MIMotor::kVelMaxRps
速度量程,单位 rad/s
motors/MI/mi.hpp:233
uint16_t motors::MIMotor::param_read_index_
上游未提供说明。
motors/MI/mi.hpp:262
volatile bool motors::MIMotor::param_read_pending_
上游未提供说明。
motors/MI/mi.hpp:260
volatile bool motors::MIMotor::param_read_valid_
上游未提供说明。
motors/MI/mi.hpp:261
float motors::MIMotor::param_read_value_
上游未提供说明。
motors/MI/mi.hpp:263
float motors::MIMotor::sign_
方向符号,正转为 1,反转为 -1
motors/MI/mi.hpp:284
float motors::MIMotor::velocity_
输出轴速度,单位 rpm
motors/MI/mi.hpp:282
service::Watchdog motors::MIMotor::watchdog_
上游未提供说明。
motors/MI/mi.hpp:265
float motors::kPosHalfDeg
上游未提供说明。
motors/MI/mi.cpp:39
std::array<FeedbackMap, CAN_NUM> motors::map
上游未提供说明。
motors/MI/mi.cpp:49上游未提供说明。
motors/MI/mi.cpp:29上游未提供说明。
motors/MI/mi.hpp:34上游未提供说明。
motors/MI/mi.cpp:30上游未提供说明。
motors/MI/mi.cpp:31上游未提供说明。
motors/MI/mi.cpp:32小米 CyberGear 微电机驱动实现 luoyue 2026-05-11 CAN 扩展帧反馈到电机对象的映射与分发 Type 2 反馈数据到物理量的换算与多圈展开 Type 1 MIT 控制指令的打包与发送 Type 3 / 4 使能失能 Type 6 机械归零 Type 17 / 18 参数读写 这里实现了: 物理量 ↔ 协议 uint16 的换算均采用 ±half_range 映射到 [0, 65535] 的方式, 与 Python 参考实现 pcan_cybergear.py 中的 _float_to_uint / _uint_to_float 保持一致。
motors/MI/mi.cpp小米 CyberGear 微电机驱动封装 luoyue 2026-05-11 CyberGear 使用 CAN 2.0B 扩展帧,默认波特率 1 Mbps。 电机上电后默认进入运控模式(MIT),通过 Type 1 帧下发位置/速度/力矩/Kp/Kd。 bit28~24 = 通信类型(5 bits) bit23~8 = 数据区2(16 bits) bit7~0 = 电机 CAN ID(8 bits,出厂默认 127) 通信协议概要(扩展帧 ID 29-bit 布局): Type 1:MIT 运控指令,data2 承载力矩,data1 承载位置/速度/Kp/Kd Type 2:电机反馈(角度 / 速度 / 力矩 / 温度),data2 承载状态与故障 Type 3:使能 Type 4:失能 Type 6:设置机械零位(掉电丢失) Type 17 / 18:参数读写 通信类型: 参考 DM 驱动的封装风格:反馈通过 FixedPointerMap 分发到具体电机对象, 控制指令由电机对象自行打包发送。控制权通过 tryAcquireController / releaseController 管理,获取控制权时自动使能电机。
motors/MI/mi.hpp