final PWM

15

Click here to load reader

Transcript of final PWM

Page 1: final PWM

UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA

DEPARTAMENTO DE ELECTRÓNICA

Laboratorio de

INFORME FINAL

“Modulación por ancho de pulsos

UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA

DEPARTAMENTO DE ELECTRÓNICA

Laboratorio de Electrónica Industrial

INFORME FINAL

“Modulación por ancho de pulsos

Experiencia 6

Grupo 8 Lautaro Narvaez

Juan Vargas H.

Fecha 05/10/2010

Revisado por

UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA

Industrial

“Modulación por ancho de pulsos”

Lautaro Narvaez P.

Juan Vargas H.

Nota

Page 2: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

1

INTRODUCCIÓN Y OBJETIVOS

Actualmente se encuentran varias posibilidades a la hora de implementar algoritmos de control, principalmente micro controladores y plataformas como FPGA y DSP (Procesador Digital de Señales). Cada uno de estos dispositivos posee características diferentes, las cuales permiten discernir en su elección dependiendo de la aplicación en que se desee utilizar. En esta experiencia se programa un DSP Texas Instruments TMS320F2407 montado sobre la tarjeta de desarrollo eZdsp2407b, con el fin de controlar un inversor trifásico, el que a su vez, alimenta un motor. Existen varias tipos de modulación de convertidores: Con portadora, vectorial, eliminación selectiva de armónicas, etc. En particular, se trabajará la modulación con portadora, que es la más utilizada en convertidores industriales. A través del DSP se generan las señales de disparo (señales PWM) del inversor. Para ello se debe configurar los módulos adecuados, seteando los registros y habilitando interrupciones. También se busca poder controlar la velocidad de giro del motor de forma análoga, lo que se logra habilitando un ADC del dispositivo.

1. INFORME FINAL

En las siguientes secciones se detalla el desarrollo de la experiencia. Se incluyen las imágenes más representativas, además de comentarios y conclusiones relevantes. Debido a un problema con el almacenamiento de las capturas del osciloscopio, se debió utilizar las imágenes obtenidas de otro grupo en la primera parte (generación de señales PWM).

1.1 Instrucciones DSP

El primer paso para la generación de señales PWM es el correcto seteo de los registros más importantes. Para ello, se hace uso del material adecuado, como la documentación y archivos disponibles en la web del ramo. En el preinforme de la experiencia se nombraron y detallaron algunos registros, además de los valores que debían adoptar sus bits. Dentro de la serie de archivos de la web, se encuentran tres principales: main.c, interr.c y init.c. Para la primera parte, se setean los registros T1PR, ACTRA, COMCONA, T1CON y DBTCONA, los cuales se ubican en init.c. Cabe destacar que el oscilador del DSP utilizado es de 14.7456MHz, pero la CPU interna debe considerarse del doble de esta frecuencia, 29.4912MHz. Luego, para poder configurar los registros como si el reloj fuese el de 14M, se debe hacer un escalamiento x/2, el cual se realiza en T1CON.

Page 3: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

2

El registro T1PR guarda el valor límite de la cuenta del reloj, según la frecuencia que se requiera. En este caso, se pide tener una frecuencia aproximada de 3[kHz]. Considerando el preescalamiento x/2 se tiene (según lo obtenido en el preinforme)

14.74561 2458 0 099

2 2 3clock

T MT PR x A

T K= = = ⇔

⋅ ⋅

Las siguientes tablas muestran los valores de cada registro con una breve explicación de la función de los bits más relevantes. El símbolo * indica que no es necesario setear el(los) bit en cuestión, pudiéndose asignar indistintamente 0 o 1.

Tabla 1. ACTRA = 0xF666

bit valor Función 15 1

*Uso en PWM Vectorial 14 1 13 1 12 1 11 0

Salida activa baja de CMP6 10 1 9 1

Salida activa alta de CMP5 8 0 7 0

Salida activa baja de CMP4 6 1 5 1

Salida activa alta de CMP3 4 0 3 0

Salida activa baja de CMP2 2 1 1 1

Salida activa alta de CMP1 0 0

El registro ACTRA establece las acciones de control para el registro de comparación. Permite la definición de las señales PWM y sus cuasi-complementos. COMCONA es el registro que controla las unidades de comparación (para el gestor de eventos EVA).

Page 4: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

3

Tabla 2. COMCONA = 0xA6FF

bit valor Función 15 1 Comparador Habilitado 14 0 El registro de comparación CMPRx se recarga

cuando T1CNT = 0 ó T1CNT = T1PR 13 1 12 0 PWM vectorial deshabilitada 11 0 El registro de acción de control se recarga

cuando T1CNT = 0 ó T1CNT = T1PR 10 1 9 1 Salida del comparador activada 8 0 *Reservado 7 1

*Reservados

