跳转到内容

MotorDrivers::MIMotor API

文档稀疏
符号
98
已记录
45
修订版本
0.2.0+d8ebbce805b2

53 / 98 个公开 API 符号没有说明。

命名空间

1

1

motors::MIMotor

小米 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

结构体

3

函数

47

MI_CAN_Fifo0ReceiveCallback

                    void MI_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

MI FIFO0 中断回调包装 如果项目没有统一 CAN 分发器,可直接使用此 HAL 包装; 否则推荐统一把报文分发到 CANBaseReceiveCallback()。

motors/MI/mi.hpp:297

MI_CAN_Fifo1ReceiveCallback

                    void MI_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

MI FIFO1 中断回调包装 如果项目没有统一 CAN 分发器,可直接使用此 HAL 包装; 否则推荐统一把报文分发到 CANBaseReceiveCallback()。

motors/MI/mi.hpp:304

motors::MIMotor::CANBaseReceiveCallback

                    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

motors::MIMotor::CAN_FilterInit

                    void motors::MIMotor::CAN_FilterInit (CAN_HandleTypeDef *hcan, uint32_t filter_bank)
                  

初始化 CyberGear 反馈对应的 CAN 滤波器 接收所有扩展帧,由软件层按 Type 和 ID 分发。

motors/MI/mi.hpp:220

motors::MIMotor::MIMotor

                    motors::MIMotor::MIMotor (const Config &cfg)
                  

上游未提供说明。

motors/MI/mi.hpp:111

motors::MIMotor::decode

                    void motors::MIMotor::decode (const uint8_t data[8], uint16_t fault, RunState run_state)
                  

解码 Type 2 反馈帧

motors/MI/mi.hpp:242

motors::MIMotor::defaultControlMode

                    controllers::ControlMode motors::MIMotor::defaultControlMode () const override
                  

上游未提供说明。

motors/MI/mi.hpp:123

motors::MIMotor::disable

                    bool motors::MIMotor::disable (bool clear_fault=false)
                  

发送失能报文(Type 4) clear_fault 是否同时清除故障 是否发送成功

motors/MI/mi.hpp:166

motors::MIMotor::enable

                    bool motors::MIMotor::enable ()
                  

发送使能报文(Type 3) 是否发送成功

motors/MI/mi.hpp:160

motors::MIMotor::fault

                    uint16_t motors::MIMotor::fault () const
                  

上游未提供说明。

motors/MI/mi.hpp:206

motors::MIMotor::getAngle

                    float motors::MIMotor::getAngle () const override
                  

上游未提供说明。

motors/MI/mi.hpp:116

motors::MIMotor::getVelocity

                    float motors::MIMotor::getVelocity () const override
                  

上游未提供说明。

motors/MI/mi.hpp:117

motors::MIMotor::isConnected

                    bool motors::MIMotor::isConnected () const override
                  

上游未提供说明。

motors/MI/mi.hpp:119

motors::MIMotor::ping

                    void motors::MIMotor::ping ()
                  

心跳保活 未使能时用失能包代替心跳,维持通信但不使能电机。

motors/MI/mi.hpp:178

motors::MIMotor::readParam

                    bool motors::MIMotor::readParam (uint16_t index, float &value)
                  

读取电机内部参数(Type 17) index 参数索引号 value [out] 读回的 float 值 是否发送成功

motors/MI/mi.hpp:192

motors::MIMotor::releaseController

                    void motors::MIMotor::releaseController (controllers::IController *ctrl) override
                  

上游未提供说明。

motors/MI/mi.hpp:211

motors::MIMotor::resetAngle

                    void motors::MIMotor::resetAngle () override
                  

上游未提供说明。

motors/MI/mi.hpp:118

motors::MIMotor::runState

                    RunState motors::MIMotor::runState () const
                  

上游未提供说明。

motors/MI/mi.hpp:205

motors::MIMotor::sendEnableDisable

                    bool motors::MIMotor::sendEnableDisable (uint8_t comm_type, uint8_t data0)
                  

