跳转到内容

MotorDrivers::DM API

文档稀疏
符号
88
已记录
53
修订版本
0.1.0+d8ebbce805b2

35 / 88 个公开 API 符号没有说明。

命名空间

1

1

motors::DMMotor

达妙(DM)电机驱动对象 MIT 内部位置 内部速度 DM 驱动支持多种控制模式: 这类驱动对参数量程比较敏感,因此配置中的量程必须和上位机设定一致, 否则反馈换算和指令打包都会出错。 master_id 所有 DM 电机共享同一个 id0 0x09 ~ 0x0F 建议使用,以便避开 DJI 的标准 ID 区间 当前库对 DM 还额外有两个明确约束:

motors/DM/dm.hpp:34

结构体

2

函数

39

DM_CAN_Fifo0ReceiveCallback

                    void DM_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

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

motors/DM/dm.hpp:305

DM_CAN_Fifo1ReceiveCallback

                    void DM_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

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

motors/DM/dm.hpp:312

motors::DMMotor::CANBaseReceiveCallback

                    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

motors::DMMotor::CAN_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:205

motors::DMMotor::DMMotor

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

上游未提供说明。

motors/DM/dm.hpp:102

motors::DMMotor::decode

                    void motors::DMMotor::decode (const uint8_t data[8])
                  

解码一帧 DM 反馈

motors/DM/dm.hpp:143

motors::DMMotor::defaultControlMode

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

上游未提供说明。

motors/DM/dm.hpp:125

motors::DMMotor::disable

                    void motors::DMMotor::disable ()
                  

发送失能报文 是否发送成功

motors/DM/dm.hpp:234

motors::DMMotor::enable

                    bool motors::DMMotor::enable ()
                  

发送使能报文 是否发送成功

motors/DM/dm.hpp:229

motors::DMMotor::getAngle

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

获取输出轴角度 角度,单位 deg

motors/DM/dm.hpp:109

motors::DMMotor::getTorque

                    float motors::DMMotor::getTorque () const
                  

获取反馈力矩 力矩,单位 Nm

motors/DM/dm.hpp:119

motors::DMMotor::getVelocity

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

获取输出轴角速度 速度;DM 对外接口单位按库约定使用 rpm

motors/DM/dm.hpp:114

motors::DMMotor::internalPositionSupportLevel

                    InternalPositionSupportLevel motors::DMMotor::internalPositionSupportLevel () const override
                  

上游未提供说明。

motors/DM/dm.hpp:169

motors::DMMotor::internalVelocitySupportLevel

                    InternalVelocitySupportLevel motors::DMMotor::internalVelocitySupportLevel () const override
                  

上游未提供说明。

motors/DM/dm.hpp:156

motors::DMMotor::isConnected

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

上游未提供说明。

motors/DM/dm.hpp:145

motors::DMMotor::ping

                    void motors::DMMotor::ping () const
                  

上游未提供说明。

motors/DM/dm.hpp:239

motors::DMMotor::releaseController

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

释放控制权

motors/DM/dm.hpp:223

motors::DMMotor::resetAngle

                    void motors::DMMotor::resetAngle () override
                  

把当前输出角度设置为零点

motors/DM/dm.hpp:123

motors::DMMotor::sendDisableFrame

                    void motors::DMMotor::sendDisableFrame () const
                  

上游未提供说明。

motors/DM/dm.hpp:237

motors::DMMotor::sendEnableFrame

                    void motors::DMMotor::sendEnableFrame () const
                  

上游未提供说明。

motors/DM/dm.hpp:236

motors::DMMotor::setCurrent

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

低层输出接口 设置低层输出 当 DM 运行在 MIT 模式时,这个接口会把 MIT 退化为力矩输入使用。 因此这里的入参语义应理解为力矩,单位 Nm。 current 在 DM MIT 模式下,这里按力矩输入处理,单位 Nm

motors/DM/dm.hpp:154

motors::DMMotor::setInternalMIT

                    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

motors::DMMotor::setInternalPosition

                    void motors::DMMotor::setInternalPosition (float pos, float maxv) override
                  

发送内部位置参考 当前位置参考使用 deg;DM 协议内部会换算成 rad。 maxv 单位 rpm,传 kNoLimit 时回退到 cfg_.vel_max_rad。

motors/DM/dm.hpp:180

motors::DMMotor::setInternalVelocity

                    void motors::DMMotor::setInternalVelocity (float rpm, float maxi) override
                  

发送内部速度参考 库设计上对外统一使用 rpm;DM 驱动内部会把它换算成协议要求的 rad/s。 DM 速度模式协议不支持 maxi,该参数被忽略。

