Controllo di motori AC ad induzione con PIC

Una logica di controllo basata su microcontrollori PIC consente di aumentare la potenzialità e la flessibilità degli attuatori elettrici nei sistemi di automazione. Ecco in che modo. Un azionamento elettrico è generalmente costituito da un attuatore (motore) e dal relativo sistema elettronico di alimentazione e gestione, coadiuvato da eventuali sensori di feedback; esso può essere fisicamente realizzato in una grande varietà di  tipologie,  a seconda  dell’impiego  e delle specifiche del progetto cui è destinato. La vasta diffusione di questi dispositivi è motivata dal fatto che essi consentono un’ottimizzazione dei processi con incremento di produzione e miglior rendimento degli impianti: spesso, infatti, è possibile ottenere un risparmio energetico considerevole dosando in modo opportuno la potenza fornita a certi tipi di carichi come pompe e ventilatori.

Introduzione

Le motivazioni economiche non sono le sole: si pensi, infatti, a quelle applicazioni in cui posizione o velocità di rotazione del motore elettrico devono essere controllate con grande precisione, come in un braccio robotizzato in una catena di montaggio o nei servomeccanismi ormai onnipresenti anche negli oggetti di uso quotidiano  (si immagini  l’accuratezza  richiesta nel pilotare gli attuatori che controllano la posizione del fascio laser in un comunissimo lettore cd). In questo articolo prenderemo in considerazione un tipico utilizzatore, un motore trifase a induzione, il cui controllo viene affidato a un microcontrollore della famiglia 18Fxx31; si vedranno brevemente i principi  di funzionamento di questo tipo di motori, le due principali tecniche di controllo dello stesso (open loop e closed loop) e più in dettaglio le periferiche hardware implementate nei PIC 18Fxx31 e specializzate per questo tipo di applicazioni, il Power Control PWM, il Fault Inputs e il Motion Feedback Module.

MOTORE A INDUZIONE AC

A grandi linee e senza entrare nei dettagli che si possono trovare in testi specifici, si può schematizzare un motore elettrico trifase come mostrato nella figura 1; una terna equilibrata di correnti (a somma vettoriale nulla) circola negli avvolgimenti del rotore (tre fasi equispaziate angolarmente di 120 gradi) e crea nella macchina un campo magnetico  statorico,  rotante  con  una  velocità detta di sincronismo (praticamente la velocità a vuoto); tale campo induce delle correnti negli avvolgimenti di rotore (legge di Lenz), le quali producono a loro volta un campo rotorico che ruota con la stessa velocità angolare del campo statorico.

Figura 1. Schema semplificato di un motore AC trifase

Figura 1: schema semplificato di un motore AC trifase

L’interazione  tra  le  correnti  di  rotore  e  la somma dei due campi magnetici rotanti, genera una coppia elettromagnetica che pone in rotazione il rotore con una velocità minore di quella di sincronismo: la differenza tra le due velocità, chiamata scorrimento è necessaria perché se fossero uguali la coppia del motore sarebbe nulla. Per modificare la velocità di rotazione si può dunque intervenire sui due fattori che creano la coppia motrice: sul campo magnetico risultante (modificando tensioni e correnti statoriche) oppure sulle correnti di rotore o entrambi. Nel caso particolare di motori asincroni le cose sono rese più complicate in quanto non si ha accesso diretto alla corrente di rotore; si può agire solo sugli avvolgimenti di statore, variandone tensione e/o frequenza di alimentazione in funzione della coppia motrice che si vuole ottenere e del regime di funzionamento in cui si vuole portare ad operare la macchina.  Nella prossima sezione si vedrà un particolare tipo di controllo sulle correnti statoriche realizzato tramite inverter, dispositivo che fa da stadio pilota e interfaccia fra il motore e il microcontrollore.

CONTROLLO AD INVERTER

La figura 2 riporta lo schema di un inverter trifase: in esso sono rappresentati due buses posti ad alta tensione (VDC+ e VDC-), sei interruttori elettronici che possono essere per esempio mosfet di alta potenza come gli IGBTs e le tre fasi del motore; i sei switches sono connessi in modo da creare tre coppie di “half-bridges”,  i quali servono per collegare ciascuna fase alle alte tensioni.

