草庐IT

伺服电机矢量控制原理与仿真(1)控制系统的建立

PemgqiWang 2023-04-19 原文

自动控制原理综合实践

考研复习专业课自动控制原理也快接近尾声了,想着做点什么东西把学的东西综合起来练一下,顺便温习一下Matlab。恰巧前一段对伺服电机有所接触,索性就从这里下手。
这是第一部分,只是初步建立了数学模型。预计之后会陆续进行系统分析矫正和PID设计,最后再使用Simulink对更完备的系统进行仿真比对一下简化后设计的影响。
(大概会有下文吧)

直流伺服电机及其控制

伺服电机主要有两类:直流无刷电机和永磁同步电机。这两者之间的区别、联系、结构和原理在许多文章中都有涉及,故在此不再赘述。需要了解的可以在这文后相关链接里找到相关内容。许多关于直流伺服电机控制的文章在前半段讲电机原理的部分都还好理解,但几乎都是在六步换向法就开始上难度了。所以我们从这里开始,这也就意味着这并不是一篇零基础,如果真的是零基础至少需要读完下面这两篇。
无刷电机工作原理及六步换向法
FOC算法介绍

为什么是六步换向法

类比有刷直流电机

对于六步换向法的学习最好与直流有刷电机和三相异步电机结合起来去理解。直流无刷电机本质上是一个直流电机,他用电子换向器代替了有刷电机中的电刷,因此对电子换向器作用与电刷是一致的。
在我们教学法过程中接触到的直流有刷电机大部分都是这样的。它只有单匝绕组,工作过程中旋转一周只需要两次换向。那六步换向法中为什么是六步?

实际上上图的电机模型只是对实际电机的简化,现实中更为广泛使用的是下面这种多匝的电机。他的换向电刷相应也更复杂,换向次数也相应增多。具体到下图所示的这种三匝绕组有刷电及机,每旋转一周电刷刚好六次换向。
但实际上这仍旧和无刷电机控制过程中的六步换向法有差别。这种差别需要结合另一种电机——三相异步电机来解释。

类比三相异步电机

下图是无刷电机最常见的形态,尽管在各种介绍中都表示无刷是指替代了直流有刷电机的电刷,但实际是这只是功能意义上的替换。形式上有刷电机的绕组在定子上,而直流无刷电机的绕组则在定子上,通过电调实现各相绕组的交相通电。这和三相交流异步电机的模型十分相似。

那为什么在三相异步电机的学习过程中我们没有提到过六步换向法呢?难道在异步电机中不存在六步么?
实际上这六步是客观存在的,他没有被重点提及是因为三相异步电机的供电是标准的三相电,三相绕组间隔120°,三相电压相位差也是120°。这样的配置使得电压在三相绕组中的流动恰可以定子产生一个周期性的、近似等幅的旋转磁场。该磁场使得定子可以异步转动。 异步是这种电机鲜明的特点。同时这120°相位差的三相电源直接来自电网,我们可以改变电压幅值、改变频率但很少有提到改变相位(至于原因我暂时并不清楚),所以换向尽管客观存在但他是一个连续变化的过程,我们对此无能为力。

这些差异意味着什么

这时我们用无刷电调替代标准的120°相位差的三相电压,再加上一些转子位置传感元件,电机便由三相异步变成了直流无刷。所以我们说直流无刷电机本质上是由电子逆变器驱动的有位置传感器反馈控制的交流同步电动机。那这一变化又能带来什么?我在知乎上找到了一个挺好的回答。
让我总结的话:就是把原本三相异步电机驱动的三相模拟信号换成了晶体管产生的可控的脉冲信号,这种可控的信号配合转子位置检测元件可以实现更精细化的换相。能过做到“因地制宜”,因为有更高的磁能利用率和实现更复杂的控制任务。同时他又保留了有刷直流电机的许多性能,在调速上较异步电机更为便捷。


除此以外它还具有如下特点:

那么问题又来了,我在一篇文章下看见有人提问,说“既然六步换向法能够实现让转子动起来的功能,那是不是单纯调节换向速度就能调节电机转速了?”
显然是不能的。先说效果,这里加快换向的速度就相当于加快了频率,完全可以类比成三相异步电机的调频调速,他固然能调节速度但也受许多规则限制。然后还要回答一个有没有必要的问题,六步换向的功能是通过电调来实现的,现代电调里面好多都内置了单片机等控制元件,可以实现“根据转子位置灵活换向的功能”,单纯的增加换向速度,把伺服完成异步…

从六步换向到FOC

FOC的大体流程

