[email protected] IrrigaPIC Centralina a 8 uscite per irrigazione con valvole a 24V ac con programma settimanale. Lo scopo del progetto è la realizzazione di una centralina per il controllo di elettrovalvole in alternata per l’irrigazione del giardino… uno dei requisiti è il costo contenuto. Schema a blocchi La presa “220 in” dotata di interruttore (recuperati da alimentatori ATX) alimenta il “trasformatore” (recuperato da qualche apparecchiatura surplus) da cui si ottiene 12V DC non regolati. Il “Conv dc/dc” converte i 12V DC in 5 Volt regolati, usati per alimentare “Main CPU” e “RTC”. Il modulo “RTC” ha una batteria di backup (cella al litio recuperata da un pacco di batterie di un portatile) per mantenere data e ora in caso di mancanza di alimentazione di rete. La “Scheda relè” utilizza l’alimentazione a 12 V. I relè utilizzati sono 8 del tipo mini e 1 del tipo normale, utilizzato per comandare una presa con uscita 220V. In pratica quando almeno una delle 8 uscite è attiva, c’è tensione di rete anche sulla presa comandata in modo da poter attivare l’alimentatore a bassa tensione (24V ac) solo al momento del bisogno… oppure potrebbe essere utilizzata per comandare una pompa per pescare l’acqua da utilizzare per irrigare… Tra un evento (accensione o spegnimento) e l’altro “Main CPU” è posta in stato di SLEEP per ridurre il consumo di corrente; viene risvegliata da 2 diversi interrupt legati alla batteria scarica e interrupt da parte del modulo RTC (orario del programma impostato dall’utente) [email protected] Convertitore dc/dc E’ utilizzato un MAX5035B di maxim-ic.com (ottenuto in campionatura gratuita) nel suo schema classico indicato a pagina 1. Il C di ingresso sono in realtà 3 : 100n,1u, 100u, l’induttore è 680uH (CoilCraft campionatura gratuita), il CRef è 10n, il C di uscita 680u insieme a 100n. Uno schema per la millefori potrebbe essere il seguente C3 è in realtà l’induttore da 680uH. Ingresso in basso a destra, uscita (5V) in alto a sinistra. [email protected] Main CPU La scheda principale contiene Processore Pic 18F2550 (Xtal 8Mhz con PLL) (campionatura gratuita Microchip) RTC I2C DS1337 (Xtal 32Khz) (campionatura gratuita Maxim-ic.com) Interfaccia di debug USART Batteria tampone 2 tasti (accesso USB / testo TEST) 2 LED (status / batteria) I pin relativi alla PORTB (21-28) attivano i relè in miniatura. Pinout della CPU [email protected] Funzionamento Mancando completamente di display, l’impostazione iniziale della centralina viene fatta attraverso il collegamento USB ad un PC tramite un apposito programma oppure sempre con lo stesso programma che modifica il firmware prima della programmazione col PicKit (modalità USB). All’accensione il firmware verifica la pressione dei tasti SUSB/SKEY entrando rispettivamente in modalità USB o TEST; se nessuno dei tasti risulta premuto viene eseguito il programma principale: vengono letti data e ora dal RTC, questi vengono confrontati con i dati presenti nell’EEPROM del PIC e alla presenza di eventi per quell’ora (siano accensioni o spegnimento) verranno attivati o disattivati i relè corrispondenti. Quindi viene letto l’evento successivo dalla EEPROM e impostato sul RTC l’ allarme la data a l’ora dell’evento. A questo punto il PIC si pone in modalità SLEEP (con comparatori accesi) e verrà svegliato solo da: batteria tampone scarica (BATInt) allarme timer (RTCInt) Interrupt BATInt Attiva il LED di segnalazione batteria scarica La tensione di soglia di comparazione è generata usando il “COMPARATOR VOLTAGE REFERENCE MODULE” (pag 281 del datasheet del P18F2550) Interrupt RTCInt Attiva il led di status, con un lampeggio rapido Legge dalla EEPROM l’evento relativo alla data /ora di quel momento e attiva/disattiva i carichi. Quindi legge l’evento successivo, spegne il LED di status, imposta nell’RTC il nuovo allarme e si pone in SLEEP Organizzazione memoria interna PIC I 256 byte della EEPROM del PIC sono organizzati in 81 slot in grado di contenere eventi. Un evento può essere un attivazione/disattivazione di un relè in un dato giorno/ora. Un evento può accomunare più attivazioni/disattivazioni. [email protected] I primi 8 byte sono riservati e possono contenere ad esempio il salvataggio della data/ora in fase di cambio batteria. I byte dalla posizione 8 alla posizione 253 sono riservati agli slot di informazione eventi. Ogni slot occupa 3 byte, ed ogni byte è così composto: Byte 1: B7..B5 => giorno della settimana, B4..B0 => orario. Il giorno della settimana : 0: non impostato 1: Domenica … 7: Sabato Byte 2: minuti Byte 3: attivazioni PORTB Segnalazione stato led I led, di norma spenti, sono di due tipi: Led batteria (verde) indica batteria tampone scarica. Rimane acceso per ricordare di sostituire la batteria interna Led stato (rosso): può lampeggiare in 2 modi (corto per OK, lungo per Errore), oppure acceso Fisso (di norma un problema) [email protected] All’avvio Pressione SUSB : Led bat ON, Led Status ON => comunicazione USB HID Attivata Pressione SKEY: Led Status ON (1 secondo), Lampeggio OK. Poi il Led Status rimane acceso per 2 secondi per poi spegnersi e a questo punto Se tasto SKEY è ancora premuto Salva data e ora corrente, il dispositivo si mette in Stop (Led Status ON Fisso) Se tasto SKEY non è più premuto Si attiva la modalità di test che accende in sequenza gli 8 relè per 9 secondi ognuno; durante il test il led status sarà accesso; terminato il testo un lampeggio, quindi il dispositivo si mette in STOP accendendo il LED Status Comunicazione USB I comandi principali inviati nella comunicazione USB HID (report da 64 byte) sono USB_FIRMWAREINFO : il dispositivo invia la versione del firmware (stringa di 29 byte) al USB HOST USB_GETORA: il dispositivo legge l’RTC e invia data e ora al USB HOST (8 byte) USB_LEGGISTATO: il dispositivo invia lo stato di alcune porte del PIC al USB HOST (6 byte) USB_SETORA: l’USB HOST invia il nuovo orario da importare sul RTC (8 byte), vedi tracciato USB_GETORA USB_SETPORTB: l’USB HOST invia il nuovo valore di PORTB (2 byte) USB_RDRMEM: il dispositivo invia tutto il contenuto della EEPROM in blocchi da 64 byte. USB_SCRMEM: l’USB HOST scrive 256 byte che andranno a sovrascrivere il contenuto della EEPROM USB_DEBUG: il dispositivo legge il RTC e inizializza la gestione degli slot, leggendo il primo (5 byte) USB_GETSLOTIDX: il dispositivo legge lo slot indicato alla posizione 1 del report HID, l’ora RTC e ne restituisce il valore (8 byte) [email protected] Scheda relè Questa parte del circuito è stata realizzata come scheda separata in modo da poterla configurare in modo personalizzato. In figura sono rappresentati solo il relè numero 1 e il relè numero 8 , i rimanenti sono collegati in modo analogo. Necessita di una alimentazione +12V DC (non stabilizzati). Per poter pilotare in modo adeguato le bobine dei relè invece di usare transistor-resistenze-diodo si è fatto uso dell’integrato ULN2803 (campionatura gratuita ti.com), tranne che per il relè delle presa comandata pilotano con un normale transistor. Porta di ULN2808 e pinout del componente: Realizzazione su mille fori (progetto con lochMaster): [email protected] [email protected] Uno sguardo al firmware I sorgenti sono in C, il compilatore mikroC 8.2.0. Le impostazioni del progetto configurano un quarzo da 8 MHz. Per alimentare correttamente il PLL per l’USB (che accetta solo frequenze da 4Mhz) si deve dividere il “primary oscillator” per 2 (PLL Prescaler), quindi dividere per 2 questi 96 MHz per ottenere i 48MHz del bus USB (USBDIV=1). L’uscita del PLL viene usato anche per alimentare il primary clock, dividendo anch’esso per 2 (CPUDIV), ottenendo un clock da 48Mhz. Visto il “massiccio” utilizzo dei comparatori, ecco di seguito la configurazione usata: servivano 2 comparatori indipendenti ma con un riferimento ad una tensione comune di soglia. Perché i comparatori ? Perché sono in grado di risvegliare il PIC dalla modalità di SLEEP, stato in cui viene posta la CPU tra un evento e l’altro. E la tensione di soglia , quale utilizzare ? Beh visto che un indicatore è la batteria scarica, potremmo usare un valore intorno ai 3V… L’altro comparatore è usato “impropriamente” per leggere lo stato del PIN “INT” dell’RTC; questo pin è tenuto a livello Alto dal RTC fino a quando non scatta un evento impostato che lo porta a livello basso; si sarebbe potuto utilizzare un normale PIN di I/O con interrupt sul cambio di stato, ma avendo già impostato 1 comparatore, anche l’altro, con le stesse modalità, può essere utilizzato senza troppi problemi. Il registro principale è il CMCON [email protected] È stato configurato in questo modo: CMCON=0b00000110; bit 7 C2OUT: Comparator 2 Output bit 0 = C2 VIN+ < C2 VINbit 6 C1OUT: Comparator 1 Output bit 0 = C1 VIN+ < C1 VINbit 5 C2INV: Comparator 2 Output Inversion bit 0 = C2 output not inverted bit 4 C1INV: Comparator 1 Output Inversion bit 0 = C2 output not inverted bit 3 CIS: Comparator Input Switch bit Per impostare la tensione di soglia si utilizza il “Comparator Voltage Reference Module” disponibile su diversi PIC. In pratica è una rete di 16 resistenze che dividono il valore della tensione di alimentazione in una tensione che può essere usata come riferimento per il comparatori interni e/o portata sull’uscita del pin dedicato. Il registro che controlla il tutto è il E in questo progetto è configurato in questo modo CVRCON = 0b11001000; bit 7 CVREN: Comparator Voltage Reference Enable bit 1 = CVREF circuit powered on bit 6 CVROE: Comparator VREF Output Enable bit(1) 1 = CVREF voltage level is also output on the RA2/AN2/VREF-/CVREF pin bit 5 CVRR: Comparator VREF Range Selection bit 0 = 0.25 CVRSRC to 0.75 CVRSRC, with CVRSRC/32 step size (high range) bit 4 CVRSS: Comparator VREF Source Selection bit 0 = Comparator reference source, CVRSRC = VDD – VSS bit 3-0 CVR3:CVR0: Comparator VREF Value Selection bits (0 ≤ (CVR3:CVR0) ≤ 15) [email protected] When CVRR = 0: CVREF = (CVRSRC/4) + ((CVR3:CVR0)/32) • (CVRSRC) (5/4) + ((8/32) * 5)=1.25 + 1.25 = 2.5V Quindi la tensione di riferimento per i comparatori e disponibile come Test Point su RA2 è di circa 2.5V (ovviamente dipende dalla tensione di alimentazione). Interrupt Per la gestione degli interrupt si devono abilitare dal registro INTCON GIE=> Global Interrupt Enable bit PEIE=> Peripheral Interrupt Enable bit E dal registro PIE2 (contain the individual enable bits for the peripheral interrupts.) CMIE=>Comparator Interrupt Enable bit Nella routine di gestione si dovrà poi resettare il bit PIR2.CMIF La gestione del RTC è piuttosto semplice ed è inclusa nel file ds1337_stuff.c, le funzioni principali implementate sono le seguenti DS_NOW(void); DS_setOrario(unsigned short hh, unsigned short mm,unsigned short ss); DS_setData(unsigned short dd,unsigned short gg,unsigned short mm, unsigned short aa); DS_setAllarme(unsigned short hh, unsigned short mm,unsigned short dd); DS_getAllarme(void); DS_clearAllarme(); Per semplificare la lettura dei dati dalla eeprom del PIC è stata create una libreria apposita (EEprom_stuff.c) che simula una lista void EE_Reset(); unsigned short EE_Eos(); void EE_Open(); void EE_READSlot(); void EE_moveNext(); void EE_moveFirst(); void EE_moveLast(); void EE_moveTo(unsigned short indexBaseZero); Conclusione La centralina è stata provata tutto il mese natalizio per accendere le lucine sul mio balcone.. e non è esplosa! Dal punto di vista elettronico non è una gran complessità, e sono per la maggior parte componenti reperibili in campionatura gratuita o dal basso costo e quindi le premesse iniziali non sono state disattese… costa molto di più il contenitore (scatola di derivazione per impianti elettrici). Samples PIC18F2550 PIC DS1337 I²C Serial Real-Time Clock MAX5035B 1A Step-Down DC/DC Conv. ULN2803 Octal darlington transistor array T81H5D312-05 5V PCB relay RTH14012 12V Power PCB relay DR0810-684L 680uH Coil [email protected] Transformer www.microchip.com www.maximintegrated.com www.maximintegrated.com www.ti.com www.te.com www.te.com www.coilcraft.com www.te.com [email protected] Schema realizzazione scheda CPU
© Copyright 2024 Paperzz