Sei sulla pagina 1di 63

VARITEK

SYLLABUS

Profesor: MSc. VICTOR SOTELO NEYRA


Curso:
LABORATORIO DE CONTROL Y PROCESAMIENTO DIGITAL UTILIZANDO
PROCESADORES DSP

Horas: 40 Horas. 14 Semanas.

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

UNIDAD 1: INTRODUCION A LOS PROCESADORES DIGITALES 3

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 2: INTRODUCCION A LA SUITE DE PROGRAMACION CODE COMPOSER 13

INTRODUCTION AL CODE COMPOSER STUDIO IDE 13


EL FLUJO DE LA PROGRAMACIN 13

UNIDAD 3: TARJETAS DE DESARROLLO VARITEK 19 CON EL TMS320F2812 16


APLICACIONES 17
CARACTERSTICAS 17
ESPECIFICACIONES TCNICAS 18
MAPA DE MEMORIAS 19
CONEXIN DE PINES Y CABLEADO 21
JUMPERS PARA OPERACIN NORMAL 24
JUMPERS PARA EL BOOT ARRANQUE 24
LEDS 24
INTERFACE SERIAL 24

UNIDAD 4: LABORATORIOS 25

LABORATORIO 1: IMPLEMENTACIN DE UN PROGRAMA BSICO 25


PASO 1 25
PASO 2 25
PASO 3 26
PASO 4 27
PASO 5 29
PASO 6 30
PASO 7 31
LABORATORIO 2: PROGRAMA DE MONITOREO 34
CREACIN RPIDA DE NUEVOS PROYECTOS 34
LA FUNCIN ITERASERIAL() 35
EL PROGRAMA MONITOR.C 36
LABORATORIO 3: PROGRAMA ENTRADAS Y SALIDAS GPIO 40
CONFIGURACIN DE PINES 40
EL PROGRAMA LAB3.C SOBRE GPIOS 42
SENTENCIAS EN MONITOR.C 43
LABORATORIO 4: IMPLEMENTACIN DE UN FILTRO FIR 44
INTRODUCCIN 44
DEL CASO IDEAL AL CASO PRACTICO PARA LA CONSTRUCCION DE UN FILTRO FIR 45
CONSIDERACIONES DE FRECUENCIA 48
PASOS A SEGUIR PARA EL DISEO DE FIRS 49
EMPLEO DEL MATLAB EN EL DISEO DE FIRS 50
COEFICIENTES DEL MATLAB 50
PROGRAMA DEL FILTRO FIR 53
LABORATORIO 5: CONTROL DIGITAL DE UN MOTOR DC UTILIZANDO EL DSP 56
INTRODUCCION 56
REPRESENTACIN EN EL ESPACIO DE ESTADO 57
PROGRAMA DEL MOTOR DC 61
UNIDAD 1: INTRODUCION A LOS PROCESADORES DIGITALES
Introduccin

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:

FIGURA 1EL PROCESAMIENTO DIGITAL DE LAS SEALES

Los problemas a resolver, involucran operaciones de sumas y multiplicaciones simultneas:


A = B.C + D

Qu es el Procesamiento Digital de Seales (Digital Signal Processing


DSP)?

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.

El Procesador Digital de Seales

DSP, sigla en ingls de Digital Signal Processo, es un tipo de microprocesador, increblemente


rpido y poderoso. Un DSP es nico porque procesa seales en tiempo real. Esta capacidad de
procesamiento en tiempo real hace a los DSP ideales para aplicaciones que no toleran ningn retardo.
Por ejemplo, no es fcil conversar a travs de un telfono celular cuando existe un retardo en la lnea.
Esto lleva a que la seal se corte o a confusin ya que ambos usuarios hablan a la vez. Con los
telfonos celulares actuales, los cuales usan DSP's, es posible hablar normalmente. El DSP dentro del
telfono procesa el sonido (convirtindolo de una seal analgica a digital, filtrando, comprimiendo
y realizando otras tareas en forma digital) tan rpidamente que uno puede hablar y escuchar sin
problemas de retardo ni ninguna molestia que ello implica. O sea, se procesa en tiempo real.
Un DSP consiste de varios mdulos fundamentales: un ncleo que procese todas las operaciones
matemticas, una memoria para guardar los datos y el programa, y una serie de dispositivos AD DA
para convertir los datos en anlogos y digitales.
Hay dos arquitecturas que se pueden identificar en los DSPs; la de Von Neumann y la arquitectura
Harvard:

FIGURA 2 ARQUITECTURA VON NEUMANN Y ARQUITECTURA HARVARD

La diferencia principal se nota en la memoria de datos y de programa, en la aquitectura Harvard los


dos tipos de memoria estn separados, mientras que en la Von Neumann estn juntas. Las
arquitecturas de los computadores actuales estn comnmente clasificadas como RISC's (Reduced
Instruction Set Computers) y CISC's (Complex Instruction Set Computers). Estos ltimos tienen un
gran nmero de instrucciones sumamente poderosas, mientras que la arquitectura RISC posee pocas
instrucciones y realiza movimientos de datos entre registros en un ciclo de mquina. Hoy en da los
computadores RISC comienzan a reemplazar a los CISC's, porque se puede alcanzar un ms alto
rendimiento por medio del uso de un eficiente compilador como a travs de la ejecucin de
instrucciones simples en forma ordenada.

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.

Qu hace a un DSP un DSP?

Una de las ms importantes caractersticas de un DSP es su capacidad de realizar operaciones de


multiplicacin y acumulacin (MACs) en slo un ciclo de reloj. No obstante ello, es necesario que el
dispositivo posea la caracterstica de manejar aplicaciones crticas en tiempo real. Esto requiere de
una arquitectura que soporte un flujo de datos a alta velocidad hacia y desde la unidad de clculo y
memoria. Esta ejecucin a menudo requiere el uso de unidades DMA (Direct Memory Acess) y
generadores de direcciones duales (DAG's) que operan en paralelo con otras partes del chip. Los
DGA's realizan los clculos de direcciones, permitiendo al DSP buscar dos datos distintos para
operar con ellos en un solo ciclo de reloj, de tal forma que es posible ejecutar algoritmos complejos
en tiempo real.
Es importante para DSP's tener un mecanismo efectivo de salto para la ejecucin de loops ya que el
cdigo generalmente programado es altamente repetitivo. La arquitectura permite realizar estos loops
sin instrucciones adicionales ni demoras, las que al ejecutarse millones de veces empiezan a generar
retardos significativos.
Los DSPs deben manejar rangos dinmicos extendidos y de precisin para evitar overflow y
underflow y para minimizar los errores de redondeo. Para acomodarse a esta capacidad, los DSP's
incluyen acumuladores dedicados con registros ms anchos que el tamao nominal de los datos para
as conservar la precisin (por ejemplo, DSP's de 16 bits poseen acumuladores de 32 bits para
manejar el resultado de las multiplicaciones). Tambin deben soportar el manejo de buffers circulares
para la ejecucin de funciones algortmicas, tales como filtros. En estos tipos de buffers el puntero
del buffer se actualiza en paralelo con otras funciones del chip en cada ciclo de reloj. En cada ciclo el
buffer circular realiza una comprobacin de "fin de buffer" para verificar si es necesario volver al
inicio de ste sin demorar as la ejecucin del algoritmo a causa de la ejecucin de instrucciones
adicionales de comparacin y salto.
Por otro lado, los DSPs se utilizan sobre todo en aplicaciones donde existen acontecimientos
externos los que requieren de la deteccin y el control. El ambiente externo es detectado por
cualquiera de los dispositivos perifricos; puertos digitales I/O, pines dedicados de interrupcin, o las
entradas anlogas (de analgico a digital). La fuente de las seales a estos pines viene de los
interruptores, sensores anlogos y/o digitales, y de las seales de estado de otros sistemas. Cada
entrada representa un pedazo de informacin sobre el estado de un cierto acontecimiento exterior.
Las salidas se envan a actuadores, relays, motores o a otros dispositivos que controlen
acontecimientos. Entre la deteccin y actuacin est el DSP, analizando las entradas y el estado
actual del sistema, determinando cundo y qu encender y/o apagar. El software es el que hace todo
esto, toma las decisiones, generalmente trabaja de una manera condicional; es decir, realiza saltos
slo bajo ciertas condiciones y realiza manipulaciones a nivel de bits. Las interrupciones son
consideradas como condiciones externas que alteran el flujo principal del programa.
Cualidades de los procesadores digitales DSPs

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 CC es una herramienta que mejora la productividad ya que permite la depuracin de los


programas en los distintos lenguajes, se puede ejecutar lneas de cdigo paso a paso, verificar
posiciones de memorias y registros, tener posibilidad de paradas breakpoints, as como el integrar
archivos de disco para simular entrada y salida de datos. El CC tiene un simulador que capaz de
simular las funciones de un procesador F2812 bsico con algunas limitaciones de memoria, aunque
tiene desventajas de velocidad por que la PC trata de simular el comportamiento del DSP, adems
que no simula los perifricos.

FIGURA 4 LA SUITE DE PROGRAMACIN DEL CODE COMPOSER


En la Figura 4 se puede visualizar las ventanas del CC, se puede ver en la parte superior izquierda
una raz de Proyecto donde se manejan los archivos de entrada a ser compilados. Se tienen conos
para el arranque de los compiladores a travs de mens, ventanas de ayuda, en el lado superior
derecho se observa una ventana con los registros del procesador, en la parte baja una ventana de
grficos con una onda senoidal. Se cuenta con un editor de textos para escribir los programas, una
ventana para la observacin de variables llamada Watch Window, una ventana de comandos as como
una ventana para observar las memorias.

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.

El depurador es el programa que sirve de interface entre el programador y el simulador, utilizados


para probar la correcta ejecucin de los programas y verificar sus resultados. La depuracin puede
realizarse ejecutando paso a paso cada una de las sentencias en lenguajes C o C++, as como paso a
paso para las instrucciones en lenguaje de mquina. El depurador junto con el simulador puede ser
capaz de ejecutar las instrucciones del ncleo, verificando los resultados de las variables en grficas,
visualizacin de variables Watch Windows o viendo la memoria en las ventanas que permiten esa
facilidad.

El CC puede simular el comportamiento de un TMS320F2812 o en otro caso puede generarse el


programa ejecutable, el cual tiene una extensin tipo *.OUT y cargarse en el programa de
emulacin COLCA CODE de Varitek.

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

Code Composer Studio - Basics


Lab Hardware Setup
Code Composer Studio Step by Step
Create a project
Setup Build Options
Linker Command File
Download code into DSP
Lab 1: beginners project
Objective
Procedure
Open Files, Create Project File
UNIDAD 3: TARJETAS DE DESARROLLO VARITEK 19 CON EL
TMS320F2812
La Tarjeta de desarrollo VARITEK 19 con el procesador digital de seales DSP TMS320F2812,
ofrece un sistema cmodo y fcil de operar, junto con el con el programa Code Varitek V1.3, para la
rpida puesta en marcha de soluciones de procesamiento digital y automatizacin. Su forma de
conexin con el puerto serial permite conectar el mdulo a una PC, que funciona como la consola de
operacin del DSP.

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.

El procesador digital TMS320F2812 de la Texas Instruments, es el ltimo modelo de procesador


dedicado a aplicaciones de control. Con instrucciones de tipo RISC puede ser programado en
Lenguajes C++, ANSI C o ensamblador ASM. Su extraordinario desempeo alcanza los 150 MIPS
de procesamiento en pipeline, lo que permite trabajar con algoritmos complejos de nueva tecnologa.

La herramienta de emulacin principal es el programa COLCA CODE, mediante la conexin a la PC


por uno de sus puertos seriales. La aplicacin de emulacin ha sido diseada en Lenguaje C # de
.NET 3 y est en constante desarrollo.

FIGURA 6TARJETA DE DESARROLLO VARITEK 19


Aplicaciones

Sistema de adquisicin de datos para sistemas de control


Robtica
Automatizacin Industrial
Procesamiento digital de seales
Supervisin remota
Automviles
Lnea Blanca
Sistemas de seguridad
Control de acceso
Comunicaciones va serial

Caractersticas

150 MIPS de performance Pipelinizada


Arquitectura Harvard, Set de instrucciones RISC, 6 buses y uso de pipeline de 6 etapas
176-Pin Plastic Quad Flat Package (SOIC Suffix)
6.67-ns Tiempo de ejecucin de cada Instruccin en Pipeline
18KWords RAM data que puede ser compartida con programas
128KWords Flash para programas como memoria interna
12 Canales de PWM. Pulse-Width Modulation
4 Timers de Propsito general con 4 modos de trabajo
3 Unidades de comparacin completa con tiempo muerto para mosfets o IGBTs
8 Unidades de Captura con dos resolvedor de cuadratura para encoders QEP
1 Mdulos de Conversin Analgico Digital de 16 canales, 12 bits de hasta 12.5MSPS
49 pines de entradas y salidas I/O Programables
Unidad de tiempo de interrupcin en tiempo real Watchdog Timer Module
Dos Unidades de Comunicacin Serial asncrona (SCI) para conexin a la PC
Unidad de Comunicacin Serial sncrona (SPI) para conectar mdulos DA externos
5 Interrupciones externas (2 Power Drive Protect, Reset y 2 Maskable Interrupts)
4 Modos de apagado y de consumo en baja potencia
Emulacin Scan-Based para usar JTAG
Programa de Arranque por medios seriales o memorias
Interfase de memoria externa con 256KWords de memoria esttica
3 Timers de 32 bits para definicin de tiempos de ciclo
Programa de emulacin Colcacode V1.4
Especificaciones Tcnicas

150 MIPS de performance


El procesador TMS320F2812 es un DSP con una potencia de procesamiento de 150 MIPS, con ncleo de la
familia 2800 de Texas Instruments, tiene como caracterstica una gran facilidad para el procesamiento de
seales y es usado en la industria para el control de dispositivos perifricos, como motores de induccin
trifsicos, monofsicos, adquisicin de datos, sistemas de seguridad, entre otros.
CPU de 32 bits con juego de instrucciones RISC, unidad de multiplicacin MAC de 32x32, operaciones
atmicas, bus con arquitectura Hardvard, Modelo de programacin de memoria unificada, cdigo eficiente
para C++ y ANSI C y buscador de direcciones de programas y datos lineal de 4M.

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

256Kw programa y/o data RAM Memoria Externa


Memoria externa al DSP para la implementacin de nuevos programas y datos

12 Canales de PWM. Pulse-Width Modulation


Dos manejadores de eventos para 6 canales PWM cada uno, utilizados en el manejo de llaves MOSFETS o
IGBTs en motores industrials

4 Timers de Propsito general con 4 modos de trabajo


Relojes de 16 bits que pueden llegar a una frecuencia de 20MHz

3 Unidades de comparacin completa con deadtime


Compara los relojes con un valor de 16 bits y dispara una seal por sus pines o una interrupcin.

6 Unidades de Captura con cuadratura para 2 encoders


Capturan seales desde sus pines externos con polaridad programable, tambin 4 de ellos pueden ser usados
para la lectura de dos encoders, para el sensado de posicin de ejes de 2 motores o servomecanismos y su
utilizacin en telemetra.

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.

49 pines de entradas y salidas I/O Programables


Para el encendido y apagado de interruptores, captura de encendido y apagado.

Unidad de tiempo de interrupcin en tiempo real


El DSP tiene una unidad de captura verstil, para el manejo de interrupciones de hardware y de software, por
ubicacin de programa en su tabla de interrupcin.

Unidad de Comunicacin Serial asncrona (SCI)


Para la comunicacin con un MODEM, comunicacin con una PC u otros DSPs.

Unidad de Comunicacin Serial sncrona (SPI)


Diversos perifricos como memorias flash, pantallas LCDs, EEproms pueden ser manejadas con este tipo de
comunicacin sncrona.
5 Interrupciones externas INT12, Reset, PDPs
Interrupciones externas XINT1, XINT2, pin de Reset, pines de deteccin de falla de power PDPA y PDPB,
adems de un detector de instrucciones no legales como NMI.

Flash externo de 4Mbits


Memoria externa que se comunica con el DSP utilizando su puerto SPI.

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.

Las memorias internas ms importantes son las denominadas:

M0 SARAM : origen = 0x000000, longitud = 0x000400


M1 SARAM : origen = 0x000400, longitud = 0x000400

L0 SARAM : origen = 0x008000, longitud = 0x001000


L1 SARAM : origen = 0x008000, longitud = 0x001000

FLASH : origen = 0x3D8000, longitud = 0x020000

H0 SARAM : origen = 0x3F8000, longitud = 0x002000

EXTERNA : origen = 0x100000, longitud = 0x040000

En el programa Code Varitek V1.4., se pueden visualizar los rangos de memoria con la opcin:
Ver->Memoria

Indicando la direccin que se desea visualizar y el formato numrico. Estando en la ventana de


visualizacin de memoria puede modificar cualquier posicin haciendo doble clic sobre el dato que
quiere cambiar, aparecer la opcin de editar la memoria, ah podr cambiar el valor del dato.
FIGURA 7 MAPA DE MEMORIAS

Tambin es posible llenar un rango de memorias con la opcin:


Editar->Memoria->Llenar

tambin puede copiar un rango de datos de memoria a memoria con la opcin:


Editar->Memoria->Copiar.
Conexin de PINES Y CABLEADO

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.

FIGURA 8 CONEXIONES DE PINES


FIGURA 9 PINES DEL CONECTOR JP1

FIGURA 10 PINES DEL CONECTOR JP2


FIGURA 11 PINES DEL CONECTOR JP3

FIGURA 12 PINES DEL CONECTOR JP4


Jumpers para operacin Normal

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.

Jumpers para el Boot Arranque

Para el arranque los Pines B0-B3 tiene la siguiente conexin:


B3 B2 B1 BO DESCRIPCIN DE ARRANQUE
SCI_TX MDXA SPISTE SPICLK
1 X X X Salto a flash 0x3f7ff6
0 1 X X Llamado a la rutina de arranque SPI
0 0 1 1 Llamado a la rutina de arranque SCI
0 0 1 0 Salto a HO Sram 0x3f8000
0 0 0 1 Salto a OTP 0x3d7800
0 0 0 0 Llamado a la rutina de arranque
Paralelo desde GPIO puerto B
TABLA UNIDAD 3: TARJETAS DE DESARROLLO VARITEK 19 CON EL TMS320F2812.1 COMBINACIN DE JUMPERS PARA EL
ARRANQUE

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

LABORATORIO 1: IMPLEMENTACIN DE UN PROGRAMA BSICO

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:

Project ->New -> LAB1.prj

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:

Llenar la hoja con el programa:

#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:

Project-> Add Files

Paso 4
Verificar que la ruta de archivos quede como:

Los archivos que estn actualmente en la carpeta del proyecto sern:


Ahora se debe indicar la ruta de los archivos a ser incluidos:

Project -> Build Options-> Compiler -> Preprocesor -> Include Search Path

Aumentar la siguiente lnea en 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:

Por ejemplo quitar el ; a la lnea InitPieCtrl()


Salvar el archivo.
Compilar
El Compilador detectar el error y mostrar el siguiente mensaje:

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

Buscar el programa LAB1.OUT:

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:

Creacin rpida de nuevos proyectos

Cambiar de nombre al archivo *.pjt.


Cambiar de nombre al archivo *.paf.
Cambiar de nombre al archivo *.c.
Cambiar de nombre al archivo *.h.
Borrar toda la carpeta DEBUG.
Abrir el proyecto con el nuevo nombre.
Ignorar el aviso de que no encuentra el archivo *.c
Quitar el archivo *.c de la raz de proyectos.
Agregar el archivo *.c con el nuevo nombre.
Entrar a Project->Build Options->Linker y cambiar el nombre a los archivos *.out y *.map.
Recompilar los nuevos archivos.

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.

Para probar puede visualizar la memoria con:

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.

A continuacin se puede observar la ventana de memoria correspondioente a la direccin 0x8000 en


hexadecimal, los datos tambin aparecen en forma hexadecimal de 16 bits, pruebe cambiando los
formatos enteros y flotantes.

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

PINES DEL CONECTOR JP2


PINES DEL CONECTOR JP4

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;

GpioMuxRegs.GPADIR.bit.GPIOA0 = 1; //Pwm1 salida


GpioMuxRegs.GPADIR.bit.GPIOA1 =0; // Pwm2 entrada
GpioMuxRegs.GPFDIR.all = 0x3F00;
GpioMuxRegs.GPFDIR.bit.GPIOF8 =0;
EDIS;
GpioDataRegs.GPADAT.bit.GPIOA0 = 1;
EINT;
ERTM;
for (i=0;i<1000;i++)
{
GpioDataRegs.GPATOGGLE.bit.GPIOA0 =1;
for (k=0;k<retardo0;k++){};
asm(" setc xf");
for (k=0;k<retardo1*(250-i/4);k++){};
asm(" clrc xf");
}

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

En el estudio del procesamiento digital se estudian fuentes de perturbacin y ruidos, que en la


prctica se acentan por los procesos de manufactura, fuentes o por agentes externos al diseo,
tambin se definen operaciones matemticas capaces de reconstruir imgenes o recuperacin de
datos de fuentes de seales. Los elementos que producen ruidos por lo general provienen de:

Los sensores derivativos o integrales


Transductores al cambiar el tipo de energa a detectar
Cables expuestos
Medio de grabacin
Los amplificadores y acondicionadores de seal
Los convertidores analgico digitales
Ruidos RF
Emisiones EFI
Rayos X

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:

De ser estable en sus frecuencias de trabajo


Debe ser realizable
Debe ser diseado para tener una respuesta lineal

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.

La funcin de transferencia en Z correspondiente es:

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

Para S = + jw , T es el periodo de muestreo. El circulo unitario de Z corresponde a = 0, y w = 2


fc, donde fc es la frecuencia de prueba o eje de las abcisas.

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

Entonces la funcin de transferencia en el crculo unitario o respuesta en frecuencia ser:

N 1
H (e j 2f ) h( i ) e j 2fi
i o

DEL CASO IDEAL AL CASO PRACTICO PARA LA CONSTRUCCION DE UN FILTRO FIR

Una funcin de transferencia en realidad se especifica para valores de i en todo el espectro de


tiempo, para todo valor desde - a +, y no en el nmero de coeficientes que se tiene N:

H id ( e j 2f ) h
i
(i ) e j 2fi

Los valores de h(i) pueden ser hallados por:


0.5
hid (i ) H
0.5
id ( e j 2 f ) e j 2f df

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 )