六步换向已经提高了磁能的利用率,但这还不够,于是FOC出现了。关于FOC只要找的话能找到很多全面的资料,在这里我只谈一下对他的理解,
FOC算法是在六步换向法基础上的一次改进,旨在“在更多的换相点上提供更精确的换相以提高磁能利用率” ,通过对六步换向法中六个电压矢量加上两个零矢量的有序叠加(SVPWM)来实现这一理念。

FOC的目的

FOC的目的是什么? 直流伺服电机的工作原理是定子产生旋转磁场,旋转磁场带动永磁铁转子转动。我们希望定子产生的磁场方向始终与转子的两磁极向垂直(使产生的电磁转矩始终最大),而根据电磁场理论,所产生磁场的大小与定子电流大小直接相关。因此电机控制最关键的是控制定子电流,电流查收讷航的磁场直接与电磁转矩相对应,而电磁转矩积分便是电机转动的角速度,再对角速度积分就是电机的转角。
根据朴素的控制理论,此时我们需要将气隙磁场矢量作为系统的输入,但很明显现有条件做不到;或者我们可以将三相对称绕组的期望电流值作为给定输入,但三相对称绕组的期望波形往往是梯形或者正弦形,同时控制三个非线性量对系统设计具有非常大的挑战,所以依然行不通。这时两个变换就派上用场了,他的本质是通过线性变换使得三相对称绕组上的非线性信号转换成旋转直角坐标系上的线性量。线性!一个多么亲切的名词,意味着《自动控制原理》中绝大部分的内容都是适应的,意味着PID可以被应用于系统控制。

电流环的执行器:SVPWM

现在我们已经实现了FOC算法最核心环节电流环的给定了,接下来另一个问题接踵而至:该如何设计执行器? 最直接的想法是将控制器(一般为PI控制器)的输出量在经过两个反变换就生成了期望的三相对称绕组的相电流值。因为一些我也不知道的原因,实际才用的并不是这种方式而是一种被称为SVPWM的方法。该过程研究如何基于这种三相桥式逆变电路,使用最少的开关次数完成电压矢量的合成。

SVPWM原理:电压空间矢量PWM(SVPWM)的出发点与SPWM不同,SPWM调制是从三相交流电源出发,其着眼点是如何生成一个可以调压调频的三相对称正弦电源.而SVPWM是将逆变器和电动机看成一个整体,用八个基本电压矢量合成期望的电压矢量,建立逆变器功率器件的开关状态,并依据电机磁链和电压的关系,从而实现对电动机恒磁通变压变频调速.

这些问题在这篇文章中有较为详细的讲解,
在实际过程中往往还有初始位置检测、电流检测及位置解算等许多复杂问题,再此不做详述。

从物理走向数学

直流伺服电机的数学模型(正弦式)

在 解小刚,陈进.采用i_d=0的永磁同步电机矢量控制系统MAT-LAB/Simulink仿真[J]这篇文章中,首先对三项静止坐标系下的三相电压方程和磁链方程做了说明,但实际上这篇文章有错误,在电压方程中应当对磁链求导,而不是直接叠加。最后得到dq坐标系下的电压方程,磁链方程、转矩方程和运动方程。

文中虽然对磁链方程也做了描述,但并没有很通俗易懂,相对而言这篇文章中讲的比较直接。即磁链是磁通量乘以线圈匝数,他的存在主要是描述反电动势给电压方程带来的影响(个人理解)

同时这篇文章也没有给一个详细的推导过程,在这篇文章里有矩阵形式的电机方程推导过程。在《电机现代控制技术》(王成元2006)这本书的第二章有代数方程形式的推导过程。需要说明的是,本篇提到的控制对象都是永磁同步电机,关于无刷直流电机的数学模型推导可移步《无刷直流电机控制系统》(夏长亮),在这本书中有包括微分方程、传递函数、状态空间等多种模型的推导。

基于上文提到的dq坐标系下的数学模型,做适当简化可得到电机的数学模型

从数学模型到控制模型

做矢量控制总离不开这张图,整个控制过程为:速度指令 ωref 与检测到的转子速度信号 ωe 相比较,然后经过速度控制环的调节输出 iqref 指令信号,与反馈来的 iq 作差作为电流控制环的输入。而同时给定的 idref 为 0,经坐标变换将 id、iq 转换为定子三相电流,再由 PWM 模块输出六路 PWM 波驱
动逆变电路,产生可变频率和幅值的三相正弦电压来驱动电机运行。
在第一部分算法理解时我们已经确定了系统核心部分电流环的给定即dp坐标系下的id和iq,和执行机构(operator)选择,即SVPWM。在实际的控制过程中我们还需要对执行器SVPWM进行数学建模。在文章中,作者将PWM环节抽象成了一个惯性环节。另外有了被控对象和执行器,我们还需要一个控制器,因为电流环已经被简化成了线性系统所以我们可以使用传统的PI控制器。

