Recuperiamo dal cassetto il buon vecchio 16F84A (o 16F84) e utilizziamolo magari per aggiungere alle luci del nostro presepio un realistico effetto torcia o fiaccola: tremolante appunto.
In questo post si affrontano diversi argomenti utili anche come base per ulteriori sviluppi:
Materiale necessario:
ATTENZIONE: nel caso si voglia utilizzare dei diodi LED al posto delle lampadine a filamento si dovrà limitare la corrente inserendo, per ogni NPN, una resistenza tra il collettore e il LED.
Pilotare dei diodi LED tramite il circuito qui realizzato comporta la loro immediata distruzione in quanto la corrente di collettore non è affatto limitata.
Ovviamente tutti i calcoli sotto riportati andranno rifatti in relazione alla diversa corrente erogata.
In questo post si affrontano diversi argomenti utili anche come base per ulteriori sviluppi:
- generare 8 segnali PWM via software
- generare numeri casuali in asm
- polarizzare correttamente un transistor utilizzato come interruttore
Materiale necessario:
- PIC18F84A o in alternativa il PIC16F84
- quarzo da 4 MHZ
- resistenze e condensatori qb
- otto NPN BC337 o similari
- lampadine a filamento da 5/6 volt (recuperate magari da vecchie catene luminose)
ATTENZIONE: nel caso si voglia utilizzare dei diodi LED al posto delle lampadine a filamento si dovrà limitare la corrente inserendo, per ogni NPN, una resistenza tra il collettore e il LED.
Pilotare dei diodi LED tramite il circuito qui realizzato comporta la loro immediata distruzione in quanto la corrente di collettore non è affatto limitata.
Ovviamente tutti i calcoli sotto riportati andranno rifatti in relazione alla diversa corrente erogata.
Nota: sarà necessario modificare il tipo di pic nelle proprietà del progetto e le dichiarazioni in testa al main.asm se si vuole programmare con successo il vetusto PIC16F84 (quello senza la A finale); il codice invece funzionerà senza problemi e senza bisogno di modifiche per entrambi i modelli.
Schema elettrico
La sezione logica mostra le connessioni del PIC con le otto uscite PWM e le linee riservate alla programmazione (MCLR/VPP, PGD, PGC):
La sezione di potenza mostra un singolo canale PWM; gli altri sono identici:
Scelta del transistor NPN
La scelta è guidata principalmente dalla corrente assorbita dalla lampadina a filamento.Per determinarla alimentiamola a 5 volt e in serie colleghiamo l'amperometro del nostro multimetro o tester impostandolo sulla scala più alta: 200 mA dovrebbe garantirci di non fare danni...
Nota: misurare con il tester la resistenza della lampadina non serve a nulla in quanto "a freddo" il valore è notevolmente più basso (anche di 20 volte) rispetto a quando il filamento è incandescente.
Nel mio caso ho verificato che le mie lampadine, alimentate a 5 volt, assorbono circa 90 mA.
Sceglierei quindi un transistor NPN che sopporti almeno il doppio della corrente richiesta: nel mio caso andrebbe bene anche un 200mA (2N3904 o similari).
Avendo nel cassetto numerosi BC337-25 ho verificato dal loro datasheet che questi sopportano fino a 800 mA (Ic o corrente di collettore): più che bene per pilotare una sola luce per canale.
Nota: ho scelto di alimentare le lampadine a 5 volt per non complicare il progetto e soprattutto perchè dispongo di un trasformatore che mi eroga 5 volt a 2 ampere ben livellati; adattate ovviamente il circuito alle vostre esigenze aggiungendo eventualmente la sezione di alimentazione per il PIC separata da quella per le lampadine.
Pilotare correttamente i transistor NPN come interruttori
La scelta della valore corretto della resistenza da applicare alla base del transistor è fondamentale per fare in modo di spremere tutti i mA necessari ed ottenere così la massima luminosità delle nostre lampadine.Dobbiamo in pratica far scorrere la giusta corrente di base ( Ib ) in modo da saturare il transistor ( Ib(sat) ) ed ottenere la massima corrente di collettore ( Ic ) cioè nel mio caso 90 mA.
Per determinare quindi la Ib(min) ci servono poche informazioni:
- conoscere la hFE del transistor (o anche βdc cioè il rapporto tra Ic e Ib o guadagno in continua)
- sapere che la corrente di saturazione Ib(sat) = Ic / hFE
- la legge di Ohm: R = V/I
- sapere che la caduta di tensione tra base e emettitore è di 0,7 volt (per tutti i transistor a giunzione bipolare o BJT)
Il parametro più incerto è la hFE che può variare, anche per lo stesso modello, sia per ragioni tecniche di produzione e sia in funzione della temperatura di esercizio.
Dal datashhet del BC337-25 leggo che la hFE va da un minimo di 160 ad un massimo di 400; suggerisco di utilizzare in questo caso il valore inferiore: 160
La Ic che vorrei è di 90mA e quindi sapendo che Ib(sat) = Ic / hFE avrò che Ib(sat) = 90mA / 160 = 0,090A / 160 = 0,00056 A (5,6 uA).
Aumentiamo la Ib(sat) di un 20% in modo da compensare le varie tolleranze in gioco: Ib(sat) = 6,3uA
La Rb è quindi = VBB - 0,7 / Ib(sat) = 5volt - 0,7volt / 6,3uA = 4,3volt / 0,00063A = 6825 Ohm che arrotondata ai valori standard fa 6,8 K.
Mano al codice ASM
Il progetto MPASM-X lo trovate qui: https://sourceforge.net/p/padnest/svn/HEAD/tree/pic16f/pic16f_flickering_lights.XPremetto subito che questa è solo una base di partenza personalizzabile a piacere per quanto concerne i tempi di lampeggio e quindi l'effetto finale.
Ogni canale PWM genererà un proprio livello di luminosità in modo indipendente dagli altri.
I sorgenti si dividono in tre parti:
- main.asm: la parte principale che include tutte le altre
- macros.inc: alcune macro di utilità riprese da quelle scritte per il 18F
- interrupts.inc: la parte di gestione degli interrupt
- subs.inc: la parte con le sub routine utilizzate dal main
Il codice è ben commentato in ogni sua parte e non sarà difficile modificarlo a piacimento.
Ricordiamoci solo che, a differenza dei 18F, i 16F sono molto diversi in termini di organizzazione della memoria e di tipo e di numero di istruzioni a nostra disposizione.
Realizzazione pratica
Ecco la BB di sviluppo con 3 canali PWM di prova.Dettaglio della schedina di sviluppo per il 16F84 realizzata molto tempo fa!
Dettaglio della sezione di potenza.
Risultato
Ecco il risultato finale...Stay tuned!
ap
NB: l'autore non risponde di eventuali danni causati da omissioni, inesattezze o errori eventualmente presenti nell'articolo pubblicato.
Prego, segnalare suggerimenti e migliorie commentando questo post o inviando una email a padnest@gmail.com.
Nessun commento :
Posta un commento