ODrive移植keil(五)—— 开环控制和电流变换

news2024/11/17 6:51:20

目录

  • 一、开环控制
    • 1.1、控制原理
    • 1.2、硬件接线
    • 1.3、代码说明
    • 1.4、程序演示
    • 1.5、程序架构的体现
  • 二、电流变换
    • 2.1、理论说明
    • 2.2、代码说明


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

一、开环控制

在SimpleFOC系列中有开环控制的教程,SimpleFOC移植STM32(二)—— 开环控制,可以对比参考。

1.1、控制原理

在这里插入图片描述

1、开环控制,只能使用电压模式,电流模式需要采样电流,那就是闭环了,
2、一般设置Ud=0,所以只需设置Uq。在SimpleFOC中 voltage_limit最终赋值Uq,在ODrive中 target_voltage_最终赋值Uq,
3、Uq设置太大,电机发热严重,Uq设置太小,电机没劲转不动或者转不快,所以一定要根据电机相电阻设置大小,
4、θ不是当前的角度,是目标角度,就是下次计算时的角度。

1.2、硬件接线

在这里插入图片描述

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

1.3、代码说明

1、开环控制在TIM1更新中断中调用,下图:
在这里插入图片描述

2、开环控制代码,下图:
相比simpleFOC的开环运算,增加电流、电压和速度的爬升率设置,启停阶段电机转动更平稳,
在这里插入图片描述

3、Park逆变换,
由dq变为αβ,最终送入SVPWM,
在这里插入图片描述

1.4、程序演示

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

如果转速设置太大,电机会振动,可以调高 target_voltage_ 以达到更大的转速,但是注意电机电流,注意发热。

  • 电压爬升率和速度爬升率如果设置的小一点,可以看到电机逐渐加速的过程,
  • 云台电机的target_voltage_设置可以更大一点,能更清楚的看到扭矩逐渐增大的过程,
  • 开环控制虽然简单,却是入门第一关,
  • 对于电机新手,可以先用云台电机,因为电机相电阻更大,不容易烧坏,
  • 开环控制主要用于电机上电校准和无刷电机的启动阶段,不是控制常态,不用深入研究。

1.5、程序架构的体现

ODrive代码开源但却难以看懂,我觉得原因有以下几个:

  • 1、采用FreeRTOS系统,没用大家习惯的裸奔,
  • 2、C++编程,单片机代码C是主流,即使有嵌入式工程师善长C++,但却不懂硬件,代码看起来一样云里雾里,
  • 3、程序架构与众不同。

ODrive的程序架构,也是我在基本移植完代码后才焕然大悟的,如果事先有架构意识,不至于看代码的时候那么痛苦。
下面以开环控制为例,说明其架构特点,

  • openloop_controller_update()函数运算后的变量赋给FOC_voltage()函数,这是常用的代码写作方式,下图:
    在这里插入图片描述
  • 为了说明程序架构,我又做了一个开环控制代码,
    在这里插入图片描述
  • 第二个代码,仿照官方架构,openloop_controller_update()函数运算后的变量没有直接赋给FOC_voltage()函数,下图:
    在这里插入图片描述
    而是在准备开环控制的时候,指针指向开环变量,下图:
    在这里插入图片描述
    然后再将指针传递给FOC_voltage()函数的变量,下图:
    在这里插入图片描述

总结来说:

  • 第一个代码中,openloop_controller_update()函数变量给FOC_voltage()函数用,整个代码只有一套变量,
  • 第二个代码中,openloop_controller_update()函数有自己的变量,FOC_voltage()也有自己的变量,两个变量通过指针链接。

相当于多了一个二传手,这样做肯定降低了效率,甚至觉得完全就是多此一举,但为什么要这么做,大概是方便功能拓展和多人合作。我觉得这个差别有点像个体户和大型跨国公司,个体户理解不了ERP系统一样。

最初移植代码的时候我是打算采用第一种方案的,但是考虑到代码移植后大家的认可度,我还是决定和官方的保持一致。
文笔有限,还不懂的请认真对比两个代码。

二、电流变换

电流变换实际上要到第七篇教程编码器校准时才会涉及到,此处提前讲解,以满足你们那渴望的心,

2.1、理论说明

1、几乎所有讲FOC的文章,都会有这样的框图,所以此处不再多讲。

在这里插入图片描述
在这里插入图片描述

