Ottava parte del tutorial di Marco Gottardo sui PIC. In questo capitolo si faranno degli esempi teorici e pratici di temporizzatori per spiegare il funzionamento dei timer.

Easy Timer-PWM


Questa semplice realizzazione, davvero alla portata di chiunque, è in grado di risolvere praticamente tutte le problematiche di eventi temporizzati. La versione Base qui presentata è fornita come ritardo alla disinserzione, ma con semplici modifiche software, e un pizzico di "stravaganza" Hardware si può trasformare in qualsiasi cosa.

Personalmente l'ho sviluppata per diseccitare la marcia di un motore DC di media taglia controllato in PWM in maniera temporizzata, ma il circuito lo ho poi adattato al funzionamento come "luci scale" per il controllo di nuove potenti plafoniere a LED in cui il PWM, con la frequenza un po' riadattata, fungesse da controllo dell'intensità luminosa.

Contestualmente Al presente progetto viene pubblicato un episodio, in aticipo sui tempi del noto tutorial "Let's Go PIC!!!".  Si tratta più che altro di una guida alla configurazione della piattaforma Micro-GT PIC verstaile I.D.E. per un processore diverso da quello di riferimento. Per questo motivo l'episodio viene presentato come numero 8 dato che il 6 (I segnali analogici)  e il 7 (gli interrupt) sono ancora in fase di sviluppo.

Let's GO PIC

Configurazione della Micro-GT PIC versatile IDE per il processore a 18 pin.

 
Dato che in questa pubblicazione sono contenuti due articoli decidiamo di presentare prima quello relativo al progetto e successivamente quello relativo al tutorial.
 
L'idea di base


L'obbiettivo è quello di creare un circuito "sempre valido" che permetta anche a chi non si intende molto di programmazione di entrare, almeno come utente, nel mondo dei PIC. Farò una descrizione dettagliata dei comandi software, tuttavia metterò a disposizione una serie di compilati ".hex" che abbiano le diverse temporizzazioni, così che il non esperto si possa scegliere quella più congeniale per flaschare il PIC ed ottenere la funzionalità desiderata.

Il circuito, nella versione base, si compone di cinque stadi:

Il disegno CAD del PCB è stato sviluppato sia in FidoCad che in Eagle, ma la realizzazione, al fine di minimizzare i costi, è stato realizzato solo homemade a partire dal disegno FidoCad.


 
Il generatore PWM.

La forma d'onda rettangolare a Duty cycle variabile, nota come PWM, è generata dal noto circuito integrato NE555.

                   

Come si vede dalle immagini si tratta di un circuito integrato di tipo "dual in line" a 8 pin, il cui footprint lo troverete nella libreria di FidoCad sotto al nome "IC DIL  WIDE PADS" ovvero piazzole ampie.

Internamente è costituito dalle seguenti sezioni:

  1.  un partitore resistivo che suddivide l'alimentazione (non necessariamante a 5volt) in 1/3Vcc e 2/3Vcc allo scopo di creare due soglie entro cui fare oscillare il dispositivo.
  2. Due comparatori, tipicamente costituiti da amplificatori oprazionali in catena aperta che sfruttano le due soglie sopracitate  per pilotare lo stadio successivo.
  3. Un flip/flop di tipo set/reset che squadra il segnale proveninete dallo scatto dei comparatori creandone una logica di soglia e complementandola con il segnale Q negato.
  4. Un transistor in modalità "open collector" spesso usato per la scarica della capacità praticamente sempre pesente nel gruppo RC che crea la temporizzazione.

Internamente possiamo osservare il noto schema nella prossima immagine:

Esternamente al circuito integrato NE555, vanno collegate delle configurazioni tipicamente resistive-capacitive aventi lo scopo di creare delle costanti di tempo utili alla creazione delle azioni astabili o monostabili tipiche di questo integrato.

La porta logica che vede e' in realta' una AND e non una OR, per ragioni grafiche ho inserito quella. Nel prossimo schema vedrete quella corretta.

Tali configurazioni sono note e didattiche, quindi reperibili in qualsiasi libro di testo, facciamo comunque una breve discussione a partire dall'immagine sottostante che rappresenta lo schema di un astabile che produce un'onda quadrata al pin 3.

Vediamo come risultano collegati i componenti esterni esterni alla circuiteria interna allo scopo di capire la generazione dell'oscillazione astabile.

All'accensione il condensatore C1 (supposto inizialmente scarico) inizia la fase di carica con la classica curva, a una velocita'  dipendente dalla costante di tempo Tau1, composta da (R1+R2)*C1. La tensione ai capi del condensatore C1 e rilevata dai comparatori interni collegati come in figura tramite i pin 2 e 6 in corto tra di loro.

Dato che il partitore resistivo interno presenta tensioni fisse e non nulle gia' al momento dell'accensione viene generato un segnale di set per il FLIP FLOP interno che porta l'uscira Q al pin 3 alta accendendo il LED.

Quando la tensione arriva a 1/3 Vcc al primo transito viene spento il segnale di SET dato che il comparatore e' collegato con l'ingresso invertente mentre il secondo comparatore e' sotto la soglia di intervento, in questa condizione l'uscita del FLIP FLOP rimane invariata. Questa e' la fase di "latch" o di mantenimento dell'onda d'uscita al livello alto.

Quando la tensione raggiunge i 2/3 Vcc il secondo comparatore scatta portando la sua uscita alta, ma non ci sara' alcun effetto se il pin 4 non e' esternamente abilitato, ovvero a +Vcc. In questo caso l'uscita della porta logica va alta e avviene la commutazione del Flip Flop dato che e' stato generato il segnale di RESET.

Avviene lo spegnimento del LED.

Quando l'uscita del Flip Flop va alta viene pilotato il transistor interno che permettera', al condensatore C1 di cominciare la fase di scarica, ma con una costante di tempo diversa dato che la resistenza R1 si trova esclusa dal circuito in questione, quindi  si ha Tau2 = R2*C1 diversa da Tau1.

