clear; close all % % Sample problem 6-12, cleaned up % V0 = 12; %% volts C = 45; %% mu-farads %C = 10; C = C/1.e6; %% farads R = 1.8; %% k-ohms R = R*1000; %% ohms f = 60; %% freq, Hz Tf = 70; %% msec Tf = Tf/1000; omega = 2*pi*f; %% radian freq tc = R*C; %% time constant dt = 0.05e-3; t = 0:dt:Tf; state = 'on'; loss = 0; for i=1:length(t) Vs(i) = V0*sin(omega*t(i)); switch state case 'on' VR(i) = Vs(i); iR = Vs(i)/R; %% current thru R iC = omega*C*V0*cos(omega*t(i)); %% current thru C if iR+iC <= 0 %% check for current reversal state = 'off'; tA = t(i); %% keep track of reversal time end case 'off' tt = t(i)-tA; VR(i) = V0*sin(omega*tA)*exp(-tt/tc); if Vs(i) >= VR(i) %% check for reversal state = 'on'; end end loss = loss + R*iR^2; end plot(t,Vs,'r',t,VR,'k') xlabel('Time, sec'); ylabel('Voltage'); title(sprintf('Rectifer response for C = %d mu-F',C*1e6)) text(Tf/2,0,sprintf('%5.2f m-watts loss',loss*1000)); grid