zoukankan      html  css  js  c++  java
  • 学习笔记-第四周-交流电机选优

    交流电机优选

           电机启动、变速、制动的方法不唯一,本文主要采用变频调速的方式。通过调试参数发现,电机的稳定速度与频率成正比,所以根据稳定速度选择对应的定子频率。例如,fs = 27Hz对应n=799r/min, fs=19.8Hz对应600r/min左右。求得比例系数k=fs/n=0.0330-0.0338。

      通过调整频率大小实现速度的变化,调速时为了实现转速平滑变化、防止输出转矩过大,可以设置过渡频率(介于调速前后稳定频率之间)。

    采取策略

    1. 控制电机带重物上升,从静止加速到800r/min—— fs=27Hz启动直至达到稳定速度的98%;
    2. 保持800r/min匀速运动0.5s—— fs=27Hz保持匀速运行;
    3. 减速到静止,保持静止状态0.5s—— 先将fs减少至15Hz,持续50ms后将频率降至0.2Hz(此时稳定频率小于5r/min,可视为静止);
    4. 带重物下降,从静止达到600r/min—— 首先需要改变电机旋转方向,我们可以通过多路开关改变各相电路相位关系:初始条件下,B相电压落后A相-2/3pi;C相电压落后A相-4/pi。现在调整为B相电压超前A相2 pi /3;C相电压超前A相4 pi /3。之后,在200ms的时间内将定子频率fs从0.2Hz线性增长至19.8Hz。再在300ms左右的时间内,将定子频率fs稳定在19.8Hz,使电机反向加速至600r/min。
    5. 保持600r/min匀速运动0.6s—— fs=19.8Hz电机稳定运行。
    6. 减速到静止—— fs=0Hz,电机转速快速衰减至0。

    仿真结果电机完成整个过程大致需要3200ms,过程中加速过程较为平滑,减速过程较为陡峭,输出转矩(电流)偏大。全过程转速变化最大超调量小于5%。

    转速曲线

     代码如下:

    model SACIM "A Simple AC Induction Motor Model"
      type Voltage=Real(unit="V");
      type Current=Real(unit="A");
      type Resistance=Real(unit="Ohm");
      type Inductance=Real(unit="H");
      type Speed=Real(unit="r/min");
      type Torque=Real(unit="N.m");
      type Inertia=Real(unit="kg.m^2");
      type Frequency=Real(unit="Hz");
      type Flux=Real(unit="Wb");
      type Angle=Real(unit="rad");
      type AngularVelocity=Real(unit="rad/s");
      
      constant Real Pi = 3.1415926;     
    
      Current i_A"A Phase Current of Stator";
      Current i_B"B Phase Current of Stator";
      Current i_C"C Phase Current of Stator";
      Voltage u_A"A Phase Voltage of Stator";
      Voltage u_B"B Phase Voltage of Stator";
      Voltage u_C"C Phase Voltage of Stator";
      Current i_a"A Phase Current of Rotor";
      Current i_b"B Phase Current of Rotor";
      Current i_c"C Phase Current of Rotor";
      Frequency f_s"Frequency of Stator";
      Torque Tm"Torque of the Motor";
      Speed n"Speed of the Motor";
    
      Flux Psi_A"A Phase Flux-Linkage of Stator";
      Flux Psi_B"B Phase Flux-Linkage of Stator";
      Flux Psi_C"C Phase Flux-Linkage of Stator";
      Flux Psi_a"a Phase Flux-Linkage of Rotor";
      Flux Psi_b"b Phase Flux-Linkage of Rotor";
      Flux Psi_c"c Phase Flux-Linkage of Rotor";
    
      Angle phi"Electrical Angle of Rotor";
      Angle phi_m"Mechnical Angle of Rotor";
      AngularVelocity w"Angular Velocity of Rotor";
    
      Torque Tl"Load Torque";  
      
      parameter Resistance Rs = 0.531+0.5 "Stator Resistance";
      parameter Resistance Rr = 0.408+0.5 "Rotor Resistance";
      parameter Inductance Ls = 0.00252"Stator Leakage Inductance";
      parameter Inductance Lr = 0.00252"Rotor Leakage Inductance";
      parameter Inductance Lm = 0.00847"Mutual Inductance";    
      parameter Frequency f_N = 50"Rated Frequency of Stator";
      parameter Voltage u_N = 220"Rated Phase Voltage of Stator";
      parameter Real p =2"number of pole pairs";
      parameter Inertia Jm = 0.1"Motor Inertia";
      parameter Inertia Jl = 1"Load Inertia";
      parameter Frequency f1 = 27;
      parameter Frequency f2 = 15;
      parameter Frequency f3 = 0.2;
      parameter Frequency f4 = 19.8;
      parameter Frequency f5 = 19.8;
      parameter Real t1 = 100+500+671; //加速 800r/min恒速
      parameter Real t2 = t1+50;  //减速
      parameter Real t3 = t2+600;  //静止0.5s
      parameter Real t4 = t3+200;  //反向加速
      parameter Real t5 = t4+300+600;  //600r/min恒速
      // parameter Real t6 = t5+200;  //
      
      
      Real time1(start=0);
      Real time2(start=0);
      Real time3(start=0);
      
    initial equation 
    
      Psi_A = 0;    
      Psi_B = 0;
      Psi_C = 0;
      Psi_a = 0;    
      Psi_b = 0;
      Psi_c = 0;
      phi = 0;
      w = 0;
      
    equation
        
      u_A = Rs * i_A + 1000 * der(Psi_A);
      u_B = Rs * i_B + 1000 * der(Psi_B);
      u_C = Rs * i_C + 1000 * der(Psi_C);
    
      0 = Rr * i_a + 1000 * der(Psi_a);
      0 = Rr * i_b + 1000 * der(Psi_b);
      0 = Rr * i_c + 1000 * der(Psi_c);
    
      Psi_A =   (Lm+Ls)*i_A + (-0.5*Lm)*i_B + (-0.5*Lm)*i_C +        (Lm*cos(phi))*i_a + (Lm*cos(phi+2*Pi/3))*i_b + (Lm*cos(phi-2*Pi/3))*i_c;
      Psi_B = (-0.5*Lm)*i_A +   (Lm+Ls)*i_B + (-0.5*Lm)*i_C + (Lm*cos(phi-2*Pi/3))*i_a +        (Lm*cos(phi))*i_b + (Lm*cos(phi+2*Pi/3))*i_c;
      Psi_C = (-0.5*Lm)*i_A + (-0.5*Lm)*i_B +   (Lm+Ls)*i_C + (Lm*cos(phi+2*Pi/3))*i_a + (Lm*cos(phi-2*Pi/3))*i_b +        (Lm*cos(phi))*i_c;
    
      Psi_a =  (Lm*cos(phi))*i_A + (Lm*cos(phi-2*Pi/3))*i_B + (Lm*cos(phi+2*Pi/3))*i_C +   (Lm+Lr)*i_a + (-0.5*Lm)*i_b + (-0.5*Lm)*i_c;
      Psi_b = (Lm*cos(phi+2*Pi/3))*i_A +        (Lm*cos(phi))*i_B + (Lm*cos(phi-2*Pi/3))*i_C + (-0.5*Lm)*i_a +   (Lm+Lr)*i_b + (-0.5*Lm)*i_c;
      Psi_c = (Lm*cos(phi-2*Pi/3))*i_A + (Lm*cos(phi+2*Pi/3))*i_B +        (Lm*cos(phi))*i_C + (-0.5*Lm)*i_a + (-0.5*Lm)*i_b +   (Lm+Lr)*i_c;
      
      Tm =-p*Lm*((i_A*i_a+i_B*i_b+i_C*i_c)*sin(phi)+(i_A*i_b+i_B*i_c+i_C*i_a)*sin(phi+2*Pi/3)+(i_A*i_c+i_B*i_a+i_C*i_b)*sin(phi-2*Pi/3));
    
      w = 1000 * der(phi_m);
      
      phi_m = phi/p;
      n= w*60/(2*Pi);
    
      Tm-Tl = (Jm+Jl) * 1000 * der(w);
    
      if time <= 100 then
        u_A = 0;
        u_B = 0;
        u_C = 0;
        Tl = 0;
      elseif time <= t4 then
        u_A = u_N * 1.414 * sin(2*Pi*f_s*time/1000);  
        u_B = u_N * 1.414 * sin(2*Pi*f_s*time/1000-2*Pi/3);
        u_C = u_N * 1.414 * sin(2*Pi*f_s*time/1000-4*Pi/3);  
        Tl = 15;
      else
        u_A = u_N * 1.414 * sin(2*Pi*f_s*time/1000);  
        u_B = u_N * 1.414 * sin(2*Pi*f_s*time/1000+2*Pi/3);
        u_C = u_N * 1.414 * sin(2*Pi*f_s*time/1000+4*Pi/3);    
        Tl = 15;
      end if;
     
      
    algorithm 
      
      if time <= 100 then
        f_s := 0;    
      elseif time <= t1 then 
        f_s := f1; 
      elseif time <= t2 then
        f_s := f2; 
        //f_s := (time-t1)/(t2-t1)*(f2-f1)+f1;
        //f_s = exp(-(time-t1)/(t2-t1)*4)*(f1-f2)+f2;
        //f_s = (1-exp(-(time-t1)/(t2-t1)*5))*(f2-f1)+f1;
      elseif time <= t3 then 
        f_s := f3;
      elseif time <= t4 then
        //f_s := f4;
        f_s := (time-t3)/(t4-t3)*(f4-f3)+f3;
        //f_s = exp(-(time-t3)/(t4-t3)*4)*(f3-f4)+f4;
        //f_s = (1-exp(-(time-t3)/(t4-t3)*5))*(f4-f3)+f3;
      elseif time <= t5 then    
        f_s := f5;
      else    
        f_s := 0;
      end if;
      
      //u_N := 220*f_s/f1;
     
    
    if n > 800*0.98 and n < 800*0.99 then
    time1 := time;
    //time2 := time1 + 500;
    end if;
    if n < 0.1 then 
      time2 := time;
    end if;
    if n > -600*0.98 and n < -600*0.99 then 
      time3 := time;
    end if;
    
    
    end SACIM;
    

      

  • 相关阅读:
    熬夜的朋友看一看 [转]
    配置ubuntu
    C++string类常用函数 (转)
    ArcGIS Engine栅格数据使用总结 (转)
    fstream的用法+代码
    [转] 英语飙升的好方法
    MFC 非模态对话框(转)
    十九个国内外主流的三维GIS软件(转)
    Google C++ 风格指南 中文版
    std::set用法(转)
  • 原文地址:https://www.cnblogs.com/zjzero/p/5299879.html
Copyright © 2011-2022 走看看