6 1 5 1 4 1 3 1 2 1 1 1 0 1

Tabla 3. T1CON = 0x0946

bit valor Función 15 0

*Free 14 0 13 0

*Reservados 12 0 11 1

Modo de conteo: Up/Down Continuo 10 0 9 0

Preescala reloj de entrada: x/2 8 1 7 0 T2SWT1 6 1 Timer 1 habilitado 5 0

Selección de la fuente de reloj: Interno 4 0 3 0 El registro se recarga cuando el valor del

contador es 0 o igual a T1PR 2 1 1 1 Comparador habilitado

Page 5: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

4

0 0 SELT1PR En T1CON los bits 9-8 son muy importantes ya que definen la base del reloj. Es necesario una correcta y consecuente elección, de modo que T1PR pueda elegirse para lograr los 3kHz, tal y como se hizo.

Tabla 4. DBTCONA = 0xFFEB

bit valor Función 15 1

*Reservados 14 1 13 1 12 1 11 1

Periodo de la banda muerta (M=15) 10 1 9 1 8 1 7 1 Banda muerta para PWM5 y PWM6 habilitada 6 1 Banda muerta para PWM3 y PWM4 habilitada 5 1 Banda muerta para PWM1 y PWM2 habilitada 4 0

Preescala de la banda muerta (P=4) 3 1 2 0 1 1

*Reservados 0 1

Como se explicó en el preinforme, la implementación de un tiempo o banda muerta es muy importante para evitar cortocircuitar la fuente de alimentación mientras conmutan los semiconductores de una misma pierna. Es por esto que el registro DBTCONA es trascendental y una correcta configuración asegura un funcionamiento inequívoco del circuito. Teniendo en cuenta que DBTCONA[11-8] = M corresponden al periodo de la banda muerta (DB) y DBTCONA[4-2] = x/P, donde x es el reloj del sistema y P la preescala, se tiene

2 clockDB s P M Tµ= = ⋅ ⋅

2 29.4912 60P M Mµ⋅ = ⋅ ≈ Por lo tanto se eligen convenientemente P y M, de modo tal que su producto sea 60. En este caso, se eligió P = 4 y M = 15.

Page 6: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

5

Según se mencionó, todos estos registros se cargaron en el archivo init.c.

1.2 Señales PWM

Con la correcta disposición de cada uno de los registros expuestos en la parte anterior, se puede proceder a generar señales PWM con ciclos de trabajo constantes (índice de modulación constante). Para ello, se debe asignar valores adecuados a los comparadores CMPR1, CMPR2 y CMPR3. Estos comparadores adoptan valores que se relacionan linealmente con T1PR, considerando a este como un ciclo de trabajo de 100%, luego

1 20% 1 492 0 01CMPR T PR x EC= ⋅ = = 2 40% 1 983 0 03 7CMPR T PR x D= ⋅ = = 3 20% 1 1844 0 0734CMPR T PR x= ⋅ = =

Utilizando el software adecuado se cargan los diferentes archivos y se procede a compilar el proyecto. Se obtiene una imagen similar a la siguiente

Figura 1. Señales PWM y cuasi-complementarias con ciclo de trabajo 20%, 40% y 75%

A pesar de no ser la imagen original del grupo, se puede dar fe que las obtenidas en la experiencia fueron muy similares respecto de los valores logrados.

Page 7: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

6

Comprobado el funcionamiento del módulo PWM, es pertinente apreciar si se cumple la restricción del tiempo muerto. Para ello, basta con hacer un zoom a la conmutación de una señal con su cuasi-complemento. Se aprecia una imagen como la siguiente

Figura 2. Banda muerta de 2[us]

Las últimas dos señales están separadas por una banda muerta de app. 2[us]. Si bien es cierto, sólo se puede observar la característica para una señal, las otras dos contienen el mismo tiempo ya que fueron configuradas de igual forma. Extendiendo la idea para las señales, es posible generarlas con un índice de modulación variable, dado por una señal sinusoidal. Luego, con la siguiente sección de código implementada en el archivo de interrupciones (sólo lo relevante, ya que en el anexo se incluye el código completo), se pueden obtener las señales antes mencionadas.

int A=0x04CD-50; float freq=50.; int offset=0x04CD;

if (t==(3000/freq)) t=0; t=t+1; arg=(4*Pi*freq *(t/3000)); CMPR1 = (int)(A*sin(arg))+offset; CMPR2 = (int)(A*sin(arg+2*pi/3))+offset; CMPR3 = (int)(A*sin(arg+4*pi/3))+offset;

Lo anterior admite una asignación variable (sinusoidal) a los comparadores de cada PWM, lo que a su vez permite tener un índice de modulación variable. Se aprecia que existe un offset fijado

Page 8: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

7

