Premessa: Questo è il quarto articolo della serie presentata su LinuxFocus inerente il microcontrollore AT90S4433. Vi suggerisco di leggere i precedenti articoli che trattano del microcontrollore della Atmel: Come installare ed utilizzare l'ambiente di sviluppo e costruire l' hardware necessario alla programmazione del microprocessore:Marzo 2002, Programmare il microcontrollore AVR con GCC
Come creare il vostro circuito stampato: Un pannello di controllo LCD per il vostro server Linux
Come costruire un contenitore per il vostro alimentatore:Settembre 2002, Un frequenzimetro da 1Hz a 100MHz, munito di un display LCD ed una interfaccia RS232
L'elemento più importante per i vostri 'lavoretti' domestici è un buon alimentatore in corrente continua. In questo articolo andremo a costruirne uno. Sarà gestito da un micocontrollore. Avrà un piccolo display LCD, e potrete pilotarlo da remoto con Linux per mezzo della porta seriale. Ha anche un design sobrio ma efficace. Questo articolo ci dimostrerà quanto versatili siano i Microcontrolli. Tuttavia quello che andremo a costruire non sarà il circuito più semplice della serie. Se state cercando un semplice alimentatore in corrente continua potete dare un'occhiata all'articolo "Un semplice alimentatore in CC". Questo semplice alimentatore è ottimo per delle modeste necessità, come spesso richiedono i circuiti presentati su : LinuxFocus. È da precisare che questo semplice alimentatore non ha nulla a che fare con Linux e con il software. Anche se andrete a costruire il "semplice alimentatore in CC" potete ugualmente leggere questo articolo ed apprendere molte cose interessanti sui microcontrollori. _________________ _________________ _________________ Introduzione Questo alimentatore CC è basato su di un circuito che non è certo dei più semplici ma, vi posso assicurare che il tempo che vi dedicherete non lo rimpiangerete. È molto affidabile e robusto. Esso è anche molto interessante dal punto di vista tecnico in quanto vi spiegherà come costruire un alimentatore controllato da microprocessore che generi una tensione analogica senza ricorre ad un integrato-convertitore DA. Vi serviranno molti componenti per questo articolo ma la maggior parte è economica e di facile reperibilità. L'alimentatore in sè non è particolarmente costoso. Quello che vi serve Date un'occhiata alla lista dei componenti per avere le idee chiare su cosa vi serva di preciso. Potete veder anche i componenti nel seguente schema elettrico. Il nostro alimentatore è disponibile in 3 varianti. A parte il trasformatore ed una resistenza le uniche modifiche sono di tipo software. Tutto il resto dei componenti non varia per le tre versioni: 0-16V Imax=2.2A acquistate un trasformatore da 15V 2.5A
0-24V Imax=2.2A acquistate un trasformatore da 24V 2.5A
0-30V Imax=3A acquistate un trasformatore da 30V 3A
In tutti e 3 i casi avrete bisogno anche di un piccolo trasformatoreausiliario da 9V 100mA per alimentare il circuito di controllo. Schema elettrico e circuito stampato Ho utilizzato eagle per Linux per la creazione dello schema elettrico e del circuito stampato. I file in formato eagle sono inclusi nel file tar.gz assieme al software. Lo potete scaricare alla fine dell'articolo. Il circuito è diviso in due parti. Una parte principale ed una parte che si situa vicino ai transistor di potenza. Qui potete vedere i due schemi elettrici delle due parti, che verranno interconnessi per mezzo di spezzoni di cavo elettrico. Lo schema elettrico della sezione principale (un click sull'immagine per avere l'immagine più grande): Lo schema elettrico della sezione ad alta potenza (un click sull'immagine per avere l'immagine più grande): Come collegare i pulsanti nella matrice di comando (un click sull'immagine per avere l'immagine più grande): Il circuito di controllo visto dal lato componenti un click sull'immagine per avere l'immagine più grande): La basetta è studiata per una creazione di tipo amatoriale. I livello di colore blu è l'unico che deve essere utilizzato per la creazione del circuito stampato. Le linee in rosso sono degli spezzoni di filo usati per creare dei ponti, questo per semplificare la creazione della basetta stessa, non essendo necessaria l'incisione su due lati ed una accurata precisione. Dovreste stendere gli spezzoni di filo in modo che questi risultino essere il più corti possibile. Con Eagle non sono riuscito a creare le traiettorie migliori. I componenti della parte ad alta potenza possono essere tranquillamente assemblati su di una basetta millefori. La basetta principale e quella di potenza sono interconnesse con degli spezzoni di cavo (JP2 e JP3). Potete anche notare che il cavo di massa della parte principale si collega al positivo dell'uscita in CC. Questo è corretto, ed è anche il motivo per cui abbiamo bisogno di due trasformatori distinti per la parte logica di controllo e l'amplificatore di potenza. Come funziona il tutto. Dando un'occhiata allo schema elettrico principale potete notare come il tutto sia costituito da due parti logiche. Una è contrassegnata nello schema come "current control" (sezione di controllo della corrente) e l'altra come "voltage control"( sezione di controllo della tensione). Queste sono due sezioni indipendenti di controllo. Il circuito di controllo della corrente si basa sulla differenza di tensione ai capi di un resistore di 0. 274 Ohm. La caduta di tensione ai capi di questo componente è proporzionale all'assorbimento. Le due sezioni di controllo sono poi combinate per mezzo dei diodi D2 e D3. Questi due diodi costituiscono una porta OR logica. Mi spiego: se la corrente risulta essere troppo alta, la parte che soprassiede all' erogazione della tensione riduce il voltaggio fino a che non scende sotto il limite. Diversamente, ovvero se la corrente non è troppo elevata, la parte che supervisione la tensione ha il compito di regolare costantemente la tensione. Questa porta logica OR riesce a funzionare in quanto il transistor T3 è connesso alla tensione di +5V per mezzo della resistenza R19. Se non ci fosse alcun amplificatore operazionale collegato ai capi di D2 e D3 avreste la massima tensione in uscita. L'operazionale nel circuito di controllo regola l'uscita riducendo la tensione di +5V dal transistor T3 (ne abbassa la tensione portando il più possibile verso massa). Il circuito di controllo che supervisiona alla tensione, regola l'uscita secondo il livello di tensione presente al pin 5 dell`IC6B. Mi spiego, la tensione presente su questo pin è pari alla tensione in uscita moltiplicata per il fattore determinato dalla terna di resistori R15, R10 e R16. La stessa cosa avviene per la corrente, solo che in questo caso, il resistore di calibrazione è costituito da R30, che equivale alla massima corrente. Per ottenere la massima corrente o per regolare l'uscita dell'alimentatore dobbiamo solo fornire la corretta alimentazione ai due punti di potenza (pin 5 dell'IC6B ed al resistore R30). Questo è quanto fa il microcontrollore... ma come è in grado di generare e regolare propriamente una tensione di riferimento in corrente continua? Date un'occhiata al seguente schema: Quello che potete notare in questo schema è come un segnale ad impulsi possa essere trasformato in un segnare in corrente continua. Tutto quello che si deve fare è far transitare il segnalsegnalee attraverso un filtro passa-basso con una frequenza di cut-off di circa 100 volte (o più) della frequenza del segnale. Dato che il nostro micrconotollore lavora ad una frequenza di 4MHz, risulta abbastanza semplice costruire questo genere di filtro passa-basso. Anche se implementassimo il segnale via software otterremo comunque una frequenza di qualche KHz ed il filtro risulterebbe ancora molto compatto e semplice. La differenza tra lo schema in alto e quello in basso viene definita come modulazione in ampiezza d'impulso (PWM). Variando la lunghezza degli impulsi possiamo cambiare la tensione all'uscita del filtro. Carino vero?? Già... possiamo generare una precisa tensione in corrente continua partendo da un segnale digitale! Il microcontrollore AT90S4433 ha due contatori interni. Uno di 1bit di ampiezza ed uno di 8bit. Il contatore a 16bit ha la possibilità di lavorare in PWM, che viene quindi implementata in maniera hardware all'interno dell'AT90S4433 con una risoluzione di 10bit. Il contatore ad 8bit non ha questa funzionalità, ma possiamo emularla ed implementarla per mezzo del software. Sarà ancora sufficientemente veloce. Utilizzeremo il contatore a 16bit per la regolazione della tensione, ottenendo una definizione di 1023 passi (10bit sono, difatti, pari a 1023). Il controllo della corrente in uscita viene demandato al contatore ad 8bit, che ci permetterà di ottenere 155 passi di controllo della corrente (da 1 a 3000 mA). Questo significa che avremmo una precisione dell'ordine di circa 12mA. Questo è un valore più che sufficiente per un controllo in corrente di un alimentatore. Tutto il resto della componentistica nel circuito serve per l'alimentatore e per generare la nostra tensione di riferimento (il circuito integrato 7805, è difatti il nostro elemento di riferimento) e per garantire che il nostro alimentatore non si comporti in maniera impropria all'accensione o allo spegnimento. Il software Il software per il microcontrollore utilizza molti degli aspetti che dovreste avere già appreso dai precedenti articoli (uart per le porte seriali rs232, display LCD, contatori ed modalità di interrupt). Potete dare un'occhiata qui: linuxdcp.c. La parte più interessante probabilmente è il circuito PWM (Pulse Width Modulation - modulazione ad ampiezza d'impulso). La variabile ipwm_phase, congiuntamente a ipwm_h gestisce la tecnologia PWM per quel che concerne la parte della sezione di potenza in corrente. Possiamo gestire il contatore ad 8bit in modalità interrupt ogni qualvolta si genera un overflow, chiamando la funzione "SIGNAL(SIG_OVERFLOW0)". A questo punto si valuterà se la variabile ipwm_phase debba produrre un valore di 0 o di 1 come responso della verifica prima di far ripartire il timer. Il software non è per nulla complesso ma per riuscirlo a comprendere appieno è importante comprendere perfettamente il data sheet del 4433 (date una occhiata a fine articolo, nella sezione della bibliografia per la documentazione appena citata). Il 4433 è un microporcessore ad 8bit e quindi la sua capacità matematica è assai limitata. Le funzioni divXbyY e multiXbyY richiedono una implementazione ad almeno 24bit per poter calcolare la corretta ampiezza d'impulso, partendo dalla tensione definita dall'utente. Il nostro alimentatore ha 7 pulsanti. 6 di questi servono per aumentare e ridurre corrente e tensione ed il settimo lo utilizziamo per mettere l'unità nello stato di standby. Nello stato di standby potete temporaneamente spegnere l'alimentatore e cambiare i limiti della corrente e della tensione. Lo stato dei pulsanti viene ciclicamente rilevato dal ciclo continuo del programma principale. La variabile ignorebutton viene utilizzata per evitare il bouncing dei pulsanti. Questo in quanto, quando le vostre dita andranno a premere il pulsante non saranno fermissime e potrebbero generare più impulsi. Come esseri umani non lo notiamo, ma il nostro microcontrollore è talmente veloce nell' eseguire le operazioni che rivelerebbe questa imperfezione. La variabile ignorebutton ignora per una frazione di tempo lo stato del pulsante alla pressione, per evitare questo tremolio. La creazione del circuito stampato La scheda principale: Il contenitore. Legno sulle pareti, un foglio di metallo per la parte dei pulsanti, il fondo ed il coperchio: Il pannello frontale: Il pacchetto software contiene al suo interno un file PostScript (linuxDCpower.ps) per il circuito stampato. Dal mio punto di vista, trovo che le piazzole di saldatura siano un poco troppo piccole. Vi consiglio di ingrandirle con un pennarello per incisioni. Il procedimento per realizzare un circuito stampato lo potete trovare nell'articolo Un pannello di controllo LCD per il vostro server Linux.Per costruire un economico ma funzionale contenitore per il vostro alimentatore potete leggere l'articolo Un frequenzimetro da 1Hz a 100MHz, munito di un display LCD ed una interfaccia RS232. Potete vedere il contenitore ed il pannello frontale come li ho fatti io. Potete clickkare sull'immagine per vederla ingrandita. Verifica di funzionamento Come ogni circuito che, viene realizzato in maniera hobbistica, è bene non venga direttamente collegato ad una fonte a piena potenza. Vi consiglio quindi, di collegarlo ad una fonte di alimentazione più ridotta, per effettuare un test in maniera più sicura. Questo al fine di trovare difetti che si possono aver generato durante l'assemblaggio del medesimo. Assemblate la basetta principale con tutti i componenti ma non inserite gli integrati negli zoccoli.
Utilizzate una batteria da 9Volt. Collegate il positivo della medesima al pin2 ed il negativo al pin1 del connettore che ha come nome AC_POWER nello schema elettrico. Con un multimetro controllate di avere +5V sui piedini 8 e 16 dell'integrato max232 e sui piedini 8 e 7 del microcontrollore. Sul pin di alimentazione dell'operazionale dovrete avere all'incirca 9Volt.
Ora invertite la polarità della batteria (collegate il positivo al pin 1 e il negativo al pin 2) e verificate che ci siano all'incirca 9volt sul piedino dell'alimentazione negativa dell'integrato operazionale.
Se queste verifiche hanno avuto esito positivo potete inserire gli integrati nei relativi zoccoli (tranne l'operazionale).
Ricorrete ancora alla batteria da 9volt e collegatela in modo da avere l'alimentazione a 5Volt. Collegate il programmatore alla porta parallela per mezzo del cavo. Scompattate il software (per scaricarlo consultante la fine dell'articolo), entrate nella cartella che si è creata e digitate: make avr_led_lcd_test.hex make testload make ttydevinit Ora il software di test ciclicamente esser caricato nel circuito. Sul display LCD dovreste leggere "hello", il LED rosso dovrebbe lampeggiare e se il vostro computer è collegato all'interfaccia rs232 dovreste vededer una serie di "ok" (inizializzate la linea seriale con il comando ttydevinit, e osservatene il responso con cat /dev/ttyS0, se lo avete collegato alla porta COM1, e cat /dev/ttyS1, se lo avete collegato a COM2).
Ora assemblate il circuito di potenza ma non collegate ancora il trasformatore di potenza. Collegate invece la batteria a 9Volt ai cavi che sarebbero, normalmente, collegati al trasformatore. Non importa la polarità della batteria, in ogni caso il condensatore da 4700 microfarad si dovrebbe caricare a circa 9Volt. Controllate questo valore con un VoltMetro.
Quando anche l'ultimo test ha avuto esito positivo, collegate il trasformatore con i relativi cavi ed alimentatelo. Senza l'integrato operazionale, dovreste avere all'uscita dell'alimentatore la massima tensione possibile. Misurate questa tensione, ma prestate attenzione a non generare dei corto- circuiti, che andrebbero a danneggiare irrimediabilmente i transistor di potenza, in quanto non vi è ancora alcuna limitazione alla massima corrente erogabile.
Spegnete tutto ed inserite l'amplificatore operazionale e collegate nuovamente il cavo di programmazione, alimentate e digitate: make make load
Ora l'alimentatore dovrebbe essere completamente funzionante. Vi prego di notare che fintatoché il cavo di programmazione è collegato l'uscita dell'alimentazione è imprecisa. Scollegate questo cavo per ottenere una alimentazione stabile e precisa.
Eccoci alla fine: Il nostro alimentatore Come avrete visto precedentemente vi sono 3 possibili opzioni, che dipendono dal trasformatore che andrete ad utilizzare. Il software è nominalmente configurato per la tensione di 16Volt e 2.2Ampere. Per cambiare questa tensione dovrete modificare il file linuxdcp.c cerando le stringhe: MAX_U, IMINSTEP, MAX_I, e nella funzione set_i dovrete cambiare il valore per avere un massimo di 3Ampere. Il codice è ben commentato e vi trovate i cambiamenti da apportare. Ora potrete vedere alcune fotografie dell'alimentatore che io ho costruito. Ho impiegato del tempo, ma direi che ne è valsa la pena, dato che ho ottenuto un alimentatore robusto. Il tempo lo considero ben investito, in quanto, un alimentatore da laboratorio è uno degli strumenti più utilizzati. Utilizzare l'alimentatore È probabilmente molto ovvio come si utilizzi questo alimentatore. Avete 4 pulsanti per regolare la tensione d'uscita. Due pulsanti per incrementare o ridurre di 1Volt e due per 0.1Volt. La limitazione in corrente si può gestire con gli altri 2 pulsanti. Qui il fattore di incremento/decremento non è in scala lineare: per piccoli valori i passi sono di 50mA, per valori superiori ai 200mA sono di 100mAe per valori superiori all'Ampere sono di 200mA. Per questa ragione è semplice variare la limitazione con solo due pulsanti. Il pulsante di standby può essere utilizzato per spegnere momentaneamente l'alimentatore senza aver poi la necessità di configurare nuovamente i valori impostati. Il LED rosso si accenderà quando avrete superato il limite di carico in corrente e lampeggerà quando sarà in modalità stand-by. L'alimentatore può anche essere completamente controllato per mezzi di comandi ascii inviati presso la porta seriale rs232. Questi sono i comandi utilizzabili: u=X per definisce la tensione (e.g u=105 porta la tensione a 10.5V) i=Xmax definisce la massima corrente (e.g i=500 posta il massimo assorbimento a 500mA) s=1 or s=0 lo porta in modalità stand-by u=? or i=? or s=? ci va vedere lo stato e le configurazioni. Questo produce un responso di questo tipo: u: 50 s:0 i: 100 l:0 u: tensione pari a 5V, s:0 l'unità è operativa (non in modo stand- by), i: 100 significa massima corrente a 100mA, e l:0 ci dice che non è mai stato raggiunto il limite di carico.
Come spegnere immediatamente il display (LCD) del portatile con un click
2ff7e9595c
Commenti