学习笔记-第四周-交流电机选优

交流电机优选

       电机启动、变速、制动的方法不唯一,本文主要采用变频调速的方式。通过调试参数发现,电机的稳定速度与频率成正比,所以根据稳定速度选择对应的定子频率。例如,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%。

转速曲线

 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
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;

  

posted on   zjzero  阅读(356)  评论(0编辑  收藏  举报

编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示