该库支持 macOS、Linux 和 Windows 三个平台。
🎉 欢迎加入 QQ 群:677900232 进行达妙电机技术交流。
🛒 点击访问达妙智能控制企业店:达妙店铺
确保 DM_CAN.py 文件在项目文件夹中,使用以下方式导入:
from DM_CAN import *该库依赖以下 Python 库:serial 和 numpy,请使用以下命令安装:
pip install -r requirements.txt使用以下代码定义电机对象:
Motor1 = Motor(DM_Motor_Type.DM4310, 0x01, 0x11)
Motor2 = Motor(DM_Motor_Type.DM4310, 0x02, 0x12)
Motor3 = Motor(DM_Motor_Type.DM4310, 0x03, 0x13)- 第一个参数:电机类型
- 第二个参数:SlaveID(电机的CAN ID)
- 第三个参数:MasterID(主机ID,建议不为
0x00,且不与 SlaveID 冲突)
serial_device = serial.Serial('COM8', 921600, timeout=0.5)
MotorControl1 = MotorControl(serial_device)将电机对象添加到控制对象中:
MotorControl1.addMotor(Motor1)
MotorControl1.addMotor(Motor2)
MotorControl1.addMotor(Motor3)使能电机前,建议先设置好所有电机参数:
MotorControl1.enable(Motor1)
MotorControl1.enable(Motor2)
MotorControl1.enable(Motor3)如果是旧版固件,需指定控制模式:
MotorControl1.enable_old(Motor1, Control_Type.MIT)
MotorControl1.enable_old(Motor2, Control_Type.POS_VEL)
MotorControl1.enable_old(Motor3, Control_Type.VEL)将电机移动到所需零点位置(在失能状态下),然后执行:
MotorControl1.set_zero_position(Motor3)
MotorControl1.set_zero_position(Motor6)MotorControl1.disable(Motor3)
MotorControl1.disable(Motor6)通过以下代码可以获取电机的实时状态(位置、速度、力矩等):
MotorControl1.refresh_motor_status(Motor1)
print("Motor1:", "POS:", Motor1.getPosition(), "VEL:", Motor1.getVelocity(), "TORQUE:", Motor1.getTorque())使用 MIT 模式控制电机:
MotorControl1.controlMIT(Motor1, 50, 0.3, 0, 0, 0)通过以下代码控制电机的目标位置和速度:
q = math.sin(time.time())
MotorControl1.control_Pos_Vel(Motor1, q*10, 2)控制电机的速度:
q = math.sin(time.time())
MotorControl1.control_Vel(Motor1, q*5)控制电机的目标位置和力:
MotorControl1.control_pos_force(Motor1, 10, 1000, 100)电机状态保存在对应的电机对象中,可以通过以下函数读取:
vel = Motor1.getVelocity() # 获得电机速度
pos = Motor1.getPosition() # 获得电机位置
tau = Motor1.getTorque() # 获得电机输出力矩可以在线修改电机的控制模式:
if MotorControl1.switchControlMode(Motor1, Control_Type.POS_VEL):
print("切换到 POS_VEL 模式成功")
if MotorControl1.switchControlMode(Motor2, Control_Type.VEL):
print("切换到 VEL 模式成功")修改参数后,需要保存到电机的 flash 中:
MotorControl1.save_motor_param(Motor1)读取电机内部寄存器的参数:
print("PMAX:", MotorControl1.read_motor_param(Motor1, DM_variable.PMAX))
print("MST_ID:", MotorControl1.read_motor_param(Motor1, DM_variable.MST_ID))
print("VMAX:", MotorControl1.read_motor_param(Motor1, DM_variable.VMAX))
print("TMAX:", MotorControl1.read_motor_param(Motor1, DM_variable.TMAX))修改电机内部寄存器的参数(此更改在掉电后会恢复):
if MotorControl1.change_motor_param(Motor1, DM_variable.KP_APR, 54):
print("写入成功")