na_FunControl - mrscuole.net
Transcript
na_FunControl - mrscuole.net
http://www.mrscuole.net/anxapic/ A. S. 2009 – 2010 na_FunControl La velocità di rotazione di una ventolina viene controllata in funzione della temperatura ambientale http://www.mrscuole.net/anxapic/ Corso introduttivo sui microcontrollori Nicola Amoroso [email protected] na_FunControl http://www.mrscuole.net/anxapic/ 1 http://www.mrscuole.net/anxapic/ Controllo della velocità di rotazione di una ventola in funzione della temperatura ambientale [10°C ÷ 70°C]. La velocità di rotazione di una classica ventolina per PC (dello stesso tipo impiegato nel raffreddamento delle unità centrali dei PC) viene regolata mediante la rilevazione della temperatura ambientale; all'aumentare della temperatura aumenta la velocità, al diminuire http://www.mrscuole.net/anxapic/ na_FunControl: la commessa della temperatura la velocità di rotazione della ventola diminuisce. La ventola si deve attivare per temperature superiori a 25°C e deve disattivarsi per temperature inferiori a 24 °C. La massima velocità deve aversi per temperatura ambientale di 70 °C. Il controllo deve essere attivo nell’intervallo di temperatura 10 °C – 70 °C. na_FunControl http://www.mrscuole.net/anxapic/ 2 http://www.mrscuole.net/anxapic/ - LM35 => Classico sensore di temperatura della National [10 mV/°C] - Circuito di acquisizione e condizionamento => Il segnale in uscita dal sensore di temperatura viene opportunamente condizionato, amplificato e applicato in ingresso del Pin_RA0 (can 0) del PIC18F4620 - AnxaPic demoBoard v4.5 con PIC18F4620 - 12 MHz on board - Opportuno driver di potenza (ON/OFF) per pilotare il motorino della ventola - Ventola per PC trascinata mediante opportuno motorino brushless; il "sistema ventola" contiene la elettronica di controllo del motore brushless che permette di gestire questo motorino come un semplice motore DC alimentato a 12 V con corrente max assorbita non http://www.mrscuole.net/anxapic/ na_FunControl: hardware superiore a 1 A (dipende dal tipo di motore utilizzato) - Tipicamente 0,3 ÷ 0,6 A - Opportuno sistema (Encoder) Rx-Tx a infrarossi per il rilevamento della velocità di rotazione della ventola na_FunControl http://www.mrscuole.net/anxapic/ 3 http://www.mrscuole.net/anxapic/ Una proposta di lavoro 1 2 3 5 4 na_FunControl http://www.mrscuole.net/anxapic/ na_FunControl: schema sistema La nostra ventolina ha solo 5 palette quindi, in uscita dall’encoder, avremo 5 impulsi per ogni giro completo http://www.mrscuole.net/anxapic/ 4 http://www.mrscuole.net/anxapic/ La nostra commessa è solo una proposta indicativa e può essere sviluppata dagli allievi del 5° anno del corso di Elettronica e Telecomunicazioni con sviluppo trasversale tra le materie di Elettronica, Sistemi e TDP (Coordino e realizzazione). E’ chiaro che la proposta e i suggerimenti risolutivi sono solo indicazioni; con questa semplice commessa ci preme solo riprendere alcuni argomenti affrontati in precedenza e proporre solo semplici soluzioni di utilizzo per alcune tecniche operative su come pilotare un motore in CC con tecnica PWM, come utilizzare Timers e Interrupts nella gestione e impiego di microcontrollori. Propongo anche alcune semplici soluzioni circuitali, senza eccessivi chiarimenti http://www.mrscuole.net/anxapic/ na_FunControl: considerazioni progettuali; ognuno saprà ampliare e svilluppare opportunamente quanto indicato. [Per i docenti di sistemi, elettronica e TDP => Potrebbe essere lo start per un semplice controllo PID?] na_FunControl http://www.mrscuole.net/anxapic/ 5 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ na_FunControl: soluzioni circuitali Circuito di acquisizione e condizionamento della temperatura na_FunControl http://www.mrscuole.net/anxapic/ 6 http://www.mrscuole.net/anxapic/ Circuito di acquisizione e condizionamento della temperatura La proposta è abbastanza semplice e anche documentata. Da evidenziare: • Il controllo viene applicato per intervalli di temperatura compresi tra 10 °C e 70 °C cioè per Vin variabile nell’intervallo 100 mV [10 °C] e 700 mV [70 °C] • Il sensore LM35DZ, nell’intervallo 0 °C ÷ 100 °C, presenta una risoluzione (lineare) di 10 mV/°C • Il nostro circuito è stato calcolato in modo da avere in uscita Vo=0,50 V per Vin=100 mV [10 °C] e Vo=4,5 V per Vin=700 mV [70 °C] • Il filtro PB, in uscita dal sensore LM35DZ, ha una frequenza di taglio di circa 10 Hz (le http://www.mrscuole.net/anxapic/ na_FunControl: soluzioni circuitali variazioni di temperatura sono processi lentissimi nel dominio del tempo) • Per usufruire di una unica alimentazione a 5V è stato utilizzato un semplice integrato della microchip con 4 amp operazionali rail to rail , l’mcp6024 Rif. Circuitali simulazioni e calcolo: LM35DZ_Calib.DSN na_FunControl http://www.mrscuole.net/anxapic/ 7 http://www.mrscuole.net/anxapic/ Circuito di acquisizione e condizionamento della temperatura - La scheda prototipo Gruppo resistori 5k Sensore LM35DZ mcp6024 A=(Rv1+R2)/R3 http://www.mrscuole.net/anxapic/ na_FunControl: soluzioni circuitali Resistori R8+Rv2 Connettore collegamento AnxaPic4.5 Circuito di acquisizione e condizionamento della temperatura – Scheda prototipo su millefori na_FunControl http://www.mrscuole.net/anxapic/ 8 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ na_FunControl: soluzioni circuitali Driver motore CC – Interfaccia IR Encoder con squadratore TTL na_FunControl http://www.mrscuole.net/anxapic/ 9 http://www.mrscuole.net/anxapic/ Driver motore CC – Interfaccia IR Encoder con squadratore TTL Il driver pilota del nostro motorino CC (Il motore della ventola è di tipo brushless con integrata l’elettronica opportuna per essere comandato come un motorino in CC) è un classico sistema di tipo ON-OFF. Il transistor pilota (di tipo darlington) viene controllato mediante un segnale PWM di frequenza pari a 10 KHz. I valori proposti nello schema di riferimento sono adeguati per la ventola in nostro possesso (V=12 Vdc, I=0,5 A). Dalla sezione «opto rilevamento» otterremo in uscita un classico segnale ad onda quadra, TTL compatibile. Per ogni giro della ventolina otterremo 5 «impulsi» di questo tipo. Contando http://www.mrscuole.net/anxapic/ na_FunControl: soluzioni circuitali il numero di impulsi per unità di tempo (1 sec) riusciremo a definire la velocità della nostra ventola per ogni secondo, moltiplicando questo valore per 60 potremo definire il numero di giri al minuto (rpm). na_FunControl http://www.mrscuole.net/anxapic/ 10 http://www.mrscuole.net/anxapic/ Driver motore CC – Interfaccia IR Encoder con squadratore TTL – La scheda prototipo Alim motore Opto Rilevamento Phototransistor PhotoDiodo Tip122 12V CC http://www.mrscuole.net/anxapic/ na_FunControl: soluzioni circuitali Connettore collegamento AnxaPic4.5 Driver motore CC – Interfaccia IR Encoder con squadratore TTL – PCB Prototipo na_FunControl http://www.mrscuole.net/anxapic/ 11 http://www.mrscuole.net/anxapic/ Prototipo del sistema http://www.mrscuole.net/anxapic/ na_FunControl: il sistema Un prototipo attivo del nostro sistema di controllo Il sistema funziona egregiamente e i valori riportati risultano perfettamente in linea (per confronto) con i dati rilevati con altri strumenti (es. termometri, valori dichiarati dal costruttore della ventolina, etc…) na_FunControl http://www.mrscuole.net/anxapic/ 12 http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ na_FunControl: il sistema Schema collegamenti tra la demoBoard AnxaPic e le due schede di acquisizione e controllo na_FunControl http://www.mrscuole.net/anxapic/ 13 http://www.mrscuole.net/anxapic/ Collegamenti tra la demoBoard AnxaPic e le due schede di acquisizione e controllo Nelle slides precedenti vengono riportati i collegamenti tra la demoBoard AnxaPic v4.5 e le due schede per acquisizione e controllo. Sono indicati anche i connettori interessati; penso che il tutto è molto chiaro ed eventuali problematiche possono rivolversi mediante un opportuno controllo degli schemi elettrici dei vari sistemi. Le indicazioni della parte HardWare con i rispettivi collegamenti possiamo concluderla qui. Interessante a questo punto diventa la proposta Software, al solito daremo solo indicazioni http://www.mrscuole.net/anxapic/ na_FunControl: il sistema operative; ognuno potrà e saprà sicuramente proporre e realizzare soluzioni più consone per la realizzazione e gestione del sistema. na_FunControl http://www.mrscuole.net/anxapic/ 14 http://www.mrscuole.net/anxapic/ Fondamentalmente la unità di controllo del nostro sistema dovrà: 1. Controllare che la temperatura (T) rilevata è compresa tra 10 °C e 70 °C … 1.1 … altrimenti segnalare con opportuno messaggio di avviso e non eseguire gli steps sino a 4. (compreso) 2. Se la T>25 °C e la ventola è spenta, accenderla 3. Se la T<24 °C e la ventola è accesa, spegnerla 4. Impostare il duty-cicle del segnale PWM (per il controllo della velocità del motore) in funzione della Temperatura rilevata 5. Se è trascorso 1 secondo dall’ultimo calcolo del numero di giri, calcola il nuovo valore di http://www.mrscuole.net/anxapic/ na_FunControl: il software rpm (giri al minuto), riinizializza per un nuovo calcolo … 5.1 … altrimenti salta lo step 5. e continua di nuovo con lo step 1. Naturalmente il tutto deve contenere opportune informazioni su display. na_FunControl http://www.mrscuole.net/anxapic/ 15 http://www.mrscuole.net/anxapic/ Un semplice flow-chart di quanto proposto na_FunControl http://www.mrscuole.net/anxapic/ na_FunControl: il software http://www.mrscuole.net/anxapic/ 16 http://www.mrscuole.net/anxapic/ Alcune considerazioni Alcune importanti considerazioni prima dell’analisi del codice sorgente: 1. Calcolo del numero di giri al minuto (rpm) della ventolina Dallo schema fondamentale del sistema e dallo schema dei collegamenti si nota che: a) per ogni giro (360°) della nostra ventolina, il sistema Encoder a infrarossi (Tx-Rx + opportuno «squadratore» TTL compatibile) genera 5 impulsi (la nostra ventolina ha 5 palette). b) Contando il numero di impulsi generati dall’encoder a IR per un intervallo di tempo pari a 1 secondo conosco proprio il numero di impulsi per secondo; c) dividendo questo numero di impulsi per 5 conosco proprio il numero di giri della ventola http://www.mrscuole.net/anxapic/ na_FunControl: il software al secondo. d) Moltiplicando questo numero di giri al secondo per 60 ottengo proprio il numero di giri per minuto (rpm) della mia ventolina. rpm=(Nimp/5)*60 na_FunControl [N.B. => La ventolina ha 5 palette] http://www.mrscuole.net/anxapic/ 17 http://www.mrscuole.net/anxapic/ Alcune considerazioni Alcune importanti considerazioni prima dell’analisi del codice sorgente: 1. Calcolo del numero di giri al minuto (rpm) della ventolina Quindi per calcolare il numero di giri al minuto (rpm) della mia ventolina devo: a) Mediante il Timer0 del Pic abilitare una finestra temporale di 1 sec b) Contare il numero di impulsi in ingresso, sul pin RB0 (Int_Ext), in questo intervallo temporale rpm=Nimp/5*60 [N.B. => La ventolina ha 5 palette] http://www.mrscuole.net/anxapic/ na_FunControl: il software Nel nostro Sw bisogna abilitare il timer0 con opportuno prescaler e l’interrupt sul pin RB0 (Int_EXT) na_FunControl http://www.mrscuole.net/anxapic/ 18 http://www.mrscuole.net/anxapic/ Alcune considerazioni Alcune importanti considerazioni prima dell’analisi del codice sorgente: 2. Risoluzione ADC e temperatura rilevata Sulla nostra demoBoard (AnxaPic v4.5) la tensione di riferimento (PinRA3) per l’ADC è pari alla tensione di alimentazione del Pic; con l’ADC a 10 bit avremo una risoluzione pari a 5/1023=4.89 mV(circa) (lineare nell’intervallo 0-Vcc). La tensione Vo in ingresso al canale RA0 del Pic sarà: Vo=(Val registro ADC)*0.00489 Ricordiamo che: [cfr. circuito di acquisizione e condizionamento] a) Vo=0.5 V quando T ambiente è di 10 °C http://www.mrscuole.net/anxapic/ na_FunControl: il software b) Vo=4.5 V quando T ambiente è di 70 °C Considerando che T e Vo variano linearmente nel tempo: T = m * Vo + q e per le due condizioni considerate si ricavano i valori di m=15 e q=2.5 Nell’intervallo considerato: T = 15 * Vo + 2.5 na_FunControl http://www.mrscuole.net/anxapic/ 19 http://www.mrscuole.net/anxapic/ Il codice sorgente Dopo le considerazioni iniziali analizziamo brevemente il codice sorgente raccomandando di tenere sempre in primo piamo le slides dove sono riportati i Flow-Charts per il main program. Mediante il Pic-Wizard del CCS Pic-C Compiler impostiamo le condizioni iniziali del progetto. Chan ADC => RA0, RA1 ADC => 10 bit VREF ADC => Vcc http://www.mrscuole.net/anxapic/ na_FunControl: il software Pic Wizard: condizioni generali di progetto e canali analogici di lettura con impostazioni dell’ADC na_FunControl http://www.mrscuole.net/anxapic/ 20 http://www.mrscuole.net/anxapic/ Il codice sorgente Mediante il Pic-Wizard del CCS Pic-C Compiler impostiamo le condizioni iniziali del progetto. http://www.mrscuole.net/anxapic/ na_FunControl: il software Pic Wizard: Set CCP1 per PWM a 10 KHz con opportuno set per TIMER2 (Prescaler 4) - Timer0 8 bit con overflow (interrrupt) ogni 5,4 ms (Prescaler 64) na_FunControl http://www.mrscuole.net/anxapic/ 21 http://www.mrscuole.net/anxapic/ Il codice sorgente Mediante il Pic-Wizard del CCS Pic-C Compiler impostiamo le condizioni iniziali del progetto. Il file di impostazioni generato dal Pic Wizard http://www.mrscuole.net/anxapic/ na_FunControl: il software Il file di impostazioni Hardware generato Pic Wizard: Set Interrupts na_FunControl http://www.mrscuole.net/anxapic/ 22 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function Il Pic Wizard genera anche il seguente main setup. Routine Interrupt Timer0 – Ogni 5.4 ms Routine Interrupt RB0 – Ogni impulso su RB0 Si notino le routine di Interrupt intercettate per ogni evento Hardware generato dal singolo sottosistema oppure sul singolo Pin. In questo caso avremo un Interrupt generato ogni qual volta il Timer0 passa per la condizione di OverFlow (Dalle nostre impostazioni ogni 5.4 ms). Avremo anche una condizione di Interrupt intercettato ogni qualvolta un impulso si presenta in ingresso sul pin RB0. http://www.mrscuole.net/anxapic/ na_FunControl: il software Il main setup generato dal Pic Wizard na_FunControl http://www.mrscuole.net/anxapic/ 23 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function modificato Il Pic Wizard genera anche il seguente main setup. In fase di «Start» il duty-cicle del segnale PWM viene posto a 0 (Ventola OFF) Purtroppo il codice generato presenta qualche «problemino» di esecuzione per quanto riguarda il segnale PWM generato, in particolare se cambiamo le righe di codice indicate, come riportato a fianco sembra che funzioni tutto OK; con il codice della slide precedente il segnale PWM non viene generato e qualche volta il sistema si blocca; forse un «bug» nella nostra versione del compilatore. Per eliminare eventuali problemi consiglio le modifiche. http://www.mrscuole.net/anxapic/ na_FunControl: il software Il main setup generato dal Pic Wizard modificato na_FunControl http://www.mrscuole.net/anxapic/ 24 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function Dopo questa premessa sul codice «automatico» generato mediante il Pic-Wizard, esaminiamo tutto il codice proposto. In alcuni casi vengono forniti chiarimenti, comunque il tutto dovrebbe essere abbastanza semplice e chiaro. Raccomando di tenere sempre in rilievo il flow-chart della main function presentato in precedenza. Il codice proposto è solo indicativo comunque sul nostro prototipo funziona http://www.mrscuole.net/anxapic/ na_FunControl: il software egregiamente già da alcuni mesi. na_FunControl http://www.mrscuole.net/anxapic/ 25 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function Setup HardWare Micro Driver Display-LCD AnxaPic v4.5 Routine varie Le variabili globali Visibilità da tutto il programma Il TIMER0 (8 bit) ogni 5.4 ms và in overflow e genera un interrupt. 185 condizioni di interrupt originano un ritardo di: 185x5.4=999 ms, cioè un secondo (circa). Teniamo presente che nell’esecuzione delle varie chiamate, alla routine di interrupt per 185 volte, 1 ms di ritardo ulteriore può essere accettato. Possiamo dire che il nostro Flag viene posto a TRUE ogni secondo. http://www.mrscuole.net/anxapic/ na_FunControl: il software La variabile globale viene incrementata per ogni impulso presente sul Pin_RBO che genera una condizione di Interrupt Main function – Analisi codice sorgente na_FunControl http://www.mrscuole.net/anxapic/ 26 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function Il TIMER2 gestisce le caratteristiche del segnale PWM generato [PIN_CCP1 (RC2)] Abilito interrupt attivo su fronte salita segnale su RB0 Azzero registro Interrupts attivi http://www.mrscuole.net/anxapic/ na_FunControl: il software Abilito chan0 (RA0) ADC Main function – Analisi codice sorgente na_FunControl http://www.mrscuole.net/anxapic/ 27 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function 1 http://www.mrscuole.net/anxapic/ na_FunControl: il software Main function – Analisi codice sorgente - Per ulteriori chiarimenti controllare il flow-chart precedente na_FunControl http://www.mrscuole.net/anxapic/ 28 http://www.mrscuole.net/anxapic/ 1 Il codice sorgente – main function La funzione setup_timer_2(T2_DIV_BY_4,74,1) definisce alcune caratteristiche del segnale PWM generato; i parametri associati li abbiamo definiti mediante il Pic-Wizard e in particolare il valore da associare al registro PR2, per ottenere un segnale PWM di frequenza pari a 10 KHz, è uguale a 74 (la nostra frequenza di sistema è pari a 12 MHz). Mediante la funzione set_pwm1_duty(xxx) andiamo a definire il duty-cicle del segnale PWM generato. Per xxx variabile tra 0 e 74 il nostro duty-cicle varierà tra lo 0% e il 100%. Dividendo il valore del registro del nostro ADC (10 bit – valore compreso tra 0 e 1023) per 13.81 e considerando solo la parte intera del rapporto potremo «normalizzare» il valore letto nel registro ADC (variabile tra 0 e 1023) al valore variabile tra 0 e 74 (infatti 1023/13.81=74.076755 => La sola parte intera è pari a 74). Quando Vin=4.5 V (Ricordiamo che per T variabile tra 10 °C e 70 °C Vin varierà tra 0.5 V e 4.5V), il valore del regisro ADC è uguale a 921 => int8(921/13.81)=66; se vogliamo il valore massimo del duty-cicle in corrispondenza dei 70 °C (4.5 V) possiamo considerare la seguente «traslazione empirica»: http://www.mrscuole.net/anxapic/ na_FunControl: il software duty1=int8(921/13.81) => duty1=duty1+int8((duty1/10)+1) => nel nostro caso avremo: duty1 = 66 +int8(6.669+1)=66+7=73 [Circa il 99% del duty-cicle massimo] La nostra «traslazione» lo possiamo applicare per tutto l’intervallo di temperatura da considerare (10 °C – 70 °C) => Quindi indicando con duty il valore del registro ADC letto si può calcolare il valore del duty-cicle del segnale PWM generato come: duty1=(int8)(duty/13.81+(int8)(((duty/13.81)/10)+1) Main function – Chiarimenti sul codice sorgente - Controllare il flow-chart precedente na_FunControl http://www.mrscuole.net/anxapic/ 29 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function Se la temperatura ambiente è < 10 °C Messaggio di avviso Se la temperatura ambiente è > 70 °C Messaggio di avviso http://www.mrscuole.net/anxapic/ na_FunControl: il software Main function – Analisi codice sorgente - Per ulteriori chiarimenti controllare il flow-chart precedente na_FunControl http://www.mrscuole.net/anxapic/ 30 http://www.mrscuole.net/anxapic/ Il codice sorgente – main function Solo se è passato 1 secondo rispetto al calcolo precedente http://www.mrscuole.net/anxapic/ na_FunControl: il software Main function – Analisi codice sorgente - Per ulteriori chiarimenti controllare il flow-chart precedente na_FunControl http://www.mrscuole.net/anxapic/ 31 http://www.mrscuole.net/anxapic/ Il codice sorgente – na_iodevice.c http://www.mrscuole.net/anxapic/ na_FunControl: il software na_iodevice library – Analisi codice sorgente na_FunControl http://www.mrscuole.net/anxapic/ 32 http://www.mrscuole.net/anxapic/ Il codice sorgente – na_iodevice.c http://www.mrscuole.net/anxapic/ na_FunControl: il software na_iodevice library – Analisi codice sorgente na_FunControl http://www.mrscuole.net/anxapic/ 33