ODrive应用 #4 配置参数&指令「建议收藏」

参数与指令我们将使用作为每个ODrive对象的占位符。每个ODrive控制器都是一个ODrive对象。在odrivetool中通常是odrv0。此外,我们将<axis>用作每个轴的占位符,这是ODrive对象的属性(例如odrv0.axis0)。轴表示电动机的连接位置。(M0和axis0对应,M1和axis1对应)文章目录参数与指令轴相应的指令状态机启动程序控制模式控制指令…

大家好,又见面了,我是你们的朋友全栈君。

配置参数&指令

我们将使用作为每个ODrive对象的占位符。 每个ODrive控制器都是一个ODrive对象。 在odrivetool中通常是odrv0。 此外,我们将<axis>用作每个轴的占位符,这是ODrive对象的属性(例如odrv0.axis0)。 轴表示电动机的连接位置。(M0和axis0对应,M1和axis1对应)

轴相应的指令

在大多数情况下,可以单独控制ODrive上的两个轴。

状态机

轴的当前状态由<axis>.current_state指示。 用户可以使用<axis>.requested_state请求切换到其它状态。 启动后的默认状态为AXIS_STATE_IDLE。

  1. AXIS_STATE_IDLE 禁用电机PWM,不执行任何操作。
  2. AXIS_STATE_STARTUP_SEQUENCE 运行启动程序。
  3. AXIS_STATE_FULL_CALIBRATION_SEQUENCE 运行电机校准,编码器偏移校准(如果编码器索引信号启用的话同时进行索引信号的搜索,如果要启用编码器索引脉冲信号设置 <axis>.encoder.config.use_index 为 True即可)。
  4. AXIS_STATE_MOTOR_CALIBRATION 测量电机的相电阻和相电感。
    • 要存储测量结果,请将<axis> .motor.config.pre_calibrated设置为True,然后保存配置。 之后,您无需在下次启动时运行电机校准。
    • 运行此测量之后 <axis>.motor.config.phase_resistance 和 <axis>.motor.config.phase_inductance将会被修改。
  5. AXIS_STATE_SENSORLESS_CONTROL 启动无传感器运行。
  6. AXIS_STATE_ENCODER_INDEX_SEARCH 电机沿一个方向旋转,直到搜索到编码器索引。 仅当<axis> .encoder.config.use_index为True时才能进入此状态。
  7. AXIS_STATE_ENCODER_OFFSET_CALIBRATION 电机沿一个方向旋转几秒钟,然后反方向旋转以测量编码器位置和电机电气相位之间的偏移。
    • 仅当电机已被校准(<axis> .motor.is_calibrated为True)时才能进入此状态。
    • 成功执行完编码器校准之后<axis>.encoder.is_ready将会变为True。
  8. AXIS_STATE_CLOSED_LOOP_CONTROL 电机闭环运行模式。
    • 该状态的具体运行和控制模式有关。
    • 仅当电机已校准(<axis> .motor.is_calibrated)并且编码器已准备好(<axis> .encoder.is_ready)时才能进入此状态。

启动程序

默认情况下,ODrive在启动后执行任何操作,并立即进入空闲状态。

想要更改启动后的程序,请将您想要启动后被执行的项置为True。

ODrive启动后将按以下所示被设置为True的进行执行。

  • <axis>.config.startup_motor_calibration
  • <axis>.config.startup_encoder_index_search
  • <axis>.config.startup_encoder_offset_calibration
  • <axis>.config.startup_closed_loop_control
  • <axis>.config.startup_sensorless_control

有关每个状态的说明,请参见状态机。

控制模式

默认控制模式是位置控制。
如果要使用其他模式,则可以设置<axis>.controller.config.control_mode为如下的任意值:

  • CTRL_MODE_POSITION_CONTROL
  • CTRL_MODE_VELOCITY_CONTROL
  • CTRL_MODE_CURRENT_CONTROL
  • CTRL_MODE_VOLTAGE_CONTROL – 通常不使用此模式

控制指令

  • <axis>.controller.pos_setpoint = <encoder_counts>
  • <axis>.controller.vel_setpoint = <encoder_counts/s>
  • <axis>.controller.current_setpoint = <current_in_A>

系统监控指令

编码器位置和速度

  • 使用 <axis>.encoder.pos_estimate [counts] 来查看当前编码器的位置
  • 使用 <axis>.encoder.vel_estimate [counts/s]来查看当前电机转速

电机电流和转矩估算

  • 使用 <axis>.motor.current_control.Iq_setpoint [A] 来查看当前设置的电机电流
  • 使用 <axis>.motor.current_control.Iq_measured [A]来查看当前电机的实际电流,如果您发现这个数据有噪声,可以直接用设置的电机电流来替代,因为在给定电压下电机没有达到最大转速的情况下,电机实际电流应该几乎等于设置的电机电流,否则电机的实际电流可能小于设置的目标电流。
    通过电机电流和电机的KV值,可以使用以下关系估算电机的转矩:转矩[N.m] = 8.27 *电流[A] / KV。

通用系统指令

保存配置

所有带有.config的变量都可以保存到ODrive的非易失性存储器中,因此在断电后它们仍然存在。 相关命令为:

  • <odrv>.save_configuration(): 保存配置到ODrive的非易失性存储器中。
  • <odrv>.erase_configuration(): 将所有配置重置为出厂默认值。仅在重启后才有效。 该命令会使电机停止(如果正在运行),并且USB通信会暂时中断。 这是因为擦除闪存会使微控制器挂起几秒钟。

