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

目录

  • 一、开环控制
    • 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、程序演示

注意,本节示例中的速度单位是电角度(rad/s),不是闭环控制中的速度单位(圈/秒),也不是SimpleFOC中的机械角度(rad/s)。

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


在这里插入图片描述

如果转速设置太大,电机会振动,可以调高 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.rhkb.cn/news/156943.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java极简设计模式》第08章:外观模式(Facade)

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

SpringBoot篇之集成Mybatis-plus

目录 前言一、Mybatis-plus介绍1.1 官网 二、代码生成器总结 前言 大家好,我是AK,整理的SpringBoot集成Mybatis-plus以及代码生成器的使用,时间原因简单的整理下,有问题的可以评论区见或私信我。 一、Mybatis-plus介绍 1.1 官网…

完整教程:Java+Vue+Websocket实现OSS文件上传进度条功能

引言 文件上传是Web应用开发中常见的需求之一,而实时显示文件上传的进度条可以提升用户体验。本教程将介绍如何使用Java后端和Vue前端实现文件上传进度条功能,借助阿里云的OSS服务进行文件上传。 技术栈 后端:Java、Spring Boot 、WebSock…

23种经典设计模式:单例模式篇(C++)

前言: 博主将从此篇单例模式开始逐一分享23种经典设计模式,并结合C为大家展示实际应用。内容将持续更新,希望大家持续关注与支持。 什么是单例模式? 单例模式是设计模式的一种(属于创建型模式 (Creational Pa…

PHP 员工工资管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 员工工资管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php员工工资管理系统 代码 https://download.csdn.net/download/qq_41221322/884215…

python+opencv+深度学习实现二维码识别 计算机竞赛

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 pythonopencv深度学习实现二维码识别 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:3分 该项目较为新颖&…

Python高效实现网站数据挖掘

在当今互联网时代,SEO对于网站的成功至关重要。而Python爬虫作为一种强大的工具,为网站SEO带来了革命性的改变。通过利用Python爬虫,我们可以高效地实现网站数据挖掘和关键词分析,从而优化网站的SEO策略。本文将为您详细介绍如何利…

竞赛选题 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) …

KubeVela跨地域的多集群管理方案

随着公司全球化战略的布局,业务呈点状分布在亚太、美东、欧洲等多个地域,云原生kubevela在跨地域多集群管控方面也遇到网络上的互通问题。 在公司网络规划上只允许一个区域的一个VPC跟另一个区域的一个VPC打通,同区域不同机房的网络都可以打通的网络架构基础上,由于一个区…

生产级Stable Diffusion AI服务部署指南【BentoML】

在本文中,我们将完成 BentoML 和 Diffusers 库之间的集成过程。 通过使用 Stable Diffusion 2.0 作为案例研究,你可以了解如何构建和部署生产就绪的 Stable Diffusion 服务。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 Stable Diffusion 2.0 …

睿趣科技:未来抖音开网店还有前景吗

随着科技的快速发展,电商平台已经成为了人们生活中不可或缺的一部分。在中国,抖音作为一个短视频平台,近年来迅速崛起,吸引了大量的用户和商家。那么,在未来,抖音是否还能为商家提供一个有效的电商平台呢?…

logicFlow 流程图编辑工具使用及开源地址

一、工具介绍 LogicFlow 是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow 支持前端研发自定义开发各种逻辑编排场景,如流程图、ER 图、BPMN 流程等。在工作审批配置、机器人逻辑编排、无…

VScode Invoke-Expression: 无法将参数绑定到参数“Command”,因为该参数为空字符串

打开vscode时发生错误:Invoke-Expression : 无法将参数绑定到参数“Command”,因为该参数为空字符串。 解决办法:在anaconda prompt base中输入: conda upgrade -n base -c defaults --override-channels conda

MySQL常用脚本

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 &#x1…

Red Giant Trapcode Suite 红巨星粒子插件

Red Giant Trapcode Suite是一款用于在After Effects中模拟和建模3D粒子和效果的软件,由Red Giant Software公司开发。 该软件包包含11种不同的工具,可以帮助用户模拟火、水、烟、雪等粒子效果,以及创建有机视觉效果和3D元素。它还支持在AE与…

Jetson Orin NX 开发指南(9): MAVROS 的安装与配置

一、前言 由于 Jetson 系列开发板常作为自主无人机的机载电脑,而无人机硬件平台如 PX4 和 ArduPilot 等通过 MAVLink 进行发布无人机状态和位姿等信息,要实现机载电脑与 MAVLink 的通信,必须借助 Mavros 功能包,因此,…

PG14归档失败解决办法archiver failed on wal_lsn

问题描述 昨晚RepmgrPG14主备主库因wal日志撑爆磁盘,删除主库过期wal文件重做备库后上午进行主备状态巡查,主库向备库发送wal文件正常,但是查主库状态时发现显示有1条归档失败的记录。 postgres: archiver failed on 000000010000006F000000…

Tomcat的安装和配置

一.Tomcat下载:去Tomcat官网地址 在左侧Download中选择你需要下载的版本,这里我选择Tomcat9 根据电脑系统是32位还是64位选择,这里我选择64-bit Windows zip,点击即可下载 下载后直接解压,这里我解压在E盘的computer…

行业追踪,2023-10-12

自动复盘 2023-10-12 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

以单颗CMOS摄像头重构三维场景,维悟光子发布单目红外3D成像模组

维悟光子近期发布全新单目红外3D成像模组,现可提供下游用户进行测试导入。通过结合微纳光学元件编码和人工智能算法解码,维悟光子单目红外3D成像模组采用单颗摄像头,通过单帧拍摄,可同时获取像素级配准的3D点云和红外图像信息,可被应用于机器人、生物识别等广阔领域。 市场…