justo en la mitad del valor de T1PR, lo que sumado a una sinusoidal de casi la misma amplitud (se disminuye levemente el valor para poder generar las señales sin distorsión por sobremodulación) entregan los valores de cada CMPRx. Además, se utiliza un contador t que aumenta su cuenta cada vez que se ingresa a la interrupción y se recarga cuando alcanza el valor de 3000/freq, que corresponde a los ciclos de portadora que calzan en un periodo de la referencia. Con esto es posible generar una base de tiempo y así obtener las señales sinusoidales para las referencias. Con la modificación hecha se puede cargar el código al DSP, obteniéndose una imagen como la siguiente.

Figura 3. Señales PWM con referencia sinusoidal

Se observa un patrón que se repite cada 20[ms] ó su equivalente en frecuencia de 50[Hz].

1.3 Control a través de un potenciómetro

Ahora, para modificar la frecuencia y la amplitud de la referencia en tiempo real utilizamos el conversor análogo digital (ADC) que posee la DSP.

Figura 4. Conexión de las señales analógicas de entrada

Page 9: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

8

El problema de la implementación que se hizo en la sección anterior es que una variación directa de la frecuencia dentro de la sinusoide en tiempo real provocaría cambios de fase. Para solucionarlo se implementa la frecuencia a través de la discretizacion del valor del ángulo siguiente:

∆� = � ∗ ∆� Luego, se tiene la siguiente modificación del código

f=50*data/1023; A=data*0x04CD/1023;

theta[1]=4*Pi*f/3000.+theta[0]; if(theta[1]>=2000*Pi) theta[1]=0; theta[0]=theta[1];

CMPR1=(int)(A*sin(theta[1]))+offset; CMPR2=(int)(A*sin(theta[1]+2.*Pi/3.))+offset; CMPR3=(int)(A*sin(theta[1]-2.*Pi/3.))+offset;

La variable del ángulo se resetea a través del if, siendo todo lo demás un desglose de la ecuación mostrada inicialmente. El registro data es una variable que va desde 0 a 1023 y proviene del convertidor A/D pudiendo ser esta variable modificada a través del potenciómetro conectado. Además de variar la frecuencia proporcionalmente variamos la amplitud: A=data*0x0999/1023. Lo anterior, a partir de A/f = cte. que permite las variaciones proporcionales de amplitud y frecuencia.

1.4 Conexiones

El siguiente paso fue la conexión de la DSP a un rectificador trifásico alimentado con una fuente de poder DC y esto alimentando un motor AC. Entre el conversor AC/DC interviene un transformador que permite el desacoplo de las tierras.

Figura 5. Interconexión de los los dispositivos

Page 10: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

9

1.5 Conexión Inversor y Motor

Por un tema de tiempo, ocupamos las conexiones del grupo vecino cambiando la DPS. Por lo que los detalles de las conexiones no pudimos apreciarlos en su totalidad. Una vez conectados los dispositivos, se comprobó que funcionaba correctamente el control de la frecuencia y la amplitud de la señal de potencia, entregada al motor controlada por el potenciómetro. Si aumentamos la frecuencia aumentamos la amplitud y si disminuimos la frecuencia disminuimos la amplitud. La frecuencia máxima son los 50 ciclos por segundo, sin embargo la amplitud disminuía a una tasa menor que a la que disminuía la frecuencia. En la siguiente captura podemos apreciar el voltaje que se encuentra entre el punto medio de una pierna y el 0 de la fuente.

Figura 6. Voltaje en un igbt y su fft

Se puede apreciar una señal de dos niveles pues el voltaje en un IGBT de la parte inferior de una pierna puede tomar los valores Vcc y 0. Las formas oscilatorias, posiblemente se deben a un problema de resolución de los instrumentos de medición, pues como lo indica la transformada de Fourier que viene incluida en la captura, la frecuencia fundamental es la frecuencia de switcheo (portadora de la PWM 3kHz).

En la siguiente captura podemos apreciar la corriente de 2 fases (verde y amarillo) y el voltaje entre fases (morado).

Page 11: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

10

Figura 7. Voltaje entre 2 fases (morado) y corriente por 2 fases

La inductancia del motor filtra la componente de alta frecuencia y permite que la corriente sea principalmente una señal de 50Hz, con un ligero riple, la amplitud de estas corrientes es de 203mA y su desfase es 129 grados, esto es porque las componentes armónicas ensanchan la señal y resulta poco preciso con los punteros del osciloscopio medir el desfase. La señal de voltaje posee 3 niveles porque es la resta de los voltajes de los IGBT de 2 piernas que son cada una voltajes de 2 niveles como se indica en el siguiente diagrama:

Figura 8. Voltaje en los semiconductores y el voltaje entre 2 fases

Page 12: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

11

A medida que fuimos disminuyendo la frecuencia se comienza a apreciar de forma mas clara el efecto del tiempo muerto sobre las señales.

