jjzjj

电机控制----FOC框架讲解

修才生 2023-04-08 原文

电机控制----FOC框架讲解

在开始接触到FOC控制的时候便着手开始去学习深入理解其中的控制原理,个人对技术的追求是“知其然,亦要知其所以然”。因此便通过模块化学习做一些记录吧。首先将FOC的控制框架弄清,才知道自己想要了解的是什么。 FOC主要是通过对电机电流的控制实现对电机转矩(电流)、速度、位置的控制。通常是电流作为最内环,速度是中间环,位置作为最外环。本文只在电流环与速度环的基础上进行分析。

下图为FOC的整体系统框架图:

1.电流环

首先要考虑的是电流的采样反馈, 一般的电流采样硬件电路上的设计分为两种:单电阻采样以及双电阻采样。 由上控制框图中 Ia, Ib, Ic分别是A相、B相、C相的采样电流,一般的我们只需要对其中两相进行采样,由基尔霍夫定律:Ia+Ib+Ic=0计算得到第三相。其次考虑电角度θ和转速V的获取,一般的可以通过实时读取编码器的值以及霍尔传感器等计算得到。

进一步的在无感控制上,角度以及转速的获取还可以通过引入观测器的方式(我用的是卡尔曼滤波观测器(EKF))。

在得到三相电流和电角度后,实现步骤如下:
(1)三相电流Ia, Ib, Ic经过Clark变换得到Iα, Iβ;
(2)然后经过Park变换得到Iq, Id;
(3)然后将Iq和Id分别与他们的设定值Iq_ref, Id_ref计算误差值;
(4)然后分别将q轴电流误差值代入q轴电流PID环计算得到Vq,将d轴电流误差值代入d轴电流PID环计算得到Vd;
(5)然后对Vq, Vd进行反Park变换得到Vα, Vβ;
(6)最后经过SVPWM控制三相逆变器电路得到Va, Vb, Vc,最后输入到电机三相上。

2.速度环
当对PMSM进行速度控制时,需要在电流环外面加一个速度环,控制框图如下:

在图中,Vspeed_ref是速度设定值,Vspeed是电机的转速反馈。将计算得到的电机速度Vspeed与速度设定值Vspeed_ref进行误差值计算,代入PID速度环,计算的结果作为电流环输入的参考值;
(注:一般的d轴电流被设定为零(Id_ref=0),因为d轴电流对于驱动电机的转动不会产生输出力,所以通常情况下都会将d轴电流设定为零(但不是总是设定为0的);当Id_ref=0时,Iq_ref就等于了速度环的输出)

3.FOC控制各波形的形状
通过Matlab进行控制仿真的时候我们可以观察到(matlab仿真后续 更新):

(1)Vq和Vd的波形为:直线
(2)Id和Iq的波形为:直线
(3)Vα和Vβ的波形为:正弦波
(4)Ia、Ib、Ic的波形为:正弦波
(5)Iα和Iβ的波形为:正弦波
(6)Va、Vb、Vc的波形为:马鞍波

                                                                                                     2022.07.11-0:15

有关电机控制----FOC框架讲解的更多相关文章

  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. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

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

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

  6. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  7. 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

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

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

  9. 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

  10. 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

随机推荐