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