CONTROLADORES DIGITALES DE SEÑALES 2003

26
INTRODUCCIÓN Los microcontroladores clásicos, denominados de forma resumida MCU (microcontroller unit), son circuitos integrados que contienen un procesador digital junto a diversos periféricos auxiliares que facilitan el desarrollo de las aplicaciones a las que se dedican. Su parecido con los DSP (Digital Signal Processor, Procesador Digital de Señales) es muy grande, pero las diferencias que los distinguen hacen que sus campos de aplicación sean diferentes. De forma resumida puede decirse que los DSP son microcontroladores dotados de los recursos físicos y lógicos necesarios para poder soportar las aplicaciones específicas del procesamiento digital de señales. Las instrucciones aritméticas complejas de los MCU se ejecutan en varios ciclos, mientras que las de los DSP sólo precisan uno. En los DSP siempre se dispone de convertidores AD (Analógico-Digital) rápidos y precisos. Dado el carácter marcadamente matemático de los programas para DSP, éstos están preparados para ser programados con lenguajes de alto nivel, como C. La velocidad y el rendimiento de los DSP son muy superiores a los habituales en los MCU. DSP y DSC La empresa Microchip Technology Inc. ® ocupa el primer puesto en el ranking mundial de microcontroladores de 8 bits desde el año 2003; sus modelos son conocidos popularmente con el nombre genérico de PIC ® . Las aplicaciones modernas mezclan las funciones típicas MCU con las de procesamiento digital de señales. Esta situación impulso a Microchip a fabricar un circuito hibrido MCU/DSP, cuyo manejo fuera similar a los clásicos microcontroladores pero que incluyera las principales prestaciones de los DSP. Dando origen al llamado Controlador Digital de Señales, abreviadamente DSC ® (Digital Signal Controller), el cual reúne las características de un microcontrolador de PIC de 16 bits y las de un DSP de gama baja. 1. CONTROLADOR DIGITAL DE SEÑALES Microchip ha unido la potencia y posibilidades de sus microcontroladores de 16 bits (MCU) con las prestaciones más interesantes de los DSP para fabricar un circuito integrado denominado DSC. Dada las similitudes del DSC con los MCU en cuanto arquitectura y repertorio de instrucciones, los usuarios de las familias de microcontroladores PCI no encuentra dificultades para introducirse en el campo del procesamiento digital de señales. Estos dispositivos se caracterizan por alcanzar un rendimiento de 40 MIPS e integrar memoria FLASH de alta calidad junto a novedosos recurso hardware, apoyándose en herramientas de desarrollo muy fáciles de manejar.

Transcript of CONTROLADORES DIGITALES DE SEÑALES 2003

Page 1: CONTROLADORES DIGITALES DE SEÑALES 2003

INTRODUCCIÓN

Los microcontroladores clásicos, denominados de forma resumida MCU (microcontroller unit), son circuitos integrados que contienen un procesador digital junto a diversos periféricos auxiliares que facilitan el desarrollo de las aplicaciones a las que se dedican. Su parecido con los DSP (Digital Signal Processor, Procesador Digital de Señales) es muy grande, pero las diferencias que los distinguen hacen que sus campos de aplicación sean diferentes.

De forma resumida puede decirse que los DSP son microcontroladores dotados de los recursos físicos y lógicos necesarios para poder soportar las aplicaciones específicas del procesamiento digital de señales.

Las instrucciones aritméticas complejas de los MCU se ejecutan en varios ciclos, mientras que las de los DSP sólo precisan uno. En los DSP siempre se dispone de convertidores AD (Analógico-Digital) rápidos y precisos. Dado el carácter marcadamente matemático de los programas para DSP, éstos están preparados para ser programados con lenguajes de alto nivel, como C. La velocidad y el rendimiento de los DSP son muy superiores a los habituales en los MCU.

DSP y DSC

La empresa Microchip Technology Inc.® ocupa el primer puesto en el ranking mundial de microcontroladores de 8 bits desde el año 2003; sus modelos son conocidos popularmente con el nombre genérico de PIC®.

Las aplicaciones modernas mezclan las funciones típicas MCU con las de procesamiento digital de señales. Esta situación impulso a Microchip a fabricar un circuito hibrido MCU/DSP, cuyo manejo fuera similar a los clásicos microcontroladores pero que incluyera las principales prestaciones de los DSP. Dando origen al llamado Controlador Digital de Señales, abreviadamente DSC® (Digital Signal Controller), el cual reúne las características de un microcontrolador de PIC de 16 bits y las de un DSP de gama baja.

1. CONTROLADOR DIGITAL DE SEÑALES

Microchip ha unido la potencia y posibilidades de sus microcontroladores de 16 bits (MCU) con las prestaciones más interesantes de los DSP para fabricar un circuito integrado denominado DSC.

Dada las similitudes del DSC con los MCU en cuanto arquitectura y repertorio de instrucciones, los usuarios de las familias de microcontroladores PCI no encuentra dificultades para introducirse en el campo del procesamiento digital de señales.

Estos dispositivos se caracterizan por alcanzar un rendimiento de 40 MIPS e integrar memoria FLASH de alta calidad junto a novedosos recurso hardware, apoyándose en herramientas de desarrollo muy fáciles de manejar.

Page 2: CONTROLADORES DIGITALES DE SEÑALES 2003

Los DSC se comercializan en la actualidad en diferentes dispositivos agrupados en dos familias:

1ª Familia dsPIC30F

2ª Familia dsPIC33F

LA FAMILIA dsPIC30F

Inicialmente Microchip fabricó la familia dsPIC30F. La Tabla X muestra un listado de las características más destacables de esta familia.

Tabla. X. Características más importantes de la familia dsPIC30F.

RECURSO RANGO DE VALORES

Memoria de Programa FLASH 12 Kb – 144 Kb

Memoria de Datos RAM 512 Bytes – 8 Kb

Memoria de Datos EEPROM 1 Kb – 4 Kb

Pines de Encapsulado 18 – 80 pines

Temporizadores de 16 bits Hasta 5

Módulo de Captura Hasta 8 entradas

Módulo Comparador / PWM Hasta 8 salidas