Hamming por ejemplo propone una ventana con la funcin:


2i
w( i 1) 0.54 0.46Cos
N 1

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)]

FIGURA 13VENTANA HAMMING


FIGURA 14VENTANA HANN

FIGURA 15VENTANA BLACKMAN


Consideraciones de Frecuencia

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

La unidad bsica es el Bel.

P2
G log10
P1

Donde P2 es la potencia de salida, P1 la potencia de entrada. G es la ganancia de la amplificacin de


potencia.

El bel es una unidad de medida muy grande, por lo que se utiliza normalmente el decibelio:

P2
Gdb 10 log 10
P1

Si se tienen los voltajes o corrientes como datos se tiene:

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

Lo que equivale a una amplificacin de la seal de

V2/V1 = 0.707

Gdb 20 log10 0.707 3.0103db

PASOS A SEGUIR PARA EL DISEO DE FIRs

Los pasos a seguir para hallar los coeficientes de un FIR son:

1. Hallar la respuesta al impulso h1(i) de acuerdo al tipo de filtro:

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

Sin(2f cl i ) Sin (2f ch i )


hid
Para Banda: i i

2. Seleccin del tipo de ventana


3. Seleccin de la cantidad N a criterio
4. Aplicar la funcin del tipo de ventana
5. Multiplicar la respuesta (sin) con la ventana
6. Hacer el retraso y hallar los nuevos coeficientes
EMPLEO DEL MATLAB EN EL DISEO DE FIRs

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.

