Uno dei principali aspetti da tenere in considerazione quando si lavora con microcontrollori e circuiti digitali è la corretta alimentazione. I problemi più comuni che si potrebbero verificare sono legati innanzitutto alla stabilità e alla pulizia del segnale.
Una buona stabilità dell’alimentazione garantisce segnali logici stabili e accurate conversioni dei segnali analogici mentre una buona pulizia evita possibili comportamenti imprevedibili del microcontrollore come reset improvvisi o errori nella scrittura delle eprom.
Il problema
Le principali cause di instabilità dell’alimentazione sono: nel caso di alimentazione da rete le fluttuazioni della tensione fornita dalle compagnie di distribuzione dell’energia elettrica; nel caso di alimentazione da batteria il progressivo scaricamento della batteria stessa.
Rappresentazine della variazione di tensione nel tempo dovuta a instabilità e rumorosità
Per quanto riguarda la rumorosità, limitando l’analisi alla sola sorgente, la rete elettrica è soggetta a picchi anche considerevoli dovuti, ad esempio, alle correnti di spunto dei motori elettrici. Viceversa le batterie forniscono un’alimentazione praticamente esente da rumore se collegate unicamente al microcontrollore.
Come risolvere?
Nel caso di realizzazioni con livelli 0/5V (TTL) una soluzione semplice ed economica per ottenere un’alimentazione di qualità per l’ATmega è l’impiego di un regolatore di tensione tipo LM7805 che consentirà di ottenere 5V stabilizzati partendo da una sorgente di alimentazione in continua compresa tra 7.0V e 35V (Valori massimi assoluti).
Il circuito di base è semplicissimo: è costituito dal regolatore LM7805 e da due condensatori, uno da 0.33uF tra l’ingresso e massa e uno da 0.1uF tra l’uscita e massa, necessari per garantire la stabilità e la soppressione di eventuali alte frequenze.
Sebbene i datasheet indichino come valore massimo assoluto della tensione d’ingresso un valore pari a 35V, come parametro di progettazione è consigliabile mantenere la differenza tra tensione di ingresso e tensione di uscita compresa tra 3V e 10V. Questo suggerisce per un 7805 una tensione di ingresso compresa tra 8V e 15V, cosa che ben si adatta alla regolazione delle tensioni fornite dalle batterie da 9V (6LR61) o 12V.
Riassumendo: le tensioni in gioco
- Tensione minima ingresso 7805: 7V
- Tensione massima ingresso 7805: 35V
- Tensione tipica ingresso 7805: 8-15V
Note sulla potenza e sulla temperatura
Quando si affrontano temi legati all’alimentazione elettrica è d’obbligo una attenta riflessione sulle potenze in gioco nel progetto che si sta sviluppando. Nel caso dei regolatori di tensione, e il 7805 non fa eccezione, esiste una relazione tra tensione di ingresso, tensione di uscita e corrente erogata: la potenza dissipata.
Potenza dissipabile in funzione della temperatura ambiente
(da: datasheet LM78XX Series Voltage Regulators – National Semiconductor)
La potenza dissipata, si può calcolare (trascurando la corrente che dal terminale comune fluisce verso massa) con la formula:
Pd=(Vin-Vout)*Ic
dove Vin è la tensione di ingresso, Vout la tensione di uscita e Ic la corrente sul carico.
Il calcolo della potenza dissipata consente di determinare quale tipo di dispositivo utilizzare nel progetto (TO-220, TO-39, TO252, ecc…), in che modo collocarlo fisicamente sulla PCB e se sarà necessario intervenire in qualche modo per garantirne il corretto funzionamento (ad esempio collocando dei dissipatori di calore).
Ci vuole un dissipatore?
Anche se il regolatore possiede una sistema automatico di protezione che ne previene la rottura in caso di surriscaldamento, per garantire un funzionamento stabile e affidabile è importante mantenere la temperatura della giunzione al di sotto dei 125°C. E’ quindi necessario stabilire se il dispositivo è in grado di dissipare il calore autonomamente o deve essere aiutato con un sistema di raffreddamento.
Per prima cosa è necessario calcorare il parametro:
θ(JA) = TR (max)/Pd
dove Pd è la potenza calcolata con la formula vista sopra e TR(max) è l’aumeto massimo di temperatura della giunzione rispetto alla temperatura ambiente.
Calcolato il valore di θJA per le specifiche condizioni di funzionamento è sufficiente confrontarlo con quello del componente che desideriamo utilizzare: se il valore che abbiamo calcolato è maggiore o uguale a quello trovato sui datasheet non sarà necessario alcun dissipatore di calore; viceversa se il valore calcolato è minore di quello trovato sui datasheet, il componente non sarà in grado di dissipare autonomamente tutta la potenza e la sua temperatura crescerà quindi oltre i limiti consentiti.
Esempi di calcolo
La resistenza termica tipica di un 7805 in formato TO-220 è θ(JA) = 60 °C/W che con TR(max)=100°C fornisce Pd=1.6W. Con Vin=9V e Vout=5V consente una Ic massima di 400mA.
Un 7805 che alimenta ATmega328 standalone
Un altro tipo di calcolo potrebbe essere quello che consente di determinare la temperatura di lavoro conoscendo Vin, Vout e Ic. Prendiamo ad esempio il circuito mostrato nella figura qui sopra: Vin=9V, Vout=5v, iC=20mA (è la corrente assorbita dal ATmega328P), quindi
Pd=(Vin-Vout)*Ic=(9V-5V)*0,02A=0,08W
da cui
TR(max)=θ(JA)*Pd=60°C/W*0,08W=4,8°C.
Supponendo la temperatura ambiente di 25°C, la temperatura di lavoro sarà 29,8°C.
Commenti
11.04.2012 Jane
This is cool!
01.09.2012 Silvio
Ciao Ho trovato l'articolo molto interessante e volevo chiederti dei consigli su un progettino che avevo in mente, cioè collegare Arduino alla batteria di una moto. Potresti dirmi come dovrei fare? Pesavo che riadattare questo tuo articolo possa essere un passo iniziale. Grazie
02.09.2012 Silvio Marzotto
Ciao, grazie dei complimenti! Secondo me, se intendi utilizzare una scheda Arduino completa (tipo la Arduino UNO) è già pronta per essere collegata ai 12V che solitamente vengono generati dalle batterie di auto e moto. Sul sito di Arduino, nella pagina hardware, si trovano le specifiche relative ai valori consigliati e massimi di alimentazione: * Operating Voltage: 5V * Input Voltage (recommended): 7-12V * Input Voltage (limits): 6-20V L'unica cosa da fare quindi è procurarsi un connettore di alimentazione da 2.1mm (tipo questo) e saldarlo a uno spezzone di cavo. Poi collegare il connettore all'Arduino e l'estremità opposta del cavo alla batteria (o a un punto comodo da cui prelevare l'alimentazione proveniente dalla batteria). Una comoda guida su come saldare i fili dello spezzone di cavo e su come riconoscere il + e il - del connettore la puoi trovare sul blog di Michele Maffucci. Ciao!
06.09.2012 Silvio
Ciao In pratica non vorrei collegare Arduino direttamente alla batteria ( che potrebbe avere un voltaggio non stabilizzato ) di una macchina/moto per evitare sbalzi che potrebbero danneggiare il circuito. Quindi pensavo di risolvere creando un piccolo circuito con un L7805CV ( credo che sia buono ) e 2 condensatori da 0.33 e 0.1 uF. Sto sbagliando a ragionare così? Per il progetto finale utilizzerò lo "standalone" :-) Grazie
07.09.2012 Silvio Marzotto
Il ragionamento è perfetto nel caso in cui utilizzi l'ATmega328 "standalone". Questo perchè il chip richiede di essere alimentato a 5V e la batteria di solito è a 12V. Di fatto la board Arduino presenta un 7805 già montato sulla scheda vicino al connettore dell'alimentazione. Dato che il 7805 stesso richiede alcuni volt di differenza tra il valore stabilizzato in uscita (nel nostro caso 5V) e il valore di ingresso, se desideri alimentare la scheda Arduino dal suo connettore di alimentazione gli dovrai fornire una tensione più alta di 5V (tipicamente da 7V a 12V). Un possibilità se proprio è necessario uno stadio intermedio di alimentazione potrebbe essere quella di usare un 7809 (Come il 7805 ma con uscita a 9V). In questo caso il 12V vengono portati a 9V dal 7809 e poi dati in pasto alla scheda Arduino. Ciao! ** Edit ** Ulteriori considerazioni sono necessarie quando la batteria è collegata ad un veicolo in moto: vedi più avanti il commento sugli "Spikes".
10.09.2012 Silvio
Ciao. Sì in pratica il progetto è di realizzare un circuito per alimentare semplicemente lo standalone ( lo chiamo così almeno ci intendiamo subito ) tramite batteria di una macchina e poi interfacciare con l'ATmega vari sensori come temperatura, conta km,ecc se poi ne seve di più passo al 7809 :-) Ti volevo chiedere un altro consiglio... poichè non voglio mandare i 14A della batteria nel circuito ( in caso di assorbimento dello stesso ) pensavo di mettere un fusibile, mi puoi consigliare i parametri di tensione e corrente? Grazie ancora
15.09.2012 Silvio Marzotto
@Silvio: ok, vai tranquillo col 7805... il 7809 non va collgato direttamente all'ATmega altrimenti lo bruci! Per quanto riguarda il fusibile potresti metterne uno da 1A/250V che è la corrente massima che farei passare per il 7805.
12.09.2012 Paolo
Ciao, Ho bisogno di 5 volt e meno di 100mA devo ottenerli partendo dai 24 volt....è troppa la caduta di tensione per un 7805? Con i 5 volt dovrei alimentarci porte logiche TTL. grazie
15.09.2012 Silvio Marzotto
@Paolo: La tensione tipica in ingresso di un 7805 dovrebbe essere compresa tra 8V e 15V, ma i datasheets riportano 35V come massimo assoluto. Fidandomi di questo dato (non ho mai sperimentato personalmente valori così elevati) direi che 24V si può fare. C'è però da fare un contro sulla potenza dissipata: dato che Pd=(Vin-Vout)*Ic, avremmo Pd=(24-5)*100/1000 W cioè 1,9 W da dissipare sul regolatore. Se supponiamo di usare la versione TO-220 del 7805 vediamo dal diagramma Potenza/Temperatura che senza dissipatore siamo in una zona di lavoro non corretta. Quindi aggiungerei un bel dissipatore in modo da mantenere le temperature a livello accettabile. ** Edit ** In alternativa si potrebbe pensare a una doppia conversione, tipo 24->12 + 12->5 con un 7812+7805 in cascata. Oppure ho visto anche delle soluzioni in cui parte della differenza di potenziale viene fatta cadere su una resistenza in serie al terminale di ingresso del regolatore (Ovviamente con l'effetto collaterale che in funzinoe della corrente assorbita, varia di fatto la tensione applicata al regolatore). Oppure ancora pensare a un convertitore DC/DC, ma in queseto campo non ho al momento sufficiente esprienza per consigliarti qualcosa.
23.04.2013 Nicola
Salve Silvio... io avevo un idea analoga al ragazzo della moto. volevo alimentare l atmega 328 tramite la batteria dell auto.. per non correre il rischio che entri troppa corrente nel microcontollore oltre il 7805 potrei metterci qualcos altro? un ultima domanda... utilizzare un lm 317 no vero? grazie
25.04.2013 Nicola
SALVE . per alimentare l atmega328 dall accendisigari dell auto oltre al 7805 è necessario un transil per gli spike? se si lo metto nel circuito dopo il fusibile collegandolo a massa senza una r di limitazione, giusto?
27.04.2013 Silvio Marzotto
@Nicola: Per quanto riguarda la corrente (facendo eccezione per quelle dovute ai picchi di tensione dei quali parlo dopo) direi che vale sempre la legge di ohm ;-) quindi V=RI il che significa che la corrente dipende dalla tensione e dal carico. Nel micro non entra più corrente di quella di cui ha bisogno. L'LM317 è un regolatore di tensione dalle caratteristiche molto simili a quelle dei regolatori della linea 78xx ma con la possibilità di regolare la tensione di uscita. Dato l'utilizzo come stabilizzatore di tensione fissa a 5V penso sia più indicato il 7805. Per quanto riguarda gli "spikes" in effetti nella mia risposta ho dato per scontato che le possibili variazioni della tensione alla batteria fosse entro le specifiche del 7805 mentre approfondendo l'argomento questo non sembra essere vero. La questione delle variazioni, e soprattutto dei rapidi picchi di tensione, sembra non essere per nulla trascurabile. Credo dipenda molto dal progetto ma si potrebbe creare una linea di alimentazione a 12V pulita, cioè livellata e senza impulsi strani (ho visto che qualcuno suggerisce l'uso di un convertitore DC/DC isolato tipo l'ske15a-12, ma non ho mai usato nulla del genere, quindi non saprei se effettivamente fa quello che serve...) a cui collegare i vari dispositivi con i loro regolatori linari (meno efficienti ma meno rumorosi). Da quello che ho visto i picchi di tensione a bordo possono essere molto ampi e anche molto brevi quindi, come dici tu, un diodo a protezione dell'ingresso è sicuramente una buona idea. Io di solito uso dei normali zener con una resistenza per proteggere l'ingresso dalle sovratensioni, ma i TVS, come i transil della STM, sembrano davvero molto veloci e particolarmente adatti al tipo di impulsi che si trovano in campo automotive. Argomento comunque da approfondire, grazie per lo spunto! Se riuscirò a trovare sufficineti informazioni "sicure" scriverò sicuramente un post su come alimentare i circuiti elettronici in campo automotive. Ciao
28.01.2017 Thealexx3c
Ciao, hai poi scritto l'articolo per l'alimentazione di arduino in campo automotive? Sarebbe molto interessante!
02.02.2017 Silvio Marzotto
Ciao Thealexx3c, è sempre nella lista delle cose da terminare ;) Il tema è veramente articolato e il tempo purtroppo è sempre troppo poco! Ma conto ancora di arrivare alla fine, soprattutto se, come hai fatto tu, qualcuno dimostra dell'interesse nell'argomento. Grazie! Silvio
28.06.2013 Francesco
Ciao e complimenti per l'articolo! possiedo una batteria da 6v nominali....il 7805 funzione con una tensione di minimo 7v...che integrato potrei usare per avere i 5v utili all'atmega328? Inoltre vorrei sapere perchè fin ora non ho bruciato il micro dato che ho collegato tale batteria senza alcun limitatore di tensione.. Grazie mille Saluti
29.06.2013 Silvio Marzotto
@Francesco: se l'efficienza non è un fattore determinante potresti usare un regolatore a basso dropout (LDO). Sono componenti che funzionano in modo simile al 7805 ma che richiedono una differenza tra tensione di ingresso e tensione di uscita molto piu bassa. Un esempio è il LT1086-5 (ha un dropout intorno a 1V) o forse meglio il LT1129-5. Oppure potresti passare a dei convertitori DC-DC tipo il TMR0511, questi non sono dispositivi lineari e quindi non soffrono dello stesso problema dei regolatori. Inoltre, proprio perchè non dissipano la differenza tra tensione di uscita e tensione di ingresso, sono anche più efficienti. In alternativa una soluzione più semplice potrebbe essere quella di non utilizzare un regolatore ma dei componenti passivi: un diodo in serie all'alimentazione determina una caduta di circa 0.6V quindi una tensione effettiva sul microcontrollore di 5.4V che sarebbero nelle specifiche dell'ATmega328p che danno a 5.5V la temsione massima di alimentazione. In questo caso però l'effettivo valore della Vcc dipende dalla tensione che la batteria riesce a mantenere, man mano che si scarica e scende la tensione sulla batteria, scende anche quella applicata al microcontrollore. Ultima possibilità che mi viene in mente è utilizzare una combinazione resistenza+zener da 5V e collegare l'ATmega in parallelo allo zener. Il perchè non si sia bruciato fino ad ora credo si debba ricercare nella progressività degli effetti delle sovratensioni sui dispositivi. Non si tratta di fenomeni on/off cioè sotto la soglia tutto ok, immediatamente sopra la soglia distruzione completa. La soglia costituisce il limite sopra il quale il produttore non garantisce il funzionamento e sotto il quale, come criterio di progetto, si deve stare per un funzionamento affidabile. Si può uscire dalle specifiche? Operativamente si, come il tuo caso dimostra, ma si perde sicuramente (almeno) in affidabilità. Ciao e grazie a te per avermi letto!
07.07.2013 Alex
Buonasera, avrei una domanda da prole, se io avessi una batteria da 1100 mah da 7.4V e la collego al regolatore di tensione 7805 e come carico del regolatore non ci metto nulla quale è la potenza dissipata dal regolatore? (7.4-5)*1.1? Perchè io l'ho fatto e brucia
25.06.2017 Alessandro
Ciao, nell'esempio di calcolo che hai svolto, quello relativo all'ATMega328P, la corrente da utilizzare non dovrebbe essere di 200mA? Guardando il datasheet del microprocessore,mi sembra sia quello il consumo dell'atmega.. I 20mA indicati mi sembrano pochini, considerando che sono quelli che genera ogni singola uscita I/O.. Sbaglio? Grazie mille Saluti
26.06.2017 Silvio Marzotto
Ciao Alessando, i 20mA sono sostanzialmente quelli assorbiti del circuito utilizzato nell'esempio (circa 10mA per il Led, che dipendono dalla scelta della resistenza che c'è in serie la Led stesso, e 10mA per l'ATMega328, calcolati dalla curva "Active Supply Current vs. Frequency (1MHz - 20MHz)" disponibilie sui datasheets per V=5V e F=16MHz). In linea di massima il valore di corrente da utilizzare per il calcolo è quello specifico del circuito che si andrà ad alimentare. Il valore di 200mA è il valore massimo della somma delle correnti uscenti da un ATMega328p e può essere un buon parametro per dimensionare i componenti in modo tale che vadano bene per qualsiasi configurazione "valida" si realizzi con le uscite.