Módulo PWM de Control de Motores De 6 a 8

Convertidores A/D de 10 bits 500 kbps, hasta 16 canales

Convertidores A/D de 12 bits 100 kbps, hasta 16 canales

UART 1 – 2

SPITM

(8-16 bits) 1 – 2

I2C

TM 1 Módulo

QEI 1

Interfaz CODEC 1

CAN 1 – 2

El voltaje de alimentación admite un rango comprendido entre 2,5 y 5,5 VDC. Se tolera una temperatura interna entre -40º y 85º C y una externa entre -40º y 125º. El rendimiento alcanza los 30 MIPS cuando el voltaje de alimentación tiene un valor entre 4.5 y 5.5 VDC.

En cuanto a la arquitectura de la CPU (Central Processing Unit, Unidad Central de Procesamiento) los dsPIC30F se sustentan en un núcleo RISC (Reduced Instruction Set Computer, Computadora con Conjunto de Instrucciones Reducidas) con arquitectura Harvard mejorada. Actuando como soporte central de información existe un banco de 16 registros de 16 bits cada uno; se dispone de un bus de datos de 16 líneas y otro de instrucciones de 24. Para potenciar la velocidad de las operaciones aritméticas complejas existe un “Motor DSP” que contiene un multiplicador hardware rápido de 17 x17 bits, dos acumuladores de 40 bits y un robusto registro de desplazamiento.

Toda esta estructura admite operaciones MCU y operaciones DSP con un repertorio de 84 instrucciones, la mayoría de 24 bits de longitud y ejecutables en un ciclo de instrucción.

Page 3: CONTROLADORES DIGITALES DE SEÑALES 2003

Las secciones MCU y DSP cooperan en el funcionamiento y comparten el flujo de instrucciones de los DSC. Los recursos específicos del Motor DSP, además de soportar las operaciones DSP, permiten implementar nuevas y potentes instrucciones MCU. Para reducir el tiempo de ejecución de algunas instrucciones DSP la memoria de datos SRAM (Static Random Access Memory, Memoria Estática de Acceso Aleatorio) se divide en dos espacios X e Y que pueden ser accedidos a la vez.

Otra característica importante en los dsPIC30F es la de admitir hasta 45 fuentes distintas de interrupción con 7 niveles de prioridad, de las cuales 5 son externas. Hay modelos de dsPIC30F que disponen de hasta 54 pines de E/S programables y con otras funciones multiplexadas con un consumo de 25mA cada uno. Al admitir más periféricos los dsPIC33F disponen de más fuentes de interrupción.

Se pueden encontrar una gran cantidad de periféricos en la familia dsPIC30F como temporizadores, convertidores AD, módulos de captura y comparación, módulos PWM para el control de motores, módulos de comunicación I2C, SPI, CAN, UART, etc. Los dsPIC33F además contienen un Controlador DMA.

Tambien disponen de potentes herramientas para la gestión del sistema (Monitor de fallo de reloj, temporizadores para la estabilización del voltaje de alimentación y la frecuencia, etc.), así como dispositivos para controlar el consumo de energía (modos de bajo consumo Idle y Sleep, detección de voltaje bajo, etc.).

Los modelos de la familia dsPIC30F

Microchip ha clasificado a los modelos de la familia dsPIC30F que fabrica y comercializa en tres categorías atendiendo a su aplicación más apropiada.

1ª Dispositivos dsPIC30F de propósito general.

2ª Dispositivos dsPIC30F para el control de sensores.

3ª Dispositivos dsPIC30F para el control de motores.

Con la finalidad de soportar todo tipo de diseños y necesidades los modelos dsPIC30F están encapsulados desde 18 hasta 80 pines, algunos con doble hilera de pines, tipo PDIP, SPDIP y SOIC. Otros están preparados para el montaje superficial como los tipos TQFP y QFN (Figura X). La nomenclatura de los dsPIC30F formada por números y letras expresan sus particulares, en donde destacan el modelo, velocidad, temperatura y tipo de encapsulado (ej. dsPIC30F4011-30I/PT → dsPIC modelo 30F4011, 30MHz, Temperatura Industrial -40ºC a +85ºC, encapsulado PT: 44-pin TQFP).

Page 4: CONTROLADORES DIGITALES DE SEÑALES 2003

Figura X. Modelos de encapsulados de la familia dsPIC30F.

LA FAMILIA dsPIC33F

Para los DSC de la familia dsPIC33F el voltaje de alimentación admite un rango comprendido entre 2 y 3,6VDC. El rango de temperatura es idéntico a los dsPIC30F. El rendimiento máximo alcanza los 40 MIPS cuando el voltaje de alimentación tiene un valor de 3,3 VDC. La Tabla X muestra un listado de las características más destacables de esta familia.

Tabla. X. Características más importantes de la familia dsPIC33F.

RECURSO RANGO DE VALORES

Memoria de Programa FLASH Hasta 256KB

Memoria de Datos RAM Hasta 30KB

Memoria de Datos EEPROM No Dispone

Temporizadores de 16 bits Hasta 9

Módulo de Captura Hasta 8 entradas

Módulo Comparador / PWM Hasta 8 salidas

Módulo PWM de Control de Motores Hasta 8

Convertidores A/D de 10 bits 2.2 Mbps, hasta 32 canales

Convertidores A/D de 12 bits 1 Mbps, hasta 32 canales

UART Hasta 2 módulos

SPITM

(8-16 bits) Hasta 2 módulos

I2C

TM 1 Módulo

QEI 1

Interfaz CODEC 1

CAN Hasta 2 módulos

Los modelos de la familia dsPIC33F

Microchip ha clasificado sus modelos de la familia dsPIC33F en dos categorías atendiendo a su aplicación.

1ª Dispositivos dsPIC33F de propósito general.

2ª Dispositivos dsPIC33F para el control de motores y sistemas de alimentación.

Page 5: CONTROLADORES DIGITALES DE SEÑALES 2003

Diferencias entre dsPIC30F y dsPIC33F

