clear; close all; f1=10; % Frecuencia en Hz de la forma de onda en tiempo continuo n=20; % Multiplicador según Nyquist fm=n*f1; % Frecuencia de muestreo Tm=1/fm; % Periodo de muestreo ms=round(fm/f1); % Número de muestras obtenidas por periodo de la fundamental ns=2; % Número de periodos de simulación na=ns*ms; % Número total de muestras para el total de periodos Tclock=10e-06; % PERIODO DE CLOCK DEL TIMER INTERNO DEL DSC 100e-09 = 10,00 MHz TPWM=round(Tm/Tclock); % VALOR EN CUENTAS PARA EL PERIODO DE CONMUTACION (IGUAL AL PERIORO DE MUESTREO): Tsw/Tclock TPER=TPWM/2; % VALOR EN CUENTAS A CARGAR EN EL REGISTRO DE PERIODO PARA EL MODULO PWM: PULSO CENTRADO Tp=TPER/2; % VALOR EN CUENTAS DEL PERIODO PARA EL CALCULO DEL CICLO UTIL: TPWM/4 p=TPWM; % NUMERO DE PUNTOS POR PERIODO DE MUESTREO PARA DETERMINAR EL PASO DE SIMULACION np=na*p; % NUMERO TOTAL DE PUNTOS DE LA SIMULACION tf=ns/f1; paso=Tm/TPWM; t=0:paso:tf-paso; yt=sin(2*pi*f1*t); % Señal en tiempo continuo % figure; plot(t,yt); grid ka=1:na; % Vector con total de puntos de simulación de las variables en tiempo discreto % con periodo de muestreo Tm kc=1:np; % Vector con total de puntos de simulación de las variables en tiempo continuo % con periodo de muestreo Tm/TPWM % Valores iniciales de los contadores, comparadores e interrupciones Timer=0; % Timer asociado al contador del módulo PWM: up-down SOC=1; % Flag que simula interrupción del módulo ADC signo_contador=1; % signo del contador para generar la portadora up-down Reg_Compar=0; % valores iniciales de los comparadores de salida del modulo PWM m=length(ka); ym=zeros(1,length(ka)); td=zeros(1,length(ka)); t=zeros(1,length(kc)); portadora=zeros(1,length(kc)); muestra=zeros(1,length(kc)); CMP=zeros(1,length(kc),1); km=0; for k = 1:np t(k)=k*Tm/TPWM; % t(k) es el vector de tiempo continuo if SOC == 1 SOC = 0; km = km + 1; td(km)=(km-1)*Tm; ym(km) = sin(2*pi*f1*td(km)); end % Define contador up-down para portador centrada en Tm if Timer == 0 signo_contador = 1; SOC = 1; end if Timer == p/2 signo_contador = -1; %SOC = 1; end if Timer == TPWM/2 Reg_Compar = ym(km)*TPER; % Registro del comparador end % Incremento del contador para comparación y generacion de ciclo útil y generación del SOC Timer = Timer + signo_contador; portadora(k)=Timer; % Genera la portadora triangular para graficarla muestra(k)=SOC; % Guarda las muestras para graficarlas CMP(k) = Reg_Compar; % Guarda los valores en el registro del comparador para graficar end figure; plot(t,yt,td,ym,'*') legend('Señal Original','Señal muestreada') figure; plot(t,portadora,t,muestra*0.25*TPER) axis([0 4*Tm -0.5 TPER+5]) legend('Portadora','Muestras') figure; plot(t,CMP) legend('Valores de Comparador de Salida') figure; stairs(ym) legend('Señal a intervalos discretos')