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

相关文章

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --

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