发送使能 / 失能 / 归零内部实现

motors/MI/mi.hpp:254

motors::MIMotor::setCurrent

                    void motors::MIMotor::setCurrent (float current) override
                  

低层力矩输入 current 力矩,单位 Nm 在 MIT 模式下退化为纯力矩控制:发包时 Kp=Kd=0,仅写入力矩前馈。

motors/MI/mi.hpp:135

motors::MIMotor::setInternalMIT

                    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

motors::MIMotor::setMechanicalZero

                    bool motors::MIMotor::setMechanicalZero ()
                  

设置当前角度为机械零位(Type 6,掉电丢失) 是否发送成功

motors/MI/mi.hpp:171

motors::MIMotor::supportsCurrent

                    bool motors::MIMotor::supportsCurrent () const override
                  

上游未提供说明。

motors/MI/mi.hpp:128

motors::MIMotor::supportsInternalMIT

                    bool motors::MIMotor::supportsInternalMIT () const override
                  

上游未提供说明。

motors/MI/mi.hpp:137

motors::MIMotor::temperature

                    float motors::MIMotor::temperature () const
                  

上游未提供说明。

motors/MI/mi.hpp:203

motors::MIMotor::torque

                    float motors::MIMotor::torque () const
                  

上游未提供说明。

motors/MI/mi.hpp:204

motors::MIMotor::tryAcquireController

                    bool motors::MIMotor::tryAcquireController (controllers::IController *ctrl) override
                  

上游未提供说明。

motors/MI/mi.hpp:210

motors::MIMotor::tx_header

                    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

motors::MIMotor::writeParam

                    bool motors::MIMotor::writeParam (uint16_t index, float value)
                  

写入电机内部参数(Type 18,掉电丢失) index 参数索引号 value 写入的 float 值 是否发送成功

motors/MI/mi.hpp:199

motors::MIMotor::~MIMotor

                    motors::MIMotor::~MIMotor () override
                  

上游未提供说明。

motors/MI/mi.hpp:112

motors::MI_CAN_Fifo0ReceiveCallback

                    void motors::MI_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

上游未提供说明。

motors/MI/mi.cpp:502

motors::MI_CAN_Fifo1ReceiveCallback

                    void motors::MI_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

上游未提供说明。

motors/MI/mi.cpp:517

motors::find_map

                    static FeedbackMap * motors::find_map (const CAN_HandleTypeDef *hcan)
                  

上游未提供说明。

motors/MI/mi.cpp:51

motors::kd_to_raw

                    static uint16_t motors::kd_to_raw (float kd)
                  

上游未提供说明。

motors/MI/mi.cpp:194

motors::kp_to_raw

                    static uint16_t motors::kp_to_raw (float kp)
                  

上游未提供说明。

motors/MI/mi.cpp:187

motors::pos_deg_to_raw

                    static uint16_t motors::pos_deg_to_raw (float deg)
                  

上游未提供说明。

motors/MI/mi.cpp:154

motors::pos_raw_to_deg

                    static float motors::pos_raw_to_deg (uint16_t raw)
                  

上游未提供说明。

motors/MI/mi.cpp:148

motors::read_u16_be

                    static uint16_t motors::read_u16_be (const uint8_t *src)
                  

上游未提供说明。

motors/MI/mi.cpp:107

motors::read_u16_le

                    static uint16_t motors::read_u16_le (const uint8_t *src)
                  

上游未提供说明。

motors/MI/mi.cpp:112

motors::register_motor

                    static bool motors::register_motor (CAN_HandleTypeDef *hcan, const size_t id, MIMotor *motor)
                  

上游未提供说明。

motors/MI/mi.cpp:61

motors::tor_nm_to_raw

                    static uint16_t motors::tor_nm_to_raw (float nm)
                  

上游未提供说明。

motors/MI/mi.cpp:180

motors::tor_raw_to_nm

                    static float motors::tor_raw_to_nm (uint16_t raw)
                  

