Manual del BPC - Escuela de Ingeniería Electrónica

Anuncio
Instituto Tecnológico de Costa Rica
Escuela de Ingenierı́a Electrónica
Unidad Controladora de Procesos
Manual de Usuario
Ejecutor:
Daniel Castro Molina
Cartago, 2 de junio de 2008
Índice general
1. Introducción
1
2. Diagrama de pines de la placa base
2
3. Descripción 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 comunicación UART . . . . . . . . . . . . . . . . . .
14
3.4. Puerto de comunicación Ethernet . . . . . . . . . . . . . . . . . . . . .
16
3.5. Entradas Analógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.6. Salidas Analógicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
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. Módulo de Conversión Analógico Digital: . . . . . . . . . . . . . . . . .
27
3.10.1. Opciones de configuración del módulo: . . . . . . . . . . . . . .
27
3.10.2. Funciones del módulo: . . . . . . . . . . . . . . . . . . . . . . .
29
3.11. Módulo de comunicaciones I2C: . . . . . . . . . . . . . . . . . . . . . .
31
3.11.1. Opciones de configuración del módulo: . . . . . . . . . . . . . .
31
3.11.2. Funciones del módulo: . . . . . . . . . . . . . . . . . . . . . . .
32
i
ÍNDICE GENERAL
ii
3.12. Módulo de comunicaciones SPI: . . . . . . . . . . . . . . . . . . . . . .
35
3.12.1. Opciones de configuración del módulo: . . . . . . . . . . . . . .
35
3.12.2. Funciones del módulo: . . . . . . . . . . . . . . . . . . . . . . .
36
3.13. Módulo de comunicaciones UART: . . . . . . . . . . . . . . . . . . . .
38
3.13.1. Opciones de configuración del módulo: . . . . . . . . . . . . . .
38
3.13.2. Funciones del módulo: . . . . . . . . . . . . . . . . . . . . . . .
39
3.14. Módulo PWM: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
3.14.1. Opciones de configuración del módulo: . . . . . . . . . . . . . .
41
3.14.2. Funciones del módulo: . . . . . . . . . . . . . . . . . . . . . . .
43
3.15. Módulo Interfaz de Encodificador de Cuadratura (QEI): . . . . . . . . .
45
3.15.1. Opciones de configuración del módulo: . . . . . . . . . . . . . .
45
3.15.2. Funciones del módulo: . . . . . . . . . . . . . . . . . . . . . . .
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. Descripción de archivos importantes . . . . . . . . . . . . . . . .
49
5. Guia de comandos
51
5.1. Estructura de los comandos . . . . . . . . . . . . . . . . . . . . . . . .
52
5.2. Secuencia de Envı́o y Confirmación . . . . . . . . . . . . . . . . . . . .
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 máquina virtual . . . . . . . . . . . . . . . . .
56
6.1.2. Devuelve registro de estado . . . . . . . . . . . . . . . . . . . .
56
6.1.3. Borra la memoria EEPROM . . . . . . . . . . . . . . . . . . . .
57
ÍNDICE GENERAL
iii
6.1.4. Guarda la configuración de sistema en EEPROM . . . . . . . .
58
6.1.5. Recibe el archivo de aplicación . . . . . . . . . . . . . . . . . . .
58
6.1.6. Recibe un archivo de configuración 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 medición a un canal ADC . . . . . . . . . .
59
6.1.10. Define un rango de medición a un canal DAC . . . . . . . . . .
60
6.1.11. Lee un canal ADC . . . . . . . . . . . . . . . . . . . . . . . . .
61
6.2. Funciones de módulos parte I . . . . . . . . . . . . . . . . . . . . . . .
61
6.2.1. Cambiar la configuración de un filtro . . . . . . . . . . . . . . .
61
6.2.2. Configurar un módulo de función de transferencia . . . . . . . .
62
6.2.3. Recibe coeficientes Kp, Ki, Kd, Ts para configurar PID . . . . .
63
6.2.4. Recibe parametros de configuración de oscilador senoidal . . . .
64
6.2.5. Recibe parámetros de configuración de oscilador rectagular . . .
65
6.2.6. Recibe parametros de configuración de oscilador triangular . . .
65
6.2.7. Recibe parametros de configuración de oscilador triangular . . .
66
6.2.8. Recibe parámetros de configuración de K . . . . . . . . . . . . .
66
6.3. Funciones de módulos parte II . . . . . . . . . . . . . . . . . . . . . . .
67
6.3.1. Crear o destruir módulos virtuales . . . . . . . . . . . . . . . . .
67
6.3.2. Ajusta ganancia de un módulo GAIN . . . . . . . . . . . . . . .
67
6.3.3. Ajusta lı́mites de un módulo SAT . . . . . . . . . . . . . . . . .
68
6.3.4. Ajusta lı́mites de un módulo NOISE . . . . . . . . . . . . . . .
68
6.3.5. Funciones de captura e información . . . . . . . . . . . . . . . .
68
6.3.6. Recibir parametros de configuración de la tarea de captura . . .
68
6.3.7. Recibir parámetros de configuración 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 módulos virtuales . . . . . . . . .
70
ÍNDICE GENERAL
iv
6.3.10. Guardar valor en un registro de propósito general . . . . . . . .
71
6.3.11. Enviar información acerca porcentaje de uso de la CPU . . . . .
71
7. Cambiar la configuración de los periféricos
72
8. Creación de módulos
77
8.1. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
8.2. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
8.3. Valor tipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
8.4. Número base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
8.5. Función NEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
8.6. Función DESTROY . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
8.7. Función GETPTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
8.8. Función de configuración . . . . . . . . . . . . . . . . . . . . . . . . . .
82
8.9. Función SAMPLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
Esquemas
86
Bibliografı́a
97
Índice de figuras
2.1. Diagrama de pines . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3.1. Estructura del hardware de la unidad . . . . . . . . . . . . . . . . . . .
7
3.2. Conexión del módulo SPI
. . . . . . . . . . . . . . . . . . . . . . . . .
9
3.3. Esquema del módulo SPI en la unidad . . . . . . . . . . . . . . . . . .
10
3.4. Conexión del módulo I2C . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3.5. Esquema del módulo I2C en la unidad . . . . . . . . . . . . . . . . . .
12
3.6. Conexión del puerto UART al PC . . . . . . . . . . . . . . . . . . . . .
14
3.7. Esquema del puerto UART . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.8. Conexión del puerto Ethernet . . . . . . . . . . . . . . . . . . . . . . .
16
3.9. Sistema Xport AR de Lantronix . . . . . . . . . . . . . . . . . . . . . .
16
3.10. Esquema del puerto Ethernet . . . . . . . . . . . . . . . . . . . . . . .
17
3.11. Conexión de las entradas analógicas . . . . . . . . . . . . . . . . . . . .
18
3.12. Esquema de las entradas analógicas . . . . . . . . . . . . . . . . . . . .
20
3.13. Conexión de las salidas analógicas . . . . . . . . . . . . . . . . . . . . .
21
3.14. Esquema de las salidas analógicas . . . . . . . . . . . . . . . . . . . . .
22
3.15. Conexión de QEI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.16. Esquema de QEI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
3.17. Conexión de PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.18. Esquema de PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
v
ÍNDICE DE FIGURAS
vi
3.19. Estructura C de la capa drivers . . . . . . . . . . . . . . . . . . . . . .
27
3.20. Curvas representativas de los modos de operación offset del PWM . . .
43
5.1. Algoritmo de la tarea de comunicación . . . . . . . . . . . . . . . . . .
53
7.1. Comando recibido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
Capı́tulo 1
Introducción
La unidad controldadora de procesos fue diseñada para facilitar la creación de
estructuras de control y regulación para el laboratorio de control automático del escuela
de Ingenierı́a en Electrónica del ITCR.
Esta unidad controladora permite utilizar interfaces de entrada y salida como convertidores analógicos, buses de comunicación SPI, I2C, decodificadores de cuadratura y
generación PWM, como herramientas de hardware para facilitar la conexión de plantas
experimentales.
La unidad también dispone de algoritmos y rutinas de filtros digitales, funciones de
control, funciones generales de operaciones comunes y matemáticas. Además posee un
convertidor serial/ethernet con servidor web permitiéndose crear páginas y aplicaciones
tipo JAVA Applets.
Se recomienda leer [13], ya que contiene información muy detallada sobre el funcionamiento del microcontrolador.
1
Capı́tulo 2
Diagrama de pines de la placa base
AN#+: Entrada analógica positiva. 10V máximo.
AN#-: Entrada analógica negativa. -10V mı́nimo.
AOUT#: Salida analógica. 10 mA máximo.
AGND: Tierra analógica.
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 dirección. Colector abierto, 5V.
FLTA: Entrada A por falla en motor. 5V CMOS.
FLTB: Entrada B por falla en motor. 5V CMOS.
2
CAPÍTULO 2. DIAGRAMA DE PINES DE LA PLACA BASE
Figura 2.1: Diagrama de pines.
3
CAPÍTULO 2. DIAGRAMA DE PINES DE LA PLACA BASE
4
TEST#: Punto de prueba salida analógica del acondicionador de señal.
MCLR: Salida para conexión de botón de reinicio. Tipo NO.
ACC: Salida para conexión de botón de acción. 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 selección dispositivo SPI. 5V CMOS.
SDA: Entrada - Salida de datos bus I2C. 5V CMOS.
SCL: Salida digital de reloj I2C. 5V CMOS.
A1: Ánodo de LED indicador de RUN. 5V TTL, 5mA máximo.
K1: Cátodo de LED indicador de RUN.
A2: Ánodo de LED indicador de ERROR. 5V TTL, 5mA máximo.
K2: Cátodo de LED indicador de ERROR.
T#: Entrada para temporizador, sincronizador o entrada digital de propósito
general. 5V CMOS.d
V+: Entrada de alimentación, +12V.
V-: Entrada de alimentación, -12V.
GND: Tierra digital.
TX1: Transmisión puerto serie RS232, directo del XPort.
RX1: Recepción puerto serie RS232, directo del XPort.
CAPÍTULO 2. DIAGRAMA DE PINES DE LA PLACA BASE
CTS1: Clear to send puerto serie RS232, directo del XPort.
RTS1: Ready to send puerto serie RS232, directo del XPort.
TX2: Transmisión puerto serie RS232, directo del microcontrolador.
RX2: Recepción 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.
5
Capı́tulo 3
Descripción de hardware
Un esquema simple del hardware de toda la unidad se muestra en la figura 3.1;
como unidad central se utilizó el dsPIC33FJ256MC710 previamente descrito. El sistema
cuenta con:
3 buses de datos: SPI, I2C y uno paralelo de 16 bits (desarrollo parcial): Para
expansión de hardware.
Puerto de comunicación UART: Para operación y configuración local de la unidad.
Puerto de comunicación Ethernet mediante Lantronix XPortAR: Para operación
y configuración remota de la unidad.
4 entradas y 2 salidas analógicas: De rangos fijos seleccionables.
Control de motores: Mediante QEI y PWM.
Puerto RJ11 para programación del dsPIC mediante MPLAB ICD2.
Nota:
No debe utilizarse las fuentes de la unidad para alimentar cualquier conexión externa. Para estos casos utilizase una fuente externa.
6
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.1: Estructura del hardware de la unidad.
7
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.1.
8
Bus de datos SPI
El módulo SPI (Interface Serial para Periféricos) 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
máximo).
La unidad cuenta con 3 pines de bus y 8 pines de selección de dispositivos:
SCK: Salida del reloj de sincronización.
SDO: Salida de datos seriales.
SDI: Entrada de datos seriales.
SSx: Hasta 8 salidas para selección de dispositivos activos en bajo.
La figura 3.2 muestra el diagrama de conexión 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.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.2: Conexión del módulo SPI.
9
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.3: Esquema del módulo SPI en la unidad.
10
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.2.
11
Bus de datos I2C
El módulo I2C ( bus de Circuitos Inter–Integrados) es un bus de datos serial de
2 lı́neas que permite la conexión de hasta 127 dispositivos en modo simple y hasta
1023 dispositivos en modo extendido sobre el mismo bus, la velocidad de comunicación
puede ser de hasta 400Kbps en versiones antiguas pero se puede lograr 1Mbps en nuevas
versiones limitando el número de dispositivos conectados al bus1 .
Los pines del módulo son:
SCL: Salida del reloj de sincronización.
SDA: Pin bidireccional de datos seriales.
La figura 3.4 muestra el diagrama de conexión con otros dispositivos.
Figura 3.4: Conexión del módulo I2C.
Se utilizó el CI P82B96 el cual es un buffer bidireccional especial para I2C. Este buffer permite extender la comunicación 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 selección de las resistencias de pull–up R10 y R11 se debe
considerar la capacitancia total sobre cada lı́nea y la velocidad de comunicación, sin
1
Según la capacitancia de entrada de cada dispositivo
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
12
embargo, este como proyecto es de aplicación general, se seleccionó los valores estándar
teóricos para lograr una comunicación de hasta 100kbps según lo detalla Microchip en
la hoja de datos del microcontrolador; el valor correcto se puede seleccionar empı́ricamente, 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 también permite comunicaciones Master – Master sin modificación de la capa fı́sica.
Figura 3.5: Esquema del módulo I2C en la unidad.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.3.
13
Bus de datos de 16 bits
De manera opcional se diseño un bus paralelo de 16 bits similar a la interfaz que presentan los microprocesadores 8086. Este bus puede direccionar hasta 128k direcciones
de memoria para datos y periféricos E/S.
Este bus no se desarrolló completamente debido a que no se adquirieron los componentes necesarios para su implementación. Posterior a la construcción del circuito
impreso, se detectaron errores de diseño, además, se pensó en utilizar estos pines no
como bus de datos de 16 bits si no como entradas y salidas de propósito general (tipo
PLC) ya que se consideró 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 recomendación final.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.3.1.
14
Puerto de comunicación UART
Se habilitó un puerto UART para comunicación local; se usa un cable directo RS–
232 para conexión con la PC,
Figura 3.6: Conexión del puerto UART al PC.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.7: Esquema del puerto UART.
15
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.4.
16
Puerto de comunicación Ethernet
Para la conectividad Ethernet se utiliza un sistema XPortAR de Lantronix; este
sistema convierte de manera transparente la comunicación serial RS232 a una comunicación Ethernet, además integra un servidor WEB que es compatible con aplicaciones
JAVA Applets e integra un conjunto de métodos para estableces sesiones remotas y
funciones de send, get, length, etc.
Figura 3.8: Conexión del puerto Ethernet.
El sistema XPortAR incluye dos puertos RS232, ambos puertos pueden establecer
sesiones con el microcontrolador, el puerto 2 del XportAR está directamente conectado
al puerto 2 del microcontrolador; el puerto 1 del XportAR está habilitado para conexión
directa con la PC pero se puede conectar al puerto 1 del microcontrolador utilizando
un cable serial cruzado, o realizando la conexión directamente desde la placa.
Figura 3.9: Sistema Xport AR de Lantronix.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.5.
17
Entradas Analógicas
La unidad cuenta con 4 entradas analógicas, cada entrada analógica puede medir
señales de hasta ±50mV , el rango de medición 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 analógico. La figura 3.11 ejemplifica los
modos de conexión.
El microcontrolador permite un rango máximo de +3.3V en cada entrada analógica,
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 atenúe, amplifique o aplique un nivel CD a la señal, esto se realiza con potenciómetros digitales AD5263 de 256
pasos; los potenciómetros R1 y R2 se utilizan para atenuar la señal, el potenciómetro
R3 ajusta la ganancia del amplificador de instrumentación y el potenciómetro R4 sirve
para aplicar un nivel CD. La segunda etapa del circuito consiste de un filtro pasobajos antialias tipo Bessel de orden 2, este filtro se hace necesario para atenuar ruido
Figura 3.10: Esquema del puerto Ethernet.
18
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.11: Conexión de las entradas analógicas.
Tabla 3.1: Rangos de medición de cada entrada analógica.
Opción
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
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
19
y para eliminar las frecuencias que puedan interferir en el procesamiento digital. La
frecuencia máxima de muestreo del sistema es 1 kHz, esto permite representar señales
de hasta 500Hz. Los sistemas de control que se encuentran en el laboratorio son en
su mayorı́a mecánicos y unos pocos son térmicos, sistemas de este tipo con ancho de
banda superior a los 100Hz son poco comunes, se eligió 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 relación 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 fórmula:
3,0524 × 10−6
C1 =
fc
Para obtener un valor cercano de 125 Hz como frecuencia de corte C1 debe ser de
24.42 nF, se utilizó un el valor estándar de 22 nF, resultando una frecuencia de corte
de 138 Hz.
3.6.
Salidas Analógicas
Se diseño el sistema con 2 salidas analógicas, cada salida analógica se calibra de la
misma manera que las entradas y se pueden seleccionar rangos de operación, 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 utilización, se debe usar una fuente externa.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.12: Esquema de las entradas analógicas.
20
21
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Tabla 3.2: Rangos de medición de cada salida analógica.
Opción
Rango Bipolar Rango Unipolar
1
±10V
0V – 10V
2
±5V
0V – 5V
3
±2V
0V – 2V
4
±1V
0V – 1V
Figura 3.13: Conexión de las salidas analógicas.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.14: Esquema de las salidas analógicas.
22
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.7.
23
Interface de Encodificador de Cuadratura (QEI)
La interfaz QEI es un circuito especial para medición de posición 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 posición 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
posición y velocidad.
Figura 3.15: Conexión de QEI.
La velocidad máxima de medición está limitada por el tiempo de muestreo de la
unidad (1ms), con esta restricción se pueden medir velocidades de hasta 30000 rpm; la
resolución de medición de posición depende del encoder siempre y cuando la frecuencia
de los pulsos no supere al máximo permitido por el microcontrolador (300ms).
3.8.
Salidas de control PWM:
La unidad cuenta con 4 módulos PWM, cada módulo se compone de tres señales:
PWMxH: Salida de modulación por ancho de pulso H.
PWMxL: Salida de modulación por ancho de pulso L.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
24
Figura 3.16: Esquema de QEI.
DIR: Salida de dirección.
Las salidas PWMxH y PWMxL son iguales, sin embargo, la señal de PWMxH puede
ser complementaria a la señal de PWMxL, además, se puede seleccionar la función de
cada salida como PWM, DIR o ON/OFF. Los 4 módulos operaran con un único timer,
esto limita el sistema a una frecuencia única para los 4 módulos.
Cada salida es de colector abierto, esto permite conectar la salida a niveles superiores que los utilizados por lógica TTL; se recomienda aislar eléctricamente cada salida
de manera óptica.
Además se cuenta con 2 entradas FLTx, estas entradas se pueden utilizar como
paro de emergencia del PWM, ambas señales actúan sobre los cuatro módulos, 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.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Figura 3.17: Conexión de PWM.
Figura 3.18: Esquema de PWM.
25
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.9.
26
Funciones de control de dispositivos IO
La estructuración de la capa controladores se muestra en la figura 3.20; el archivo IO CFG.H se utiliza como archivo único de configuración mı́nima y selección de
parámetros propios del microcontrolador, los archivos subsecuentes contienen las funciones disponibles para la utilización de cada periférico.
Se pueden realizar cambios en el archivo IO CFG.H pero estos solo son válidos en
tiempo de compilación del programa, es decir, se debe recompilar todo el proyecto y
bajarlo a la unidad utilizando algún programador compatible con dsPIC33F2 . Sin embargo, IO CFG.H solo representa la configuración inicial del sistema, también conocida
como configuración mı́nima, esta configuración mı́nima solo es necesaria para que el
microcontrolador pueda arrancar e inicializar todos los dispositivos y periféricos, a la
vez, esta es una configuración conocida de hardware funcional, 100 % operativo y se
puede utilizar como configuración final del sistema.
Si el usuario necesita de otra configuración, esta se puede realizar mediante comandos utilizando cualquier puerto RS232, esta nueva configuración se puede guardar
en memoria EEPROM y el microcontrolador la cargará despues de que se reinicie la
unidad. Para ello cada parámetro de configuración está asociado con un registro de
comando llamado IO Config. Si la nueva configuración no resulta correcta, esta se puede omitir dejando presionando el botón ACC durante el arranque, el microcontrolador
ignorará la configuración en EEPROM y cargará únicamente la configuración mı́nima;
después el usuario debe modificar la configuración o simplemente enviar el comando
de guardar para mantener la configuración mı́nima.
Las opciones de configuración son propias del microcontrolador dsPIC33FJ256MC710,
el manual de referencia [13] de la familia dsPIC33F detalla cada módulo y se recomienda
leerlo antes de realizar cualquier modificación.
2
La unidad tiene le conector RJ11 para el programador MPLAB ICD2 de Microchip
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.10.
Módulo de Conversión Analógico Digital:
3.10.1.
Opciones de configuración del módulo:
27
El microcontrolador tiene disponible dos módulos de conversión A/D y 32 canales;
ambos módulos están disponibles en la unidad, sin embargo, se limitaron a 4 canales,
ambos módulos operan en forma independiente; el archivo de configuración IO CFG.H
presenta las siguientes opciones para los módulos A/D, el valor “x” representa el número
Figura 3.19: Estructura C de la capa drivers.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
28
de módulo (1 ó 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 módulo.
ADCx SAMPLING RATE: Se especifica la velocidad de conversión de una muestra, el valor
máximo es 500 cuando se usan 12bits, y 1100 es el valor máximo cuando se usa 10bits
de resolución.
ADCx SAMPLING MODE: Permite cambiar el modo de conversión cuando se desea tomar
muestras en más 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 módulo para que
tome las muestras de manera simultánea en los canales seleccionados.
ADCx SAMPLES PCV: Especifica el número de muestras por conversión, el resultado final
es el promedio total de las muestras por canal, esta caracterı́stica aumenta el tiempo
de conversión.
ADCx V REF POS CH : Selección la fuente de referencia AVDD es la alimentación del
módulo ADC del microcontrolador, VREF P selecciona la fuente de referencia externa.
ADCx V REF NEG CH : Selección la fuente de referencia AVSS es la alimentación del
módulo ADC del microcontrolador, VREF N selecciona la fuente de referencia externa.
ADCx RES BITS: Especifica el valor de resolución de cada muestra, las opciones son 12
ó 10 bits.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
29
ADCx DATA OUT: Selecciona el formato del resultado de la conversión, 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 aritmética del sistema.
3.10.2.
Funciones del módulo:
El módulo de conversión 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:
Función IO ADCxconfig
Formato:
void IO ADC1config( void )
Valor de Entrada:
vacı́o
Valor de Retorno:
vacı́o
Operación:
Esta función configura el módulo A/D de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta función se invoca
cuando se inicializa la unidad.
Ejemplo:
IO ADC1config();
Función IO ADCxreadS
Formato:
void IO ADCxreadS( INT8U in0 sel, INT8U in0 mod, INT16S
Valor de Entrada:
in0 sel: Número de entrada analógica del dsPIC a leer.
in0 mod: 0: común, 1: diferencial.
ptr rst: Puntero al registro para resultado.
Valor de Retorno:
vacı́o
Operación:
Esta función realiza una muestra simple sobre el canal 0 del
microcontrolador. En el caso de modo diferencial utilizará la
entrada AN1 del microcontrolador como entrada negativa; en
modo común el valor VREF(-).
ptr rst )
30
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Ejemplo:
IO ADC1readS( 4, 0, &ResultadoADC );
Función IO ADCxreadM
Formato:
IO ADCxreadM( INT8U in0 sel, INT8U in0 mod,
INT8U in123 sel, INT8U in123 mod,
INT8U n ch, INT16S
Valor de Entrada:
ptr rst )
in0 sel: Número de entrada analógica del dsPIC a leer.
in0 mod: 0: común, 1: diferencial.
in123 sel: Seleccion de entradas analogicas.
in123 mod: 0: común, 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
Operación:
Esta función realiza un muestreo múltiple sobre los canales 0,
0,1 ó 0,1,2,3. Esta función es ejecutable si la resolución
configurada es de 10bits. El microcontrolador permite cualquier
entrada analógica 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 );
Función IO ADCreadDS
Formato:
IO ADCreadDS( INT8U CH0AD1, INT8U CH0AD2, INT16S
Valor de Entrada:
CH0AD1: Número de entrada analogica para CH0 de AD1.
ptr rst )
CH0AD2: Número de entrada analogica para CH0 de AD2.
ptr rst: Puntero al arreglo para resultado.
Valor de Retorno:
vacı́o
Operación:
Esta función realiza un muestreo doble simple utilizando ambos
módulos. Se convierte en una función muy útil cuando para obte-
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
31
ner conversiones con resolución de 12bits. Antes de usar la
rutina se debe llamar a la función IO ADCinitDS( ) al menos
una vez.
Ejemplo:
IO ADCinitDS( );
...
IO ADCreadDS( 0, 1, ResultadoADC );
3.11.
Módulo de comunicaciones I2C:
3.11.1.
Opciones de configuración del módulo:
El microcontrolador cuenta con dos módulos I2C, el módulo I2C1 se utiliza para control
de periféricos internos propios de la unidad, por lo tanto no se recomienda modificar la
configuración; el módulo I2C2 se utiliza como bus externo para conexión de nuevos periféricos
y cualquier configuración 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 módulo.
I2CX IPMIEN: Habilita(1) ó deshabilita (0) el modo IPMI.
32
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
I2CX A10M: Especifica si las direcciones fı́sicas son de 10 bits.
I2CX DISSLW: Mejora la velocidad de comunicación cuando el Clock Rate es mayor a
400kHz.
III2CX SMEN: Habilita(1) ó 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 sincronización del bus, 1000kHz máximo.
3.11.2.
Funciones del módulo:
Las siguientes funciones se ubican en el archivo IO I2C.C.
Función IO I2Cconfig
Operación:
Esta función configura los módulos I2C de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta función 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();
Función IO I2CXread
Operación:
Realiza una lectura secuencial de N cantidad de datos sobre
algún dispostivo I2C.
Formato:
IO I2CXread(INT8U add, INT8U
Valor de Entrada:
add: Dirección fı́sica del dispositivo a leer.
rdptr, INT8U length)
rdptr: Puntero al arreglo de datos destino.
length: Cantidad de datos a leer.
33
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Valor de Retorno:
vacı́o
Ejemplo:
IO I2C2read( 0xA0, datos, sizeof(datos) );
Función IO I2CXwrite
Operación:
Realiza una escritura secuencial de N cantidad de datos sobre
algún dispositivo I2C.
Formato:
IO I2CXwrite(INT8U add, INT8U
Valor de Entrada:
add: Dirección fı́sica del dispositivo a escribir.
wrptr, INT8U length)
wrptr: Puntero al arreglo de datos.
length: Cantidad de datos a escribir.
Valor de Retorno:
vacı́o
Ejemplo:
IO I2C2write( 0xA0, datos, sizeof(datos) );
Función IO I2CXpageHDread
Operación:
Realiza una lectura secuencial de N cantidad de datos sobre
una dirección de lógica (inicio de página) de 16bits de algún
dispositivo I2C.
Formato:
IO I2CXpageHDread(INT8U add, INT16U dir, INT8U
rdptr,
INT8U length)
Valor de Entrada:
add: Dirección fı́sica del dispositivo I2C a leer.
dir: Dirección lógica 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) );
34
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Función IO I2CXpageLDread
Operación:
Realiza una lectura secuencial de N cantidad de datos sobre
una dirección de lógica (inicio de página) de 8bits de algún
dispositivo I2C.
Formato:
IO I2CXpageLDread(INT8U add, INT16U dir, INT8U
rdptr,
INT8U length)
Valor de Entrada:
add: Dirección fı́sica del dispositivo I2C a leer.
dir: Dirección lógica 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) );
Función IO I2CXpageHDwrite
Operación:
Realiza una escritura secuencial de N cantidad de datos sobre
una dirección de lógica (inicio de página) de 16bits de algún
dispositivo I2C.
Formato:
IO I2CXpageHDwrite(INT8U add, INT16U dir, INT8U
wrptr,
INT8U length)
Valor de Entrada:
add: Dirección fı́sica del dispositivo I2C a escribir.
dir: Dirección lógica 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) );
Función IO I2CXpageLDwrite
35
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Operación:
Realiza una escritura secuencial de N cantidad de datos sobre
una dirección de lógica (inicio de página) de 8bits de algún
dispositivo I2C.
Formato:
IO I2CXpageLDwrite(INT8U add, INT16U dir, INT8U
wrptr,
INT8U length)
Valor de Entrada:
add: Dirección fı́sica del dispositivo I2C a escribir.
dir: Dirección lógica 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.
Módulo de comunicaciones SPI:
Existen dos módulos SPI, al igual que el I2C, el módulo SPI1 se reserva para periféricos
internos a la unidad y el SPI2 está disponible para operaciones de bus mediante funciones
simples de lectura/escritura.
3.12.1.
Opciones de configuración del módulo:
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
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
SPIX CKP
0
36
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 módulo.
SPIX MODE: Selecciona la operación del módulo como MAESTRO ó ESCLAVO
SPIX SMP: Indica en que parte de la seña de reloj se capturan los datos.
SPIX CKE: Especifica en que flanco de la señal de reloj se cambia el dato de salida.
SPIX CKP: Configura la polaridad de la señal de reloj.
SPIX SPRE: Configura el valor del preescaler primario.
SPIX PPRE: Configura el valor del preescaler secundario.
3.12.2.
Funciones del módulo:
Las siguientes funciones son las rutinas disponibles de lectura/escritura SPI. El protocolo
de comunicación SPI tiene la caracterı́stica de que una operación de escritura es a la vez una
operación de lectura, y viceversa, esto reduce el número de funciones y es por esta razón que
no se detallan funciones de lectura/escritura por separado. Para mayor información sobre el
protocolo de comunicación SPI se puede consultar el manual de referencia [13].
Función IO SPIconfig
Operación:
Esta función configura los módulos SPI de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta función se invoca
cuando se inicializa la unidad.
Formato:
void IO SPIconfig( void )
Valor de Entrada:
vacı́o
37
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Valor de Retorno:
vacı́o
Ejemplo:
IO SPIconfig();
Función IO SPIXcommB
Operación:
Esta función realiza una operación de lectura/escritura de 8bits
sobre el bus I2C. Una operación de escritura sobreescribe los
datos del buffer con datos leı́dos del bus SPI; para una
operación de lectura es necesario llenar el buffer con datos
nulos o vacı́os.
Formato:
void IO SPIXcommB( INT8U puerto, INT8U
INT8U
Valor de Entrada:
ptr datain,
ptr dataout )
puerto: Número 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 recepción.
dataout = 0xA5; //Valor a escribir en el bus.
IO SPIXcommB( 5, &datain, &dataout );
Función IO SPIXcommW
Operación:
Esta función realiza una operación de lectura/escritura de 16bits
sobre el bus I2C. Una operación de escritura sobreescribe los
datos del buffer con datos leı́dos del bus SPI; para una
operación de lectura es necesario llenar el buffer con datos
nulos o vacı́os.
Formato:
void IO SPIXcommW( INT8U puerto, INT16U
INT16U
Valor de Entrada:
ptr dataout )
puerto: Número de puerto (0 – 7).
ptr datain,
CAPÍTULO 3. DESCRIPCIÓN 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 recepción.
dataout = 0x5AA5; //Valor a escribir en el bus.
IO SPIXcommW( 5, &datain, &dataout );
3.13.
Módulo de comunicaciones UART:
El microcontrolador cuenta con dos módulos de comunicaciones UART, se utiliza el módulo UART1 para operaciones de configuración local o conexión directa con la PC; el módulo
UART2 se utiliza para conexión directa con el Lantronix XportAR.
3.13.1.
Opciones de configuración del módulo:
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 módulo.
UARTX BR: Configura la velocidad de comunicación en BPS.
UARTX PAR: Habilita la paridad y el número de bits.
UARTX STOP: Configura los bits de parada.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
39
UARTX HFC: Se habilita el control de flujo por hardware.
UARTX MODE RTS: Modo para el pin RTS.
UARTX BUFF SIZE: Tamaño del buffer de datos de salida y entrada, la asignación de
este espacio solo es posible en tiempo de programación, ya que se reserva espacio en
memoria DMA y no en memoria convencional.
3.13.2.
Funciones del módulo:
Las siguientes funciones son las rutinas disponibles de lectura/escritura UART.
Función IO UARTconfig
Operación:
Esta función configura los módulos UART de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta función 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();
Función IO UARTXwriteC
Operación:
Esta función 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’ );
Función IO UARTXreadC
Operación:
Esta función lee un byte del buffer de datos UART
Formato:
INT8U IO UART1readC( void )
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Valor de Entrada:
vacio
Valor de Retorno:
El dato leido
Ejemplo:
dato = IO UART1readC;
Función IO UARTXwriteS
Operación:
Esta función envı́a una trama de bytes de datos UART. Se
utiliza el DMA para optimizar el uso de CPU.
Formato:
void IO UARTXwriteS( INT8U
Valor de Entrada:
ptr datos: Puntero al arreglo de datos.
ptr datos, INT16U count )
count: Tamaño de la trama a enviar.
Valor de Retorno:
vacı́o
Ejemplo:
IO UART2writeS( datos, sizeof(datos) );
Función IO UARTXreadS
Operación:
Esta función 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
Valor de Entrada:
ptr datos: Puntero al arreglo de datos.
ptr datos, INT16U count )
count: Tamaño de la trama a leer.
Valor de Retorno:
vacı́o
Ejemplo:
IO UART2readS( datos, 10 );
Función IO UARTXlength
Operación:
Devuelve la cantidad de datos en buffer de recepción.
Formato:
INT16U IO UARTXlength( void )
Valor de Entrada:
vacı́o.
Valor de Retorno:
La cantidad de datos en buffer.
Ejemplo:
tama~
no = IO UART2length( );
40
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
3.14.
Módulo PWM:
3.14.1.
Opciones de configuración del módulo:
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]:
41
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 módulo.
PWM FREC: Configura la frecuencia del módulo PWM.
PWM INTPOST: Genera una interrupción cada N ciclos PWM.
PWM PTMOD: Modo de la base de tiempos PWM.
PWM PMOD: Modo de la operación de los pines L/H.
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
42
PWMX PINH: Modo de operación del pin H: PWM, dirección, on/off.
PWMX PINL: Modo de operación del pin L: PWM, dirección, on/off.
PWMX PIND: Modo de operación del pin D: Dirección, on/off; en caso de utilizar L/H
como dirección el pin D será complementario a L/H.
PWMX ONOFF D: Estado OFF de la salida ON/OFF, solo activo si se selecciona.
PWMX OFF DIR: Modo de operación del offset: no direccional, direccional
PWMX OFFSET: Valor en % de ciclo de trabajo para usarlo como offset
Operación del ciclo de trabajo OFFSET Se puede configurar un valor OFFSET a
cualquier salida PWM; toda la aritmética de la unidad opera con valores normalizados, es
decir, el valor 1.0 significa valor máximo en cualquier módulo, 0.0 significa valor cero o nulo
y -1.0 valor mı́nimo o negativo del máximo, 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 dirección 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
será 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 ajustará 0 % de ciclo de trabajo. El offset unidireccional no varı́a los bits de
dirección, es decir, el sistema ajusta automáticamente la pendiente con el offset y el
valor máximo positivo, cualquier valor negativo que resulte inferior al valor mı́nimo de
0 % de ciclo de trabajo será saturado a 0 %. Esta funcionalidad es útil 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 será el
valor offset configurado, pero a diferencia del offset unidireccional, el offset bidireccional
utiliza los bits de dirección, la pendiente se ajusta con el valor offset y el valor máximo,
43
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
pero de igual manera, este patrón se repite para valores PWM negativos; un valor
de +0.0 ajustará el ciclo de trabajo del PWM al offset configurado, un valor de 1.0
ajustará al 100 % en ciclo de trabajo. Un valor de -0.0 ajustará el ciclo de trabajo del
PWM al offset configurado, pero invertirá el bit de dirección, de igual manera con el
valor -1.0 resultará un ciclo de trabajo de 100 % pero con el bit de dirección igualmente
invertido. Esta función es útil para eliminar no linealidades de motores CD que por
naturaleza del torque de arranque estos no giran para valores pequeños de tensión. 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 operación offset del PWM.
3.14.2.
Funciones del módulo:
Función IO PWMGconfig
Operación:
Esta función configura el módulo PWM de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta función se invoca
cuando se inicializa la unidad.
Formato:
void IO PWMGconfig( void )
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Valor de Entrada:
vacı́o
Valor de Retorno:
vacı́o
Ejemplo:
IO PWMGconfig();
Función IO PWMfrec
Operación:
Esta función ajusta el valor de frecuencia de la señal 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 );
Función IO PWMXduty
Operación:
Ajusta el valor del ciclo de trabajo de la señal 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 );
Función IO PWMstart
Operación:
Inicia el PWM en los 4 módulos
Formato:
void IO PWMstart( void )
Valor de Entrada:
vacio
Valor de Retorno:
vacı́o
Ejemplo:
IO PWMstart( );
44
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
45
Función IO PWMstop
Operación:
Detiene el PWM en los 4 módulos
Formato:
void IO PWMstop( void )
Valor de Entrada:
vacio
Valor de Retorno:
vacı́o
Ejemplo:
IO PWMstop( );
3.15.
Módulo Interfaz de Encodificador de Cuadratura (QEI):
El microcontrolador cuenta con un módulo de interfaz para encodificadores de cuadratura,
este permite medir velocidad y posición de manera digital. Estas operaciones se realizan con
software.
3.15.1.
Opciones de configuración del módulo:
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 máximo
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]
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
QEI EN PERIPH: Habilita el módulo QEI.
QEI QEIM2: Modo de operación.
QEI SWPAB: Invertir canales A y B.
QEI QEIM1: Reset de contador.
QEI POSRES: Reset de contador con Index.
QEI MAXCNT1: Pulsos por revolución, PPR.
QEI EN PCDOUT: Habilita salida del pin de dirección, (no utilizable)
QEI EN QECK: Habilitar Filtro digital.
QEI QECK: Divisor de reloj del filtro digital.
QEI NUMT: Numero de vueltas para un ciclo (Relación de caja reductora).
QEI MAXR: Se habilita el control de flujo por hardware.
3.15.2.
Funciones del módulo:
Función IO QEIconfig
Operación:
Esta función configura el módulo QEI de acuerdo a las opciones
establecidas en el archivo IO CFG.H; esta función 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();
46
CAPÍTULO 3. DESCRIPCIÓN DE HARDWARE
Función IO QEIposition
Operación:
Obtiene el valor de posición del motor.
Formato:
void IO QEIposition( void )
Valor de Entrada:
vacı́o
Valor de Retorno:
Posicion del motor
Ejemplo:
PosAct = IO QEIposition();
Función IO QEIstart
Operación:
Inicia el timer asociado para la medición de velocidad.
Formato:
void IO QEIstart( void )
Valor de Entrada:
vacı́o
Valor de Retorno:
vacio
Ejemplo:
IO QEIstart();
Función IO QEIstop
Operación:
Detiene el timer asociado para la medición de velocidad.
Formato:
void IO QEIstop( void )
Valor de Entrada:
vacı́o
Valor de Retorno:
vacio
Ejemplo:
IO QEIstop();
Función IO QEIspeed
Operación:
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();
47
Capı́tulo 4
Esquema general del software
El firmware de la unidad controladora está programada en el lenguaje C30 de Microchip
el cual es compatible con el estándar 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 hardware
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 versión estudiante. Este plug–in
incluye todas las bibliotecas necesarias.
Además, necesita un programador compatible con dsPIC, para ello puede utilizar el programador MPLAB ICD2; la placa de la unidad controlador incluye un conector RJ11 compatible con el programador.
Por último, es necesaria una fuente de ±12V para alimentar la unidad.
48
CAPÍTULO 4. ESQUEMA GENERAL DEL SOFTWARE
4.2.
49
Abrir el proyecto
Se incluye un disco con todo el código 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 copió previamente.
Busque el archivo OS-Probe.mcp dentro de la ruta: C:\Micrium\Software\Evalboards\Microchip\Explorer16\PIC33FJ256\MPLAB-C30\OS-Probe
Seguidamente se abrirá el proyecto.
4.3.
Estructura del proyecto
Los archivos .C contienen el código 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 apliación instalable, esta consiste de un conjunto de archivos que el usuario puede
modificar; se recomienda no alterar ningún parámetro.
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 aplicación y máquina
virtual.
Los archivos .H son los encabezados o headers. Estos archivos guardan todos los parámetros relacionados con la configuración de hardware y del RTOS.
4.3.1.
Descripción de archivos importantes
APP.C: Este es el archivo principal, contiene:
ˆ La función main.
ˆ Declaración de variables globales.
ˆ Estructura de las tareas.
CAPÍTULO 4. ESQUEMA GENERAL DEL SOFTWARE
ˆ Declaración de los elementos del sistema operativo.
TRAPS.C: Rutinas de interrupción para detección de errores.
COMMAND.C: Lista y funciones de instrucciones y comandos de usuario.
IO CFG.H: Archivo con la configuración mı́nima de hardware.
SYS DEF.H: Definiciones de los módulos virtuales.
SYS BLOCKS.H: Estructuras de los módulos virtuales.
SYS CFG.H: Parámetros y definiciones especiales de la unidad.
APP FUNC.H: Encabezado de definiciones con todas las funciones globales.
Cada archivo mantiene información importante que sirve de ayuda al usuario.
50
Capı́tulo 5
Guia de comandos
Los comandos permiten utilizar y configurar las todas las opciones de hardware y funciones
de máquina virtual. El archivo COMMAND.C contiene todo el código para la ejecución de
comandos.
Esta primera versión de la unidad no cuenta aún con algún software de administración
y configuración, para realizar tales acciones el usuario puede utilizar cualquier programa de
envı́o y recepción de tramas hexadecimales por puerto serie RS232 ó puede automatizar los
procedimientos con cualquier lenguaje de programación.
Durante este proyecto se utilizó el programa LookRS232 de fCoderGroup1 como depuración y el lenguaje de programación JAVA con el IDE NetBeans2 para la creación de aplicaciones web.
La unidad esta pendiente de las acciones del usuario mediante las tareas de comunicaciones, si alguna tarea detecta un comando con la secuencia correcta se procederá a ejecutar la
función Command COM, la cual evaluará el comando. Cada tarea de comunicación es independiente y el RTOS no permite que se comparta información entre las tareas.
1
2
www.lookrs232.com/
www.netbeans.org
51
CAPÍTULO 5. GUIA DE COMANDOS
5.1.
52
Estructura de los comandos
Cada comando se compone de:
1. Código de comando, es un número en hexadecimal que identifica el comando.
2. Número de bytes de la trama de comando.
3. Trama de comando,
5.2.
Secuencia de Envı́o y Confirmación
Para minimizar los errores de comunicación se implementó un enlace de tres vı́as; para
ello se estableció el siguiente procedimiento de envı́o y confirmación (ver figura 5.1):
1. El usuario envı́a el código de comando.
2. La unidad envı́a el mismo código como señal de confirmación. Si el comando no existe,
la unidad reinicia y envı́a el código 0x53 ó el carácter S en ASCII.
3. Si el código es correcto, se debe enviar la trama de comando encabezado con un byte
que indique el tamaño de la trama. Tanto el código de comando y el numero de bytes
no cuentan como miembros de la trama de comando.
Cuando la tarea de comunicación termina de ejecutar el comando, la tarea reinicia y
envı́a el código 0x53. Un comando se puede cancelar esperando 1 segundo o enviando 0 en el
número de bytes de la trama.
5.2.1.
Secuencia de ejemplo
Se desea configurar el rango de medición de ±2 en el canal 0 del ADC.
El código de comando para cambiar el rango de medición de un canal ADC es 0x1A. La
trama de comando se conforma de: Número de canal y código de rango. En este caso, el
número de canal es 0x00 y el número de rango para ±2 es 0x02. La secuencia de envı́o y
confirmación es:
CAPÍTULO 5. GUIA DE COMANDOS
Figura 5.1: Algoritmo de la tarea de comunicación.
53
CAPÍTULO 5. GUIA DE COMANDOS
1. Comando: 0x1A.
2. Tamaño: 0x02.
3. Trama: 0x00, 0x02.
54
Capı́tulo 6
Lista de Comandos
Los comandos se clasifican en secciones:
1. Sección 0x10: Funciones de hardware y sistema.
2. Sección 0x20: Funciones de módulos parte I.
3. Sección 0x30: Funciones de módulos parte II.
4. Sección 0x50: Funciones de captura e información.
5. Sección 0x60: Funciones de red I2C.
Para facilitar el ingreso de opciones numéricas se utiliza el formato ASCII en 6 bytes.
Ejemplo, si se desea introducir el valor numérico 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 módulos que necesitan de tiempo de muestreo se utiliza 16 bits (2 bytes) para especificar este parámetro. Ejemplo, se desea un tiempo de muestreo de 500ms, la secuencia
corresponde: 0xF4 0x01, se ingresa primero el byte LSB y después el byte MSB.
55
CAPÍTULO 6. LISTA DE COMANDOS
6.1.
56
Funciones de hardware y sistema
Estos comandos permiten cambiar la configuración de hardware y las opciones de la
unidad controladora.
6.1.1.
Iniciar o detener máquina virtual
Código de comando: 0x11
Tamaño de trama: 1 byte.
Opciones de trama:
ˆ 0: Detiene aplicación de la máquina virtual. Pone a cero todas las salidas DAC
y PWM.
ˆ 1: Inicia aplicación de la máquina virtual. Ejecuta una aplicación previamente
creada.
ˆ 2: Pausa aplicación de la máquina virtual.
6.1.2.
Devuelve registro de estado
Código de comando: 0x13
Tamaño de trama: 1 byte.
Opciones de trama:
ˆ 0 - 15: Número de registro.
Registro de estado:
Este registro mantiene el estado de operaciones del sistema, para diagnostico. Números
de registro:
0: Estado de la ultima operación UART1
CAPÍTULO 6. LISTA DE COMANDOS
57
1: Estado de la ultima operación UART2
2: Registra de donde se tomó la configuración de módulos IO:
ˆ 0: Inexistente.
ˆ 1: Configuración por defecto.
ˆ 2: Se leyó la EEPROM pero no se encontró una configuración para IO, el sistema
se configuró por defecto.
ˆ 3: Los módulos IO se configuraron de la EEPROM.
3: Detecto un error en lectura de la memoria EEPROM.
4: Estado de la ultima operación 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: Último comando sobre UART2.
9: Último comando sobre UART1.
6.1.3.
Borra la memoria EEPROM
Código de comando: 0x14
Tamaño de trama: 1 byte.
CAPÍTULO 6. LISTA DE COMANDOS
Opciones de trama:
ˆ X: Cualquier valor para cumplir formato de comando.
6.1.4.
Guarda la configuración de sistema en EEPROM
Código de comando: 0x15
Tamaño de trama: 1 byte.
Opciones de trama:
ˆ X: Cualquier valor para cumplir formato de comando.
6.1.5.
Recibe el archivo de aplicación
Código de comando: 0x16
Tamaño de trama: Según tamaño de archivo netlist.
Opciones de trama:
ˆ N: Archivo netlist.
6.1.6.
Recibe un archivo de configuración IO
Código de comando: 0x17
Tamaño de trama: Según tamaño de archivo de configuración.
Opciones de trama:
ˆ N: Número de módulo IO (ver archivo IO CFG.H).
ˆ F: Archivo de configuración.
58
CAPÍTULO 6. LISTA DE COMANDOS
6.1.7.
59
Reinicia el sistema
Código de comando: 0x18
Tamaño 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)
Código de comando: 0x19
Tamaño de trama: 7 bytes.
Opciones de trama:
ˆ N: Número 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 medición a un canal ADC
Código de comando: 0x1A
Tamaño de trama: 2 bytes.
Opciones de trama:
CAPÍTULO 6. LISTA DE COMANDOS
ˆ N: Número de canal.
ˆ R: Número 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 medición a un canal DAC
Código de comando: 0x1B
Tamaño de trama: 2 bytes.
Opciones de trama:
ˆ N: Número de canal.
ˆ R: Número de rango.
60
CAPÍTULO 6. LISTA DE COMANDOS
◦ 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
Código de comando: 0x1C
Tamaño de trama: 1 bytes.
Opciones de trama:
ˆ N: Número de canal.
Este comando devuelve el valor normalizado de la lectura ADC (6 bytes).
6.2.
Funciones de módulos parte I
Estos comandos permiten cambiar la configuración de los módulos virtuales.
6.2.1.
Cambiar la configuración de un filtro
Código de comando: 0x21
Tamaño de trama: Variable.
Opciones de trama:
ˆ T: tipo de filtro:
61
CAPÍTULO 6. LISTA DE COMANDOS
62
◦ 0: IIR2.
◦ 1: IIR4.
◦ 2: FIR.
◦ 3: NOTCH 60Hz.
ˆ N: Número 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 configuración previa a la utilización, este tipo de
filtro se configura por defecto con r = 0,95. Los demás tipos de filtro necesitan configurarse
antes de entrar en operación.
6.2.2.
Configurar un módulo de función de transferencia
Código de comando: 0x23
CAPÍTULO 6. LISTA DE COMANDOS
63
Tamaño de trama: Variable.
Opciones de trama:
ˆ N: Número 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 números 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
Código de comando: 0x25
CAPÍTULO 6. LISTA DE COMANDOS
64
Tamaño de trama: 22 bytes.
Opciones de trama:
ˆ TF: Tipo de control PID:
◦ 0: PID estandar.
◦ 1: PI D.
◦ 2: I PD.
ˆ N: Número 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 configuración de oscilador senoidal
Código de comando: 0x26
Tamaño de trama: 13 bytes.
Opciones de trama:
ˆ N: Número de bloque SOSC.
ˆ X: Frecuencia, 6 bytes en ASCII.
ˆ G: Amplitud, 6 bytes en ASCII.
CAPÍTULO 6. LISTA DE COMANDOS
6.2.5.
65
Recibe parámetros de configuración de oscilador rectagular
Código de comando: 0x27
Tamaño de trama: 19 bytes.
Opciones de trama:
ˆ N: Número 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 configuración de oscilador triangular
Código de comando: 0x28
Tamaño de trama: 17 bytes.
Opciones de trama:
ˆ N: Número de bloque TOSC.
ˆ TL1: Tiempo 1 en ms, byte LSB.
ˆ TH1: Tiempo 1 en ms, byte MSB.
CAPÍTULO 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 configuración de oscilador triangular
Código de comando: 0x29
Tamaño de trama: 17 bytes.
Opciones de trama:
ˆ N: Número de bloque VOSC.
ˆ TL1: Tiempo máximo en ms, byte LSB.
ˆ TH1: Tiempo máximo 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 parámetros de configuración de K
Código de comando: 0x2B
Tamaño de trama: Variable.
Opciones de trama:
ˆ N: Número de bloque.
CAPÍTULO 6. LISTA DE COMANDOS
67
ˆ TL: Tiempo de muestreos en ms, byte LSB.
ˆ TH: Tiempo de muestreos en ms, byte MSB.
ˆ X: Tamaño del arreglo.
ˆ K: Cadena de constantes en formato ASCII.
El tamaño máximo del arreglo es de 4, este número se especifica en formato decimal
ó hexadecimal.
6.3.
Funciones de módulos parte II
6.3.1.
Crear o destruir módulos virtuales
Código de comando: 0x31
Tamaño de trama: Variable.
Opciones de trama:
ˆ N: Total de módulos.
ˆ X: Archivo.
6.3.2.
Ajusta ganancia de un módulo GAIN
Código de comando: 0x32
Tamaño de trama: 7 bytes.
Opciones de trama:
ˆ N: Número de bloque.
ˆ X: Ganancia, 6 bytes en ASCII.
CAPÍTULO 6. LISTA DE COMANDOS
6.3.3.
68
Ajusta lı́mites de un módulo SAT
Código de comando: 0x33
Tamaño de trama: 13 bytes.
Opciones de trama:
ˆ N: Número de bloque.
ˆ X: Valor máximo, 6 bytes en ASCII.
ˆ Y: Valor mı́nimo, 6 bytes en ASCII.
6.3.4.
Ajusta lı́mites de un módulo NOISE
Código de comando: 0x34
Tamaño de trama: 13 bytes.
Opciones de trama:
ˆ N: Número de bloque.
ˆ X: Valor máximo, 6 bytes en ASCII.
ˆ Y: Valor mı́nimo, 6 bytes en ASCII.
6.3.5.
Funciones de captura e información
6.3.6.
Recibir parametros de configuración de la tarea de captura
Código de comando: 0x51
Tamaño de trama: Variable.
Opciones de trama:
CAPÍTULO 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: Número de bloque.
◦ O: Número de salida.
6.3.7.
Recibir parámetros de configuración de la tarea de captura
Código de comando: 0x52
Tamaño 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 operación 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 máquinas virtuales. El RTOS
no permite que una vez iniciada la tarea de captura esta sea interrumpida por otra máquina
virtual que no sea la que la inició; sin embargo, la tarea de captura tiene un timeout de 30
segundos si esta no recibe actividad.
CAPÍTULO 6. LISTA DE COMANDOS
6.3.8.
70
Devolver valor de los registros de la tarea de captura
Código de comando: 0x53
Tamaño de trama: 1 byte.
Opciones de trama:
ˆ 0 - 2: Número de registro.
Índices de los registros de operación de la tarea de captura:
0: Máquina 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 módulos virtuales
Código de comando: 0x54
Tamaño de trama: Variable.
Opciones de trama:
ˆ OP: Variables, 3 bytes por variable:
◦ T: Valor tipo.
◦ N: Número de bloque.
◦ O: Número de salida.
Esta función es útil para verificar en tiempo real el comportamiento de la planta y el control, una finalizada el comando la unidad enviará en el mismo orden la variables consultadas
en formato normalizado (ASCII 6 bytes).
CAPÍTULO 6. LISTA DE COMANDOS
6.3.10.
71
Guardar valor en un registro de propósito general
Código de comando: 0x55
Tamaño de trama: 7 bytes.
Opciones de trama:
ˆ N: Número de registro.
ˆ V: Valor, 6 bytes en ASCII.
6.3.11.
Enviar información acerca porcentaje de uso de la
CPU
Código de comando: 0x56
Tamaño 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 configuración de los
periféricos
Estos son los pasos a seguir para cambiar la configuración de un dispositivo IO, esta
configuración se guardará 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 configuración
no es funcional, debe apagar la unidad, mantener presionado el botón ACC/CAL y
luego encender la unidad. Soltar el botón de ACC/CAL hasta que el led de ON se
encienda. Esto evitará que se cargue la configuración de la memoria EEPROM.
2. Conecte un cable serial directo, al puerto COM1 de la unidad.
3. Iniciar una sesión de usuario con la unidad y LookRS232, para ello configure el LookRS232 con los siguientes parámetros:
Transfer speed: 9600
Data bits: 8
Stop bits: 2
72
CAPÍTULO 7. CAMBIAR LA CONFIGURACIÓN DE LOS PERIFÉRICOS
73
Parity control: None
Flow control: None
4. Antes de enviar un comando, debe diseñar una configuración. Note que en el archivo
IO CFG.H, cada parámetro esta asociado con un registro IO Config. Este indica el
número de registro y número o rango de bits. Ejemplo: Se desea cambiar la configuración
del ADC1 con los siguientes parámetros:
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 petición a la unidad de configuración de dispositivo IO mediante el codigo 0x17h, luego con la cantidad de bytes a enviar (igual a total de bytes
de la trama - 2), número de periférico a configurar y por último bytes de configuración.
Con estos datos, la trama se compone de la siguiente manera:
CAPÍTULO 7. CAMBIAR LA CONFIGURACIÓN DE LOS PERIFÉRICOS
Byte
Nombre
Valor
1
Comando
0x17h
2
Tamaño
0x06h
3
Periférico
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
74
5. Debe enviar los comandos en secuencia y no uno a uno; para ello, utilize la función GO
del programa LookRS232. Cuando termine de enviar los comando la unidad envı́a el
simbolo “S” el cual indica que la configuración se recibió con éxito. Si recibe el carácter
“E”, significa que se produjo un error de comunicación y debe revisar que la trama
esté correcta.
Figura 7.1: Comando recibido.
6. Ahora hay que guardar la configuración enviando el comando 0x15h, con la siguiente
estructura:
CAPÍTULO 7. CAMBIAR LA CONFIGURACIÓN DE LOS PERIFÉRICOS
Tabla 7.1: Números de dispositivo.
Dispositivo
Número
0x10h
Puerto A
0x11h
Puerto B
0x12h
Puerto C
0x13h
Puerto D
0x14h
Puerto E
0x15h
Puerto F
0x16h
Puerto G
0x17h
Entradas Analógicas
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
75
CAPÍTULO 7. CAMBIAR LA CONFIGURACIÓN DE LOS PERIFÉRICOS
Byte
Nombre
Valor
1
Comando
0x15h
2
Tamaño
0x01h
3
Vacio
0x00h
76
7. Por último, debe reiniciar la unidad para que la configuración sea ejecutada, para ello
se puede presionar el botón de RESET o enviar el comando 0x18h:
Byte
Nombre
Valor
1
Comando
0x18h
2
Tamaño
0x01h
3
Vacio
0x00h
Capı́tulo 8
Creación de módulos
Esta sección explica cómo crear nuevas funciones o módulos virtuales. El proceso se realiza directamente en el compilador MPLAB C30 de Microchip, por lo que es necesario una
recompilación del firmware y reprogramación del microcontrolador.
Como ejemplo, se creará el módulo virtual NOISE, este módulo tendrá la función de
generar una salida con valores aleatorios para simulación de ruido; el módulo virtual NOISE
tendrá como parámetros el valor máximo y mı́nimo de salida.
8.1.
Definiciones
Cada módulo 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 cálculo del módulo virtual.
ˆ Registro de salida y puntero(s) de la(s) entrada(s).
ˆ Punteros a los módulos anterior y pasado del mismo tipo. Todos los módulos del
mismo tipo se enlazan uno con el otro. Ver figura
77
CAPÍTULO 8. CREACIÓN DE MÓDULOS
78
Valor tipo: Define el número valor tipo, el cual identifica el módulo virtual.
Número base: Define la posición en la tabla de punteros a módulos PTR STRUCTS.
Función NEW: Crea temporalmente en memoria dinámica el módulo virtual.
Función DESTROY: Destruye el último módulo virtual.
Función GETPTR: Devuelve un puntero de una estructura.
Función de configuración: Configura el módulo de acuerdo a los parámetros.
Función SAMPLE: Realiza el cálculo de una muestra según la función del módulo.
Cada función debe ser global, el archivo APP FUNC.H contiene todos los encabezados
establece una función como función 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 módulos con entrada(s) )
INT16S * input
Registro de salida ( solo en casos de módulos con salida(s) )
INT16S output;
Puntero a la estructura NOISE anterior
void * last;
Puntero a la estructura NOISE siguiente
void * next;
CAPÍTULO 8. CREACIÓN DE MÓDULOS
79
} NOISE;
Esto define un tipo de módulo NOISE con todas sus variables y parámetros, con ello, se
simplifica la creación, ejecución y destrucción de módulos virtuales NOISE.
8.3.
Valor tipo
El valor tipo identifica el tipo de módulo virtual. Cuando se crea un nuevo módulo se
debe especificar un valor tipo, este se asigna dentro del archivo SYS DEF.H:
#define NOISE ID 82
Cuando se desee utilizar un módulo NOISE se debe usar el número 82.
8.4.
Número base
Este número identifica la posición dentro de la tabla PTR STRUCTS de la máquina
virtual de la primera y última estructura NOISE. El archivo SYS DEF.H contiene todos los
números base de cada módulo:
#define NOISE MODULES BASE 14
Esto significa que en la posición 14 de la tabla PTR STRUCTS de la máquina virtual
están los punteros de la primera y última estructura NOISE.
Además, se debe crear un contador de estructuras NOISE, este contador se guarda como
parámetro de la estructura VM de la máquina virtual:
INT8U NOISEmodules cont;
Cada vez que se crea o destruye una estructura NOISE el contador aumenta o disminuye, esta variable permite mantener una estadı́stica de cuantos módulos NOISE existen. El
contador debe inicializarse a cero, la función Virtual Machine Init Components dentro del
archivo VM FUNC.C inicializa todas las variables de la máquina virtual, debe añadirse la
lı́nea:
CAPÍTULO 8. CREACIÓN DE MÓDULOS
80
Machine->NOISEmodules cont = 0;
8.5.
Función NEW
Cada tipo de módulo debe tener un constructor de estructuras, esta función verifica si
hay memoria suficiente para crear un módulo, en caso contrario el módulo no será creado.
Cuando se crea un módulo este se enlaza al último módulo existente del mismo tipo. Si este
es el primer módulo este se enlaza directamente a la tabla PTR STRUCTS de la máquina
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;
CAPÍTULO 8. CREACIÓN DE MÓDULOS
81
}
}
}
Cada estructura se crea en la sección 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 dinámica del RTOS, se reservó una sección de memoria X
para este propósito. Utilize la función:
OSMemGet( filter coeff buf, &err);
Para reservar memoria dinámica en la sección X, esta función devuelve un puntero a una
sección de 20 bytes o según la definida por XMEM STACK SIZE en el archivo SYS CFG.H.
Utilize:
OSMemPut( filter coeff buf, puntero );
Para liberar una sección de memoria X.
8.6.
Función DESTROY
Esta función destruye un módulo 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 )
CAPÍTULO 8. CREACIÓN DE MÓDULOS
82
Machine->ptr structs[ NOISE MODULES BASE ][0] = NULL;
}
}
El módulo destruido es el último de la lista enlazada.
8.7.
Función GETPTR
Esta función devuelve el puntero de la estructura del módulo, se utiliza como parámetro
el número de módulo; este número de módulo corresponde a la cantidad de saltos que se
deben realizar para accesar al módulo dentro de la lista enlazada. El número 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.
Función de configuración
Esta función permite configurar el módulo de acuerdo a los parámetros establecidos por
el usuario.
void NOISE Config( NOISE * NOISE struct, INT8U * max, INT8U * min )
CAPÍTULO 8. CREACIÓN DE MÓDULOS
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 función recibe, el puntero a la estructura NOISE que se desea configurar, se puede
utilizar externamente la función GETPTR para obtener este puntero, además se reciben dos
punteros a cadenas de caracteres según el tamaño establecido por ASCII NUMBERS (6 bytes
por defecto), cada cadena contiene el valor máximo y mı́nimo (normalizado) que debe generar
la función NOISE. La función de configuración NOISE calcula los valores m y b, los cuales
sirven para escalar el valor generado por rand()[14].
La función de configuración 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.
Función SAMPLE
La función SAMPLE ejecuta el cálculo para obtener una muestra, este cálculo depende
de cada módulo:
void NOISE Sample( NOISE * NOISE struct )
{
NOISE struct->output =
CAPÍTULO 8. CREACIÓN DE MÓDULOS
84
fixed x fixed( rand(), NOISE struct->m )
+ NOISE struct->b;
}
La función 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 función SAMPLE esta asociada con una función de ejecución de módulo, esta función es la que utiliza la máquina 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)) );
}
Además se debe actualizar la tabla de funciones, esta es una tabla de punteros a las
funciones de ejecución del módulo, esto permite que la selección de la función a ejecutar por
parte de la máquina virtual se realize ordenadamente. La inicialización 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 último, se deben actualizar las siguientes funciones secundarias:
App Get Block Struct Ptr, esta función devuelve el puntero de la estructura según el
valor tipo y número de módulo.
case NOISE ID:
return (void*)NOISEgetptr( Machine, number );
break;
CAPÍTULO 8. CREACIÓN DE MÓDULOS
85
App Assign Nets Out Ptrs, esta función devuelve un puntero al registro de salida de un
módulo, si el módulo no tiene salidas se debe omitir esta actualización.
case NOISE ID:
return &( NOISEgetptr( Machine, s number )->output);
break;
App Assign Nets In Ptrs, esta función devuelve un puntero al puntero de entrada de un
módulo, si el módulo no tiene entradas se debe omitir esta actualización. Ver la función en
archivo NETLIST.C como ejemplo.
App C D Modules, esta función crea o destruye módulos según el archivo de actualización
de módulos 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 Difference
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, programación e intergaz de
los procesadores 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, Pentium Pro
y Pentium II. Quinta Edición. 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 Computación Grafos, Estructruras de Datos y Algoritmos [en lı́nea]. Febrero, 2008, [20 de Febrero, 2008]. URL http://www.cs.buap.mx/ titab/files/grafos1.pdf.
[8] Kernighan Brian W; Ritchie Dennis M. El Lenguaje de Programación C. Segunda Edición. Prentice Hall, 1991.
[9] Katsuhiko, Ogata. Sistemas de Control en Tiempo Discreto. Segunda Edición. Prentice
Hall Hispanoamericana, S.A, 1996.
97
98
BIBLIOGRAFÍA
[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 Edición. Lawrence,
KS: CMPBooks, 2002.
[12] Microchip Technology Inc. MPLAB ICD2 In–Circuit Debugger User’s Guide. Microchip
Technology Inc., 2005.
[13] Microchip
ce
Technology
Manual.
[en
Inc.
lı́nea].
dsPIC33F
[1
de
Family
Agosto,
Referen-
2007].
URL
http://www.microchip.com/stellent/idcplg?IdcService=SS GET PAGE&nodeId=2573.
® Language Tools Libraries. [en lı́nea]. [1 de Agosto,
[14] Microchip Technology Inc. dsPIC
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 Noviembre, 2007]. URL http://eiec.ucentral.cl/ftp/material/apuntes/iec51/Sistemas.
[19] Tocci, Ronald J. Sistemas Digitales, Principios y Aplicaciones. Sexta Edición. Pearson
Educación, 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
[en
lı́nea].
Foundation,
Noviembre,
Inc.
2007,
Sistemas
[2
operativos
de
de
Noviembre,
http://es.wikipedia.org/wiki/Sistemas operativos de tiempo real.
tiempo
2007].
real
URL
Descargar