2、重点:“θ”这个参数,框图中看起来像是一个参数两处调用,实际上这是两个角度,
Park变换的θ是当前读出的角度,而Park逆变换是下次FOC计算时的角度(当前角度+估算的下次转过的角度),

  • 在simpleFOC中,没有估算下次转过的角度,只是简单的加了_PI_2,我觉得这也是限制了SimpleFOC最大转速的一个原因,因为转速足够快的话,一个电周期完全有可能转过_PI_2个电角度。
    在这里插入图片描述
  • 在ODrive中则经过了精确的计算,
    在这里插入图片描述

2.2、代码说明

  • 电流变换部分移植v0.5.1,因为v0.5.6的变换被分开写入了多个不同的函数,没有0.5.1的简单清晰,
  • 本节只为方便观看代码,稍后代码中的变换仍采用v0.5.6版本,
  • 0.5.1和0.5.6都是好代码,版本升级只能说明创作者有不同的目标,并不是代码就一定越来越好。

在这里插入图片描述
在这里插入图片描述

  • ODrive的力矩模式非常稳定,对比SimpleFOC的电流环就非常拉垮,几乎没有实用价值。
  • 我试图把ODrive的电流环移植到SimpleFOC中,但是移植了一些后就写不下去了,因为涉及到了程序架构。SimpleFOC是Arduino环境,设计的目标是跨平台运行,几乎不用中断,代码是流水线式的执行,强行移植就不再是SimpleFOC了。






(完)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1082645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 免杀教程

免杀练习两年半 目录 msfvenom 自动生成 自带免杀 工具免杀 Thefatrat venom 工具小记 加壳 源码免杀 加壳 源码混淆 数据通信 对抗反编译 反编译工具崩溃 ZIP文件格式对抗 AndroidManifest.xml 对抗反编译小结 VT检测 https://www.virustotal.com/gui/home/up…

Webpack 解决:Error: error:0308010C:digital envelope routines::unsupported 的问题

1、问题描述: 其一、报错为: Error: error:0308010C:digital envelope routines::unsupported 中文为: 错误:错误:0308010C:数字信封例程::不支持 其二、问题描述为: 在项目打包的时候 np…

Mysql-一条查询sql时如何执行的

TOC一条sql是如何执行的 Mysql的基本架构 如图所示,mysql可以分为server层和存储引擎两部分 server层:涵盖着MySQL的大多数核心服务功能,内置函数,存储过程、触发器、视图等存储引擎:数据的存储和提取;支…

K8s Kubernetes Namespave Pod Label Deployment Service 实战

本章节将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其进行访问。 Namespace Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下,kubernetes集群中…

LODOP打印条形码WEB不预览直接打印

一&#xff1a;安装CLodop_Setup_for_Win32NT.exe 二&#xff1a;页面上引用<script src"/JS/LodopFuncs.js"></script> 三&#xff1a;body里加上控件&#xff0c; <body><object id"LODOP1" classid"clsid:2105C259-1E0C-4…

MATLAB算法实战应用案例精讲-【优化算法】树木生长算法(TGA)(附MATLAB代码实现)

前言 Armin Cheraghalipour 根据树木生长的特点于2017 年提出了一种新的元启发式优化算法TGA该算将始定量的群按照解的适应度从高到低排序,分成4组具有不同功能的种群。每次迭代分别进行处理。 算法原理 算法流程图 代码实现 MATLAB TGA.m % "Tree growth algorithm…

STM32:GPIO模拟SPI驱动ADS8361

ADS8361是TI公司开发的一款模拟量输入芯片。ADS8361有四种工作模式&#xff0c;本文主要针对模式三进行通信驱动。官方方案使用两路SPI来通信&#xff0c;一路SPI Master&#xff0c;一路SPI Slave。我在使用STM32主控芯片的两路SPI进行通信的时候&#xff0c;发现只有SPI Mast…

Vuex基础使用存取值+异步请求

一.Vuex简介 vuex是什么&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 什么情况使用 Vuex&#xff1f; Vuex 可以帮助我们管理共享状态&#…

如何正确的关闭Redis服务器

Redis官方原生版本是在Linux平台上开发和测试的&#xff0c;但是大多数初学者都是使用Windows系统来学习如何开发的。因此&#xff0c;官方提供了一个叫做“Microsoft Open Tech Redis”的项目&#xff0c;该项目专门为Windows平台提供了一个官方支持的Redis版本&#xff0c;但…

