odrive 3.6 v0.5.1 驱动TMOTOR MN4004-25

2024-01-30 04:30

本文主要是介绍odrive 3.6 v0.5.1 驱动TMOTOR MN4004-25,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

电机为TMOTOR MN4004-25 KV300,如图:

 编码器选择AEDT-9810,码盘选择2500脉冲(625P/R):

连接好线路后,cmd打开命令行窗口,启动odrivetool,确认连接。

配置如下:

1.恢复出厂配置

# 恢复出厂配置
odrv0.erase_configuration()

2.配置主板参数

# 配置AUX接口上的制动电阻值(常见的为0.47、2.0Ω),如没接则配置为0
odrv0.config.brake_resistance = 0# 配置低压保护阈值(V)
odrv0.config.dc_bus_undervoltage_trip_level = 8.0# 配置高压保护阈值(V)
odrv0.config.dc_bus_overvoltage_trip_level = 56.0# 配置过流保护阈值(A)
odrv0.config.dc_max_positive_current = 50.0# 配置反向电流阈值(电机制动产生的反向电流)(A)
odrv0.config.dc_max_negative_current = -5.0# 配置回充电流值(根据供电电池的参数配置,开关电源供电配置为0)(A)
odrv0.config.max_regen_current = 0# 保存参数
odrv0.save_configuration()

3.配置电机参数

# 配置电机0极对数
odrv0.axis0.motor.config.pole_pairs = 12# 配置电机0的限制电流(A)
odrv0.axis0.motor.config.current_lim = 9# 配置电机0的电流采样阈值(A)
odrv0.axis0.motor.config.requested_current_range = 20# 配置电机0校准时的电流阈值(根据自己电机的负载状况酌情配置)(A)
odrv0.axis0.motor.config.calibration_current = 6# 配置电机0类型。
# 目前支持两种电机:大电流电机(MOTOR_TYPE_HIGH_CURRENT)和云台电机(MOTOR_TYPE_GIMBAL)
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT# 配置电机1极对数
odrv0.axis1.motor.config.pole_pairs = 12# 配置电机1的限制电流(A)
odrv0.axis1.motor.config.current_lim = 9# 配置电机1的电流采样阈值(A)
odrv0.axis1.motor.config.requested_current_range = 20# 配置电机1校准时的电流阈值(根据自己电机的负载状况酌情配置)(A)
odrv0.axis1.motor.config.calibration_current = 6# 配置电机1类型。
# 目前支持两种电机:大电流电机(MOTOR_TYPE_HIGH_CURRENT)和云台电机(MOTOR_TYPE_GIMBAL)
odrv0.axis1.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT# 保存参数
odrv0.save_configuration()

4.配置编码器参数

# 配置电机0编码器类型。当前使用的是ABI正交(增量)编码器。
odrv0.axis0.encoder.config.mode = ENCODER_MODE_INCREMENTAL# 配置电机0编码器CPR(每转一圈,编码器的计数),为编码器线数*4
odrv0.axis0.encoder.config.cpr = 20000# 配置电机1编码器类型。当前使用的是ABI正交(增量)编码器。
odrv0.axis1.encoder.config.mode = ENCODER_MODE_INCREMENTAL# 配置电机1编码器CPR(每转一圈,编码器的计数),为编码器线数*4
odrv0.axis1.encoder.config.cpr = 20000# 保存参数
odrv0.save_configuration()

5.配置控制器参数(位置闭环模式、配置PID参数)

# 配置电机0控制模式,为位置闭环控制
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL# 配置电机0最大转速(转/秒)(电机kv值 * 电压 / 60)
odrv0.axis0.controller.config.vel_limit = 120# 配置位置环增益:20
odrv0.axis0.controller.config.pos_gain = 20# 配置速度环增益:0.05
odrv0.axis0.controller.config.vel_gain = 0.05# 配置积分增益:0.02
odrv0.axis0.controller.config.vel_integrator_gain = 0.02# 配置电机1控制模式,为位置闭环控制
odrv0.axis1.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL# 配置电机1最大转速(转/秒)(电机kv值 * 电压 / 60)
odrv0.axis1.controller.config.vel_limit = 120# 配置位置环增益:20
odrv0.axis1.controller.config.pos_gain = 20# 配置速度环增益:0.05
odrv0.axis1.controller.config.vel_gain = 0.05# 配置积分增益:0.02
odrv0.axis1.controller.config.vel_integrator_gain = 0.02# 保存参数
odrv0.save_configuration()# 重启驱动器
odrv0.reboot()

6.电机和编码器校准