fir1 Design a window-based finite impulse response filter Syntaxb = fir1(n,Wn)


b = fir1(n,Wn,'ftype')
b = fir1(n,Wn,window)
b = fir1(n,Wn,'ftype',window)
b = fir1(...,'normalization')

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

Si se busca un pasabanda con frecuencias de corte fcl=2Khz y fch=3.5Khz


La frecuencia de muestreo es de 20Khz
Usar una ventana bartlett de orden 39 o 40 coeficientes.

Solucin:
Wn=[0.2 0.35]

B=fir1(39,[0.2 0.35],bartlett(40))

Emplear el Matlab para hallar los coeficientes:

Coeficientes del Matlab


FIGURA 17RESPUESTA EN FRECUENCIA FRQZ(B,1,20000)
FIGURA 18ESCALA LOGARTMICA
FIGURA 19PROGRAMA EN EL DSP CON GRFICA LINEAL

PROGRAMA DEL FILTRO FIR

#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

// IDLE loop. Just sit and loop forever:


for(;;);

}
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.

Las ecuaciones electro-mecnicas que gobiernan su movimiento son las siguientes:

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

Se tienen los siguientes datos:

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

El modelo continuo puede ser implementado en Matlab de la siguiente manera:


FIGURA 20MODELO DE UN MOTOR DE CORRIENTE CONTINUA DC.

