?
?
说明
驱动器采用的是Modbus协议, 上位机软件把输入的字符串解析为Modbus协议发送给驱动器, 如果你对Modbus协议比较熟悉,也可以直接用串口调试助手发送指令。 驱动器购买链接:某宝购买 ?
?
一、指令说明
指令 | 描述 | 参数说明 |
---|
motor0.requested_state | 运行模式 | STATE_IDLE、STATE_ENCODER_INDEX_SEARCH、STATE_CALIBRATION、STATE_CLOSED_LOOP_CONTROL、STATE_FAULT | motor0.controller.input_torque | 目标力矩 | 单位0.1A,取值范围 -200—200 | motor0.controller.input_vel | 目标速度 | 单位RPM,取值范围 -6000—6000 | motor0.controller.input_pos | 目标绝对位置 | 最多正负32000圈,每圈角度65536,取值范围 -2097152000—2097152000 | motor0.read.vbus_voltage | 母线电压 | 单位0.1V | motor0.read.vbus_current | 母线电流 | 单位0.1A | motor0.read.rpm | 当前速度 | 单位RPM | motor0.read.position | 当前位置 | 最多正负32000圈,每圈角度65536,取值范围 -2097152000—2097152000 | motor0.read.error | 故障信息 | FAULT_NO_ERROR、FAULT_ALIGN_FAIL、 | | | FAULT_UNDER_VOLTAGE、FAULT_OVER_VOLTAGE、 | | | FAULT_OVER_CURRENT、FAULT_NEGA_CURRENT、 | | | FAULT_TEMPERATURE_OVER、FAULT_INPUT_SIGNAL | motor0.read.code_version | 驱动器版本 | 单片机代码版本 | erase_configuration() | 擦除配置 | | save_configuration() | 保存参数 | | reboot() | 重启 | | motor0.config.cur_p_gain | 电流环P | 取值范围1-127,默认20 | motor0.config.cur_i_gain | 电流环I | 取值范围1-127,默认10 | motor0.config.vel_p_gain | 速度环P | 取值范围1-255,默认20 | motor0.config.vel_i_gain | 速度环I | 取值范围1-255,默认40,速度环的P和I参数保持1:2 | motor0.config.pos_p_gain | 位置环P | 取值范围1-255,默认20 | motor0.config.driver_id | 驱动器ID | 用于RS485多设备通信,0是广播地址,取值范围0—254 | motor0.config.motor_type | 电机类型 | MOTOR_TYPE_HIGH_CURRENT、MOTOR_TYPE_GIMBAL | motor0.config.pole_pairs | 电机极对数 | 取值范围2—64 | motor0.config.angle_compensation | 角度补偿 | 不同编码器不同电机在高速时需要设置补偿值,电机速度低于2000转不用操作 | motor0.config.encoder_mode | 编码器接口类型 | ENCODER_MODE_INCREMENTAL、ENCODER_MODE_SPI、ENCODER_MODE_I2C | motor0.config.encoder_type | 编码器型号 | AS5600、AS5047P、TLE5012B、MT6701 | motor0.config.encoder_cpr | 编码器CPR | PPR的四倍频是CPR,取值范围12-20000 | motor0.config.calibration_duty | 零点校准占空比 | 航模电机5—10,云台电机20—30。如有负载可适当增大 | motor0.config.gpio_mode | 输入模式 | GPIO_MODE_USART、GPIO_MODE_PWM、GPIO_MODE_ADC | motor0.config.control_mode | 控制模式 | CONTROL_MODE_TORQUE_CONTROL、CONTROL_MODE_VELOCITY_CONTROL、ONTROL_MODE_POSITION_CONTROL | motor0.config.current_lim | 电流限制 | 单位0.1A,电机最大电流限制,默认200 | motor0.config.vel_limit | 速度限制 | 单位RPM,速度模式和位置模式的转速限制 | motor0.config.current_ramp_rate | 电流爬升率 | 力矩模式,防止电机设置不同目标值,电机切换顿挫 | motor0.config.vel_ramp_rate | 速度爬升率 | 速度模式和位置模式,速度切换更加平滑 | motor0.config.dc_bus_undervoltage_trip_level | 欠压保护值 | 单位:0.1V,取值范围50—100 | motor0.config.dc_bus_overvoltage_trip_level | 过压保护值 | 单位:0.1V,取值范围120—560 | motor0.config.dc_max_positive_current | 过流保护值 | 单位:0.1A,取值范围50—500 | motor0.config.dc_max_negative_current | 回充电流值 | 单位:0.1A,取值范围-100— -10 | motor0.config.startup_encoder_index_search | 上电是否找零 | FALSE、TRUE | motor0.config.startup_encoder_offset_calibration | 上电是否校准 | FALSE、TRUE | motor0.config.startup_closed_loop_control | 上电是否运行 | FALSE、TRUE | motor0.config.mapping_torque | 最大输入对应力矩 | 用于电位器和PWM输入控制 | motor0.config.mapping_velocity | 最大输入对应速度 | 用于电位器和PWM输入控制 | motor0.config.mapping_position | 最大输入对应位置 | 用于电位器和PWM输入控制,最多50圈,每圈65536,取值范围0-3276800 |
?
二、2804云台电机+AS5600编码器
?
1.1、位置模式
1.擦除保存的参数
motor0.erase_configuration()
2.选择电机类型, 航模电机:MOTOR_TYPE_HIGH_CURRENT; 云台电机:MOTOR_TYPE_GIMBAL
motor0.config.motor_type = MOTOR_TYPE_GIMBAL
3.设置极对数,根据电机的实际极对数设置
motor0.config.pole_pairs = 7
4、设置编码器接口类型。 目前支持三种接口: ENCODER_MODE_INCREMENTAL ENCODER_MODE_SPI ENCODER_MODE_I2C
motor0.config.encoder_mode = ENCODER_MODE_I2C
5、设置编码器型号。 目前I2C接口只支持这一种型号,
motor0.config.encoder_type = AS5600
6、设置零点校准的占空比。 电机初次使用需要先校准下参数,校准时电机处于开环运行状态,此处为电机PWM输出的占空比,占空比设置太大电机发热;设置太小,电机无力,校准失败。航模电机设置6—10之间,云台电机设置20—35之间。
motor0.config.calibration_duty = 25
7、选择控制模式。 三种控制模式: 力矩模式、速度模式、位置模式 CONTROL_MODE_TORQUE_CONTROL CONTROL_MODE_VELOCITY_CONTROL CONTROL_MODE_POSITION_CONTROL
motor0.config.control_mode = CONTROL_MODE_POSITION_CONTROL
8、设置限速。 限制电机转动过程中的最大转速,单位:RPM
motor0.config.vel_limit = 200
9、设置位置闭环P参数,一般10—20之间。
motor0.config.pos_p_gain = 10
10、设置速度闭环P参数,
motor0.config.vel_p_gain = 60
11、设置速度闭环I参数,
motor0.config.vel_i_gain = 120
12、保存参数
motor0.save_configuration()
13、重启,大约需1秒钟
motor0.reboot()
14、零点检测 电机正反转一下,获取参数,不同电机的参数不同,同一个电机不同的三相线接端子方式参数不同。
motor0.requested_state = STATE_CALIBRATION
15、保存零点检测结果。 电机和接线不改变的情况下,以后再上电可以不用零点检测。
motor0.save_configuration()
16、重启,大约需1秒钟
motor0.reboot()
17、等待驱动器重启,发送指令进入闭环状态
motor0.requested_state = STATE_CLOSED_LOOP_CONTROL
18、设置目标位置。 电机采用定点数运算,一圈360°=65536,最高可以设置正负32000圈,即-2097152000——2097152000。
motor0.controller.input_pos = 0
motor0.controller.input_pos = 65536
motor0.controller.input_pos = 655360
motor0.controller.input_pos = -65536
motor0.controller.input_pos = -655360
19、转动过程中可以随时读取实时速度和实时位置,或者读取电压电流
motor0.read.rpm
motor0.read.position
motor0.read.vbus_current
motor0.read.vbus_voltage
20、读取错误 驱动板上有心跳指示灯,以0.5秒为周期闪烁,如果电机运行故障,进入保护状态,指示灯常亮。发送指令可返回错误原因
motor0.read.error
?
1.2、速度模式
1、设置
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_GIMBAL
motor0.config.pole_pairs = 7
motor0.config.encoder_mode = ENCODER_MODE_I2C
motor0.config.encoder_type = AS5600
motor0.config.calibration_duty = 25
motor0.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
motor0.config.vel_limit = 500
2、PID参数默认值即可,默认值如下,
motor0.config.cur_p_gain = 20
motor0.config.cur_i_gain = 10
motor0.config.vel_p_gain = 20
motor0.config.vel_i_gain = 40
3、保存重启
motor0.save_configuration()
motor0.reboot()
4、重启后零点检测,大概5秒钟时间
motor0.requested_state = STATE_CALIBRATION
5、设置上电后进入闭环指令
config.startup_closed_loop_control = TRUE
6、保存,重启
motor0.save_configuration()
motor0.reboot()
7、设置目标速度 单位RPM,60rpm=1圈/秒, 实际速度受到限速指令的限制,
motor0.controller.input_vel = 200
motor0.controller.input_vel = -200
motor0.controller.input_vel = 0
?
1.3、力矩模式
1、设置,保存并重启
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_GIMBAL
motor0.config.pole_pairs = 7
motor0.config.encoder_mode = ENCODER_MODE_I2C
motor0.config.encoder_type = AS5600
motor0.config.calibration_duty = 25
motor0.config.control_mode = CONTROL_MODE_TORQUE_CONTROL
motor0.save_configuration()
motor0.reboot()
2、零点检测,大概5秒钟时间
motor0.requested_state = STATE_CALIBRATION
3、设置上电后进入闭环指令
config.startup_closed_loop_control = TRUE
4、保存,重启
motor0.save_configuration()
motor0.reboot()
5、设置目标力矩 单位0.1A,最大值200, 实际会有误差,但力矩大小与设置值大小成正比
motor0.controller.input_torque= 20
motor0.controller.input_torque= -20
motor0.controller.input_torque= 0
?
三、5008航模电机+AS5047P编码器
3.1、速度模式
1、设置,保存
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
motor0.config.pole_pairs = 7
motor0.config.encoder_mode = ENCODER_MODE_SPI
motor0.config.encoder_type = AS5047P
motor0.config.calibration_duty = 10
motor0.config.vel_ramp_rate = 2
motor0.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
motor0.save_configuration()
motor0.reboot()
2、零点检测,大概5秒钟时间
motor0.requested_state = STATE_CALIBRATION
3、检查零点检测是否有误 如果检测失败,心跳灯会常亮。读取极对数,确认检测的结果正确。
motor0.read.error
motor0.config.pole_pairs
4、设置上电后进入闭环指令
motor0.config.startup_closed_loop_control = TRUE
5、保存,重启
motor0.save_configuration()
motor0.reboot()
6、设置目标速度 单位RPM,
motor0.controller.input_vel= 1500
motor0.controller.input_vel= -2000
motor0.controller.input_vel= 0
7、读取实时速度
motor0.read.rpm
?
3.2、位置模式
电源电压12V
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
motor0.config.pole_pairs = 7
motor0.config.encoder_mode = ENCODER_MODE_SPI
motor0.config.encoder_type = AS5047P
motor0.config.calibration_duty = 10
motor0.config.vel_ramp_rate = 5
motor0.config.control_mode = CONTROL_MODE_POSITION_CONTROL
motor0.config.vel_limit = 500
motor0.save_configuration()
motor0.reboot()
?
四、3505航模电机+ABZ编码器
编码器型号TLE5012B,cpr=16384, 电机极对数为10, 电源电压12V, ? ABZ信号需要每次上电都机械找零,从而得到绝对角度,零点检测一次后保存参数,以后再上电可以不用零点检测; 也可以只用AB信号,得到相对角度,不用每次上电都机械找零,但每次上电都需要零点检测。 ?
? 1、设置,保存
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
motor0.config.pole_pairs = 10
motor0.config.encoder_mode = ENCODER_MODE_INCREMENTAL
motor0.config.encoder_cpr = 16384
motor0.config.startup_encoder_index_search = TRUE
motor0.config.calibration_duty = 8
motor0.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
motor0.save_configuration()
motor0.reboot()
2、零点检测 上电后先等待电机找机械零点,找到零点后停止, 再发送零点检测指令,大约需要5秒钟
motor0.requested_state = STATE_CALIBRATION
3、保存,重启 保存零点检测得到的参数,以后再上电可以不用零点检测,
motor0.save_configuration()
motor0.reboot()
4、进入闭环指令
motor0.requested_state = STATE_CLOSED_LOOP_CONTROL
5、设置速度
motor0.controller.input_vel = 500
motor0.controller.input_vel = -500
motor0.controller.input_vel = 0
6、再上电只需要第4、第5步即可。 或者第2步执行完以后,设置上电进入闭环指令:motor0.config.startup_closed_loop_control=TRUE,再上电直接设置速度即可。
?
五、57直流无刷电机+ABZ编码器
57直流无刷电机,有霍尔信号和编码器信号,此处只接编码器信号, 编码器为500线,cpr=2000, 电机极对数为2, 电源电压24V, ? ABZ信号需要每次上电都机械找零,从而得到绝对角度,零点检测一次后保存参数,以后再上电可以不用零点检测; 也可以只用AB信号,得到相对角度,不用每次上电都机械找零,但每次上电都需要零点检测。 ? ? 1、设置,保存
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
motor0.config.pole_pairs = 2
motor0.config.encoder_mode = ENCODER_MODE_INCREMENTAL
motor0.config.encoder_cpr = 2000
motor0.config.startup_encoder_index_search = TRUE
motor0.config.calibration_duty = 12
motor0.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
motor0.save_configuration()
motor0.reboot()
2、零点检测,保存 上电后先等待电机找机械零点,找到零点后停止, 再发送零点检测指令,大约需要5秒钟
motor0.requested_state = STATE_CALIBRATION
3、保存,重启 保存零点检测得到的参数,以后再上电可以不用零点检测,
motor0.save_configuration()
motor0.reboot()
4、发送闭环指令
motor0.requested_state = STATE_CLOSED_LOOP_CONTROL
5、设置速度
motor0.controller.input_vel = 500
motor0.controller.input_vel = -500
motor0.controller.input_vel = 0
?
六、PWM输入信号控制驱动器
? 先把背面的PWM跳线短接 ? 接收机接在驱动器上,注意电源正负极, 推荐使用接收机的3通道,信号范围是1.0ms—2.0ms, 驱动器进入闭环后,遥控手柄需居中,否则报错;使用过程中如果信号丢失,驱动器报错。 向上推手柄到最大位置,此时PWM信号输出为2.0ms,对应驱动器设置的最大值; 向下推手柄到最低位置,此时PWM信号输出为1.0ms,对应驱动器设置的最小值;
例如: 设置位置模式,最大位置为32767,手柄居中位置为0,向上推最大,电机转动到32767位置,向下推最小,电机转动到-32767位置。 设置速度模式,最大速度为2000 rpm,手柄居中速度为0,向上推最大,速度最大2000,向下推最小,速度最小为-2000; ?
6.1、位置模式
? 1、设置,保存
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_GIMBAL
motor0.config.pole_pairs = 7
motor0.config.encoder_mode = ENCODER_MODE_I2C
motor0.config.encoder_type = AS5600
motor0.config.calibration_duty = 25
motor0.config.gpio_mode = GPIO_MODE_PWM
motor0.config.control_mode = CONTROL_MODE_POSITION_CONTROL
motor0.config.vel_limit = 200
motor0.config.mapping_position=32767
motor0.config.pos_p_gain = 10
motor0.config.vel_p_gain = 60
motor0.config.vel_i_gain = 120
motor0.save_configuration()
motor0.reboot()
2、重启后零点校准
motor0.requested_state=STATE_CALIBRATION
motor0.config.startup_closed_loop_control=TRUE
3、保存,重启
motor0.save_configuration()
motor0.reboot()
4、重启过程中要保证遥控手柄居中位置,然后推动手柄观察电机运行。
?
6.2、速度模式
? 1、设置,保存
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
motor0.config.pole_pairs = 10
motor0.config.encoder_mode = ENCODER_MODE_SPI
motor0.config.encoder_type = AS5047P
motor0.config.calibration_duty = 8
motor0.config.gpio_mode = GPIO_MODE_PWM
motor0.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
motor0.config.mapping_velocity=2000
motor0.save_configuration()
motor0.reboot()
2、零点校准,保存
motor0.requested_state=STATE_CALIBRATION
motor0.config.startup_closed_loop_control=TRUE
motor0.save_configuration()
motor0.reboot()
3、上电后上下推动摇杆,观察电机转动
? ?
七、电位器输入信号控制驱动器
? 把驱动器背面的短接Radj
? 电位器接在驱动器上,注意电源正负极, 驱动器进入闭环后,电位器拧到最低端,即阻值最大状态,否则报错;使用过程中如果信号丢失,驱动器报错。 向上调到最大位置,此时输出电压最大,对应驱动器设置的最大值; 向下调到最低位置,此时输出电压最小,对应驱动器设置的最小值;
例如: 设置位置模式,最大位置为65536,电位器调到最低,位置为0,调到最大,位置最大65536; 设置速度模式,最大速度为2000RPM,电位器调到最低,速度为0,调到最大,速度最大2000RPM。 ?
7.1、位置模式
1、设置,保存
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
motor0.config.pole_pairs = 10
motor0.config.encoder_mode = ENCODER_MODE_SPI
motor0.config.encoder_type = AS5047P
motor0.config.calibration_duty = 8
motor0.config.gpio_mode = GPIO_MODE_ADC
motor0.config.control_mode = CONTROL_MODE_POSITION_CONTROL
motor0.config.vel_limit = 1000
motor0.config.mapping_position=65536
motor0.save_configuration()
motor0.reboot()
2、校准,保存
motor0.requested_state=STATE_CALIBRATION
motor0.config.startup_closed_loop_control=TRUE
motor0.save_configuration()
motor0.reboot()
3、扭动电位器,观察电机转动
?
7.2、速度模式
1、设置,保存
motor0.erase_configuration()
motor0.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
motor0.config.pole_pairs = 10
motor0.config.encoder_mode = ENCODER_MODE_SPI
motor0.config.encoder_type = AS5047P
motor0.config.calibration_duty = 8
motor0.config.gpio_mode = GPIO_MODE_ADC
motor0.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL
motor0.config.mapping_velocity=2000
motor0.save_configuration()
motor0.reboot()
2、零点校准,保存
motor0.requested_state=STATE_CALIBRATION
motor0.config.startup_closed_loop_control=TRUE
motor0.save_configuration()
motor0.reboot()
3、扭动电位器,观察电机转动
? ? (完) ?
|