草庐IT

DFIG控制7:不平衡电网下的转子侧控制

Fantasy237 2023-04-27 原文

DFIG控制7:不平衡电网下的转子侧控制。主要是加入了转子侧的电流负序分量控制器。

本文基于教程的第7部分:
DFIM Tutorial 7 - Asymmetrical Voltage Dips Analysis in DFIG based Wind Turbines

控制策略简介

来自:
H. Abu-Rub, M. Malinowski, and K. Al-Haddad, Power Electronics for Renewable Energy Systems, Transportation and Industrial Applications. John Wiley & Sons, 2014.

相与相之间的故障可能造成不平衡的电网电压,如下图:

此时转子电流也会不平衡,可以分解为正序和负序分量,分别控制。具体控制框图如下。仿真中使用最简单的负序电流参考值,即把idr2*iqr2*都设置为0,消除转子电流的负序分量。此外,仿真也没有使用直接的转速控制。

仿真模型修改

主电路修改如下:

  1. 三相电源,在t=3s模拟一个不对称的电压跌落。
  2. id ref,在t=3.1s,从0跳变为 0.25*Is,转子侧提供部分无功功率
  3. RSC控制,加入负序分量的控制

转子侧控制器更新

转子侧的控制器框图如下,
主要是改了3个模块:

  1. 加入了负序电流PI控制,PI系数同正序电流PI控制
  2. 角度计算模块
  3. 加入正序和负序分量提取

另外,整理了一下几个PI控制器,把和参考值相减的环节放在子系统中,不然看起来比较乱。

角度计算

角度计算模块修改如下。

  1. 使用PLL,输出角度做了修正,减去0.5*pi,详见 DFIG控制6-a: simulink的PLL模块和坐标变换相关问题
  2. 添加第二个输出, 2 θ s − θ r 2\theta_s-\theta_r 2θsθr,负序分量需要用到。

正序和负序电流提取

正序分量在正向旋转的dq坐标系中为直流量,可以看成是 I 1 = A e j ω s t I_1=Ae^{j\omega_st} I1=Aejωst,;正序分量在反向旋转的dq坐标系中为直流量,所以可以看成是 I 2 = B e − j ω s t I_2=Be^{-j\omega_st} I2=Bejωst;把负序分量也转换到正向旋转的dq坐标系中,就会出现二倍频的分量: ( I 1 + I 2 ) e − j ω s t = A + B e − 2 j ω s t (I_1+I_2)e^{-j\omega_st}=A+Be^{-2j\omega_st} (I1+I2)ejωst=A+Be2jωst。需要去除这个分量,也就是100Hz的notch filter。后面可能再仔细看一下正序和负序提取的问题,大致理解是这样。

注意负序分量的park变换使用的角度为 − ( 2 θ s − θ r ) -(2\theta_s-\theta_r) (2θsθr),和控制框图对应。控制框图中,正序分量的反park变换角度为 θ r \theta_r θr,负序分量的反park变换角度为 − ( 2 θ s − θ r ) -(2\theta_s-\theta_r) (2θsθr)

notch filter设置如下,只改了bandstop中心频率100Hz,其他都是默认值。

解耦

仿真结果

示波器添加负序信号:

不平衡电压下,转矩出现比较大的波动,与采用的控制策略有关。

放大看,不平衡电网下,iq和id的正序和负序分量分别控制在参考值,就是波动比较大。
因为把负序电流控制为0,转子电流看起来还是平衡的。

有关DFIG控制7:不平衡电网下的转子侧控制的更多相关文章

  1. ruby - 匹配未转义的平衡定界符对 - 2

    如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。

  2. 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)(人们推荐的最少

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

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

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

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

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

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

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

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

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

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

随机推荐