Figura 2. Schema di controllo delle correnti statoriche tramite inverter

Figura 2: schema di controllo delle correnti statoriche tramite inverter

Esaminiamo più in dettaglio il funzionamento del dispositivo aiutandoci con lo schema e prendendo in considerazione la fase A: assumiamo che l’interruttore H1 sia chiuso e L1 aperto, in tal caso la fase sarà percorsa da una corrente con verso opposto a quella che scorre quando L1 è chiuso e H1 aperto; la stessa cosa vale per la fase B considerando questa volta gli interruttori H2 e L2 e ovviamente per la fase C con H3 e L3. Le tre coppie (half bridges) di interruttori considerati pilotano dunque in modo indipendente le  fasi del motore: i due interruttori di ciascuna coppia non devono mai trovarsi simultaneamente nello stesso stato, pena il cortocircuito delle alimentazioni e vanno dunque gestiti come coppia complementare. Va inoltre tenuto conto della complicazione tecnica dovuta al fatto che in genere switches elettronici di questo tipo richiedono per spegnersi un tempo maggiore di quello richiesto per accendersi, per cui andrà impostato un dead-time o tempo di latenza tra lo spegnimento di un interruttore e l’accensione del suo complementare. La logica di controllo a monte dell’inverter dovrà essere programmata in modo da ottenere, per le fasi, un diagramma di tensioni e correnti come mostrato nella figura 3: tre correnti sinusoidali, uguali in ampiezza e in pulsazione e sfasate opportunamente di 120 gradi, creano il già citato campo magnetico di statore, il quale ruota con la stessa frequenza delle sinusoidi e induce le correnti rotoriche da cui nasce poi la coppia motrice.

Figura 3. Diagramma delle alimentazioni delle tre fasi

Figura 3: diagramma delle alimentazioni delle tre fasi

Il principio sembra essere chiaro, ma il lettore più attento si sarà forse domandato com’è possibile ottenere una forma d’onda sinusoidale per una certa fase, quando ai suoi estremi viene posta una serie ripetuta di tensioni alternativamente alte e basse, cioè che variano a scatti.  Il fatto è che l’andamento effettivo delle correnti che scorrono in esse, non dipende solamente dal segnale di input loro applicato (a gradini), ma anche dalla loro risposta intrinseca ; questo è un fatto generale e si esprime dicendo che la risposta del sistema-fase del motore è data dalla convoluzione tra il segnale d’ingresso  e  la  risposta  impulsiva  caratteristica del sistema: nel nostro caso, le fasi possono essere modellizzate come un filtro passa basso, per cui un treno di impulsi di corrente al loro ingresso sarà opportunamente integrato dando la forma sinusoidale voluta. Questo è il motivo per cui è possibile impiegare la risorsa hardware presente all’interno dei microcontrollori, il PCPWM (Power Control PWM), per generare forme d’onda  complesse: il microcontrollore crea un treno di impulsi rettangolari con un duty-cycle  e una frequenza variabile in funzione dell’ampiezza e della frequenza delle sinusoidi che si vogliono inviare alle tre fasi del motore. Compito del programmatore sarà utilizzare l’hardware specializzato integrato nel PIC o gestire la creazione degli impulsi via software. Esistono molte e diverse tecniche per il controllo delle correnti statoriche: nel seguito prenderemo in considerazione l’open loop control e successivamente il closed-loop, con feedback di corrente o velocità.

OPEN LOOP V/F  CONTROL

I motori a induzione AC sono spesso pilotati in open loop senza alcun tipo di feedback,  tenendo conto dei due principi seguenti:

  • La velocità di rotazione è direttamente proporzionale alla frequenza della corrente  alternata applicata  allo statore e al numero  di  poli  del motore.
  • Il momento o coppia motrice è direttamente proporzionale al rapporto tra ampiezza e frequenza della corrente AC inviata alle fasi.

Il rapporto tra l’ampiezza e la frequenza (V/f) delle sinusoidi generate viene mantenuto costante per avere una coppia motrice elevata e il più possibile costante nel range operativo del motore: si tratta di una forma di controllo poco costosa e facile da implementare. Non viene utilizzato nessun feedback da parte del rotore, la cui velocità di rotazione segue il flusso indotto dagli avvolgimenti rotorici e può essere modificata variando la frequenza della sinusoide. La figura 4 illustra un possibile collegamento tra il microcontrollore e l’inverter; come si può notare dalla figura, sei pin del modulo PCPWM del PIC sono destinati a pilotare le tre coppie complementari dell’inverter.