De las eqs. 1 y 2 se tiene:

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:

B R R.B ke.kt kt.V Eq. 3.3


s 2 .w .s.w .w
J L J .L J .L J .L

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

Representacin en el espacio de estado

En el espacio de estados la ecuacin debe tener la forma:

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

Desarrollando la ecuacin (4) y reemplazando x1 y x2 se tiene:

( R. J L.B ) ( R.B ke.kt


w" .w'
LJ LJ

x1 = w= x2
x2 = w

( R.J L.B) ( R.B ke.kt ) kt.V


x 2' .x 2 .x1
LJ LJ LJ

Se tiene por ltimo la representacin en espacios de estado:

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:

La ecuacin simplificada es de primer orden:


w

kt Eq. 3.6
v R.J .s R.B kt.ke

Reemplazando las siguientes variables:

km = kt/(R.B+kt.ke) constante de ganancia del motor


Tm = R.J/(R.B+kt.ke) constante de tiempo del motor

w

km Eq. 3.7
V Tm.s 1

La aceleracin es expresada por la ecuacin:


a

km.s Eq. 3.8
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)

Con solucin por transformada de Laplace:

t
Eq. 3.9
w(t ) 48 48.e 0.04

Las grficas de velocidad y aceleracin sern:

Grfica de velocidad Grfica de aceleracin

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

La ecuacin de espacios de estado puede llevarse por muestreo:


x1' 0 1 x1 0
. .V
x 2' 250 0 10 10x2 10 0
1
1 s 1
( s.I A)
250000 s 10010

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

for (;;); /* loop infinito */

}
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;
}

Potrebbero piacerti anche