A pesar de ser muy similares, existen algunas diferencias apreciables entre ambos DSC. El rango de voltaje soportado por cada uno es diferente, así como el voltaje óptimo para su mejor rendimiento. Los dsPIC30F tienen una tensión nominal %VDC y los dsPIC33F 3,3VDC. También difieren en el número de E/S y la memoria FLASH que alcanza 144KB en los 30F y 256 KB en los 33F. Los 33F carecen de EEPROM, pero su SRAM puede llegar a 30KB, mientras que en los 30F no superan los 8 KB. Finalmente, los dsPIC33F disponen del doble de interrupciones y un Controlador de DMA.

HERRAMIENTAS DE DESARROLLO SOFTWARE

Microchip proporciona un paquete de herramientas software para los DSC muy similar a las utilizadas con los microcontroladores clásicos PIC MCU.

Las herramientas se cimientan en el conocido entorno integrado MPLAB IDE, que consiste en un software de desarrollo con un ensamblador (ASM30), un simulador software (SIM30), un compilador de C (C30) y un Inicializador Gráfico (Visual Initializer).

Para el desarrollo y análisis de algoritmos DSP se dispone de la herramienta dsPICworks que entre sus posibilidades es capaz de diseñar filtros, generar señales, proporciona operaciones para procesar señales aritméticas y digitales, entre otras capacidades.

HERRAMIENTAS DE DESARROLLO HARDWARE

La arquitectura abierta de los productos de Microchip y su generosa política comercial han conseguido inundar el mercado de herramientas de hardware y software de segundas fuentes que optimizan el desarrollo de las aplicaciones con los productos de este fabricante.

2. ARQUITECTURA INTERNA

En la Figura X se muestra el diagrama a bloques correspondiente a la arquitectura interna del modelo dsPIC30F6011 el cual se puede considerar uno de los más representativos. En un encapsulado de 80 pines en formato TQFP dispone de casi todos los recursos posibles de la familia. El diagrama de la Figura X. puede dividirse en 6 bloque principales:

Page 6: CONTROLADORES DIGITALES DE SEÑALES 2003

1. Memoria de datos: La memoria de datos RAM se estructura en dos espacios, llamados X e Y, que permiten acceso simultaneo y que pueden alcanzar hasta 8 KB de capacidad, siendo el tamaño de todas sus posiciones de 16 bits. También existe una memoria de datos no volátil tipo EEPROM, no presente en los 33F. Para una instrucción del tipo MCU (no DSP) los espacios X e Y se convierten en un solo espacio lineal.

2. Memoria de programa: Las instrucciones se alojan en la memoria de programa de tipo FLASH cuyas posiciones tienen un tamaño de 24 bits, igual que el de la mayoría de las instrucciones. La memoria de instrucciones del modelo dsPIC33F es algo más rápida que la del dsPIC30F. La memoria FLASH de los 33F trabaja a 3.3V, con el inconveniente de que sólo puede ser escrita y borrada 1000 veces. La memoria de programa puede alcanzar 144KB como máximo.

3. Camino de datos. El camino de datos donde se ejecutan las instrucciones y se procesan los datos se basa en un banco de 16 registros de trabajo (W) de 16 bits de longitud cada uno, que alimentan una ALU típica de MCU, un Motor DSP que sirve para realizar las operaciones DSP de 40 bits y una unidad de división.

4. Puertas de E/S multifunción: Los 7 puertos que agrupan las líneas de E/S para la comunicación con el exterior (PUERTO A-G) se caracterizan por soportar varias funciones multiplexadas.

5. Periféricos diversos: En cuanto a periféricos y recursos auxiliares contenidos en el dsPIC30F6010 abarcan a todos los posibles en la familia: Conversos AD, Módulo de Captura, Módulo de comparación, PWM para el control de motores, Codificador de Cuadratura, módulos de comunicación (UART,SPI,I2C y CAN), Osciladores, etc.

6. Recursos para la gestión del sistema y de la energía.

Page 7: CONTROLADORES DIGITALES DE SEÑALES 2003

Figura X. Diagrama a bloques de la arquitectura interna del dsPIC30F6010.

PUERTOS DE E/S

MULTIFUNCIÒN

MEMORIA DE DATOS MEMORIA DE PROGRAMA

GESTIÓN DEL SISTEMA

Y DE LA ENERGÍA

CAMINO DE

DATOS

PE

RIF

ER

ICO

S

Page 8: CONTROLADORES DIGITALES DE SEÑALES 2003

INTERRUPCCIONES Y EXCEPCIONES

Las interrupciones y las excepciones son causas que desvían el flujo de control en la ejecución de instrucciones. Las interrupciones son provocadas por acontecimientos externos, como los que originan los periféricos integrados o las señales aplicadas en determinadas pines (interrupciones externas). Las excepciones se producen automáticamente cuando el procesador detecta algún error o anomalía en la ejecución de una instrucción.

Existen 54 causa de interrupción diferentes en los dsPIC30F y 118 en los dsPIC33F que están producidas por los periféricos integrados o por los pines destinados a tal efecto. El usuario puede programar individualmente cada tipo de interrupción con el nivel de prioridad deseado situado entre 1 y 7, pues el nivel 0 significa su prohibición. Para resolver conflictos de prioridad entre interrupciones, se tiene en cuenta el nivel que ocupan en la tabla de vectores de interrupciones. Para atender una interrupción o excepción su nivel de prioridad debe superar el de la CPU.

Procesamiento de las interrupciones

Todos los señalizadores de las causa de interrupción son explorados cada ciclo de instrucción. Cuando existe una petición de interrupción pendiente (IRQ, Interruption Routine Qeune) se pone a 1 el bit señalizador correspondiente en el registro IFSx (Interrupt Flag Status). Para atender la interrupción es preciso que el bit de permiso correspondiente esté en 1 en el registro IECx (Interrupt Enable Control). Durante el tiempo restante del ciclo de instrucción en que se exploran las IRQ se evalúan las prioridades de las interrupciones pendientes de ser atendidas. Cuando existe una petición de una interrupción pendiente que tenga mayor prioridad que la CPU se pone en marcha el procesamiento de la misma y el procesador salva en la Pila los elementos que indican su estado actual.

