MICRO PLC con PIC16F628
Progetto pubblicato sulla rivista Elettronica Flash |
IL PROGETTO Di progetti di schede con la funzione di PLC ne sono apparse molte nelle riviste per hobbisti, ma tutte erano predisposte per contenere un micro programmato per assolvere una funzione specifica, cambiare il funzionamento significa togliere il micro e riprogrammarlo nuovamente. Il presente progetto è invece un PLC reale con un micro che contiene un interprete di tipo AWL, cioè un linguaggio a righe di istruzioni come i PLC più evoluti. Il tutto programmabile con soli quattro pulsanti. La tabella seguente riassume le caratteristiche del nostro PLC.
Lo schema elettrico ruota attorno al micro, un economico PIC16F628, fratello maggiore del più famoso 16F84, un RISC della Microchip dal prezzo di circa 4 Euro contenente una memoria programma di 2Kbit di tipo Flash riprogrammabile per più di 1000 volte, unarea memoria dati di 128 Byte, 128 Byte di RAM, 3 Timer e altro ancora. Dispone di 18 piedini di cui 16 possono essere usati come ingressi o uscite, che diventano 14 nel caso venga usato un quarzo come generatore di clock. I piedini utilizzati come ingressi sono quattro e sono collegati internamente al PIC alla porta B e precisamente da PB4 a PB7. Ogni ingresso utilizza una resistenza in serie e una che forza lingresso del micro a massa. Uno zenner da 4V7 protegge il PIC da tensioni superiori ai 5 Volt. Con questa configurazione possiamo applicare agli ingressi una tensione variabile tra i 5 e i 24 Volt circa. I primi quattro Bit della porta B hanno un duplice impiego, sono necessari per scambiare i dati tra il micro e lLCD e, alternativamente, alimentano i pulsanti. Per dialogare con il display, è necessario disporre dellRS (Register/Resect, pin 4) che indica al LCD se è in arrivo un dato o unistruzione e il CLK (ClocK, pin 6) chiamato anche E, che sincronizza, sul fronte di discesa, i dati o le istruzioni da e verso il display. In questo modo è possibile gestire gli stessi pins utilizzati per inviare i dati al LCD anche in altro modo, nel nostro caso amministrano pure i pulsanti utilizzati per programmare il PLC. Laltra porta interna al PIC è la porta A. I primi quattro Bit e precisamente da PA0 a PA3, sono usati per pilotare un relè ciascuno, attraverso dei comuni transistors tipo NPN che aumentano la corrente delle uscite del PIC, insufficiente al pilotaggio di un relè. Questi quattro relè rappresentano le uscite fisiche del nostro PLC e possono interagire con il mondo esterno controllando dei carichi non superiori allAmper. Proseguendo la descrizione dei restanti piedini facenti capo alla porta A del PIC, PA5 di solito ha la funzione di Reset, in questo caso viene usato come ingresso per testare lo stato dei pulsanti. I restanti Bit della Porta A, precisamente il PA6 e il PA7 perdono la loro funzione classica di pilotaggio esterno di un quarzo perché ci servono i piedini come uscite per gestire lLCD. Provvede il programma per il PIC (precisamente una parte della Word di configurazione) ad attivare loscillatore interno da 4 MHz e parametrizzare i due pins come uscite. Il timer interno non è molto preciso, ma a noi non serve una accuratezza elevata anche se non dobbiamo dimenticare che nel nostro PLC abbiamo a disposizione ben 5 timer. Ci possiamo comunque accontentare se impostati 60 secondi in realtà trascorrono 59 o 61 secondi. Il PA4 non ha funzioni e resta inutilizzato. La stabililizzazione della tensione di 5 Volt necessaria al corretto funzionamento del micro e del LCD è affidata a un comune regolatore di tipo 78L05.
Il circuito nel suo complesso non presenta difficoltà, certo che con un circuito stampato tutto è più facile. Vi propongo una possibile soluzione presentandovi il disegno del mio prototipo, se decidete di usare un mille fori o una scheda per esperimenti leggete comunque il capitolo. Nel caso optiate per la costruzione del CS come da progetto, vi ricordo che LCD e pulsanti vanno montati dal lato RAME. Nel prototipo ho usato resistenze da 1/8 W, ma vi posso assicurare che con la foratura attuale possono trovare posto, anche de sgomitando, il tipo da 1/4W. Eventualmente non dimenticate il montaggio verticale. I relè sono di tipo miniatura, modelli molto facili da trovare nel surplus. I pulsanti sono di tipo miniatura e molto economici. Ne ho fatto una buona scorta dal smontaggio di un paio di videoregistratori gusti. Il display è un modello classico di una riga per 16 caratteri (in realtà è indirizzato come un 2x8, cioè i primi 8 caratteri sono indirizzati come prima riga e i restanti 8 come seconda riga, anche se fisicamente sono disposti in ununica riga) e, visto il costo, consiglio caldamente di collegarlo attraverso strip per poterlo estrarre facilmente senza danneggiarlo. Tra laltro è possibile estrarre il display dal PLC programmato senza che questo ne pregiudichi il funzionamento. Lo scopo principale del LCD è quello di visualizzare lemissione delle righe di programma allinterno del PLC e una volta collaudato serve a poco se non testare lo stato degli ingressi e delle uscite. Non dimenticate i 3 ponticelli sotto i relè K2, K3, K4 e collegare con spezzoni di filo il pin 15 di U1 con il pin 4 del display, il pin 16 di U1 con il pin 6 del display e il pin 14 di U1 con i + 5 V (punto comune tra C2, C3 e U2. Qualunque sia il programmatore e il programma che utilizzate per programmare il PIC con il file che potete scaricare dal sito di Elettronica Flash, è importante che programmiate i fusibili scegliendo loscillatore interno e la funzione I/O per i piedini dedicati (IntRC I/O nel caso di IC-Prog), disattivare il Watchdog Timer (WDT) e il Power Up Timer (PWRT). ProgrammazioneCollaudare un PLC è cosa facile per chi lo conosce e comprende il linguaggio di programmazione, ma diventa difficoltoso per il neofita che si avvicina per la prima volta ad un circuito di automazione. È quindi necessario un breve corso di programmazione che sarà facile per coloro che hanno avuto la possibilità di lavorare con i PLC e un po difficoltoso per il resto degli amici hobbisti. Cercherò di essere sintetico e nello stesso tempo chiaro, però sarà per tutti di aiuto seguire il corso provando in pratica con il PLC sottomano. Il nostro PLC accetta un programma strutturato in maniera molto rigida. Ogni riga di programma deve contenere due operandi come ingressi, unoperazione e un operando come uscita. Per operandi possiamo immettere ingressi I da 0 a 3 (sono i quattro ingressi fisici del PLC, fanno capo alla morsettiera X2), p.e.: I3 è il quarto ingresso del PLC ( Attenzione: lingresso 0 esiste ed è il primo), MARKER M da 0 a 7 (sono relè virtuali cioè non esistono fisicamente ma vengono molto usati nella programmazione come appoggio), uscite Q da 0 a 3 (sono le quattro uscite fisiche del PLC, fanno capo alla morsettiera X3), infine i timer T da 0 a 4 (in totale sono cinque timer da 1 a 99 secondi o minuti). La operazioni supportate dal PLC sono quelle essenziali alla programmazione cioè AND (rappresentato dal simbolo &) e OR (rappresentato dal simbolo o). Viene riconosciuto il NOT. Loperando duscita è il bit (sia reale, come unuscita fisica, che virtuale, come un MARKER) destinatario del risultato delloperazione tra bit. Prima di cominciare con degli esempi, è necessario conoscere il significato dei quattro pulsanti presenti nel progetto. Si trovano alla destra del display e partendo dallalto hanno le seguenti funzioni che dipendono dalla posizione del programma (ATTENZIONE: le informazioni in verde sono quelle che incontriamo scritte sul display): Dalla fase di esecuzione del programma (Iooo* 05 Qooo*): P1-UP
NESSUNA FUNZIONE.
P2-DOWN
P3-ENTER
P4-END RICHIAMA IL MENU PRINCIPALE. Nel menù principale (MENU): P1-UP
CANCELLA TUTTO IL PROGRAMMA MEMORIZZATO NELLEEPROM
(CANC.TOT.SICURO?). PER CONFERMARE PREMERE P3-ENTER, PER
ANNULLARE PREMERE P4-END.
P2-DOWN
CANCELLA LA RIGA INDICATA. PREMENDO P1-UP O P2-DOWN SI
SELEZIONA IL NUMERO DI RIGA DA CANCELLARE. LULTIMA
RIGA DEL PROGRAMMA PRENDE IL POSTO DI QUELLA CANCELLATA.
(CANC.RIGA N. 04). CON P3-ENTER SI CONFERMA, PREMENDO P4-ENDSI
RITORNA AL MENU PRINCIPALE.
P3-ENTER SI ENTRA NELLA FASE DI PROGRAMMAZIONE (04 I.3 & Q!2 =Q1).P4-END ESECUZIONE PROGRAMMA. In
programmazione P1-UP INCREMENTA UN BIT (quello selezionato dal cursore). CAMBIA DA NOT (!) A NORMALE(.). CAMBIA OPERAZIONE. P2-DOWN DECREMENTA UN BIT. P3-ENTER CONFERMA IL DATO SELEZIONATO DAL CURSORE. P4-END RITORNA AL MENU PRINCIPALE. Alla prima accensione è necessario cancellare lintera memoria EEPROM del PIC nel seguente modo: premere P4-END (menù principale: MENU ) premere P1-UP (CANC.TOT.SICURO? ) premere P3-ENTER (conferma la cancellazione dellintera memoria) il nostro PLC è pronto a ricevere la nostra prima riga di programma e la memoria EEPROM (memoria utente) è vuota. Infatti se premiamo ancora P4-END e mandiamo in esecuzione il PLC, il display visualizza una condizione di allarme (EE Vuota) e resta in attesa di una nuova pressione dello stesso pulsante (P4-END). Ritornati nel menù principale ( MENU ), premiamo P3-ENTER e prepariamoci a inserire la nostra prima riga di programma. La schermata iniziale con lintera memoria vuota sarà: 01 I.0 & I.0 =Q0 vediamo in dettaglio il significato di ogni singolo componente della prima riga del programma. 01 NUMERO RIGA DEL PROGRAMMA, deve esserci almeno una riga di programma per mandare in esecuzione il PLC. Il numero massimo è di 41 righe memorizzabili. I IL PRIMO OPERANDO. I è un ingresso fisico del PLC. Altro operando può essere unuscita (Q), un MARKER (M) o un timer (T). . Indica la condizione logica di tipo positivo. Se cambiamo il (.) in (!) allora la condizione logica richiesta diventa di tipo negativo (NOT). Sarà più chiaro il tutto quando incontreremmo degli esempi. 0 E il bit del primo operando. Per gli ingressi (I) 0 è il primo e 3 è il quarto, lo stesso per le uscite (Q), i MARKER(M) sono otto da 0 a 7, mentre i timer (T) sono cinque numerati da 0 a 4. & Operazione logica tra operandi, AND è rappresentato dal simbolo (&), mentre OR dal simbolo (o). I.0 E il secondo operando. Quanto detto per il primo vale per il secondo. = Il risultato delloperazione logica condiziona loperando duscita. Con il simbolo (=) intendiamo riportare in uscita la stessa condizione logica dalloperazione, con (S) forziamo luscita ad uno logico solo a condizione che loperazione dia come risultato uno logico anche per un solo istante, luscita resta ad uno logico fintanto che non viene resettata dal comando reset (R). Ultimo simbolo (C) indica complementa bit, cioè ogni volta che cambia il risultato delloperazione in ingresso da zero ad uno il bit in uscita cambia stato. In pratica avviene la simulazione del relè passo-passo. Q (Q) è luscita fisica del nostro PLC a cui viene applicato il risultato delloperazione. Possono essere usati i MARKER (M). 0 Indica lindirizzo delluscita o del MARKER a cui applicare il risultato delloperazione.
Come prima riga di programma modifichiamo solo lindirizzo del secondo operando in questo modo: premete P3-ENTER tante volte da fare lampeggiare il cursore del display sullindirizzo del secondo operando, premete P1-UP in modo da incrementare di una unità tale indirizzo. Il display indica la riga 01 modificata in questo modo: 01 I.0 & I.1 =Q0 Premete tante volte il P3-ENTER in modo da passare dalla riga 01 alla 02, quindi premete P4-END per mandare il programma in esecuzione. Provate ora collegare al positivo gli ingressi 1 (I 0) e 2 (I 1) del nostro PLC e vedrete che luscita 1 (Q0) cambia stato e diventa positiva (uno logico) solo se tutti e due gli ingressi 0 e 1 sono collegati al positivo. I*ooo 01 Qoooo
solo lingresso I0 è al positivo: nessun
cambiamento nelle uscite. Io*oo 01 Qoooo solo lingresso I1 è al positivo: nessun cambiamento nelle uscite. I**oo 01 Q*ooo I0 e I1 al positivo: solo ora luscita Q0 viene settata. Notate con quanta semplicità abbiamo imposto al nostro PLC unoperazione di tipo AND con due ingressi. Proviamo era la funzione OR premendo il P4-END per entrare nel menù, quindi P3-ENTER per accedere alla programmazione. Premendo P2-DOWN ritorniamo a visualizzare la prima riga di programma: 01 I.0 & I.1 =Q0 premendo P3-ENTER tante volte da posizionare il cursore del display sul simbolo (&) e premiamo P1-UP per cambiarlo in (o), 01 I.0 o I.1 =Q0 continuamo a premere il P3-ENTER fintanto che non visualizziamo la seconda riga di programma, quindi P4-END per entrare nella fase di esecuzione del programma: Ioooo 01 Qoooo nessun ingresso è al positivo: nessun cambiamento nelle uscite. I*ooo 01 Q*ooo
solo lingresso I0 è al positivo: luscita Q0
viene settata. Io*oo 01 Q*ooo solo lingresso I1 è al positivo: luscita Q0 viene settata. I**oo 01 Q*ooo I0 e I1 al positivo: luscita Q0 viene settata. Al contrario della funzione AND, in OR è sufficiente che un solo ingresso interessato venga posto a uno logico per cambiare lo stato delluscita. Per non riempire le pagine delle solite sequenze di pressione dei pulsanti, indicherò semplicemente la fase di programmazione (immissione delle righe del programma utente), quella di esecuzione programma, cambiamento di un bit o di unoperazione, conferma di una riga di programma (vi ricordo che bisogna premere P3-ENTER tante volte da passare alla riga successiva, mentre se sbagliate qualcosa, premendo P4-END si ritorna al menù senza confermare la riga anche se modificata). Riprendiamo il corso analizzando la funzione NOT. In programmazione alla riga 01 (lunica programmata finora), cambiamo il punto (.) in punto esclamativo (!) al primo operando (o al secondo cambia solo lingresso negato) e cambiamo loperazione in AND: 01 I!0 & I.1 =Q0 mandiamo in esecuzione la riga programmata dopo la conferma e vediamo che succede: I*ooo 01 Qoooo
solo lingresso I0 è al positivo: nessun
cambiamento nelle uscite. I**oo 01 Qoooo I0 e I1 al positivo: nessun cambiamento nelle uscite. Io*oo 01 Q*ooo solo lingresso I1 è al positivo: solo ora luscita Q0 viene settata. Abbiamo cambiato lo stato logico dellingresso I0 chiedendo lattivazione delluscita solo se questo è a livello basso. Lesempio pratico che mi viene in mente è la partenza di un motore tramite un pulsante di START e larresto per mezzo di un pulsante di STOP. Questultimo, per motivi di sicurezza, deve essere di tipo NC (normalmente chiuso: alla pressione del tasto deve aprirsi), impedendo la partenza del motore in caso di guasto al pulsante o alla linea di alimentazione comando. Visto che abbiamo parlato di partenza motore, vediamo di seguito come implementare le funzioni di SET e RESET proprio simulando la partenza di un motore (lasciamo perdere la protezione termica dello stesso). In programmazione torniamo alla prima riga, modificandola come segue e aggiungiamone una seconda per completare lavviamento del motore: 01 I.0 & I.1 SQ0 02 I!1 o I!1 RQ0 allingresso I0 colleghiamo un pulsante NO (normalmente aperto: premuto chiude il contatto) con la funzione di avviare il motore e allingresso I1 un pulsante NC con la funzione di stop motore. Mandato in esecuzione, premiamo il pulsante di avviamento motore e notiamo immediatamente linserimento delluscita Q0 che resta settata anche quando rilasciamo il pulsante di avviamento motore. Questa è la funzione SET (S) cioè settare un bit a condizione logica rispettata (riga 01: I0=1, I1=1) e resta settato anche se la condizione non viene rispettata nel tempo. Per resettate il bit e spegnere il motore, è necessario inviare un comando di RESET (R), nel nostro esempio avviene con la seconda riga ed è sufficiente la pressione anche istantanea del pulsante di STOP per resettare uscita Q0. Per riattivarla è sufficiente ripremere il pulsante di avviamento motore con il pulsante di stop non schiacciato e vedere luscita portarsi a uno. NOTA: fate
attenzione durante la programmazione, la funzione Set
deve essere digitata sempre prima della funzione Reset.
Non è necessario che la funzione Reset segua
immediatamente il Set, limportante che sia
analizzato dal programma contenuto dal PIC sempre per
ultimo (rispetto allo stesso bit, ovviamente). Ultima funzione da analizzare è il Compemento al bit (C). E la simulazione del relè passo-passo, cioè la pressione di un pulsante eccita il relè che resta in tale stato fintantoché non viene ripremuto lo stesso pulsante. Facciamo un esempio: 01 I.0 & I.0 CQ0 collegando il solito pulsante al primo ingresso nel PLC, notiamo che luscita Q0 cambia stato ad ogni pressione del pulsante. Ovviamente possiamo utilizzare unoperazione logica tra due o più operandi come ingresso o uno unico come nellesempio riportato. NOTA: la funzione Complemento (C) è gestita in modo particolare dal SW del PIC e richiede unutilizzo particolare nel caso si debba condizionare più uscite con lo stesso ingresso. Per esempio, allingresso I0 colleghiamo un pulsante che accenda due luci collegate alle uscite Q1 e Q2. Proviamo a creare un programma per attuare il comando: 01 I.0 & I.0 CQ1 02 I.0 & I.0 CQ2 con queste righe il PLC non si riesce ad elaborare efficacemente il programma con il risultato che alla prima pressione del pulsante si accende la lampada collegata alluscita Q1 e non farà altro nonostante venga premuto il pulsante ripetutamente. In questo caso è necessario appoggiarsi ad un MARKER (M) come nellesempio seguente: 01 I.0 & I.0 CM0 02 M.0 & M.0 =Q1 03 M.0 & M.0 =Q2 il Complemento viene esercitato su un MARKER e il cambio di stato di questultimo influenza le uscite. Nellultimo esempio abbiamo usato un MARKER (M). Sono relè virtuali cioè sono presenti solo nel SW del PIC e restano a disposizione dellutente in modo da applicare una condizione logica senza influenzare le uscite fisiche. Sono usati anche nellesempio che segue e finalmente terminiamo il corso esaminando i Timer (T). Il nostro PLC è in grado di gestire fino a cinque Timer da 1 a 99 secondi o minuti. È necessario parametrizzare il Timer prima di usarlo. Vediamo come: 01 I.0 & I.1 =M0 02 M.0 T0 05 sec 03 T!0 & M.0 =Q0 04 T.0 & M.0 =Q1 quattro semplici righe per un programma complesso. Vediamolo in dettaglio: alla riga 01 imponiamo la condizione logica iniziale, in pratica tutto inizia solo se gli ingressi I0 e I1 sono posti ad uno logico (in pratica ad un potenziale positivo di 5÷24 V) ed attiviamo un MARKER, precisamente il M0. Nella seconda riga paramettiziamo ed attiviamo il timer T0, caricandolo con cinque secondi. Se avessimo cambiato la seconda riga in: avremmo caricato il T0 con cinque minuti. Adesso viene il bello. Nella riga 03, il Timer T0 è negato quindi assieme al MARKER M0 attiva luscita Q0 solo nel tempo che gli serve per contare il tempo impostato (nel nostro esempio sono cinque secondi), mentre nella riga 04 lo stesso Timer T0 non avendo raggiunto il conteggio non attiva luscita Q1. Trascorso il tempo impostato, viene a mancare la condizione logica alla riga 03 resettando il Q0, però viene rispettata la condizione alla riga 04 settando il Q1. Nella terza riga abbiamo ottenuto un temporizzatore RITARDATO ALLA DISECCITAZIONE, mentre nella quarta RITARDATO ALLECCITAZIONE. Come vedete lutilizzo dei Timer è molto semplice e potente e trova molteplici applicazioni. Messaggi di errore
Come ogni PLC che si rispetti, anche il nostro cerca di farci capire che qualcosa non va con dei messaggi di errore. EE Vuota La memoria utente non contiene nessuna riga di programma. È sufficiente inserire anche una sola riga di prova per mandare in esecuzione il PLC in modo corretto. È il messaggio che compare se mandiamo in esecuzione il PLC dopo la cancellazione totale. Ritornare con P4-END. Mem. Piena Nel caso si superino le 41 righe di programma, il PLC ci avvisa che non è possibile inserire la 42 esima riga con questo messaggio. Ritornare con P4-END. Erro.RIGA N. 03 Indica un errore di programmazione alla riga indicata (è comodo perché non dobbiamo controllare lintero programma). Precisamente:
Ritornare con P4-END. Conclusioni
Così comè con soli quattro ingressi e altrettante uscite il nostro PLC non troverà infinite applicazioni. Del resto lo scopo del presente articolo vuole essere il mezzo per avvicinare più appassionati possibile al mondo dellautomazione spendendo poco come ogni buon hobbista pretende con un progetto funzionale ma limitato che farà da trampolino di lancio a progetti sempre più complessi e completi. |
Il pacchetto è stato ceduto alla rivista ELETTRONICA FLASH che lo ha pubblicato nel numero 238 (Maggio 2004)
Il pacchetto non è più raggiungibile dal sito della rivista: scaricalo QUI.