Figura 4. Schema di controllo realizzato open-loop

Figura 4: schema di controllo realizzato open-loop

Il PCPWM integrato nel 18F4431 dispone fino ad un massimo di otto canali, con possibilità di avere uscite complementari, risoluzione del Pwm che può arrivare a 14 bit e tempi di latenza (dead-time) facilmente gestibili e generati in hardware; inoltre si può variare simultaneamente il duty-cycle e il periodo dell’onda rettangolare. Si può monitorare l’assorbimento complessivo di corrente dei due buses tramite una resistenza di shunt, la cui tensione viene inviata ad un comparatore connesso al pin FLTA del PIC: in caso di extracorrente (evento di Fault) sarà possibile spegnere le uscite del Pwm e settare un flag di controllo per apportare le dovute modifiche al firmware, per esempio ridurre la velocità. Quest’ultima viene impostata col potenziometro collegato all’ingresso analogico AN0: il valore presente in esso, una volta convertito in forma digitale, è elaborato secondo una formula implementata in software, dalla quale si ricava la frequenza corrispondente delle sinusoidi d’alimentazione.

CLOSED LOOP V/F  CONTROL CON FEEDBACK DI VELOCITÀ

Per rendere più accurato il controllo della velocità si può utilizzare una forma di feedback il cui schema è riportato nella figura 5: la velocità viene ancora impostata tramite un potenziometro, ma questo non pilota più direttamente la frequenza del segnale PWM, ma genera un segnale di riferimento da confrontarsi con l’effettiva velocità del rotore: il segnale errore ottenuto dal confronto  viene successivamente elaborato secondo il tipo di algoritmo più opportuno,  a seconda dell’applicazione e del tipo di risposta che si desidera ottenere dal circuito di retroazione quando, per effetti legati al carico, la velocità si allontana da quella impostata.

Figura 5. Schema di controllo con feedback di velocità

Figura 5: schema di controllo con feedback di velocità

Per il lettore interessato si rimanda ai testi di elettronica oppure al seguente link di approfodimento, qui si ricorda che i tipi di algoritmi più usati per questo genere di elaborazione sono il controllo proporzionale, integrale, differenziale o una loro combinazione (controller PID ): si tratta di modi diversi di elaborare il segnale differenza o errore per trovare il nuovo valore di frequenza (e di ampiezza, visto che le due grandezze devono essere proporzionali) del segnale PWM. Il tipo più semplice possibile è il controllo proporzionale, in base al quale la frequenza viene variata in modo lineare con  l’errore: essa sarà incrementata se la velocità effettiva è minore di quella voluta e diminuita in caso contrario. Il calcolo effettivo della velocità di  rotazione  sfrutta  il  Motion Feedback Module  integrato nel microcontrollore; tale periferica comprende un QEI (Quadrature encoder interface) e un modulo Input Capture (IC): si   tratta  di hardware specializzato per la decodifica di segnali provenienti da encoder usati per il controllo di velocità e angoli di rotazione.

CONSIDERAZIONI SUL FIRMWARE

