Sintetizador de frecuencia PLL LMX2306 y VCO MC12148

La Radio es una de las maravillas tecnológicas de la humanidad. Aquí podrás mostrar tus circuitos, desarrollos, inventos, logros e imágenes. Desde la Radio a Galena hasta los equipos más modernos, tienen su espacio en este sub-foro.

Moderador: HJ

Sintetizador de frecuencia PLL LMX2306 y VCO MC12148

Notapor mdptweety » Vie Ago 07, 2015 7:22 pm

Buenas. Hago un repost de ciertas dudas que me fueron resolviendo en el foro hasta llegar a un resultado casi aceptable. La consigna que me plantee fue realizar un sintetizador de frecuencia que pueda oscilar entre 220 MHZ y 260 MHZ. Pudo llegar a mis manos un PLL Lmx2306 que llega hasta 550 Mhz y un VCO integrado MC12148 capaz de oscilar hasta 1 Ghz. El LMX da como opcion para el VCO el POS-300 pero no pude adquirirlo, asi que opte por el MC12148 que agregando unos varicaps y una bobina puedo ajustarlo para trabajar en los valores deseados. Asi que empece la construccion:
El VCO resulta que aunque llega a 1 Ghz no permite un gran rango de sintonia ya que este depende exclusivamente de la excursion que puedan tener los varicaps que por lo general oscilan entre 20pF y 40pF que junto a una pequeña bobina pude hacer que oscile entre 200 MHZ y 300 MHZ variando la tension de sintonia entre 1 V y 5 V. Tiene una buena potencia de salida y la primera armonica se encuentra a -20 dB de la fundamental. Hasta ahi veniamos bien, me hubiese gustado tener un mejor rango pero en principio lo considere aceptable.
El PLL me dio mucho trabajo en la programacion mediante un PIC16F877A pero finalmente logre programarlo adecuadamente, pero aca empezaron los problemas:
1) Cuando lo enciendo a veces engancha y a veces no. Me doy cuenta del enganche principalmente porque midiendo en la tension de sintonia cuando lo enciendo arranca en 1 V. Inmediatamente pasa a 4 V cuando engancha y a 0 V en caso de estar desenganchado. En cualquiera de los casos una vez enganchado o desenganchado nunca sale de ese estado. Me gustaria saber a que se debe esto. Una de mis teorias es que el PLL interprete como señal alguna de las armonicas y por lo tanto caiga fuera del rango de captura, o quizas como el VCO tiene un rango de sintonia un poco limitado no llegue a enganchar correctamente. No se si modificando el filtro de lazo del PLL cambiaria esta situacion. El filtro corta a 22 khz aproximadamente, que me parecio correcto teniendo como frecuencia de comparacion del pll 250 Khz. Una opcion que se me habia ocurrido era mediante un tanque LC sintonizado a la frecuencia de salida deseada pueda atenuar cosiderablemente las armonicas y obligar al PLL a engancharse unicamente con la fundamental. Escucho opiniones.
2) Otro detalle fue la pata LD (Lock detect) del LMX. Tiene distintas configuraciones, y las he probado todas y en ningun caso pude llegar a obtener algun dato de esta pata. Siempre que la mido esta a 0V. Le he puesto una resistencia a masa y nada. Le he realizado el circuito que ofrece la hoja de datos y siempre se mantuvo a 5V sin importar si estaba enganchado o no. No se si esta mal programado o si esta mal la circuiteria correspondiente a esta pata.

Dejo a continuacion el esquematico de todo el proyecto, junto a una foto de la placa hecha en su mayoria mediante el metodo "manhattan" y tb anexo el programa en assembler para el pic.

Placa: http://i58.tinypic.com/mv6uli.jpg

Programa:
; Sintetizador para LMX2306
; Frecuencia para convertir a canal 8 VCO = 227 Mhz
; R Counter = 40
; N Counter = 908
; Fcomp = 250 Khz
; B=113 ; A=4 ; Fvco = [ ( P x B ) + A ] x Fcomp / R ; P = 8 Preescaler
; Cristal = 10 Mhz
;*********************************************************************
;(RB1) high DATA HI
;(RB2) high LE HI
;(RB3) high CLK HI
;------------------------------------------------------------------------

list p=16f877a ; list directive to define processor
#include <p16f877a.inc> ; processor specific variable definitions
errorlevel -302 ; suprimimos el mensaje "not in bank 0"
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF

cblock 0x20 ; declaramos las variables
reg_h
reg_m
reg_l
mcount
ncount
ocount
endc

RESET_VECTOR CODE 0x0000 ; processor reset vector
nop ; nop for icd
pagesel start
goto start ; go to beginning of program


MAIN_PROG CODE

start org 0x010
clrf reg_h
clrf reg_m
clrf reg_l
clrf mcount
clrf ncount
clrf ocount
clrf PORTB

bsf STATUS,RP0 ; PASO A BANCO 1
bcf STATUS,RP1 ;

movlw b'00000000'
movwf TRISB ; PORTB TODAS OUTPUTS

bcf STATUS,RP0 ; PASO A BANCO 0
call wait

;***** make enable high************ Puede no ser necesario
bsf PORTB,2
nop
nop
call wait ; Wait a short while
bcf PORTB,2