motors/DM/dm.hpp:167

motors::DMMotor::state

                    State motors::DMMotor::state () const
                  

最近一次反馈出来的状态码

motors/DM/dm.hpp:253

motors::DMMotor::supportsCurrent

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

上游未提供说明。

motors/DM/dm.hpp:147

motors::DMMotor::supportsInternalMIT

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

上游未提供说明。

motors/DM/dm.hpp:182

motors::DMMotor::tryAcquireController

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

获取控制权时,同时尝试使能电机

motors/DM/dm.hpp:219

motors::DMMotor::tx_header

                    CAN_TxHeaderTypeDef motors::DMMotor::tx_header (const uint8_t &DLC) const
                  

生成发送报文头 DLC 数据长度

motors/DM/dm.hpp:288

motors::DMMotor::~DMMotor

                    motors::DMMotor::~DMMotor () override
                  

上游未提供说明。

motors/DM/dm.hpp:103

motors::DM_CAN_Fifo0ReceiveCallback

                    void motors::DM_CAN_Fifo0ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

上游未提供说明。

motors/DM/dm.cpp:365

motors::DM_CAN_Fifo1ReceiveCallback

                    void motors::DM_CAN_Fifo1ReceiveCallback (CAN_HandleTypeDef *hcan)
                  

上游未提供说明。

motors/DM/dm.cpp:381

motors::find_map

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

上游未提供说明。

motors/DM/dm.cpp:51

motors::get_inv_pos_reduction_rate

                    static constexpr float motors::get_inv_pos_reduction_rate (const DMMotor::Type type)
                  

上游未提供说明。

motors/DM/dm.cpp:99

motors::get_inv_vel_reduction_rate

                    static constexpr float motors::get_inv_vel_reduction_rate (const DMMotor::Type type)
                  

上游未提供说明。

motors/DM/dm.cpp:111

motors::operator|

                    uint32_t motors::operator| (const DMMotor::Mode &a, const uint32_t &b)
                  

上游未提供说明。

motors/DM/dm.cpp:30

motors::operator|

                    uint32_t motors::operator| (const uint32_t &b, const DMMotor::Mode &a)
                  

上游未提供说明。

motors/DM/dm.cpp:34

motors::register_motor

                    static bool motors::register_motor (CAN_HandleTypeDef *hcan, const size_t id0, DMMotor *motor)
                  

上游未提供说明。

motors/DM/dm.cpp:62

motors::unregister_motor

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

上游未提供说明。

motors/DM/dm.cpp:86

枚举

3

motors::DMMotor::Mode

DM 驱动器内部控制模式 Vel = 0x200 + ID Pos = 0x100 + ID MIT = 0x000 + ID 这里不是 MCU 侧控制器模式,而是驱动器固件当前配置成哪种协议解释方式。 发送时标准帧 ID 为“模式基值 + 电机 ID”:

MIT = 0x000
MIT 模式
Pos = 0x100
内部位置模式
Vel = 0x200
内部速度模式
motors/DM/dm.hpp:60

motors::DMMotor::State

达妙反馈状态码

Disabled = 0x0U
上游未提供说明。
Disconnected = 0xDU
上游未提供说明。
Enabled = 0x1U
上游未提供说明。
MosOverheating = 0xBU
上游未提供说明。
MotorCoilOverheating = 0xCU
上游未提供说明。
OverCurrent = 0xAU
上游未提供说明。
OverVoltage = 0x8U
上游未提供说明。
Overload = 0xEU
上游未提供说明。
UnderVoltage = 0x9U
上游未提供说明。
motors/DM/dm.hpp:69

motors::DMMotor::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.
motors/DM/dm.hpp:40

变量

35

motors::DMMotor::Config::auto_zero

                    bool motors::DMMotor::Config::auto_zero
                  

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

motors/DM/dm.hpp:97

motors::DMMotor::Config::default_angle_zero

                    float motors::DMMotor::Config::default_angle_zero
                  

默认电机零点,理解为零点时电机编码器返回的角度

motors/DM/dm.hpp:95

motors::DMMotor::Config::hcan

                    CAN_HandleTypeDef* motors::DMMotor::Config::hcan
                  

所在 CAN 总线

motors/DM/dm.hpp:87

motors::DMMotor::Config::id0

                    uint8_t motors::DMMotor::Config::id0
                  

电调 ID,仅低 4 位有效,建议从 0x09 到 0x0F

motors/DM/dm.hpp:88