上游未提供说明。

motors/MI/mi.cpp:174

motors::unregister_motor

                    static bool motors::unregister_motor (CAN_HandleTypeDef *hcan, const size_t id)
                  

上游未提供说明。

motors/MI/mi.cpp:85

motors::vel_raw_to_rps

                    static float motors::vel_raw_to_rps (uint16_t raw)
                  

上游未提供说明。

motors/MI/mi.cpp:161

motors::vel_rps_to_raw

                    static uint16_t motors::vel_rps_to_raw (float rps)
                  

上游未提供说明。

motors/MI/mi.cpp:167

motors::write_float_le

                    static void motors::write_float_le (uint8_t *dst, float val)
                  

上游未提供说明。

motors/MI/mi.cpp:123

motors::write_u16_be

                    static void motors::write_u16_be (uint8_t *dst, uint16_t val)
                  

上游未提供说明。

motors/MI/mi.cpp:117

枚举

3

motors::MIMotor::Fault

故障标志位(bit16~21 of Extended ID)

FaultHallEncoder = 1 << 4
HALL 编码器故障
FaultMagEncoder = 1 << 3
磁编码器故障
FaultNone = 0
上游未提供说明。
FaultNotCalibrated = 1 << 5
未标定
FaultOverCurrent = 1 << 1
过流
FaultOverTemp = 1 << 2
过温
FaultUnderVoltage = 1 << 0
欠压
motors/MI/mi.hpp:86

motors::MIMotor::Mode

CyberGear 运控模式 对应驱动器内部 run_mode 参数(index 0x7005)。

Cur = 3
电流模式,写入 iq_ref(0x7006)
MIT = 0
运控模式(默认),通过 Type 1 帧下发完整 MIT 指令
Pos = 1
位置模式,写入 loc_ref(0x7016)
Vel = 2
速度模式,写入 spd_ref(0x700A)
motors/MI/mi.hpp:63

motors::MIMotor::RunState

反馈状态码 从反馈帧 Extended ID 的 bit22~23 提取。

Cali = 1
标定状态
Reset = 0
复位状态
Run = 2
运行状态
motors/MI/mi.hpp:76

变量

36

motors::FeedbackMap::hcan

                    CAN_HandleTypeDef* motors::FeedbackMap::hcan
                  

上游未提供说明。

motors/MI/mi.cpp:45

motors::FeedbackMap::motors

                    FixedPointerMap<size_t, MIMotor, MOTORS_MI_MAX_NUM> motors::FeedbackMap::motors
                  

上游未提供说明。

motors/MI/mi.cpp:46

motors::MIMotor::Config::auto_zero

                    bool motors::MIMotor::Config::auto_zero
                  

上电收到足够稳定反馈后,是否自动把当前角度设为零点

motors/MI/mi.hpp:106

motors::MIMotor::Config::hcan

                    CAN_HandleTypeDef* motors::MIMotor::Config::hcan
                  

所在 CAN 总线

motors/MI/mi.hpp:102

motors::MIMotor::Config::id

                    uint8_t motors::MIMotor::Config::id
                  

电机 CAN ID,范围 0~127,出厂默认 127

motors/MI/mi.hpp:103

motors::MIMotor::Config::master_id

                    uint8_t motors::MIMotor::Config::master_id
                  

主机 CAN ID,默认 0

motors/MI/mi.hpp:104

motors::MIMotor::Config::reduction_rate

                    float motors::MIMotor::Config::reduction_rate
                  

外接减速比

motors/MI/mi.hpp:108

motors::MIMotor::Config::reverse

                    bool motors::MIMotor::Config::reverse
                  

是否把输出方向整体反向

motors/MI/mi.hpp:107

motors::MIMotor::Feedback::angle

                    float motors::MIMotor::Feedback::angle
                  

电机当前位置(单圈范围内),单位 deg

motors/MI/mi.hpp:270

motors::MIMotor::Feedback::fault

                    uint16_t motors::MIMotor::Feedback::fault
                  

