PLL CON TSA6057



Il TSA6057 è un integrato vecchio e fuori produzione (il datasheet riporta la data del 1997) ma ancora reperibile facilmente. Si tratta di un PLL che accetta segnali da VCO esterni da 512KHz a 30 MHz (ingresso AM) e da 30MHz a 150 MHz (ingresso FM), in questo progetto viene usato solo l'ingresso FM. La comodità di usare questo integrato sta nel fatto che non occorre impegnarsi in calcoli estenuanti per determinare i componenti che formano il filtro, essi sono già forniti dal produttore e al progettista spetta solo, una volta decisa la frequenza di interesse e lo step di frequenza (che in questo chip purtroppo è  limitato solo a tre valori), deve effettuare una semplice divisione per ricavarne un certo valore che va inserito in tre registri, DB0, DB1 e DB2. Questi dati, assieme all'indirizzo, al subaddress e a quelli di altro registro (DB3)  devono essere  inviati al chip tramite il protocollo I2C BUS, in totale, quindi, per poter programmare il TSA6057 gli devono essere inviati 6 byte.
Il lavoro suddetto viene facilitato dalla libreria "wire.h" di Arduino che implementa semplici funzioni che gestiscono il protocollo I2C BUS, inoltre il software da me creato evita anche di fare quella divisione di cui ho parlato sopra, fa tutto il programma, si deve solo inserire nelle varabili dello sketch i valori della frequenza e dello step desiderati.
L'aggancio è veloce e la frequenza agganciata è precisa fino alla decina di migliaia di Hz, (si hanno veloci variazioni attorno al KHz). Qui sotto le immagini di tre frequenze agganciate, 50MHz, 66MHz e 80Mhz.

   .

In questo progetto l'insieme  VCO-PLL riesce a coprire una banda di frequenze che va da 50MHz a 80MHz quindi larga 30MHz, questa larghezza di banda dipende dal guadagno del VCO.

La banda di interesse dipende dalle nostre scelte a quale frequenza centrale vogliamo far corrispondere i 2.5V, nel mio progetto ho scelto  66MHz, ma ognuno di noi può scegliere la frequenza centrale che più desidera ricordandosi però che la larghezza di banda rimarrebbe sempre di 30MHz e la frequenza più alta (o quella più bassa) agli estremi della banda dovrebbe rimanere nei limiti di accettazione da parte dell'ingresso FMI (
30MHz a 150 MHz).

Tutto il lavoro è stato eseguito a mano; lo schema elettrico a matita e le piste della scheda sono state disegnate con pennarelli indelebili (sempre a mano ovviamente). Qui sotto lo schema elettrico ed il piano di montaggio:



 

Parliamo ora del VCO cominciando dalla scelta del punto di riposo, se si sceglie una corrente troppo bassa si ha bassa potenza in uscita, se si sceglie una troppo alta si ha un notevole aumento di potenza, ma, sempre tenendo conto dei limiti in corrente ed in potenza del transistor, l'assorbimento cresce e questo potrebbe essere un problema se si vuole alimentare il sistema con una batteria.
La mia scelta è ricaduta su 10mA (ICQ), con questa corrente si riesce a fare erogare al transistor una potenza di:

PE = (VCC - VR8) * ICQ / 2 = (5 - 1) * 0.01 / 2 = 20 mW (13dBm)

Nella formula  è stata  trascurata la tensione di saturazione del transistor, VR8 è la caduta su R8.

Ora occorre assicurarsi che tutti i parametri (tensione, corrente e potenza) rientrino nei limiti del transistor.
La tensione di alimentazione è 5V, trascurando la caduta su R8 si può considerare che questa tensione sia presente tra il collettore e l'emettitore, la VCE0 del transistor è 15V quindi più che il doppio della tensione di alimentazione e possiamo stare tranquilli. La corrente massima che sopporta il transistor è 100mA e anche per la corrente stiamo a posto, per ultimo la potenza dissipata dal transistor è PD = VCC * ICQ = 5 * 0.01 = 50mW che è molto minore di quella massima sopportata dal transistor (0.5W per una temperatura del case  di 100C° che, in questo VCO, si potrebbe raggiungere solo mettendo il BJT sui fornelli e non certo facendogli erogare la misera potenza di 13dBm).

