通过串口通讯协议、拖拽积木、Python、C+STM32多种编程方式实现CAN电机的控制。

CAN模块在开发板的位置图

通过位置图,你可以快速找到CAN模块在开发板的位置。

CAN模块的串口通讯协议

通过串口调试工具发送串口通讯协议实现CAN电机的控制。

参数数据类型可用值参数说明
channelint1、2通道ID,CAN1、CAN2
modeint1、2、3电机类型,m2006、m3508、gm6020
motorint0、1、2、3、4电机ID,0为全部
speedint-10000 - 10000电机转速
pfloatPID比例
ifloatPID积分
dfloatPID微分
// 示例:设置CAN1电机1模式为m2006
{"type":"can-mode","channel":1,"mode":1,"motor":1}
// 示例:更新CAN1电机1的PID
{"type":"can-motor-pid","channel":1,"motor":1,"p":8,"i":0,"d":0}
// 示例:控制CAN1电机1的转速为2000
{"type":"can-motor-motion","channel":1,"motor":1,"speed":2000}
// 示例:控制CAN1电机1停止转动
{"type":"can-motor-stop","channel":1,"motor":1}
// 示例:读取CAN1电机1数据
{"type":"can-motor-data","channel":1,"motor":1}
// 读取后会通过开发板USB虚拟串口输出,格式如下:
{"type":"can-motor-data","motor":1,"angle":324,"speed":10000,"current":11.21,"temperature":11.21}

CAN模块的拖拽积木

通过拖拽积木调用Python API函数接口实现CAN电机的控制。

CAN模块的Python API函数接口

通过Python语言调用Python API函数接口实现CAN电机的控制。

参数数据类型可用值参数说明
channelint1、2通道ID,CAN1、CAN2
modeint1、2、3电机类型,m2006、m3508、gm6020
motorint0、1、2、3、4电机ID,0为全部
speedint-10000 - 10000电机转速
pfloatPID比例
ifloatPID积分
dfloatPID微分
pid_modeintPID算法模式,暂时未启用,默认为0
// Python API函数 设置CAN通道电机模式
robot.board.module.motor.set_motor_mode(channel, motor, mode).send()
// 示例:设置CAN1电机1模式为m2006
robot.board.module.motor.set_motor_mode(1, 1, 1).send()
// Python API函数 更新CAN通道电机PID
robot.board.module.motor.set_motor_pid(channel, motor, p, i, d, pid_mode).send()
// 示例:更新CAN1电机1PID
robot.board.module.motor.set_motor_pid(1, 1, 8, 0, 0, 0).send()
// Python API函数 设置CAN通道电机转速
robot.board.module.motor.set_motor_motion(channel, motor, speed).send()
// 示例:设置CAN1电机1转为2000
robot.board.module.motor.set_motor_motion(1, 1, 2000).send()
// Python API函数 设置CAN通道电机停止转动
robot.board.module.motor.set_motor_stop(channel, motor).send()
// 示例:更新CAN1电机1停止转动
robot.board.module.motor.set_motor_stop(1, 1).send()

CAN模块的C+STM32函数接口

通过C语言调用开发板SDK函数接口实现CAN电机的控制。

参数数据类型可用值参数说明
channelint1、2通道ID,CAN1、CAN2
modeint1、2、3电机类型,m2006、m3508、gm6020
motorint0、1、2、3、4电机ID,0为全部
speedint-10000 - 10000电机转速
pfloatPID比例
ifloatPID积分
dfloatPID微分
// C API函数 设置CAN通道电机模式
Can_Mode(int channel, int mode, int motor)
// 示例:设置CAN1电机1模式为m2006
Can_Mode(1, 1, 1);
// C API函数 设置CAN通道电机运动
Can_Motor_Motion(int channel, int motor, int speed)
// 示例:设置CAN1电机1转为2000
Can_Motor_Motion(1,1, 2000);
// C API函数 设置CAN通道电机PID
Can_Motor_Update_Pid(int channel, int motor, float p, float i, float d)
// 示例:更新CAN1电机1PID
Can_Motor_Update_Pid(1, 1, 8, 0, 0);
// C API函数 控制CAN通讯电机停止运动
Can_Motor_Stop(int channel, int motor)
// 示例:控制CAN1电机1停止运动
Can_Motor_Stop(1, 1);
// C API函数 读取CAN通讯电机数据,motor从0开始,所有为实际motor-1
Can{channel}_Motor_Read_Data[{motor-1}]
// 示例:控制CAN1电机1数据
Can1_Motor_Read_Data[0].angle;
Can1_Motor_Read_Data[0].speed;
Can1_Motor_Read_Data[0].current;
Can1_Motor_Read_Data[0].temperature;
// 示例:控制CAN1电机2数据
Can1_Motor_Read_Data[1].angle;
Can1_Motor_Read_Data[1].speed;
Can1_Motor_Read_Data[1].current;
Can1_Motor_Read_Data[1].temperature;