上游未提供说明。

motors/MI/mi.hpp:275

motors::MIMotor::Feedback::round_cnt

                    int32_t motors::MIMotor::Feedback::round_cnt
                  

跨圈累计,用于展开成连续角度

motors/MI/mi.hpp:277

motors::MIMotor::Feedback::run_state

                    RunState motors::MIMotor::Feedback::run_state
                  

上游未提供说明。

motors/MI/mi.hpp:274

motors::MIMotor::Feedback::temperature

                    float motors::MIMotor::Feedback::temperature
                  

电机温度,单位 degC

motors/MI/mi.hpp:273

motors::MIMotor::Feedback::torque

                    float motors::MIMotor::Feedback::torque
                  

反馈力矩,单位 Nm

motors/MI/mi.hpp:272

motors::MIMotor::Feedback::velocity

                    float motors::MIMotor::Feedback::velocity
                  

电机侧速度,单位 rpm

motors/MI/mi.hpp:271

motors::MIMotor::abs_angle_

                    float motors::MIMotor::abs_angle_
                  

输出轴绝对角度,单位 deg

motors/MI/mi.hpp:281

motors::MIMotor::angle_zero_

                    float motors::MIMotor::angle_zero_
                  

零点角度,单位 deg

motors/MI/mi.hpp:280

motors::MIMotor::enabled_

                    bool motors::MIMotor::enabled_
                  

是否已发送使能报文

motors/MI/mi.hpp:258

motors::MIMotor::feedback_

                    struct motors::MIMotor::Feedback motors::MIMotor::feedback_
                  

上游未提供说明。

motors/MI/mi.hpp:278

motors::MIMotor::feedback_count_

                    uint32_t motors::MIMotor::feedback_count_
                  

反馈计数,用于上电自动归零

motors/MI/mi.hpp:266

motors::MIMotor::inv_reduction_rate_

                    float motors::MIMotor::inv_reduction_rate_
                  

外接减速比倒数

motors/MI/mi.hpp:283

motors::MIMotor::kPosMaxRad

                    float motors::MIMotor::kPosMaxRad
                  

位置量程,单位 rad(对应 P_MIN=-12.5, P_MAX=12.5)

motors/MI/mi.hpp:232

motors::MIMotor::kTorqueMax

                    float motors::MIMotor::kTorqueMax
                  

力矩量程,单位 Nm

motors/MI/mi.hpp:234

motors::MIMotor::kVelMaxRps

                    float motors::MIMotor::kVelMaxRps
                  

速度量程,单位 rad/s

motors/MI/mi.hpp:233

motors::MIMotor::param_read_index_

                    uint16_t motors::MIMotor::param_read_index_
                  

上游未提供说明。

motors/MI/mi.hpp:262

motors::MIMotor::param_read_pending_

                    volatile bool motors::MIMotor::param_read_pending_
                  

上游未提供说明。

motors/MI/mi.hpp:260

motors::MIMotor::param_read_valid_

                    volatile bool motors::MIMotor::param_read_valid_
                  

上游未提供说明。

motors/MI/mi.hpp:261

motors::MIMotor::param_read_value_

                    float motors::MIMotor::param_read_value_
                  

上游未提供说明。

motors/MI/mi.hpp:263

motors::MIMotor::sign_

                    float motors::MIMotor::sign_
                  

方向符号,正转为 1,反转为 -1

motors/MI/mi.hpp:284

motors::MIMotor::velocity_

                    float motors::MIMotor::velocity_
                  

输出轴速度,单位 rpm

motors/MI/mi.hpp:282

motors::MIMotor::watchdog_

                    service::Watchdog motors::MIMotor::watchdog_
                  

上游未提供说明。

motors/MI/mi.hpp:265

motors::map

                    std::array<FeedbackMap, CAN_NUM> motors::map
                  

上游未提供说明。

motors/MI/mi.cpp:49

宏定义

5

文件

2

motors/MI/mi.cpp

小米 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

motors/MI/mi.hpp

小米 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