Una vez que se ha atendido a la interrupción mediante una rutina de servicio ISR (Interruption Service Routine) se recuperan de la Pila, los elementos que permiten volver a situar al procesador en el entorno donde se encontraba antes de saltar.

Las instrucciones son anidables, lo que significa que cuando se está atendiendo una interrupción a través de la rutina de servicio de interrupción (ISR), puede ser interrumpida por un tipo de interrupción de mayor prioridad.

Los bits de los registros IFSx se desactivan por software. El procesamiento y atención de las interrupciones, se centra en los registros que regulan las funciones globales de las interrupciones INTCON1 e INTCON2, el registro de estado (SR - Status Register), el registro de configuración CORCON, los registros IFSx que contienen los señalizadores que informan de la petición de interrupción y los registros de control de habilitación de las interrupciones IECX y los registros de

Page 9: CONTROLADORES DIGITALES DE SEÑALES 2003

control de prioridad de las interrupciones IPCx (donde x denota el número de registro).

Figura X. Organigrama simplificado de etapas del procesamiento de una interrupción.

3. ENTORNO DE DESARROLLO MPLAB IDE

Esta herramienta, desarrollada por Microchip, y disponible en forma gratuita en su web, será el entorno de trabajo principal. El MPLAB IDE es un entorno de desarrollo dotado de un editor, un gestor de proyectos, un depurador de programas y varias herramientas para el desarrollo de aplicaciones para los microcontroladores PIC y dsPIC.

Microchip dispone de un compilador C MPLAB C30 integrable en el entorno de desarrollo MPLAB IDE con el que desarrollar programas en este lenguaje. Esta herramienta no es gratuita, aunque se puede disponer de una versión de uso libre durante 60 días.

INICIO

SE SALVA EN LA PILA ELEMENTOS QUE INDICAN

ESTADO ACTUAL

SE SALVAN REGISTROS QUE SE MANEJAN

RUTINA DE ATENCIÒN

SE RECUPERAN REGISTROS QUE SE MANEJAN

BORRAR BANDERA DE INTERRUPCIÓN

SE RECUPERAR DE LA PILA ELEMENTOS QUE INDICAN

EL ESTADO PREVIO.

FIN

Page 10: CONTROLADORES DIGITALES DE SEÑALES 2003

DESCRIPCIÓN DEL DSPIC30F4011

El controlador elegido para realizar las aplicaciones contenidas en los próximos apartados, es el dsPIC30F4011 perteneciente a la familia dedicada al control de motores y sistemas de alimentación, cuya popularidad y características terminan siendo adecuadas para las aplicaciones a desarrollar. La Tabla X, resume algunas características relevantes de este DSC. En la Figura X se muestran el diagrama del dsPIC30F4011 para el encapsulado PT: 44-pin TQFP (utilizado en el sistema de electrónica a emplear).

Tabla X. Características más significativas del modelo dsPIC30F4011.

Característica Valor

Memoria Flash 48 Kbytes

SRAM 2048 bytes

EEPROM 1024 bytes

Temporizadores 16 bits 5

Módulos de captura 4

Módulos de comparación/PWM estándares 8 canales

PWM para el control de motores 6 canales

Convertidores A/D 10 bit a 500 KBPS 9 canales

Codificador de cuadratura SI

UART 2

SPITM

1

I2C

TM 1

CAN 1

Fuentes de interrupción externa 3

Pines de E/S (máximo) 30

Encapsulados P, PT, ML

Page 11: CONTROLADORES DIGITALES DE SEÑALES 2003

Figura X. Diagrama del dsPIC30F4011 para el encapsulado PT: 44-pin TQFP.

PRIMER PROYECTO EN LENGUAJE C

Para facilitar la tarea de programador resulta recomendable trabajar con el entorno de desarrollo MPLAB IDE, con proyectos. Los proyectos incluyen varios archivos. Unos se encargan de la inicialización del controlador, definición de las distintas áreas de memoria, establecimiento de etiquetas para atender interrupciones, programa principal, etc. simplificando así, el desarrollo de aplicaciones.

La familia dsPIC ha sido optimizada para la ejecución de programas desarrollados en lenguaje C. Una buena programación en lenguaje ensamblador siempre será más optima que en lenguaje C en cuanto a tamaño de código y tiempo de ejecución. Sin embargo, el lenguaje C tiene la ventaja de ser un lenguaje más fácil de aprender y utilizar, proporcionando mayor rendimiento en la programación.

Al igual que en un programa en ensamblador, el primer paso consistirá en crear un proyecto para poder confeccionar el programa. Los siguientes pasos resumen el proceso para la creación de un proyecto en lenguaje C, para la versión 8.3 de MPLAB IDE.

1. Acceda al menú Project - > Project Wizard y pulse Siguiente.

Page 12: CONTROLADORES DIGITALES DE SEÑALES 2003

2. Seleccione el modelo del DSC (dsPIC30F4011) y pulse Siguiente. 3. Seleccione Microchip C30 ToolSuite de la lista desplegable Active

Toolsuite. 4. Da nombre al proyecto (sumac), y elija una ubicación. 5. Añada el fichero C:\Archivos de programa\Microchip\MPLAB C30\

support\gld\p30f4011.gld y márquelo con clic hasta que aparezca una letra C para que se copie a la carpeta del proyecto. (En función del dsPIC a utilizar seleccione un fichero distinto correspondiente al modelo en cuestión).

6. Finalice el asistente. 7. Cree un archivo desde el menú File->New y guárdelo en la carpeta del

proyecto con el nombre sumac.c (se debe especificar la extensión .c del archivo).

8. Añada dicho archivo al proyecto a través de la opción Project->Add files to Project… y seleccione el archivo fuente sumac.c.

De esta forma el proyecto se encuentra preparado para ser escrito y compilado. El estado del proyecto debe corresponder con el presentado en la Figura X.

Figura X. Estado del primer proyecto en lenguaje C.

Una vez realizado los pasos anteriores proceda a escribir en el archivo fuente sumac.c el siguiente código:

//Ejemplo 1: sumac.c

#include "p30f4011.h"

int main(void)

{

WREG0 = 1;

while(1)

{

WREG0 = 2+WREG0;

}

return 0;

}

