Dsp Trabajo
-
Upload
arturo-contreras-martinez -
Category
Documents
-
view
73 -
download
2
Transcript of Dsp Trabajo
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
ÍNDICE
1. ÍNDICE........................................................................................................1
2. EXPERIENCIAS A REALIZAR.
2.1. ENTRADAS Y SALIDAS DIGITALES.................................................2
2.2. MUESTREO ........................................................................................9
2.3. ADC_ MUESTREO............................................................................11
2.4. PWM SIMPLE Y DOBLE..................................................................16
2.5. ADC_ MUESTREO _PWM SIMPLE Y DOBLE...............................22
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
1
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
EXPERIENCIAS A REALIZAR
1. PROBLEMA 1: ENTRADAS Y SALIDAS DIGITALES
1.1. BASE TEÓRICA
DESCRIPCIÓN DE LAS SEÑALES
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
2
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
3
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
GPIO MUX REGISTER
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
4
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
GPIO DATA REGISTER
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
5
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
1.2. CIRCUITO DE CONEXIÓN
TERMINALES
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
6
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
7
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
CONEXIONES
1.3. PROGRAMA COMPILADO SIN ERRORES
#include "DSP281x_Device.h"#include "DSP281x_Examples.h"float z;unsigned int i;int f;void main(void) {DINT;DRTM;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable(); EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 0; GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 0; GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 = 0; GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA0 = 1; // Salida GpioMuxRegs.GPADIR.bit.GPIOA1 = 1; // salida GpioMuxRegs.GPADIR.bit.GPIOA2 = 1; // salida
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
8
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
GpioMuxRegs.GPADIR.bit.GPIOA3 = 1; // Salida GpioMuxRegs.GPADIR.bit.GPIOA4 = 0; // Entrada
EDIS;
GpioDataRegs.GPADAT.bit.GPIOA0 = 1;GpioDataRegs.GPADAT.bit.GPIOA1 = 1;GpioDataRegs.GPADAT.bit.GPIOA2 = 1;GpioDataRegs.GPADAT.bit.GPIOA3 = 1;
EINT;ERTM;
f=0;do{
if (GpioDataRegs.GPADAT.bit.GPIOA4 == 1 ){GpioDataRegs.GPADAT.bit.GPIOA0 = 1;GpioDataRegs.GPADAT.bit.GPIOA1 = 0;GpioDataRegs.GPADAT.bit.GPIOA2 = 0;GpioDataRegs.GPADAT.bit.GPIOA3 = 0;for (i=1;i<50000;i++);GpioDataRegs.GPADAT.bit.GPIOA0 = 0;GpioDataRegs.GPADAT.bit.GPIOA1 = 1;GpioDataRegs.GPADAT.bit.GPIOA2 = 0;GpioDataRegs.GPADAT.bit.GPIOA3 = 0;for (i=1;i<50000;i++);GpioDataRegs.GPADAT.bit.GPIOA0 = 0;GpioDataRegs.GPADAT.bit.GPIOA1 = 0;GpioDataRegs.GPADAT.bit.GPIOA2 = 1;GpioDataRegs.GPADAT.bit.GPIOA3 = 0;for (i=1;i<50000;i++);GpioDataRegs.GPADAT.bit.GPIOA0 = 0;GpioDataRegs.GPADAT.bit.GPIOA1 = 0;GpioDataRegs.GPADAT.bit.GPIOA2 = 0;GpioDataRegs.GPADAT.bit.GPIOA3 = 1;for (i=1;i<50000;i++);}
else{GpioDataRegs.GPADAT.bit.GPIOA0 = 0;GpioDataRegs.GPADAT.bit.GPIOA1 = 0;GpioDataRegs.GPADAT.bit.GPIOA2 = 0;GpioDataRegs.GPADAT.bit.GPIOA3 = 0;
}}while (1==1);
}
1.4.PLAN DE EJECUCIÓN
1. Alistar el modulo de DSP de Varitek y el modulo de leds.2. Encender el DSP y conectarlo (mediante su puerto serial RS-232) a la PC u LAPTOP.3. Cargar el programa mediante el programa ColcaCode al DSP.4. Los pines a utilizar son:
PWM1_GPIOA0PWM2_GPIOA1PWM3_GPIOA2PWM4_GPIOA3PWM5_GPIOA4
Que se encuentran en el terminal J25. Conectar el pin PWM5_GPIOA4 a una entrada tipo switch.6. Conectar los pines:
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
9
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
PWM2_GPIOA1PWM3_GPIOA2PWM4_GPIOA3PWM5_GPIOA4
Al modulo de leds de forma ordenada7. Encender el Modulo de Leds
2. PROBLEMA 2: MUESTREO
2.1. BASE TEÓRICA
Para generar un tiempo de muestreo, primero debemos seleccionar el timer con el que se trabajara, en este caso hemos usado el timer cero para generar el tiempo de muestreo, también se realizó la configuración de activación de interrupción (grupo y nivel) respectiva. En esta configuración tenemos que asignar valores a los registros T1PR y T1CON para asignar el preescalador y obtener el tiempo de muestreo de acuerdo ala frecuencia de reloj.
Y para visualizar el muestreo hacemos que parpadeen leds, y esto lo hacemos con una función de muestreo que se elaboro dentro de la función de interrupción.
2.2. CIRCUITO DE CONEXIÓN
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
10
1234
40393837
5 366 357 348 339 3210 3111 3012 2913 2814 2715 2616 2517 2418 2319 2220 21
JP4
R1
300
R2
300
R3
300
R4
300
A0
LED-RED
A1
LED-RED
A2
LED-RED
A3
LED-RED
1234
40393837
5 366 357 348 339 3210 3111 3012 2913 2814 2715 2616 2517 2418 2319 2220 21
JP3
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
2.3. PROGRAMA COMPILADO SIN ERROR
#include "DSP281x_Device.h"#include "DSP281x_Examples.h"long int i;void ini_eva_timer1(void);interrupt void eva_timerT1PER_isr(void);void main(void) {DINT;DRTM;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();
EALLOW;
PieVectTable.T1PINT = &eva_timerT1PER_isr;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 0; GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 0; GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 = 0; GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA0 = 1; GpioMuxRegs.GPADIR.bit.GPIOA1 = 1; GpioMuxRegs.GPADIR.bit.GPIOA2 = 1; GpioMuxRegs.GPADIR.bit.GPIOA3 = 1;
EDIS;PieCtrlRegs.PIEIER2.all = M_INT4 | M_INT5;IER = IER | M_INT2;i=0;ini_eva_timer1();
GpioDataRegs.GPADAT.bit.GPIOA0 = 1;GpioDataRegs.GPADAT.bit.GPIOA1 = 1;GpioDataRegs.GPADAT.bit.GPIOA2 = 1;GpioDataRegs.GPADAT.bit.GPIOA3 = 1;
EINT;ERTM;
}void ini_eva_timer1(void){ EvaRegs.T1PR = 0x0752; // 10Khz EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.bit.T1PINT = 1; EvaRegs.T1CNT = 0x0000; EvaRegs.T1CON.all = 0x9202; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T1CON.all = 0x9242; EvaRegs.GPTCONA.bit.T1TOADC = 2; // interrupt del T1PER EvaRegs.GPTCONA.bit.T1PIN =2; }interrupt void eva_timerT1PER_isr(void){
i++; GpioDataRegs.GPATOGGLE.bit.GPIOA0=1;
GpioDataRegs.GPATOGGLE.bit.GPIOA1=1;if (i<10){
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
11
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
GpioDataRegs.GPADAT.bit.GPIOA2=1;GpioDataRegs.GPADAT.bit.GPIOA3=1;
}else{
GpioDataRegs.GPADAT.bit.GPIOA2=0;GpioDataRegs.GPADAT.bit.GPIOA3=0;
}if (i>20) i=0;
EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.all = BIT7; PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;}
3. PROBLEMA 3: ADC MUESTREO
3.1. BASE TEÓRICA
CONTROL DE REGISTROS DEL ADC
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
12
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
ADCMAXCONV
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
13
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
// MUESTRA DE LA CONFIGURACION DEL ADC
void ini_adc(void); // Declaración en la cabecera
ini_adc(); // Inicializacion
void ini_adc(void){
// Specific ADC setup for this example: AdcRegs.ADCTRL1.bit.RESET = 1; asm(" NOP ");
asm(" NOP "); AdcRegs.ADCTRL1.bit.ACQ_PS = 15; AdcRegs.ADCTRL3.bit.ADCCLKPS = 1; AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; AdcRegs.ADCTRL3.bit.ADCEXTREF = 0; DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL3.bit.ADCPWDN = 1; DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL1.bit.RESET = 0; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
DEFINICION DE LAS ENTRADAS
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //adca0 //AdcRegs.ADCCHSELSEQ1.all = 0x0128; //AdcRegs.ADCCHSELSEQ2.all = 0xABCD; //AdcRegs.ADCCHSELSEQ3.all = 0x9572; //AdcRegs.ADCCHSELSEQ4.all = 0x4444; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 1;
CONVERSION A MODO CONTINUO
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; }
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
14
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
LECTURA DEL ADC
ResultADC0=AdcRegs.ADCRESULT0>>4 // Para coger solamente los últimos 12 bits
3.2. CIRCUITO DE CONEXIÓN
3.3. PROGRAMA COMPILADO SIN ERROR
// MUESTREO _ADC
#include "DSP281x_Device.h"#include "DSP281x_Examples.h"#include "lab5.h"long int i,k,z;
unsigned int sc,ResultADC0,ref,e;float kp;
void ini_eva_timer1(void);void ini_adc(void);
interrupt void eva_timerT1PER_isr(void);void main(void) {
sc=0;ref=2048;kp=100;
DINT;DRTM;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable(); EALLOW;
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
15
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
PieVectTable.T1PINT = &eva_timerT1PER_isr;
GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 0; GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 = 0;
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 1; GpioMuxRegs.GPAMUX.bit.T2PWM_GPIOA7 = 1;
GpioMuxRegs.GPADIR.bit.GPIOA1 = 1; GpioMuxRegs.GPADIR.bit.GPIOA2 = 1;
EDIS;PieCtrlRegs.PIEIER2.all = M_INT4 | M_INT5;IER = IER | M_INT2;i=0;ini_eva_timer1();ini_adc();EINT;ERTM;}
void ini_eva_timer1(void){ EvaRegs.T1PR = 0xFFFF; // 10Khz //EvaRegs.T1CMPR = 0x03A9; EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.bit.T1PINT = 1; EvaRegs.T1CNT = 0x0000; EvaRegs.T1CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T1CON.all = 0x9742; EvaRegs.GPTCONA.bit.T1TOADC = 2; // interrupt del T1PER EvaRegs.GPTCONA.bit.T1PIN =2;}
void ini_adc(void){
// Specific ADC setup for this example:
AdcRegs.ADCTRL1.bit.RESET = 1; asm(" NOP ");
asm(" NOP ");
AdcRegs.ADCTRL1.bit.ACQ_PS = 15; AdcRegs.ADCTRL3.bit.ADCCLKPS = 1; AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; AdcRegs.ADCTRL3.bit.ADCEXTREF = 0; DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL3.bit.ADCPWDN = 1;
DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL1.bit.RESET = 0; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //AdcRegs.ADCCHSELSEQ1.all = 0x0128; //AdcRegs.ADCCHSELSEQ2.all = 0xABCD; //AdcRegs.ADCCHSELSEQ3.all = 0x9572; //AdcRegs.ADCCHSELSEQ4.all = 0x4444; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 1; AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;}
interrupt void eva_timerT1PER_isr(void){
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
16
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
//sc=sc+200;GpioDataRegs.GPATOGGLE.bit.GPIOA1 = 1;GpioDataRegs.GPATOGGLE.bit.GPIOA2 = 1;
ResultADC0=AdcRegs.ADCRESULT0>>4;// led=ResultADC0;// sc=e*kp;// EvaRegs.T2CMPR = sc;
EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.all = BIT7; PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;}
3.4. PLAN DE EJECUCIÓN
1. Sin ningún tipo de alimentación en los circuitos, realizar las conexiones de las placas según lo mostrado en los diagramas de conexión.
2. Alimentar el DSP y conectar a la computadora.3. Verificar la instalación del cable USB-Serial y el número de puerto COM a utilizar.4. Abrir el ColcaCode y seleccionar el número de puerto COM del cable USB-Serial y luego
conectar con el DSP.5. Buscar y ejecutar el programa respectivo a grabar en el DSP.6. Alimentar los circuitos adicionales al DSP como la tarjeta de Leds y la tarjeta de Potenció-
metros.7. Verificar el correcto funcionamiento del programa mediante el parpadeo de leds.
4. PROBLEMA 4: PWM SIMPLE Y DOBLE
4.1. BASE TEÓRICA
PWM SIMPLE
Para generar una salida PWM con un temporizador GP, de un modo continuo hasta-o contaje reversible puede ser seleccionado. Activado por flancos o asimétrica formas de onda PWM se generan cuando un modo de recuento continuo en marcha está seleccionado. Centrado o formas de onda PWM simétrica se generan cuando un modo de continuous-up/-down se selecciona. Para configurar el temporizador GP para la operación PWM, haga lo siguiente:
Configure TxPR según el deseado PWM (carrier) período Configure TxCON para especificar el modo de conteo y la fuente de reloj, e iniciar la
operación Cargar TxCMPR con los valores correspondientes a las anchuras de línea calculados (ciclos
de trabajo) de pulsos PWM
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
17
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
El valor del periodo se obtiene dividiendo el período deseado PWM por el período del reloj de entrada GP temporizador, y restando uno el número resultante cuando el continuo de conteo se selecciona el modo de generar formas de onda PWM asimétrica Cuando el modo de contaje reversible continua se selecciona para generar formas de onda PWM simétrica, este valor se obtiene dividiendo el período PWM deseado por dos veces el período de la entrada de reloj temporizador GP.El temporizador de GP se puede inicializar la misma manera que en el ejemplo anterior. Durante el tiempo de ejecución, el temporizador GP comparar registro se actualiza constantemente con nuevos determinada comparar los valores correspondientes a los ciclos de trabajo recién determinados.
GP Temporizador de reinicio:
Cuando cualquier evento de reinicio se produce, ocurre lo siguiente:Todos los bits de registro de temporizador GP, a excepción de los bits de indicación de dirección de contaje en GPTCONA / B, se ponen a 0, por lo que la operación de todos los temporizadores GP está desactivado. Los bits de dirección de conteo indicación se ajustan a 1.
Todas las banderas de interrupción del temporizador se pone a 0 Generación de salidas PWM utilizando el GP temporizadores 1-33 SPRU065C general
Todos los bits de interrupción de temporizador de máscara se ponen a 0, a excepción de PDPINTx; por lo tanto, todas las interrupciones del temporizador GP están enmascarados excepto para PDPINTx
Todas las salidas del temporizador GP comparación se pone en el estado de alta impedancia
PWM DOBLES
Las llaves de PWMs sirven para el disparo de puentes de IGBTs, Mosfets o BJTs. Son un grupo de 6 pines PWMs desde el PWM1 hasta el PWM6 para el Event Manager A. Trabajan en parejas, es decir que el PWM1 y el PWM2 están asociados y dependen de un sólo valor de comparación, en este caso de un registro llamado CMPR1. Por ejemplo el PWM3 y PWM4 trabajan con su fase dependiente del registro CMPR2, en la siguiente figura hay tres bloques llamados "Full Compare 1,2 y 3", estos sería los tres comparadores y donde el periodo es el mismo que se programó en el Timer 1, es decir, el periodo de las 6 llaves de PWM dependen del registro de periodo T1PR y del modo de conteo.
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
18
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
EL ACTRA
Así como el GPTCON para el caso del pin T1PWM, en el caso de los 6 PWMs se cuenta con el registro ACTRA, en este registro se programa la dirección del flanco, sí por la lógica se requiera que el PWM dispare en flanco positivo o negativo.Por ejemplo cuando el comparador CMPR1 coincide con el valor del contador T1CNT, entonces los pines PWM1 y PWM2 pueden disparar de 0v a 3.3v, llamado activo arriba, ó pueden disparar flanco abajo de 3.3v a 0v, llamado activo abajo. También puede servir para bloquear las señales de salida, para casos de emergencia, forzando a los IGBTs en un estado continuo de 0v ó 3.3v.Los DSPs no son capaces de manejar las puertas de los chips de potencia, los IGBTs por ejemplo trabajan con tensiones de +-5v hasta +-15v, por lo que estos dispositivos deben contar con un predriver. Algunos predrivers son disparados por flancos positivos para las llaves altas Q1, Q3 y Q5, y flancos negativos para las llaves bajas, otros son iguales etc, esto depende del predriver y hay que prestar atención al manual datasheet del chip.
EL COMCONA
El Registro COMCONA maneja la habilitación de las comparaciones, el momento de recarga de los CMPRs y ACTRA, el tripeo en caso de fallas y el poner los pines en alta impedancia.Hay que poner atención de si se está trabajando con el sistema moderno donde el INDCOE ó EXTCONA[0]=1, si este bit es uno, entonces se trabaja en el sistema moderno, donde cada pareja de llaves PWM son tripeadas o puestas en alta impedancia, y no como en el sistema antiguo donde el bit 9 FCMPOE ponía a todas las 6 llaves en alta impedancia.Por ejemplo si EXTCONA[0]=1 (sistema moderno), si ocurre un percance y la línea de emergencia conectada al pin GPIOA13/C1TRIP cae a 0v, y además se habilitó el tripeo con el bit 0 de COMCONA que es el habilitador de C1TRIPE, entonces esta acción forzara a los PWMs 1 y 2 que se pongan en alta impedancia y que el bit 5 de COMCONA que es el maneja la alta impedancia de los pines FCMP1OE se caiga a 0 indicando que están en alta impedancia.NOTA IMPORTANTE.- Los CxTRIPE son pines muy sensibles, que incluso con el ruido de los chips se dispara casi solo, por lo que si no se va a conectar un driver que obligue al pin a estar a 3.3v, se recomienda entonces para el caso de laboratorios o desarrollos que permanezcan deshabilitados hasta que se hagan pruebas con los drivers conectados a los sistemas de emergencia.Recordar que para que el programa funcione bien, primero hay que habilitar el sistema moderno con el INDCOE y luego deshabilitar el CxTRIP.
4.2. CIRCUITO DE CONEXIÓN
PWM SIMPLE
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
19
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
PWM DOBLE
4.3. PROGRAMA COMPILADO SIN ERRORES
// PWM SIMPLE:
#include "DSP281x_Device.h"#include "DSP281x_Examples.h"#include "lab5.h"long int i,k,z;
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
20
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
unsigned int sc;
void ini_eva_timer1(void);void ini_pwm_timer2(void);interrupt void eva_timerT1PER_isr(void);void main(void) {
sc=0;
DINT;DRTM;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable(); EALLOW; PieVectTable.T1PINT = &eva_timerT1PER_isr;
GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 0; GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 = 0;
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 1; GpioMuxRegs.GPAMUX.bit.T2PWM_GPIOA7 = 1;
GpioMuxRegs.GPADIR.bit.GPIOA1 = 1; GpioMuxRegs.GPADIR.bit.GPIOA2 = 1;
EDIS;PieCtrlRegs.PIEIER2.all = M_INT4 | M_INT5;IER = IER | M_INT2;i=0;ini_eva_timer1();ini_pwm_timer2();EINT;ERTM;}
void ini_eva_timer1(void){ EvaRegs.T1PR = 0xFFFF; // 10Khz //EvaRegs.T1CMPR = 0x03A9; EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.bit.T1PINT = 1; EvaRegs.T1CNT = 0x0000; EvaRegs.T1CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T1CON.all = 0x9742; EvaRegs.GPTCONA.bit.T1TOADC = 2; // interrupt del T1PER EvaRegs.GPTCONA.bit.T1PIN =2;}
void ini_pwm_timer2(void){ EvaRegs.T2PR = 0xEFFF; // 10Khz EvaRegs.T2CMPR = 0xAFFF; //EvaRegs.EVAIMRA.bit.T1PINT = 1; //EvaRegs.EVAIFRA.bit.T1PINT = 1; EvaRegs.T2CNT = 0x0000; EvaRegs.T2CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T2CON.all = 0x9742; EvaRegs.EXTCONA.all = 0x0001; EvaRegs.GPTCONA.all = 0x007A; //EvaRegs.GPTCONA.bit.T1TOADC = 2; // interrupt del T1PER //EvaRegs.GPTCONA.bit.T2PIN = 2;
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
21
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
//EvaRegs.GPTCONA.bit.T1PIN =2;}
interrupt void eva_timerT1PER_isr(void){/*i++;if (i<100) {
GpioDataRegs.GPADAT.bit.GPIOA1=1;GpioDataRegs.GPADAT.bit.GPIOA2=1;
}else{
GpioDataRegs.GPADAT.bit.GPIOA1=0;GpioDataRegs.GPADAT.bit.GPIOA2=0;
}if (i>200) i=0;*/
sc=sc+200;
GpioDataRegs.GPATOGGLE.bit.GPIOA1 = 1;GpioDataRegs.GPATOGGLE.bit.GPIOA2 = 1;
EvaRegs.T2CMPR = sc;
EvaRegs.EVAIMRA.bit.T1PINT = 1; EvaRegs.EVAIFRA.all = BIT7; PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;}
// PWM DOBLE:
#include "DSP281x_Device.h"#include "DSP281x_Examples.h"#include "lab5.h"long int i,k,z;
unsigned int sc,ResultADC0,ref,e;float kp;
void ini_eva_timer1(void);void ini_pwm_timer2(void);void ini_adc(void);
interrupt void eva_timerT2PER_isr(void);
void main(void) {
ResultADC0=0;sc=0;ref=2048;kp=100;
DINT;DRTM;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable(); EALLOW; PieVectTable.T2PINT = &eva_timerT2PER_isr;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 1; GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 1; GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 = 1;
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
22
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3 = 1; GpioMuxRegs.GPAMUX.bit.PWM5_GPIOA4 = 1; GpioMuxRegs.GPAMUX.bit.PWM6_GPIOA5 = 1;
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 0; GpioMuxRegs.GPAMUX.bit.T2PWM_GPIOA7 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA6 = 1; GpioMuxRegs.GPADIR.bit.GPIOA7 = 1;
EDIS;//PieCtrlRegs.PIEIER2.all = M_INT4 | M_INT5;PieCtrlRegs.PIEIER3.all = M_INT1;IER = IER | M_INT3;i=0;ini_eva_timer1();ini_pwm_timer2();//ini_adc();EINT;ERTM;}void ini_eva_timer1(void){ EvaRegs.T1PR = 0xFFFF; // 10Khz //EvaRegs.T1CMPR = 0x03A9; EvaRegs.CMPR1 = 0x8080; EvaRegs.CMPR2 = 0x0880; EvaRegs.CMPR3 = 0x0080;
//EvaRegs.EVAIMRA.bit.T1PINT = 1; //EvaRegs.EVAIFRA.bit.T1PINT = 1; EvaRegs.T1CNT = 0x0000; EvaRegs.T1CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T1CON.all = 0x9742;
EvaRegs.EXTCONA.all = 0x0000; EvaRegs.COMCONA.bit.CENABLE = 1; EvaRegs.COMCONA.bit.CLD = 2; EvaRegs.COMCONA.bit.SVENABLE = 0; EvaRegs.COMCONA.bit.ACTRLD = 2; EvaRegs.COMCONA.bit.FCOMPOE = 1; EvaRegs.COMCONA.bit.FCMP1OE = 1; EvaRegs.COMCONA.bit.FCMP2OE = 1; EvaRegs.COMCONA.bit.FCMP3OE = 1;
EvaRegs.ACTRA.bit.CMP1ACT = 1; EvaRegs.ACTRA.bit.CMP2ACT = 2; EvaRegs.ACTRA.bit.CMP3ACT = 1; EvaRegs.ACTRA.bit.CMP4ACT = 1; EvaRegs.ACTRA.bit.CMP5ACT = 1; EvaRegs.ACTRA.bit.CMP6ACT = 1;
EvaRegs.DBTCONA.bit.DBT = 0xF; EvaRegs.DBTCONA.bit.EDBT1 = 1; EvaRegs.DBTCONA.bit.EDBT2 = 1; EvaRegs.DBTCONA.bit.EDBT3 = 1; EvaRegs.DBTCONA.bit.DBTPS = 5;
//EvaRegs.GPTCONA.bit.T1TOADC = 2; // interrupt del T1PER //EvaRegs.GPTCONA.bit.T1PIN =2;}
void ini_pwm_timer2(void){ EvaRegs.T2PR = 0xFFFF; // 10Khz EvaRegs.EVAIMRB.bit.T2PINT = 1; EvaRegs.EVAIFRB.bit.T2PINT = 1;
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
23
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
EvaRegs.T2CNT = 0x0000; EvaRegs.T2CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T2CON.all = 0x9742;}void ini_adc(void){
// Specific ADC setup for this example:
AdcRegs.ADCTRL1.bit.RESET = 1; asm(" NOP ");
asm(" NOP ");
AdcRegs.ADCTRL1.bit.ACQ_PS = 15; AdcRegs.ADCTRL3.bit.ADCCLKPS = 1; AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; AdcRegs.ADCTRL3.bit.ADCEXTREF = 0; DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL3.bit.ADCPWDN = 1;
DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL1.bit.RESET = 0; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //AdcRegs.ADCCHSELSEQ1.all = 0x0128; //AdcRegs.ADCCHSELSEQ2.all = 0xABCD; //AdcRegs.ADCCHSELSEQ3.all = 0x9572; //AdcRegs.ADCCHSELSEQ4.all = 0x4444; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 1; AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;}interrupt void eva_timerT2PER_isr(void){
GpioDataRegs.GPATOGGLE.bit.GPIOA6 = 1;GpioDataRegs.GPATOGGLE.bit.GPIOA7 = 1;
ResultADC0=ResultADC0+10;if (ResultADC0>2000) {
ResultADC0=0;}e=ref-ResultADC0;sc=e*kp;EvaRegs.CMPR1 = sc;EvaRegs.CMPR2 = sc;EvaRegs.CMPR3 = sc;
EvaRegs.EVAIMRB.bit.T2PINT = 1; EvaRegs.EVAIFRB.all = BIT0; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;}
4.4. PLAN DE EJECUCIÓN
1. Sin ningún tipo de alimentación en los circuitos, realizar las conexiones para cada caso (PWM simple y doble) según lo mostrado en los diagramas de conexión.
2. Alimentar el DSP y conectar a la computadora.3. Verificar la instalación del cable USB-Serial y el número de puerto COM a utilizar.4. Abrir el ColcaCode y seleccionar el número de puerto COM del cable USB-Serial y luego
conectar con el DSP.
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
24
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
5. Buscar y ejecutar el programa respectivo a grabar en el DSP.6. Alimentar los circuitos adicionales al DSP como la tarjeta de Leds y la tarjeta de Potenció-
metros.7. Verificar el correcto funcionamiento del programa que se mostraran mediante el parpadeo de
los leds.
5. PROBLEMA 5: ADC_ MUESTREO _PWM SIMPLE Y DOBLE
5.1. BASE TEÓRICA
Utilizaremos la teoría de los problemas anteriores (1, 2, 3, 4) porque este problema abarca los temas que ya se trataron en dichos problemas.
5.2. CIRCUITO DE CONEXIÓN
5.3. PROGRAMAS COMPILADO SIN ERRORES
#include "DSP281x_Device.h"#include "DSP281x_Examples.h"long int i,k,z;unsigned int sc,ResultADC0,ref,e;float kp;
void ini_eva_timer1(void);void ini_pwm_timer2(void);void ini_adc(void);interrupt void eva_timerT2PER_isr(void);
void main(void) {ResultADC0=0;sc=0;ref=2048;kp=100;DINT;DRTM;InitSysCtrl();InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable(); EALLOW; PieVectTable.T2PINT = &eva_timerT2PER_isr;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 1; GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 1; GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 = 1; GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3 = 1; GpioMuxRegs.GPAMUX.bit.PWM5_GPIOA4 = 1; GpioMuxRegs.GPAMUX.bit.PWM6_GPIOA5 = 1;
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 1;//PWM DE GPTIMER1 GpioMuxRegs.GPAMUX.bit.T2PWM_GPIOA7 = 0; GpioMuxRegs.GPBMUX.all=0x0000;//todas las patas puerto B son digitales
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
25
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
GpioMuxRegs.GPBDIR.all=0xFFFF;//PORTB pines son salidas GpioMuxRegs.GPADIR.bit.GPIOA7 = 1;
EDIS;
PieCtrlRegs.PIEIER3.all = M_INT1;IER = IER | M_INT3;i=0;ini_eva_timer1();ini_pwm_timer2();ini_adc();EINT;ERTM;while(1){};}
void ini_eva_timer1(void){ EvaRegs.T1PR = 0xFFFF; // EvaRegs.T1CMPR = 0x4852; EvaRegs.CMPR1 = 0x8080; EvaRegs.CMPR2 = 0x0880; EvaRegs.CMPR3 = 0x0080;
EvaRegs.T1CNT = 0x0000; EvaRegs.T1CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T1CON.all = 0x9742; EvaRegs.EXTCONA.all = 0x0000;//MODO DE SALIDAS DE COMPARACION INDEPENDIENTES EvaRegs.COMCONA.bit.CENABLE = 1; EvaRegs.COMCONA.bit.CLD = 2; EvaRegs.COMCONA.bit.SVENABLE = 0; EvaRegs.COMCONA.bit.ACTRLD = 2; EvaRegs.COMCONA.bit.FCOMPOE = 1; EvaRegs.COMCONA.bit.FCMP1OE = 1; EvaRegs.COMCONA.bit.FCMP2OE = 1; EvaRegs.COMCONA.bit.FCMP3OE = 1;
EvaRegs.ACTRA.bit.CMP1ACT = 1; EvaRegs.ACTRA.bit.CMP2ACT = 2; EvaRegs.ACTRA.bit.CMP3ACT = 1; EvaRegs.ACTRA.bit.CMP4ACT = 1; EvaRegs.ACTRA.bit.CMP5ACT = 1; EvaRegs.ACTRA.bit.CMP6ACT = 1;
EvaRegs.DBTCONA.bit.DBT = 0xF; EvaRegs.DBTCONA.bit.EDBT1 = 1; EvaRegs.DBTCONA.bit.EDBT2 = 1; EvaRegs.DBTCONA.bit.EDBT3 = 1; EvaRegs.DBTCONA.bit.DBTPS = 5;
EvaRegs.GPTCONA.bit.T1TOADC = 0; EvaRegs.GPTCONA.bit.T1PIN =2; EvaRegs.GPTCONA.bit.T1CMPOE =1; EvaRegs.GPTCONA.bit.TCMPOE =1;}
void ini_pwm_timer2(void){ EvaRegs.T2PR = 0xFFFF; EvaRegs.EVAIMRB.bit.T2PINT = 1; EvaRegs.EVAIFRB.bit.T2PINT = 1; EvaRegs.T2CNT = 0x0000; EvaRegs.T2CON.all = 0x9702; //(75MHz/4) asm(" nop"); asm(" nop"); EvaRegs.T2CON.all = 0x9742; EvaRegs.GPTCONA.bit.T2TOADC = 0;
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
26
INFORME No 1
Procesadores digitales de señales
Implementación en el DSP
}
void ini_adc(void){
AdcRegs.ADCTRL1.bit.RESET = 1; asm(" NOP ");asm(" NOP ");
AdcRegs.ADCTRL1.bit.ACQ_PS = 15; AdcRegs.ADCTRL3.bit.ADCCLKPS = 1; AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; AdcRegs.ADCTRL3.bit.ADCEXTREF = 0; DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL3.bit.ADCPWDN = 1;
DSP28x_usDelay(((((long double) 5000L * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); AdcRegs.ADCTRL1.bit.RESET = 0; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0; AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // MODO CONTINUO AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; //trigger por software}
interrupt void eva_timerT2PER_isr(void){
GpioDataRegs.GPATOGGLE.bit.GPIOA7 = 1;GpioDataRegs.GPBDAT.all=AdcRegs.ADCRESULT0>>4;
ResultADC0=ResultADC0+10;if (ResultADC0>2000) {
ResultADC0=0;}
e=ref-ResultADC0;
sc=e*kp;EvaRegs.CMPR1 = sc;EvaRegs.CMPR2 = sc;EvaRegs.CMPR3 = sc;
EvaRegs.EVAIMRB.bit.T2PINT = 1; EvaRegs.EVAIFRB.bit.T2PINT = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;}
5.4. PLAN DE EJECUCIÓN
8. Sin ningún tipo de alimentación en los circuitos, realizar las conexiones para cada caso (PWM simple y doble) según lo mostrado en los diagramas de conexión.
9. Alimentar el DSP y conectar a la computadora.10. Verificar la instalación del cable USB-Serial y el número de puerto COM a utilizar.11. Abrir el ColcaCode y seleccionar el número de puerto COM del cable USB-Serial y luego
conectar con el DSP.12. Buscar y ejecutar el programa respectivo a grabar en el DSP.13. Alimentar los circuitos adicionales al DSP como la tarjeta de Leds y la tarjeta de Potenció-
metros.14. Verificar el correcto funcionamiento del programa mediante el parpadeo de leds.
UNIVERSIDAD NACIONAL DE INGENIERÍA | FACULTAD DE INGENIERÍA MECÁNICA
27