Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x SOMMARIO 1 UNITÀ DI GENERAZIONE PWM DEL ADMCF32X ........................................................................................ 1 PWM TIMER OPERATION ................................................................................................................................................. 2 REGISTRO PWMTM........................................................................................................................................................ 2 REGISTRO PWMDT (DEAD-TIME REGISTER) ................................................................................................................... 2 PWM DUTY-CYCLE ......................................................................................................................................................... 3 PWMTRIP ...................................................................................................................................................................... 3 2 GENERAZIONE DI MODELLI SINUSOIDALI PWM ...................................................................................... 4 3 IMPLEMENTAZIONE SOFTWARE.................................................................................................................... 5 LIBRERIE GENERAL PURPOSE ........................................................................................................................................... 5 Admcf32x.h ................................................................................................................................................................. 5 Flash_CT.h ................................................................................................................................................................. 5 Trigono.h .................................................................................................................................................................... 5 Putvectr.h.................................................................................................................................................................... 6 Macro.h....................................................................................................................................................................... 6 STRUTTURA DEI REGISTRI ................................................................................................................................................ 6 PROGRAMMA PRINCIPALE: LIBRERIA MAIN.H .................................................................................................................. 8 PROGRAMMA PRINCIPALE: MAIN.DSP .............................................................................................................................. 9 SORGENTE “MAIN.DSP”: PORZIONI SIGNIFICATIVE ........................................................................................................ 10 1 Unità di generazione PWM del ADMCF32X Il generatore PWM del dispositivo ADMCF32X è un flessibile generatore PWM trifase che può essere programmato per creare diversi tipi di modelli PWM. Lo schema a blocchi di questa unità è illustrato in Figura 1; i blocchi principali generano sei segnali PWM che escono dai pin AH,AL,BH,BL,CH e CL. Il codice del DSP può essere progettato per produrre la migliore strategia PWM richiesta dall’applicazione, grazie anche alla presenza di tre registri (uno per fase) dedicati al duty-cycle dei segnali PWM. Figura 1.1 Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 1 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x Ciascuno dei sei segnali PWM può essere disabilitato da differenti enable bit del PWMSEG register. Inoltre altri tre bit di controllo del PWMSEG (crossover mode) permettono lo scambio di due segnali PWM consentendo un semplice controllo di motori ECM o brushless DC (BDCM). Esistono due modi di operare del controller PWM e sono il single update mode ed il double ipdate mode. Nel primo i modelli PWM generati sono simmetrici mentre nel secondo no. Il vantaggio di avere modelli asimmetrici risiede nel fatto di produrre meno distorsioni; questo consente l’utilizzo in sistemi di controllo che sono critici per il rumore. PWM TIMER OPERATION Il timer PWM controlla le operazioni interne all’unità di generazionePWM. Queste operazioni, nell’intero periodo PWM, sono schematizzate in figura 1.2. Il contenuto a 16bit del registro PWMTM viene usato per controllare la frequenza di switching dei segnali PWM. Durante la prima metà del ciclo il timer PWM decrementa da PWMTM a 0, una volta a 0 la direzione del conteggio cambia ed il timer inizia ad incrementare fino al valore PWMTM. In figura1.2 sono anche illustrati gli impulsi PWMSYN, generati dal pin dedicato PWMSYNC, relativi ad operazioni in single o double update mode. Figura 1.2 REGISTRO PWMTM La frequenza di switching è direttamente controllata dal registro PWMTM la cui unità di generazione riesce a realizzare frequenze di switching da un valore minimo di 153Hz ( quando PWMTM = 0xffff) ad un massimo stabilito da quel valore per cui si hanno risoluzioni accettabili dei PWM dipendentemente dalla frequenza di clock del DSP. La relazione che descrive il valore da assegnare al registro è: PWMTM = f clk _ out 2 * f pwm da cui si ricava il periodo di switching Ts = 2 * PWMTM * t ck REGISTRO PWMDT (DEAD-TIME REGISTER) E’ un registro a 10 bit che controlla il ritardo da inserire tra le commutazioni in ingresso al ponte H al fine di evitare l’effetto di cortogamba che può essere causa di danneggiamento dei dispositivi di potenza. Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 2 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x TD = 2 * PWMTD * t ck Ad esempio fissando PWMDT = 10 (0x000A) con un tck = 50ns si ottiene un dead time di 1us. PWM DUTY-CYCLE Sono presenti sei uscite PWM (AL,AH,BL,BH,CL e CH) ma allo scopo di questa realizzazione ne sono effettivamente utili solamente quattro; queste uscite sono controllate da tre registri a 16 bit PWMCHA, PWMCHB e PWMCHC il cui valore intero controlla il duty-cycle delle uscite (es. PWMCHA regola AH e AL). Questo valore intero è un numero multiplo del tempo di clock e indica il livello alto del segnale PWM nel semiperiodo. Esistono due modi di gestire il duty-cycle: - Single update mode - Double update mode In questo contesto, però, sarà utile occuparsi solo del primo caso. Nel Single update mode, quindi, i due segnali PWM sono perfettamente simmetrici rispetto alla metà del periodo di switching, come si vede in figura 1.2: Figura 1.2 Le relazioni che descrivono i tempi in cui i segnali sono alti: T AH = 2 * ( PWMCHA − PWMDT ) * t ck T AL = 2 * ( PWMTM − PWMCHA − PWMDT ) * t ck da cui i duty-cycle: D AH = TAH ( PWMCHA − PWMDT ) TS PWMTM D AL = TAL ( PWMTM − PWMCHA − PWMDT ) TS PWMTM Con una breve verifica si nota che non si possono avere valori negativi di TAH e TAL ma possono avere al minimo valore nullo e al massimo pari a TS (Duty-cycle 100%). PWMTRIP In caso di guasti esterni è molto importante che i segnali PWM siano immediatamente disabilitati al fine di garantire al controller una gestione sicura. Un fronte di discesa di Azionamenti Elettrici per l’Automazione a.a. 2002/2003 PWMTRIP scatena un istantaneo e Pag 3 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x asincrono spegnimento del controller PWM. Nello schema a blocchi Figura 1.1 è illustrato anche la circuiteria relativa alla generazione del PWMTRIP. 2 Generazione di modelli sinusoidali PWM L’uscita desiderata si ottiene variando ampiezza e frequenza del riferimento VrefX ; il risultato della comparazione tra riferimento sinusoidale ed onda triangolare danno origine ai segnali PWM usati per controllare i dispositivi di potenza i quali comandano il motore. Figura 2.1 In figura 2.1 si ha una visione espansa del processo di generazione di un singolo PWM. Viene evidenziata la relazione tra la tensione di riferimento VrefA ed il segnale risultante AH. La tensione di riferimento sinusoidale risulta effettivamente campionata con un rapporto pari a quello della frequenza di switching. Il campione, prelevato all’inizio di ciascun ciclo di modulazione viene usato per calcolare il duty-cycle dell’intero periodo PWM. Ad ogni ciclo il DSP deve contare un nuovo valore ON-Time da poter scrivere nei due registri del duty-cycle dell’unità di generazione.; dalla figura 2.1 si intuisce che questo può essere trovato calcolando il tempo Ton,A , di ogni ciclo, dipendentemente dal campione prelevato dal riferimento VrefA. Nel caso d’esempio si assume che la tensione di riferimento sia rappresentata con un numero con segno in complemento a due (formato 1.15), così che 1.0 rappresenti il massimo picco di tensione applicato al motore. Sempre dalla Figura 2.1 si nota che i triangoli MPQ e MST sono identici: |PQ|/|ST| = |PM|/|SM| da cui: 1 (TS − Ton , A ) 1 − V ref , A 2 = 1 2 TS 2 e ricavandone Ton,A Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 4 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x Ton, A = TS * 1 + Vref , A 2 il valore da scrivere nel registro PWMCHA si calcola con: PWMCHA = PWMTM 1 + Vref , A 2 Da quest’ultima relazione si osserva che per VrefA pari a 0.0 nel duty-cycle register viene scritto un valore pari a metà periodo, corrispondente ad un dut-cycle del 50%. Se, invece, VrefA = 1.0 si ottiene un PWMCHA=PWMTM corrispondente ad uno stato sempre ON. Con VrefA = -1.0 cioè PWMCHA=0 corrispondente ad uno stato sempre OFF. 3 Implementazione Software Il programma utilizza la funzione trigonometrica Seno per creare i due segnali di riferimento sinusoidali.La fase e’ scalata in modo tale da far si che l’intervallo [-π,π] sia mappato nel formato 1.15. Formato 1.15 0 -2 segno 2 -1 1 2 –2 2 2 –3 3 2 -4 4 2 –5 5 2 –6 6 2 -7 7 2 -8 8 2 -9 9 2 -10 10 2 -11 11 2 –12 12 2 -13 13 2 -14 2 14 -15 15 Ogni volta che verra’ servita la PWMSync ISR (ogni 100us con una freq di 10kHz) la fase viene incrementata di una quantita’ dipendente dal parametro Delta che rappresenta la massima frequenza d’uscita.Tale frequenza (nel nostro caso 5 Hz) e’ ragguinta solo se si inizializza la variabile AD_IN con 0x7FFF,che nel formato 1.15 rappresenta 1,0 in decimale. La relazione che lega la massima frequenza di fondamentale e il valore di Delta e’ la seguente: f 1,max = f s Delta 216 dove fs e’ la frequenza di switching della PWM. Nel nostro esempio,con Delta = 0x0020 = 32 riusciamo a raggiungere una frequenza massima di 4,88Hz. Il sw realizzato e’ composto dal programma principale Main.dsp, il quale fa uso delle librerie general purpose fornite dal costruttore Analog Devices, le quali contengono le macro piu’ comuni per la gestione degli interrupt, e le costanti, quali ad esempio gli indirizzi in data memory dei registri. LIBRERIE GENERAL PURPOSE Admcf32x.h Tutti I registri del DSP core (PWM, AUX, PIO ecc..) sono mappati in memoria a partire dalla locazione 0x2000. Questa libreria contiene, per ogni registro, il suo relativo indirizzo nella Data Memory. Flash_CT.h Dispone delle macro di gestione del blocco di memoria Flash e del Boot From Flash Bit (cancellabile via hw con un segnale di 3,5v su un qualsiasi piedino dei canali PIO.Nel nostro caso abbiamo usato il PIO6). Trigono.h Contiene le macro per l’implementazione via sw (mediante algoritmi di approssimazione) delle principali funzioni trigonometriche. Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 5 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x Putvectr.h Lettura/scrittura dei registri. Macro.h Gestione dell’Interrupt Vector, scrittura/lettura locazioni di memoria (DM), operazioni di clear/set/toggle/test su bit ecc.. I listati delle sopracitate librerie si possono trovare nelle directory _inclF32x (header files *.h) e _libF32x (dsp files *.dsp). STRUTTURA DEI REGISTRI E’ opportuno mostrare la struttura dei principali registri utilizzati nell’applicazione (per dettagli vi rimandiamo alla sezione 1),ponendo particolare attenzione a quelli dedicati alla PWM Contro Unit . Infatti,una volta decisi i parametri di progettazione (es:frequenza di switching del segnale PWM, tempo morto ecc.) non basta far altro che inserire in questi registri l’opportuno valore mediante le funzioni che potete vedere qui. Figura 3.1: PWM Switching frequency. Figura 3.2: PWM Dead Time. Figura 1.3: PWM Output Control Unit. Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 6 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x Figura 3.4: Durata dell'impulso PWMSYNC. Figura 3.2: Minima durata dell'impulso PWM. Figura 3.3: Gate Drive Unit. Figura 3.4: Regolazione dei Duty cycles. Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 7 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x PROGRAMMA PRINCIPALE: LIBRERIA MAIN.H Il file contiene le costanti necessarie per l’inizializzazione della PWM Control Unit. In questa applicazione si e’scelto : • una frequenza di switching di 10kHz; • tempo morto o cortogamba (per evitare un corto nello stadio di potenza durante le commutazioni da una diagonale all’altra del ponte) di 500ns; • durata minima dell’impulso pwm di 1us; • durata dell’impulso di sincronizzazione (quello che cadenza l’esecuzione della PWMSYNC_ISR) pari a 1,54us; • segnale sinusoidale di riferimento a 5 Hz; • angolo di sfasamento delle due sinusoidi di 180°. Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 8 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x PROGRAMMA PRINCIPALE: MAIN.DSP Il main.dsp e’ fondamentalmente suddiviso in due parti:la sezione dedicata all’inizializzazione della PWM Control Unit e dalla gestione della Interrupt Service Routine (associata all’IRQ della PWMSYNC).Da notare infatti,che avendola mascherata a livello sw mediante il settaggio opportuno dei registri IFC (Interrupt Force & Clear) e IMASK,tale ISR viene servita ogni 100us ad una frequenza di switching della PWM di 10kHz.Il diagramma sottostante mosta i blocchi costitutivi del file main.dsp. Per la compilazione del sorgente occorre lanciare il file build.bat, facendo particolare attenzione nel controllare prima che il path all’interno del suddetto file sia corretto. main Gestione Della Flash Memory e del Boot bit. Flash Inizializzazion e blocco PWM. Settaggio Interrupt Vector Single Update Mode abilitato. Maschero IRQ2 con PWMSYNC_I SR Ogni 100us PWMSYNC ISR Fase A Fase B Lettura di Theta (fase corrente) e Delta (freq.desiderata) Calcolo della nuova fase: Theta=Theta + Delta *AD_IN Tensione di riferimento per la fase A: VrefA = Sin(Theta)*AD_IN Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Lettura di Theta (fase corrente) Aggiornamento duty cycles mediante scrittura sui registri PWMCH(A,B) Calcolo della nuova fase: Theta=Theta –180° Tensione di riferimento per la fase B: VrefB = Sin(Theta)*AD_IN Pag 9 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x SORGENTE “MAIN.DSP”: PORZIONI SIGNIFICATIVE Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 10 di 11 Generazione di due segnali PWM per controllo motore CC mediante DSP Admfc32x E’ utile ricordare il metodo con cui vengono aggiornati i registri dedicati ai duty cycles dei canali A e B (C infatti a noi non serve,ed e’ stato disabilitato mediante il registro PWMSEG). PWMCHA = PWMTM (1 + VrefA) 2 analogamente per l’altro canale. Per la gestione dell’ISR PWMTRIP e’ stato deciso di far eseguire una semplice istruzione nop.Tuttavia in ambito industriale occorre dedicare molta attenzione a questo aspetto in quanto e’ in gioco la sicurezza dell’impianto. Infatti, ogni qual volta accade un guasto nel sistema controllato, un fronte di discesa sul canale PWMTRIP causa un istantaneo spegnimento del generatore PWM per garantire la sicurezza del sistema.Quindi puo’ essere necessario introdurre le blocco PWMTRIP_ISR una gestione opportuna di questo evento. Azionamenti Elettrici per l’Automazione a.a. 2002/2003 Pag 11 di 11