nop
nop
movlw 0x00 ; load low bits
movwf PORTB ; make all output bits low
;
; Load the 21 bit F register C1,C2 = 1,1
; MSB first 00000000:00000000:10010011 ; Vco positivo, LD digital lock detect, power down normal
;
clrf reg_h
clrf reg_m
clrf reg_l
movlw 0x00 ; Load reg_h with f_high
movwf reg_h ;
movlw 0x00 ; Load reg_m with f_mid
movwf reg_m ;
movlw b'00010011' ; Load reg_l with f_low
movwf reg_l ;
call sendreg ; Send data to LMX
;
; Load the 21 bit R register C1,C2 = 0,0
; MSB first R = 40 :00000000:00000000:10100000
;
clrf reg_h
clrf reg_m
clrf reg_l
movlw 0x00 ; Load reg_h with r_high
movwf reg_h ;
movlw 0x00 ; Load reg_m with r_mid
movwf reg_m ;
movlw b'10100000' ; Load reg_l with r_low
movwf reg_l ;
call sendreg ; Send data to LMX
;
; Load the 21 bit N register C1,C2 = 1,0;
; MSB first N = 908 ; A = 4 B = 113 ; 000100000:00111000:10010010
; Go bit = 1 ; A = 5 bits = 00100 = 4 ; B = 1110001 = 113
clrf reg_h
clrf reg_m
clrf reg_l
movlw b'00010000' ; Load reg_h with n_high
movwf reg_h ;
movlw b'00111000' ; Load reg_m with n_mid
movwf reg_m ;
movlw b'10010010' ; Load reg_l with n_low
movwf reg_l ;
call sendreg ; Send data to LMX
goto final


; Rutina de espera
;
; time = (((ncount * 3 + 2) * mcount) * ocount) *0.4-microseconds
wait
movlw 0x01 ; 1 = aproximadamente 0.5 segundos
movlw ocount
loadM movlw 0x0A ; set w = 10
movwf mcount ; mcount = 10
loadN movlw 0xFF ; set w = 256
movwf ncount ; ncount = 256
decN decfsz ncount, f ; decrement ncount by 1
goto decN ; if ncount not 0 then decrement again
decfsz mcount, f ; else decrement mcount by 1
goto loadN ; if mcount not 0 then reload ncount
decfsz ocount, f ; if ocount not 0 then decrement again
goto loadM ; if ocount not 0 then reload mcount
return ;

; Load the 21 bit register
;
sendreg
btfss reg_h,4 ; Bit 21
call zero ; 0
btfsc reg_h,4 ;
call one ; 1
btfss reg_h,3 ; Bit 20
call zero ; 0
btfsc reg_h,3 ;
call one ; 1
btfss reg_h,2 ; Bit 19
call zero ; 0
btfsc reg_h,2 ;
call one ; 1
btfss reg_h,1 ; Bit 18
call zero ; 0
btfsc reg_h,1 ;
call one ; 1
btfss reg_h,0 ; Bit 17
call zero ; 0
btfsc reg_h,0 ;
call one ; 1
btfss reg_m,7 ; Bit 16
call zero ; 0
btfsc reg_m,7 ;
call one ; 1
btfss reg_m,6 ; Bit 15
call zero ; 0
btfsc reg_m,6 ;
call one ; 1
btfss reg_m,5 ; Bit 14
call zero ; 0
btfsc reg_m,5 ;
call one ; 1
btfss reg_m,4 ; Bit 13
call zero ; 0
btfsc reg_m,4 ;
call one ; 1
btfss reg_m,3 ; Bit 12
call zero ; 0
btfsc reg_m,3 ;
call one ; 1
btfss reg_m,2 ; Bit 11
call zero ; 0
btfsc reg_m,2 ;
call one ; 1
btfss reg_m,1 ; Bit 10
call zero ; 0
btfsc reg_m,1 ;
call one ; 1
btfss reg_m,0 ; Bit 9
call zero ; 0
btfsc reg_m,0 ;
call one ; 1
btfss reg_l,7 ; Bit 8
call zero ; 0
btfsc reg_l,7 ;
call one ; 1
btfss reg_l,6 ; Bit 7
call zero ; 0
btfsc reg_l,6 ;
call one ; 1
btfss reg_l,5 ; Bit 6
call zero ; 0
btfsc reg_l,5 ;
call one ; 1
btfss reg_l,4 ; Bit 5
call zero ; 0
btfsc reg_l,4 ;
call one ; 1
btfss reg_l,3 ; Bit 4
call zero ; 0
btfsc reg_l,3 ;
call one ; 1
btfss reg_l,2 ; Bit 3
call zero ; 0
btfsc reg_l,2 ;
call one ; 1
btfss reg_l,1 ; Bit 2
call zero ; 0
btfsc reg_l,1 ;
call one ; 1
btfss reg_l,0 ; Bit 1
call zero ; 0
btfsc reg_l,0 ;
call one ; 1

;*******make enable high para transmitir los datos****
bsf PORTB,2
nop
bcf PORTB,2
return

;
; Subrutinas para mandar ceros y unos
;
zero
BCF PORTB,1 ; Load 0 on data line
nop
BSF PORTB,3 ; Clock high
nop
BCF PORTB,3 ; Clock Low
RETURN
;
one
BSF PORTB,1 ; Load 1 on data line
nop
BSF PORTB,3 ; Clock high
nop
BCF PORTB,3 ; Clock Low
RETURN
final
clrf PORTB
bsf PORTB,0
loop goto loop
END ; directiva 'final del programa'
Adjuntos
Circuito PLL.jpg
mdptweety
 
Mensajes: 40
Registrado: Lun Sep 02, 2013 9:18 pm

Volver a Radio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron