motors
上游未提供说明。
motors/DM/dm.cpp:260.1.0+d8ebbce805b235 / 88 个公开 API 符号没有说明。
上游未提供说明。
motors/DM/dm.cpp:26达妙(DM)电机驱动对象 MIT 内部位置 内部速度 DM 驱动支持多种控制模式: 这类驱动对参数量程比较敏感,因此配置中的量程必须和上位机设定一致, 否则反馈换算和指令打包都会出错。 master_id 所有 DM 电机共享同一个 id0 0x09 ~ 0x0F 建议使用,以便避开 DJI 的标准 ID 区间 当前库对 DM 还额外有两个明确约束:
motors/DM/dm.hpp:34达妙电机配置
motors/DM/dm.hpp:85上游未提供说明。
motors/DM/dm.cpp:39
void DM_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
DM FIFO0 中断回调包装 CANBaseReceiveCallback() 如果项目没有统一 CAN 分发器,可以直接使用这个 HAL 包装;否则更推荐统一把报文分发到。
motors/DM/dm.hpp:305
void DM_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
DM FIFO1 中断回调包装 CANBaseReceiveCallback() 如果项目没有统一 CAN 分发器,可以直接使用这个 HAL 包装;否则更推荐统一把报文分发到。
motors/DM/dm.hpp:312
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:212
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:205
motors::DMMotor::DMMotor (const Config &cfg)
上游未提供说明。
motors/DM/dm.hpp:102
void motors::DMMotor::decode (const uint8_t data[8])
解码一帧 DM 反馈
motors/DM/dm.hpp:143
controllers::ControlMode motors::DMMotor::defaultControlMode () const override
上游未提供说明。
motors/DM/dm.hpp:125
void motors::DMMotor::disable ()
发送失能报文 是否发送成功
motors/DM/dm.hpp:234
bool motors::DMMotor::enable ()
发送使能报文 是否发送成功
motors/DM/dm.hpp:229
float motors::DMMotor::getAngle () const override
获取输出轴角度 角度,单位 deg
motors/DM/dm.hpp:109
float motors::DMMotor::getTorque () const
获取反馈力矩 力矩,单位 Nm
motors/DM/dm.hpp:119
float motors::DMMotor::getVelocity () const override
获取输出轴角速度 速度;DM 对外接口单位按库约定使用 rpm
motors/DM/dm.hpp:114
InternalPositionSupportLevel motors::DMMotor::internalPositionSupportLevel () const override
上游未提供说明。
motors/DM/dm.hpp:169
InternalVelocitySupportLevel motors::DMMotor::internalVelocitySupportLevel () const override
上游未提供说明。
motors/DM/dm.hpp:156
bool motors::DMMotor::isConnected () const override
上游未提供说明。
motors/DM/dm.hpp:145
void motors::DMMotor::ping () const
上游未提供说明。
motors/DM/dm.hpp:239
void motors::DMMotor::releaseController (controllers::IController *ctrl) override
释放控制权
motors/DM/dm.hpp:223
void motors::DMMotor::resetAngle () override
把当前输出角度设置为零点
motors/DM/dm.hpp:123
void motors::DMMotor::sendDisableFrame () const
上游未提供说明。
motors/DM/dm.hpp:237
void motors::DMMotor::sendEnableFrame () const
上游未提供说明。
motors/DM/dm.hpp:236
void motors::DMMotor::setCurrent (float current) override
低层输出接口 设置低层输出 当 DM 运行在 MIT 模式时,这个接口会把 MIT 退化为力矩输入使用。 因此这里的入参语义应理解为力矩,单位 Nm。 current 在 DM MIT 模式下,这里按力矩输入处理,单位 Nm
motors/DM/dm.hpp:154
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:197
void motors::DMMotor::setInternalPosition (float pos, float maxv) override
发送内部位置参考 当前位置参考使用 deg;DM 协议内部会换算成 rad。 maxv 单位 rpm,传 kNoLimit 时回退到 cfg_.vel_max_rad。
motors/DM/dm.hpp:180
void motors::DMMotor::setInternalVelocity (float rpm, float maxi) override
发送内部速度参考 库设计上对外统一使用 rpm;DM 驱动内部会把它换算成协议要求的 rad/s。 DM 速度模式协议不支持 maxi,该参数被忽略。
motors/DM/dm.hpp:167
State motors::DMMotor::state () const
最近一次反馈出来的状态码
motors/DM/dm.hpp:253
bool motors::DMMotor::supportsCurrent () const override
上游未提供说明。
motors/DM/dm.hpp:147
bool motors::DMMotor::supportsInternalMIT () const override
上游未提供说明。
motors/DM/dm.hpp:182
bool motors::DMMotor::tryAcquireController (controllers::IController *ctrl) override
获取控制权时,同时尝试使能电机
motors/DM/dm.hpp:219
CAN_TxHeaderTypeDef motors::DMMotor::tx_header (const uint8_t &DLC) const
生成发送报文头 DLC 数据长度
motors/DM/dm.hpp:288
motors::DMMotor::~DMMotor () override
上游未提供说明。
motors/DM/dm.hpp:103
void motors::DM_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
上游未提供说明。
motors/DM/dm.cpp:365
void motors::DM_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
上游未提供说明。
motors/DM/dm.cpp:381
static FeedbackMap * motors::find_map (const CAN_HandleTypeDef *hcan)
上游未提供说明。
motors/DM/dm.cpp:51
static constexpr float motors::get_inv_pos_reduction_rate (const DMMotor::Type type)
上游未提供说明。
motors/DM/dm.cpp:99
static constexpr float motors::get_inv_vel_reduction_rate (const DMMotor::Type type)
上游未提供说明。
motors/DM/dm.cpp:111
uint32_t motors::operator| (const DMMotor::Mode &a, const uint32_t &b)
上游未提供说明。
motors/DM/dm.cpp:30
uint32_t motors::operator| (const uint32_t &b, const DMMotor::Mode &a)
上游未提供说明。
motors/DM/dm.cpp:34
static bool motors::register_motor (CAN_HandleTypeDef *hcan, const size_t id0, DMMotor *motor)
上游未提供说明。
motors/DM/dm.cpp:62
static bool motors::unregister_motor (CAN_HandleTypeDef *hcan, const size_t id0)
上游未提供说明。
motors/DM/dm.cpp:86DM 驱动器内部控制模式 Vel = 0x200 + ID Pos = 0x100 + ID MIT = 0x000 + ID 这里不是 MCU 侧控制器模式,而是驱动器固件当前配置成哪种协议解释方式。 发送时标准帧 ID 为“模式基值 + 电机 ID”:
MIT = 0x000Pos = 0x100Vel = 0x200达妙反馈状态码
Disabled = 0x0UDisconnected = 0xDUEnabled = 0x1UMosOverheating = 0xBUMotorCoilOverheating = 0xCUOverCurrent = 0xAUOverVoltage = 0x8UOverload = 0xEUUnderVoltage = 0x9U已封装的 DM 电机类型
J10010L_2ECJ4310_2ECJ4340_2ECJ8009P_2ECMotorTypeCountS2325_1ECS3519
bool motors::DMMotor::Config::auto_zero
上电收够一段稳定反馈后,是否自动把当前角度设为零点
motors/DM/dm.hpp:97
float motors::DMMotor::Config::default_angle_zero
默认电机零点,理解为零点时电机编码器返回的角度
motors/DM/dm.hpp:95
CAN_HandleTypeDef* motors::DMMotor::Config::hcan
所在 CAN 总线
motors/DM/dm.hpp:87
uint8_t motors::DMMotor::Config::id0
电调 ID,仅低 4 位有效,建议从 0x09 到 0x0F
motors/DM/dm.hpp:88
Mode motors::DMMotor::Config::mode
驱动器控制模式,需要和上位机配置一致
motors/DM/dm.hpp:90
float motors::DMMotor::Config::pos_max_rad
驱动器配置的位置最大值,单位 rad
motors/DM/dm.hpp:91
float motors::DMMotor::Config::reduction_rate
外接减速比
motors/DM/dm.hpp:99
bool motors::DMMotor::Config::reverse
是否反转输出方向
motors/DM/dm.hpp:98
float motors::DMMotor::Config::tor_max
驱动器配置的力矩最大值,单位 Nm
motors/DM/dm.hpp:93
Type motors::DMMotor::Config::type
电机类型
motors/DM/dm.hpp:89
float motors::DMMotor::Config::vel_max_rad
驱动器配置的速度最大值,单位 rad/s
motors/DM/dm.hpp:92
uint8_t motors::DMMotor::DISABLE_MSG[] []
上游未提供说明。
motors/DM/dm.hpp:292
uint8_t motors::DMMotor::ENABLE_MSG[] []
上游未提供说明。
motors/DM/dm.hpp:291
float motors::DMMotor::abs_angle_
输出轴绝对角度,单位 deg
motors/DM/dm.hpp:279
float motors::DMMotor::angle
当前圈内角度,单位 deg
motors/DM/dm.hpp:265
float motors::DMMotor::angle_zero_
零点角度,单位 deg
motors/DM/dm.hpp:275
Config motors::DMMotor::cfg_
构造时保存的配置
motors/DM/dm.hpp:256
int32_t motors::DMMotor::count
圈数累计,用于展开成连续角度
motors/DM/dm.hpp:273
bool motors::DMMotor::enabled_
DM 驱动器是否已发送使能报文 TODO: 这里通过 DM 反馈判定是否真的使能成功
motors/DM/dm.hpp:258
struct motors::DMMotor::@342262255216176330240367347145056362076115211175 motors::DMMotor::feedback_
上游未提供说明。
motors/DM/dm.hpp:274
uint32_t motors::DMMotor::feedback_count_
反馈计数,用于上电自动清零
motors/DM/dm.hpp:261
float motors::DMMotor::inv_reduction_rate_
外接减速比倒数
motors/DM/dm.hpp:276
float motors::DMMotor::pos_max_deg
位置量程上限,单位 deg
motors/DM/dm.hpp:277
float motors::DMMotor::sign_
方向符号,正转为 1,反转为 -1
motors/DM/dm.hpp:282
State motors::DMMotor::state
驱动器状态码
motors/DM/dm.hpp:271
float motors::DMMotor::temp_mos
MOS 温度
motors/DM/dm.hpp:268
float motors::DMMotor::temp_rotor
转子温度
motors/DM/dm.hpp:269
float motors::DMMotor::torque
反馈力矩,单位 Nm
motors/DM/dm.hpp:267
float motors::DMMotor::velocity
电机侧速度,库内统一按 rpm 保存
motors/DM/dm.hpp:266
float motors::DMMotor::velocity_
输出轴速度,库内统一按 rpm 保存
motors/DM/dm.hpp:280
service::Watchdog motors::DMMotor::watchdog_
上游未提供说明。
motors/DM/dm.hpp:262
CAN_HandleTypeDef* motors::FeedbackMap::hcan
上游未提供说明。
motors/DM/dm.cpp:41
FixedPointerMap<size_t, DMMotor, MOTORS_DM_MAX_NUM> motors::FeedbackMap::motors
上游未提供说明。
motors/DM/dm.cpp:42
std::array<FeedbackMap, CAN_NUM> motors::map
上游未提供说明。
motors/DM/dm.cpp:45
uint32_t motors::master_id_
上游未提供说明。
motors/DM/dm.cpp:49上游未提供说明。
motors/DM/dm.cpp:21上游未提供说明。
motors/DM/dm.hpp:13上游未提供说明。
motors/DM/dm.cpp:22上游未提供说明。
motors/DM/dm.cpp:23上游未提供说明。
motors/DM/dm.cpp:24达妙电机驱动实现 syhanjin 2026-02-27 DM 报文到电机对象的映射 反馈数据到物理量的换算 MIT / 位置 / 速度三种模式的指令打包 这里实现了:
motors/DM/dm.cpp达妙电机驱动 syhanjin 2026-02-27
motors/DM/dm.hpp