码迷,mamicode.com
首页 > 其他好文 > 详细

机电传动控制直流电机调速

时间:2016-05-25 20:42:37      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

使用PID控制器,在Cotroller的算法中,使用errori表示误差积分,errord表示误差微分,计算方式为

   error := command.signal[1] -  feedback.signal[1];
   errori:=errori+error;
   errord:=error-pre(error);
   pout := Kp * error+Ki*errori+Kd*errord;

调试的步骤为:先调整Kp,将上升时间调到比较低的数值,但是增大Kp使上升时间的同时,超调量会Mp增大,所以下一步是通过调节Kd来调整超调量。增大Kd使超调量减小的同时过大的Kd会使电流震荡变多甚至无法在规定时间内稳定,所以不能调太大。接下来通过调节Ki使稳态误差变小,然后对三者的参数在已调出的参数上稍稍进行小波动的改变得到最后的值。我的调试结果是Kp=12.8;Ki=3;Kd=73;仿真的上升时间tr为0.0150s左右,超调量36%,稳态值59.6836,非常接近60.

block Controller  
 
  InPort command(n=1);
  InPort feedback(n=1);
  OutPort outPort(n=1);

  Real error;
  Real errori;
  Real errord;
  Real pout;
  parameter Real Kp=14.75;
  parameter Real Ki=3;
  parameter Real Kd=100;
  parameter Real Max_Output_Pos = 10;
  parameter Real Max_Output_Neg = -10;

algorithm

   error := command.signal[1] -  feedback.signal[1];
   errori:=errori+error;
   errord:=error-pre(error);
   pout := Kp * error+Ki*errori+Kd*errord;

   if pout > Max_Output_Pos then
     outPort.signal[1] := Max_Output_Pos;
   elseif pout < Max_Output_Neg then
     outPort.signal[1] := Max_Output_Neg;
   else 
     outPort.signal[1] := pout;
   end if;
  
end Controller;

仿真图形:

技术分享

看起来有些地方的波动比较大比较多,但是实际上是因为计算步长取得太长而算的不精准的原因。前1.5秒的细致图如下:

技术分享

机电传动控制直流电机调速

标签:

原文地址:http://www.cnblogs.com/quartet/p/5527953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!