Cómo probar PLL para el cambio de entrada por pasos en la fase

0

Escribí una simulación para el PLL de segundo orden y me gustaría probarlo con una entrada para ver si mi PLL puede rastrear la fase. Me gustaría cambiar la fase de mi señal sinusoidal con un paso de magnitud 10 rad. Por lo tanto eso es lo que hice:

  F=60;
    t=0:Ts:2-Ts;
    idx=find(t>=0);
    theta(idx)=pi/180*10*ones(1,length(idx));
    in=sin(2*pi*F*t+theta);
    out=pll(in);
    plot(t,out,t,theta)

Sin embargo, estas dos fases difieren mucho. Me pregunto si alguien puede decirme si hay algún problema con el script anterior.

Aquí están los comandos dentro del bucle for:

Error(ii)=Kd*in_norm(ii)*VCO_out(ii-1);     % Calculate the Error

prop_out(ii)=Kp*Error(ii);

integ_out(ii)=KI*Error(ii)*Ts+integ_out(ii-1);

lf_out(ii)=integ_out(ii)+prop_out(ii);

phi_out(ii)=lf_out(ii)*Ts*K0*2*pi+phi_out(ii-1);

VCO_out(ii)=sin(2*pi*Fout*(ii-2)*Ts+phi_out(ii));

    
pregunta justin

1 respuesta

0

Creo que necesitas ejecutar la simulación por más tiempo, como mínimo (también podría haber problemas con el código). Pero tomemos, por ejemplo, la imagen que adjunto a continuación.

Puede ver la entrada (señal superior) y la salida (señal inferior). La señal de abajo ni siquiera comienza a bloquearse hasta el segundo período. Incluso entonces toma algún tiempo para que se bloquee correctamente (más de 10 ciclos, no se muestran).

También implementaría theta en función del tiempo, en lugar de asignarlo a los índices lineales de tiempo (es más simple para mí):

F=60;
step=1/(f*4)
t=0:step:1; #240 datapoints, 60 cycles of runtime
theta(t)=t*720; #linear phase shift of 2 cycles over 60 cycles
in=sin(2*pi*F*t+theta);
out=pll(in);
plot(t,out,t,theta)

No tengo acceso a MATLAB, así que no puedo verificar si esto es correcto. Los resultados de la simulación también serían buenos para ayudar a depurar.

    
respondido por el jbord39

Lea otras preguntas en las etiquetas