|  | 
 
 发表于 2013-9-17 20:48:04
|
显示全部楼层 
| 这也是我看的一段代码,自己用感觉还可以,希望对你有用! `include "constants.vams"
 `include "disciplines.vams"
 
 module transformer(pr1,pr2,sec1,sec2,th1,th2);
 inout pr1,pr2,sec1,sec2,th1,th2;
 electrical pr1,pr2,sec1,sec2,th1,th2;
 
 parameter real n1 = 1.0 from [1:inf); //number of turns in primary winding
 parameter real n2 = 3.0 from [1:inf); //number of turns in second winding
 parameter real n3 = 3.0 from [1:inf); //number of turnes in third winding
 parameter real L = 1n from (0:inf); //inductanse per one turn in H
 parameter real k12 = 0.97 from [0:1]; //coupling between first and second, first and third windings
 
 parameter real R1 = 1.0 from [0:inf); //resistance of primary winding in Ohm
 parameter real R2 = 3.0 from [0:inf); //resistance of second winding in Ohm
 parameter real R3 = 3.0 from [0:inf); //resistance of third winding in Ohm
 
 real k13,F1,F2,F3;
 analog begin
 @(initial_step or initial_step("dc")) begin
 k13 = k12;
 end
 
 F1 = L*(n1*I(pr1,pr2)-k12*n2*I(sec1,sec2)-k13*n3*I(th1,th2)); //magnetic flow through primary winding
 F2 = L*(n2*I(sec1,sec2)-k12*n1*I(pr1,pr2)+n3*I(th1,th2)); //magnetic flow through secondary winding
 F3 = L*(n3*I(th1,th2)-k13*n1*I(pr1,pr2)+n2*I(sec1,sec2)); //magnetic flow through secondary winding
 
 V(pr1,pr2)<+R1*I(pr1,pr2)+n1*ddt(F1);
 V(sec1,sec2)<+R2*I(sec1,sec2)+n2*ddt(F2);
 V(th1,th2)<+R3*I(th1,th2)+n3*ddt(F3);
 
 end
 
 endmodule
 | 
 |