Passiamo ora al dimensionamento di R8, questa resistenza decide il valore della corrente che vogliamo far passare nel transistor (10mA in questo caso), la tensione (VR8) ai suoi capi è una questione di scelta, se si scegliesse alta (relativamente ai 5V) si avrebbe una buona stabilizzazione del punto di riposo del BJT ma si avrebbe meno escursione del segnale (tra il collettore ed l'emettitore è presente una tensione  più bassa di quella di alimentazione (5V- VR8).
Se si scegliesse bassa (sempre rispetto ai 5V) l'escursione del segnale aumenterebbe ma il punto di riposo sarebbe meno stabile, la "rule del thumb" ci indica la strada giusta e cioè la tensione VR8 può avere valori compresi tra un 0.1 * VCC a 0.2 * VCC, la mia scelta è ricaduta sulla seconda possibilità ovvero VR8 = 1V, da questo ricavo R8:

R8 = VR8 / ICQ = 1 / 0.01 = 100 ohm

Per quanto riguarda le resistenze di bias si procede in questo modo.
Si sceglie di far scorrere nelle due resistenze R9 - R10 una corrente IP = 0.1 * ICQ = 1mA. Si calcola la Resistenza R9:

R9 = VR9 / IP = (1 + 0.7) / 0.001 = 1700 ohm

e:

R10 = VR10 / IP = (5 - 1.7) / 0.001 = 3300 ohm

Dato che spesso la teoria e la pratica fanno a pugni e anche perché ho dovuto portare R9 ad un valore commerciale più vicino (1800 ohm)  conviene, 
nella fase iniziale del progetto, sostituire R10 con un trimmer con in serie una resistenza fissa in modo che il valore si possa variare attorno a 3300 ohm, ad esempio, da 1000 ohm a 11K (un trimmer da 10K con una resistenza fissa   da 1K), alimentato poi il BJT bisogna regolare il trimmer per avere una caduta su R8 pari ad 1 volt, fatto questo  bisogna dissaldare il trimmer e la resistenza fissa e misurare il valore complessivo della serie. Per R10, quindi, scegliete una resistenza fissa di valore commerciale il più vicino a quello letto, rifare poi la misura della tensione VR8, se è molto diversa da 1V occorre usare per R10 più di un resistore in serie o in parallelo (in questo progetto non è stato necessario).

"Optimum resistance" ovvero la resistenza che dovrebbe vedere il BJT per erogare 20mW  si calcola nel seguente modo:

RO = (VCC - VR8)^2 / (2 * PE) = (5 - 1)^2 / ( 2 * 0.02) = 400 ohm

Usando la carta di smith o i programmi in rete ho calcolato i valori di L2 e C19 per adattare i 400 ohm ai 50 ohm in uscita.

Per la 
"rule del thumb" la R.F.C. deve presentare una impedenza di almeno 10 volte la "Optimum resistance" in modo da non attenuare la tensione in uscita, quindi:

XLrfc = 10 * 400 = 4000 ohm

da questo valore della reattanza ho ricavato il valore dell'induttanza alla frequenza più bassa della banda (50Mhz):

Lrfc = XLrfc / (2 * Pi * 50000000) = 12.7 uH

Non avevo un induttanza di quel valore che potesse sopportare una corrente di 10 mA e allora ne ho usata una da 10uA 1A, a tal proposito quando vi occorre una induttanza e ne trovate una con filo avvolto su nucleo ferromagnetico guardate sul suo datasheet se va bene per le frequenze di vostro interesse.

Per dimensionare L1, C16 e C17, compito apparentemente semplice, richiede molto tempo, non esistono procedimenti analitici date le diverse variabili in gioco e occorre procedere per tentativi con l'ausilio della carta di Smith.
Unica formula (blasonata) è quella per determinare L1:

L1 = 1/ [(2 * Pi * 66MHz)^2 * CT]

dove:

CT = [C16 * C17 /(C16 + C17)] + CV

dove CV è la capacità del Varicap a centro banda corrispondente a 2.5V.

In realtà la formula è approssimata per la presenza di R8  in parallelo a C17 tanto che [C16 * C17 /(C16 + C17)] diventa precisa solo quando R8 risulta trascurabile rispetto alla reattanza di C17. Comunque come dato di partenza si può utilizzare la formula suddetta, decidendo a priori un valore per L1, si ricava il valore di CT e di seguito, conoscendo CV, si ricavano i valori dei due condensatori C16 e C17  ipotizzando che R8 non sia presente.

In un circuito risonante più il Q è alto e più si approssima a quella sinusoidale la forma del segnale generato, il Q è  proporzionale alla resistenza vista dall'induttanza L1e inversamente proporzionale al valore dell'induttanza stessa, ovviamente non si può scendere troppo con il valore di L1 per questioni costruttive e perché le induttanze parassite (ad esempio quelle costituite dalle piste)  prevalgono in maggior misura quanto è più piccola l'induttanza L1 rendendone ininfluente la presenza. A questo punto per avere un Q decente non rimane altro che far vedere ad L1 il più alto valore possibile di resistenza.
Dalla parte del diodo varicap L1 vede R7 di 10 Kohm.
Dalla parte di C16, C17 L1 vede la resistenza R8 aumentata di valore (grazie alla partizione dei condensatori), vedremo tra un po' di quanto viene aumentata.

Come partenza bisogna decidere che  valore dare a  L1, conviene non scendere sotto i 100nH per i motivi sopra citati, io ho scelto 110nH, la formula seguente va eseguita alla frequenza di centro banda, nel mio caso a 66MHz.

CT =1/ [(2 * Pi * 66MHz)^2 * L1] = 1/ [(2 * Pi * 66MHz)^2 * 110nH)] = 52.8pF

