ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定

2023-10-12 12:15

本文主要是介绍ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、硬件接线
  • 二、程序演示
    • 2.1、官方代码操作
    • 2.2、移植后的代码操作
  • 三、测量原理
    • 3.1、测量电阻
    • 3.2、测量电感
  • 四、代码说明
  • 五、电流环PI参数整定


ODrive、VESC和SimpleFOC 教程链接汇总:请点击

一、硬件接线

在这里插入图片描述

驱动板 购买链接:某宝购买
电机 购买链接:某宝购买

二、程序演示

2.1、官方代码操作

请先将驱动板刷机v0.5.6版本,当然也可以v0.5.1版本,结果是一样的,
按照标准ODrive操作,下图:

在这里插入图片描述

odrv0.erase_configuration()
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.calibration_current = 5
odrv0.save_configuration()
odrv0.reboot()   //v0.5.1版本需要这个指令odrv0.axis0.requested_state = AXIS_STATE_MOTOR_CALIBRATION
odrv0.axis0.error
odrv0.axis0.motor.config.phase_resistance
odrv0.axis0.motor.config.phase_inductance


只是测量电阻电感,不需要配置太多参数,
1、测量的电机一定要Hign_Current类型,云台电机不需要检测,会报错,
2、校准电流如果设置太大,电机可能会发热,太小测不准。

2.2、移植后的代码操作

  • 在MyProject.h文件中设置参数,下图:
    在这里插入图片描述

  • 编译烧写,

  • 发送指令“C”(不需要回车换行),3秒钟后电机“嘀”一声,校准完毕,打印测量结果,同时打印整定后的电流环PI参数。下图:
    在这里插入图片描述

三、测量原理

3.1、测量电阻

测量电阻的原理很简单,下图:
在ODrive代码中,设定了测量电流 I,根据检测到的电流不断调整 U,大概3秒钟,最终稳定电流到设定值,
在这里插入图片描述

3.2、测量电感

我没有找到理论依据,只能讲下ODrive的测量过程:
1、施加固定电压 R_calib_max_voltage(默认为2),
2、输出电压交替调整方向,相当于电感上的电压一下正一下负,
3、待稳定后,测量相邻两次电流差为 dI,相邻两次间隔时间为dt,如下公式求出电感。
4、因为线圈两端的电压交替变换,使得电机产生振动,发出“嘀”的一声。
在这里插入图片描述

四、代码说明

电阻电感测量的相关代码在motor.c文件中,可自行查看,上面也讲过了原理,所以就不再细说,
此处主要讲下测量函数调用的过程,这也是我迷惑了我很久的部分,

4.1、主循环中等待3秒,下图:
在这里插入图片描述

4.2、测量工作在中断中进行,下图:
在这里插入图片描述

4.3、电流变换和SVPWM也在更新中断中,所以会与测量函数产生冲突,用标志位的方式处理,下图:
在这里插入图片描述

4.4、看上面这几行代码,也许你会觉得并没有特别之处,
但在官方代码中,电阻电感测量部分的变量和函数全部被打包为“类”,代码运行直接调用类,函数被函数指针指向后调用,非常具有隐蔽性,所以很长时间里,只是看到代码运行好像是这个逻辑,但却不明白怎么实现的:
在这里插入图片描述
在这里插入图片描述

最初移植的时候,我也用函数指针实现中断中的函数运行,但是发现函数指针太不直观了,非常容易被忽视和忘记更改指针,所以用了标志位的方法,不高级但却实用。

五、电流环PI参数整定

在这里插入图片描述

1、电流环的PI参数通过电阻电感计算生成,
2、电阻电感测量时肯定会有误差,如果不同电路,不同MOS测试,误差肯定更大,
3、但闭环控制的效果非常好,没有因为误差导致失控,
4、把PI参数放入SimpleFOC代码中,没有任何改善,
5、我尝试查找电流环能够如此稳定的原因,并希望用来改善SimpleFOC的控制效果,但没有实现,
6、只能说ODrive的架构和算法相得益彰,拆开就失效了。



(完)



这篇关于ODrive移植keil(六)—— 测量电阻电感和电流环PI参数整定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

java如何调用kettle设置变量和参数

《java如何调用kettle设置变量和参数》文章简要介绍了如何在Java中调用Kettle,并重点讨论了变量和参数的区别,以及在Java代码中如何正确设置和使用这些变量,避免覆盖Kettle中已设置... 目录Java调用kettle设置变量和参数java代码中变量会覆盖kettle里面设置的变量总结ja

spring 参数校验Validation示例详解

《spring参数校验Validation示例详解》Spring提供了Validation工具类来实现对客户端传来的请求参数的有效校验,本文给大家介绍spring参数校验Validation示例详... 目录前言一、Validation常见的校验注解二、Validation的简单应用三、分组校验四、自定义校

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须