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通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

史上最全nginx详细参数配置

《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题