La tensione comincia quindi a scendere secondo la caratteristica curva di scarica del condensatore, di coseguenza l'uscita del secondo comparatore e' alta soloper il tempo di intervento del transistor generando semplicemente un impulso genericamente chiamato "trigger".

Quando la curva di scarica raggiunge il valore 1/3 Vcc interviene il comparatore più in basso, generando un nuovo impulso di set che riaccende il LED.

L'azione astabile si perpetua quindi tra i valori di tensione 1/3Vcc e 2/3Vcc.

Da notare e' la presenza del condensatore sul piedino 5 verso la massa. Questo pin e' internamento collegato alla soglia  di tensione 2/3 Vcc e può servire per il monitoraggio da pare di altri dispositive, anche un canale analogico di un microprocessore da usarsi in comparazioe tramite un alro canale analogico o capture e compare, ad esempiocon i pin 2 o 6, o entrambi quando posti in corto circuito come nell'esempio in questione. Quando questopiedino viene lasciato libero e' bene collegarlo ad un condensatore, compreso tra 1nF e 10NF allo scopo di evitare l'ingresso nel dispositivo di segnali perturbanti.

Alcuni calcoli fondamentali.

La frequenza di oscillazione e' data dalla fomula     f=1/T  dove con T si indica il periodo [s]

Il perido T vale 0,693*(R1+2*R2).

Il tempo in cui l'oscita e' attiva vale  Ton= 0,693*(R1+R2)*C1

Il tempo in cui l'uscita e spenta vale Toff=0,693*(R2)*C1

Il rapporto tra il tempo in cui l'uscita e' alta e quello totale del periodo e' il ciclo utile pari a  D=T1/T

Online e' possibile trovare degli abachi che permettono il calcolo della frequenza di oscillazione del multivibratore astabile eseguito nella modalita' che ho descritto, ovvero che suggeriscono il corretto valore di R1,R2, C1 in base alla frequenza che si desidera ottenere.

Consiglio ai volenterosi di inserire le formule soprascritte in un foglio excell e autocostruirsi questo abaco..

 

La generazione del segnale PWM, utile come regolatore della potenza trasmessa, e' ottenibile come variante di questa soluzione circuitale.

Si tratta di mantenere costante il periodo T (inverso del frequenza) e dare la possibilita' a un controllo manuale di variare il latch alto rispetto a quello basso, ovvero quello normalmente conosciuto come ciclo utile (D.C. duty cycle).

Il trucco consiste nel costringere le correnti di carica e scarica del condensatore C1 a transitare in porzioni di resistenza variabile  diversa e manualmente regolata. Tale trucco si attua inserendo due diodi 1N4148 .

Ecco come diversificare i percorsi di carica e scarica della capacita':

 

 

