直流无刷电机FOC控制原语

2024-01-22 03:28

本文主要是介绍直流无刷电机FOC控制原语,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

直流无刷电机FOC控制原语

文章目录

  • 直流无刷电机FOC控制原语
    • 1. 前言
    • 2. FOC控制原理
      • 2.1 磁的问题
      • 2.2 电的问题
    • 3. 如何获取 `I_feedback` ?
    • 4. 如何调整 `I_feedback`?
    • 5. 总结

1. 前言

在这之前,我写了三篇关于直流无刷电机 FOC 矢量控制的文章,从理论驱动原理到实际控制实现。三篇博客发布后,受到大家的广泛好评,我也受到大家很大的鼓舞,回顾之前的三篇文章以及结合各位粉丝的留言意见,我觉得对于FOC的分享还可以有所补充,故又抽时间整理了此篇博文,希望对有幸阅读到此篇文章的你有所帮助。

在之前的写的那几篇文章中我们通过数学以及物理推导,详细阐述了FOC的理论以及实现过程,基本原理简单但内容较为深入;而在此篇博文中,我将从另外一个角度,站在更上层的视角分享FOC的实现原理,我将此篇文章称之为《直流无刷电机FOC控制原语》,其目的是让更多人可以快速理解什么是FOC控制,FOC控制是如何实现的,读完此篇文章,你将如同拿到了一张沙漠里的地图,帮助你快速建立起FOC控制的一个完整概念,让你学习FOC过程中不再迷失方向!

2. FOC控制原理

2.1 磁的问题

关于直流无刷电机的FOC控制其实很简单,整个核心其实就是在下面这一张图里面:
在这里插入图片描述

FOC 矢量控制原理如上图所示,我们已采用转子采用永磁体的电机举例,其转子上的多对磁铁最终会产生一个特定的合成磁场,也就是我们上图中的转子磁场。

而实现FOC控制,其本质就是通过控制U V W三相的通电顺序,根据电生磁的物理特性,产生一个上图中的合成磁场,此合成磁场与转子磁场需要刚好呈90°角时才能使得磁力的做功最大。

但是电机不是一直不动的,电机一直在转动,也就是转子在转动,对应的转子磁场也就在转动,因此我们需要做的是,不断的调整我们的合成磁场的方向,以保证合成磁场一直与转子磁场呈90°,保证磁力做功最大。

但是在实际中,我们往往不能向控制通电一样很方便的直接控制磁场的以及直接检测磁场,但根据物理学基础,可以电生磁,也可以由磁生电。故我们可以将磁的问题转换到电上面去,通过控制电进而控制磁,从而最终实现我们的无刷电机矢量控制。

2.2 电的问题

在这里插入图片描述

我们将磁的问题转化成电的问题,如上图,乍一看看不懂,没关系这很正常,慢慢看完后面的内容你就懂了!

结合上述图,我们通过问答的方式帮助讲解几个关键的问题,如下:

  • FOC矢量控制的本质?
    • 控制电机内部的磁场,通过控制U V W通电产生一个合成磁场,通过磁力吸引转子磁铁转动。转子磁铁可以是永磁体;也可以电磁场,所谓电磁场也就是由线圈绕制,通过线圈通电产生。
  • 磁场如何控制?又如何检测?
    • 直接检测和控制磁场都是复杂且困难的,但我们可以通过别的方式实现;从上述描述可知,磁场是我们通过控制电产生的,同样反馈我们也可以通过检测电信号实现;故磁的问题可以通过转变为电的问题来实现。
    • 最终控制磁场变成了控制电流,所以FOC矢量控制的本质又可以转变为:
      • 根据反馈电流 I_feedback 修正我们的输出已控制反馈达到 I_target
  • 如何控制输出?
    • 通过调节合成磁场的大小以及方向调整输出
  • 如何调节合成磁场?
    • 通过控制电机U V W三相通电,根据电生磁的基本物理特性,通过控制通电顺序及时间,每次通电都会产生一个磁力,我们可以将其用矢量表示,而通过矢量的合成(矢量相加)即可得到我们的最终需要的合成磁力
  • 如何精准控制使得反馈 I_target 刚好等于或近似等于我们的目标 I_feedback
    • 此处可使用适当的算法实现,最常用的也就是PID控制算法

自此,如何实现FOC矢量控制的问题就转变为了:如何获取 I_feedback 以及如何调整 I_feedback

3. 如何获取 I_feedback

获取 I_feedback 呢?其实这个很简单,也就是几个坐标系统转换的问题,怎么转化呢?其实就是高中力的分解与合成。

