Introduzione al progetto
Nel nostro progetto abbiamo sviluppato un dispositivo che riattiva il contatore Enel esterno dopo che questo viene disattivato a causa di un sovraccarico. Consiste in pratica di un servomotore posto sopra il contatore che ne risolleva linterruttore tramite una cordicella. Il dispositivo in condizioni di riposo resta costantemente in sleep, non assorbendo quindi corrente. Nel momento in cui linterruttore del contatore si abbassa, tira la cordicella, la quale chiude un microswitch a levetta. Questo evento attiva il circuito che, dopo un certo tempo, tira in alto la corda e quindi con se linterruttore del contatore. Il tempo entro cui far partire il dispositivo viene scelto dallutente fra un minimo di 10 secondi e un massimo di 120. In questo lasso di tempo si ha cos la possibilit di spegnere eventualmente lapparecchio che sta causando il sovraccarico con conseguente disattivazione del contatore. Dopo la prima riattivazione parte un timer di 2 minuti: se entro tale tempo si arriva ad un terzo sgancio, il dispositivo rimane in standby (Safety Stop) e deve essere riavviato manualmente. Questo perch nel caso in cui ci fossero pi di due stacchi consecutivi, il problema non un semplice sovraccarico ma qualcosa di pi serio per il quale sarebbe meglio lasciare il contatore staccato.
Il riattivatore installato
Quando il contatore scatta, la cordicella entra in tensione e lo switch SW1 segnala al circuito di controllo levento; a questo punto entra in funzione il servocontrollo che inizia girare fino a riportare, tramite la cordicella, in posizione ON la leva del contatore. Lo switch SW2 segnala che il servomotore tornato nella posizione originaria e che il contatore nuovamente in funzione.
Istruzioni veloci per la programmazione Accendere il dispositivo Tenere premuto il tastino esterno e attendere lo spegnimento dei LED Spenti i LED, ogni successiva pressione del tasto incrementa il tempo di riattivazione di 10 secondi (1 click 10 secondi, 2 click 20 secondi, , 12 click 120 secondi). Ogni pressione confermata dallaccensione del LED verde. [superati i 12 click, si ritorna nuovamente a 10 secondi] Raggiunto il tempo desiderato, attendere 5 secondi per confermarlo e salvarlo: in conferma il LED verde lampegger tante volte quanto stato premuto il tasto. Terminata la programmazione, il micro va in sleep.
LED Verde
Tastino
LED Rosso
Elenco componenti
R1: 10 K R2, R3: 4,7 K R4, R6: 10 K R5: 1 K R7: 470 R8: 470 R9: 4,7 K R10: 47K C1: 220 F 25VL Elettrolitico C2, C3, C5: 100 nF Multistrato C4: 100 F 16VL Elettrolitico U1: 78L05 U2: AT Tiny45 D1, D2, D3: 1N4007 D4: 1N4148 LD1: Led Rosso 3mm LD2: Led Verde 3mm T1: BC557 T2: BC547 T3: BC517 SW1, SW2: Microswitch a levetta SW EXT: Microswitch a tastino
Schema Circuitale
PCB
Alcune Foto
Il circuito stampato
Per pilotare il nostro motore abbiamo scelto una modulazione PWM (non invertente) poich ci ha consentito un buon controllo sulla velocit del motore tramite la sola variazione del duty-cycle attraverso i registri del microcontrollore (OCR).
Un segnale PWM (Pulse Width Modulation ovvero modulazione a variazione della larghezza d'impulso) un'onda quadra di durata variabile che permette di controllare l'assorbimento (la potenza assorbita) di un carico elettrico (nel nostro caso il motore DC), variando (modulando) la durata dellonda quadra. La modulazione caratterizzata dunque da una frequenza di funzionamento (fissa) e da un duty cycle (variabile); come si deduce dalla Fig.1, il duty cycle il rapporto tra il tempo in cui l'onda assume valore alto e il periodo T (l'inverso della frequenza: T=1/f). Ne segue che un duty cycle del 50% corrisponde ad un'onda quadra che assume valore alto per il 50% del tempo, un duty cycle dell'80% corrisponde ad un'onda quadra che assume valore alto per l'80% del tempo e basso per il restante 20%. Per quanto riguarda il funzionamento allinterno del nostro circuito il servomotore comandato in PWM con un duty cycle del 90% luscita PB0 del micro per mezzo del Darlington che consente il guadagno di corrente necessario la buon funzionamento degli avvolgimenti interni del motore. Notare il diodo di free-wheeling per la protezione dagli impulsi dovuti al funzionamento del motore elettrico, e il condensatore di filtro C5, posti proprio vicino ai terminali di uscita cui va collegato il servomotore. La scelta del servomotore per questo progetto non stata semplice: da un calcolo preliminare stato valutato in circa 70 Ncm la coppia necessaria per sollevare linterruttore del contatore; inoltre data la necessit di un movimento lento e preciso era necessario un servomotore di buona qualit. stato quindi scelto un motoriduttore della Micromotors con coppia massima di ben 100 Ncm e un notevole rapporto di riduzione.
Il microcontrollore
Lintero sistema gestito da un microcontrollore Atmel della serie tiny, lATtiny45. Questo piccolo ma performante micro contiene al suo interno tutte le periferiche necessarie alla nostra applicazione. Vengono di seguito elencate alcune sue caratteristiche: memoria programma di tipo FLASH di 4KB memoria dati SRAM di 256B memoria non volatile EEPROM di 256B 32 registri general purpose 2 timer/counter a 8 bit con prescaler separati e uscite PWM 4 canali ADC a 10 bit 6 pin di I/O digitale generali oscillatore interno calibrato fino a 8 MHz modalit di funzionamento a basso consumo diverse sorgenti di Interrupt
In particolare notiamo la presenza di unuscita PWM indipendente e gestita dallinterrupt interna Timer/Counter0: configurando opportunamente alcuni registri possibile pilotare il motore DC in maniera semplice ed immediata. Loscillatore interno calibrato ci permette di evitare lutilizzo di quarzi esterni, che avrebbero richiesto pi spazio e occupato due pin del micro. Nella EEPROM viene salvato il tempo di attesa impostato dallutente. I 6 pin di I/O (aiooooohhh!) vengono utilizzati per gestire le varie funzioni del sistema: vengono tutti configurati come I/O digitali generali tranne PB0, che luscita del segnale PWM.
PB1 e PB2 sono configurati come ingressi, e collegati rispettivamente a SW2 (il microswitch a levetta che controlla quando il motore raggiunge la posizione di riposo) e SW1 (il microswitch che invece premuto quando scatta linterruttore del contatore).
PB3, PB4 e PB5 sono invece utilizzati come uscite: il primo serve a collegare lalimentazione al sistema, mentre attraverso gli altri due vengono gestiti i led di stato. Allaccensione (cio quando viene premuto SW1 dal contatore che si sgancia o dallutente attraverso il tastino esterno) vengono inizializzate tutte le linee di I/O, i timer e si preleva dalla memoria EEPROM il tempo di attesa memorizzato. Si noti che Timer0 usato per generare luscita PWM, mentre il Timer1 genera una routine di interrupt ogni 31ms circa. Tale routine ha il compito di gestire tutte le temporizzazioni necessarie: i tempi di accensione dei led, il periodo di attivazione del motore e gli intervalli di tempo necessari alle varie modalit di funzionamento. Subito dopo laccensione i due led rimangono accesi per un secondo, durante il quale si stabilizza lalimentazione. A questo punto il micro stabilisce la modalit di funzionamento tra: la modalit di programmazione del tempo di attesa (PMode) la modalit di attivazione del motore (AMode)
Se premuto il tastino esterno (SW1+SW2) si entra in PMode, altrimenti si esegue lAMode. Nel primo caso (Pmode) il led rosso rimane acceso, mentre quello verde si spegne. Lutente selezioner il tempo da memorizzare attraverso il tastino posizionato nella parte anteriore del dispositivo (come detto prima collegato a SW1 e SW2). Premendolo il tempo aumenter a passi di 10 secondi e il led verde dar conferma visiva della pressione. Il tempo massimo memorizzabile di 120 secondi. Arrivato a questo limite, se si continua a premere, il micro ripartir a contare il tempo da 10 secondi. Il superamento del tempo limite confermato dallo spegnimento del led rosso e dallaccensione del led verde per 0,5 secondi. Per salvare il tempo in memoria sufficiente non premere il tasto per 5 secondi. Trascorso questo periodo il micro dar conferma del salvataggio facendo lampeggiare il led verde tante volte quante sono le decine di secondi impostate. A questo punto esce dalla PMode disattivando lalimentazione (modalit sleep). In AMode invece il micro controlla per prima cosa che non siano state effettuate pi di due attivazioni in due minuti, attraverso un registro che ne tiene traccia. In quel caso il firmware entrer in Safety Stop: vengono disattivate tutte le funzioni e il led rosso lampegger con un periodo di 5 secondi. Lutente dovr resettare manualmente il circuito togliendo lalimentazione attraverso linterruttore generale. In caso contrario, prima di attivare il motore, il micro attende per il tempo deciso dallutente. Durante questa attesa il led rosso spento, mentre quello
verde lampeggia con un periodo di 2 secondi. Trascorso tale tempo, il motore viene alimentato. Mentre il motore acceso il led verde lampegger velocemente. Il motore verr alimentato finch, girando, non colpisce lSW2. Questo invier uno zero logico al micro che capisce che il motore ha fatto un giro completo avendo cos riattivato il contatore. Per ritornare alla posizione di riposo, il motore verr alimentato per un altro secondo e poi disattivato. A questo punto il micro attender 2 minuti (tempo di standby), durante i quali il led verde lampegger ogni 5 secondi. Se il contatore dellEnel non si disattiver unaltra volta in questi 2 minuti, il micro andr in sleep disattivando lalimentazione e il circuito sar pronto per una nuova sessione di lavoro. Altrimenti il firmware torner allinizio dellAmode eseguendo una seconda riattivazione. Si noti che tra unattivazione e laltra, allinterno della stessa sessione, il tempo di standby trascorso viene salvato dal micro e ripristinato alla fine della seconda attivazione. Qui di seguito la visulizzazione schematica del programma attraverso un flowchart.
FLOWCHART
RiattCont_CMW.asm
I/O Initialization CLEAR Counting and Control Registers Timer Setting(1sec) Led_G=ON Led_R=ON
Delay 1sec
PMode
YES
SW2 ON?
(pressed by user)
NO
AMode
PMode
Micro connects the POWER TEMPO1 Clear NBLINK Clear
SW1 ON?
(still pressed)
YES
SW1 ON?
(pressed by user)
NO
(timer is running)
YES
Timer Stopped TEMPO1 =120? NO NBLINK++ TEMPO1+10 Led_G= Blinks NBLINK times@1Hz
YES
AMode
Micro connects the POWER
SAFETY STOP!
YES
N_ATT 3? NO
Led_R=Blink@0.2Hz
(endless state till the circuit is manually switched off)
NO
SW2 ON?
(pressed by screw)
TCONT2 NO
has reached 2 min?
NO
YES LITTLE MOTOR STEP (to reach idle position) STOP PWM
YES SLEEP