Instituto Tecnologico de Costa Rica
Escuela de Ingenierıa Electronica
Unidad Controladora de Procesos
Manual de Usuario
Ejecutor:
Daniel Castro Molina
Cartago, 2 de junio de 2008
Indice general
1. Introduccion 1
2. Diagrama de pines de la placa base 2
3. Descripcion de hardware 6
3.1. Bus de datos SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.2. Bus de datos I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.3. Bus de datos de 16 bits . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.3.1. Puerto de comunicacion UART . . . . . . . . . . . . . . . . . . 14
3.4. Puerto de comunicacion Ethernet . . . . . . . . . . . . . . . . . . . . . 16
3.5. Entradas Analogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.6. Salidas Analogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.7. Interface de Encodificador de Cuadratura (QEI) . . . . . . . . . . . . . 23
3.8. Salidas de control PWM: . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.9. Funciones de control de dispositivos IO . . . . . . . . . . . . . . . . . . 26
3.10. Modulo de Conversion Analogico Digital: . . . . . . . . . . . . . . . . . 27
3.10.1. Opciones de configuracion del modulo: . . . . . . . . . . . . . . 27
3.10.2. Funciones del modulo: . . . . . . . . . . . . . . . . . . . . . . . 29
3.11. Modulo de comunicaciones I2C: . . . . . . . . . . . . . . . . . . . . . . 31
3.11.1. Opciones de configuracion del modulo: . . . . . . . . . . . . . . 31
3.11.2. Funciones del modulo: . . . . . . . . . . . . . . . . . . . . . . . 32
i
INDICE GENERAL ii
3.12. Modulo de comunicaciones SPI: . . . . . . . . . . . . . . . . . . . . . . 35
3.12.1. Opciones de configuracion del modulo: . . . . . . . . . . . . . . 35
3.12.2. Funciones del modulo: . . . . . . . . . . . . . . . . . . . . . . . 36
3.13. Modulo de comunicaciones UART: . . . . . . . . . . . . . . . . . . . . 38
3.13.1. Opciones de configuracion del modulo: . . . . . . . . . . . . . . 38
3.13.2. Funciones del modulo: . . . . . . . . . . . . . . . . . . . . . . . 39
3.14. Modulo PWM: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.14.1. Opciones de configuracion del modulo: . . . . . . . . . . . . . . 41
3.14.2. Funciones del modulo: . . . . . . . . . . . . . . . . . . . . . . . 43
3.15. Modulo Interfaz de Encodificador de Cuadratura (QEI): . . . . . . . . . 45
3.15.1. Opciones de configuracion del modulo: . . . . . . . . . . . . . . 45
3.15.2. Funciones del modulo: . . . . . . . . . . . . . . . . . . . . . . . 46
4. Esquema general del software 48
4.1. Requerimientos mınimos de software y hardware . . . . . . . . . . . . . 48
4.2. Abrir el proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3. Estructura del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3.1. Descripcion de archivos importantes . . . . . . . . . . . . . . . . 49
5. Guia de comandos 51
5.1. Estructura de los comandos . . . . . . . . . . . . . . . . . . . . . . . . 52
5.2. Secuencia de Envıo y Confirmacion . . . . . . . . . . . . . . . . . . . . 52
5.2.1. Secuencia de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . 52
6. Lista de Comandos 55
6.1. Funciones de hardware y sistema . . . . . . . . . . . . . . . . . . . . . 56
6.1.1. Iniciar o detener maquina virtual . . . . . . . . . . . . . . . . . 56
6.1.2. Devuelve registro de estado . . . . . . . . . . . . . . . . . . . . 56
6.1.3. Borra la memoria EEPROM . . . . . . . . . . . . . . . . . . . . 57
INDICE GENERAL iii
6.1.4. Guarda la configuracion de sistema en EEPROM . . . . . . . . 58
6.1.5. Recibe el archivo de aplicacion . . . . . . . . . . . . . . . . . . . 58
6.1.6. Recibe un archivo de configuracion IO . . . . . . . . . . . . . . 58
6.1.7. Reinicia el sistema . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.1.8. Asigna un valor a un elemento de salida (DAC o PWM) . . . . 59
6.1.9. Define un rango de medicion a un canal ADC . . . . . . . . . . 59
6.1.10. Define un rango de medicion a un canal DAC . . . . . . . . . . 60
6.1.11. Lee un canal ADC . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2. Funciones de modulos parte I . . . . . . . . . . . . . . . . . . . . . . . 61
6.2.1. Cambiar la configuracion de un filtro . . . . . . . . . . . . . . . 61
6.2.2. Configurar un modulo de funcion de transferencia . . . . . . . . 62
6.2.3. Recibe coeficientes Kp, Ki, Kd, Ts para configurar PID . . . . . 63
6.2.4. Recibe parametros de configuracion de oscilador senoidal . . . . 64
6.2.5. Recibe parametros de configuracion de oscilador rectagular . . . 65
6.2.6. Recibe parametros de configuracion de oscilador triangular . . . 65
6.2.7. Recibe parametros de configuracion de oscilador triangular . . . 66
6.2.8. Recibe parametros de configuracion de K . . . . . . . . . . . . . 66
6.3. Funciones de modulos parte II . . . . . . . . . . . . . . . . . . . . . . . 67
6.3.1. Crear o destruir modulos virtuales . . . . . . . . . . . . . . . . . 67
6.3.2. Ajusta ganancia de un modulo GAIN . . . . . . . . . . . . . . . 67
6.3.3. Ajusta lımites de un modulo SAT . . . . . . . . . . . . . . . . . 68
6.3.4. Ajusta lımites de un modulo NOISE . . . . . . . . . . . . . . . 68
6.3.5. Funciones de captura e informacion . . . . . . . . . . . . . . . . 68
6.3.6. Recibir parametros de configuracion de la tarea de captura . . . 68
6.3.7. Recibir parametros de configuracion de la tarea de captura . . . 69
6.3.8. Devolver valor de los registros de la tarea de captura . . . . . . 70
6.3.9. Enviar valores de salida de los modulos virtuales . . . . . . . . . 70
INDICE GENERAL iv
6.3.10. Guardar valor en un registro de proposito general . . . . . . . . 71
6.3.11. Enviar informacion acerca porcentaje de uso de la CPU . . . . . 71
7. Cambiar la configuracion de los perifericos 72
8. Creacion de modulos 77
8.1. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8.2. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8.3. Valor tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.4. Numero base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.5. Funcion NEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
8.6. Funcion DESTROY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.7. Funcion GETPTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
8.8. Funcion de configuracion . . . . . . . . . . . . . . . . . . . . . . . . . . 82
8.9. Funcion SAMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Esquemas 86
Bibliografıa 97
Indice de figuras
2.1. Diagrama de pines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.1. Estructura del hardware de la unidad . . . . . . . . . . . . . . . . . . . 7
3.2. Conexion del modulo SPI . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3. Esquema del modulo SPI en la unidad . . . . . . . . . . . . . . . . . . 10
3.4. Conexion del modulo I2C . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.5. Esquema del modulo I2C en la unidad . . . . . . . . . . . . . . . . . . 12
3.6. Conexion del puerto UART al PC . . . . . . . . . . . . . . . . . . . . . 14
3.7. Esquema del puerto UART . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.8. Conexion del puerto Ethernet . . . . . . . . . . . . . . . . . . . . . . . 16
3.9. Sistema Xport AR de Lantronix . . . . . . . . . . . . . . . . . . . . . . 16
3.10. Esquema del puerto Ethernet . . . . . . . . . . . . . . . . . . . . . . . 17
3.11. Conexion de las entradas analogicas . . . . . . . . . . . . . . . . . . . . 18
3.12. Esquema de las entradas analogicas . . . . . . . . . . . . . . . . . . . . 20
3.13. Conexion de las salidas analogicas . . . . . . . . . . . . . . . . . . . . . 21
3.14. Esquema de las salidas analogicas . . . . . . . . . . . . . . . . . . . . . 22
3.15. Conexion de QEI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.16. Esquema de QEI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.17. Conexion de PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.18. Esquema de PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
v
INDICE DE FIGURAS vi
3.19. Estructura C de la capa drivers . . . . . . . . . . . . . . . . . . . . . . 27
3.20. Curvas representativas de los modos de operacion offset del PWM . . . 43
5.1. Algoritmo de la tarea de comunicacion . . . . . . . . . . . . . . . . . . 53
7.1. Comando recibido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Capıtulo 1
Introduccion
La unidad controldadora de procesos fue disenada para facilitar la creacion de
estructuras de control y regulacion para el laboratorio de control automatico del escuela
de Ingenierıa en Electronica del ITCR.
Esta unidad controladora permite utilizar interfaces de entrada y salida como con-
vertidores analogicos, buses de comunicacion SPI, I2C, decodificadores de cuadratura y
generacion PWM, como herramientas de hardware para facilitar la conexion de plantas
experimentales.
La unidad tambien dispone de algoritmos y rutinas de filtros digitales, funciones de
control, funciones generales de operaciones comunes y matematicas. Ademas posee un
convertidor serial/ethernet con servidor web permitiendose crear paginas y aplicaciones
tipo JAVA Applets.
Se recomienda leer [13], ya que contiene informacion muy detallada sobre el funcio-
namiento del microcontrolador.
1
Capıtulo 2
Diagrama de pines de la placa base
AN#+: Entrada analogica positiva. 10V maximo.
AN#-: Entrada analogica negativa. -10V mınimo.
AOUT#: Salida analogica. 10 mA maximo.
AGND: Tierra analogica.
QEA: Entrada A del encodificador de cuadratura. 5V CMOS.
QEB: Entrada B del encodificador de cuadratura. 5V CMOS.
INDX: Entrada INDEX del encodificador de cuadratura. 5V CMOS.
PWM#H: Salida PWM primaria. Colector abierto, 5V.
PWM#L: Salida PWM secundaria. Colector abierto, 5V.
DIR#: Salida PWM de direccion. Colector abierto, 5V.
FLTA: Entrada A por falla en motor. 5V CMOS.
FLTB: Entrada B por falla en motor. 5V CMOS.
2
CAPITULO 2. DIAGRAMA DE PINES DE LA PLACA BASE 3
Figura 2.1: Diagrama de pines.
CAPITULO 2. DIAGRAMA DE PINES DE LA PLACA BASE 4
TEST#: Punto de prueba salida analogica del acondicionador de senal.
MCLR: Salida para conexion de boton de reinicio. Tipo NO.
ACC: Salida para conexion de boton de accion. Tipo NO.
SDO: Salida digital de bus SPI. 5V CMOS.
SDI: Entrada digital de bus SPI. 5V CMOS.
SCK: Salida digital de reloj SPI. 5V CMOS.
SPI#: Salida de seleccion dispositivo SPI. 5V CMOS.
SDA: Entrada - Salida de datos bus I2C. 5V CMOS.
SCL: Salida digital de reloj I2C. 5V CMOS.
A1: Anodo de LED indicador de RUN. 5V TTL, 5mA maximo.
K1: Catodo de LED indicador de RUN.
A2: Anodo de LED indicador de ERROR. 5V TTL, 5mA maximo.
K2: Catodo de LED indicador de ERROR.
T#: Entrada para temporizador, sincronizador o entrada digital de proposito
general. 5V CMOS.d
V+: Entrada de alimentacion, +12V.
V-: Entrada de alimentacion, -12V.
GND: Tierra digital.
TX1: Transmision puerto serie RS232, directo del XPort.
RX1: Recepcion puerto serie RS232, directo del XPort.
CAPITULO 2. DIAGRAMA DE PINES DE LA PLACA BASE 5
CTS1: Clear to send puerto serie RS232, directo del XPort.
RTS1: Ready to send puerto serie RS232, directo del XPort.
TX2: Transmision puerto serie RS232, directo del microcontrolador.
RX2: Recepcion puerto serie RS232, directo del microcontrolador.
CTS2: Clear to send puerto serie RS232, directo del microcontrolador.
RTS2: Ready to send puerto serie RS232, directo del microcontrolador.
Capıtulo 3
Descripcion de hardware
Un esquema simple del hardware de toda la unidad se muestra en la figura 3.1;
como unidad central se utilizo el dsPIC33FJ256MC710 previamente descrito. El sistema
cuenta con:
3 buses de datos: SPI, I2C y uno paralelo de 16 bits (desarrollo parcial): Para
expansion de hardware.
Puerto de comunicacion UART: Para operacion y configuracion local de la uni-
dad.
Puerto de comunicacion Ethernet mediante Lantronix XPortAR: Para operacion
y configuracion remota de la unidad.
4 entradas y 2 salidas analogicas: De rangos fijos seleccionables.
Control de motores: Mediante QEI y PWM.
Puerto RJ11 para programacion del dsPIC mediante MPLAB ICD2.
Nota:
No debe utilizarse las fuentes de la unidad para alimentar cualquier conexion ex-
terna. Para estos casos utilizase una fuente externa.
6
CAPITULO 3. DESCRIPCION DE HARDWARE 7
Figura 3.1: Estructura del hardware de la unidad.
CAPITULO 3. DESCRIPCION DE HARDWARE 8
3.1. Bus de datos SPI
El modulo SPI (Interface Serial para Perifericos) es un bus de comunicaciones serial
sıncrono que se utiliza para comunicaciones entre circuitos integrados a corta distancia,
estos circuitos integrados son por lo general memorias, microcontroladores, sensores
digitales, etc. Es muy popular porque el protocolo es muy simple y veloz (10Mbps
maximo).
La unidad cuenta con 3 pines de bus y 8 pines de seleccion de dispositivos:
SCK: Salida del reloj de sincronizacion.
SDO: Salida de datos seriales.
SDI: Entrada de datos seriales.
SSx: Hasta 8 salidas para seleccion de dispositivos activos en bajo.
La figura 3.2 muestra el diagrama de conexion con otros dispositivos.
La figura 3.3 muestra el circuito de interfaz con el microcontrolador, se utilizan
buffers no inversores 74HC7014 tipo Schmitt trigger para proteger las entradas del
microcontrolador, cada salida soporta hasta 20mA de corriente compatible con los
niveles TTL de +5VDC.
CAPITULO 3. DESCRIPCION DE HARDWARE 9
Figura 3.2: Conexion del modulo SPI.
CAPITULO 3. DESCRIPCION DE HARDWARE 10
Figura 3.3: Esquema del modulo SPI en la unidad.
CAPITULO 3. DESCRIPCION DE HARDWARE 11
3.2. Bus de datos I2C
El modulo I2C ( bus de Circuitos Inter–Integrados) es un bus de datos serial de
2 lıneas que permite la conexion de hasta 127 dispositivos en modo simple y hasta
1023 dispositivos en modo extendido sobre el mismo bus, la velocidad de comunicacion
puede ser de hasta 400Kbps en versiones antiguas pero se puede lograr 1Mbps en nuevas
versiones limitando el numero de dispositivos conectados al bus1.
Los pines del modulo son:
SCL: Salida del reloj de sincronizacion.
SDA: Pin bidireccional de datos seriales.
La figura 3.4 muestra el diagrama de conexion con otros dispositivos.
Figura 3.4: Conexion del modulo I2C.
Se utilizo el CI P82B96 el cual es un buffer bidireccional especial para I2C. Es-
te buffer permite extender la comunicacion hasta 25 metros a 150Kbps y 3 metros a
400kbps. La figura 3.5 muestra el circuito de interfaz recomendado por el fabricante
NXP semiconductors. Para la seleccion de las resistencias de pull–up R10 y R11 se debe
considerar la capacitancia total sobre cada lınea y la velocidad de comunicacion, sin
1Segun la capacitancia de entrada de cada dispositivo
CAPITULO 3. DESCRIPCION DE HARDWARE 12
embargo, este como proyecto es de aplicacion general, se selecciono los valores estandar
teoricos para lograr una comunicacion de hasta 100kbps segun lo detalla Microchip en
la hoja de datos del microcontrolador; el valor correcto se puede seleccionar empırica-
mente, se pueden agregar resistencias externas para disminuir el valor equivalente de
la resistencia de pull–up y asi aumentar la velocidad del bus.
Generalmente el bus I2C se utiliza para comunicaciones Master – Slave, pero tam-
bien permite comunicaciones Master – Master sin modificacion de la capa fısica.
Figura 3.5: Esquema del modulo I2C en la unidad.
CAPITULO 3. DESCRIPCION DE HARDWARE 13
3.3. Bus de datos de 16 bits
De manera opcional se diseno un bus paralelo de 16 bits similar a la interfaz que pre-
sentan los microprocesadores 8086. Este bus puede direccionar hasta 128k direcciones
de memoria para datos y perifericos E/S.
Este bus no se desarrollo completamente debido a que no se adquirieron los com-
ponentes necesarios para su implementacion. Posterior a la construccion del circuito
impreso, se detectaron errores de diseno, ademas, se penso en utilizar estos pines no
como bus de datos de 16 bits si no como entradas y salidas de proposito general (tipo
PLC) ya que se considero el bus paralelo como obsoleto debido al auge de dispositivos
seriales I2C y SPI.
Ninguna de las dos formas esta implementada a nivel de hardware ni software y se
deja como recomendacion final.
CAPITULO 3. DESCRIPCION DE HARDWARE 14
3.3.1. Puerto de comunicacion UART
Se habilito un puerto UART para comunicacion local; se usa un cable directo RS–
232 para conexion con la PC,
Figura 3.6: Conexion del puerto UART al PC.
CAPITULO 3. DESCRIPCION DE HARDWARE 15
Figura 3.7: Esquema del puerto UART.
CAPITULO 3. DESCRIPCION DE HARDWARE 16
3.4. Puerto de comunicacion Ethernet
Para la conectividad Ethernet se utiliza un sistema XPortAR de Lantronix; este
sistema convierte de manera transparente la comunicacion serial RS232 a una comuni-
cacion Ethernet, ademas integra un servidor WEB que es compatible con aplicaciones
JAVA Applets e integra un conjunto de metodos para estableces sesiones remotas y
funciones de send, get, length, etc.
Figura 3.8: Conexion del puerto Ethernet.
El sistema XPortAR incluye dos puertos RS232, ambos puertos pueden establecer
sesiones con el microcontrolador, el puerto 2 del XportAR esta directamente conectado
al puerto 2 del microcontrolador; el puerto 1 del XportAR esta habilitado para conexion
directa con la PC pero se puede conectar al puerto 1 del microcontrolador utilizando
un cable serial cruzado, o realizando la conexion directamente desde la placa.
Figura 3.9: Sistema Xport AR de Lantronix.
CAPITULO 3. DESCRIPCION DE HARDWARE 17
3.5. Entradas Analogicas
La unidad cuenta con 4 entradas analogicas, cada entrada analogica puede medir
senales de hasta ±50mV , el rango de medicion se puede ajustar por software y se puede
calibrar cada entrada con mediante una rutina especial. Cada entrada es diferencial y
se puede conectar a cualquier tipo de sensor analogico. La figura 3.11 ejemplifica los
modos de conexion.
El microcontrolador permite un rango maximo de +3.3V en cada entrada analogica,
se tuvo que crear un circuito acondicionador ajustable para permitir los rangos que
muestra la tabla 3.2.
La primera etapa del circuito de la figura 3.12utiliza un amplificador INA121 como
diferenciador y cada entrada esta acondicionada para que se atenue, amplifique o apli-
que un nivel CD a la senal, esto se realiza con potenciometros digitales AD5263 de 256
pasos; los potenciometros R1 y R2 se utilizan para atenuar la senal, el potenciometro
R3 ajusta la ganancia del amplificador de instrumentacion y el potenciometro R4 sirve
para aplicar un nivel CD. La segunda etapa del circuito consiste de un filtro pasoba-
jos antialias tipo Bessel de orden 2, este filtro se hace necesario para atenuar ruido
Figura 3.10: Esquema del puerto Ethernet.
CAPITULO 3. DESCRIPCION DE HARDWARE 18
Figura 3.11: Conexion de las entradas analogicas.
Tabla 3.1: Rangos de medicion de cada entrada analogica.
Opcion Rango Bipolar Rango Unipolar
1 ±10V 0V – 10V
2 ±5V 0V – 5V
3 ±2V 0V – 2V
4 ±1V 0V – 1V
5 ±500mV 0V – 500mV
6 ±200mV 0V – 200mV
7 ±100mV 0V – 100mV
8 ±50mV 0V – 50mV
CAPITULO 3. DESCRIPCION DE HARDWARE 19
y para eliminar las frecuencias que puedan interferir en el procesamiento digital. La
frecuencia maxima de muestreo del sistema es 1 kHz, esto permite representar senales
de hasta 500Hz. Los sistemas de control que se encuentran en el laboratorio son en
su mayorıa mecanicos y unos pocos son termicos, sistemas de este tipo con ancho de
banda superior a los 100Hz son poco comunes, se eligio una frecuencia de corte en los
filtros de al menos 25% superior a 100Hz. La estructura Salley–Key es ideal porque es
de ganancia unitaria y no inversor, se calcularon las resistencias R6 y R7 de tal modo
que se permitiera una relacion de C2 = 2C1 y que la frecuencia de corte dependa del
valor de C1 sin cambiar el comportamiento de filtro Bessel. El valor de C1 se calcula
con la formula:
C1 =3,0524 × 10
−6
fc
Para obtener un valor cercano de 125 Hz como frecuencia de corte C1 debe ser de
24.42 nF, se utilizo un el valor estandar de 22 nF, resultando una frecuencia de corte
de 138 Hz.
3.6. Salidas Analogicas
Se diseno el sistema con 2 salidas analogicas, cada salida analogica se calibra de la
misma manera que las entradas y se pueden seleccionar rangos de operacion, los rangos
son:
Cada salida es de baja potencia y no puede superar los 20mA. Si se desea una salida
de mayor potencia se puede utilizar el LM675T el cual puede suministrar cargas de
hasta 4A, en caso de su utilizacion, se debe usar una fuente externa.
CAPITULO 3. DESCRIPCION DE HARDWARE 20
Figura 3.12: Esquema de las entradas analogicas.
CAPITULO 3. DESCRIPCION DE HARDWARE 21
Tabla 3.2: Rangos de medicion de cada salida analogica.
Opcion Rango Bipolar Rango Unipolar
1 ±10V 0V – 10V
2 ±5V 0V – 5V
3 ±2V 0V – 2V
4 ±1V 0V – 1V
Figura 3.13: Conexion de las salidas analogicas.
CAPITULO 3. DESCRIPCION DE HARDWARE 22
Figura 3.14: Esquema de las salidas analogicas.
CAPITULO 3. DESCRIPCION DE HARDWARE 23
3.7. Interface de Encodificador de Cuadratura (QEI)
La interfaz QEI es un circuito especial para medicion de posicion y velocidad de
motores. Para ello se debe utilizar un encoder rotatorio incremental el cual se conecta
al eje del motor, el encoder tiene 2 salidas (A y B) estas dos lınea permiten medir
velocidad, si se quiere medir posicion se debe utilizar un encoder con 3 salidas (A,
B e Index). La unidad incluye 3 entradas (A, B y Index) con lo cual se puede medir
posicion y velocidad.
Figura 3.15: Conexion de QEI.
La velocidad maxima de medicion esta limitada por el tiempo de muestreo de la
unidad (1ms), con esta restriccion se pueden medir velocidades de hasta 30000 rpm; la
resolucion de medicion de posicion depende del encoder siempre y cuando la frecuencia
de los pulsos no supere al maximo permitido por el microcontrolador (300ms).
3.8. Salidas de control PWM:
La unidad cuenta con 4 modulos PWM, cada modulo se compone de tres senales:
PWMxH: Salida de modulacion por ancho de pulso H.
PWMxL: Salida de modulacion por ancho de pulso L.
CAPITULO 3. DESCRIPCION DE HARDWARE 24
Figura 3.16: Esquema de QEI.
DIR: Salida de direccion.
Las salidas PWMxH y PWMxL son iguales, sin embargo, la senal de PWMxH puede
ser complementaria a la senal de PWMxL, ademas, se puede seleccionar la funcion de
cada salida como PWM, DIR o ON/OFF. Los 4 modulos operaran con un unico timer,
esto limita el sistema a una frecuencia unica para los 4 modulos.
Cada salida es de colector abierto, esto permite conectar la salida a niveles superio-
res que los utilizados por logica TTL; se recomienda aislar electricamente cada salida
de manera optica.
Ademas se cuenta con 2 entradas FLTx, estas entradas se pueden utilizar como
paro de emergencia del PWM, ambas senales actuan sobre los cuatro modulos, las
condiciones pueden ser exceso de velocidad, sobrecarga del motor, etc; en caso de
utilizarse se debe usar un circuito acondicionador externo que determine las condiciones
de paro.
CAPITULO 3. DESCRIPCION DE HARDWARE 25
Figura 3.17: Conexion de PWM.
Figura 3.18: Esquema de PWM.
CAPITULO 3. DESCRIPCION DE HARDWARE 26
3.9. Funciones de control de dispositivos IO
La estructuracion de la capa controladores se muestra en la figura 3.20; el archi-
vo IO CFG.H se utiliza como archivo unico de configuracion mınima y seleccion de
parametros propios del microcontrolador, los archivos subsecuentes contienen las fun-
ciones disponibles para la utilizacion de cada periferico.
Se pueden realizar cambios en el archivo IO CFG.H pero estos solo son validos en
tiempo de compilacion del programa, es decir, se debe recompilar todo el proyecto y
bajarlo a la unidad utilizando algun programador compatible con dsPIC33F2. Sin em-
bargo, IO CFG.H solo representa la configuracion inicial del sistema, tambien conocida
como configuracion mınima, esta configuracion mınima solo es necesaria para que el
microcontrolador pueda arrancar e inicializar todos los dispositivos y perifericos, a la
vez, esta es una configuracion conocida de hardware funcional, 100% operativo y se
puede utilizar como configuracion final del sistema.
Si el usuario necesita de otra configuracion, esta se puede realizar mediante co-
mandos utilizando cualquier puerto RS232, esta nueva configuracion se puede guardar
en memoria EEPROM y el microcontrolador la cargara despues de que se reinicie la
unidad. Para ello cada parametro de configuracion esta asociado con un registro de
comando llamado IO Config. Si la nueva configuracion no resulta correcta, esta se pue-
de omitir dejando presionando el boton ACC durante el arranque, el microcontrolador
ignorara la configuracion en EEPROM y cargara unicamente la configuracion mınima;
despues el usuario debe modificar la configuracion o simplemente enviar el comando
de guardar para mantener la configuracion mınima.
Las opciones de configuracion son propias del microcontrolador dsPIC33FJ256MC710,
el manual de referencia [13] de la familia dsPIC33F detalla cada modulo y se recomienda
leerlo antes de realizar cualquier modificacion.
2La unidad tiene le conector RJ11 para el programador MPLAB ICD2 de Microchip
CAPITULO 3. DESCRIPCION DE HARDWARE 27
3.10. Modulo de Conversion Analogico Digital:
3.10.1. Opciones de configuracion del modulo:
El microcontrolador tiene disponible dos modulos de conversion A/D y 32 canales;
ambos modulos estan disponibles en la unidad, sin embargo, se limitaron a 4 canales,
ambos modulos operan en forma independiente; el archivo de configuracion IO CFG.H
presenta las siguientes opciones para los modulos A/D, el valor “x” representa el numero
Figura 3.19: Estructura C de la capa drivers.
CAPITULO 3. DESCRIPCION DE HARDWARE 28
de modulo (1 o 2):
ADCx EN PERIPH 1 IO Config[0.0]
ADCx SAMPLING MODE 1 IO Config[0.1]
ADCx SAMPLES PCV 1 IO Config[0.7-2]
ADCx SAMPLING RATE 500 IO Config[1]:IO Config[2]
ADCx V REF POS CH AVDD IO Config[3.3-0]
ADCx V REF NEG CH AVSS IO Config[3.7-4]
ADCx RES BITS 1 IO Config[4.3-0]
ADCx DATA OUT SIGN INT IO Config[4.7-4]
ADCx EN PERIPH: Habilita (1) o deshabilita (0) el modulo.
ADCx SAMPLING RATE: Se especifica la velocidad de conversion de una muestra, el valor
maximo es 500 cuando se usan 12bits, y 1100 es el valor maximo cuando se usa 10bits
de resolucion.
ADCx SAMPLING MODE: Permite cambiar el modo de conversion cuando se desea tomar
muestras en mas de un canal, con el valor de 0 se toman muestras de los canales en
secuencia, es decir, un canal a la vez, con el valor de 1 se configura el modulo para que
tome las muestras de manera simultanea en los canales seleccionados.
ADCx SAMPLES PCV: Especifica el numero de muestras por conversion, el resultado final
es el promedio total de las muestras por canal, esta caracterıstica aumenta el tiempo
de conversion.
ADCx V REF POS CH : Seleccion la fuente de referencia AVDD es la alimentacion del
modulo ADC del microcontrolador, VREF P selecciona la fuente de referencia externa.
ADCx V REF NEG CH : Seleccion la fuente de referencia AVSS es la alimentacion del
modulo ADC del microcontrolador, VREF N selecciona la fuente de referencia externa.
ADCx RES BITS: Especifica el valor de resolucion de cada muestra, las opciones son 12
o 10 bits.
CAPITULO 3. DESCRIPCION DE HARDWARE 29
ADCx DATA OUT: Selecciona el formato del resultado de la conversion, las opciones son:
SIGN INT, para formato entero con signo; UNSIGN INT, formato entero sin signo;
SIGN FRAC, formato fraccional (1.15) con signo y UNSIGN FRAC, formato fraccional
sin signo. No se recomienda cambiar este valor (por defecto es SIGN INT), ya que la
unidad utiliza este formato para la aritmetica del sistema.
3.10.2. Funciones del modulo:
El modulo de conversion A/D tiene varias funciones con las que se pueden tomar muestras
y realizar conversiones, las siguientes funciones se ubican en el archivo IO ADC.C:
Funcion IO ADCxconfig
Formato: void IO ADC1config( void )
Valor de Entrada: vacıo
Valor de Retorno: vacıo
Operacion: Esta funcion configura el modulo A/D de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta funcion se invoca
cuando se inicializa la unidad.
Ejemplo: IO ADC1config();
Funcion IO ADCxreadS
Formato: void IO ADCxreadS( INT8U in0 sel, INT8U in0 mod, INT16S ptr rst )
Valor de Entrada: in0 sel: Numero de entrada analogica del dsPIC a leer.
in0 mod: 0: comun, 1: diferencial.
ptr rst: Puntero al registro para resultado.
Valor de Retorno: vacıo
Operacion: Esta funcion realiza una muestra simple sobre el canal 0 del
microcontrolador. En el caso de modo diferencial utilizara la
entrada AN1 del microcontrolador como entrada negativa; en
modo comun el valor VREF(-).
CAPITULO 3. DESCRIPCION DE HARDWARE 30
Ejemplo: IO ADC1readS( 4, 0, &ResultadoADC );
Funcion IO ADCxreadM
Formato: IO ADCxreadM( INT8U in0 sel, INT8U in0 mod,
INT8U in123 sel, INT8U in123 mod,
INT8U n ch, INT16S ptr rst )
Valor de Entrada: in0 sel: Numero de entrada analogica del dsPIC a leer.
in0 mod: 0: comun, 1: diferencial.
in123 sel: Seleccion de entradas analogicas.
in123 mod: 0: comun, 1: diferencial.
n ch: Numero de canales: 1, 2 o 4.
ptr rst: Puntero al registro o arreglo para resultado.
Valor de Retorno: vacıo
Operacion: Esta funcion realiza un muestreo multiple sobre los canales 0,
0,1 o 0,1,2,3. Esta funcion es ejecutable si la resolucion
configurada es de 10bits. El microcontrolador permite cualquier
entrada analogica sobre el canal 0, pero no asi sobre los
canales 1,2 y 3, para mayores detalles refierase al archivo
IO ADC.C
Ejemplo: IO ADC1readM( 4, 0, 0, 0, 4, ResultadoADC );
Funcion IO ADCreadDS
Formato: IO ADCreadDS( INT8U CH0AD1, INT8U CH0AD2, INT16S ptr rst )
Valor de Entrada: CH0AD1: Numero de entrada analogica para CH0 de AD1.
CH0AD2: Numero de entrada analogica para CH0 de AD2.
ptr rst: Puntero al arreglo para resultado.
Valor de Retorno: vacıo
Operacion: Esta funcion realiza un muestreo doble simple utilizando ambos
modulos. Se convierte en una funcion muy util cuando para obte-
CAPITULO 3. DESCRIPCION DE HARDWARE 31
ner conversiones con resolucion de 12bits. Antes de usar la
rutina se debe llamar a la funcion IO ADCinitDS( ) al menos
una vez.
Ejemplo: IO ADCinitDS( );
...
IO ADCreadDS( 0, 1, ResultadoADC );
3.11. Modulo de comunicaciones I2C:
3.11.1. Opciones de configuracion del modulo:
El microcontrolador cuenta con dos modulos I2C, el modulo I2C1 se utiliza para control
de perifericos internos propios de la unidad, por lo tanto no se recomienda modificar la
configuracion; el modulo I2C2 se utiliza como bus externo para conexion de nuevos perifericos
y cualquier configuracion es permitida. El I2C2 se puede utilizar de la forma tradicional
mediante comandos de lectura/escritura usando las funciones de bloques disponibles.
I2CX EN PERIPH 1 IO Config[0.0]
I2CX IPMIEN 0 IO Config[0.1], 0: Dis, 1: Ena
I2CX A10M 0 IO Config[0.2], 0: Dis, 1: Ena
I2CX DISSLW 0 IO Config[0.3], 0: Dis, 1: En
I2CX SMEN 0 IO Config[0.4], 0: Dis, 1: Ena
I2CX GCEN 1 IO Config[0.5], 0: Dis, 1: Ena
I2CX FCLK 1000 IO Config[0.7-6], en kHz
I2CX EN PERIPH: Habilita (1) o deshabilita (0) el modulo.
I2CX IPMIEN: Habilita(1) o deshabilita (0) el modo IPMI.
CAPITULO 3. DESCRIPCION DE HARDWARE 32
I2CX A10M: Especifica si las direcciones fısicas son de 10 bits.
I2CX DISSLW: Mejora la velocidad de comunicacion cuando el Clock Rate es mayor a
400kHz.
III2CX SMEN: Habilita(1) o deshabilita (0) el modo IPMI.
II2CX GCEN: Habilita (1) o deshabilita (0) la compatibilidad con el SMBus.
II2CX FCLK: Especifica la velocidad del reloj de sincronizacion del bus, 1000kHz maxi-
mo.
3.11.2. Funciones del modulo:
Las siguientes funciones se ubican en el archivo IO I2C.C.
Funcion IO I2Cconfig
Operacion: Esta funcion configura los modulos I2C de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta funcion se invoca
cuando se inicializa la unidad.
Formato: void IO I2Cconfig( void )
Valor de Entrada: vacıo
Valor de Retorno: vacıo
Ejemplo: IO I2Cconfig();
Funcion IO I2CXread
Operacion: Realiza una lectura secuencial de N cantidad de datos sobre
algun dispostivo I2C.
Formato: IO I2CXread(INT8U add, INT8U rdptr, INT8U length)
Valor de Entrada: add: Direccion fısica del dispositivo a leer.
rdptr: Puntero al arreglo de datos destino.
length: Cantidad de datos a leer.
CAPITULO 3. DESCRIPCION DE HARDWARE 33
Valor de Retorno: vacıo
Ejemplo: IO I2C2read( 0xA0, datos, sizeof(datos) );
Funcion IO I2CXwrite
Operacion: Realiza una escritura secuencial de N cantidad de datos sobre
algun dispositivo I2C.
Formato: IO I2CXwrite(INT8U add, INT8U wrptr, INT8U length)
Valor de Entrada: add: Direccion fısica del dispositivo a escribir.
wrptr: Puntero al arreglo de datos.
length: Cantidad de datos a escribir.
Valor de Retorno: vacıo
Ejemplo: IO I2C2write( 0xA0, datos, sizeof(datos) );
Funcion IO I2CXpageHDread
Operacion: Realiza una lectura secuencial de N cantidad de datos sobre
una direccion de logica (inicio de pagina) de 16bits de algun
dispositivo I2C.
Formato: IO I2CXpageHDread(INT8U add, INT16U dir, INT8U rdptr,
INT8U length)
Valor de Entrada: add: Direccion fısica del dispositivo I2C a leer.
dir: Direccion logica del dispositivo I2C.
rdptr: Puntero al arreglo de datos.
length: Cantidad de datos a escribir.
Valor de Retorno: vacıo
Ejemplo: IO I2C2pageHDread( 0xA0, 0x0100, datos, sizeof(datos) );
CAPITULO 3. DESCRIPCION DE HARDWARE 34
Funcion IO I2CXpageLDread
Operacion: Realiza una lectura secuencial de N cantidad de datos sobre
una direccion de logica (inicio de pagina) de 8bits de algun
dispositivo I2C.
Formato: IO I2CXpageLDread(INT8U add, INT16U dir, INT8U rdptr,
INT8U length)
Valor de Entrada: add: Direccion fısica del dispositivo I2C a leer.
dir: Direccion logica del dispositivo I2C.
rdptr: Puntero al arreglo de datos.
length: Cantidad de datos a escribir.
Valor de Retorno: vacıo
Ejemplo: IO I2C2pageLDread( 0xA0, 0x10, datos, sizeof(datos) );
Funcion IO I2CXpageHDwrite
Operacion: Realiza una escritura secuencial de N cantidad de datos sobre
una direccion de logica (inicio de pagina) de 16bits de algun
dispositivo I2C.
Formato: IO I2CXpageHDwrite(INT8U add, INT16U dir, INT8U wrptr,
INT8U length)
Valor de Entrada: add: Direccion fısica del dispositivo I2C a escribir.
dir: Direccion logica del dispositivo I2C.
wrptr: Puntero al arreglo de datos.
length: Cantidad de datos a escribir.
Valor de Retorno: vacıo
Ejemplo: IO I2C2pageHDwrite( 0xA0, 0x0100, datos, sizeof(datos) );
Funcion IO I2CXpageLDwrite
CAPITULO 3. DESCRIPCION DE HARDWARE 35
Operacion: Realiza una escritura secuencial de N cantidad de datos sobre
una direccion de logica (inicio de pagina) de 8bits de algun
dispositivo I2C.
Formato: IO I2CXpageLDwrite(INT8U add, INT16U dir, INT8U wrptr,
INT8U length)
Valor de Entrada: add: Direccion fısica del dispositivo I2C a escribir.
dir: Direccion logica del dispositivo I2C.
wrptr: Puntero al arreglo de datos.
length: Cantidad de datos a escribir.
Valor de Retorno: vacıo
Ejemplo: IO I2C2pageLDwrite( 0xA0, 0x10, datos, sizeof(datos) );
3.12. Modulo de comunicaciones SPI:
Existen dos modulos SPI, al igual que el I2C, el modulo SPI1 se reserva para perifericos
internos a la unidad y el SPI2 esta disponible para operaciones de bus mediante funciones
simples de lectura/escritura.
3.12.1. Opciones de configuracion del modulo:
SPIX EN PERIPH 1 IO Config[0.0]
SPIX MODE MASTER IO Config[0.1]
SPIX SMP 0 IO Config[0.2],
0: en la mitad, 1: al final
SPIX CKE 1 IO Config[0.3],
0: cambio de idle a active,
1: cambio de active a idle
CAPITULO 3. DESCRIPCION DE HARDWARE 36
SPIX CKP 0 IO Config[0.4],
0: idle bajo y active alto,
1: idle alto y active bajo,
SPIX SPRE 4 IO Config[0.7-5]
SPIX PPRE 2 IO Config[1]
SPIX EN PERIPH: Habilita (1) o deshabilita (0) el modulo.
SPIX MODE: Selecciona la operacion del modulo como MAESTRO o ESCLAVO
SPIX SMP: Indica en que parte de la sena de reloj se capturan los datos.
SPIX CKE: Especifica en que flanco de la senal de reloj se cambia el dato de salida.
SPIX CKP: Configura la polaridad de la senal de reloj.
SPIX SPRE: Configura el valor del preescaler primario.
SPIX PPRE: Configura el valor del preescaler secundario.
3.12.2. Funciones del modulo:
Las siguientes funciones son las rutinas disponibles de lectura/escritura SPI. El protocolo
de comunicacion SPI tiene la caracterıstica de que una operacion de escritura es a la vez una
operacion de lectura, y viceversa, esto reduce el numero de funciones y es por esta razon que
no se detallan funciones de lectura/escritura por separado. Para mayor informacion sobre el
protocolo de comunicacion SPI se puede consultar el manual de referencia [13].
Funcion IO SPIconfig
Operacion: Esta funcion configura los modulos SPI de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta funcion se invoca
cuando se inicializa la unidad.
Formato: void IO SPIconfig( void )
Valor de Entrada: vacıo
CAPITULO 3. DESCRIPCION DE HARDWARE 37
Valor de Retorno: vacıo
Ejemplo: IO SPIconfig();
Funcion IO SPIXcommB
Operacion: Esta funcion realiza una operacion de lectura/escritura de 8bits
sobre el bus I2C. Una operacion de escritura sobreescribe los
datos del buffer con datos leıdos del bus SPI; para una
operacion de lectura es necesario llenar el buffer con datos
nulos o vacıos.
Formato: void IO SPIXcommB( INT8U puerto, INT8U ptr datain,
INT8U ptr dataout )
Valor de Entrada: puerto: Numero de puerto (0 – 7).
ptr datain: Puntero a registro fuente.
ptr dataout: Puntero a registro destino.
Valor de Retorno: vacıo
Ejemplo: datain = 0x00; //Registro de recepcion.
dataout = 0xA5; //Valor a escribir en el bus.
IO SPIXcommB( 5, &datain, &dataout );
Funcion IO SPIXcommW
Operacion: Esta funcion realiza una operacion de lectura/escritura de 16bits
sobre el bus I2C. Una operacion de escritura sobreescribe los
datos del buffer con datos leıdos del bus SPI; para una
operacion de lectura es necesario llenar el buffer con datos
nulos o vacıos.
Formato: void IO SPIXcommW( INT8U puerto, INT16U ptr datain,
INT16U ptr dataout )
Valor de Entrada: puerto: Numero de puerto (0 – 7).
CAPITULO 3. DESCRIPCION DE HARDWARE 38
ptr datain: Puntero a registro fuente.
ptr dataout: Puntero a registro destino.
Valor de Retorno: vacıo
Ejemplo: datain = 0x0000; //Registro de recepcion.
dataout = 0x5AA5; //Valor a escribir en el bus.
IO SPIXcommW( 5, &datain, &dataout );
3.13. Modulo de comunicaciones UART:
El microcontrolador cuenta con dos modulos de comunicaciones UART, se utiliza el modu-
lo UART1 para operaciones de configuracion local o conexion directa con la PC; el modulo
UART2 se utiliza para conexion directa con el Lantronix XportAR.
3.13.1. Opciones de configuracion del modulo:
UARTX EN PERIPH 1 IO Config[0.0]
UARTX PAR 0 IO Config[0.2-1], 0: No, 1: impar, 2:par.
UARTX STOP 1 IO Config[0.3], 1: un bit, 2: dos bits.
UARTX HFC 0 IO Config[0.4]
UARTX MODE RTS 0 IO Config[0.5], 0: Flow control, 1: Simplex.
UARTX BR 57600 IO Config[0.7-6] : IO Config[1]: IO Config[2]
UARTX BUFF SIZE 128 Tama~no del buffer de datos para UARTX.
UARTX EN PERIPH: Habilita (1) o deshabilita (0) el modulo.
UARTX BR: Configura la velocidad de comunicacion en BPS.
UARTX PAR: Habilita la paridad y el numero de bits.
UARTX STOP: Configura los bits de parada.
CAPITULO 3. DESCRIPCION DE HARDWARE 39
UARTX HFC: Se habilita el control de flujo por hardware.
UARTX MODE RTS: Modo para el pin RTS.
UARTX BUFF SIZE: Tamano del buffer de datos de salida y entrada, la asignacion de
este espacio solo es posible en tiempo de programacion, ya que se reserva espacio en
memoria DMA y no en memoria convencional.
3.13.2. Funciones del modulo:
Las siguientes funciones son las rutinas disponibles de lectura/escritura UART.
Funcion IO UARTconfig
Operacion: Esta funcion configura los modulos UART de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta funcion se invoca
cuando se inicializa la unidad.
Formato: void IO UARTconfig( void )
Valor de Entrada: vacıo
Valor de Retorno: vacıo
Ejemplo: IO UARTconfig();
Funcion IO UARTXwriteC
Operacion: Esta funcion envıa un byte por UART
Formato: void IO UART1writeC( INT8U dato )
Valor de Entrada: dato: Valor (byte) a enviar por UART.
Valor de Retorno: vacıo
Ejemplo: IO UART1writeC( ’A’ );
Funcion IO UARTXreadC
Operacion: Esta funcion lee un byte del buffer de datos UART
Formato: INT8U IO UART1readC( void )
CAPITULO 3. DESCRIPCION DE HARDWARE 40
Valor de Entrada: vacio
Valor de Retorno: El dato leido
Ejemplo: dato = IO UART1readC;
Funcion IO UARTXwriteS
Operacion: Esta funcion envıa una trama de bytes de datos UART. Se
utiliza el DMA para optimizar el uso de CPU.
Formato: void IO UARTXwriteS( INT8U ptr datos, INT16U count )
Valor de Entrada: ptr datos: Puntero al arreglo de datos.
count: Tamano de la trama a enviar.
Valor de Retorno: vacıo
Ejemplo: IO UART2writeS( datos, sizeof(datos) );
Funcion IO UARTXreadS
Operacion: Esta funcion lee una trama de bytes de datos UART. Se utiliza
el DMA como buffer de datos, si el buffer se llena, por defecto,
se sobreescriben los primeros datos (buffer circular).
Formato: void IO UARTXreadS( INT8U ptr datos, INT16U count )
Valor de Entrada: ptr datos: Puntero al arreglo de datos.
count: Tamano de la trama a leer.
Valor de Retorno: vacıo
Ejemplo: IO UART2readS( datos, 10 );
Funcion IO UARTXlength
Operacion: Devuelve la cantidad de datos en buffer de recepcion.
Formato: INT16U IO UARTXlength( void )
Valor de Entrada: vacıo.
Valor de Retorno: La cantidad de datos en buffer.
Ejemplo: tama~no = IO UART2length( );
CAPITULO 3. DESCRIPCION DE HARDWARE 41
3.14. Modulo PWM:
3.14.1. Opciones de configuracion del modulo:
PWM EN PERIPH 1 IO Config[0.0]
PWM FREC 10000 IO Config[1]:IO Config[2]
PWM INTPOST 0 IO Config[0.7-4]
PWM PTMOD 0 IO Config[0.2-1]:
0: Salida libre
1: Evento simple
2: Continuo, con cuenta de subida y bajada
3: Continuo, con cuenta de subida y bajada con interrupciones
PWM PMOD 1 IO Config[0.3], 0: Complementario, 1: independientes
ON/OFF: 0, DIR: 1, PWM: 2
PWMX PINH 2 Modo pin H: PWM o DIR o OFF
PWMX PINL 1 Modo pin L: PWM o DIR o OFF
PWMX PIND 0 Modo pin D: DIR o OFF
PWMX OFF DIR 1 Offset, 0: no direccional, 1: direccional
PWMX ONOFF D 0 IO Config[3.6]
PWMX OFFSET 50 IO Config[4]
PWM EN PERIPH: Habilita (1) o deshabilita (0) el modulo.
PWM FREC: Configura la frecuencia del modulo PWM.
PWM INTPOST: Genera una interrupcion cada N ciclos PWM.
PWM PTMOD: Modo de la base de tiempos PWM.
PWM PMOD: Modo de la operacion de los pines L/H.
CAPITULO 3. DESCRIPCION DE HARDWARE 42
PWMX PINH: Modo de operacion del pin H: PWM, direccion, on/off.
PWMX PINL: Modo de operacion del pin L: PWM, direccion, on/off.
PWMX PIND: Modo de operacion del pin D: Direccion, on/off; en caso de utilizar L/H
como direccion el pin D sera complementario a L/H.
PWMX ONOFF D: Estado OFF de la salida ON/OFF, solo activo si se selecciona.
PWMX OFF DIR: Modo de operacion del offset: no direccional, direccional
PWMX OFFSET: Valor en % de ciclo de trabajo para usarlo como offset
Operacion del ciclo de trabajo OFFSET Se puede configurar un valor OFFSET a
cualquier salida PWM; toda la aritmetica de la unidad opera con valores normalizados, es
decir, el valor 1.0 significa valor maximo en cualquier modulo, 0.0 significa valor cero o nulo
y -1.0 valor mınimo o negativo del maximo, un valor de 1.0 en el PWM significa el 100 %
de ciclo de trabajo en el PWM, ası mismo, el valor -1.0 serıa 100 % de ciclo de trabajo pero
con el bit de direccion invertido, en estos casos, el valor offset es 0, sin embargo si el usuario
ajusta un valor offset el PWM puede funcionar de dos maneras:
No direccional: Un offset no direccional en la salida PWM significa que el valor 0.0
sera el valor offset configurado, si el usuario ajusta un offset de 50 % (50) la salida sera
un PWM con 50 % de ciclo de trabajo cuando se ingrese 0.0, por lo tanto un valor
de -1.0 ajustara 0% de ciclo de trabajo. El offset unidireccional no varıa los bits de
direccion, es decir, el sistema ajusta automaticamente la pendiente con el offset y el
valor maximo positivo, cualquier valor negativo que resulte inferior al valor mınimo de
0 % de ciclo de trabajo sera saturado a 0 %. Esta funcionalidad es util cuando se utiliza
Servo Motores controlados por PWM en donde el valor central se ajusta con un PWM
con 50 % de ciclo de trabajo.
Direccional: Un offset bidireccional en la salida PWM significa que el valor 0.0 sera el
valor offset configurado, pero a diferencia del offset unidireccional, el offset bidireccional
utiliza los bits de direccion, la pendiente se ajusta con el valor offset y el valor maximo,
CAPITULO 3. DESCRIPCION DE HARDWARE 43
pero de igual manera, este patron se repite para valores PWM negativos; un valor
de +0.0 ajustara el ciclo de trabajo del PWM al offset configurado, un valor de 1.0
ajustara al 100 % en ciclo de trabajo. Un valor de -0.0 ajustara el ciclo de trabajo del
PWM al offset configurado, pero invertira el bit de direccion, de igual manera con el
valor -1.0 resultara un ciclo de trabajo de 100 % pero con el bit de direccion igualmente
invertido. Esta funcion es util para eliminar no linealidades de motores CD que por
naturaleza del torque de arranque estos no giran para valores pequenos de tension. La
figura 3.20 muestra las curvas representativas para los modos offset del PWM.
No Direccional Direccional
Figura 3.20: Curvas representativas de los modos de operacion offset del PWM.
3.14.2. Funciones del modulo:
Funcion IO PWMGconfig
Operacion: Esta funcion configura el modulo PWM de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta funcion se invoca
cuando se inicializa la unidad.
Formato: void IO PWMGconfig( void )
CAPITULO 3. DESCRIPCION DE HARDWARE 44
Valor de Entrada: vacıo
Valor de Retorno: vacıo
Ejemplo: IO PWMGconfig();
Funcion IO PWMfrec
Operacion: Esta funcion ajusta el valor de frecuencia de la senal PWM,
el valor de frecuencia es el mismo para las cuatro salidas
PWM.
Formato: void IO PWMfrec( INT16U pwm frec )
Valor de Entrada: pwm frec: Valor de frecuencia en Hz.
Valor de Retorno: vacıo
Ejemplo: IO PWMXduty( 1000 );
Funcion IO PWMXduty
Operacion: Ajusta el valor del ciclo de trabajo de la senal PWM,
el formato debe ser punto fijo 2.14 o el seleccionado
previamente.
Formato: void IO PWMXduty( INT16S pwm duty )
Valor de Entrada: pwm duty: Valor del ciclo de trabajo.
Valor de Retorno: vacıo
Ejemplo: IO PWMfrec( 0x3FFF );
Funcion IO PWMstart
Operacion: Inicia el PWM en los 4 modulos
Formato: void IO PWMstart( void )
Valor de Entrada: vacio
Valor de Retorno: vacıo
Ejemplo: IO PWMstart( );
CAPITULO 3. DESCRIPCION DE HARDWARE 45
Funcion IO PWMstop
Operacion: Detiene el PWM en los 4 modulos
Formato: void IO PWMstop( void )
Valor de Entrada: vacio
Valor de Retorno: vacıo
Ejemplo: IO PWMstop( );
3.15. Modulo Interfaz de Encodificador de Cuadra-
tura (QEI):
El microcontrolador cuenta con un modulo de interfaz para encodificadores de cuadratura,
este permite medir velocidad y posicion de manera digital. Estas operaciones se realizan con
software.
3.15.1. Opciones de configuracion del modulo:
QEI EN PERIPH 1 IO Config[0.0]
QEI QEIM2 1 IO Config[0.1] 0: 2x, 1: 4x
QEI SWPAB 0 IO Config[0.3] 0: No, 1: Invertir
QEI QEIM1 1 IO Config[0.4], 0: con Index, 1: valor maximo
QEI POSRES 1 IO Config[0.7], 0: Apagado, 1: Activo
QEI MAXCNT1 6 IO Config[1]:IO Config[2]
QEI EN PCDOUT 0 IO Config[0.5] 0: Apagado, 1: Encendido
QEI EN QECK 1 IO Config[0.6]: Habilitar Filtro digital
QEI QECK 8 IO Config[3]: Divisor de reloj del filtro digital, 0 - 7, 8: auto
QEI NUMT 2 IO Config[4] max 255
QEI MAXR 1000 IO Config[5]:IO Config[6]
CAPITULO 3. DESCRIPCION DE HARDWARE 46
QEI EN PERIPH: Habilita el modulo QEI.
QEI QEIM2: Modo de operacion.
QEI SWPAB: Invertir canales A y B.
QEI QEIM1: Reset de contador.
QEI POSRES: Reset de contador con Index.
QEI MAXCNT1: Pulsos por revolucion, PPR.
QEI EN PCDOUT: Habilita salida del pin de direccion, (no utilizable)
QEI EN QECK: Habilitar Filtro digital.
QEI QECK: Divisor de reloj del filtro digital.
QEI NUMT: Numero de vueltas para un ciclo (Relacion de caja reductora).
QEI MAXR: Se habilita el control de flujo por hardware.
3.15.2. Funciones del modulo:
Funcion IO QEIconfig
Operacion: Esta funcion configura el modulo QEI de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta funcion se invoca
cuando se inicializa la unidad.
Formato: void IO QEIconfig( void )
Valor de Entrada: vacıo
Valor de Retorno: vacıo
Ejemplo: IO QEIconfig();
CAPITULO 3. DESCRIPCION DE HARDWARE 47
Funcion IO QEIposition
Operacion: Obtiene el valor de posicion del motor.
Formato: void IO QEIposition( void )
Valor de Entrada: vacıo
Valor de Retorno: Posicion del motor
Ejemplo: PosAct = IO QEIposition();
Funcion IO QEIstart
Operacion: Inicia el timer asociado para la medicion de velocidad.
Formato: void IO QEIstart( void )
Valor de Entrada: vacıo
Valor de Retorno: vacio
Ejemplo: IO QEIstart();
Funcion IO QEIstop
Operacion: Detiene el timer asociado para la medicion de velocidad.
Formato: void IO QEIstop( void )
Valor de Entrada: vacıo
Valor de Retorno: vacio
Ejemplo: IO QEIstop();
Funcion IO QEIspeed
Operacion: Obtiene el valor actual de la velocidad del motor.
Formato: void IO QEIstop( void )
Valor de Entrada: vacıo
Valor de Retorno: vacio
Ejemplo: SpdAct = IO QEIspeed();
Capıtulo 4
Esquema general del software
El firmware de la unidad controladora esta programada en el lenguaje C30 de Microchip
el cual es compatible con el estandar ANSI C. Cualquier ayuda sobre le lenguaje C30 y el
estandar ANSI C los puede encontrar en [15] y en [8].
Ası mismo, la unidad utiliza el sistema operativo en tiempo real MicroC/OS-II de Micrium
que permite al microcontrolador efectuar diferentes tareas con mayor facilidad y eficiencia.
Sobre la teorıa de sistemas operativos en tiempo real y sobre MicroC/OS-II lo puede encontrar
en [11].
4.1. Requerimientos mınimos de software y hard-
ware
Para poder abrir el proyecto, solamente necesita de MPLAB IDE v8.0 o superior y del
plug–in C30 Compiler v3.1 o superior, puede utilizar la version estudiante. Este plug–in
incluye todas las bibliotecas necesarias.
Ademas, necesita un programador compatible con dsPIC, para ello puede utilizar el pro-
gramador MPLAB ICD2; la placa de la unidad controlador incluye un conector RJ11 com-
patible con el programador.
Por ultimo, es necesaria una fuente de ±12V para alimentar la unidad.
48
CAPITULO 4. ESQUEMA GENERAL DEL SOFTWARE 49
4.2. Abrir el proyecto
Se incluye un disco con todo el codigo fuente del proyecto. El proyecto es toda la carpeta
llamada: Micrium. Copie la carpeta Micrium a la unidad C del computador.
Ahora, abra MPLAB IDE; luego, ingrese a Project ->Open... y busque la carpeta
Micrium que copio previamente.
Busque el archivo OS-Probe.mcp dentro de la ruta: C:\Micrium\Software\Evalboards\Mi-
crochip\Explorer16\PIC33FJ256\MPLAB-C30\OS-Probe
Seguidamente se abrira el proyecto.
4.3. Estructura del proyecto
Los archivos .C contienen el codigo y funciones ejectuables en el proyecto. Los archivos
inciados con OS pertenecen al sistema operativo en tiempo real; observe que el RTOS no
es una apliacion instalable, esta consiste de un conjunto de archivos que el usuario puede
modificar; se recomienda no alterar ningun parametro.
Los archivos iniciados con IO se refieren a funciones del hardware, estas funciones llaman
controladores.
Los archivos iniciados con APP se refieren a los archivos de la aplicacion y maquina
virtual.
Los archivos .H son los encabezados o headers. Estos archivos guardan todos los parame-
tros relacionados con la configuracion de hardware y del RTOS.
4.3.1. Descripcion de archivos importantes
APP.C: Este es el archivo principal, contiene:� La funcion main.� Declaracion de variables globales.� Estructura de las tareas.
CAPITULO 4. ESQUEMA GENERAL DEL SOFTWARE 50� Declaracion de los elementos del sistema operativo.
TRAPS.C: Rutinas de interrupcion para deteccion de errores.
COMMAND.C: Lista y funciones de instrucciones y comandos de usuario.
IO CFG.H: Archivo con la configuracion mınima de hardware.
SYS DEF.H: Definiciones de los modulos virtuales.
SYS BLOCKS.H: Estructuras de los modulos virtuales.
SYS CFG.H: Parametros y definiciones especiales de la unidad.
APP FUNC.H: Encabezado de definiciones con todas las funciones globales.
Cada archivo mantiene informacion importante que sirve de ayuda al usuario.
Capıtulo 5
Guia de comandos
Los comandos permiten utilizar y configurar las todas las opciones de hardware y funciones
de maquina virtual. El archivo COMMAND.C contiene todo el codigo para la ejecucion de
comandos.
Esta primera version de la unidad no cuenta aun con algun software de administracion
y configuracion, para realizar tales acciones el usuario puede utilizar cualquier programa de
envıo y recepcion de tramas hexadecimales por puerto serie RS232 o puede automatizar los
procedimientos con cualquier lenguaje de programacion.
Durante este proyecto se utilizo el programa LookRS232 de fCoderGroup1 como depura-
cion y el lenguaje de programacion JAVA con el IDE NetBeans2 para la creacion de aplica-
ciones web.
La unidad esta pendiente de las acciones del usuario mediante las tareas de comunicacio-
nes, si alguna tarea detecta un comando con la secuencia correcta se procedera a ejecutar la
funcion Command COM, la cual evaluara el comando. Cada tarea de comunicacion es indepen-
diente y el RTOS no permite que se comparta informacion entre las tareas.
1www.lookrs232.com/2www.netbeans.org
51
CAPITULO 5. GUIA DE COMANDOS 52
5.1. Estructura de los comandos
Cada comando se compone de:
1. Codigo de comando, es un numero en hexadecimal que identifica el comando.
2. Numero de bytes de la trama de comando.
3. Trama de comando,
5.2. Secuencia de Envıo y Confirmacion
Para minimizar los errores de comunicacion se implemento un enlace de tres vıas; para
ello se establecio el siguiente procedimiento de envıo y confirmacion (ver figura 5.1):
1. El usuario envıa el codigo de comando.
2. La unidad envıa el mismo codigo como senal de confirmacion. Si el comando no existe,
la unidad reinicia y envıa el codigo 0x53 o el caracter S en ASCII.
3. Si el codigo es correcto, se debe enviar la trama de comando encabezado con un byte
que indique el tamano de la trama. Tanto el codigo de comando y el numero de bytes
no cuentan como miembros de la trama de comando.
Cuando la tarea de comunicacion termina de ejecutar el comando, la tarea reinicia y
envıa el codigo 0x53. Un comando se puede cancelar esperando 1 segundo o enviando 0 en el
numero de bytes de la trama.
5.2.1. Secuencia de ejemplo
Se desea configurar el rango de medicion de ±2 en el canal 0 del ADC.
El codigo de comando para cambiar el rango de medicion de un canal ADC es 0x1A. La
trama de comando se conforma de: Numero de canal y codigo de rango. En este caso, el
numero de canal es 0x00 y el numero de rango para ±2 es 0x02. La secuencia de envıo y
confirmacion es:
CAPITULO 5. GUIA DE COMANDOS 53
Figura 5.1: Algoritmo de la tarea de comunicacion.
CAPITULO 5. GUIA DE COMANDOS 54
1. Comando: 0x1A.
2. Tamano: 0x02.
3. Trama: 0x00, 0x02.
Capıtulo 6
Lista de Comandos
Los comandos se clasifican en secciones:
1. Seccion 0x10: Funciones de hardware y sistema.
2. Seccion 0x20: Funciones de modulos parte I.
3. Seccion 0x30: Funciones de modulos parte II.
4. Seccion 0x50: Funciones de captura e informacion.
5. Seccion 0x60: Funciones de red I2C.
Para facilitar el ingreso de opciones numericas se utiliza el formato ASCII en 6 bytes.
Ejemplo, si se desea introducir el valor numerico 0,1234569 se debe redondear y construir
una cadena de 6 bytes en ASCII de la siguiente manera: 0.1235. Para el caso de valores
negativos, el signo − cuenta como 1 byte; ejemplo: -0.123.
Los modulos que necesitan de tiempo de muestreo se utiliza 16 bits (2 bytes) para es-
pecificar este parametro. Ejemplo, se desea un tiempo de muestreo de 500ms, la secuencia
corresponde: 0xF4 0x01, se ingresa primero el byte LSB y despues el byte MSB.
55
CAPITULO 6. LISTA DE COMANDOS 56
6.1. Funciones de hardware y sistema
Estos comandos permiten cambiar la configuracion de hardware y las opciones de la
unidad controladora.
6.1.1. Iniciar o detener maquina virtual
Codigo de comando: 0x11
Tamano de trama: 1 byte.
Opciones de trama:� 0: Detiene aplicacion de la maquina virtual. Pone a cero todas las salidas DAC
y PWM.� 1: Inicia aplicacion de la maquina virtual. Ejecuta una aplicacion previamente
creada.� 2: Pausa aplicacion de la maquina virtual.
6.1.2. Devuelve registro de estado
Codigo de comando: 0x13
Tamano de trama: 1 byte.
Opciones de trama:� 0 - 15: Numero de registro.
Registro de estado:
Este registro mantiene el estado de operaciones del sistema, para diagnostico. Numeros
de registro:
0: Estado de la ultima operacion UART1
CAPITULO 6. LISTA DE COMANDOS 57
1: Estado de la ultima operacion UART2
2: Registra de donde se tomo la configuracion de modulos IO:� 0: Inexistente.� 1: Configuracion por defecto.� 2: Se leyo la EEPROM pero no se encontro una configuracion para IO, el sistema
se configuro por defecto.� 3: Los modulos IO se configuraron de la EEPROM.
3: Detecto un error en lectura de la memoria EEPROM.
4: Estado de la ultima operacion de bus.
5: Estado de la tarea de captura:� 0: desactivada.� 1: capturar/ando.� 2: datos listos.� 3: enviar/ando datos.� 4: borrar/ando datos.
6: Error en BUS I2C numero de reintentos vencidos.
7: Error en BUS I2C intento de escritura en el puerto no existe.
8: Ultimo comando sobre UART2.
9: Ultimo comando sobre UART1.
6.1.3. Borra la memoria EEPROM
Codigo de comando: 0x14
Tamano de trama: 1 byte.
CAPITULO 6. LISTA DE COMANDOS 58
Opciones de trama:� X: Cualquier valor para cumplir formato de comando.
6.1.4. Guarda la configuracion de sistema en EEPROM
Codigo de comando: 0x15
Tamano de trama: 1 byte.
Opciones de trama:� X: Cualquier valor para cumplir formato de comando.
6.1.5. Recibe el archivo de aplicacion
Codigo de comando: 0x16
Tamano de trama: Segun tamano de archivo netlist.
Opciones de trama:� N: Archivo netlist.
6.1.6. Recibe un archivo de configuracion IO
Codigo de comando: 0x17
Tamano de trama: Segun tamano de archivo de configuracion.
Opciones de trama:� N: Numero de modulo IO (ver archivo IO CFG.H).� F: Archivo de configuracion.
CAPITULO 6. LISTA DE COMANDOS 59
6.1.7. Reinicia el sistema
Codigo de comando: 0x18
Tamano de trama: 1 byte.
Opciones de trama:� X: Cualquier valor para cumplir formato de comando.
6.1.8. Asigna un valor a un elemento de salida (DAC o PWM)
Codigo de comando: 0x19
Tamano de trama: 7 bytes.
Opciones de trama:� N: Numero de salida.
◦ 0x00: Salida DAC0.
◦ 0x01: Salida DAC1.
◦ 0x02: Salida PWM0.
◦ 0x03: Salida PWM1.
◦ 0x04: Salida PWM2.
◦ 0x05: Salida PWM3.� A: Valor normalizado en ASCII (6 bytes).
6.1.9. Define un rango de medicion a un canal ADC
Codigo de comando: 0x1A
Tamano de trama: 2 bytes.
Opciones de trama:
CAPITULO 6. LISTA DE COMANDOS 60� N: Numero de canal.� R: Numero de rango.
◦ 0x00: ±10V .
◦ 0x01: ±5V .
◦ 0x02: ±2V .
◦ 0x03: ±1V .
◦ 0x04: ±0,5V .
◦ 0x05: ±200mV .
◦ 0x06: ±100mV .
◦ 0x07: ±50mV .
◦ 0x08: 0 − 10V .
◦ 0x09: 0 − 5V .
◦ 0x0A: 0 − 2V .
◦ 0x0B: 0 − 1V .
◦ 0x0C: 0 − 0,5V .
◦ 0x0D: 0 − 200mV .
◦ 0x0E: 0 − 100mV .
◦ 0x0F: 0 − 50mV .
6.1.10. Define un rango de medicion a un canal DAC
Codigo de comando: 0x1B
Tamano de trama: 2 bytes.
Opciones de trama:� N: Numero de canal.� R: Numero de rango.
CAPITULO 6. LISTA DE COMANDOS 61
◦ 0x00: ±10V .
◦ 0x01: ±5V .
◦ 0x02: ±2V .
◦ 0x03: ±1V .
◦ 0x04: 0 − 10V .
◦ 0x05: 0 − 5V .
◦ 0x06: 0 − 2V .
◦ 0x07: 0 − 1V .
6.1.11. Lee un canal ADC
Codigo de comando: 0x1C
Tamano de trama: 1 bytes.
Opciones de trama:� N: Numero de canal.
Este comando devuelve el valor normalizado de la lectura ADC (6 bytes).
6.2. Funciones de modulos parte I
Estos comandos permiten cambiar la configuracion de los modulos virtuales.
6.2.1. Cambiar la configuracion de un filtro
Codigo de comando: 0x21
Tamano de trama: Variable.
Opciones de trama:� T: tipo de filtro:
CAPITULO 6. LISTA DE COMANDOS 62
◦ 0: IIR2.
◦ 1: IIR4.
◦ 2: FIR.
◦ 3: NOTCH 60Hz.� N: Numero de bloque.� FC: Frecuencia de corte en Hz, 6 bytes en ASCII (solo IIR2, IIR4 y FIR).� BW: Ancho de banda en Hz, 6 bytes en ASCII (solo IIR2, IIR4).� R: Radio de los polos conjugados, 6 bytes en ASCII (opcional: solo NOTCH).� TF: Tipo de filtro: (Solo IIR2 y IIR4)
◦ 0: Butterworth paso bajo.
◦ 1: Butterworth paso alto.
◦ 2: Bessel paso bajo.
◦ 3: Bessel paso alto.
◦ 4: Butterworth pasa banda.
◦ 5: Butterworth rechaza banda.� TF: Tipo de filtro: (Solo FIR).
◦ 0: De 1 a 16 etapas
◦ 1: 32 etapas.
◦ 2: 64 etapas.
Los filtros NOTCH de 60Hz no requieren configuracion previa a la utilizacion, este tipo de
filtro se configura por defecto con r = 0,95. Los demas tipos de filtro necesitan configurarse
antes de entrar en operacion.
6.2.2. Configurar un modulo de funcion de transferencia
Codigo de comando: 0x23
CAPITULO 6. LISTA DE COMANDOS 63
Tamano de trama: Variable.
Opciones de trama:� N: Numero de bloque.� TL: Tiempo de muestreos en ms, byte LSB.� TH: Tiempo de muestreos en ms, byte MSB.� TL: Formato:
◦ 0: Polos y ceros.
◦ 1: Constantes.� Formato de polos y cero:
◦ G: Ganancia en ASCII 6 bytes.
◦ P1: Polo 1, real y complejo, 12 bytes en ASCCI.
◦ P2: Polo 2, real y complejo, 12 bytes en ASCCI.
◦ Z1: Cero 1, real y complejo, 12 bytes en ASCCI.
◦ Z2: Cero 2, real y complejo, 12 bytes en ASCCI.� Formato de constantes:
◦ B0: Constante B0.
◦ B1: Constante B1.
◦ A1: Constante A1.
◦ B2: Constante B2.
◦ A2: Constante A2.
Las cadenas con numeros complejos se introducen como dos cadenas ASCII de 6 bytes,
ejemplo: −0,5 + j0,5 se representa como -0.5000.5000.
6.2.3. Recibe coeficientes Kp, Ki, Kd, Ts para configurar PID
Codigo de comando: 0x25
CAPITULO 6. LISTA DE COMANDOS 64
Tamano de trama: 22 bytes.
Opciones de trama:� TF: Tipo de control PID:
◦ 0: PID estandar.
◦ 1: PI D.
◦ 2: I PD.� N: Numero de bloque.� TL: Tiempo de muestreos en ms, byte LSB.� TH: Tiempo de muestreos en ms, byte MSB.� P: Constante proporcional ASCII 6 bytes.� I: Constante integral ASCII 6 bytes.� D: Constante derivativa ASCII 6 bytes.
6.2.4. Recibe parametros de configuracion de oscilador senoi-
dal
Codigo de comando: 0x26
Tamano de trama: 13 bytes.
Opciones de trama:� N: Numero de bloque SOSC.� X: Frecuencia, 6 bytes en ASCII.� G: Amplitud, 6 bytes en ASCII.
CAPITULO 6. LISTA DE COMANDOS 65
6.2.5. Recibe parametros de configuracion de oscilador recta-
gular
Codigo de comando: 0x27
Tamano de trama: 19 bytes.
Opciones de trama:� N: Numero de bloque ROSC.� TL1: Tiempo 1 en ms, byte LSB.� TH1: Tiempo 1 en ms, byte MSB.� TL2: Tiempo 2 en ms, byte LSB.� TH2: Tiempo 2 en ms, byte MSB.� TL3: Tiempo 3 en ms, byte LSB.� TH3: Tiempo 3 en ms, byte MSB.� GP: Amplitud positiva, 6 bytes en ASCII.� GN: Amplitud negativa, 6 bytes en ASCII.
6.2.6. Recibe parametros de configuracion de oscilador trian-
gular
Codigo de comando: 0x28
Tamano de trama: 17 bytes.
Opciones de trama:� N: Numero de bloque TOSC.� TL1: Tiempo 1 en ms, byte LSB.� TH1: Tiempo 1 en ms, byte MSB.
CAPITULO 6. LISTA DE COMANDOS 66� TL2: Tiempo 2 en ms, byte LSB.� TH2: Tiempo 2 en ms, byte MSB.� GP: Amplitud positiva, 6 bytes en ASCII.� GN: Amplitud negativa, 6 bytes en ASCII.
6.2.7. Recibe parametros de configuracion de oscilador trian-
gular
Codigo de comando: 0x29
Tamano de trama: 17 bytes.
Opciones de trama:� N: Numero de bloque VOSC.� TL1: Tiempo maximo en ms, byte LSB.� TH1: Tiempo maximo en ms, byte MSB.� TL2: Tiempo mınimo en ms, byte LSB.� TH2: Tiempo mınimo en ms, byte MSB.� GP: Amplitud positiva, 6 bytes en ASCII.� GN: Amplitud negativa, 6 bytes en ASCII.
6.2.8. Recibe parametros de configuracion de K
Codigo de comando: 0x2B
Tamano de trama: Variable.
Opciones de trama:� N: Numero de bloque.
CAPITULO 6. LISTA DE COMANDOS 67� TL: Tiempo de muestreos en ms, byte LSB.� TH: Tiempo de muestreos en ms, byte MSB.� X: Tamano del arreglo.� K: Cadena de constantes en formato ASCII.
El tamano maximo del arreglo es de 4, este numero se especifica en formato decimal
o hexadecimal.
6.3. Funciones de modulos parte II
6.3.1. Crear o destruir modulos virtuales
Codigo de comando: 0x31
Tamano de trama: Variable.
Opciones de trama:� N: Total de modulos.� X: Archivo.
6.3.2. Ajusta ganancia de un modulo GAIN
Codigo de comando: 0x32
Tamano de trama: 7 bytes.
Opciones de trama:� N: Numero de bloque.� X: Ganancia, 6 bytes en ASCII.
CAPITULO 6. LISTA DE COMANDOS 68
6.3.3. Ajusta lımites de un modulo SAT
Codigo de comando: 0x33
Tamano de trama: 13 bytes.
Opciones de trama:� N: Numero de bloque.� X: Valor maximo, 6 bytes en ASCII.� Y: Valor mınimo, 6 bytes en ASCII.
6.3.4. Ajusta lımites de un modulo NOISE
Codigo de comando: 0x34
Tamano de trama: 13 bytes.
Opciones de trama:� N: Numero de bloque.� X: Valor maximo, 6 bytes en ASCII.� Y: Valor mınimo, 6 bytes en ASCII.
6.3.5. Funciones de captura e informacion
6.3.6. Recibir parametros de configuracion de la tarea de cap-
tura
Codigo de comando: 0x51
Tamano de trama: Variable.
Opciones de trama:
CAPITULO 6. LISTA DE COMANDOS 69� SL: Tiempo de muestreo en ms, byte LSB.� SH: Tiempo de muestreo en ms, byte MSB.� SS: Tiempo total de captura en segundos.� V: Variables, 3 bytes por variable:
◦ T: Valor tipo.
◦ N: Numero de bloque.
◦ O: Numero de salida.
6.3.7. Recibir parametros de configuracion de la tarea de cap-
tura
Codigo de comando: 0x52
Tamano de trama: 2 bytes.
Opciones de trama:� OP: Estado de la tarea de captura:
◦ 0: Desactivada.
◦ 1: Iniciar captura.
◦ 2: Datos listos.
◦ 1: Enviar datos.
◦ 2: Borrar datos.
El registro de operacion de la tarea de captura se puede consultar con el comando 0x53.
Es recomendable consultar el estado del registro captura antes de iniciar o configurar una
captura de datos. La tarea de captura es compartida entre las maquinas virtuales. El RTOS
no permite que una vez iniciada la tarea de captura esta sea interrumpida por otra maquina
virtual que no sea la que la inicio; sin embargo, la tarea de captura tiene un timeout de 30
segundos si esta no recibe actividad.
CAPITULO 6. LISTA DE COMANDOS 70
6.3.8. Devolver valor de los registros de la tarea de captura
Codigo de comando: 0x53
Tamano de trama: 1 byte.
Opciones de trama:� 0 - 2: Numero de registro.
Indices de los registros de operacion de la tarea de captura:
0: Maquina que tiene la tarea
1: Estado de la tarea de captura (Maq 0)
2: Estado de la tarea de captura (Maq 1)
6.3.9. Enviar valores de salida de los modulos virtuales
Codigo de comando: 0x54
Tamano de trama: Variable.
Opciones de trama:� OP: Variables, 3 bytes por variable:
◦ T: Valor tipo.
◦ N: Numero de bloque.
◦ O: Numero de salida.
Esta funcion es util para verificar en tiempo real el comportamiento de la planta y el con-
trol, una finalizada el comando la unidad enviara en el mismo orden la variables consultadas
en formato normalizado (ASCII 6 bytes).
CAPITULO 6. LISTA DE COMANDOS 71
6.3.10. Guardar valor en un registro de proposito general
Codigo de comando: 0x55
Tamano de trama: 7 bytes.
Opciones de trama:� N: Numero de registro.� V: Valor, 6 bytes en ASCII.
6.3.11. Enviar informacion acerca porcentaje de uso de la
CPU
Codigo de comando: 0x56
Tamano de trama: 1 byte.
Opciones de trama:� N: Cualquier valor para cumplir formato de comandos.
Este comando envıa el porcentaje de uso de la CPU donde 1.0 representa el 100 %.
Capıtulo 7
Cambiar la configuracion de los
perifericos
Estos son los pasos a seguir para cambiar la configuracion de un dispositivo IO, esta
configuracion se guardara en memoria externa EEPROM y se ejecutara una vez que se reinicia
la unidad.
Procedimiento:
1. Encender la unidad y esperar a que termine la secuencia de inicio. Si la configuracion
no es funcional, debe apagar la unidad, mantener presionado el boton ACC/CAL y
luego encender la unidad. Soltar el boton de ACC/CAL hasta que el led de ON se
encienda. Esto evitara que se cargue la configuracion de la memoria EEPROM.
2. Conecte un cable serial directo, al puerto COM1 de la unidad.
3. Iniciar una sesion de usuario con la unidad y LookRS232, para ello configure el Loo-
kRS232 con los siguientes parametros:
Transfer speed: 9600
Data bits: 8
Stop bits: 2
72
CAPITULO 7. CAMBIAR LA CONFIGURACION DE LOS PERIFERICOS 73
Parity control: None
Flow control: None
4. Antes de enviar un comando, debe disenar una configuracion. Note que en el archivo
IO CFG.H, cada parametro esta asociado con un registro IO Config. Este indica el
numero de registro y numero o rango de bits. Ejemplo: Se desea cambiar la configuracion
del ADC1 con los siguientes parametros:
Parametro Valor IO Config Valor en IO Config
ADCx EN PERIPH 1 IO Config[0.0] 1d
ADCx SAMPLING MODE 0 IO Config[0.1] 0d
ADCx SAMPLES PCV 2 IO Config[0.7-2] 2d
ADCx SAMPLING RATE 900 IO Config[1] 0x03h
IO Config[2] 0x84h
ADCx V REF POS CH AVDD IO Config[3.3-0] 3d
ADCx V REF NEG CH AVSS IO Config[3.7-4] 2d
ADCx RES BITS 0 IO Config[4.3-0] 0
ADCx DATA OUT SIGN INT IO Config[4.7-4] 1d
El comando inicia con una peticion a la unidad de configuracion de dispositivo IO me-
diante el codigo 0x17h, luego con la cantidad de bytes a enviar (igual a total de bytes
de la trama - 2), numero de periferico a configurar y por ultimo bytes de configuracion.
Con estos datos, la trama se compone de la siguiente manera:
CAPITULO 7. CAMBIAR LA CONFIGURACION DE LOS PERIFERICOS 74
Byte Nombre Valor
1 Comando 0x17h
2 Tamano 0x06h
3 Periferico 0x20h
4 IO Config[0] 0x05h
5 IO Config[1] 0x03h
6 IO Config[2] 0x84
7 IO Config[3] 0x23h
8 IO Config[4] 0x10h
5. Debe enviar los comandos en secuencia y no uno a uno; para ello, utilize la funcion GO
del programa LookRS232. Cuando termine de enviar los comando la unidad envıa el
simbolo “S” el cual indica que la configuracion se recibio con exito. Si recibe el caracter
“E”, significa que se produjo un error de comunicacion y debe revisar que la trama
este correcta.
Figura 7.1: Comando recibido.
6. Ahora hay que guardar la configuracion enviando el comando 0x15h, con la siguiente
estructura:
CAPITULO 7. CAMBIAR LA CONFIGURACION DE LOS PERIFERICOS 75
Tabla 7.1: Numeros de dispositivo.
Dispositivo Numero
0x10h Puerto A
0x11h Puerto B
0x12h Puerto C
0x13h Puerto D
0x14h Puerto E
0x15h Puerto F
0x16h Puerto G
0x17h Entradas Analogicas
0x20h ADC 1
0x21h ADC 2
0x30h UART 1
0x31h UART 2
0x40h I2C 1
0x41h I2C 2
0x50h SPI 1
0x51h SPI 2
0x60h PWM
0x70h QEI 1
CAPITULO 7. CAMBIAR LA CONFIGURACION DE LOS PERIFERICOS 76
Byte Nombre Valor
1 Comando 0x15h
2 Tamano 0x01h
3 Vacio 0x00h
7. Por ultimo, debe reiniciar la unidad para que la configuracion sea ejecutada, para ello
se puede presionar el boton de RESET o enviar el comando 0x18h:
Byte Nombre Valor
1 Comando 0x18h
2 Tamano 0x01h
3 Vacio 0x00h
Capıtulo 8
Creacion de modulos
Esta seccion explica como crear nuevas funciones o modulos virtuales. El proceso se rea-
liza directamente en el compilador MPLAB C30 de Microchip, por lo que es necesario una
recompilacion del firmware y reprogramacion del microcontrolador.
Como ejemplo, se creara el modulo virtual NOISE, este modulo tendra la funcion de
generar una salida con valores aleatorios para simulacion de ruido; el modulo virtual NOISE
tendra como parametros el valor maximo y mınimo de salida.
8.1. Definiciones
Cada modulo virtual se compone de los siguientes elementos:
Estructura: Esta se define como un nuevo tipo dentro del programa, esta se crea como
un a estructura (struct) que se compone de:� Variables y constantes intermedias para el calculo del modulo virtual.� Registro de salida y puntero(s) de la(s) entrada(s).� Punteros a los modulos anterior y pasado del mismo tipo. Todos los modulos del
mismo tipo se enlazan uno con el otro. Ver figura
77
CAPITULO 8. CREACION DE MODULOS 78
Valor tipo: Define el numero valor tipo, el cual identifica el modulo virtual.
Numero base: Define la posicion en la tabla de punteros a modulos PTR STRUCTS.
Funcion NEW: Crea temporalmente en memoria dinamica el modulo virtual.
Funcion DESTROY: Destruye el ultimo modulo virtual.
Funcion GETPTR: Devuelve un puntero de una estructura.
Funcion de configuracion: Configura el modulo de acuerdo a los parametros.
Funcion SAMPLE: Realiza el calculo de una muestra segun la funcion del modulo.
Cada funcion debe ser global, el archivo APP FUNC.H contiene todos los encabezados
establece una funcion como funcion global.
8.2. Estructura
La estructura se crea con el comando typedef struct{} dentro del archivo SYS BLOCKS.H,
ejemplo:
typedef struct noise {
Variables intermedias
INT16S m;
INT16S b;
Puntero a una entrada ( solo en casos de modulos con entrada(s) )
INT16S * input
Registro de salida ( solo en casos de modulos con salida(s) )
INT16S output;
Puntero a la estructura NOISE anterior
void * last;
Puntero a la estructura NOISE siguiente
void * next;
CAPITULO 8. CREACION DE MODULOS 79
} NOISE;
Esto define un tipo de modulo NOISE con todas sus variables y parametros, con ello, se
simplifica la creacion, ejecucion y destruccion de modulos virtuales NOISE.
8.3. Valor tipo
El valor tipo identifica el tipo de modulo virtual. Cuando se crea un nuevo modulo se
debe especificar un valor tipo, este se asigna dentro del archivo SYS DEF.H:
#define NOISE ID 82
Cuando se desee utilizar un modulo NOISE se debe usar el numero 82.
8.4. Numero base
Este numero identifica la posicion dentro de la tabla PTR STRUCTS de la maquina
virtual de la primera y ultima estructura NOISE. El archivo SYS DEF.H contiene todos los
numeros base de cada modulo:
#define NOISE MODULES BASE 14
Esto significa que en la posicion 14 de la tabla PTR STRUCTS de la maquina virtual
estan los punteros de la primera y ultima estructura NOISE.
Ademas, se debe crear un contador de estructuras NOISE, este contador se guarda como
parametro de la estructura VM de la maquina virtual:
INT8U NOISEmodules cont;
Cada vez que se crea o destruye una estructura NOISE el contador aumenta o disminu-
ye, esta variable permite mantener una estadıstica de cuantos modulos NOISE existen. El
contador debe inicializarse a cero, la funcion Virtual Machine Init Components dentro del
archivo VM FUNC.C inicializa todas las variables de la maquina virtual, debe anadirse la
lınea:
CAPITULO 8. CREACION DE MODULOS 80
Machine->NOISEmodules cont = 0;
8.5. Funcion NEW
Cada tipo de modulo debe tener un constructor de estructuras, esta funcion verifica si
hay memoria suficiente para crear un modulo, en caso contrario el modulo no sera creado.
Cuando se crea un modulo este se enlaza al ultimo modulo existente del mismo tipo. Si este
es el primer modulo este se enlaza directamente a la tabla PTR STRUCTS de la maquina
virtual.
void NOISEnew( VM * Machine )
{
NOISE * nuevo;
NOISE * last = Machine->ptr structs[ NOISE MODULES BASE ][1];
nuevo = (NOISE *) malloc ( sizeof( NOISE ) );
if( nuevo != NULL )
{
nuevo->next = NULL;
Machine->NOISEmodules cont++;
if( Machine->ptr structs[ NOISE MODULES BASE ][0] == NULL )
{
Machine->ptr structs[ NOISE MODULES BASE ][0] = nuevo;
nuevo->last = NULL;
}
else
{
last->next = nuevo;
nuevo->last = last;
}
Machine->ptr structs[ NOISE MODULES BASE ][1] = nuevo;
CAPITULO 8. CREACION DE MODULOS 81
}
}
}
Cada estructura se crea en la seccion de memoria Y[13] del microcontrolador, ciertas
funciones de la biblioteca DSP necesitan de memoria X, para reservar memoria X se debe
utilizar las funciones de memoria dinamica del RTOS, se reservo una seccion de memoria X
para este proposito. Utilize la funcion:
OSMemGet( filter coeff buf, &err);
Para reservar memoria dinamica en la seccion X, esta funcion devuelve un puntero a una
seccion de 20 bytes o segun la definida por XMEM STACK SIZE en el archivo SYS CFG.H.
Utilize:
OSMemPut( filter coeff buf, puntero );
Para liberar una seccion de memoria X.
8.6. Funcion DESTROY
Esta funcion destruye un modulo virtual y devuelve la memoria utilizada.
void NOISEdestroy( VM * Machine )
{
NOISE * last = Machine->ptr structs[ NOISE MODULES BASE ][1];
if( last != NULL )
{
Machine->ptr structs[ NOISE MODULES BASE ][1] = last->last;
free( last );
Machine->NOISEmodules cont--;
if( Machine->NOISEmodules cont == 0 )
CAPITULO 8. CREACION DE MODULOS 82
Machine->ptr structs[ NOISE MODULES BASE ][0] = NULL;
}
}
El modulo destruido es el ultimo de la lista enlazada.
8.7. Funcion GETPTR
Esta funcion devuelve el puntero de la estructura del modulo, se utiliza como parametro
el numero de modulo; este numero de modulo corresponde a la cantidad de saltos que se
deben realizar para accesar al modulo dentro de la lista enlazada. El numero 0 corresponde
a la estructura directamente conectada a PTR STRUCTS.
NOISE * NOISEgetptr( VM * Machine, INT8U element )
{
INT8U i;
NOISE * aux = Machine->ptr structs[ NOISE MODULES BASE ][0];
for( i = 0; i <element; i++ )
{
if( aux->next != NULL ) aux = (NOISE*)aux->next;
else return NULL;
}
return aux;
}
8.8. Funcion de configuracion
Esta funcion permite configurar el modulo de acuerdo a los parametros establecidos por
el usuario.
void NOISE Config( NOISE * NOISE struct, INT8U * max, INT8U * min )
CAPITULO 8. CREACION DE MODULOS 83
{
FP32 fmax, fmin;
fmax = ascii2float( max, ASCII NUMBERS );
fmin = ascii2float( min, ASCII NUMBERS );
NOISE struct->m = float2fixed( (fmax - fmin)/ RAND MAX );
NOISE struct->b = float2fixed( fmin );
}
La funcion recibe, el puntero a la estructura NOISE que se desea configurar, se puede
utilizar externamente la funcion GETPTR para obtener este puntero, ademas se reciben dos
punteros a cadenas de caracteres segun el tamano establecido por ASCII NUMBERS (6 bytes
por defecto), cada cadena contiene el valor maximo y mınimo (normalizado) que debe generar
la funcion NOISE. La funcion de configuracion NOISE calcula los valores m y b, los cuales
sirven para escalar el valor generado por rand()[14].
La funcion de configuracion se ejecuta con un comando asociado, el archivo COMMAND.C
define todos los comandos.
case 0x34:
NOISE Config( NOISEgetptr( Machine, *(ptr command)), (ptr command+1),
(ptr command+7) );
break;
8.9. Funcion SAMPLE
La funcion SAMPLE ejecuta el calculo para obtener una muestra, este calculo depende
de cada modulo:
void NOISE Sample( NOISE * NOISE struct )
{
NOISE struct->output =
CAPITULO 8. CREACION DE MODULOS 84
fixed x fixed( rand(), NOISE struct->m )
+ NOISE struct->b;
}
La funcion NOISE Sample calcula un valor aleatorio que se mantenga dentro del rango
definido por el usuario, los valores m y b fueron previamente establecidos por NOISE Config.
Cada funcion SAMPLE esta asociada con una funcion de ejecucion de modulo, esta fun-
cion es la que utiliza la maquina virtual para ejecutar la estructura de control configurada
por el usuario, ver archivo APP EXE.C:
void App Instr NOISE( VM * Machine )
{
Machine->App PC++;
NOISE Sample( (NOISE *)( *(Machine->App PC)) );
}
Ademas se debe actualizar la tabla de funciones, esta es una tabla de punteros a las
funciones de ejecucion del modulo, esto permite que la seleccion de la funcion a ejecutar por
parte de la maquina virtual se realize ordenadamente. La inicializacion de la tabla se realiza
en la rutina App Instr Init dentro del archivo APP EXE.C.
App Func Ptrs[ NOISE ID ] = App Instr NOISE;
Por ultimo, se deben actualizar las siguientes funciones secundarias:
App Get Block Struct Ptr, esta funcion devuelve el puntero de la estructura segun el
valor tipo y numero de modulo.
case NOISE ID:
return (void*)NOISEgetptr( Machine, number );
break;
CAPITULO 8. CREACION DE MODULOS 85
App Assign Nets Out Ptrs, esta funcion devuelve un puntero al registro de salida de un
modulo, si el modulo no tiene salidas se debe omitir esta actualizacion.
case NOISE ID:
return &( NOISEgetptr( Machine, s number )->output);
break;
App Assign Nets In Ptrs, esta funcion devuelve un puntero al puntero de entrada de un
modulo, si el modulo no tiene entradas se debe omitir esta actualizacion. Ver la funcion en
archivo NETLIST.C como ejemplo.
App C D Modules, esta funcion crea o destruye modulos segun el archivo de actualizacion
de modulos que se carga con el comando 0x31, ver archivo COMMAND.C.
case NOISE ID:
m cont = *(file+j+1) - Machine->NOISEmodules cont;
if( m cont >0 ) C Ptrs = NOISEnew;
if( m cont <0 ) C Ptrs = NOISEdestroy;
break;
Esquemas
86
ESQUEMAS 87
ESQUEMAS 88
ESQUEMAS 89
ESQUEMAS 90
ESQUEMAS 91
ESQUEMAS 92
ESQUEMAS 93
ESQUEMAS 94
ESQUEMAS 95
ESQUEMAS 96
Bibliografıa
[1] Applied Industrial Control Solutions. Digital Filter Design Writing Differen-
ce Equations For Digital Filters [en lınea].[22 de Setiembre, 2007]. URL
http://www.apicsllc.com/apics/Sr 3/Sr 3.htm.
[2] Beis, Uwe Converting Analog into Digital (IIR) Filters [en lınea]. [10 de Enero, 2008].
URL http://www.beis.de/Elektronik/Filter/AnaDigFilt/AnaDigFilt.html
[3] Brey, Barry B. Los Microprocesadores Intel, Arquitectura, programacion e intergaz de
los procesadores 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro
y Pentium II. Quinta Edicion. Prentice Hall of India, 2001.
[4] Cisco Networking Academy. Principios de Networking: Modelos de Networking [en lınea].
Junio, 2005, [5 de Noviembre, 2007]. URL http://cisco.netacad.net.
[5] Dahmke, Mark. Microcomputer Operating Systems. Byte Books, 1982.
[6] Deitel, P.J.; Deitel H.M. JAVA, How to Program. Seventh Edition. Prentice Hall, 2007.
[7] Facultad de Ciencias de la Computacion Grafos, Estructruras de Datos y Algorit-
mos [en lınea]. Febrero, 2008, [20 de Febrero, 2008]. URL http://www.cs.buap.mx/ ti-
tab/files/grafos1.pdf.
[8] Kernighan Brian W; Ritchie Dennis M. El Lenguaje de Programacion C. Segunda Edi-
cion. Prentice Hall, 1991.
[9] Katsuhiko, Ogata. Sistemas de Control en Tiempo Discreto. Segunda Edicion. Prentice
Hall Hispanoamericana, S.A, 1996.
97
BIBLIOGRAFIA 98
[10] Labrosse, Jean J. Embedded Systems Building Blocks. Second Edition. Lawrence, KS:
CMPBooks, 2002.
[11] Labrosse, Jean J. MicroC/OS-II The Real-Time Kernel. Segunda Edicion. Lawrence,
KS: CMPBooks, 2002.
[12] Microchip Technology Inc. MPLAB ICD2 In–Circuit Debugger User’s Guide. Microchip
Technology Inc., 2005.
[13] Microchip Technology Inc. dsPIC33F Family Referen-
ce Manual. [en lınea]. [1 de Agosto, 2007]. URL
http://www.microchip.com/stellent/idcplg?IdcService=SS GET PAGE&nodeId=2573.
[14] Microchip Technology Inc. dsPIC® Language Tools Libraries. [en lınea]. [1 de Agosto,
2007]. URL http://ww1.microchip.com/downloads/en/DeviceDoc/51456b.pdf.
[15] Microchip Technology Inc. MPLAB® C Compiler User’s Guide. [en lınea]. [1 de Agosto,
2007]. URL http://ww1.microchip.com/downloads/en/DeviceDoc/51284G.pdf.
[16] Rorabaugh, C. Britton. Digital Filter Designer’s Handbook. McGraw Hill, 1993.
[17] Proakis, John G; Manolakis Dimitris G. Digital Signal Processing, Principles, Algorithms
and Applications. Fourth Edition. Prentice Hall of India, 2006.
[18] Universidad Central de Chile. Sistemas operativos de tiempo real [en lınea]. [5 de No-
viembre, 2007]. URL http://eiec.ucentral.cl/ftp/material/apuntes/iec51/Sistemas.
[19] Tocci, Ronald J. Sistemas Digitales, Principios y Aplicaciones. Sexta Edicion. Pearson
Educacion, 1996.
[20] Wikimedia Foundation, Inc. Embedded system [en lınea]. Octubre, 2007, [3 de Noviembre,
2007]. URL http://en.wikipedia.org/wiki/Embedded system.
[21] Wikimedia Foundation, Inc. Sistemas operativos de tiempo real
[en lınea]. Noviembre, 2007, [2 de Noviembre, 2007]. URL
http://es.wikipedia.org/wiki/Sistemas operativos de tiempo real.