Skip to content

Latest commit

 

History

History
225 lines (154 loc) · 5.77 KB

File metadata and controls

225 lines (154 loc) · 5.77 KB

达妙 Python 库

语言: 中文 | ENGLISH

该库支持 macOSLinuxWindows 三个平台。

🎉 欢迎加入 QQ 群:677900232 进行达妙电机技术交流。
🛒 点击访问达妙智能控制企业店达妙店铺


目录

  1. 引用达妙库
  2. 定义电机控制对象
  3. 电机状态
  4. 电机控制模式
  5. 电机状态读取
  6. 电机内部参数更改

1. 引用达妙库

确保 DM_CAN.py 文件在项目文件夹中,使用以下方式导入:

from DM_CAN import *

安装依赖

该库依赖以下 Python 库:serialnumpy,请使用以下命令安装:

pip install -r requirements.txt

2. 定义电机控制对象

使用以下代码定义电机对象:

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)

3. 电机状态

3.1 添加电机

将电机对象添加到控制对象中:

MotorControl1.addMotor(Motor1)
MotorControl1.addMotor(Motor2)
MotorControl1.addMotor(Motor3)

3.2 使能电机

使能电机前,建议先设置好所有电机参数:

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)

3.3 设置零点

将电机移动到所需零点位置(在失能状态下),然后执行:

MotorControl1.set_zero_position(Motor3)
MotorControl1.set_zero_position(Motor6)

3.4 失能电机

MotorControl1.disable(Motor3)
MotorControl1.disable(Motor6)

3.5 获取电机状态

通过以下代码可以获取电机的实时状态(位置、速度、力矩等):

MotorControl1.refresh_motor_status(Motor1)
print("Motor1:", "POS:", Motor1.getPosition(), "VEL:", Motor1.getVelocity(), "TORQUE:", Motor1.getTorque())

4. 电机控制模式

4.1 MIT 模式

使用 MIT 模式控制电机:

MotorControl1.controlMIT(Motor1, 50, 0.3, 0, 0, 0)

4.2 位置速度模式

通过以下代码控制电机的目标位置和速度:

q = math.sin(time.time())
MotorControl1.control_Pos_Vel(Motor1, q*10, 2)

4.3 速度模式

控制电机的速度:

q = math.sin(time.time())
MotorControl1.control_Vel(Motor1, q*5)

4.4 力位混合模式

控制电机的目标位置和力:

MotorControl1.control_pos_force(Motor1, 10, 1000, 100)

5. 电机状态读取

电机状态保存在对应的电机对象中,可以通过以下函数读取:

vel = Motor1.getVelocity()    # 获得电机速度
pos = Motor1.getPosition()    # 获得电机位置
tau = Motor1.getTorque()      # 获得电机输出力矩

6. 电机内部参数更改

6.1 控制模式更改

可以在线修改电机的控制模式:

if MotorControl1.switchControlMode(Motor1, Control_Type.POS_VEL):
    print("切换到 POS_VEL 模式成功")
if MotorControl1.switchControlMode(Motor2, Control_Type.VEL):
    print("切换到 VEL 模式成功")

6.2 保存参数

修改参数后,需要保存到电机的 flash 中:

MotorControl1.save_motor_param(Motor1)

6.3 读取内部寄存器

读取电机内部寄存器的参数:

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))

6.4 修改内部寄存器

修改电机内部寄存器的参数(此更改在掉电后会恢复):

if MotorControl1.change_motor_param(Motor1, DM_variable.KP_APR, 54):
   print("写入成功")