Como se observa el código corresponde a un programa el cual incrementa en 2 continuamente el valor en el registro WREG0.

Page 13: CONTROLADORES DIGITALES DE SEÑALES 2003

El simulador dispone de una utilidad para manejar datos del exterior, mediante la

Enseguida, mediante la opción del menú Project->Build All, compile el proyecto. Siguiendo los pasos correctamente se deberá obtener un BUILD SUCCEEDED en la ventana output, tras construir el proyecto. También aparecerá un mensaje de alerta warning, advirtiendo que el uso de los registros en lenguaje C como WREG0 no es conveniente, lo cual resulta adecuado, ya que es más recomendable hacer uso de variables como se hace normalmente en este lenguaje.

SIMULANCIÓN DE PROGRAMAS

Para simular el ejemplo anterior existen varias opciones. La más sencilla consiste en hacer uso de la herramienta integrada en el MPLBA IDE, llamada MPLAB SIM. El primer paso para la realizar una simulación con MPLAB SIM consiste en seleccionar la herramienta, accediendo al menú Debugger->Select Tool-> MPLAB SIM. De esta forma ahora se dispone de nuevas opciones Run, Animate, Step Into, Step Over, etc. que permiten hacer uso del depurador de programa para ejecutar código paso a paso, animarlo, colocar puntos de ruptura, etc.

Usando la ventana Watch del menú View es posible añadir elementos a monitorear (registros, variables, etc.). En los siguientes apartados se abordaran algunos otros elementos de simulación comunes.

Para analizar las características del simulador se dispone en el menú Debugger->Setting… de varias opciones de configuración.

Figura X. Configuración del simulador.

Mediante el cuadro de diálogo de la Figura X, se puede configurar aspectos como frecuencia del procesador ( MIPS x 4), opciones de ruptura, la entrada y salida serie de la UART, entre otras opciones. El simulador permite controlar el tiempo transcurrido en la ejecución del programa. Así, se puede colocar un punto de ruptura y al parar en dicho punto, mediante el menú Debugger->Stop Watch se puede conocer el número de ciclos de instrucciones ejecutadas, el tiempo transcurrido desde que inicio el programa hasta dicho punto, etc.

Page 14: CONTROLADORES DIGITALES DE SEÑALES 2003

4. PROGRAMACIÓN DE PERIFERICOS CON VISUAL INITIALIZER

Los periféricos integrados en el dsPIC pueden desarrollar distintas tareas en función de cómo estos serán configurados. Para facilitar esta tarea de la inicialización de periféricos del controlador (puertos de entrada/salida, convertidores analógicos, temporizadores, etcétera) el entorno de desarrollo MPLAB IDE dispone de una herramienta denominada Visual Initializer, VDI (Visual Device Initializer) o Inicializador Visual.

VISUAL INITIALIZER

El Visual Initializer o VDI es una herramienta que incorpora el MPLBA IDE con el objetivo de simplificar la tarea de configuración del dsPIC. El VDI hace que la tarea sea tan fácil como pulsar, arrastrar iconos y cambiar los parámetros en un cuadro de dialogo. Una vez completada esta labor, genera el código necesario para usar tanto en los programas en ensamblador como en lenguaje C.

La herramienta VDI también comprueba si existe algún tipo de inconsistencia en las configuraciones y genera mensaje de error en caso de existir conflictos en las asignaciones de pines, memoria, interrupciones, etc.

Para acceder a esta herramienta dentro del entorno MPLAB IDE seleccione Tools->Visual Initializer. Además del nuevo menú aparecerá en pantalla la ventana principal de la herramienta (Figura X).

Figura X. Pantalla principal de la herramienta Visual Initializer.

Esta pantalla se encuentra dividida en 2 partes. La primera, situada verticalmente en la parte izquierda, contiene las distintas opciones configurables del controlador

Page 15: CONTROLADORES DIGITALES DE SEÑALES 2003

(RTC, DSP, I/O Ports,…). El resto de la ventana, donde aparece el controlador, sirve para representar gráficamente los elementos inicializados en el mismo.

Para configurar cualquier periférico hay que seleccionarlo en el panel de la izquierda y arrastrarlo sobre la representación del controlador. Al soltarlo, aparecerá un icono sobre el controlador. Haciendo doble clic sobre dicho icono, se presentara un cuadro de dialogo el cual se deberá complementar para configurar dicho periférico. Para eliminar una configuración basta con arrastrar el icono creado en el controlador a una parte de la ventana vacía.

Una vez configurados los periféricos deseados, se puede generar el código correspondiente a esta configuración mediante la opción Visual Initializer-> Code Generation. El código generado (en ensamblador) se podrá incorporar al proyecto al código fuente, independientemente que este sea escrito en ensamblador o C. Desde el menú Visual Initializer-> Code Generation Options se pueden configurar las opciones del código a generar.

Configuración de puertos de E/S con VDI

Como primer ejemplo de la creación de un proyecto con el VDI, suponga el diagrama de conexión de la Figura X. El dsPIC recibirá una señal digital por un pin procedente de un interruptor y sacará por otro pin el valor invertido de la entrada, encendiendo o apagando un LED.

Figura X. Diagrama de conexión para una entrada y una salida.

Para llevar a cabo esta implementación, se deberá configurar un pin del controlador como entrada y otro como salida. Después el programa sólo deberá leer el valor del pin de entrada, invertir dicho valor, y mostrarlo por el pin de salida.

Cree un proyecto para el controlador dsPIC30F4011 y acceda al menú de Visual Initializer. En la barra vertical de la derecha elija la opción I/O Ports. Al hacerlo, aparecerán distintos iconos de las distintas puertas que dispone el controlador. Elija el puerto D y arrastre hasta el controlador. A continuación haga doble clic sobre el icono en el controlador, para hacer aparecer el cuadro de diálogo de la Figura X.

Page 16: CONTROLADORES DIGITALES DE SEÑALES 2003

Figura X. Cuadro de dialogo de configuración del puerto D.