获取 I_feedback 主要分为以下几大步骤:
(此处对于电流采用方案不做过多讲解,本篇博文重点讲述实现原理)

  1. 通过电流检测IC或者电阻采样等方案,我们可以得到U V W三相的电流,此时的U V W三相电流位于U-V-W 三相坐标系;根据无刷电机特性,电机转动时的 Ia Ib Ic 将呈正弦变化
    在这里插入图片描述

  2. 之后我们将 U V W三相电流通过 clark变换 ,转化到 α-β 直角坐标系,将U V W三相在α-β 直角坐标系上进行 “力的分解” 得到
    在这里插入图片描述

  3. 此时在 α-β 直角坐标系 中,Iα 和 Iβ 仍然呈线程正弦变化,呈现出正弦变化的数据不利于我们进行算法计算,我们需要想办法将其转化为“常数”,这样才有利于我们计算
    在这里插入图片描述

  4. 电机转动时,Iα 和 Iβ 仍然呈线程正弦变化,且与角度有关,那如果我们将 Iα 和 Iβ 所在的 α-β 直角坐标系和角度结合起来,将 α-β 直角坐标系 跟着电机转子角度一起转动,那么在旋转的 α 和 β 轴上的分量会发生怎样的变化呢?因此我们将 Iα 和 Iβ 分解到旋转的 q_d 旋转坐标系上,这就是 park变换
    在这里插入图片描述

  5. 经过 park变化 之后,我们发现之前呈现的 Iα 和 Iβ 分解到 q_d 旋转坐标系 中的 Iq 和 Id 之后,Iq 以及 Id 不再呈正弦变化,变为一个常数。

  6. 此外,由于 q_d 旋转坐标系 是跟着转子一起转动的,d轴方向将一直与转子磁场方向平行,而q轴方向将一直与合成磁场方向在平行!

  7. 还记得我们前面说过:为了使磁力做功效率最大,我们需要尽可能的使得合成磁场方向与转子磁场方向垂直,因此我们只需要尽可能控制 Id 为0 使得效率最大,控制 Iq 大小进而控制磁力大小,进而控制电机转速即可!

整个完整过程如下:
在这里插入图片描述

上述变化中虽然没有提到 I_feedback,但是其实一直都是围绕着 I_feedback 展开,经过 Park变化 之后的 IqId 不就是 I_feedback 吗!( I_feedback是一个抽象概念,而Iq和Id是其实例罢了,我们可以将 IqId 分别称之为 Iq_feedback, Id_feedback )

4. 如何调整 I_feedback

经过坐标变化之后拿到了 Iq 和 Id,也即获取了 I_feedback,那我们又是如何调节 I_feedback的呢?

我们先回顾一下我们前面讲到的 “如何调节合成磁场”(见2.2章节) :

  • 通过控制电机U V W三相通电,根据电生磁的基本物理特性,通过控制通电顺序及时间,每次通电都会产生一个磁力,我们可以将其用矢量表示,而通过矢量的合成(矢量相加)即可得到我们的最终需要的合成磁力

因此,我们通过控制 U V W三相的通电顺序以及对应的通电时间,我们便可以控制合成磁力的大小及方向F_setting
在这里插入图片描述
在上图中,我们可以发现,F_setting 并不是直接等于 F_target,这是因为电机在运转时通常会负载等情况,因此会存在一个阻力 f,因此 F_target = F_setting + f

然后实际中,阻力 f 是不确定的,因此对于 F_setting 我们需要根据阻力 f 的变化来实时调整,此处我们引入 PID 控制算法对 F_setting 的输出进行控制以达到更好的效果,使得F_target始终保持恒定,此时电机呈现出来的现象即:电机以一个稳定的转矩在转动

那么 F_setting 又如何实现呢?

F_settingF_feedback 一样是一个抽象的概念,其实例对应的即 Uq 和 Ud

  • Uq 位于 q_d 旋转坐标系 的 q 轴上,Ud 位于 q_d 旋转坐标系 的 d 轴上
  • Uq 大小由 Iq_feedback 以及 Iq_target 经过 PID运算得到,Ud 大小由 Id_feedback 以及 Id_target 经过 PID运算得到
  • 其中 Iq_target 以及 Id_target 对应的就是 F_target
  • 电机转动时,输出的力矩也即 Iq_target
    在这里插入图片描述

经过PID计算之后,得到了在 q_d 旋转坐标系 上的 Uq 和 Ud 之后,如何作用与我们最终的 U V W通电顺序组合和时间呢?

将 Uq 和 Ud 转化到最终的 U V W通电顺序组合和时间需要经过两个步骤:反 Park 变化 以及 SVPWM生成

  1. 反 Park 变化:同样还是“力的合成与分解”,将位于q_d 旋转坐标系 上的 Uq 和 Ud 分解到 α-β 直角坐标系
    在这里插入图片描述

2.其中 Utarget 即为我们最终需要输出的目标矢量
在这里插入图片描述

  1. 注意得到 Uα 和 Uβ 之后,并不是直接继续进行 反clark变化 噢,而是进行 SVPWM 计算,所谓SVPWM,核心原理如下:
    • 根据 U V W三相的不同通电顺序组合(每种组合每项都会有电流流过,总共存在6种组合),得到6种不同方向的基础磁力矢量,六个不同方向的矢量将其划分为6个扇区。

    • 在这里插入图片描述

    • 根据 Uα 和 Uβ 的值的比例以及大小,可以推算出 Utarget 位于哪个扇区,从而可知 Utarget 将由哪两个基础矢量合成,以及对应的矢量时间

    • 在这里插入图片描述

    • 而基础矢量我们是可以通过控制 U V W 的不同通电顺序得到的,故我们可以通过控制 U V W采用不同的通电组合、通过控制通电时间完成实现矢量 Utarget 的合成。

5. 总结

以上便是关于直流无刷电机矢量控制FOC控制算法的实现原理啦,我将其称之为直流无刷电机FOC控制原语,相信有了这份原语,大家对于FOC的原理会有清晰的了解,这也是我编写此专栏的意义。

欢迎大家有疑问在评论区留言讨论,当然本文中没有对底层细节的实现过程以及细节理论部分进行详细介绍,想深入了解并自己付诸实践的同学,可以阅读我之前编写的几篇文章:

  • 专栏:电机控制专栏(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 理论(一)(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 理论(二)(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 实践(点击跳转)

  • 博客主页:爱出名的狗腿子(点击跳转)

😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃


创作不易,转载请注明出处!

关注、点赞+收藏,可快速查收博主有关分享!


😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃 😃

这篇关于直流无刷电机FOC控制原语的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC