motors::DMMotor
达妙(DM)电机驱动对象 MIT 内部位置 内部速度 DM 驱动支持多种控制模式: 这类驱动对参数量程比较敏感,因此配置中的量程必须和上位机设定一致, 否则反馈换算和指令打包都会出错。 master_id 所有 DM 电机共享同一个 id0 0x09 ~ 0x0F 建议使用,以便避开 DJI 的标准 ID 区间 当前库对 DM 还额外有两个明确约束:
继承关系
- 基类
IMotor公开
构造与析构
2DMMotor
motors::DMMotor::DMMotor (const Config &cfg)
上游未提供说明。
motors/DM/dm.hpp:102~DMMotor
motors::DMMotor::~DMMotor () override
上游未提供说明。
motors/DM/dm.hpp:103成员函数
26CANBaseReceiveCallback
void motors::DMMotor::CANBaseReceiveCallback (const CAN_HandleTypeDef *hcan, const CAN_RxHeaderTypeDef *header, const uint8_t *data)
DM 的统一 CAN 接收入口 如果项目里已经有统一 CAN 分发器,推荐把它注册到分发器中;否则也可以在 HAL 的 FIFO 回调里直接调用它。
motors/DM/dm.hpp:212CAN_FilterInit
void motors::DMMotor::CAN_FilterInit (CAN_HandleTypeDef *hcan, uint32_t filter_bank, uint32_t master_id)
初始化 DM 反馈的 CAN 滤波器 hcan CAN 句柄 filter_bank 滤波器编号 master_id 本机主控 ID,用于接收属于自己的反馈;当前库要求所有 DM 电机共用同一个值
motors/DM/dm.hpp:205decode
void motors::DMMotor::decode (const uint8_t data[8])
解码一帧 DM 反馈
motors/DM/dm.hpp:143defaultControlMode
controllers::ControlMode motors::DMMotor::defaultControlMode () const override
上游未提供说明。
motors/DM/dm.hpp:125disable
void motors::DMMotor::disable ()
发送失能报文 是否发送成功
motors/DM/dm.hpp:234enable
bool motors::DMMotor::enable ()
发送使能报文 是否发送成功
motors/DM/dm.hpp:229getAngle
float motors::DMMotor::getAngle () const override
获取输出轴角度 角度,单位 deg
motors/DM/dm.hpp:109getTorque
float motors::DMMotor::getTorque () const
获取反馈力矩 力矩,单位 Nm
motors/DM/dm.hpp:119getVelocity
float motors::DMMotor::getVelocity () const override
获取输出轴角速度 速度;DM 对外接口单位按库约定使用 rpm
motors/DM/dm.hpp:114internalPositionSupportLevel
InternalPositionSupportLevel motors::DMMotor::internalPositionSupportLevel () const override
上游未提供说明。
motors/DM/dm.hpp:169internalVelocitySupportLevel
InternalVelocitySupportLevel motors::DMMotor::internalVelocitySupportLevel () const override
上游未提供说明。
motors/DM/dm.hpp:156isConnected
bool motors::DMMotor::isConnected () const override
上游未提供说明。
motors/DM/dm.hpp:145ping
void motors::DMMotor::ping () const
上游未提供说明。
motors/DM/dm.hpp:239releaseController
void motors::DMMotor::releaseController (controllers::IController *ctrl) override
释放控制权
motors/DM/dm.hpp:223resetAngle
void motors::DMMotor::resetAngle () override
把当前输出角度设置为零点
motors/DM/dm.hpp:123sendDisableFrame
void motors::DMMotor::sendDisableFrame () const
上游未提供说明。
motors/DM/dm.hpp:237sendEnableFrame
void motors::DMMotor::sendEnableFrame () const
上游未提供说明。
motors/DM/dm.hpp:236setCurrent
void motors::DMMotor::setCurrent (float current) override
低层输出接口 设置低层输出 当 DM 运行在 MIT 模式时,这个接口会把 MIT 退化为力矩输入使用。 因此这里的入参语义应理解为力矩,单位 Nm。 current 在 DM MIT 模式下,这里按力矩输入处理,单位 Nm
motors/DM/dm.hpp:154setInternalMIT
void motors::DMMotor::setInternalMIT (float t_ff, float p_ref, float v_ref, float kp, float kd) override
发送 MIT 控制指令 MIT 控制指令 p_ref 使用 deg v_ref 使用 deg/s t_ff 使用 Nm 当前实现约定: v_ref p_ref p_ref 这里的不是普通速度模式下的目标转速,而是 MIT 五元组里的速度参考项,通常和配套使用,可理解为的导数。 setInternalMIT() setInternalVelocity() deg + deg/s rad + rad/s 也正因为如此,的单位约定和普通不同:前者当前用这一组量,再在驱动内部换算成协议要求的。 t_ff 前馈力矩 p_ref 位置参考,单位 deg v_ref 速度参考,单位 deg/s kp Kp kd Kd
motors/DM/dm.hpp:197setInternalPosition
void motors::DMMotor::setInternalPosition (float pos, float maxv) override
发送内部位置参考 当前位置参考使用 deg;DM 协议内部会换算成 rad。 maxv 单位 rpm,传 kNoLimit 时回退到 cfg_.vel_max_rad。
motors/DM/dm.hpp:180setInternalVelocity
void motors::DMMotor::setInternalVelocity (float rpm, float maxi) override
发送内部速度参考 库设计上对外统一使用 rpm;DM 驱动内部会把它换算成协议要求的 rad/s。 DM 速度模式协议不支持 maxi,该参数被忽略。
motors/DM/dm.hpp:167state
State motors::DMMotor::state () const
最近一次反馈出来的状态码
motors/DM/dm.hpp:253supportsCurrent
bool motors::DMMotor::supportsCurrent () const override
上游未提供说明。
motors/DM/dm.hpp:147supportsInternalMIT
bool motors::DMMotor::supportsInternalMIT () const override
上游未提供说明。
motors/DM/dm.hpp:182tryAcquireController
bool motors::DMMotor::tryAcquireController (controllers::IController *ctrl) override
获取控制权时,同时尝试使能电机
motors/DM/dm.hpp:219tx_header
CAN_TxHeaderTypeDef motors::DMMotor::tx_header (const uint8_t &DLC) const
生成发送报文头 DLC 数据长度
motors/DM/dm.hpp:288成员变量
20DISABLE_MSG
uint8_t motors::DMMotor::DISABLE_MSG[] []
上游未提供说明。
motors/DM/dm.hpp:292ENABLE_MSG
uint8_t motors::DMMotor::ENABLE_MSG[] []
上游未提供说明。
motors/DM/dm.hpp:291abs_angle_
float motors::DMMotor::abs_angle_
输出轴绝对角度,单位 deg
motors/DM/dm.hpp:279angle
float motors::DMMotor::angle
当前圈内角度,单位 deg
motors/DM/dm.hpp:265angle_zero_
float motors::DMMotor::angle_zero_
零点角度,单位 deg
motors/DM/dm.hpp:275cfg_
Config motors::DMMotor::cfg_
构造时保存的配置
motors/DM/dm.hpp:256count
int32_t motors::DMMotor::count
圈数累计,用于展开成连续角度
motors/DM/dm.hpp:273enabled_
bool motors::DMMotor::enabled_
DM 驱动器是否已发送使能报文 TODO: 这里通过 DM 反馈判定是否真的使能成功
motors/DM/dm.hpp:258feedback_
struct motors::DMMotor::@342262255216176330240367347145056362076115211175 motors::DMMotor::feedback_
上游未提供说明。
motors/DM/dm.hpp:274feedback_count_
uint32_t motors::DMMotor::feedback_count_
反馈计数,用于上电自动清零
motors/DM/dm.hpp:261inv_reduction_rate_
float motors::DMMotor::inv_reduction_rate_
外接减速比倒数
motors/DM/dm.hpp:276pos_max_deg
float motors::DMMotor::pos_max_deg
位置量程上限,单位 deg
motors/DM/dm.hpp:277sign_
float motors::DMMotor::sign_
方向符号,正转为 1,反转为 -1
motors/DM/dm.hpp:282state
State motors::DMMotor::state
驱动器状态码
motors/DM/dm.hpp:271temp_mos
float motors::DMMotor::temp_mos
MOS 温度
motors/DM/dm.hpp:268temp_rotor
float motors::DMMotor::temp_rotor
转子温度
motors/DM/dm.hpp:269torque
float motors::DMMotor::torque
反馈力矩,单位 Nm
motors/DM/dm.hpp:267velocity
float motors::DMMotor::velocity
电机侧速度,库内统一按 rpm 保存
motors/DM/dm.hpp:266velocity_
float motors::DMMotor::velocity_
输出轴速度,库内统一按 rpm 保存
motors/DM/dm.hpp:280watchdog_
service::Watchdog motors::DMMotor::watchdog_
上游未提供说明。
motors/DM/dm.hpp:262嵌套类型
4达妙电机配置
motors/DM/dm.hpp:85Mode
DM 驱动器内部控制模式 Vel = 0x200 + ID Pos = 0x100 + ID MIT = 0x000 + ID 这里不是 MCU 侧控制器模式,而是驱动器固件当前配置成哪种协议解释方式。 发送时标准帧 ID 为“模式基值 + 电机 ID”:
MIT = 0x000- MIT 模式
Pos = 0x100- 内部位置模式
Vel = 0x200- 内部速度模式
State
达妙反馈状态码
Disabled = 0x0U- 上游未提供说明。
Disconnected = 0xDU- 上游未提供说明。
Enabled = 0x1U- 上游未提供说明。
MosOverheating = 0xBU- 上游未提供说明。
MotorCoilOverheating = 0xCU- 上游未提供说明。
OverCurrent = 0xAU- 上游未提供说明。
OverVoltage = 0x8U- 上游未提供说明。
Overload = 0xEU- 上游未提供说明。
UnderVoltage = 0x9U- 上游未提供说明。
Type
已封装的 DM 电机类型
J10010L_2EC- J10010L-2EC.
J4310_2EC- J4310-2EC.
J4340_2EC- J4340-2EC.
J8009P_2EC- J8009P-2EC.
MotorTypeCount- 类型计数,占位用
S2325_1EC- S2325-1EC + 3520-1EC(驱动器).
S3519- S3519.