En la pestaña RD0 de la Figura X, configure el PIN0 del puerto D, como entrada para el interruptor. Para ello, en la lista desplegable Data Direction, seleccione Input. En la pestaña RD1, configure el PIN1 del puerto D como salida, seleccionando output en la lista Data Direction, para colocar ahí el LED correspondiente.

Ya configurados los periféricos, acceda al menú Visual Initializer->Code Generation Options y marque Generate code only for features/resource on processor package. A continuación, acceda al menú Visual Initializer->Code Generation para generar el código correspondiente.

En el panel de proyecto aparecerá un fichero llamado init_dsPIC30f4011, el cual contiene la rutina de inicialización. Para incluir dicha rutina de inicialización bajo un lenguaje C, se deberá incluir un llamado a la función Visualnitialization(). El programa será el siguiente:

//Ejemplo 2: Configuración de puertos de E/S usando VDI

#include "p30f4011.h"

int main(void)

{

VisualInitialization(); //Inicialización de puertos

while(1) //Bucle infinito

{

if(PORTDbits.RD0 == 0) //Si el bit RD0 es 0

PORTDbits.RD1 = 1; //Establecer nivel alto en RD1

else

PORTDbits.RD1 = 0; //En caso contrario nivel bajo

}

return 0;

}

Page 17: CONTROLADORES DIGITALES DE SEÑALES 2003

El simulador dispone de una utilidad para manejar datos del exterior, mediante la creación de los llamados escenarios, los cuales son creados a través del menú Debugger->Stimulus Controller->New Scenario.

5. PERIFERICOS AVANZADOS CON VDI

Existe una gran variedad de periféricos y dispositivos complementarios que se integran en los diversos modelos de DSC. Algunos de los recursos comunes en los DSC son:

1. Temporizadores de propósito general y WDT (Watchdog Timer) 2. Convertidores AD de 10 bits de alta velocidad y convertidores AD de 12 bits de

alta resolución. 3. Módulo de Captura. 4. Módulo de comparación y PWM. 5. Módulo PWM para control de motores. 6. Módulo UART. 7. Módulo I2C, entre otros.

Cada modelo integra una cantidad de recursos variables según su orientación.

Las siguientes secciones se centran en la descripción y uso del módulo PWM para control de motores y el módulo UART, así como del recurso de interrupciones externas y de cambio de estado lógico en los puertos de E/S, los cuales resultan necesarios para cumplir con los objetivos del Módulo III.

MÓDULO UART

La UART (Universal Asynchronous Receiver-Transmitter) es uno de los módulos seriales de E/S disponible en los DSC. La UART es un sistema usado para comunicarse con dispositivos periféricos, tales como computadoras personales, RS-232 y RS-485.

Los DSC disponen de uno a más UART según del modelo que se trate. El módulo UART consta de un transmisor receptor asíncrono, bidireccional con un buffer de transmisión y recepción de 4 caracteres. Dispone de dos pines, denominados TX y RX, que permiten el envió y recepción de información, a una frecuencia determinada (baudrate).

La UART funciona en modo full-duplex con datos de 8 o 9 bits, 1 o 2 bits de STOP y un bit de paridad par o impar. Entre otros, para trabajar con el módulo UART, se utilizan los registros UxTXREG para los datos a transmitir, UxRXREG para los datos recibidos, UxMODE para configurara el módulo, UxBRG para configurar la

Page 18: CONTROLADORES DIGITALES DE SEÑALES 2003