诊断ODrive

  • <odrv>.serial_number: 唯一标识您ODrive的序列号。 当以大写十六进制(hex(<odrv> .serial_number).upper()))打印时,该串序列号与USB描述符指示的序列号相同。
  • <odrv>.fw_version_major, <odrv>.fw_version_minor, <odrv>.fw_version_revision: ODrive的固件版本。
  • <odrv>.hw_version_major, <odrv>.hw_version_minor, <odrv>.hw_version_revision: ODrive的硬件版本。

设置无传感器模式运行

ODrive可以在没有编码器/霍尔反馈的情况下运行,但是有最低转速限制,通常约为几千转/分。
此模式下和使用编码器模式下转速的单位不再是counts/s,而是电机的电气角速度 rad/s。控制增益的单位也会有所不同。 例如, vel_gain 单位为 A/(rad/s)而不再是 A/(count/s)。
举个例子,假设您有一个7对极的电机,并且想以3000 RPM的转速运行。 vel_setpoint应该被设置为3000 * 2 * pi / 60 * 7 = 2199 rad/s。
以下是建议的参数配置。 请注意,您必须正确设置pm_flux_linkage才能使无传感器模式正常工作。

odrv0.axis0.controller.config.vel_gain = 0.01
odrv0.axis0.controller.config.vel_integrator_gain = 0.05
odrv0.axis0.controller.config.control_mode = 2
odrv0.axis0.controller.vel_setpoint = 400
odrv0.axis0.motor.config.direction = 1
odrv0.axis0.sensorless_estimator.config.pm_flux_linkage = 5.51328895422 / (<pole pairs> * <motor kv>)

使用以下指令来启动电机:

<axis>.requested_state = AXIS_STATE_SENSORLESS_CONTROL

如果您有任何问题或疑问,欢迎您加入ODrive社区或QQ群 851421965 进行交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129473.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • pycharm是下载社区版本的还是专业版本_pycharm教育版和社区版功能一样吗

    pycharm是下载社区版本的还是专业版本_pycharm教育版和社区版功能一样吗PyCharm是一种PythonIDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。PyCharm最常用的两个版本就是社区版和专业版,这两个版本区别如下:专业版和社区版的区别除了这两版本之外,还有一个版本就是教育版,这三个有什么区别呢?1.收费不同首先就是三者的收费不同:专业版是收费的,另外两个是免费的。2.功能不同pyCharm专业版是功能…

    2022年8月25日
  • MySQL连接查询

    MySQL连接查询首先创建两个表fruits表,包含水果id、名字、价格orders表,包含id和订单号(num)1.内连接查询(INNORJOIN)使用普通sql语句selectfruits.id,name,price,numfromfruits,orderswherefruits.id=orders.id;使用内连接查询语句(结果与上图相同)s…

    2022年4月30日
  • js 正则替换换行符

    js 正则替换换行符vardiv=document.getElementById(‘div’);vars=div.innerHTML.replace(/(\n|\r|(\r\n)|(\u0085)|(\u2028)|(\u2029))/g,””);//g的意思是:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。//取消了空格之后在做其他的替换才可以,否则不能替换

    2022年5月24日
  • Quartus II 13.1的安装及使用

    Quartus II 13.1的安装及使用QuartusII的安装及使用前言一、QuartusII的下载二、QuartusII的安装三、QuartusII的注册四、QuartusII的使用(一)相关驱动的配置(二)使用流程的认识(三)使用过程总结前言本文章是对QuartusII13.1的安装及使用方法的介绍说明。一、QuartusII的下载百度网盘下载链接:https://pan.baidu.com/s/1a9d-bq9RZmWrRV542X4IEA提取码:ifte说明:本链接来自于正点原子官方资料下载二、

    2022年10月16日
  • 如何科学高效的学习Web前端开发?[通俗易懂]

    近几年,web前端开发工程师越来越火了,薪资待遇也快接近后端开发工程师了。很多准备入行前端开发工程师的小伙伴们,不知道准备得怎么样了呢?有的朋友在想方设法的学习,争取在年后的金九银十能靠实力找到一份满意的工作!有的小伙伴在准备准备回家过个团圆年,来年再战!还有的小伙伴很迷茫,想学前端,却没有方向!这篇文章,就是教你零基础如何高效的学习web前端。web前端开发(也称为客户端开发)主要是通过html,css,JavaScript,ajax,DOM等前端技术,实现网站在客服端的正确显示及交互功能。在早期.

    2022年4月12日
  • python移动app开发_神奇的Kivy,让Python快速开发移动app

    python移动app开发_神奇的Kivy,让Python快速开发移动app随着移动互联网的不断发展,手机、Pad等移动终端已经被普遍使用,充斥在人们的工作、学习和生活中,越来越多的程序都转向移动终端,各类app应用相拥而至。Kivy作为Python的Android和IOS的app应用开发利器,有着跨平台开发优势,很快得到了普遍运用,并逐渐占据了核心地位。下面我们就看看用Python的Kivy模块是如何开发移动App应用的。Kivy的安装。与Python的其他模块安装一样…

    2022年5月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号