跳转到内容

MotorDrivers::DM API

文档稀疏
符号
84
已记录
51
类型
3
继承关系
1
源码分支
main

33 / 84 个公开 API 符号没有说明。

继承关系总览

继承图尚未加载。

全部继承关系

共 3 个类型

类型目录
类

motors::DMMotor

查看源码

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

继承关系

基类
  • IMotor公开

构造与析构

2

DMMotor

函数公开
        motors::DMMotor::DMMotor (const Config &cfg)
      

上游未提供说明。

motors/DM/dm.hpp:102

~DMMotor

函数公开
        motors::DMMotor::~DMMotor () override
      

上游未提供说明。

motors/DM/dm.hpp:103

成员函数

26

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

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

decode

函数公开
        void motors::DMMotor::decode (const uint8_t data[8])
      

解码一帧 DM 反馈

motors/DM/dm.hpp:143

defaultControlMode

函数公开const
        controllers::ControlMode motors::DMMotor::defaultControlMode () const override
      

上游未提供说明。

motors/DM/dm.hpp:125

disable

函数公开
        void motors::DMMotor::disable ()
      

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

motors/DM/dm.hpp:234

enable

函数公开
        bool motors::DMMotor::enable ()
      

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

motors/DM/dm.hpp:229

getAngle

函数公开const
        float motors::DMMotor::getAngle () const override
      

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

motors/DM/dm.hpp:109

getTorque

函数公开const
        float motors::DMMotor::getTorque () const
      

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

motors/DM/dm.hpp:119

getVelocity

函数公开const
        float motors::DMMotor::getVelocity () const override
      

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

motors/DM/dm.hpp:114

internalPositionSupportLevel

函数公开const
        InternalPositionSupportLevel motors::DMMotor::internalPositionSupportLevel () const override
      

上游未提供说明。

motors/DM/dm.hpp:169

internalVelocitySupportLevel

函数公开const
        InternalVelocitySupportLevel motors::DMMotor::internalVelocitySupportLevel () const override
      

上游未提供说明。

motors/DM/dm.hpp:156

isConnected

函数公开const
        bool motors::DMMotor::isConnected () const override
      

上游未提供说明。

motors/DM/dm.hpp:145

ping

函数公开const
        void motors::DMMotor::ping () const
      

上游未提供说明。

motors/DM/dm.hpp:239

releaseController

函数公开
        void motors::DMMotor::releaseController (controllers::IController *ctrl) override
      

释放控制权

motors/DM/dm.hpp:223

resetAngle

函数公开
        void motors::DMMotor::resetAngle () override
      

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

motors/DM/dm.hpp:123

sendDisableFrame

函数公开const
        void motors::DMMotor::sendDisableFrame () const
      

上游未提供说明。

motors/DM/dm.hpp:237

sendEnableFrame

函数公开const
        void motors::DMMotor::sendEnableFrame () const
      

上游未提供说明。

motors/DM/dm.hpp:236

setCurrent

函数公开
        void motors::DMMotor::setCurrent (float current) override
      

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

motors/DM/dm.hpp:154

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

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

setInternalVelocity

函数公开
        void motors::DMMotor::setInternalVelocity (float rpm, float maxi) override
      

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

motors/DM/dm.hpp:167

state

函数公开const
        State motors::DMMotor::state () const
      

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

motors/DM/dm.hpp:253

supportsCurrent

函数公开const
        bool motors::DMMotor::supportsCurrent () const override
      

上游未提供说明。

motors/DM/dm.hpp:147

supportsInternalMIT

函数公开const
        bool motors::DMMotor::supportsInternalMIT () const override
      

上游未提供说明。

motors/DM/dm.hpp:182

tryAcquireController

函数公开
        bool motors::DMMotor::tryAcquireController (controllers::IController *ctrl) override
      

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

motors/DM/dm.hpp:219

tx_header

函数私有const
        CAN_TxHeaderTypeDef motors::DMMotor::tx_header (const uint8_t &DLC) const
      

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

motors/DM/dm.hpp:288

成员变量

20

DISABLE_MSG

变量私有静态
        uint8_t motors::DMMotor::DISABLE_MSG[] []
      

上游未提供说明。

motors/DM/dm.hpp:292

ENABLE_MSG