Figura 9. Voltaje en los semiconductores y el voltaje entre 2 fases

Esto sucede porque cada vez que se invierte la polaridad de la corriente ocurre un cambio en el voltaje positivo o negativo dependiendo de la polaridad de la corriente.

Figura 10. Efecto del tiempo muerto

Este efecto no lineal se puede compensar a través un lazo de control realimentado de corriente

Page 13: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

12

CONCLUSIONES

El desafío de esta experiencia fue implementar un algoritmo en un DSP que permitiera controlar un inversor conectado a un motor. Para ello se configuraron señales PWM que sirvieron como señales de disparo del inversor trifásico. En la primera parte de la experiencia se debió establecer los valores de ciertos registros necesarios para el funcionamiento del DSP. Dado que se contaba con los archivos “.c” necesarios para crear un proyecto, basto con el seteo de registros para obtener señales con ciclo de trabajo constante. En la siguiente implementación, se debió hacer variar la referencia para así lograr controlar el índice de modulación. Para esto fue necesario el uso de interrupciones, las cuales paralizan la ejecución normal del código para hacer una acción preajustada. Esto permite tener una frecuencia a la salida del convertidor fijada con los parámetros del DSP. En el caso del laboratorio, se utilizaron 50[Hz] los cuales se obtuvieron con un mínimo error. En la segunda parte se modificó el código, para que con un potenciómetro, fuese posible variar en tiempo real la amplitud y frecuencia de la sinusoidal que domina la referencia para las señales PWM, de modo que estas tuviesen una relación proporcional (A/f=cte). De este modo, al conectar el motor se pudo variar su velocidad de giro a través de un potenciómetro conectado al ADC del DSP. Gracias a esto, se pudo observar de mejor manera los efectos producidos en la corriente y voltaje del motor. Un detalle importante, y que no se detalla en el informe ya que por razones de tiempo no se pudo analizar con detención, es el uso de un transformador y optoacopladores para el aislamiento de tierras. La principal razón es la aislación del circuito de control y de potencia, ya que una mala implementación podría destruir el DSP.

Page 14: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

13

ANEXO

A continuación se presentan los códigos de los archivos main.c, interr.c y init.c. main.c: #include "f2407_c.h" /****************************** MAIN ROUTINE ***************************/ void main(void) { InitSCSr(); InitWD(); InitIOPort(); InitGPT(); InitADC(); /*** Setup the core interrupts ***/ IMR = 0x0000; /* clear the IMR register */ IFR = 0x003F; /* clear any pending core interrupts */ IMR = 0x0001; /* enable desired core interrupts (_adc_isr) */ InitEVx(); /*** Enable global interrupts ***/ asm(" CLRC INTM"); /* enable global interrupts */ /*** Proceed with main routine ***/ while(1) {asm (" nop"); } /* endless loop, wait for interrupt */ } /* end of main() */

init.c: #include "f2407_c.h" /*** Seteo de los registros de control de los timers, y las unidades PWM ***/ void InitGPT(void) { T1PR=0x099A; ACTRA=0xF666; COMCONA=0xA6FF; T1CON=0x0946; DBTCONA=0xFFEB; //CMPR1=0x01EC; //CMPR2=0x03D7; //CMPR3=0x0734; } /*** Seteo de los registros de control del conversor AD ***/ void InitADC(void) { /*Aquí coloque los registros de ajuste del ADC*/ GPTCONA= 0x0100; ADCTRL1= 0x6480; ADCTRL1= 0x2480;

Page 15: final PWM

Laboratorio de Electrónica Industrial, Segundo Semestre 2010

14

ADCTRL2= 0x4700; ADCTRL2= 0x0700; MAX_CONV=0x0000; CHSELSEQ1=0x0000; }

. . .

interr.c : /********************** INTERRUPT SERVICE ROUTINES *********************/ #include "f2407_c.h" #include <math.h> #define Pi 3.1415926536 float data; int z=0; int n=0; float t=0; float theta[]={0,0}; int offset=0x04CD; int A=0; float f=0; //int A=0x04CD-50; //float f=50.; interrupt void adc_isr(void) { /*Aquí coloque las interrupciones activadas por el ADC*/ data=RESULT0>>6; f=50*data/1023; A=data*0x04CD/1023; theta[1]=4*Pi*f/3000.+theta[0]; if(theta[1]>=2000*Pi) theta[1]=0; theta[0]=theta[1]; CMPR1=(int)(A*sin(theta[1]))+offset; CMPR2=(int)(A*sin(theta[1]+2.*Pi/3.))+offset; CMPR3=(int)(A*sin(theta[1]-2.*Pi/3.))+offset; EVAIFRA=0xFFFF; ADCTRL2=0x0700; } interrupt void timer1_isr(void) { } interrupt void timer2_isr(void) { }