第一天商城项目

复盘 1.maven高级部分聚合和继承 maven聚合工程(深度剖析)_一宿君的博客-CSDN博客 2.yml配置文件 mybatis mybatis: mapper-locations: classpath:mappers/*mapper.xml mapper-locations&#xff1a;这是一个子键&#xff0c;用于指定MyBatis映射文件&#xff08;Mapper XML…

单片机课程设计(Integrate就医服务平台/医院信息化平台)

目录 摘要 改善现有门诊流程的对策 一、设计任务 二、整机方案和论证 三、系统各模块设计与理论分析 3.1.1、触摸屏及LCD显示的工作原理 3.1.2、语音对讲模块设计 3.1.3、语音/文本转化模块设计 3.1.4、按键模组设计 3.1.5、存储模块设计 3.1.6、USB模组设计 3.1.7…

Seata入门系列【4】undo_log、global_table、branch_table、lock_table字段及作用详解

1 客户端 1.1 undo_log 在AT模式中&#xff0c;需要在参与全局事务的数据库中&#xff0c;添加一个undo_log表&#xff0c;建表语句如下&#xff1a; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for undo_log -- --…

20比较类的一种内在逻辑

我们平时会直接在idle里面去写类似于 10>6,但是其实仔细思考一下&#xff0c;10和6是int的实例对象&#xff0c;感觉学逻辑真的比单纯学代码有用&#xff0c;参照之前的那个图&#xff0c;多去想一下逻辑其实真的很好&#xff01; python3其实是这样不支持的~&#xff08;…

2023年9月Web3行业月度发展报告区块链篇 | 陀螺科技会员专享

9月是加密市场的活动月&#xff0c;斯坦福区块链周、Token2049等大型活动相继举办&#xff0c;后者更是创下超过1万人的历史最高纪录&#xff0c;成为了全球最大的Web3活动。在本次Token2049上&#xff0c;RWA、支付以及出入金成为了讨论度最多的活动。尽管活动如火如荼&#x…

Ps:画布大小

Ps菜单&#xff1a;图像/画布大小 Image/Canvas Size 快捷键&#xff1a;Ctrl Alt C 画布 Canvas是存放图像的容器&#xff0c;所以改变画布大小对原来的图像大小不会造成影响。除了画布大小 Canvas Size命令&#xff0c;画板工具、裁剪工具等也可以改变画布的大小&#xff…

金和OA C6任意文件读取漏洞 复现[附POC]

文章目录 金和OA C6任意文件读取漏洞 复现[附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 金和OA C6任意文件读取漏洞 复现[附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试…

无人机控制的研究现状及关键技术

无人机作为一种新型的航空器具&#xff0c;已经在军事、民用和科研等领域得到了广泛的应用。本文综述了无人机控制的研究现状及关键技术&#xff0c;包括无人机的应用领域、无人机的控制算法等方面。最后&#xff0c;对未来无人机控制的发展趋势进行了展望。 关键词&#xff1…

适用于Windows的远程传输大文件软件!

​AnyViewer可在设备之间快速的远程传输文件&#xff0c;并支持远程传输大文件&#xff0c;传输速度可达10MB/S&#xff0c;同时&#xff0c;还可以传输单个文件不超过1TB的文件&#xff0c;并它基于椭圆曲线加密&#xff08;ECC&#xff09;加密&#xff0c;可保护您的文件不被…

【AI】Interesting Applications

文章目录 【盘古】【嗜睡检测】【3D AI 生成】多模态——指哪打哪【AlphaDev&#xff1a;汇编版 AlphaZero】【ChatExcel】 【盘古】 2023年7月&#xff0c;华为正式发布盘古大模型3.0&#xff0c;并提出3层模型架构。 L0&#xff1a;基础大模型&#xff0c;包括自然语言、视觉…

Qt中常用容器组控件介绍和实操

目录 常用容器组控件(Containers)&#xff1a; 1.Group Box 2.Scroll Area 3.Tab Widget 4.Frame 5.Dock Widget 常用容器组控件(Containers)&#xff1a; 控件名称依次解释如下(常用的用红色标出&#xff09;: Group Box: 组合框: 提供带有标题的组合框框架Scroll Area…