变量私有静态
        uint8_t motors::DMMotor::ENABLE_MSG[] []
      

上游未提供说明。

motors/DM/dm.hpp:291

abs_angle_

变量私有
        float motors::DMMotor::abs_angle_
      

输出轴绝对角度,单位 deg

motors/DM/dm.hpp:279

angle_zero_

变量私有
        float motors::DMMotor::angle_zero_
      

零点角度,单位 deg

motors/DM/dm.hpp:275

count

变量公开
        int32_t motors::DMMotor::count
      

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

motors/DM/dm.hpp:273

enabled_

变量私有
        bool motors::DMMotor::enabled_
      

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

motors/DM/dm.hpp:258

feedback_

变量私有
        struct motors::DMMotor::@342262255216176330240367347145056362076115211175 motors::DMMotor::feedback_
      

上游未提供说明。

motors/DM/dm.hpp:274

feedback_count_

变量私有
        uint32_t motors::DMMotor::feedback_count_
      

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

motors/DM/dm.hpp:261

inv_reduction_rate_

变量私有
        float motors::DMMotor::inv_reduction_rate_
      

外接减速比倒数

motors/DM/dm.hpp:276

pos_max_deg

变量私有
        float motors::DMMotor::pos_max_deg
      

位置量程上限,单位 deg

motors/DM/dm.hpp:277

sign_

变量私有
        float motors::DMMotor::sign_
      

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

motors/DM/dm.hpp:282

velocity

变量公开
        float motors::DMMotor::velocity
      

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

motors/DM/dm.hpp:266

velocity_

变量私有
        float motors::DMMotor::velocity_
      

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

motors/DM/dm.hpp:280

watchdog_

变量私有
        service::Watchdog motors::DMMotor::watchdog_
      

上游未提供说明。

motors/DM/dm.hpp:262

嵌套类型

4

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

State

枚举公开

达妙反馈状态码

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

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
结构体

motors::DMMotor::Config

查看源码

达妙电机配置

成员变量

11

auto_zero

变量公开
        bool motors::DMMotor::Config::auto_zero
      

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

motors/DM/dm.hpp:97

default_angle_zero

变量公开
        float motors::DMMotor::Config::default_angle_zero
      

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

motors/DM/dm.hpp:95

hcan

变量公开
        CAN_HandleTypeDef* motors::DMMotor::Config::hcan
      

所在 CAN 总线

motors/DM/dm.hpp:87

id0

变量公开
        uint8_t motors::DMMotor::Config::id0
      

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

motors/DM/dm.hpp:88

mode

变量公开
        Mode motors::DMMotor::Config::mode
      

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

motors/DM/dm.hpp:90

pos_max_rad

变量公开
        float motors::DMMotor::Config::pos_max_rad
      

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

motors/DM/dm.hpp:91

reduction_rate

变量公开
        float motors::DMMotor::Config::reduction_rate
      

外接减速比

motors/DM/dm.hpp:99

reverse

变量公开
        bool motors::DMMotor::Config::reverse
      

是否反转输出方向

motors/DM/dm.hpp:98

tor_max

变量公开
        float motors::DMMotor::Config::tor_max
      

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

motors/DM/dm.hpp:93

vel_max_rad

变量公开
        float motors::DMMotor::Config::vel_max_rad
      

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

motors/DM/dm.hpp:92
结构体

motors::FeedbackMap

查看源码

上游未提供类型说明。

成员变量

2

hcan

变量公开
        CAN_HandleTypeDef* motors::FeedbackMap::hcan
      

上游未提供说明。

motors/DM/dm.cpp:41

motors

变量公开
        FixedPointerMap<size_t, DMMotor, MOTORS_DM_MAX_NUM> motors::FeedbackMap::motors
      

上游未提供说明。

motors/DM/dm.cpp:42

其他公开符号

函数

7

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

变量

2

motors::map

变量静态
        std::array<FeedbackMap, CAN_NUM> motors::map
      

上游未提供说明。

motors/DM/dm.cpp:45

motors::master_id_

变量静态
        uint32_t motors::master_id_
      

上游未提供说明。

motors/DM/dm.cpp:49

宏定义

5

文件

2

motors/DM/dm.cpp

文件

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

motors/DM/dm.cpp