La fase di carica, internamente soggetta alle comparazioni come precedentemente esposto, avviene nella maglia R1+R2 a cui si aggiunge la porzione di trimmer inserita. Si giunge al condensatore C1 tramite il diodo D2, l'altro ramo risulta interdetto a causa del diodo D1 in contropolarizzazione. Nella fase di scarica si interdice D2 e va in conduzione diretta D1 che permette la scarica tramite la porzione inserita del trimmer (anche nulla) attraverso il pin 7  dietro a cui abbiamo visto esserci il BHT, npn interno al chip comunemente chiamato discharge. Anche se non e' proprio vero il periodo e' pressoche' costante (all'oscilloscopio noterete delle piccole variazioni).

Rimane il probelma della frequenza di risonanza dell'eventuale motore DC collegato, questa e' specifica del motore in uso e andrebbe chiesta al costruttore perche' le misure i i calcoli da farsi non sono semplici.

Tipicamente tra i 12 e i 22 Khz si ha una buona resa.

Empiricamente si ha una frequenza accettabile quando il motore non emette strani rozii e fischi.

Quasi  certamente si cade in errore nelle frequenze foniche attorno al chiloHertz.
 

La sezione Timer.
Le temporizzazioni sono gestite da un PIC, che per ragioni di scorta a magazzino è il 16F84A, ma può essere sostituito con un altro compatibile pin to pin.
Il modello basilare ha azione mostabile, ovvero viene attivato un tempo come ritardo alla diseccitazione.
I diagrammi temporali sottostanti sono molto eloquienti.
 
 
Un oggetto di questo tipo ha senso quando i tempi impostati sono nell'ordine dei secondi e dei minuti, non è certo utile impostare uno spegnimento ritardato delle luci scale per 100 millisecondi. Tornano molto utili le routine "enhanced delay" gratuitamente distribuite dalla casa madre MicroChip, che vi metto disponibili in questo link.  nuove delay.zip
Facciamo attenzione alla prima riga del file d'itestazione delay.h il quale imposta il riferimento del clock affinché i tempi impostati siano corrispondenti ai tempi reali.
quindi in questa riga:
 
#define PIC_CLK 16000000 //16Mhz
 
inseriamo il quarzo che intendiamo installare nel nostro esemplare dell'easy timer. Personalmente uso il PIC16F84A con quarzo a 4Mhz, quindi la riga diventa:
 
#define PIC_CLK 4000000 //4Mhz
 
Nel pcb ogni pin dell'I/O del PIC sono messi a disposizione su streepline cosi che una volta acquisita dimestichezza nella programmazione, l'utente potra' a cambiare a piacimento la funzione di base come anche stravolgere completamente la funzionalita' della scheda a seconda delle proprie esigenze. Per il funzionamento di questo semplice timer si stanno usando in maniera davvero minima le potenzialita' del micro.

 Circuito di alimentazione.

La sezione di potenza è energizzata dal una tensione raddrizzata proveniente direttamente dal secondario di un trasformatore a 24 volt AC, quindi, una volta moltiplicata per radice di 2, si ottengono circa 33V D.C. molto poco stabili dato che gli spunti di coppia dell'eventuale motore rende il tutto piuttosto fluttuante.  Il circuito è un classico quindi discutiamo solo brevemente sullo schema sottoriportato.

Il progetto dispone di due alimentazioni separate, una per la potenza e una per la logica. La sezione logica richiede una potenza piuttosto limitata dato che si compone del solo PIC e dell'NE555. Risulta ben dimensionato il circuito integrato LM7805 dato che è in grado di fornire circa 1A. La preoccupazione maggione, più che dalla corrente fornita e quindi dalla potenza fornita da questa sezione al circuito, viene dalla potenza che il componente si trova a dissipare dovuta al grande salto di tensione che deve eseguire. Siamo infatti molto vicini al limite di funzionamento per le tensioni accettate in ingresso (circa 36 volt). Dovendo fare tra monte e valle un salto di circa 25 volt anche i pochi milliampere necessari al funzionamento del PIC e dell'NE555 potrebbero generare sul case TO220 una certa quantità di calore. Sarà bene montare un piccola aletta di raffreddamento.

Il diodo indicato con 1N4004, che potrà essere un comunissimo 1N4007, posto in parellelo al regolatore di tensione con il catodo nel terminale di ingresso, protegge il circuito integrato dalle correnti di scarica inversa che si vengono a creare quando manca la tensione sul lato ponte, ovvero è stato spento il dispositivo.  Una ulteriore sicurezza, che impedisce questa scarica, è assicurarsi che il condensatore elettrolitico C5 (lato ponte) abbia un valore maggiore di quello sul lato valle (lato circuito da alimentare ovvero l'uscita dell'LM7805), si ha quindi:

C5 > C6

ed i valori prescelti sono  C5= 470uF elettrolitico 50VL , C6=220uF elettrolitico 50VL.

I condensatori C1 e C2, notoriamente sono ceramici ed hanno lo scopo di impedire le autoscillazioni del regolatore. Il valore da un certo margine di scelta, in caso di mancanza a magazzino di questi, vanno bene anche dei poliestere da 100nF (in molti casi analoghi neppure sono montati). Il ponte di diodi è il classico da un ampere con corpo tondo, facciamo attenzione a montare il piedino positivo sulla piazzola indicata con LSP1 (ovvero il pieinopiù lungo se usate un componente nuovo).

La resistenza R1, possiamo montarla di valore anche piuttosto alto dato che il diodo LED risulterà chiuso nella scatola del circuito è ha valore indicativo solo in fase di test e montaggio (vanno vene 1k5 o anche 2k2, ma se desiderate montare il led sul pannello frontale possiamo aumentare la luminosità diminuendo il valere fino anche a 330ohm.

In definitiva i morsetti X2-1 e X2-2 vanno connessi alla fonte alternata di alimentazione che può essere sia alternata che continua. Se disponete nei pressi del posto in cui montate il circuito di qualsiasi valore e forma di tensione compresa tra i 7 volt e i 35 potete collegarvi a questi morsetti anche in maniera non curante della polarità.

L'alimantazione di potenza, ovvero quella che energiza il motore o le plafoniere a LED è fornita ai morsetti X1-1 (tensione positiva) e X1-2 (massa) facendo attenzione alla polarità.

Le due alimentazioni della logica e di potenza rimangono separate così ne trae profitto la stabilità del sistema.

 

 
L'interdizione delle linee.
Questa sezione può essere sviluppata in varie maniere, o addirittura omessa quando il segnale PWM sia generato internamente al PIC invece che hardware tramite una o più sezioni identiche con l'integrato NE555. Nel mio progetto viene proposta questa soluzione con due BJT più che altro per questioni didattiche e per eleganza circuitale.
Nel progetto del selettore di due canali analogici a BJT, presentato sempre su Grix, usavo un solo transistor NPN, operante in zona saturazione/interdizione  il cui collettore era connesso al nodo centrale di una pseudo serie di resistenze operanti come impedenze oggiuntive alle linee analogiche, quindi quasi trasparenti.  
 
Alla linea a cui è connessa R4 giunge un segnale stazionario ON/OFF dal pin del microcontrollore, quindi da 0 a 5 Volt. Al medesimo punto è connesso anche il diodo LED verde, con la sua resistenza da 10k (farà una luce bassina ma non abbiamo interesse ad alzarla, a meno che questo LED non venga portato a qualche pannellino frontale). 
La maglia costituita dal pin alto dell'uscita del PIC, la resistenza R4, la giunzione Vbe, soddisfa l'equazione:
 
Ib R4 - Vbe - Vrb1 = 0
 
Dove con Vrb1 si intende la tensione presente al pin del PIC quando l'uscita è alta. Mettendo in evidenza la corrente Ib si ottiene:
 
Ib= (Vrb1 + Vbe)/R4
 
sostituendo i valori noti all'interno dell'equazione si ottiene:
 
Ib = (5V-0,6V)/1500 = 2,9 mA 
 
Questa corrente garantisce una saturazione abbastanza profonda del BC337 che alle misure, come ai datascheet mostrano un hfe mai minore di 250 ( a volte raggiunge i 350), per una corrente Ic max di 0,8 A.
In queste condizione di pilotaggio della base  la tensione Vce scende a valori molto bassi (mai maggiori di 0,2V) quindi praticamente collega a massa la resistenza posta in base del BJT PNP indicato con Q2. Al fine di non distruggere la giunzione B-E viene inserita la R6, la maglia di base va soggetta a calcoli simili a quelli visti per l'NPN, e data  l'analogia  circuitale si avranno in uscita dalla base circa 2 milliampere.  Dato che questi due milliampere vanno verso massa tramite le giunzionei tra collettore e mettitore dell'NPN la soluzione non è accettabile come stadio di ingresso di segnali audio. Questi subirebbero una perdita non trascurabile, cosa invece insignicante in un segnale in tensione fissa alta a 5 Volt o a onda quadra come nel nostro caso.
L'oscilloscopio dimostra infatti un'ottima resa del segnale tra emettitore  e massa (quindi a monte) e collettore massa (quindi a valle) del circuito di interdizione di linea. Le forme d'onda sono infatti praticamente uguali. 
 
La sezione di potenza.
La versione che ho realizzato, come accennato, serve per controllare un motore D.C. di media taglia, di tipo spazzole/collettore ed eccitazione a magnete permanete con riduzione meccanica a 80 giri minuto. Le spazzole sono alimentate con una raddrizzata ricavata da un torroidale da 100 VA, che fungendo da collo di bottiglia per la corrente (a causa della saturazione del nucleo) realizza una protezione (anche se un po brutale) per quelle condizioni di funzionamento, non rare nella specifica applicazione, di rotore bloccato.

 

 

Come possiamo vedere dallo schema, compaiono 4 morsetti, X1 a due vie in cui si collega la tensione raddrizzata che perviene Al morsetto X1-1 al valore di 33Vdc (circa), mentre a X1-2 la massa.  Hai morsetti X3-1 e X3-2, è inserito l'indotto del motore con il positivo su X3-2.

Benché molti, in applicazioni simili,  colleghino due mosfet in parallelo, io preferisco la soluzione dell'unico elemento attivo, correttamente polarizzato. 

IRFP460 (o equivalente) piedinatura da sinistra G-D-S

Il Mosfet è un canale N, come si vede anche dal simbolo grafico, del tipo ad arrichimento. L'applicazione di una tensione tra Gate e Surce, nel databook consigliata tra 2,5 e 5 volt, comporta la creazione del canale conduttivo tra Drain e Surce, che nel funzionamento "tutto chiuso come un interruttore", ovvero canale completamente formato, garantisce (fonte databook) una resistenza residua tra il terminale centrale  (Drain) e il terminale di destra (Surce) di 0,27Ohm.   Questo valore è molto buono dal punto di vista della dissipazione che alla fine verrà dissipata, ma non è difficile trovare dei Mosfet con questo parametro residuo di un'ordine di grandezza più basso. Il componente risulta quindi più freddo a parità di corrente che lo attraversa. Nel funzionamento impulsivo, come nel caso di controllo PWM la corrente può raggiungere anche gli 80 ampere.

Il foro centrale di fissaggio risulta isolato, quindi non sono indispensabili miche isolanti o materiali simili nella fase di montaggio dell'aletta. 

Internamente è presente un diodo di ricircolo che in molti casi può salvaguardare la giunzione da solo potendo così eliminare i diodi schottky previsti esternamente.

La derivata rispetto al tempo della tensione mi da un tempo di recovery pari a circa 3,5 [V/ns], il componente quindi oltre assere molto potente è anche piuttosto veloce.    

 Scarica il databook del Mosfet prescelto ->    UserFiles/ad.noctis/irfp460.pdf

In molte applicazioni dei mosfet, visibili in internet si può notare la mancanza della resistenza di Gate, personalmente preferisco ridurre lo stress al terminale di Gate mettendoci in serie una resistenza di piccolo valore anche minore del centinaio di Ohm, in questo caso solo 47Ohm.

In definitiva l'uso del Mosfet non è così complicato come potrebbe pensare un neofita, quindi consiglio a tutti un primo approccio con soluzioni circuitali come questa ovvero di tipo ON/OFF e non di sedimentare i propri studi solo sul BJT o Darlington 

 

Il software.
   

Il software è molto semplice e altrettanto semplicemente modificabile per ottenere tempi e tipo di azione (ritardo all'eccitazione o ritardo alla diseccitazione) consoni alla propria specifica esigenza:

 

/******************************************
 *  Easy Timer PWM By ad.noctis      *
 *     monostabile con 16F84a            *
 * dopo 15 minuti toglie un consenso *
 ******************************************/

#include    <pic.h>
#include    "delay.h"



#define     ON      1
#define     OFF     0
#define     rele  RB1



void main(){
    TRISA=0xFF;
    TRISB=0;
   
        rele=1;
        DelayS(25);   // Questo ritardo monostabile è preassegnato a 25 secondi.
        /*                    //Questo blocco commentato se liberato genera un
        DelayS(255); //ritardo complessivo 15 minuti pari a 900 secondi
        DelayS(255);
        DelayS(255);
        DelayS(135);
        */
        rele=0;
   
    while(1){
        /*
        //il programma non viene rieseguito se la scheda elettronica
        //non viene spenta e riaccesa come da specifiche tecniche desiderate
        if (RA0==1){
        rele=1;
        }
        else{
        rele=0;
        }
        */
       
    }
}

 

Scarica il file hex con ritardo prefissato 25 sec -> EasyTimerPWM_25s.zip

Nella tabella sottostante sono disponibili dei file .hex e il relativo sorgente  .c delle temporizzazioni preassegnate allo scopo di aiutare quegli utenti che non sono esperti di programmazione o che non conoscono il linguaggio C per PIC16. 

Temporizzazioni standard come ritardo alla diseccitazione

 EasyTimer1s.zip  EasyTimer15s.zip  EasyTimer5m.zip EasyTimer1ora.zip 
EasyTimer5s.zip EasyTimer25s.zip  EasyTimer10m.zip  EasyTimer2ore.zip 
EasyTimer10s.zip EasyTimer1m.zip EasyTimer15m.zip  EasyTimer24ore.zip 

 

La tabella sovrastante abbinata al diagramma corsa/tempo è molto eloquiente, si tratta di un effetto "luci scale" temporizzabile che sostieme il PWM per il tempo di preset. Per i programmatori di PLC Siemens ho riferito l'azione ai comandi STEP7, ovvero al timer di tipo SA.   

 

 
 Nella sottostante tabella sono disponibili i ritardi standard e i file sorgenti dell'azione "ritardo all'eccitazione". Per i programmatori Siemens tale azione è nota come SE.  
 
Temporizzazioni standard come ritardo all'eccitazione
EasyTimer_RitEcc_1s.zip EasyTimer_RitEcc_15s.zip EasyTimer_RitEcc_5m.zip 

EasyTimer_RitEcc_1ora.zip

 EasyTimer_RitEcc_5s.zip EasyTimer_RitEcc_25s.zip EasyTimer_RitEcc_10m.zip EasyTimer_RitEcc_2ore.zip
EasyTimer_RitEcc_10s.zip EasyTimer_RitEcc_1min.zip EasyTimer_RitEcc_15m.zip EasyTimer_RitEcc_24ore.zip

 

Il ritardo all'eccitazione è sostenuto fintanto che è presente il segnale di consenso, che nel caso del nostro progetto è costituito dalla semplice accensione della scheda rimane presente. La successiva versione, a fine pagina, attende invece la pressione di un pulsante di consenso per effettuare sia l'azione SE che l'azione SA.

Qualcuno potrà commentare che un PIC per svolgere la sola funzione di Timer è eccessivo, e in primo acchitto potrebbe anche avere ragione, ma quello che si vuole presentare è una scheda multiuso che potrà svilupparsi si più canali quando l'utente acquisirà nozioni di programmazione più approfondite. Tutte le uscite e ingressi del PIC sono disponibili sullo streepline maschio, così che il circuito si presta a funzionare anche come piccolo controllo programmabile. Più avanti nell'articolo presento una bozza di multicanale.

 

 

Scarica il PCB FidoCad. ->  Easy_Timer.zip 

 La versione Eagle del circuito è molto compatta ed elegante, vediamo qui sotto lo schema e il PCB:
 
 
Lista dei componenti.
(riferito alla versione FidoCad, riadattabile alla versione Eagle)
R1 = 10k
R2 = 1k //inserita in serie al lato anodo del diodo connesso al potenziometro "ver. FidoCad" vale 4k7
R3 = 4k7
R4 = 1k5
R5 = 10k
R6 = 10k
R7 = 47 ohm
R8 = 100k
R9 = 10k
 
IC1 = 16F84A oppure 16F628
IC2 = NE555
IC3 = LM7805
 
Q1 = BC337
Q2 = BC327
Q3 = quarzo 4 Mhz
Q4 = MosFet ad arricchimento canale N IRFP460 (o equivalente).
 
D1 = 1N4148
D2 = 1N4148
D3 = Diodo veloce Schottky P600k o equivalente //si può omettere in caso di carico non induttivo
D4 = Diodo veloce schottky P600k o equivalente // si può omettere in caso di carico non induttivo
D5 = 1N4007 //per protezione dalle correnti di scarica inverse per il regolatore
D6 = ponte di diodi da 1 A (housing tondo)
 
C1 = 100nF poliestere
C2 = 100nF poliestere
C3 = 1nF poliestere //nella versione FidoCad è sul pin Vcc dell'NE555
C4 = 10nF
C5 = 470uF elettrolitico 50VL
C6 = 220uF elettrolitico 50VL
C7 = 22pF ceramico
C8 = 22pF ceramico
 
X1,X2,X3 = Morsetti a vite da stampato a due posizioni.
 
 
 
 
 
Scarica il progetto in formato Eagle ->Easy_Timer_PWM.zip
 
Nell'immagine sottostante vediamo lo sviluppo 3D di questo progetto, tanto per avere una idea dell'aspetto finale.
è una realizzazione molto compatta ma comunque in grado di gestire elevate potenze

 

Realizzazione pratica.
Nell'immagine seguente vediamo la realizzazione in FidoCad del circuito:
 
 
L'ampissima aletta di raffreddamento visibile nella foto è in molti casi inutile, dipenderà quindi dalla vostra applicazione, dalle vostre "misure" e dal vostro specifico interfacciamento in campo con l'attuatore, che come accennato potrebbe anche non essere un motore.
Nel mio caso, ho dovuto sovradimensionare il mosfet finale, (tiene quasi 20 ampere con un potere di interruzione di 500V) dato che l'attuatore, deve spesso lavorare a rotore bloccato anche in maniera continuativa.  Nella situazione di blocco passano diversi ampere (non li ho misurati, ma comunque saranno dipendenti dal vostro motore DC) che troveranno come collo di bottiglia la saturazione del nucleo del trasformatore (ho usato un 100 VA torroidale).  La mia applicazione impone di non spegnere il motore anche in situazione gravosa ma comunque di tentare un avvio "forzato" eventualmente assistito dall'esterno. Povero motore!, ma devo fare così...  è imposto dall'applicazione.  Ecco comunque che l'elettronica è in grado di sopportare lo stress di quello che comunque non è un corto circuito.
Parlando in valori efficaci, il secondari a 24 V a.c. saturerà a circa 4,1A (molto pochi rispetto alla possibilità di tenuta di questo potente Mosfet).
Chi avesse ancora timori di bruciatura, dovesse quindi lavorare in condizioni sporadiche di corto circuito controllato, potrà usare il MosFet IRFP064 che pur avendo un potere di interruzione ridotto a 70V può sopportare circa 100A, quindi una corrente davvero notevole. In queste condizioni estreme di lavoro l'aletta che vede in figura diventa indispensabile. La potenza trasdotta in calore in condizione di C.C. è molto alta quindi è indispensabile anche un buon contatto tra l'housing e l'aletta.
 
 
 
 
Nella figura vediamo il Mosfet impiegato nella mia versione. La piedinatura da sinistra verso destra è Gate, Drain, Surce. Questi mosfet risultano molto diffusi ma un po' costosi, quindi, se dovete pilotare ad esempio un piccolissimo motore D.C. o semplicemente un carico resistivo (ad esempio una resistenza per termoriscaldatori) o delle lampade LED, o simile, si potrà sostituire anche con un TIP122 (tiene 8A, ma attenzione ai corti), per il quale va rivista la resistenza di polarizzazione R7 che consiglia del valore 2k2 dato che è in grado di saturare con soli 10mA. In questo caso la resistenza R8 può essere omessa. 
 
 
 
 
 
 
 Nella foto notiamo la presenza dei due led, questi hanno il seguente significato:
rosso -> scheda alimentata
verde -> PWM presente al mosfet (motore in marcia o plafoniera accesa)
 
Mentre il LED rosso è sempre acceso, quello verde sarà attivo solo in dipendenza della temporizzazione che decidiamo di fare svolgere al circuito.
 
 
 
 
 
 
 
 
Plafoniera a LED bianchi per illuminotecnica. Il sistema e' stato collaudato su questa con un ottimo effetto di linearita' della regolazione e assenza di flicker.
Alla massima intensita' la luce e' abbagliante. La plafoniera non e' comunque originale rispetto a quella fornita a titolo di esempio dal costruttore. Sono state apportate sostanziali modifiche circuitali per poterla alimentare in continua.
 
 
Particolare degli elementi illuminanti dei della plafoniera, purtroppo non sono in grado di fornire specifiche tecniche più dettagliate degli elementi illuminanti.

 

 

Versione con pulsante autoritenuto.

Con semplici accorgimenti circuitali, di cui è stato realizzato il PCB, si può ottenere un timer multicanale, ed usando gli interrupt si possono anche impostare temporizzazioni parallele. Innanzitutto bisogna munire il controllo di canali di ingresso, che in questo caso saranno i pin del PORT A che saranno muniti di opportune resistenze di pullup (tipicamente 10k).

Per questioni di immunità al rumore è opportuno che i pulsanti siano normalmente a uno e pressati zero. Questa soluzione è genericamente considerata la più valida ed usata.

Lo schema funzionale  è visibile nella prossima immagine.

Questo tipo di schema, detto funzionale, può risultare un po' ostico per gli informatici o per gli elettronici ma è il pane quotidiano degli elettrotecnici e gli addetti alle automazioni dato che rappresenta la logica funzionale che in un certo qual senso rispecchia anche l'automazione elettromeccanica. (si intende la logica cablata a relè) .Lo schema rappresenta la funzione OR tra il pulsante che viene premuto e l livello logico dell'uscita che si vuole ottenere. Questo OR è detto autoritenuta, infatti se premendo il pulsante il segnale giunge al nodo, dove poi raggiunge la bobina (uscita logica) tramite il contatto normalemente chiuso dell'evento che costituisce lo sgancio dell'autoritenuta stessa, comportando la chiusura del contatto "LUX" che è appunto l'autoritenuta. Si tratta in effetti di una sorta di retroazione positiva che ha un effetto memoria dell'evento.

Come vediamo nel sorgente sottoriportato i comandi decisionali logici trovano naturale implementazione nel costrutto "if" e negli operatori logici unari che sono:

una bozza del sorgente è il seguente:

/***************************************
*        Luci scale  con PWM            *
* G-Tronic Robotics   Marco Gottardo   *
*           05/Maggio/2011             *
*                                      *
*Temporizzazione 20 sec luci condominio*
****************************************/
 
#include <pic.h>    //parentesi angolari perche' si trova in cartella
#include "delay.h"  //apici se inserito nella cartella del progetto
                    //se mettiamo le delay in include vanno tra <>

#define LUX_on RA0
#define LUX    RB0

void main(){

TRISA=0xFF;
TRISB=0;

//commentare le prossime due righe se non si usa
//il PIC 16F877A

ADCON1=0b00000111;
CMCON=0b00000111;

char timeout=0;
 while(1){
//Nel caso si voglia usare il pulsante normal 1
//togliere dal commento queste due righe e commentare
//i successivi due if.
 
 /* if (LUX_on==1) timeout=0;
  if ((LUX_on||LUX)&&(!timeout)){
 */    
  if (LUX_on==0) timeout=0;
  if ((!LUX_on||LUX)&&(!timeout)){
  LUX=1;
  } 
  else LUX=0;
  
  if(LUX){DelayS(20);
  timeout=1;
  LUX=0;
  }
 }
}

 

scarica il sorgente .C e il file esadecimale .hex  preset 20 sec -> luciscale.zip

La presenza della logica autoritenuta vanifica la classica tecnica di antirimbalzo con il doppio controllo "if" con delay. Il PCB, rielaborato per gestire più canli PWM temporizzati è il seguente, come possiamo vedere rispetto alla versione base è già munito delle resistenze di pullup negli ingressi e di un triplo canale di potenza. Il microcontrollore pilota anche un robusto canale a relè per l'inversione di marcia di un motore DC di media taglia.

scarica il PCB multichannel ->Multichannel.zip

I due relè montati sullo stampato, sono visibili sul lato destro del PCB. Come si può notare c'è bisogno di eseguire alcuni collegamenti in filo wrap, al fine di non complicare troppo il PCB o di espanderlo oltre le necessarie misure. La versione visibile nell'immagine ha ingombri 160mm x 48mm, consentendo la fotoincisone di due esemplari per ogni supporto fotosensibile standard di 160 per 100 millimetri.

Ecco un esemplare di Timer-PWM multiplo montato, la notevole quantità di cavi è dovuta al fatto che l'applicazione è dal punto di vista software molto più evoluta di quella presentata in questo articolo e titolo esemplificativo. per ogni canale sono presenti due segnali di fine corsa (acquisiti in modalità normal->1, pressed->0), oltre che i pulsanti di marcia e di consenso (presenza uomo).

Tuttii cavi dei finecorsa e dei potenziometri per la regolazione PWM vanno portati  al bordo macchina o alla eventuale console di controllo tramite un connettore cannon DB15, mentre i pulsanti (o micro) di presenza uomo vanno portati fuori dallo chassy con dei connettori di tipo Weidmuller.

Sul lato destro è ben visibile il connettore che porta i 6 fili per i potenziometri di regolazione, 6 fine corsa, alcuni segnali di massa, mentre davanti, a penzoloni vediamo il pulsante di consenso, provvisoriamente saldato in testa ai cavi anziché sul connettore weidmuller.  Il dissipatore sembra piccolo ma in realtà i mosfet lavorano quasi sempre freddi dato che sono davvero robusti (20 amper continui). qui in Italia costano un po di soldini , ma una fornitura straniera mi è arrivata per soli 70 cent IVA compresa ad esemplare.  Questo prototipo pilota 4 motori, ed ha subito uno stress test involontario (abbiamo mantato male un finecorsa) e non ci siamo accorti che un motore ha lavorato a rotore bloccato fino a rovinare lo smalto dell'avvolgimento, ma il mosfet sta continuando tuttora a lavorare.

Nella prossima foto vediamo  uno dei quattro motori collegati alla scheda, tre di essi regolati in velocità in un solo senso di marcia, mentre il quarto a velocità dei dati di targa ma con la possibilità di inversione del senso di marcia.

 

La foto non rende molto l'idea delle dimensioni di questo motore, ma tanto per avere un termine di paragone è circa una volta e mezza piùgrande di un comune motore per alzacristalli automobilistico a 12 volt. L'indotto di questo motore è a 24 ma, benche sconsigliato, in PWM sopporta bene anche i 24 raddrizzati e livellati, ovvero 33V DC. Anche facendoli lavorare in condizioni gravose non abbiamo mai riscontrato perdite di efficienza. Empiricamente ho riscontrato che la frequenza corretta di pilotaggio con PWM è circa 12 Khz, valore in cui è minima la rumorosità (il fischio di risonanza) e massima la coppia.

Sone necessari i seguenti interventi dopo l'assemblaggio: .

  1. Collegamento (in alto a destra) della linea di alimentazione rossa del NE555 con un qualsiasi punto delle linee rosse sul lato destro.
  2. Collegamento con Rb dei due transistor BC337 ai pin di I/O dai quali siamo interessati ad abilitare i canali PWM, ad esempio RB0 e RB1.
  3. inserimento di una resistenza in serie alla porzione destra del potenziometro di regolazione al fine che il duty cycle non parta da zero, ma da un valore minimo, ad esempio 30%.  Nel caso stessimo pilotando un motore garantisce le partenze sotto sforzo.
  4. Munire gli elementi di potenza di un dissipatore appropiato, condiviso, e senza la necessità di miche isolati dato che il corpo degli IRFP460 sono isolati per costruzione.
  5. Il software, sulla falsa riga di quelli sopra presentati, dovrà essere sviluppato usando pulsanti normal 1 -> pressed 0, questo aiuta il sistema a non eseguire falsi comandi e ad essere immune al rumore.

Licenza Creative Commons
This opera is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Italy License.

 

 

Let's GO PIC

Configurazione della Micro-GT PIC versatile IDE per il processore a 18 pin.

Benché questo episodio del tutorial "Let's Go PIC", numero 8, sia molto succinto sarà a molti utilissimo, visto che per la prima volta mostriamo chiaramente come configuare la piattaforma di supporto, Micro-GT PIC versatile IDE  per il pic a 18 pin quale ad esempio il 16F84A (e non solo).

Concetto importante, da non dimenticare mai, è che la versatilità della piattaforma impone la visione degli schemi elettrici al fine di poterne sviscerare di volta in volta le potenzialità.

Come detto nei precedenti episodi la scheda consente di programmare i PIC in due distinti modi tramite la porta seriale RS232.  Il primo è quello diretto in cui in maniera classica viene portata la tensione a 13,5 volte sul piedino di programmazione tramite il cavetto ICSP (in circuit serial programming) mentre il secondo, forse più elegante, consente di programmare il PIC direttamente tramite un normale convertitore USB-RS232 in modalità a bassa tensione dato che nel chip viene precedentemente inserito il Bootloader (scaricabile dal mio sito personale). Questa seconda modalità avviene dopo avere spostato alcuni jumper, che bypassano l'integrato CD4069, e portano la porta direttamente all'UART del PIC, ovviamente tramite il traslatore di livello MAX232. Tale modalità, data la grande propensione alla cominicazine bidirezionale, consentirà a programmi sviluppati in vari linguaggi, ad esempio Visual Studio 2011, di inviare stringhe e leggere stringhe dando il comando dell'I/O del PIC al vostro personal computer, per questo motivo ho chimato questa modalità "supervisone", a cui dedicheremo un capitolo di Let's GO PIC.

Esiste una terza modalità, pubblicata dall'amico "CORMAS" su grix, che consente la trasformazione della Micro-GT in direttamente accessibile tramite porta USB, invito tutti a prendere visione di quanto propone nel suo articolo. Avendo eseguito dei test su un esemplare da lui fornito assicuro che è funzionante.

Vediamo subito la parte di schema che riguarda la corretta configurazione del cavetto ICSP.

 

Per potersi interfacciare a qualunque processore è necessario avere a disposizione la piedinatura, ricavabile dalla documentazione tecnica, che ci mostra dove si trovano i piedini per la programmazione ICSP, scopriremo che grossomodo sono divisi in famiglie quasi coincidenti con le varie piedinature DIL disponibili.

Nella Micro-GT troveremo due connettori indicati con ICSP1 e ICSP2, questi sono collegati in parallelo quindi potremmo collegare il cavetto indifferentemente sul primo o sul secondo.

 

cavetto ICSP, è importante rispettare colori e sequenza.

Per mantenere al compatibilità con il software PICPROG2009 suggerisco di tenere la stessa sequenza di cavi e colori della foto in cui il conduttore numero 1 è il marrone. Le varie configurazioni possibili sono suggerite dallo stesso software di programmazione picprog2009, nella sezione hardware test e comunicazione. 

innesto del cavetto di programmazione in circuit.

Osserviamo la sequenza di colori a partire dal pin numero uno nel cavetto, questi sono:

  1. marrone
  2. rosso
  3. arancio
  4. giallo
  5. verde

Nello schema elettrico, predisposto per il PIC 16 F84A e piedinature equivalenti, si è proseguito lungo i cavi all'interno della scheda con i medesimi colori togliendo qualsiasi ambiguità di collegamento.

Attenzione che potrebbe essere necessario diversificare la fase di programmazione dalla fase di esecuzione, sarebbe infatti bene che non ci fosse nulla collegato ai pin del PIC durante la fare di scrittura del programma.

 

 

 

.

 

 

Collegamento dell'ICSP.

Vediamo con alcune foto il dettaglio della connessione del cavetto ICSP.

Sul lato sinistro, di fronte alla coppia di regolatori di tensione, c'è la partenza a 5 posizioni del connettore ICSP inserito nello slot1. Andando verso detra destra i cavetti si dividono in due gruppi con destina secondo lo schema elettrico visbile più sopra. Riassumendo si ha:

  1. Marrone -> SV16 pin 3 (Tensione di programmazione VPP qui a 13,2Volt)
  2. Rosso -> SV17 pin 4 (Vdd, tensione di alimentazione del PIC +5Volt)
  3. Arancio -> SV16 pin 4 (Vss, massa della tensione di alimentazione 0Volt)
  4. Giallo -> SV17 pin 3 (DPGD flusso dei dati verso l'area flash del PIC)
  5. Verde -> SV17 pin 2 (DPGC Clock con cui si sincronizza il flusso dei dati verso l'area flash).

 

 Un ottimo articolo di approfondimento sulla programmazione/conessione ICSP lo potete trovare su grix a questo riferimento:

http://www.grix.it/viewer.php?page=9663&bakto=%2F%3Ftab%3D0

Usando i suggerimenti di conessione su questo articolo il circuito EasyTimer qui presentato verra' in futuro modificato per consentire la riprogrammazione "incircuit".

Si può collegare o scollegare le parti interessate del circuito tramite i seguenti jumper:

  1. SV13 e SV14: Collegano e scollegano il quarzo da 4Mhz, se avete sempre usato la Micro-GT per il processore di default 16F877A, allora potrebbero trovarsi chiusi tra i pin 1-2 collegando i pin del PORTB all'I/O onboard. Per collegare il quarzo porli tra 2-3, ovvero tra il centro e il lato del display. Se avete difficoltà di programmazioe teneteli aperti durante la fase di scrittura.
  2. JP4: la sua chiusura consente l'alimentazione positiva  del 16F84A, questo jumper si è reso necessario per poter mantenere l'utilizzo del pin 36 del 16F877 (40 pin RB3) e del 16F876 (28 pin sempre RB3). Lasciando abilitato il PORTB, tramite il dip S13 (canale3), vedremo il terzo LED accendersi fisso, questo indica che l'integrato è alimentato corretamente., se questo non avvenisse dobbiamo verificare che il pin 5 risulti connesso alla massa. A tale collegamento ci pensa il cavetto ICSP.
  3. JP3: Questo jumper è molto importante infatti non rappresenta solo la possibilità di collegare il pulsante di reset e la relativa resistenza di pullup. Risulta importante perché impedisce alla scheda di andare fortuitamente in corto circuito durante l'uso del 16F84A (si tratta comunque di un corto non distruttivo perché collegherebbe entrambi i morsetti di alimentazione a Vdd che non da origine a una differenza di potenziale). Questo jumper si trova vicino agli streep line di selezione NC/NA dei pulsanti onboard. precisamente si trova collegato a SV2 che in questo caso dovrà essere collegato in modalità PULLUP (il gruppo di resistenze R21-R22-R23-R24 si provano collegate a Vdd e quindi i relativi pulsanti assumono la funzione normal->1, pressed->0). in questa condizione,con il punticello che chiude JP3 il pin 5 risulta collegato direttamente a massa e il 16F84 è correttamente alimentato. 
  4. SV2: Si tratta di uno streep line a 5 posizioni, che da la possibilità, quando inserito il processore di default  a 40 pin, di decidere se i pulsanti lanciano uno o lanciano zero, per questa applicazione con processore a 18 pin è d'obbligo l'allineamento a finistra, ovvero la configurazione del gruppo di resistenze sopracitate come pull-up, dato che una di esse è connessa al pin MCLR.

 

configurazione di JP3 e SV2 per 16F84A.

 

Quando lanciato  in esecuzione il programma di test fa accendere regolarmente i LED.

Come notiamo nella foto, i led collegati al PORTA del pic 16F84A sono statti deviati nella riga PORTB (quella centrale dell'I/O on board. Il quarto LED da destra, e' naturalmente accesso fisso ed indica che sul pin di alimentazione e' presente la tensione deviata con l'apposito jumper.

I led successivi, andando verso destra, sono RA0, RA1, RA2, poi si salta all'inizio della riga, quindi tutto a sinistra dove si prosegue con RA3 e RA4. I rimanenti due led della riga sono giustamente spenti perche' il PORTA del 16F84A dispone di solo 5 punti di collegamento su questo PORT, sarebbero invece 8 sul port B.

Nella fase di esecuzione è bene sganciare il cavetto ICSP dato che questo potrebbe conflittuare con qualche specifica applicazione. Va tenuto inoltre presente che le serigrafie riportate mediamente per il processore a 40 pin potrebbero non concidere con quella della propria applicazione in modo particolare quando si decida di usare la modalità freeport in cui ogni risorsa di I/O on board può essere agganciata/deviata su un punto a piacere del microcontrollore in virtù della grande disponibilità di pin e dipswitch.

 

 

Licenza Creative Commons
This opera is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Italy License.

 

Appendice di fine pagina.

La piattaforma di supporto per il tutorial a puntate "Let's GO PIC"  e' come gia' detto e' la Micro-GT PIC versatile I.D.E.

Con piccoli accorgimenti e' interfacciabile direttamente al PICKIT 3 e con la modifica proposta nell'articolo di cormas edito su grix, e' possibile collegarla direttamente al notebook tramite la porta USB.

Nella versione normalmente distribuita e' possibile il collegamento USB nella modalita' supervisione che consente la programmazione del pic di riferimento in LVP grazie all'utilizzo dei bootloader.

Dispongo a magazzino di esemplari del circuito stampato della scheda.

PCB Micro-GT  size  155mm x 165mm

Chi fosse interessato ad avere un esemplare mi può contattare tramite messaggio privato in Grix o nella mia mail personale [email protected]  

Fino ad esaurimento delle scorte la posso spedire a prezzo di costo più le spese di spedizione con rimborso su paypal.

Chi invece fosse interessato ad un esemplare montatao e collaudato mi contatti tramite la mail.

Attualmente la Micro-GT PIC e' l'unica scheda programmer/demoboard che integra le interfacce di potenza per il controllo diretto fino a tre motori DC oppure uno DC fiono a 8 ampere e uno passo/passo fino a 2 ampere per avvolgimento.

Le alimentazioni di potenza sono separate da quelle della logica.

Nota bene: I 16ingressi digitali sono configurabili tramite jumper nella funzionalita'  normal->0, pressed->1 oppure normal->1, pressed->0 a gruppi di 4.