# DM_Motor_Control **Repository Path**: chenmo1/DM_Motor_Control ## Basic Information - **Project Name**: DM_Motor_Control - **Description**: 达妙电机Linux下驱动,在达妙客户例程上进行修改增加新的特性. Damiao motor is driven under Linux, and new features are modified on Damiao customer routines - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2024-07-26 - **Last Updated**: 2025-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 达妙电机Linux-C++驱动库 该驱动库对达妙客户提供的驱动库进行了魔改,增加了诸多功能。最低支持的C++版本为C++11 该驱动库目前只能在**Linux**下使用,特别适合使用ROS的宝宝 **欢迎加入QQ群:677900232 进行达妙电机技术交流。欢迎进入达妙店铺进行点击选购**[首页-达妙智能控制企业店-淘宝网 (taobao.com)](https://shop290016675.taobao.com/?spm=pc_detail.29232929/evo365560b447259.shop_block.dshopinfo.59f47dd6w4Z4dX) ### 1.引用达妙库 ​ 通过头文件引入达妙库 ```c++ #include "damiao.h" ``` ### 2.定义控制对象 ​ 对电机进行控制需要定义相关的对象。 ​ 首先是串口对象,达妙的USB转串口默认是921600波特率,然后串口号的选择大家根据自己linux设备下的串口号进行选择。 ```c++ auto serial = std::make_shared("/dev/ttyACM0", B921600); ``` ​ 然后要定义相关的电机控制对象和电机对象。其中电机对象中第一个参数是电机类型需要进行选择,第二个参数是电机的SlaveID即CANID即电机控制的ID,**第三个参数是MasterID即主机ID,主机ID不要设为0x00,建议设置为CANID基础上+0x10,例如下面的0x11.** **MasterID和SlaveID需要在达妙上位机进行设置!!如果出现问题请先检查MasterID是否不和SlaveID冲突,并且不为0x00** **MasterID不要设置为0x00** **MasterID不要设置为0x00** **MasterID不要设置为0x00** ```c++ auto dm =damiao::Motor_Control(serial); damiao::Motor M1(damiao::DM4310,0x01, 0x11); damiao::Motor M2(damiao::DM4310,0x05, 0x15); ``` ### 3.电机状态 #### 3.1 添加电机 添加电机是addMotor。 ```c++ dm.addMotor(&M1); dm.addMotor(&M2); ``` #### 3.2使能电机 **建议:如果要修改电机参数。建议使能放在最后** ```c++ dm.enable(M1); dm.enable(M2); ``` ​ 此代码为兼容旧固件,关于旧版本电机固件,使能对应不同模式需要加上使能的模式(即需要使能电机对应的模式,并不能修改电机此时的模式)**注意需要使能电机此时对应的模式,并不能修改电机内部的模式** ```c++ dm.enable_old(Motor1,damiao::MIT_MODE); dm.enable_old(Motor2,damiao::POS_VEL_MODE); dm.enable_old(Motor3,damiao::VEL_MODE); ``` #### 3.3设置电机零点 将电机在失能状态下摆到需要设置为0点的位置,然后运行下面两行,电机将会将当前位置作为电机0点。 ```c++ dm.set_zero_position(M1); dm.set_zero_position(M2); ``` #### 3.4 失能电机 ```c++ dm.disable(M1); dm.disable(M2); ``` #### 3.5 电机状态获取 达妙电机默认是需要每发送一帧控制指令才能获得当前电机力矩、位置、速度等信息。如果在没有发送控制指令的过程中想要获得电机此时的状态可以通过以下指令。 ```c++ dm.refresh_motor_status(M1); dm.refresh_motor_status(M2); std::cout<<"motor1--- POS:"<