[C16 * C17 /(C16 + C17)] = CT - CV = 52.8 - 30 = 22.8pF

dove CV è stato ricavato dal grafico seguente:



Per ricavare C16 e C17  (trascurando R8) basta moltiplicare  per due il valore ricavato:

C16 = C17 =  22.8* 2 = 45.7pF
 
Il valore commerciale più vicino è 47pF.

Ora, però bisogna verificare alcune cosine con l'ausilio del diagramma di Smith.
Per avere un alto guadagno del VCO (KVCO), ovvero una elevata variazione della frequenza per unità di volt, occorre che nella variazione di capacità per cambiare frequenza sia predominante quella del diodo varicap rispetto a quella fissa vista verso C16, C17 e R8 (Cvista), in teoria quest'ulttima dovrebbe essere pari a zero per avere il massimo guadagno, ma ovviamente questo non è possibile, comunque per avere un discreto guadagno basta che la capacità vista sia dello stesso ordine di grandezza di quella presentata dal varicap.

Usando la carta di smith ho ricavato la capacità vista dal varicap che risulta essere di CVista = 24.7pF (si nota che R8 in questo progetto influisce poco sulla capacità complessiva che avrebbe dovuto essere 23.5pF se l'avessi calcolata come semplice serie dei condensatori C16, C17).

Il guadagno del VCO è il seguente:

KVCO = 9.4 MHz / V

(si tenga presente che nei calcoli precedenti e quelli a venire ho trascurato e trascurerò le capacità parassite e quelle ai terminali del transistor).

Infine la resistenza vista (Rvista)  verso C16, C17 e R8 è pari a 427 ohm e si trova in parallelo con la capacità equivalente, vedi foto sotto.



Mettendo in parallelo a Rvista e Cvista la capacità del varicap e la R7, si ottiene il circuito equivalente che viene visto da L1:

 

Ora determino il valore di  L1 (sempre a 66MHz) con i nuovi valori:

L1 = 1/ [(2 * Pi * 66MHz)^2 * CT] = L1 = 1/ [(2 * Pi * 66MHz)^2 * 54.7pF] = 106.3nH

ed il Q:

Q = RT * Sqr(CT / L1) = 409 * Sqrt(54.7pF / 106.3nH) = 9.2

Si potrebbero ottenere  Q più alti cambiando il rapporto C17 / C16 con C17 > C16 e mantenendo il valore della  loro serie invariato (23.5pF), in questo modo la R8 sarebbe trasformata a valori più alti con il beneficio di ottenere un Q più alto, aumentando troppo il rapporto R17 / R16  si rischia, però, di inibire la partenza dell'oscillazione alle frequenze più basse, di fatto limitando l'escursione del VCO, io, francatetta, con questo lavoro desideravo più conoscere  le performance del PLL che ottimizzare il VCO, se ne avete voglia, comunque, sappiate che potreste  farlo.

Per la programmazione del TSA6057 si procede in questo modo:

Si immette il valore dell'indirizzo nel registro MODULE ADDRESS (nel riquadro rosso nella foto sottostante), attenzione l'indirizzo è lungo 7 bit e non 8, il primo bit del registro (A0) è riservato al bit lettura / scrittura e viene gestito dalla funzione di scrittura su I2CBUS che lo pone a zero. A1 può essere 1 o 0 e dipende dal pin AS del TPS6057 che può essere collegato a 5V o a gnd, questo serve per poter indirizzare due integrati, io, il pin AS, l'ho messo a GND , quindi l'indirizzo da inserire nel registro "address" nello sketch di Arduino è:

"address" = 0B1100010;

e NON 0B11000100

Il registro SUBADDRESS deve essere a zero.

Si sceglie la frequenza e lo step di frequenza, nel mio caso:

F = 66MHz
Step = 25KHz

Si ricava N:

N = F / Step = 66MHz / 25KHz = 2640

Si converte N in binario:

Nb = 101001010000

Si inserisce il numero binario nei registri DB0, DB1, DB2 come nella foto seguente (nel riquadro verde):



Il bit D0 di DB0 (CP)  deve essere posto a zero (riquadro viola).
Il bit D2 di DB2 (BS)  deve essere posto a zero (riquadro arancione).
Il bit D4 di DB2 (FM/AM OPAMP)  deve essere posto a zero. (riquadro viola).
Il bit D5 di DB2 (FM/AM )  deve essere posto a uno. (riquadro marrone).
I bit D7, D6 di DB2 (REF1, REF2) debbono essere posti rispettivamente a uno e a zero (25KHz), (riquadro blu).
Tutto il registro DB3 deve essere posto a zero.

Qui di seguito ulteriori informazioni:


Nello sketch di Arduino dovrete solo immettere la frequenza in hertz nella variabile "frequenza" e lo step nella variabile "f_step", lanciato il programma verranno visualizzate sul Modulo Seriale le due informazioni inserite ed il valore binario nelle variabili DB0, DB1 e DB2 come nella foto sotto:


Il programma una volta inviato i dati all'integrato si mette a riposo (sleep();) per far assorbire  meno corrente dalla alimentazione esterna (40mA nella breve fase appena alimentato il sistema, 20mA a regime).

Alcune informazioni per l'audio modulante.
Il segnale audio per modulare in frequenza il VCO viene inviato tramite C20, R12, C21 al varicap, la banda passante è vocale (300Hz - 4KHz) qui sotto alcune misure con l'analizzatore di spettro:

Audio in = 3V 1KHz


Audio in = 3V 4KHz


Per finire alcuni ritocchi.
Una volta alimentato il sistema fatelo lavorare alla frequenza centrale da voi scelta, con un tester tenete sotto controllo la tensione ai capi del varicap, ruotate C3 per avere una migliore precisione della frequenza, ruotate C19 per avere un maggiore livello di segnale in uscita, allungate o stringete L1 fino a leggere sul tester una tensione di 2.5V, se non è sufficiente togliete o aggiungete spire a L1.

Qui il programma.

Fabio
HOME