motors::DMMotor::Config::mode

                    Mode motors::DMMotor::Config::mode
                  

驱动器控制模式,需要和上位机配置一致

motors/DM/dm.hpp:90

motors::DMMotor::Config::pos_max_rad

                    float motors::DMMotor::Config::pos_max_rad
                  

驱动器配置的位置最大值,单位 rad

motors/DM/dm.hpp:91

motors::DMMotor::Config::reduction_rate

                    float motors::DMMotor::Config::reduction_rate
                  

外接减速比

motors/DM/dm.hpp:99

motors::DMMotor::Config::reverse

                    bool motors::DMMotor::Config::reverse
                  

是否反转输出方向

motors/DM/dm.hpp:98

motors::DMMotor::Config::tor_max

                    float motors::DMMotor::Config::tor_max
                  

驱动器配置的力矩最大值,单位 Nm

motors/DM/dm.hpp:93

motors::DMMotor::Config::type

                    Type motors::DMMotor::Config::type
                  

电机类型

motors/DM/dm.hpp:89

motors::DMMotor::Config::vel_max_rad

                    float motors::DMMotor::Config::vel_max_rad
                  

驱动器配置的速度最大值,单位 rad/s

motors/DM/dm.hpp:92

motors::DMMotor::DISABLE_MSG

                    uint8_t motors::DMMotor::DISABLE_MSG[] []
                  

上游未提供说明。

motors/DM/dm.hpp:292

motors::DMMotor::ENABLE_MSG

                    uint8_t motors::DMMotor::ENABLE_MSG[] []
                  

上游未提供说明。

motors/DM/dm.hpp:291

motors::DMMotor::abs_angle_

                    float motors::DMMotor::abs_angle_
                  

输出轴绝对角度,单位 deg

motors/DM/dm.hpp:279

motors::DMMotor::angle

                    float motors::DMMotor::angle
                  

当前圈内角度,单位 deg

motors/DM/dm.hpp:265

motors::DMMotor::angle_zero_

                    float motors::DMMotor::angle_zero_
                  

零点角度,单位 deg

motors/DM/dm.hpp:275

motors::DMMotor::count

                    int32_t motors::DMMotor::count
                  

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

motors/DM/dm.hpp:273

motors::DMMotor::enabled_

                    bool motors::DMMotor::enabled_
                  

DM 驱动器是否已发送使能报文 TODO: 这里通过 DM 反馈判定是否真的使能成功

motors/DM/dm.hpp:258

motors::DMMotor::feedback_

                    struct motors::DMMotor::@342262255216176330240367347145056362076115211175 motors::DMMotor::feedback_
                  

上游未提供说明。

motors/DM/dm.hpp:274

motors::DMMotor::feedback_count_

                    uint32_t motors::DMMotor::feedback_count_
                  

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

motors/DM/dm.hpp:261

motors::DMMotor::inv_reduction_rate_

                    float motors::DMMotor::inv_reduction_rate_
                  

外接减速比倒数

motors/DM/dm.hpp:276

motors::DMMotor::pos_max_deg

                    float motors::DMMotor::pos_max_deg
                  

位置量程上限,单位 deg

motors/DM/dm.hpp:277

motors::DMMotor::sign_

                    float motors::DMMotor::sign_
                  

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

motors/DM/dm.hpp:282

motors::DMMotor::velocity

                    float motors::DMMotor::velocity
                  

电机侧速度,库内统一按 rpm 保存

motors/DM/dm.hpp:266

motors::DMMotor::velocity_

                    float motors::DMMotor::velocity_
                  

输出轴速度,库内统一按 rpm 保存

motors/DM/dm.hpp:280

motors::DMMotor::watchdog_

                    service::Watchdog motors::DMMotor::watchdog_
                  

上游未提供说明。

motors/DM/dm.hpp:262

motors::FeedbackMap::hcan

                    CAN_HandleTypeDef* motors::FeedbackMap::hcan
                  

上游未提供说明。

motors/DM/dm.cpp:41

motors::FeedbackMap::motors

                    FixedPointerMap<size_t, DMMotor, MOTORS_DM_MAX_NUM> motors::FeedbackMap::motors
                  

上游未提供说明。

motors/DM/dm.cpp:42

motors::map

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

上游未提供说明。

motors/DM/dm.cpp:45

宏定义

5

文件

2

motors/DM/dm.cpp

达妙电机驱动实现 syhanjin 2026-02-27 DM 报文到电机对象的映射 反馈数据到物理量的换算 MIT / 位置 / 速度三种模式的指令打包 这里实现了:

motors/DM/dm.cpp