这样,经过了抽象和华化简我们得到了如图所示的传递函数。需要注意的是,他并不是上图所示整个FOC系统的传递函数,他只是电流环的传递函数。而且该模型是经过相当程度的化简得来的,可能和实际系统存在较大偏差,但在理论分析部分我们还是结合这一传递函数来进行。但是在最后的仿真环节我们会通过Simulink尽可能换原更真实的系统。

对系统模型更进一步探讨

两个变换使得电流环的控制变量得到了线性化,但上述传递函数也只是电流环,甚至不算是电流环。因为他最后反馈的引出点引出的是dq坐标系的iq,但实际中我们并不能测量这一变量。这一值额获取正是常提的两个变换所完成的。即**在反馈通路上并不是单位反馈,而应该有变换模块。**那实际的电流环是什么系统呢?

  • 线性时变系统:因为两次变换涉及到随时间变化的角度量;
  • 非线性系统:变换引入了非线性环节;
  • 多输入系统:将角度量θ理解为一个输入量;
    我并没有找到相关的理论,但我认为选型时变系统更靠谱一点,因为在《电机现代控制技术》中提到的这个变换式中θ我认为可以理解为在线性变换中的时变量。

资源汇总

一些比较好的文章:

https://blog.csdn.net/Staokgo/article/details/122128590(大百科)
https://zhuanlan.zhihu.com/p/376585004(数学模型建立)
https://zhuanlan.zhihu.com/p/73786237(数学方法下的矢量控制)
https://zhuanlan.zhihu.com/p/434971540
https://blog.csdn.net/qq_42415953/article/details/111150487(对矩形波和正弦波两种驱动方式的反电动势波形作了整理)
https://www.zhihu.com/column/c_1147105722243366912(电机学习专栏,模型很好但很难)

另外将这两天查的资料都整理打包了,有兴趣的点链接自提链接:https://pan.baidu.com/s/1jdWb2zInTGccSCsQHKF0ew?pwd=jlxg 提取码:jlxg

有关伺服电机矢量控制原理与仿真(1)控制系统的建立的更多相关文章

  1. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  2. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  3. ruby-on-rails - openshift 上的 rails 控制台 - 2

    我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

  4. C51单片机——实现用独立按键控制LED亮灭(调用函数篇) - 2

    说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时

  5. ruby-on-rails - 在 Rails 控制台中使用 asset_path - 2

    在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O

  6. ruby-on-rails - 带有 Pry 的 Rails 控制台 - 2

    当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

  7. ruby - 将全局 $stdout 重新分配给控制台 - ruby - 2

    我正在尝试将$stdout设置为临时写入一个文件,然后返回到一个文件。test.rb:old_stdout=$stdout$stdout.reopen("mytestfile.out",'w+')puts"thisgoesinmytestfile"$stdout=old_stdoutputs"thisshouldbeontheconsole"$stdout.reopen("mytestfile1.out",'w+')puts"thisgoesinmytestfile1:"$stdout=old_stdoutputs"thisshouldbebackontheconsole"这是输出。r

  8. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

    我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

  9. ruby-on-rails - ruby 新手,有人可以帮我从控制台破译这个错误吗? - 2

    我真的只是不确定这意味着什么或我应该做什么才能让网页在我的本地主机上运行。现在它只是显示一个错误,上面写着“我们很抱歉,但出了点问题。”当我运行railsserver并在chrome中打开localhost:3000时。这是控制台输出:StartedGET"/users/sign_in"for127.0.0.1at2013-07-0512:07:07-0400ProcessingbyDevise::SessionsController#newasHTMLCompleted500InternalServerErrorin55msNoMethodError(undefinedmethod`

  10. ruby-on-rails - Rails 控制台的 YAML 输出 - 2

    在Rails控制台中执行类似yGrau.all的命令时,我得到这些奇怪的!binary字符串而不是属性名称。知道如何解决这个问题吗?谢谢。irb(main):003:0>yGrau.all←[1m←[36mGrauLoad(0.0ms)←[0m←[1mSELECT"graus".*FROM"gr←[1m←[35mEXPLAIN(0.0ms)←[0mEXPLAINQUERYPLANSELECT"grauEXPLAINfor:SELECT"graus".*FROM"graus"0|0|0|SCANTABLEgraus(~1000000rows)----!ruby/object:Grauat

随机推荐