IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> JCFOC使用说明 -> 正文阅读

[嵌入式]JCFOC使用说明


?
?

说明

驱动器采用的是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编码器CPRPPR的四倍频是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       //至少为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         //最大可以设置3276800
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           //零点校准,大概需要5秒钟
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       //大概需要5秒钟时间
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        //大概需要5秒钟
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       //大概需要5秒钟时间
motor0.config.startup_closed_loop_control=TRUE
motor0.save_configuration()
motor0.reboot()

3、扭动电位器,观察电机转动

在这里插入图片描述
?
?
(完)
?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:44:29  更:2022-09-21 00:46:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:28:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码