Generatore di onde quadre
|
Quando serve un' onda quadra...
Nello
sviluppo di sistemi a microcontroller capita spesso di avere a che fare con la
necessità di misurare frequenze o periodi o di conteggiare impulsi.
In
generale, nell' ambito dei controlli industriali, i sensori che generano
frequenza dipendente da un processo meccanico, non raggiungono valori più
elevati di qualche kHz : un asse che ruota a 10000rpm a cui è applicato un
sensore che fornisce 2 impulsi/giro, dà in uscita una frequenza di soli
333.33Hz. Un motore a 4 cilindri, a 6000rpm, rende, considerando gli impulsi di
accensione delle candele, solo 400Hz.
Si finisce, anche disponendone, per non accendere il
costoso generatore di onde arbitrarie, riservandoli per le fasi finali
dei test, dato che, almeno nelle fasi iniziali, quello che serve è verificare
che le routines scritte facciano quello che devono.
In
questo senso, più che la variabilità della frequenza, importa la
disponibilità di valori sicuramente definiti e precisi, indispensabili per controllare,
ad esempio, se le impostazioni del modulo CCP siano corrette o i conteggi siano
esatti.
Inoltre è utile come base tempi a frequenze fisse, ma note e precise.
Anche
quando si parla di didattica, non c'è sempre la possibilità di disporre di
strumenti costosi di cui, peraltro, vengono sfruttate solamente una minima parte delle
possibilità.
Viene
comodo, allora, un qualche trespolo semplice che generi semplici onde quadre e
che sia di uso immediato.
Un
esempio è il generatore minimale che andiamo a descrivere.
Il generatore.
Sarebbe perfettamente possibile realizzare un
qualsiasi altro circuito con frequenza variabile tra 0.01 e 20MHz e oltre, con
onde quadre, triangolari, sinusoidali, con frequenzimetro incluso, DDS e ogni
altra opzione immaginabile.
Sarebbe possibile, ma i principi di realizzazione di questo circuito, nato
tempo fa per supportare lo sviluppo di un sistema per automotive e poi
trovato buono per mille altre applicazioni, anche del tutto diverse dal
settore microcontroller, si basano sulle seguenti disposizioni:
- Semplice.
Servono solo onde quadre
- Di uso immediato. Niente "manuale di istruzioni".
- Frequenze tra
pochi Hz e pochi kHz. Non serve oltre: nell'applicazione difficilmente si superano
questi valori e comunque, per il collaudo iniziale del firmware, è
una gamma adeguata.
Quello che importa è avere valori noti, stabili e precisi.
- Economico.
Poche parti, facilmente duplicabile.
- Alimentabile
direttamente dal circuito in prova.
Ed ecco lo schema
elettrico:
Componenti:
- IC1
CD4060
- IC2
CD4016,
4584
- R1
100k
- R2
10
ohm
- R3
15 Mohm
- R4
330k
- R5
1k
- C1
10 pf
- C2
3-39 pf variabile
- C4-C5 100 nF
multistrato
- C6
10uF-16V
- LED 3-5mm
- S1
commutatore 1 via-12 posizioni
- J1 pinhead 4 poli
- Q1
quarzo 32768Hz
Si possono usare
componenti di recupero, a patto che siano "buoni". In particolare, dalla qualità
di C1 e C2 dipende la stabilità con il variare della temperatura.
Un po' di teoria,
ma poca.
Si tratta di un
oscillatore basato sul CMOS CD4040, seguito da un buffer realizzato con il
parallelo dei gate di un 4584. Extra semplice.
Dato che dal
simbolo usato nello schema precedente non è chiaro come funzioni l' oscillatore,
vediamolo più in dettaglio:
Di per se 4060 è qualificato come un 14 Stage Ripple Binary
Counter,
ovvero di 14 flip flop (divisori per 2) collegati in cascata.
Però, gli stadi di ingresso della catena di divisori sono realizzati
con gruppo di porte logiche che permette la realizzazione di un
oscillatore.
Si tratta di un Pierce (o meglio, un gate oscillator) attorno ad un NAND che funziona come
invertitore; l' altro ingresso serve per imporre un reset al contatore,
bloccando il passaggio (o la generazione) della frequenza di ingresso dei
flip-flop.
Ovviamente,
volendo precisione, utilizziamo non una semplice rete RC, ma un cristallo.
Ed è facile disporre di quarzi da 32768Hz, quelli detti "per
orologeria", ricavabili da qualsiasi scheda madre PC o piccolo
orologio elettrico.
|
Si
tratta dei ben noti elementi cilindrici, di piccole dimensioni,
che, data la loro destinazione, sono piuttosto precisi e stabili
nel tempo ed al variare della temperatura.
Si tratta
in ogni caso di elementi realizzati per lavorare con una minima
energia di eccitazione, dato che finiscono in buona parte in
sistemi di tempo mantenuti da batterie tampone. |
Un inverter logico
(TTL, CMOS) si presta ad essere usato in questo schema:
|
R1
polarizza il gate logico nella sua regione di funzionamento lineare,
in modo da farlo operare come un amplificatore (assumendo l'inverter
come ideale, con impedenza di ingresso infinita e pari a zero in
uscita)
Il cristallo, in combinazione con
i condensatori, forma una rete passa-banda a pigreco, che fornisce i
180 gradi di sfasamento necessari all' oscillazione e un guadagno massimo alla frequenza di risonanza del cristallo.
|
La resistenza di
feedback dipende molto dal tipo di gate usato e dalla
frequenza di lavoro.
Pensando di utilizzare CMOS, si possono indicare dei valori di impiego
generale:
Cristallo |
Rp |
32kHz |
10-15 Mohm |
1MHz |
5-10 Mohm |
10MHz |
1-5 Mohm |
20MHz |
470K-5 Mohm |
Nella
realizzazione di questo semplicissimo oscillatore, va considerato, però,
che la corrente gestita da un gate logico è dell'ordine dei milliampere
e che, quindi, l' energia disponibile nell' anello dell' oscillatore è
elevata.
Se questo è necessario per cristalli un po' "duri", non va
assolutamente bene per quelli a bassa potenza.
Occorre ridurre la corrente nel cristallo, aggiungendo una resistenza in
serie.
In particolare, i quarzi per "orologeria" sono previsti per essere azionati con
solo 1uW e quindi la resistenza serie può assumere valori molto elevati (100k-470k). Se la omettiamo, il cristallo, stressato con una corrente
troppo elevata, produce comunque una oscillazione, ma a frequenze
armoniche molto superiori alla nominale, instabili e casuali.
Il corretto valore
della resistenza parallelo e serie dipende quindi dal tipo di cristallo usato.
Sono stati provati numerosi quarzi derivati da schede madri PC (dove servono al
Real Time Clock-Calendar) e i
valori indicati nello schema sono sempre stati adeguati. E' possibile che
utilizzando cristalli di orologi, sopratutto se molto miniaturizzati, siano
necessarie delle variazioni.
Si potrà usare un qualsiasi altro cristallo nei limiti
consentiti dall'oscillatore. Se si usano quarzi non low power, la resistenza
in serie andrà eliminata ed è possibile che quella in parallelo non serva o
debba avere un valore differente, come indicato nella tabella qui sopra.
Per quanto riguarda i
condensatori, si è utilizzato un trimmer capacitivo ad una estremità del
pi-greco, il che permette un ritocco molto fine della frequenza generata.
Disponendo di un frequenzimetro di qualità, si potrà tarare l'oscillatore a
32768.0kHz precisi.
La catena dei divisori per 2 è composta da 14 unità, ma solo 10 sono
accessibili dall' esterno.
Osserviamo che le
uscite dei primi tre e dell'undicesimo flip flop non sono accessibili.
Quindi, la catena dei 14 divisori agisce in questo modo:
Divisore |
Fattore |
Pin |
1 |
2 |
- |
2 |
4 |
- |
3 |
8 |
- |
4 |
16 |
7 |
5 |
32 |
5 |
6 |
64 |
4 |
7 |
128 |
6 |
8 |
256 |
14 |
9 |
512 |
13 |
10 |
1024 |
15 |
11 |
2048 |
- |
12 |
4096 |
1 |
13 |
8192 |
2 |
14 |
16384 |
3 |
Usando i pin 10 e 11
per l' oscillatore visto sopra, dal pin 9 è possibile derivare la frequenza
fondamentale. Il pin 12 di reset va a massa per lasciare libero l' oscillatore.
Tutte le forme d'onda di uscita sono simmetriche (duty cycle
50%), dato che sono l'uscita di divisori per due.
Per una frequenza di
ingresso di 32768kHz si ottiene:
Divisore |
Fattore |
Frequenza |
Periodo |
Impulso |
Pin |
1 |
2 |
16384 |
|
|
- |
2 |
4 |
8192 |
|
|
- |
3 |
8 |
4096 |
|
|
- |
4 |
16 |
2048Hz |
488.28us |
244.14us |
7 |
5 |
32 |
1024Hz |
976.56us |
488.28us |
5 |
6 |
64 |
512Hz |
1.9531ms |
976.56us |
4 |
7 |
128 |
256Hz |
3.90625ms |
1.9531ms |
6 |
8 |
256 |
128Hz |
7.8125ms |
3.90625ms |
14 |
9 |
512 |
64Hz |
15.625ms |
7.8125ms |
13 |
10 |
1024 |
32Hz |
31.25ms |
15.625ms |
15 |
11 |
2048 |
16 |
|
|
- |
12 |
4096 |
8Hz |
125ms |
62.5ms |
1 |
13 |
8192 |
4Hz |
250ms |
125ms |
2 |
14 |
16384 |
2Hz |
500ms |
250ms |
3 |
E dal pin 9 si
prelevano i 32768 Hz.
Questi valori, potenze di 2, sono molto adatti per
valutare la precisione della lettura di un periodo o di una frequenza dal
microcontroller, che lavora con numeri binari.
Se, per qualche ragione, questi valori non piacciono, si
potrà usare, ad esempio, un cristallo da 32000Hz, meno immediato da reperire,
ma disponibile presso i distributori di componenti elettronici.
In tal caso i valori in uscita saranno
2000/1000/500/250/125/62.5/31.25/7.8125/3.906/1.953Hz.
Dato che il
commutatore disponibile ha 12 posizioni, le prime due sono collegate
rispettivamente alla massa e alla Vcc, ottenendo in uscita (che è
invertita) un livello alto (H) e uno basso (L), utili in molte situazioni
senza dover staccare il generatore dal circuito in sviluppo.
Si può usare la
stessa funzione anche in altre tecnologie, con queste caratteristiche:
Tecnologia |
Sigla |
Fmax
[MHz] |
Aliment.
[V] |
CMOS |
CD4040
HEF4060 |
8 |
3-15 |
HCMOS |
74HC4040 |
20 |
2-6 |
HCTMOS |
74HCT4040 |
20 |
4.5-5.5 |
Da notare che la
versione CMOS standard è alimentabile in un range molto ampio di tensioni, cosa
non possibile per le famiglie HC/HCT che sono limitate. Per contro, ha una
massima frequenza minore, ma nel caso in esame non ha importanza.
CD4060 ha una corrente
in uscita massima di un paio di milliampere. In generale è opportuno
disporre di più corrente (non si sa mai...). Questo si ottiene semplicemente
con un buffer ottenuto mettendo in parallelo i 6 gate contenuti in un integrato
genere 4584, 40106, 4050 o similari, ottenendo una decina di mA almeno in
uscita.
Una resistenza (R2) da 10-100 ohm tra il buffer e l' uscita evita danni in caso
di corto circuito.
Il circuiti è
completato con i soliti indispensabili condensatori sulle alimentazioni e con un
LED e relativa resistenza che segnala la presenza della tensione di
alimentazione.
Realizzazione
pratica.
Non molto impegnativa:
un circuito stampato a faccia singola che porta il commutatore e la presa a 4
poli per alimentazione e uscite.
Realizzazione extra
semplice accessibile a chiunque abbia una minima esperienza nel saldare.
Integrati su zoccolo.
La scala del
commutatore è stampata su un cartoncino protetto da vernice trasparente e
fissata direttamente sul commutatore.
Particolare del quarzo-compensatore variabile.
Il circuito stampato è
protetto dall' ossidazione non eliminando il resist fotografico, che è
saldabile.
Il circuito è sollevato dal piano di
lavoro con 4 colonnine in nylon e il lato saldature è protetto da falsi contatti con un
foglio isolate trasparente (recupero da alimentatore PC).
Funziona al primo
colpo; se si vuole la massima precisione, recuperare conoscente con
frequenzimetro e tarare il trimmer per 32768Hz precisi.
Nel prototipo in foto
tutte le parti sono di recupero ed è difficile che nei cassetti di un hobbista
non ci siano le parti necessarie alla realizzazione.
Variazioni.
CD4060
può oscillare senza problemi almeno fino a 5MHz a 5V di alimentazione (di più
con una Vcc maggiore). Per cui si potranno usare anche quarzi diversi, ottenendo
diverse frequenze in uscita.
Se non si usano quarzi a bassa potenza, la resistenza serie andrà ridotta fino
ad eliminarla, a seconda del cristallo usato. Così anche la resistenza in
parallelo al gate oscillatore va modificata secondo quanto detto prima.
Se si usano 4060 in altre tecnologie, la frequenza possibile aumenta di molto, ma in
compenso si riduce il range di alimentazione.
Con la versione CMOS si potrà usare il circuito tanto a 3V quanto a 15V.
|