NCO
(Numerically Controlled Oscillator)
NCO: Oscilador controlado numricamente
Es un sistema electrnico digital utilizado para sintetizar seales de frecuencias variadas, a partir de una base de tiempo
Aplicaciones DDS (Direct Digital Synthesizers) Conversores digitales up/down PLLs digitales Sistemas de radar Moduladores/Demoduladores Drivers para transmisiones pticas o acsticas
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Diagrama en bloques bsico
RCF
RF
CFA
Registro de Control de Frecuencia Sumador (Mdulo N) Registro de Fase Convertidor Fase-Amplitud Acumulador de fase Lookup table
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Funcionamiento - Se comienza con el Registro de Fase inicializado en cero
- En el Registro de Control de Frecuencia se graba un nmero I - Con el primer ciclo de reloj el Registro de Fase toma el valor I
- Con los siguientes ciclos de reloj el RF se incrementa en I, tomando los valores 2I, 3I, , y as sucesivamente, hasta
el desborde del contador.
001
RCF
010 011 100 101 110 111 000 001
RF
001 010 011 100 101 110 111 000
CFA
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Funcionamiento
- La salida del registro de Fase se utiliza para acceder a la memoria que contiene las muestras de la seal - El perodo de la seal de salida es igual al tiempo que le
lleva al contador alcanzar su cuenta mxima. En este tiempo
se tienen que obtener todas las muestras de la seal, guardadas en la memoria - De lo anterior se desprende que si el incremento de fase aumenta, el perodo de la seal de salida disminuye. Por Ej.: si el incremento es 1 se necesitan 2N ciclos de reloj
para que el contador desborde, y si es 2 se necesitan 2N/2
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Funcionamiento
- De lo anterior se desprende:
Tclock . 2N To = [seg] I Fclock . I [Hz] N 2
(Perodo de la seal de salida)
Fo =
(Frecuencia de la seal de salida)
- A su vez, la memoria posee las muestras de un ciclo de una seal senoidal. El salto de fase entre cada posicin es:
d =
360 2N
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Funcionamiento
- El Registro de Fase es de N bits, lo que le permite acceder a cualquier direccin de la memoria. El valor a la entrada del Registro de Control de Frecuencia, que se suma al valor del Registro de Fase en cada ciclo de reloj representa un
incremento de fase de:
F =
360 .I
2N
- Finalmente la resolucin en frecuencia se obtiene para I=1:
f =
1 Tclock.2N
Fclock [Hz] N 2
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Ejemplo de diseo
Fo (Frecuencia de salida) = 500 Hz Df = Resolucin en frecuencia <= 0,05 Hz Ts = Perodo de muestreo = 1/8000 seg
1. Clculo del nmero de bits necesarios del acumulador
f =
1 Ts.2N
[Hz]
0,05 =
1 1 .2N 8000
8000 N = log2 = 17,29 0 , 05
N = 18
N debe ser un nmero entero, por lo tanto:
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Ejemplo de diseo
Fo (Frecuencia de salida) = 500 Hz Df = Resolucin en frecuencia <= 0,05 Hz Ts = Perodo de muestreo = 1/8000 seg
2. Reclculo de la resolucin en frecuencia
f =
1 Ts.2
N
[Hz]
f =
1 1 .2N 8000
1 1 .218 8000
= 0,0305 Hz
Df = 0,0305 Hz
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Ejemplo de diseo Fo (Frecuencia de salida) = 500 Hz Df = Resolucin en frecuencia <= 0,05 Hz Ts = Perodo de muestreo = 1/8000 seg
3. Clculo del incremento de fase
Fo.2N I = round Fs
500.218 I = round 8000 = 16384
I = 16384
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Ejemplo de implementacin en VHDL y simulacin
entity Acum_Fase is generic( P: natural:= 3; -- incremento Q: natural:= 14; -- mdulo N: natural:= 4 -- cantidad de bits ); port( clk: in std_logic; acum_reg: out std_logic_vector(N-1 downto 0) ); end entity Acum_Fase;
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Ejemplo de implementacin en VHDL y simulacin
architecture BEH of Acum_Fase is signal mod_reg: unsigned(N-1 downto 0):= (others => '0'); signal rem_nc: unsigned(N-1 downto 0):= (others => '0'); signal term_add: unsigned(N-1 downto 0):= (others => '0'); begin rem_nc <= to_unsigned(Q,N) - mod_reg; term_add <= to_unsigned(P,N); Modular_Addition: process(clk) is begin if rising_edge(clk) then if (rem_nc<=to_unsigned(P,N)) then mod_reg <= to_unsigned(P,N) - rem_nc; else mod_reg <= mod_reg + term_add; end if; end if; end process Modular_Addition; acum_reg <= std_logic_vector(mod_reg);
end architecture BEH;
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Ejemplo de implementacin en VHDL y simulacin
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
Ejemplo de implementacin en VHDL y simulacin
Osc Sin_Cos Sin_Rom NCO (archivo de simulacin)
Sistemas Digitales - UBA
NCO
NCO: Oscilador controlado numricamente
FIN
Sistemas Digitales - UBA
NCO