Code covered by the BSD License  

Highlights from
Bond graph add-on block library BG V.2.1

image thumbnail
from Bond graph add-on block library BG V.2.1 by Gert-Helge Geitner
Block library enables the graphical programming of Bond Graphs using standard Simulink and editor.

TractionDrive_P
function TractionDrive_P
%See: "Different energetic techniques for modelling traction drives"
%Zanasi R., Geitner G.-H., Bouscayrol A., Lhomme W.; Proc. of the 2008
%International Conference ElectrIMACS, Quebec; CD

assignin('base','Cf',0.006);      %Filter capacitance [F=As/V]
Rf=0.01;                          %Filter resistance [Ohm]
assignin('base','Rf',Rf);         %
assignin('base','Lf',0.0009);     %Filter inductance [H=Vs/A]
assignin('base','Lfd1',0.5);      %DC machine 1 field inductance [H=Vs/A]
assignin('base','Lfd2',0.5);      %DC machine 2 field inductance [H=Vs/A]
Rfd1=2;                           %DC machine 1 field resistance [Ohm]
assignin('base','Rfd1',Rfd1);        
assignin('base','Rfd2',2);        %DC machine 2 field resistance [Ohm]
assignin('base','Larm1',0.00054); %DC machine 1 armature inductance [H=Vs/A]
assignin('base','Larm2',0.00054); %DC machine 2 armature inductance [H=Vs/A]
assignin('base','Rarm1',0.025);   %DC machine 1 armature resistance [Ohm]
assignin('base','Rarm2',0.025);   %DC machine 2 armature resistance [Ohm]
assignin('base','Kdcm1',0.077);   %DC machine 1 torque coefficient [Vs/A]
assignin('base','Kdcm2',0.077);   %DC machine 2 torque coefficient [Vs/A]
     %K_gear=8.75; R_wheel=0.483 [m]; m_b1 = mb2 = K_gear/R_wheel;
assignin('base','mb1',18.12);     %bogie ratio 1 [m^-1]
assignin('base','mb2',18.12);     %bogie ratio 2 [m^-1]
assignin('base','M',15000);       %Chassis mass [Kg]
assignin('base','F0',800);        %Resistance force parameter F0 [N]
assignin('base','ar1',0.05);      %Resistance force parameter ar1 [m/s^2]
assignin('base','ar',30);         %Resistance force parameter ar [Ns/m]
assignin('base','br',4);          %Resistance force parameter br [Ns^2/m^2]
assignin('base','alpha',0);       %Resistance force parameter alpha [rad]
assignin('base','gc',9.81);       %Gravity coefficient [m/s^2]
     %Nominal(rated) and maximal values
Udc=750;                          %Input direct voltage [V]
assignin('base','Udc',Udc);       %
I_fd_nom=24;                      %nominal field current [A]
I_arm_nom=440;                    %nominal armature current [A]
     %definition of initial values
ifd10=I_fd_nom;                   %Initial field current DC machine 1 [A]   
assignin('base','ifd10',ifd10);   %
ifd20=I_fd_nom;                   %Initial field current DC machine 2 [A]
assignin('base','ifd20',ifd20);   %
iarm0=0;                          %Initial armature current DC machines [A]
assignin('base','iarm0',iarm0);   %
I_M_0='I_M_0=[ifd10; iarm0; ifd20];';%Initial current vector [A]
evalin('base',I_M_0);             %
i_f_0=(ifd10+iarm0+ifd20)*0+3;    %Initial filter current [A]
assignin('base','i_f_0',i_f_0);   %
u_f_0=Udc-Rf*i_f_0;               %Initial filter voltage [V]
assignin('base','u_f_0',u_f_0);   %
assignin('base','vsub0',0);       %Initial velocity [m/s]                                           %
     %definition of matrices and vectors of the elements
MR0='M_R=';                       %Define resistance matrix
   MR1='[Rfd1      0         0 ;';
   MR2='   0  Rarm1+Rarm2    0 ;';
   MR3='   0       0       Rfd2 ];';
evalin('base',[MR0 MR1 MR2 MR3]); %Berechnung im MATLAB workspace
ML0='M_L=';                       %Define inductance matrix
   ML1='[Lfd1      0         0 ;';
   ML2='   0  Larm1+Larm2    0 ;';
   ML3='   0       0       Lfd2 ];';
evalin('base',[ML0 ML1 ML2 ML3]); %Computation in MATLAB workspace
Mb='M_b=[mb1; mb2];';             %Define bogie vector
evalin('base',Mb);                %Computation in MATLAB workspace
     %Switching computation
m_cp1=(Rfd1*I_fd_nom)/(Udc-Rf*(I_arm_nom+2*I_fd_nom)); %Control computation
%m_cp2=0.3;                                            %
%m_cp3=m_cp1;                                          %
Ts=0.5*0.001;                     %Switching period in sec.
Tc=Ts;
Tfin=6;                           %Simulation period in sec.
assignin('base','Tfin',Tfin);     %
Tcp1=2.3;                         %Computation start
Tcp2=Tcp1+10;
tcp=(0:Tc:Tfin)';
sl_ar=0.23;                       %rising coeff. 1 for mcp2
sl2_ar=0.04;                      %rising coeff. 2 for mcp2
sl_fd=0.009;
Laenge=length(tcp);
mtcp1=zeros(Laenge,1); mtcp2=mtcp1; %preallocation
for ii=1:Laenge
    if tcp(ii)<Tcp1                 %valid till Tcp sec.!
        mtcp1(ii)=m_cp1;            %constant
        mtcp2(ii)=sl_ar*tcp(ii);    %linear rising
    elseif tcp(ii)<Tcp2
        mtcp1(ii)=m_cp1-sl_fd*(tcp(ii)-Tcp1)^0.5; %non-lin decay rate
        if mtcp1(ii)<0.02 mtcp1(ii)=0.02; end     %lower limit
           mtcp2(ii)=sl_ar*Tcp1+sl2_ar*(tcp(ii)-Tcp1); %linear rising
        if mtcp2(ii)>1    mtcp2(ii)=1;    end     %upper limit
    end
end
assignin('base','tcp',tcp);             %
assignin('base','mtcp1',mtcp1);         %
assignin('base','mtcp2',mtcp2);         %
m_cp='m_cp=[tcp mtcp1 mtcp2 mtcp1];';   % Switching functions
evalin('base',m_cp);                    %

txt='"TractionDrive"';
disp(['Parameter for Bond Graph example ' txt ' loaded!']);

Contact us at files@mathworks.com