(a)
IL SOFTWARE DI CONTROLLO
Ambiente di lavoro Il software con cui si sono programmati i PIC16F877 che effettuano il controllo digitale è il linguaggio “macchina”, e le funzionalità e le periferiche del microcontrollore sono gestiti tramite il settaggio di singoli bit di appositi registri speciali. Questo microcontrollore ha una frequenza massima di lavoro di 20MHz, che determina un tempo di esecuzione di una istruzione pari a 200ns (4 cicli di oscillatore), ed ha una struttura con registri di memoria da 8 bit, che possono contenere numeri in formato binario equivalenti a numeri decimali compresi tra 0 e 255. Le istruzioni implementate sono appena 35, e sono suddivise in tre tipi: byte oriented, che operano su un intero byte ad 8 bit, bit oriented, che operano su un singolo bit, ed una serie istruzioni logiche, come ad esempio il salto incondizionato ed il richiamo di subroutine. Tra le istruzioni implementate
sono comprese ad esempio la somma e la sottrazione, ma non la moltiplicazione ne tanto meno la divisione. Inoltre c’è da considerare che, anche quando si opera una operazione semplice come una somma, l’eventualità che si verifichi un overflow del registro di memoria non è affatto remota, essendo il limite superiore di 255 piuttosto facile da raggiungere. Per essere quindi sicuri di ottenere il risultato corretto da una operazione c’è bisogno di una serie di istruzioni che verificano l’eventuale overflow e modificano il registro contenente il risultato opportunamente. L’operazione si complica ulteriormente nel caso in cui si abbia bisogno di conoscere anche il segno del risultato, tenendo conto inoltre anche del segno degli operandi. A fronte di queste considerazioni appare evidente che anche per eseguire una semplice sommatoria con segno si ha bisogno di un numero rilevante di istruzioni.
Struttura Il software è stato realizzato per gestire le
seguenti funzionalità:
• Avere una stima della velocità e della corrente effettive in formato digitale, sia in modulo che in segno.
• Gestire anello di controllo della corrente ad isteresi a tre livelli
• Approssimare un regolatore PI per la regolazione della velocità
• Gestire l’interfaccia con l’operatore tramite tastiera e display.
Sono stati usati due PIC16F877, il primo, denominato Bridge Controller, che gestisce il controllo del chopper e l’interfaccia a tastiera, il secondo, denominato Display Driver, che, tramite una comunicazione parallela, acquisisce la velocità di riferimento in formato binario 8 bit ed opera le opportune istruzioni per una corretta visualizzazione in formato decimale del dato sul display LED 3digit 7 segmenti.
Il software caricato sul PIC Bridge Controller è strutturato come segue:
Esegue in idle la routine di gestione dell’anello di corrente ad isteresi e del campionamento della corrente effettiva con una frequenza attorno ai 20kHz, ed ogni 9ms secondi viene richiamata la routine che esegue il controllo di velocità. All’interno del ciclo di idle viene anche eseguito il polling dei pin relativi alla tastiera.
Inizializzazione Allocati nella memoria Flash del PIC ci sono alcuni registri speciali, che vengono usati per impostare il funzionamento delle periferiche del controllore ma non solo. Le prime righe di codice eseguite all’avvio del sistema sono dedicate al settaggio dei registri speciali, in modo da configurare in modo opportuno le periferiche. Il convertitore A/D viene configurato tramite due registri, l’ADCON0 e l’ADCON1. Il modulo ADC ha una risoluzione di 10 bit e ha 6 ingressi analogici, AN0:5. In questa applicazione si usa un solo canale, AN0, per campionare il segnale della corrente di armatura. Gli altri canali vengono settati come digitali. Il risultato della conversione viene salvato, con giustificazione sinistra, nei registri ADRESL:ADRESH, ma nel nostro caso sono sufficienti i primi 8 bit.
Il Timer0 viene impostato, tramite il registro T0CON come contatore dei fronti di salita del segnale “Canale 1” dell’encoder portati al pin RA4/T0CKI. Questo segnale è del tipo onda quadra, ed ha una frequenza di 500ppr. Il numero di fronti di salita conteggiato è contenuto nel registro TMR0. Il Timer1 è
configurato, tramite il registro T1CON, per lavorare come timer a 5MHz. Tramite un’altra periferica, chiamata Capture Compare PWM1 (CCP1), settata tramite il CCP1CON e CCP1L:CCP1H, viene eseguita la comparazione continua del registro 16bit del timer, e quando raggiunge il valore di 45000, che corrisponde ad un tempo di 9ms (45000*200ns), da luogo all’interrupt relativo. Gli interrupt sono abilitati e configurati tramite i registri INTCON, PIE1, PIE2. Tramite il registro OPTION_REG vengono configurate altre opzioni riguardo gli interrupt ed i weak-pullups sui pin della porta B.
All’inizio del listato è riportata anche la ISR, Interrupt Service Routine, che viene richiama ogni qualvolta è chiamato un interrupt, e contiene le istruzioni che rilevano l’interrupt che ha fatto scattare la ISR tramite il controllo di alcuni flagbits situati nei registri INTCON, PIR1 e PIR2. Per evitare che possano essere chiamati interrupt multipli il GIE, General Interrupt Enable, viene disabilitato all’interno della ISR.