Guia Lab 2812
Guia Lab 2812
Guia Lab 2812
SYLLABUS
OBJETIVO:
Preparar al estudiante en las nuevas herramientas de diseo y programacin en lenguaje C/C++, con
aplicaciones de laboratorio orientado a la implementacin de Controladores digitales y Aplicaciones
en procesadores digitales DSP, utilizando tcnicas de procesamiento, clculo matemtico y la suite de
programacin code composer.
RESUMEN:
El curso de laboratorio realiza prcticas sobre los algoritmos de control y el procesamiento digital
llevado a la implementacin por rutinas en lenguaje C/C++. Se hace una introduccin a los
conceptos bsicos de la programacin. Organizacin de un programa. Variables y constantes.
Expresiones aritmticas y lgicas. Sentencias e iteracin. Estructuras. Programacin orientada a
objetos. Los problemas que se resuelven en los laboratorios estn orientados a la solucin de clculos
matemticos para ingeniera, como clculos en procesamiento digital, funciones de transferencia
discreta, transformadas Laplace->Z, series matemticas y secuencias. Creacin de manejadores de
procesos, memorias y principalmente el manejo de perifricos.
CONTENIDO
INTRODUCCIN 3
QU ES EL PROCESAMIENTO DIGITAL DE SEALES (DIGITAL SIGNAL PROCESSING DSP)? 3
EL PROCESADOR DIGITAL DE SEALES 3
DE ANLOGO A DIGITAL 4
QU HACE A UN DSP UN DSP? 5
CUALIDADES DE LOS PROCESADORES DIGITALES DSPS 7
APLICACIONES DEL DSP 9
UNIDAD 4: LABORATORIOS 25
Los DSPs comienzan a aparecer en los aos 70s, como solucin a la necesidad de resolver clculos
matemticos complejos, el procesamiento de seales se convierte en procesamiento digital:
SEAL es definida como cualquier cantidad fsica que vara en el tiempo y que lleva informacin,
generalmente acerca del estado o comportamiento de un sistema, como por ejemplo: radar, msica,
voz, sonar, etc.
PROCESAR UNA SEAL es la operacin o transformacin sobre la seal.
PROCESAMIENTO DIGITAL DE SEAL (DSP) es una operacin o transformacin de una seal
en un hardware digital segn reglas bien definidas las cuales son introducidas al hardware a travs de
un software especfico, con el propsito de filtrar, mejorar, amplificar, codificar, comprimir o
analizar una seal.
En estricto rigor, digital signal processing se refiere al procesamiento electrnico de seales tales
como sonido, radio y microondas usando tcnicas matemticas para realizar transformaciones o
extraer informacin. En la prctica, las caractersticas que hacen a los DSP's tan buenos en el manejo
de seales los hacen adecuados para muchos otros propsitos, tales como procesamiento de grficos
de alta calidad y simulaciones en ingeniera.
De Anlogo a Digital
Las aplicaciones clsicas de los DSP's trabajan seales del mundo real, tales como sonido y ondas de
radio que se originan en forma anloga. Como se sabe, una seal anloga es continua en el tiempo;
cambia suavemente desde un estado a otro. Los computadores digitales, por otro lado, manejan la
informacin discontinuamente, como una serie de nmeros binarios, por lo que se hace necesario
como primera etapa en la mayora de los sistemas basados en DSP's transformar las seales anlogas
en digitales. Esta transformacin la hacen los Convertidores Anlogo Digitales ADC.
Una vez terminada la etapa de conversin anloga digital, los datos son entregados al DSP el cual
est ahora en condiciones de procesarla. Eventualmente el DSP deber devolver los datos ya
procesados para lo cual es necesaria una etapa final que transforme el formato digital a anlogo. Por
ejemplo, una seal de audio puede ser adquirida (ADC) y filtrada para eliminar en gran medida
ruido, crujidos de esttica, amplificar ciertas frecuencias de inters, eliminar otras, etc. Luego de
esto, la informacin puede ser devuelta a travs de una conversin digital anloga (DAC).
Ejemplos interesantes de aplicaciones de DSP's son:
1. Eliminar el eco en las lneas de comunicaciones.
2. Lograr hacer ms claras imgenes de rganos internos en los equipos de diagnstico mdico.
3. Cifrar conversaciones en telfonos celulares para mantener privacidad.
4. Analizar datos ssmicos para encontrar nuevas reservas de petrleo.
En su ncleo, un DSP es altamente numrico y repetitivo. A la vez que cada dato llega, ste debe ser
multiplicado, sumado y adems de eso transformado de acuerdo a frmulas complejas. Lo que
permite realizar todo ello es la velocidad del dispositivo. Los sistemas basados en DSP's deben
trabajar en tiempo real, capturando y procesando informacin a la vez que ocurre. Los convertidores
anlogo digital deben adquirir la informacin lo suficientemente seguido como para captar todas
las fluctuaciones relevantes de las seales.
Si el ADC es muy lento se perder informacin. El DSP tambin debe trabajar rpido para no perder
informacin que le llega desde el ADC y adems cumplir con el adecuado procesamiento de las
seales. Por ejemplo, un sistema stereo maneja sonidos de hasta 44 KHz, por lo tanto el DSP deber
ser capaz de procesar alrededor del centenar de millones de operaciones por segundo. Otras seales,
tales como transmisiones por satlite son del orden de los Gigahertz por lo que requieren un
procesamiento de mayor velocidad.
Los DSPs tpicos son caracterizados generalmente por las siguientes cualidades en su Arquitectura
por:
1. Una unidad funcional rpida que puede multiplicar y acumular en un ciclo de Instruccin, es la
unidad MAC. Un ciclo de instruccin puede durar generalmente 1 2 ciclos de reloj. Disponibles en
DSP's de punto fijo y flotante.
2. Varias unidades funcionales que realizan operaciones en paralelo, incluyendo accesos a memoria y
clculo de direcciones. Las unidades poseen tpicamente una unidad principal (ALU) junto con dos o
ms unidades de generacin de direcciones. Estas unidades funcionales poseen su propio conjunto de
registros y muchas instrucciones se realizan en un solo ciclo de instruccin.
3. Varias unidades de memoria onchip (generalmente 2 3) usadas para almacenar instrucciones,
datos o tablas. Cada unidad de memoria puede ser accesada una vez en cada ciclo de instruccin.
4. Varios buses para incrementar las tasas de transferencia hacia y desde memoria y evitar conflictos
de direcciones.
5. Soporte para tipos especiales de direccionamiento, especialmente modulo y bitreverse, requerido
en el clculo de la FFT. Direccionamiento mdulo es muy eficiente para la implementacin de
buffers circulares.
6. Soporte para manejo de loop con bajo costo en tiempo y manejo rpido de interrupciones,
especialmente aquellas que se deben a los puertos seriales.
7.- Unidades de desplazamiento de bits en barril para el cambio en formatos numricos Q, con la
finalidad de cambios de base y evitar overflows por multiplicaciones.
8.- Unidad en Pipeline y microinstrucciones atmicas para evitar errores Hazzards de pipeline.
9.- Registros Auxiliares de propsito general, en procesadores orientados a lenguajes de alto nivel
como el C/C++, cuentan con grupos de registros que incluso pueden ser ayudados por unidades
aritmticas ARAUs para manejar punteros y direcciones.
10.- Relojera con timers de alta velocidad para la generacin de tiempos de muestreo y seales de
sincronismo, as como para la generacin de interrupciones.
FIGURA 3 ARQUITECTURA DEL PROCESADOR DIGITAL TMS320F2812
Aplicaciones del DSP
Propsitos Generales
Filtros digitales
Convolucin
Correlacin
Transformadas Fourier
Filtros adaptivos
Generacin de ondas
Control
Control de discos
Control de servomecanismos
Control de robots
Control de Imp. Lser
Control de motores elect.
Telecomunicaciones
Repetidoras
Celulares
Video conferencia
PBXs digitales
Ecualizadores
Modems
Multiplexado de canales
Switches de red
FAX
Automotriz
Motores MCI
Frenos ABS
Diagnsticos
Air bags
Control de crucero
Timn elctrico
Suspensin activa
Supresin de ruidos
Control de vlvulas VTI
Consumo
Detectores de radar
Cmaras digitales
Telfonos
Juegos educacionales
Multimedia
Audio/tv digital
Juegos Arcade
Lnea blanca
Sintetizadores
Industrial
Robtica
Control numrico
Seguridad
Medidores electrnicos
Instrumentacin
Grficos
Reconocimiento de imgenes
Mejoramiento de imgenes
Mapeo digital scanners
Compresin de datos
Visin de robots
Militar
Radar
Sonar
Procesamiento de imgenes
Navegacin
Misiles guiados
Seguridad de
comunicaciones
UNIDAD 2: INTRODUCCION A LA SUITE DE PROGRAMACION CODE
COMPOSER
Introduction al Code Composer Studio IDE
El Code Composer es la suite de programacin para el desarrollo de aplicaciones de la Texas
Instruments, es una interfaz de software avanzado que ayuda al programador a realizar proyectos en
lenguajes C++, Ansi C y assembler, as como el testeo, la depuracin y visualizacin de resultados.
El Flujo de la Programacin
La Figura 5 muestra el flujo de diseo del software dentro del Code Composer. Los pasos a seguir
son: la edicin, la compilacin y el enlace link, los cuales son combinados en el constructor
build, luego se realiza la depuracin debug. El flujo de programacin es muy similar a otras
suites como las del Visual Studio o .NET de Microsoft.
El compilador tiene por objeto entender nuestros programas escritos en lenguajes de alto nivel como
el C++ o ANSI C, para luego generar un archivo de salida de tipo ensamblador. La salida del
compilador son archis *.ASM.
El ensamblador tiene por objeto tomar los archivos asm y convertirlos en cdigo de instrucciones, el
assembler es un lenguaje ms bsico constituido por mnemnicos y direcciones relativas,
bsicamente son instrucciones de procesador expresadas en lenguaje entendible. La salida del
ensamblador son archivos de tipo objetos *.OBJ, es decir un conjunto de instrucciones pero que
contienen direcciones relativas y no absolutas, debido a que an no se le ha entregado al CC el mapa
de memoria del procesador adonde se va a ejecutar el programa, ese paso se le deja al enlace link o
linkeador
El linkeador requiere de archivos objetos .OBJ y de archivos de mapas de memoria *.CMD, los
cuales son combinados para poder generar un archivo ejecutable *.OUT el cual puede ser cargado
en el procesador, sin el linkeador las instrucciones comenzaran en la direccin de memoria cero y
toda la informacin estara en un solo bloque de memoria, sin embargo los mapas de memoria son
complejos y dependen del tipo de procesador y de las expansiones de memoria que se preparan en los
circuitos impresos de los mainboards.
Finalmente cuando el programa ya ha sido procesado y se cuenta con un archivo ejecutable tipo
*.OUT, dicho programa puede ser cargado en el COLCA CODE que es la herramienta de
emulacin de este sistema. El Code Composer tambin puede servir como emulador cuando se tiene
una tarjeta de la Texas Instruments, las tarjetas Varitek 19 pueden ser conectadas al Code Composer
si se cuenta con el Emulator Pod JTAG de empresas Third Party como Spectrum Digital. Sin
embargo la facilidad de cdigo abierto del COLCA CODE para poder mejorarse constantemente,
aumentar facilidades, aumentar ventanas, aumentar cdigo y recibir asesoramiento cercano de parte
de VARITEK, as como la economa, hace que el emulador COLCA CODE sea el ms recomendado.
Existen diversos tipos de tarjetas en el mercado mundial, las tarjetas DSK tiene solamente el
procesador y algunos puertos de pines, los cuales son los ms econmicos. Las tarjetas EVM tienen
por objeto la evaluacin del chip y de algunos perifricos externos como puertos de comunicaciones
o manejadores de perifricos de potencia, son las tarjetas ms costosas.
FIGURA 5FLUJO DE PROGRAMACIN DEL CODE COMPOSER
El sistema de desarrollo est basado en una tarjeta con procesador digital TMS320F2812 de la Texas
Instruments, este es un procesador de alta calidad que mantiene el liderazgo en el mercado en el rea
de procesamiento digital y control digital. Se le puede encontrar en el rea de control industrial,
instrumentacin de avinica, discos duros de prestigiosas marcas como Quantum, EC2 e IBM, en
sistemas de control avanzado, equipos industriales, lnea blanca, robtica y equipos de oficina.
Caractersticas
Memoria interna
- Flash Devices: 128K x 16 Flash (Cuatro Sectores de 8K x 16 y seis de 16K x 16)
- ROM Devices: Up to 128K x 16 ROM
- 1K x 16 OTP ROM memoria programable una sola vez
- L0 and L1: 2 Bloques de 4K x 16 cada uno. Memoria de simple acceso (SARAM)
- H0: 1 Bloque de 8K x 16 SARAM
- M0 and M1: 2 Bloques de 1K x 16 cada uno
1 Mdulo de Conversin Analgico Digital de 16 canales cada uno, total 16ch, hasta 12.5MSPS
Trabajo en modalidad doble o de cascada, a 12 bits, dando un total de 16 canales de conversin analgico
digital, a un tiempo de restablecimiento de 80ns, los convertidores pueden ser usados para adquisicin de
datos, voces, lecturas de sensores analgicos y otros.
Mapa de Memorias
Las memorias de programa y de datos cuentan con una memoria externa de 512KB 256KW, la
asignacin de la memoria externa de programas o de datos es indistinta (rango 0x100000-
0x13FFFF), no hay memoria de I/Os asignada.
En el programa Code Varitek V1.4., se pueden visualizar los rangos de memoria con la opcin:
Ver->Memoria
El puerto serial para la conexin con la consola de la PC es a travs de un cable de conexin normal
DB9 hembra-hembra, en la figura se aprecia el conector F09.
La fuente de poder debe estar en el rango 4.5V 9.0V, debe contar con un bajo nivel de ripple +-3%,
internamente este voltaje es nuevamente filtrado y nivelado a tensiones de +1.9V y 3.3V.
La interface de conexin de pines se compone de 4 JPs de 40 pines cada uno, nombrados J1-J4, los
cuales se encuentran alrededor del DSP. Tambin se tiene un juego de 4 jumpers para la definicin
del estado de carga Boot B0-B3. Uno ms para la definicin del tipo de multiplicacin del PLL, otro
para desconectar la lnea de Reset desde la PC, y dos ms para la habilitacin del chip de puerto
serial EN y SD.
Para la operacin normal debe haber un jumper en Reset, un jumper en MC a 0 (cero), otro jumper
en EN y un jumper en el PLL con valor 1 (uno). El jumper SHDWN no debe ser colocado pues pone
al puerto serial en alta impedancia. Los jumpers en el modo de arranque se explican en el siguiente
acpite, cuando se quiere utilizar el Colca Code se recomienda tener todo los jumpers a 1 (uno),
excepto el jumper B2 que se debe poner a 0 (cero), esto arranca el DSP con un salto a la flash
0x3f7ff6 donde comienza el Colca Code.
Leds
1.- Led de Power PWRON color verde, se enciende con el adaptador conectado
2.- Led de Reset RS color ambar, en el arranque comienza encendido y se apaga en cada reset.
3.- Led de Bandera externa XF, se prende o se apaga por software, se inicia encendido.
Interface Serial
El jumper EN sirve para poner en alta impedancia la circuitera del receptor, es decir que por ms
que lleguen datos al RS232, los datos no se transmiten al DSP. La PC no puede resetear la tarjeta
cuando el jumper esta puesto.
El jumper SHDWN sirve para apagar el mdulo RS232 y la circuitera de transmisin que se
comunica con la PC, los pines se ponen en alta impedancia. Cuando se apaga o se coloca el jumper,
la PC ya no puede resetear la tarjeta, ni tampoco transmitir o recibir datos, entonces los pines TX y
RX de la tarjeta Varitek 19 quedan disponibles para cualquier otra aplicacin.
UNIDAD 4: LABORATORIOS
En este laboratorio se pretende dar una visin general de cmo se genera un proyecto bsico de
lenguaje Ansi C en el Code Composer, para lo cual se van a necesitar una serie de archivos y libreras
expuestas a continuacin.
Para la correcta ejecucin de los proyectos, debe estar instalado el Code Composer y el conjunto de
programas que se instalan con el archivo de encabezados de C/C++ Header Files and Peripheral
Examples, el archivo tiene el nombre de instalacin SPRC097.ZIP
Paso 1
Crear un Proyecto con el nombre de LAB1:
Paso 2
Agregar al proyecto los siguientes programas con la opcin Project -> Add Files con el buscador en
la ruta:
C:\tidcs\c28\dsp281x\v111\DSP281x_common\source
1. DSP281x_SysCtrl.c
2. DSP281x_PieVect.c
3. DSP281x_PieCtrl.c
4. DSP281x_DefaultIsr.c
C:\tidcs\c28\dsp281x\v111\DSP281x_headers\source
1. DSP281x_GlobalVariableDefs.c
Agregar los siguientes Mapas de Memoria (copiar en ruta del proyecto desde los ejemplos):
1. DSP281x_Headers_nonBIOS.cmd
2. F2812_VARITEK19_RAM_Ink.cmd
Y la siguiente Librera:
C:\ti\c2000\cgtools\lib
1. RTS2800_ml.lib
Paso 3
Crear una nueva hoja con New File:
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"int x = 25;
void main(void)
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EINT;
ERTM;
x=x+42;
}
Guardar el archivo como Lab1.c, verificar que el Tipo este seleccionado como .c:
Agregar el archivo creado al proyecto:
Paso 4
Verificar que la ruta de archivos quede como:
Project -> Build Options-> Compiler -> Preprocesor -> Include Search Path
C:\tidcs\c28\dsp281x\v111\DSP281x_headers\include;C:\tidcs\c28\dsp281x\v111\DSP281x_commo
n\include
Dentro de Build Options seleccionar la pestaa Linker y dar un valor de 0X400 al Stacker.
Por defecto este tiene un valor de 0x400 pero si no se graba el valor en la opcin que inicialmente
esta en blanco, entonces al enlazar se presentar una alerta indicando que no hay un valor prefijado y
se optar por 0X400, sin embargo el programador puede aumentar la capacidad del apilador si es que
se est trabajando con funciones grandes con muchas variables:
Paso 5
Ahora el programa est listo para ser compilado, los 4 conos de proceso tienen por objeto de
izquierda a derecha:
1. Compilar
2. Linkear
3. Ejecutar ambos pasos de Compilar y Linkear todos los archivos
4. Para los anteriores
Antes de hacer la compilacin quitar uno de los ; de alguna de las lneas de cdigo para probar la
sintaxis del compilador:
Al hacer doble click sobre el mensaje donde aparece el nmero de lnea line 1, el cursor se
mostrar en la hoja del Lab1.c en la lnea del error o en la siguiente lnea.
Paso 6
Subsanar los errores de sintaxis del programa y dar click al cono Incremental Build que es el
linkeador:
Paso 7
El programa ya est listo para ser cargado en el DSP, el enlazador debe haber creado el archivo
LAB1.OUT, el cual se puede ubicar dentro de la subcarpeta DEBUG.
C:\CursoF2812_2005\Proyectos\LAB1\Debug
Ejecutar el programa COLCACODE desde Windows, conectar el power y el cable serial a la tarjeta
de desarrollo VARITEK 20, verificar la disposicin de los pines. Estando encendida la tarjeta con sus
tres leds rojo, ambar y verde iluminados, dar la opcin CONECTAR en el COLCACODE.
En el lado superior izquierdo dar la opcin Archivo -> Cargar Programa
El cargador llena la memoria del DSP con el programa compilado y est listo para ser ejecutado
desde CORRER.
Se puede observar una ventana de carga COFF la cual indica las secciones de memoria cargadas,
junto con el nombre de la seccin, las direcciones de inicio y el tamao de carga de cada seccin. La
direccin de carga se indica tanto en la ventana COFF como al lado del botn de CORRER, en este
caso muestra la direccin 003f823b.
Si se presiona el botn de arranque entonces el DSP ejecutar las sentencias, empezando desde la
funcin de arranque C_INT0, para luego pasar a ejecutar la funcin principal MAIN. Al trmino de
la ejecucin el DSP se queda en una rutina de espera infinita denominada STOP.
LABORATORIO 2: PROGRAMA DE MONITOREO
Los sistemas de emulacin para los dispositivos de desarrollo y tarjetas controladoras, muchas veces
requieren del uso de un medio de comunicacin en lnea, conocidos como comunicacin en tiempo
real. Para poder visualizar variables mientras que el DSP est corriendo, ver memorias o realizar una
grfica, se hace uso de un programa Monitor, que se conecta de la PC a la tarjeta mediante el Puerto
serial o algn otro medio, como el Puerto paralelo o el USB.
Para el presente laboratorio, se har uso del Puerto serial del DSP, para que se comunique en tiempo
real con el programa Colca Code.
Construya un proyecto similar al del Laboratorio uno, con nombre de proyecto Lab2, incluya todos
los programas *.c, *.h o libreras utilizadas anteriormente con referencia al laboratorio dos.
La forma ms fcil de crear un proyecto nuevo es copiando una carpeta bsica con un proyecto que
tiene los programas bsicos en *.c, luego de copiar la carpeta los pasos a seguir son:
Luego de los pasos anteriores, llene el programa lab2.c con las siguientes lneas:
La funcin IteraSerial()
La funcin IteraSerial() hace referencia a un programa monitor.c que debe ser incluido en el
proyecto, asegrese de que el programa monitor.c se encuentra en la carpeta de trabajo del proyecto
de laboratorio dos.
Al terminar de compilar y construir el proyecto, cargue el programa en el Colca Code. Dar click a
CORRER y probar la comunicacin con la PC mientras corre el DSP.
Ver-> memoria
Los datos que debe llenar corresponden a la direccin de inicio de la memoria que desea visualizar.
Puede llenar un ttulo para la ventana, cambiar el formato de los nmeros que se van a presentar,
debe coincidir con las datos que se desean observar. El formato Q es para nmeros enteros
solamente. La pgina es indiferente para el caso del DSP TMS320F2812.
El Programa MONITOR.C
#include "stdlib.h"
#include "DSP281x_Device.h"
void scia_loopback_init(void);
void scia_fifo_init(void);
void scia_xmit(int a);
interrupt void scia_rx_isr(void);
interrupt void scia_tx_isr(void);
const float mipi=3.14141515;
Uint16 LoopCount;
Uint16 SendChar;
Uint16 ReceivedChar;
void AddrCant(void);
Uint32 Direccion=0;
int16 *memoria=0;
Uint32 Cantidad=0;
int caso=0;
Uint32 j=0;
int retornar=0;
void IniciarSerial(void);
void IteraSerial(void);
void EscribirDSP(void);
void LeerDSP(void);
Uint16 Test=0;
void IniciarSerial(void)
{
scia_fifo_init(); // Inicializa el FIFO del SCI
scia_loopback_init(); // Inicializa el lazo de iteracin
SendChar = 0;
}
void IteraSerial(void)
{
while(retornar!=1)
{
while(SciaRegs.SCIFFRX.bit.RXFIFST ==0) { }; //
ReceivedChar = SciaRegs.SCIRXBUF.all;
SendChar=ReceivedChar;
scia_xmit(SendChar);
caso=ReceivedChar;
switch (caso) {
case 0:
LeerDSP();
break;
case 1:
LeerDSP();
break;
case 2:
LeerDSP();
break;
case 3:
EscribirDSP();
break;
case 4:
EscribirDSP();
break;
case 5:
EscribirDSP();
break;
case 6:
retornar=1;
break;
};
}
}
void LeerDSP(void)
{
AddrCant();
for (j=0;j<Cantidad+1;j++)
{
memoria=0;
SendChar=memoria[Direccion];
Direccion++;
do{
while(SciaRegs.SCIFFRX.bit.RXFIFST ==0) { }
ReceivedChar = SciaRegs.SCIRXBUF.all;
} while (ReceivedChar!=0x40);
scia_xmit(SendChar>>8);
do{
while(SciaRegs.SCIFFRX.bit.RXFIFST ==0) { }
ReceivedChar = SciaRegs.SCIRXBUF.all;
} while (ReceivedChar!=0x40);
scia_xmit(SendChar);
};
}
void EscribirDSP(void)
{
AddrCant();
for (j=0;j<Cantidad+1;j++)
{
while(SciaRegs.SCIFFRX.bit.RXFIFST ==0) { }
ReceivedChar = SciaRegs.SCIRXBUF.all;
scia_xmit(ReceivedChar);
SendChar = ReceivedChar<<8;
while(SciaRegs.SCIFFRX.bit.RXFIFST ==0) { }
ReceivedChar = SciaRegs.SCIRXBUF.all;
scia_xmit(ReceivedChar);
SendChar = SendChar+ ReceivedChar;
memoria[Direccion]=SendChar;
Direccion++;
};
}
void scia_loopback_init()
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// modo asncrono, protocolo idle-line lnea en espera
SciaRegs.SCICTL1.all =0x0003; // Habilitar TX, RX, SCICLK interno,
// Deshabilitar RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.all =0x0003;
SciaRegs.SCICTL2.bit.TXINTENA =1;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
SciaRegs.SCIHBAUD =0x0000;
SciaRegs.SCILBAUD =0x0028; //a 150mhz
SciaRegs.SCICCR.bit.LOOPBKENA =0; // Enable loop back
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
void scia_xmit(int a)
{
SciaRegs.SCITXBUF=a;
}
void scia_fifo_init()
{
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x204f;
SciaRegs.SCIFFCT.all=0x0;
}
void AddrCant(void)
{
int i=0;
Direccion=0;
ReceivedChar=0;
for (i=0;i<4;i++)
{
while(SciaRegs.SCIFFRX.bit.RXFIFST ==0) { } // esperar a XRDY =1 estado listo
ReceivedChar = SciaRegs.SCIRXBUF.all;
scia_xmit(ReceivedChar);
Direccion=(Direccion<<8)+ReceivedChar;
};
for (i=0;i<4;i++)
{
while(SciaRegs.SCIFFRX.bit.RXFIFST ==0) { } // esperar a XRDY =1 estado listo
ReceivedChar = SciaRegs.SCIRXBUF.all;
scia_xmit(ReceivedChar);
Cantidad=(Cantidad<<8)+ReceivedChar;
};
}
LABORATORIO 3: PROGRAMA ENTRADAS Y SALIDAS GPIO
El chip del TMS320F2812 dispone de 49 pines para programarlos como entradas o salidas digitales,
con un nivel de tensin de 3.3v, se requiere tener bastante cuidado cuando se desea hacer una
conexin a algn dispositivo externo como relays, leds o interruptores en general, se deben revisar
las caractersticas de amperaje mximo, as como voltajes mximos de tolerancia, descritos en el
manual del datasheet tms320f2812.pdf.
Los puertos son del tipo CMOS de 3.3V, lo que implica que si las entradas o salidas se van a conectar
a otras tecnologas, se deben tener las previsiones descritas en el manual spra550.pdf sobre
conexiones CMOS-TTL-Bipolar-Mosfet.
Para el presente laboratorio, se har uso de los Puerto de propsito general del DSP, denominados
GPIO, despus de revisar el captulo 4 del manual spru078d.pdf sobre los GPIOS.
Construya un proyecto similar al del Laboratorio uno, con nombre de proyecto Lab3, incluya todos
los programas *.c, *.h o libreras utilizadas anteriormente con referencia al laboratorio dos.
El programa va a utilizar dos variables de conteo i,k, dos variables enteras largas para los retrasos
retardo0 y retardo1.
Se requiere de un pulsador conectado al pin MCLKXA pin 24 del JP4. Se debe conectar un led con
una resistencia de 360 ohmios al pin del PWM1 pin 36 del JP2.
Configuracin de Pines
El programa asegura que los PWMs 1-6 y los pines del puerto de comunicaciones multibuffered son
convertidos a pines de entrada y salida, en realidad esta configuracin aparece por defecto al resetear
el DSP, pero se configura para asegurar el estado de los multiplexores A y F.
El multiplexor F con referencia al pin XF, configura el pin para que trabaje como XF y no como IO.
Inicialmente mediante un bucle FOR y la sentencia GPATOGGLE se alternar el estado del diodo
LED, tambin se alternar el estado de la bandera XF pero mediante dos sentencias en lenguaje
ensamblador, de esta manera se prueba el establecimiento de sentencias en ensamblador mezclado
con lenguaje C clsico.
Terminado el bucle se salta al programa monitor, donde el pin del pulsador conectado al MCLKXA
ser ledo constantemente y su valor se ver reflejado en el led conectado al PWM1.
Al disponer de varios pines para configurar los estados de las entradas y salidas, pruebe el encendido
y apagado de los mismos, puede incluso conectar un pin de salida directamente a la entrada de otro
pin.
Pruebe que los pines siempre pueden ser usados como entrada, an si estos estn trabajando como
salidas.
Cambie los valores de bucle y los retrasos para cambiar los periodos. Analice la salida de XF en un
osciloscopio y compruebe la generacin de un PWM por software.
El Programa Lab3.C sobre GPIOs
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
long int i,k;
long int retardo0=500;
long int retardo1=2;
int boton1=0;
void main(void) {
DINT;
DRTM;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 =0; // Pines de las 6 llaves de PWM1-6
GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 =0;
GpioMuxRegs.GPAMUX.bit.PWM3_GPIOA2 =0;
GpioMuxRegs.GPAMUX.bit.PWM4_GPIOA3 =0;
GpioMuxRegs.GPAMUX.bit.PWM5_GPIOA4 =0;
GpioMuxRegs.GPAMUX.bit.PWM6_GPIOA5 =0;
GpioMuxRegs.GPFMUX.bit.MCLKXA_GPIOF8 =0;
GpioMuxRegs.GPFMUX.bit.MCLKRA_GPIOF9 =0;
GpioMuxRegs.GPFMUX.bit.MFSXA_GPIOF10 = 0;
GpioMuxRegs.GPFMUX.bit.MFSRA_GPIOF11 =0;
GpioMuxRegs.GPFMUX.bit.MDXA_GPIOF12 =0;
GpioMuxRegs.GPFMUX.bit.MDRA_GPIOF13 =0;
GpioMuxRegs.GPFMUX.bit.XF_GPIOF14 = 1;
IteraSerial();
}
Sentencias en monitor.C
Aumentar en el programa monitor.c en la funcin IteraSerial() las lneas siguientes, seguidas al caso
6 del switch, tal como aparece a continuacin:
case 5:
EscribirDSP();
break;
case 6:
retornar=1;
break;
};
boton1=GpioDataRegs.GPFDAT.bit.GPIOF8;
GpioDataRegs.GPADAT.bit.GPIOA0= boton1;
LABORATORIO 4: IMPLEMENTACIN DE UN FILTRO FIR
Introduccin
Los filtros digitales permiten la recuperacin de las seales de modo que se pueda separar la
informacin que proviene de los sensores o grabaciones, de los ruidos o interferencia, haciendo uso
del dominio de la frecuencia. Las propiedades que deben preservar en el diseo de un filtro digital
debe poner nfasis en:
Filtros FIR
Son filtros basados en la respuesta al impulso, el cual presenta como salida al conjunto de
coeficientes necesarios para la construccin de la funcin de transferencia:
N 1
y ( n ) bi x ( n i )
i 0
Donde los bi son los coeficientes y N es el nmero total de coeficientes. Los coeficientes proveen de
la forma del filtro digital y los valores de xi son los datos de entrada captados en muestras anteriores
incluyendo la muestra actual.
Los filtros FIR son no-recursivos, es decir que la salida y depende solamente de la entrada actual y
de las pasadas.
N 1 N 1
H ( z) Y (z)
X (z) bi z i
h(i ) z i
i 0 i 0
Donde h(i) son los coeficientes del impulso unitario y son los coeficientes del filtro FIR.
Para determinar la respuesta en frecuencia de la funcin de transferencia se debe evaluar Z en el
crculo unitario:
Z = eST
Z e j 2fcT
Si se define una frecuencia normalizada como la divisin de la frecuencia actual entre la frecuencia
de muestreo, o lo que es equivalente al producto de fc.T y la llamamos simplemente f.
Z e j 2f
N 1
H (e j 2f ) h( i ) e j 2fi
i o
El valor 0.5 es debido al criterio de Nyquist y por que la frecuencia esta normalizada en por unidad
p.u.
Para un filtro de tipo Pasa Bajo hid puede ser evaluado dando:
Sin( 2f c i )
hid
i
Para que el filtro pueda ser implementado, entonces este debe tener su respuesta al impulso con una
longitud definida, no es posible guardar infinitos datos en memoria, por ello se puede utilizar una
ventana o funcin en la frecuencia, que puede ser multiplicad por cada valor hid de modo que solo
cuente con un rango de valores de i correspondiente a la cantidad de muestras con las que se
cuenta. La ventana es de N puntos. Existen diferentes tipos de ventana, desde una rectangular ideal,
otras como Hamming, Hanning, Blackman, Barlett y otros.
h 2 (i ) hid (i ) w( i )
Tambin se debe tener en cuenta de que el filtro tiene una respuesta igual a cero como respuesta al
impulso para valores de i menores a cero, es decir es causal. Para que el filtro pueda implementarse
entonces se debe hacer un retardo a la derecha en 0.5N 0.5, de modo que el hfinal considere dicho
retardo:
hFinal=h2[i-((N-1)/2)]
Decibelios
Es una medida de relacin de potencia, la cual surge como repuesta a la necesidad de tener una base
de comparacin para la medida del gasto de energa, o para la ganancia entre una seal de entrada
que es amplificada y una seal de salida. Obtuvo su nombre en honor a Alexander Graham Bell.
FIGURA 16AMPLIFICACIN
P2
G log10
P1
El bel es una unidad de medida muy grande, por lo que se utiliza normalmente el decibelio:
P2
Gdb 10 log 10
P1
P2 V 2 2 / R1 V 2
Gdb 10 log10 10 log10 2 20 log10
P1 V 1 / R1 V1
Si se tienen varias etapas de ganancia:
Atotal = A1xA2xA3x.An
Entonces:
Gtotal = G1+G2+G2+.Gn
Cuando se trabaja con frecuencias de corte, se define un nivel de amplificacin de modo que la
potencia de salida sea la mitad de la potencia de entrada:
P2 = 0.5 P1
Gdb 10 log10 2 3.0103db
V2/V1 = 0.707
Sin( 2f c i )
hid
Pasa Bajos: i
Sin(2f c i )
hid
Pasa Altos: i
Sin(2f ch i ) Sin ( 2f cl i )
hid
Pasa Banda: i i
Actualmente el Matlab proporciona los algoritmos completos de manera directa, teniendo los datos
normalizados se pueden aplicar y obtener el valor de los coeficientes en una sola operacin.
n es el grado, es decir el nmero de coeficientes es n+1, debera ser siempre par y el nmero de
coeficientes impar para los pasaaltos y para bandas(si no la resp. en frec. en Nyquist sale cero). Wn
es la frecuencia normalizada (con respecto a la mitad de la frecuencia de muestreo, ojo, no respecto a
toda la frecuencia) entregada como un valor o un vector en caso sea un pasa banda o para banda,
window es la ventana a utilizar.
Suponiendo que se tiene una frecuencia de muestreo de 10,000Hz, entonces Wn = 1 para 5,000Hz.
Problema:
Hallar los coeficientes b(z) = b1+ b2.z-1+b3.z-2++bn+1zn
Solucin:
Wn=[0.2 0.35]
B=fir1(39,[0.2 0.35],bartlett(40))
#include "DSP28_Device.h"
#include "math.h"
float x[1000],y[1000];
float b[41];
int i;
int k;
float pi=3.1415;
interrupt void eva_timer1_isr(void);
interrupt void eva_comp1_isr(void);
Uint32 EvaTimer1InterruptCount;
void main(void)
{
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
EvaTimer1InterruptCount = 0;
EvaRegs.GPTCONA.all = 0;
EvaRegs.T1PR = 0x0200; // Periodo
EvaRegs.T1CMPR = 0x0100; // Comparador
EvaRegs.EVAIMRA.bit.T1PINT = 1;
EvaRegs.EVAIFRA.bit.T1PINT = 1;
EvaRegs.EVAIMRA.bit.T1CINT = 1;
EvaRegs.EVAIFRA.bit.T1CINT = 1;
EvaRegs.T1CNT = 0x01ff;
EvaRegs.T1CON.all = 0x1742;
EALLOW;
PieVectTable.T1PINT = &eva_timer1_isr;
PieVectTable.T1CINT = &eva_comp1_isr;
EDIS;
PieCtrlRegs.PIEIER2.all = M_INT4|M_INT5;
IER |= ( M_INT2);
k=0;
b[1]=0;
b[2]=0.001797067;
b[3]=0.002909035;
b[4]=0.000534097;
b[5]=-0.003151426;
b[6]=-0.003443545;
b[7]=-0.000397728;
b[8]=-0.000784736;
b[9]=-0.009355802;
b[10]=-0.018330126;
b[11]=-0.010534371;
b[12]=0.021142906;
b[13]=0.056667248;
b[14]=0.057783555;
b[15]=0.003541264;
b[16]=-0.078630909;
b[17]=-0.122738900;
b[18]=-0.077277152;
b[19]=0.041509077;
b[20]=0.149340724;
b[21]=0.149340724;
b[22]=0.041509077;
b[23]=-0.077277152;
b[24]=-0.122738900;
b[25]=-0.078630909;
b[26]=0.003541264;
b[27]=0.057783555;
b[28]=0.056667248;
b[29]=0.021142906;
b[30]=-0.010534371;
b[31]=-0.018330126;
b[32]=-0.009355802;
b[33]=-0.000784736;
b[34]=-0.000397728;
b[35]=-0.003443545;
b[36]=-0.003151426;
b[37]=0.000534097;
b[38]=0.002909035;
b[39]=0.001797067;
b[40]=0;
y[0]=0;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
}
interrupt void eva_timer1_isr(void)
{
if (k==39) x[k]=1;
else x[k]=0;
if (k>=39) {
y[k]=0;
for (i=1;i<41;i++) y[k]=y[k]+b[i]*x[k-i+1];
}
else y[k]=0;
EvaTimer1InterruptCount++;
EvaRegs.EVAIMRA.bit.T1PINT = 1;
EvaRegs.EVAIFRA.all = BIT7;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
}
interrupt void eva_comp1_isr(void)
{
if(k<1000) k++;
EvaTimer1InterruptCount++;
EvaRegs.EVAIMRA.bit.T1CINT = 1;
EvaRegs.EVAIFRA.all = BIT8;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
}
LABORATORIO 5: CONTROL DIGITAL DE UN MOTOR DC UTILIZANDO EL DSP
INTRODUCCION
El motor de corriente continua y de imn permanente DC, es el ms utilizado en servomecanismos de
baja potencia y alta velocidad, por sus caractersticas dinmicas y por su fcil implementacin.
di Eq. 3.1
V L R.i ke.w
dt
dw Eq. 3.2
Te kt.i J B.w
dt
Donde:
V es el voltaje de la fuente.
i corriente de la bobina. amp
L inductancia de la bobina. henrios
R resistencia de la bobina. ohmios
ke constante de tensin/velocidad inducida. Voltios/Hz
w velocidad del eje. Hz
Te torque electromagntico. Nm
kt constante de torque/corriente. Nm/amp
J momento de Inercia del rotor. Nms2
B coeficiente de friccin. Nms
V = 12 voltios
L = 0.0001hr
R = 1ohm
kt = 0.1 Nm/amp
ke = 0.15 V/Hz
J = 0.001 Nms2
B=0.01 Nms
B.w kt.i
s.w
J J
V ke.w
i
s.L R
B.w kt V ke.w
s.w
J J s.L R
Por lo tanto:
La Eq. 3 puede ser simplificada para hallar la funcin de transferencia de segundo grado que permite
encontrar la relacin entre la velocidad del rotor y la tensin de entrada:
w kt Eq. 3.4
V L.J .s ( L.B R.J ).s R.B kt.ke
2
X = A. X + B. U
Donde
X y X son las variables de estado
A y B son las matrices de las constantes
U es la tensin de entrada
Si se define que:
x1 = w velocidad en Hz
x2 = w aceleracin Hz/seg
x1 = w= x2
x2 = w
Eq. 3.5
x1' 0 1 x1 0
.( BR kekt). .( JR LB). . kt .V
x 2' x 2
LJ LJ LJ
Reemplazando datos:
x1' 0 1 x1 0
. .V
x 2' 250 0 10 10x2 10 0
Para el caso general donde la inductancia L del circuito de armadura es despreciable, se puede
utilizar la ecuacin lmite:
w
km Eq. 3.7
V Tm.s 1
Con los datos de los parmetros del motor es sencillo observar la respuesta del sistema a una seal de
entrada del voltaje de alimentacin V cuando este es un escaln de 12 voltios:
12
V ( s)
s Arranque de un motor en lazo abierto por un escaln de 12v
12 km
w .
s Tm.s 1
Reemplazando datos:
km = 4
Tm = 0.04
48
w
s.(0.04 s 1)
t
Eq. 3.9
w(t ) 48 48.e 0.04
Se puede verificar por la ecuacin que el motor se va a estabilizar a 48Hz. La aceleracin se puede
obtener rpidamente de la derivada y verificar una aceleracin en el arranque de 1200 Hz/s, la cual
va disminuyendo exponencialmente a cero:
t
Eq. 3.10
a (t ) 1200.e 0.04
Con los modelos presentados en sistemas analgicos, disear los cambios necesarios para construir
un control de motor PI o PID discreto, de manera que se pueda controlar la velocidad y la
aceleracin, o si prefiere la posicin y la velocidad. Escoger el tiempo de muestro, el tiempo de
anlisis.
Ej.
Anlisis discreto de la velocidad del motor DC
1 s 10010 1
( s.I A) 1
s ( s 10010) 250000 s
1 1
s s ( s 10010)
( s.I A) 1
250000 1
s ( s 10010) s 10010
1
1 (1 e 10010.h )
e A.h 10010
250000
(1 e 10010.h ) e 10010.h
10010
1 e 10010.h
99.9.(1 e
h
)
10010u 99.9.( h )
.du 10010 10010
10010.u
0 1000000.e 1
10010
PROGRAMA DEL MOTOR DC
#include "stdlib.h"
#include "DSP28_Device.h"
#include "math.h"
//#include "registros.h"
//#include "math.h"
interrupt void eva_timer1_isr(void);
interrupt void eva_comp1_isr(void);
Uint32 EvaTimer1InterruptCount;
const float L=0.001,R=4.0,J=0.0002,B=0.003,kt=0.1,ke=0.11;
int * vectorPIVR;
int temporal;
float pi=3.1415;
int k;
float iz[1000];
float v[1000];
float fcem;
float torque[1000];
float wz[1000];
void main()
{
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
EvaTimer1InterruptCount = 0;
EvaRegs.GPTCONA.all = 0;
EvaRegs.T1PR = 0x0200; // Periodo
EvaRegs.T1CMPR = 0x0100; // Comparador
EvaRegs.EVAIMRA.bit.T1PINT = 1;
EvaRegs.EVAIFRA.bit.T1PINT = 1;
EvaRegs.EVAIMRA.bit.T1CINT = 1;
EvaRegs.EVAIFRA.bit.T1CINT = 1;
EvaRegs.T1CNT = 0x01ff;
EvaRegs.T1CON.all = 0x1742;
EALLOW;
PieVectTable.T1PINT = &eva_timer1_isr;
PieVectTable.T1CINT = &eva_comp1_isr;
EDIS;
PieCtrlRegs.PIEIER2.all = M_INT4|M_INT5;
IER |= ( M_INT2);
k=0;
fcem=0;
v[0]=0;
v[1]=0;
iz[0]=0;
iz[1]=0;
torque[0]=0;
torque[1]=0;
wz[0]=0;
wz[1]=0;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
}
interrupt void eva_timer1_isr(void)
{
v[k+2]=12;
iz[k+2]=v[k+1]*0.2436f-v[k]*0.24f+iz[k+1]*0.9901f-iz[k]*0.01804f;
torque[k+2]=iz[k+2]*kt;
wz[k+2]=v[k+1]*0.09344f+v[k]*0.02791f+wz[k+1]*0.9901f-wz[k]*0.01804f;
EvaTimer1InterruptCount++;
EvaRegs.EVAIMRA.bit.T1PINT = 1;
EvaRegs.EVAIFRA.all = BIT7;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
}
interrupt void eva_comp1_isr(void)
{
if(k<1000) k++;
EvaTimer1InterruptCount++;
EvaRegs.EVAIMRA.bit.T1CINT = 1;
EvaRegs.EVAIFRA.all = BIT8;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
}