Abstract
Ripresento con leggere modifiche, con l'autorizzazione dell'editore, il mio articolo pubblicato su RadioKit elettronica di gennaio 2011. Premetto che quanto descritto ha un aspetto molto dilettantesco e non è utilmente duplicabile, penso sia anche abbastanza difficile da seguire. Ritengo sia di interesse didattico, mi piacerebbe che il progetto venisse riesaminato da qualcuno utilizzando metodi più moderni e commentato nel forum.
La frequenza del modulo del TX VHF che intendo utilizzare per un trasmettitore beacon WSPR derivava di circa +/- 500 Hz (4 ppm) per effetto del riscaldamento dei transistori finali e della variazione della temperatura ambiente: la frequenza finiva al di fuori della finestra di ricezione di 200 Hz del programma WSPR rendendone impossibile la ricezione automatica. La deriva era più che adeguata quando il modulo era usato per la fonia FM con una deviazione di 5 kHz e con ricevitori con una banda di 25 kHz, ma per il beacon WSPR risulta insufficiente.
Per ridurre la deriva di almeno 20 volte, ho stabilizzato la temperatura del cristallo di quarzo dell'oscillatore. Ho incollato sul guscio del quarzo un riscaldatore costituito da due resistori da 270 Ω 0,25 W in parallelo e un sensore di temperatura a termistore da 2 kΩ a 25 C°.
Per la realizzazione del progetto ho caratterizzato il termistore inserendo, vicino al quarzo già inserito nel modulo, la sonda esterna di un termometro domestico e rilevando le temperature mentre scaldavo lentamente l'esterno del telaio metallico con un asciugacapelli; con TX spento e il coperchio inserito, la temperatura all'interno del contenitore dovrebbe essere uniforme. Ho rilevato che il termistore presenta una resistenza di 2,4 kΩ a 22 C° che scende rispettivamente a 1,58 kΩ a 30,5 C° e a 916 Ω a 41,0 C°.
Nel progetto del controllore, occorre trasformare la resistenza del sensore in una tensione elettrica che viene confrontata con la tensione corrispondente alla temperatura voluta: in funzione della differenza, si controlla la corrente nel riscaldatore che influisce sulla temperatura del quarzo. Le variazioni di calore provenienti dall'esterno sono disturbi in quanto tendono a influire sulla temperatura, ma il regolatore la mantiene costante. Il riscaldatore deve fornire sufficiente calore quando la temperatura ambiente è bassa ( circa 15 C°), ma erogarne una quantità ridotta quando la temperatura ambiente è elevata ( circa 35 C°). Ho verificato, applicando una potenza riscaldante di 0,5 W con una temperatura ambiente 22 C° e misurando a regime una temperatura maggiore di 55 C°, che è possibile stabilizzare attorno a 45 C° per una temperatura compresa fra 15 e 35 C°.
Ci sono diversi tipi di controllore: da quello on/off con isteresi (simile al termostato dello scaldaacqua) con una piccola oscillazione permanente della temperatura a quello ad azione integrale e proporzionale con errore a regime nullo. Tutti i tipi di controllori hanno vantaggi e inconvenienti e possono essere di principio adoperati. Ho scartato il regolatore on/off perché non mi piacciono le oscillazioni permanente e quello integrale perché lento oppure instabile. Ritengo che quello integrale proporzionale sarebbe il migliore, ma è il più complicato e poi non mi interessa stabilizzare a una temperatura precisa, ma solo mantenerla quasi stabile: ho scelto quello proporzionale che è solo poco più complesso di quello on-off.
Lo schema elettrico e il piano di montaggio del controllore sono riportati nelle fig. 3 e 4.
Fig. 4 schema montaggio controllore
Elenco componenti R1,R4 2,2 kΩ : Tutte le R sono da ¼ W. R2 4,7 kΩ R3 220 kΩ R5 1 kΩ Rr n.2 270 Ω in parallelo. P1 potenziometro trimmer 10 kΩ Rs termistore NTC da 2,2 kΩ +/- 5% a 25 C° p.es.: Farnell order code 118-7025. Ic1 LM358, oppure KA358 package 8DIP T1 NPN con dissipazione 0,8 W, p.es: BSX61, 2N2219A, 2N1893, 2N5682. L1 LED qualunque.
Calcoli di verifica e di progetto
Dai valori rilevati di temperatura e resistenza del termistore, con vari passaggi matematici ho ricavato la funzione interpolante Rs = 1000/(exp(0.0487*(T-39.8948))) della resistenza Rs in funzione della temperatura T e la corrispondente tensione di feedback Vf di un partitore alimentato a 12,5 V costituito dal termistore con il resistore R1 da 2,2 kΩ: risulta che il termistore a 42,5 C° ha una Rs =0,88 kΩ con Vf= 8,93V e a 43,5 C° Rs= 0,84 kΩ con Vf=9,05 V (vedi fig.5). Ho provato vari valori di R1 in modo che la non linearità del termistore si compensarsi con la non linearità del partitore in modo da ottenere una variazione di tensione con la temperatura quasi costante.
Fig. 5 Sensore. Corrispondenza temperatura, resistenza, tensione
In conclusione, attorno alla temperatura voluta, una variazione di temperatura di 1 C° provoca una variazione di tensione di 9,05 - 8,93= 0,12 V, ossia un coefficiente di trasduzione di 0,12 V/C°.
La potenza dissipata nel riscaldatore nel caso di collegamento errato o di guasto (Riscaldatore connesso direttamente a Valim) vale Pr= Valim*Valim/Rr = 12*12/135 = 1,06 W >> 0,5 W non sopportabile in modo continuativo, ma non immediatamente distruttiva.
La tensione massima in regolazione sulla uscita dell'amplificatore è uguale alla tensione di alimentazione meno circa 1,7 V; sull'emettitore si sottrae la caduta di 0,6 V e si raggiungono10,2 V. La potenza dissipata nel riscaldatore nel caso di tensione massima vale:
maggiore ma non troppo della massima dissipazione nominale di Rr (poi Rr è dissipata dal guscio del quarzo).
La tensione minima in regolazione sulla uscita dell'amplificatore è circa 2 V, cui corrisponde . L'escursione possibile è quindi
.
Imponiamo che il regolatore abbia una escursione di 8,8 V con una variazione di Vfeedback di 0,12 V corrispondente a 1 C°, il guadagno deve essere almeno: .
Da cui la resistenza , ho usato cautelativamente il valore 220 kΩ.
Se il guadagno Ga è troppo elevato, durante i transitori, l'uscita si assesta con delle oscillazioni poco smorzate; per ridurle si abbassa il guadagno, al costo di una minore stabilizzazione in condizioni stazionarie.
Dato che T1 arriva a dissipare 0,5 W, qualunque transistor NPN con case metallico TO-5 o TO-18 che dissipa almeno 0,8 W può venire utilizzato.
Il Led L1 visualizza lo stato del regolatore, R4 e R5 ne permettono l'accensione quando la Vr è maggiore di 5 V. Il potenziometro P1 va regolato in modo che Vset sia 8,9 V corrispondente a 40 C° circa.
Nella fig.6 è riportata l'immagine all'oscilloscopio dell'andamento della tensione di feedback Vf e della tensione del riscaldatore Vr durante il transitorio che si verifica quando si alimenta il sistema. Si osserva la presenza di una modesta oscillazione smorzata della tensione del riscaldatore con un semiperiodo di circa 15 secondi. Detta oscillazione è dovuta al fatto che il sensore di temperatura è vicino, ma non coincidente con il riscaldatore. Capita un fenomeno simile quando si fa la doccia: inizialmente si apre il miscelatore a metà e l'acqua è solo tiepida, per averla più calda si ruota il miscelatore, la temperatura dell'acqua non aumenta subito perché l'acqua deve percorrere il tubo dal miscelatore all'ugello, si continua ad agire sul miscelatore finché l'acqua, quando arriva, scotta e si deve ruotare il miscelatore in senso contrario.
Per mio diletto, e qui lo descrivo a scopo didattico, ho esaminato quantitativamente il problema.
Analisi quantitativa del fenomeno
Dalla fig.6 si osserva che il valore iniziale della tensione di feedback è 6,24 V corrispondente a una resistenza di 2,24 kΩ per una temperatura di 23,3 C°. Dopo 20 secondi la tensione è salita a 7,36 V prodotta da 1,57 kΩ a 30,7 C°. La potenza termica prodotta dal riscaldatore è 0,77 W, quella dissipata alla temperatura di 26,5 C° media fra 23 e 30 C° la stimo in 0,1 W. L'inverso della capacità termica del quarzo è (30,7- 23,3)/((0,77-0,1)*20) = 0,55 C° al secondo per watt. Si osserva che il valore finale assestato della tensione di feedback è 8,56 V corrispondente a 1,04 kΩ e 39,1 C°. Il valore quasi stazionario significa che il calore prodotto è quasi uguale a quello dissipato. Il calore prodotto dipende dalla tensione di uscita pari a 7,8 V corrispondente a una potenza di 0,45 W. Data la temperatura ambiente di 23 C°, la resistenza termica del quarzo vale: (39,1-23)/0,45 = 35 C°/W. A 26 C° la potenza dissipata vale (26,5-23)/35= 0,1 W stimata prima. Stimo che i valori misurati e quelli calcolati abbiano una imprecisione di almeno 5%.
Il sensore assume con un certo ritardo, chiamato costante di tempo, la variazione di temperatura del riscaldatore, perché il riscaldatore deve trasmettere il calore al guscio del quarzo, il quale a sua volta lo trasmette al sensore; anche il sensore possiede una propria capacità e una resistenza termica rispetto al guscio del quarzo. Non sono in grado di separare l'effetto riscaldatore-guscio da quello guscio-sensore, il ritardo comune viene rilevato osservando andamento della temperatura appena viene inserito il riscaldatore come riportato nella fig.7. Quando si applica la tensione, la temperatura non sale subito a pendenza costante, ma seguendo una curva esponenziale smorzata che segue la rampa con un ritardo finale di circa 2,4 s .
Per riprodurre matematicamente il comportamento del sistema, ho realizzato il modello matematico del sistema regolatore-riscaldatore-quarzo-sensore, ho tradotto le equazioni nel linguaggio C++ dell'ambiente di calcolo gratuito “ Processing” di Ben Fry e Casey Reas ( www.processing.org www.arduino.cc ), ho simulato lo stesso transitorio rilevato e variato per tentativi il tempo di propagazione simulato fino a trovare il valore di 3 secondi (prossimi ai 2,4 rilevati) che riproduce l'ampiezza e la frequenza dell'oscillazione. Si osserva che nella realtà la temperatura ambiente dell'alloggiamento del quarzo sale lentamente, mentre nella simulazione è lasciata costante.
Descrivere bene tutto quanto fatto è lungo e probabilmente non interessa alla maggior parte dei lettori. Nella fig.8 è riportato lo schema blocchi del sistema (come si fa almeno da 60 anni); nelle Fig. 9 sono riportati i grafici di alcuni risultati della simulazione e nella fig. 10 il programma contenente le equazioni. Al chi li chiede, fornirò i calcoli dei grafici nel formato foglio elettronico.
Fig.6: Vf e Vr nel transitorio di assestamento dopo l'accensione (scala tempi 20s/divisione).
Fig.7: Vf e Vr all'inizio del comando a gradino di Vr (scala tempi 2s/divisione).
Fig. 9a Simulazione del transitorio rilevato con l'oscilloscopio Fig. 9b Simulazione con regolatore con guadagno elevato
Fig. 9c Simulazione con sensore ideale senza ritardo propagazione Fig. 9d Simulazione comportamento reale con tensione alimentazione 18,5 V
--------programma simulazione----------------------------------- // 3/5/10 M.Ducco simulazione stabilizzazione temperatura quarzo float Ta,Tr,Ts,Valim,Vset,Vf,Vu,Vr,Vs,Pr,Pd,Rs; float A,T0,R1,R2,R3,Ga,TsP,VsP,VfP,VrP; int I, IP, IMAX; String s; PrintWriter u; float dtempo = 0.5; // secondi passo tempo di simulazione void setup() { Ta = 23.0 ;Tr = 23.3 ;Ts = Tr ; //temperatura ambiente, t.iniziale riscaldatore, sensore A = 0.0487; T0 = 39.8948; //coefficienti funzione termistore Valim = 12.6 ; // V tensione di alimentazione Vset = Valim * 0.694;//=8.74 ; con Valim=12.6 tensione di set point, corrisponde a 40 C° R1= 2200; R2= 4400; R3 = 220000; //resistenze del regolatore Ga = R3/(R2+(R1*1000.)/(R1+1000.));//guadagno approssimato amplificatore IMAX = 200; // passi di simulazione (step calcolo 0,5 secondi) size (4*IMAX,200);//dimensioni finestra grafico temporaneo strokeWeight(3); //spessore linee 3 punti line(0,0,0,199);/*asse ordinata*/ line(0,199,4*IMAX,199);//asse ascissa u = createWriter("risultati.txt"); // Create a new file in the sketch directory s ="Tabella risultati simulazione transitorio regolatore"; println(s);println();u.println(); //intestazione tabella u.println(s);u.print ("; I=");u.print ("; Tr C°x10");u.print ("; Ts C°x10"); u.print ("; Rs kOhm");u.print ("; Vf V");u.print ("; Vu V");u.print ("; Vr V"); u.print ("; Pr mWx100");u.print ("; Pd mWx100");u.println(); } void draw() { I=0;IP=0;TsP=0;VrP=Vr;VfP=Vf;VrP=0; //inizializza variabili del grafico for (I=0;I<= IMAX;I++) //passo simulazione 1 secondo { Rs = 1000/(exp(A*(Ts-T0))); //caratteristica resistenza temperatura del sensore temperatura. Vf = Valim * (R1/(R1+Rs)); //tensione di feedback a vuoto Vu= Ga*(Vset - Vf);// tensione lineare uscita operazionale if (Vu > (Valim-1.8)) {Vu= Valim-1.8;} //saturazione superiore if (Vu < 2) {Vu= 2;} //saturazione inferiore Vr = (Vu-0.6); //tensione al riscaldatore Pr = (Vr*Vr)/135.; //potenza riscaldante generata dal riscaldatore Pd = (1/35)*(Tr - Ta); // potenza dissipata Tr = Tr + (Pr-Pd)*0.55*dtempo ; //calcolo temperatura riscaldatore con integrale Ts = Ts + (Tr-Ts)*dtempo/3.0;// costante di tempo sensore, 3 ottimale //traccia grafico temporaneo per visualizzaziuone immediata andamenti stroke(255,0,0);line(4.*I, 200.-2*Ts, 4.*IP,200.-2*TsP ); TsP=Ts; //rosso stroke(0,0,255);line(4.*I, 200.-10.*Vf,4.*IP,200.-10.*VfP);VfP=Vf;//blu stroke(0,255,0);line(4.*I, 200.-10.*Vr,4.*IP,200.-10.*VrP);VrP=Vr;IP=I;//verde if (I % 2 == 0) //stampa solo per I pari (una volta ogni due) { //visualizza risultati in forma numerica print (" t="); s = nfs(I/2,2,0);print(s);print (" Tr="); s = nfs(Tr,3,0); print(s); print (" Ts="); s = nfs(Ts,3,0);print(s);print (" Rs="); s = nfs(Rs,3,0); print(s); print (" Vf="); s = nfs(Vf,3,0);print(s);print (" Vu="); s = nfs(Vu,3,0); print(s); print (" Vr="); s = nfs(Vr,3,0);print(s);print (" Pr="); s = nfs(Pr,1,0); print(s); print (" Pd="); s = nfs(Pd,1,0);print(s);println(); //stampa tabella da importare nel foglio elettronico per il grafico permanente u.print (";"); s = nfs(I/2, 2, 0); u.print(s); u.print (";"); s = nfs(0.1*Tr, 3, 0); u.print(s); u.print (";"); s = nfs(0.1*Ts, 3, 0); u.print(s); u.print (";"); s = nfs(0.001*Rs, 3, 0); u.print(s); u.print (";"); s = nfs(Vf, 3, 0); u.print(s); u.print (";"); s = nfs(Vu, 3, 0); u.print(s); u.print (";"); s = nfs(Vr, 1, 0); u.print(s); u.print (";"); s = nfs(10*Pr, 1, 0); u.print(s); u.print (";"); s = nfs(10*Pd, 1, 0); u.print(s); u.println(); } } u.close(); // chiudi il file while(true)//in loop,; il grafico temporaneo scompare alla fine del programma { } //nota: alle volte il grafico si interrompe // exit(); // Stops the program } -------------------------------------------------------------------------------