# 进行电机0参数和编码器校准(运行后电机会发出哔~的一声,并电机会正转一圈再反转一圈)
odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE# 设置电机预校准。(不用每次上电都哔~的一声)
# 驱动器会将本次校准值保存,避免上电启动后自动校准,以加快启动速度。
odrv0.axis0.motor.config.pre_calibrated = True# 进行电机1参数和编码器校准(运行后电机会发出哔~的一声,并电机会正转一圈再反转一圈)
odrv0.axis1.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE# 设置电机预校准。(不用每次上电都哔~的一声)
# 驱动器会将本次校准值保存,避免上电启动后自动校准,以加快启动速度。
odrv0.axis1.motor.config.pre_calibrated = True
# 配置电机0为闭环模式
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL# 配置电机1为闭环模式
odrv0.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

进入闭环模式后,电机会有轻微的滋滋电流声。用手扭动电机,电机会产生反抗的力矩,松手后,电机会转回原来的位置。

如手拨后,如电机未回到原来位置,或在原来位置反复运动,或者能明显感受到过冲,都需要重调PID参数。

7.最后设置为上电自动校准,自动进入闭环。

# 设置ODrive电机0上电启动时,自动校准编码器
odrv0.axis0.config.startup_encoder_offset_calibration = True# 设置ODrive电机1上电启动时,自动校准编码器
odrv0.axis1.config.startup_encoder_offset_calibration = True后两句可不要,便于上位机控制
# 设置ODrive电机0上电启动时,自动进入闭环模式
//odrv0.axis0.config.startup_closed_loop_control = True
# 设置ODrive电机1上电启动时,自动进入闭环模式
//odrv0.axis1.config.startup_closed_loop_control = True# 保存参数
odrv0.save_configuration()# 重启驱动器
odrv0.reboot()

重启后,电机会自动进行编码器校准,正转一圈反转一圈归位,并自动进入闭环模式。之后可直接发送控制指令,来让电机运动。

8.下发控制指令、控制电机运行

# 配置电机0为闭环模式
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL# 配置电机1为闭环模式
odrv0.axis1.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL# 控制电机运行到10圈的位置
odrv0.axis0.controller.input_pos = 10# 控制电机运行到0圈的位置
odrv0.axis0.controller.input_pos = 0# 控制电机运行到-10圈的位置
odrv0.axis0.controller.input_pos = -10

9.释放电机

​
# 释放电机(释放后,电机退出闭环模式,外力可轻松拨动电机)
odrv0.axis0.requested_state = AXIS_STATE_IDLE# 配置电机为闭环模式
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL​

10.退出odrivetool

quit

11.故障排除

如果ODrive不能按预期运行,可以按以下方式排除错误:

运行odrivetool并输入dump_errors(odrv0)这将列出所有错误代码:

 上面会显示错误,再在网上搜索排除错误即可。

这篇关于odrive 3.6 v0.5.1 驱动TMOTOR MN4004-25的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/659105

相关文章

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

电脑驱动分类

电脑驱动程序(驱动程序)是操作系统与硬件设备之间的桥梁,用于使操作系统能够识别并与硬件设备进行通信。以下是常见的驱动分类: 1. 设备驱动程序 显示驱动程序:控制显卡和显示器的显示功能,负责图形渲染和屏幕显示。 示例:NVIDIA、AMD 显示驱动程序。打印机驱动程序:允许操作系统与打印机通信,控制打印任务。 示例:HP、Canon 打印机驱动程序。声卡驱动程序:管理音频输入和输出,与声卡硬件

麒麟系统安装GPU驱动

1.nvidia 1.1显卡驱动 本机显卡型号:nvidia rtx 3090 1.1.1下载驱动 打开 https://www.nvidia.cn/geforce/drivers/ 也可以直接使用下面这个地址下载 https://www.nvidia.com/download/driverResults.aspx/205464/en-us/ 1.1.3安装驱动 右击,

windows10 卸载网络驱动以及重新安装

右键桌面此电脑的图标,点击管理,设备管理器—网络适配器,找到下图中的驱动(不同的系统或者显卡会导致网卡驱动名称与下图不一样,多为Realtek开头),右键选择卸载设备,然后重启电脑,系统会自动重新安装驱动 新电脑首次安装驱动: 根据主板厂家,比如华硕,进入华硕官网,点击服务支持,点击下载中心,选择型号,点击右侧驱动程序和工具软件,选择windows版本,下载相应的驱动,下载完之后在对应文件中找

笔记整理—内核!启动!—kernel部分(1)驱动与内核的关系

首先,恭喜完成了uboot部分的内容整理,其次补充一点,uboot第一部分和第二部分的工作不是一定的,在不同的版本中,可能这个初始化早一点,那个的又放在了第二部分,版本不同,造成的工作顺序不同,但终归是要完成基本内容初始化并传参给kernel的。         那么至于驱动与内核的关系,用一张图来说明最适合不过:         驱动位于OS层的中下层与硬件相接。驱动是内

2025年25届计算机毕业设计:如何实现高校实验室Java SpringBoot教学管理系统

✍✍计算机毕业编程指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、Python、微信小程序、大数据实战项目集 ⚡⚡文末获取源码 文章目录 ⚡⚡文末获取源码高校实验室教学管理系统-研究背景高校实验室教学管理系