Il nucleo principale del codice è destinato alla generazione dei segnali PWMs: il compito del programmatore è, in questo caso, almeno in parte semplificato dal fatto che il 18F4431 dispone di una periferica specializzata (il PCPWM), per cui andranno caricati gli appositi registri (PDCxH:PDCxL) che controllano il duty-cycle con i valori corretti per ottenere la forma d’onda sinusoidale voluta. Vediamo più in dettaglio i punti salienti da prendere in considerazione:

  • La   frequenza   del   segnale PWM è quattro ordini di grandezza  più  elevata  di  quella dell’onda che voglio generare (decine di khz contro  decine di hz): per questo motivo è come se il PIC vedesse la sinusoide composta da un grande numero di tratti costanti negli intervalli di tempo confrontabili con il periodo del PWM; la sinusoide viene dunque campionata in una serie di valori (sine-table) da caricare, in fase di inizializzazione, nella memoria dati per un più rapido accesso ad esso. La CPU legge un valore presente nella tabella, lo carica  nei  registri  specifici  del duty cycle del PCPWM, genera il treno di impulsi corrispondente e in uscita (sulle fasi) avrò la tensione relativa a quel valore; ripetendo lo stesso in sequenza per tutti i campi della tabella il microcontrollore genera l’intera sinusoide.
  • Per creare tre sinusoidi sfasate di 120 gradi si utilizzano tre variabili  puntatore alla sinetable,  composte ciascuna  di  una base variabile e di un offset fisso opportuno  che crea lo sfasamento voluto: così, mentre uno dei tre canali del PCPWM sta gestendo un particolare valore della tabella, gli altri due si occupano dei valori descritti dai due puntatori che indirizzano ai valori sfasa ti di 120 e 240 gradi rispetto al primo.
  • Dovrebbe   a  questo   punto risultare chiaro che il rate di modifica dei valori del duty-cycle determina la frequenza della tensione generata; quanto più velocemente si cambiano questi valori, maggiore sarà la pulsazione ottenuta. Più in dettaglio si può sfruttare l’overflow del Timer0 per  generare un  interrupt  la cui routine associata provvede a caricare un nuovo valore dalla sine-table: quindi il reload-value con cui viene caricato il timer determina la frequenza desiderata.
  • Scalando  il  valore  massimo del duty-cycle si modifica l’ampiezza dell’onda, in modo da mantenere il rapporto V/f costante (figura 6).
Figura 6. Diagramma a blocchi concettuale di un controllo V/f con feedback di velocità

Figura 6: diagramma a blocchi concettuale di un controllo V/f con feedback di velocità

In sintesi l’interrupt service routine di modifica del duty-cycle agisce in questo modo: interviene un interrupt del timer0; a questo punto la CPU calcola la nuova frequenza del motore (dalla lettura del potenziometro se sono in modalità open-loop o dall’algoritmo PID se utilizzo una forma di controllo closed-loop);  si legge un nuovo valore dalla sine-table usando gli appositi puntatori; si calcola il valore del duty-cycle moltiplicando il dato della tabella per la frequenza precedentemente determinata; si salva il valore a 16 bit così ottenuto nei registri PDC relativi a ciascuna delle tre fasi; si trova il nuovo reload-value (legato alla frequenza) con cui caricare il timer0, il cui overflow farà ripartire il ciclo (vedi in proposito l’equazione riportata nella figura 7).

Figura 7: equazione che lega il reload-value del tmr0 alla frequenza.

Il listato 1 riporta un breve esempio di codice con cui si mostra come leggere i valori dalla tabella e si aggiorna il valore del duty-cycle: si tratta di un tipico esempio di indirizzamento indiretto in cui il valore   viene letto nella locazione  di  memoria  indicata dai valori caricati in W (TABLE_OFFSET1,2,3) sommati all’indirizzo di base della tabella.

Update_Pwm_Dutycycles

           movf TABLE_OFFSET1,W
           movf PLUSW0,W
           bz PWM1_IS_0
           mulwf FREQUENCY
           movff PRODH,CCPR1L_TEMP
           bra UPDATE_PWM2
PWM_1_IS_0
           clrf CCPR1L_TEMP

Update_Pwm2

           movf TABLE_OFFSET2,W
           movf PLUSW0,W
           bz PWM2_IS_0
           mulwf FREQUENCY
           movff PRODH,CCPR2L_TEMP
           bra UPDATE_PWM3
PWM_2_IS_0

           clrf CCPR2L_TEMP
Update_Pwm3

           movf TABLE_OFFSET3,W
           movf PLUSW0,W
           bz PWM3_IS_0
           mulwf FREQUENCY
           comf PRODH,PWM3_DUTYCYCLE
           bra SET_PWM12
PWM_3_IS_0

           clrf PWM3_DUTYCLE
Listato 1

 

 

 

4 Commenti

  1. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 8 novembre 2017
  2. Riccardo Ventrella Riccardo Ventrella 8 novembre 2017
    • Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 9 novembre 2017
      • Riccardo Ventrella Riccardo Ventrella 9 novembre 2017

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *