Hi,
muss eine PWM mit einer s-function erstellen und komme nicht weiter. Im Prinzip muss ich folgendes machen. Wenn die Eingangsgröße (u) im Intervall ]0,1function [sys,x0,str,ts] = pulsweitenmod(t,x,u,flag,pwm)
switch flag,
case 0,[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u,pwm,ts);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
% end sfuntmpl
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0 0];
% end mdlInitializeSizes
function sys=mdlDerivatives(t,x,u)
sys = [];
% end mdlDerivatives
function sys=mdlUpdate(t,x,u)
sys = [];
% end mdlUpdate
function sys=mdlOutputs(t,x,u,pwm,Ts)
if((u < 1) && (u > 0))
pwm.d = 1/Ts;
if(t > pwm.d*Ts)
sys = [0];
else
sys = [1];
end
end
if(u >= 1)
sys = [1];
end
if(u <= 0)
sys = [0];
end
% end mdlOutputs
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1; % Example, set the next hit to be one second later.
sys = t + sampleTime;
% end mdlGetTimeOfNextVarHit
function sys=mdlTerminate(t,x,u)
sys = [];
% end mdlTerminate
pwm ist eine Struktur mit nur einem Parameter d (pwm.d), den ich bei der Initialisierung auf 0 gesetzt habe. In Simulink hab ich ...
↧