velocidad de transferencia en baudios y UxSTA para comprobar el estado del módulo (donde `x´ numera el módulo particular).

Transmisión de datos usando la UART usando VDI

Una vez creado un proyecto para el controlador dsPIC30F4011 e inicializada la herramienta Visual Initializer, seleccione el módulo UART1, arrastre hasta el dsPIC y haga doble clic para acceder al cuadro de dialogo (Figure X).

Figura X. Cuadro de dialogo para la configuración del módulo UART.

Habilite el módulo activando la casilla Enable on Startup. Usando las casillas respectivas configure una comunicación a 115200 baudios (Baud Rate), 8 bits de datos (Data Bits), 1 bit de paro (Stop Bits) y sin paridad (Parity). Finalmente en la pestaña Transmitter active la casilla Enable Transmit para permitir la transmisión de datos. Genere el código correspondiente a esta configuración mediante la opción del menú Visual Initializer->Code Generation.

Por último, cree un archivo fuente en C que permitirá transmitir el mensaje Hola Mundo por dicho puerto, bajo el siguiente código.

//Ejemplo 3: Configuración de UART - transmisión

#include "p30f4011.h"

int main(void)

{

Page 19: CONTROLADORES DIGITALES DE SEÑALES 2003

unsigned char mensaje[] = "Hola mundo\n";

int i = 0;

VisualInitialization(); //Inicialización de recursos

while(mensaje[i]!='\0') //Verificar fin de cadena

{

while(U1STAbits.TRMT==0); //Espera a poder transmitir

U1TXREG = mensaje[i]; //Escribe carácter

i++;

}

return 0;

}

Usando el simulador MPLAB SIM dentro del entorno MPLAB, es posible observar los datos transmitidos por la UART, accediendo al menú Debugger->Setting… y, en la pestaña UART I/O, activando la casilla Enable UART IO y la opción Windows en el marco Output para que el resultado de la salida del nódulo se visualice en pantalla. Tanto la transmisión como la recepción vía UART pueden ser atendidas por interrupción.

Recepción de datos usando la UART usando VDI

Siguiendo el procedimiento anteriormente descrito para la configuración del módulo UART mediante VDI, situado en la ventana de dialogo correspondiente (Figura X), haga clic en la pestaña Receiver y active la casilla Enable Interrupt on Startup , para habilitar la recepción de datos por interrupción y genere el código.

EJERCICIO 1: Envío y recepción de datos mediante la UART

Realice un programa en C, para el dsPIC30F4011, el cual reciba una trama de datos vía UART y transmita la trama recibida en forma invertida. Por ejemplo si se recibe la trama de caracteres La Roma amor se transmitirá la trama roma amoR. El fin de cadena será identificado con un retorno de carro /r (ENTER). Implemente el programa generado mediante el módulo de electrónica provisto para este fin.

Sugerencias:

Utilice la recepción de UART mediante interrupción. Defina en la rutina de servicio de interrupción, una sección de código que le permita almacenar los datos recibidos, mientras no se identifique el carácter /r, cuando suceda esto último realice la transmisión de los datos (en orden inverso al recibido), tal como se describió en esta sección.

Page 20: CONTROLADORES DIGITALES DE SEÑALES 2003

MÓDULO PWM PARA EL CONTROL DE MOTORES

El modulo de control de motores PWM (MCPWM, motor control PWM) simplifica la tarea de generar múltiples, salidas sincronizadas de pulsos de ancho variable. En particular este módulo, resulta útil en aplicaciones de potencia y control de motores. Existen grupos de dispositivos DSC destinados al control de motores, pudiendo tener 8 salidas para dispositivos de 64 pines o más, o 6 salidas en caso de un número menor.

Los pines de salida del módulo MCPWM se agrupan en parejas, una por cada generador PWM, para controlar la polaridad de las señales de salida, que pueden ser iguales o complementarias según se requiera (PWM4H-PWM4L, PWM3H-PWM3L, PWM2H-PWM2L y PWM1H-PWM1L). El módulo PWM permite varios modos de operación (free runnnig, single shot, continuous up/down) los cuales resultan útiles en aplicaciones específicas de control de potencia.

Para la manipulación del módulo MCPWM entre otros se utilizan los registros PTCON, PTMR, PTPER y los registros de ciclo útil PDC, PDC2, PDC3 y PDC según sea el caso.

El base de tiempo del módulo MCPWM es provisto por un temporizador de 15 bits con pre escala (1:1, 1:4, 1:16 o 1:64) y pos escala (1:1 a 1:16). El base de tiempo es accesible vía el registro PTMR <14:0>, y configurado vía el registro PTCON. El registro PTPER es un registro de 15 bits usado para el conteo del periodo para la base de tiempo del PWM, así el periodo del PWM puede ser determinado usando la ecuación x.

(X)

Si el tiempo base del PWM es configurado para uno de los modos Up/Down Count, el periodo PWM será el doble del valor provisto por la ecuación X.

La máxima resolución (en bits) para un dispositivo con un oscilador y una frecuencia PWM dada puede ser determinada usando la formula X.

(X)

Los registros PDCx son usados para especificar los valores de ciclo de trabajo para el modulo PWM. El valor en cada registro PCDx determina la cantidad de tiempo que la salida PWM estará en un estado activo. Aunque el reloj para el temporizador de la base de tiempo es TCY, la resolución del ciclo de trabajo es TCY/2, así por cada incremento del valor en PTMR se darán dos de PDCx, haciendo la resolución efectiva del PWM doble.

En la figura X. se ilustra la relación entre los registros PTMR, PTPER y el ciclo de trabajo, en las dos formas en que se produce la señal PWM.

Page 21: CONTROLADORES DIGITALES DE SEÑALES 2003

a) b)

Figura X. a) PWM con alineado a un flanco (modos free runnnig y single shot), b) PWM alineado al centro (modo continuous up/down)

Configuración del módulo MCPWM usando VDI

Creado un proyecto e inicializada la herramienta Visual Initializer, seleccione el módulo PWM 1, arrastre hasta el dsPIC y haga doble clic para acceder al cuadro de dialogo (Figure X).

En la pestaña Time Base habilite el módulo MCPWM (Enable on Startup), establezca el periodo del PWM (Desired Period) en 0.05ms (f = 20kHz), en este caso emplee los valores por defecto restantes. Para el caso particular, sitúese en la pestaña PWM1 y habilite la salida del PWM1H (High Side), y establezca el ciclo de trabajo (Desired Duty) en 50% (dado que la resolución del ciclo de trabajo es doble, se obtendrá un ciclo al 25%).

a)

Page 22: CONTROLADORES DIGITALES DE SEÑALES 2003

b)

Figura X. Cuadro de dialogo para la configuración del módulo MCPWM. a) Pestaña PWM1, b) Pestaña de base de tiempo.

Genere el código correspondiente y cree un archivo fuente en C que incluya un llamado a la función Visualnitialization(), y un ciclo infinito que permita mantener al DSC en operación continua y por tanto a la señal PWM.

Utilice la herramienta Simulator Logic Analizer del simulador MPLAB SIM dentro de MPLAB para observar la señal PWM generada, accediendo al menú View-> Simulator Logic Analizer.

EJERCICIO 2: Control de velocidad de un motor de DC

Basado en el programa generado en el Ejercicio 1: Desarrolle un programa en C, para el dsPIC30F4011, el cual permita variar la velocidad y dirección de un motor de DC, en base a una serie de parámetros recibidos vía UART. Implemente el programa generado mediante el módulo de electrónica provisto para este fin.

Sugerencias:

Para modificar la velocidad del motor de DC, configure el módulo MCPWM como se indico, y modifique el registro PDC1 en base a los parámetros recibidos vía UART. Debido a que la resolución del PWM resulta ser de 11 bits, se requerirá enviar dos datos a través de la UART que indiquen el valor a colocar en PDC1. Utilice el pin PWM1L como salida.

Para controlar la dirección (DIR1 – RE0) y paro (BREAK1 – RF0) del motor de DC, habilite dos pines de salida del sistema de electrónica provisto (véase esquemáticos de electrónica correspondientes), y modifique estas salidas en base a los parámetros recibidos vía UART. Asía la trama recibida tendrá la siguiente forma

# <DIR><PWM>

donde: # cabecera de la trama (1 byte) <DIR> dirección del motor (1 byte) <PWM> dirección del motor (2 bytes)

Page 23: CONTROLADORES DIGITALES DE SEÑALES 2003

INTERRUPCIONES EXTERNAS

Los dsPIC30F admiten hasta fuentes de interrupciones externas (INT0-INT4). Cada pin de interrupción externa cuenta con un circuito de detección de falco para detectar el evento de interrupción. El registro INTCON2 tiene cinco bits de control (INT0EP-INT4EP) que selección la polaridad de los circuitos de detección de flanco. Cada pin asociado a una interrupción puede ser programado para interrumpir el CPU en un evento de flanco de subida o flanco de bajada

Configuración de interrupciones externas usando VDI

Una vez que se halla creado un proyecto e inicializado la herramienta VDI, sin arrastra ningún objeto al dsPIC, haga doble clic sobre el icono Interrupts and Traps para acceder al cuadro de dialogo (Figure X).

Para habilitar un interrupción utilice las flechas de dirección en el cuadro de dialogo y asigne una prioridad (Priority) y el flanco del evento (Rising). El nombre de la ISR es resaltado en color _INT0Interrupt. Este cuadro de dialogo permite configurar parámetros como la prioridad del CPU (Initial CPU priority) y la anidación de interrupciones (Disable interrupt nesting).

Figura X. Cuadro de dialogo para la configuración del interrupciones.

EJERCICIO 3: Manejo de encoders

Basado en los programas generados en los Ejercicios 1 y 2: Genera un programa en C, para el dsPIC30F4011, el cual permita registrar y enviar (vía UART) la posición angular del eje de un motor de DC, al cual es asociado un encoder. Implemente el programa generado mediante el módulo de electrónica provisto para este fin.

Page 24: CONTROLADORES DIGITALES DE SEÑALES 2003

Sugerencias:

a) Habilite un pin con función de interrupción externa (RE8/INT0), al cual se conectara el Canal A del encoder. De igual forma, designe un pin de entrada (RB6) que permitirá conocer la dirección de giro, a través del Canal B. Una vez configurados los recursos, defina una rutina ISR para la interrupción externa la cual contabilice (incrementando y disminuyendo de acuerdo al valor en el Canal B) los eventos de interrupción externa producidos por la señal del Canal A. Con el fin de darle robustez a la cuenta del encoder emplee un contador de 24 bits (defina el valor medio del registro de 24 bits (0x800000) como el valor 0, de forma tal que pueda identificar valores positivo y negativos de ángulo).

b) Empleando la rutina ISR para la UART permita la recepción de un carácter (&) que indique la lectura de la cuenta del encoder (equivalente a la posición). Así, cuando se reciba el carácter (&) se enviara la cuenta actual del encoder (3 bytes).

NOTA: Ponga particular atención a las prioridades asignadas a cada fuente de interrupción. Adicional:

Realice los cálculos necesarios para enviar el equivalente de la cuenta en desplazamiento angular (º o rad), tomando en cuenta los parámetros del encoder.

MÓDULO DE NOTIFICACIÓN DE CAMBIO

En algunos DSC existen hasta 24 pines de E/S que tiene la posibilidad de generar peticiones de interrupción al producirse un cambio de su estado lógico. A dichos pines, llamados CN (Change Notification), se les son asociados cuatro registros. Los registros CNEN1 y CNEN2 contienen los bits de control CNxIE, donde `x´ denota el número de pin de entrada CN, los cuales activan o desactivan la petición de interrupción. Los registros CNPU1 y CNPU2 contienen los bits de control CNxPUE, los cuales permiten habilitan o deshabilitar el circuito pull-up asociado a cada uno de los pines CN.

Configuración del módulo CN usando VDI

Seleccione el módulo CN ubicado en el apartado de I/O Ports, arrastre hasta el dsPIC y haga doble clic para acceder al cuadro de dialogo (Figure X).

Page 25: CONTROLADORES DIGITALES DE SEÑALES 2003

Figura X. Cuadro de dialogo para la configuración del módulo CN.

Ubicado en una de las pestañas CN (para el caso CN2 y CN3, que corresponden a RB0 y RB1), habilite la notificación de cambio de estado lógico (Change Notification), el circuito pull-up asociado al pin (CN Pullup) y la interrupción (Enable Interrupt on Startup). La interrupción resulta común para todos los pines con función CN.

EJERCICIO 4: Manejo de interruptores de limite

Basado en los programas generados en Ejercicios 1,2 y 3: Desarrollo un programa en C, para el dsPIC30F4011, el cual permita parar un motor de DC de acorde a dos interruptores de limite (limit switch) que indicaran la llegada del motor a posiciones angulares limites. Así cuando los interruptores se activen, el motor se detendrá de acorde al sentido de giro (un interruptor se asociara con el giro a la derecha y otro a la izquierda). Una vez que los interruptores cambien de estado, se enviara vía UART esta indicación usando un carácter. Implemente el programa generado mediante el módulo de electrónica provisto para este fin.

Page 26: CONTROLADORES DIGITALES DE SEÑALES 2003

EJERCICIO 5: Software para tarjeta de adquisición

Basado en los programas generados en ejercicios previos: Desarrollo e implemente un programa en C, para el dsPIC30F4011 el cual permita: 1. Modificar la velocidad y sentido de giro de un motor de DC, mediante una serie de parámetros

recibidos a través de la UART (véase Ejercicio 2). 2. Obtener vía UART de manera indirecta la posición del motor de DC, a través del encoder

asociado a este (véase Ejercicio 3). 3. Controlar el paro del motor de DC en base a las señales provista por dos interruptores de limite

que indican las posiciones angulares limites, enviando vía UART el estado de los interruptores cuando la PC lo solicite (véase Ejercicio 4).

Sugerencia:

Defina una máquina de estados dentro del DSC cuyo estado inicial sea la espera de un dato proveniente de la computadora (véase Figura X). Una vez recibido el dato, el DSC definirá una acción de acuerdo al dato recibido, tal como se sugiere en la Tabla X. Una vez realizada la tarea, el DSC volverá a su estado inicial de espera de dato.

Figura X. Sugerencia de máquina de estados.

Tabla X. Sugerencia de protocolo de intercambio de datos para el control de un motor de DC.

Trama enviada desde la PC Acción tomada por el DSC

Trama enviada hacia la PC Cabecera Argumentos

'#' <DIR (1 byte)>

<PWM (2 bytes)>

Modificación de la velocidad y dirección del motor de DC de acorde a los argumentos recibidos.

'&'

Construcción de trama a re-enviar, en la cual se agrupe un dato de 24 bits (cuenta del encoder) y un dato de 8 bits que represente el estado de los interruptores de limite.

<ESTADO LS (1 byte)> <POSICIÓN (3 bytes)>