Diseño e implementeación de un sistema educativo del protocolo de comunicaciones CAN

Anuncio
UNIVERSIDAD DE SANTIAGO DE CHILE
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA EDUCATIVO
DEL PROTOCOLO DE COMUNICACIONES CAN
ERTON ESTEBAN OSSANDÓN TAPIA
PROFESOR GUÍA:
ERNESTO ALEJANDRO PINTO LINCOÑIR
Trabajo de titulación presentado en
conformidad a los requisitos para
obtener el título de ingeniero civil en
electricidad
SANTIAGO – CHILE
2011
© Erton Esteban Ossandón Tapia
Se autoriza la reproducción parcial o total de esta obra, con fines académicos,
por cualquier forma, medio o procedimiento, siempre y cuando se incluya la
cita bibliográfica del documento.
HOJA DE CALIFICACIÓN
i
DEDICATORIA
A mi hermano Rodrigo por todo el esfuerzo que haz hecho para que yo logre
obtener mi título
“El hombre inteligente se repone fácilmente de sus fracasos;
mientras que el tonto jamás logra reponerse de sus éxitos”
Sacha Guitry
ii
AGRADECIMIENTOS
Quisiera comenzar agradeciendo a los profesores de mi comisión
evaluadora por el tiempo invertido en este trabajo de título, en particular a mi
profesor guía Ernesto Pinto y al profesor Manuel Valenzuela que sin su apoyo
no hubiese podido encaminar mi tesis y cumplir con los objetivos requeridos.
Por otra parte, y considerando el trabajo de título como la culminación
de todo mi proceso universitario, no puedo dejar de agradecer a todas las
personas que durante todos estos años han estado conmigo y que de una u
otra forma me han apoyado, en particular a:
Mis compañeros y amigos personales: Carlos (Wilson, gracias por tu
apoyo en muchos momentos de mi vida), Alexander (Klifff, gracias por tu ayuda
desinteresada y por tu papeo!), Ariel (Bacard!, gracias por ser una ayuda en las
noches interminables de estudio), Gonzalo (Tata, gracias por entregarme tu
apoyo), Rodrigo (Chamelo, gracias por haberme ayudado en momentos
difíciles) y a José (Joselote, gracias por los carretes y tus cigarros!).
Mis amigos que de una u otra forma he llegado a conocer: Alejandro
(Jani, gracias por enseñarme a Debuggear!!!), Oscar (Oskiniak, gracias por la
alegría brindada y por ayudar a superarme de forma competitiva), Felipe
(Felipín, gracias por entregar tus certeras opiniones).
A toda mi familia, en especial a mis hermanos: Rodrigo (Cokin, gracias
por ayudarme en un momento difícil en mi vida, ser un gran apoyo y ofrecerme
la tranquilidad necesaria para poder titularme) y Gustavo (Sapatín, gracias por
ser una persona incondicional conmigo); y finalmente a Carolina (Carito, gracias
por aguantarme en tu casa en las mañanas de los días sábado!).
iii
TABLA DE CONTENIDOS
TABLA DE CONTENIDOS
IV
ÍNDICE DE TABLAS
IX
ÍNDICE DE ILUSTRACIONES
XI
RESUMEN
CAPÍTULO 1.- INTRODUCCIÓN
XVI
1
1.1.- OBJETIVO GENERAL
1
1.2.- OBJETIVOS ESPECÍFICOS
1
1.3.- ORIGEN Y NECESIDAD
1
1.4.- DESARROLLO Y ALCANCES
2
CAPÍTULO 2.- CARACTERÍSTICAS DE LAS REDES INDUSTRIALES
4
2.1.- BENEFICIOS DE LAS REDES
4
2.2.- REDES DE CONTROL Y REDES DE DATOS
5
2.3.- CARACTERÍSTICAS DE LAS REDES DE CONTROL
7
2.4.- VENTAJAS DE LOS BUSES DE CAMPO
10
2.5.- COMUNICACIONES EN ENTORNOS INDUSTRIALES
12
2.6.- CLASIFICACIÓN DE LAS REDES INDUSTRIALES
12
2.6.1.- SEGÚN SU TOPOLOGÍA
13
2.6.2.- SEGÚN SU ACCESO AL MEDIO
16
2.6.3.- SEGÚN SU MODELO DE COMUNICACIÓN
18
2.6.4.- SEGÚN SUS PRESTACIONES
19
2.6.5.- SEGÚN EL TIPO DE COMUNICACIÓN
21
iv
CAPÍTULO 3.- ESTADO DEL ARTE DEL PROTOCOLO DE
COMUNICACIONES CAN
22
3.1.- PROTOCOLO DE COMUNICACIONES CAN
22
3.2.- CONCEPTOS BÁSICOS DEL BUS CAN
23
3.3.- CAPA FÍSICA (PHY)
25
3.3.1.- SUBCAPA DE SEÑALIZACIÓN FÍSICA (PLS)
26
3.3.1.1.- Representación de Bits
26
3.3.1.2.- Temporización de Bits
28
3.3.1.3.- Mecanismos de Sincronización de Bits
30
3.3.1.4.- Tipos de Sincronización
31
3.3.1.5.- Impacto de la Velocidad de Transferencia en la Longitud del Bus
33
3.3.1.6.- Tolerancia de Oscilación
35
3.3.2.- SUBCAPA DE UNIÓN AL MEDIO FÍSICO (PMA)
37
3.3.3.- SUBCAPA DE INTERFAZ DEPENDIENTE DEL MEDIO (MDI)
38
3.3.3.1.- Medio Físico
38
3.3.3.2.- Tipos de Conectores CAN
41
3.3.3.3.- Topología de Una Red CAN
44
3.3.4.- ESTÁNDARES DE LA CAPA FÍSICA
45
3.3.4.1.- Estándar ISO 11898-2
46
3.3.4.2.- Estándar ISO 11898-3
49
3.3.4.3.- Estándar SAE J2411
52
3.3.4.4.- Estándar ISO 11992
53
3.3.4.5.- Recomendación CiA DS-102
55
3.3.4.6.- Recomendaciones de Capa Física por los Estándares HLP
57
3.4.- CAPA DE ENLACE DE DATOS (DLL)
60
3.4.1.- CONTROL DE ENLACE LÓGICO (LLC)
61
3.4.2.- CONTROL DE ACCESO AL MEDIO (MAC)
62
3.4.2.1.- Arbitraje del Bus
62
3.4.2.2.- Transmisión de Mensajes
66
3.4.2.3.- Codificación de Tramas
75
3.4.2.4.- Validación de Tramas
75
3.4.2.5.- Detección y Manejo de Errores
75
3.5.- DESCRIPCIÓN DE LA SUPERVISIÓN
79
v
3.6.- CAPA DE APLICACIÓN
81
3.6.1.- CAL
83
3.6.2.- CANOPEN
84
3.6.3.- DEVICENET
86
3.6.4.- SDS
87
3.6.5.- OSEK/VDX
88
3.6.6.- CAN KINGDOM
90
CAPÍTULO 4.- REFERENCIAS PARA LA UTILIZACIÓN DEL KIT DE
DESARROLLO CAN
4.1.- DESCRIPCIÓN DEL HARDWARE
92
92
4.1.1.- MICROCONTROLADOR
94
4.1.2.- CONECTORES DE ENERGÍA
97
4.1.3.- RELOJ DEL SISTEMA
98
4.1.4.- INTERRUPTOR DE ENCENDIDO/APAGADO
98
4.1.5.- BOTÓN DE REINICIO
99
4.1.6.- BOTÓN DE INTERRUPCIÓN
99
4.1.7.- PANTALLA LCD
99
4.1.8.- BARRA DE LED’S
99
4.1.9.- PUERTO RS-232
99
4.1.10.- PUERTO CAN
100
4.2.- DESCRIPCIÓN DEL SOFTWARE
4.2.1.- ENTORNO DE DESARROLLO INTEGRADO
4.2.1.1.- Tipos de Variables
100
100
101
4.2.1.2.- Operaciones y Asignaciones a Nivel de Bits
103
4.2.1.3.- Estructura de un Programa Escrito en C
103
4.2.1.4.- Rutinas de Interrupción
104
4.2.1.5.- Crear un Programa de Referencia
106
4.2.1.6.- Agregar Opciones de Depuración
112
4.2.2.- HERRAMIENTA DE PROGRAMACIÓN DEL SISTEMA
116
4.2.2.1.- Condiciones de Hardware
116
4.2.2.2.- Uso del Programador de Sistema
119
vi
CAPÍTULO 5.- PUESTA EN FUNCIONAMIENTO DEL SISTEMA CAN
126
5.1.- INTRODUCCIÓN A LA PROGRAMACIÓN DE APLICACIONES PARA EL KIT DE
DESARROLLO
126
5.1.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
127
5.1.2.- CONVENCIONES DE PROGRAMACIÓN
127
5.1.3.- ESTÁNDAR RS-232
129
5.1.4.- LABORATORIO Nº1.1
132
5.1.5.- LABORATORIO Nº1.2
134
5.1.6.- LABORATORIO Nº1.3
136
5.2.- ESTUDIO DE LA CAPA FÍSICA Y DE ENLACE DE DATOS DEL PROTOCOLO CAN
144
5.2.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
145
5.2.2.- LIBRERÍA DE COMUNICACIÓN CAN
146
5.2.3.- LABORATORIO Nº2.1
153
5.2.4.- LABORATORIO Nº2.2
160
5.3.- ESTUDIO DE APLICACIONES GATILLADAS EN EL TIEMPO
162
5.3.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
163
5.3.2.- ESTRUCTURA DE APLICACIONES GATILLADAS EN EL TIEMPO
163
5.3.3.- LABORATORIO Nº3.1
166
5.3.4.- LABORATORIO Nº3.2
168
5.3.5.- LABORATORIO Nº3.3
169
5.4.- IMPLEMENTACIÓN DE APLICACIONES QUE HAGAN USO DEL MODELO DE
COMUNICACIÓN CAN
171
5.4.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
172
5.4.2.- FLEXIBILIDAD DEL MODELO PRODUCTOR/CONSUMIDOR
173
5.4.3.- MONTAJE DEL SISTEMA
174
5.4.4.- LABORATORIO Nº4.1
175
5.4.5.- LABORATORIO Nº4.2
176
CAPÍTULO 6.- CONCLUSIONES
178
vii
GLOSARIO
180
BIBLIOGRAFÍA
184
ANEXOS
188
ANEXO A: GUÍAS DE LABORATORIO
189
EXPERIENCIA Nº1: REFERENCIAS PARA LA UTILIZACIÓN DEL KIT DE DESARROLLO CAN
190
EXPERIENCIA Nº2: INTRODUCCIÓN A LA PROGRAMACIÓN DE APLICACIONES PARA EL KIT DE
DESARROLLO
195
EXPERIENCIA Nº3: ESTUDIO DE LA CAPA FÍSICA Y DE ENLACE DE DATOS DEL PROTOCOLO CAN
202
EXPERIENCIA Nº4: ESTUDIO DE APLICACIONES GATILLADAS EN EL TIEMPO
208
EXPERIENCIA Nº5: IMPLEMENTACIÓN DE APLICACIONES QUE HAGAN USO DEL MODELO DE
COMUNICACIÓN CAN
213
ANEXO B: HOJA DE DATOS Y LISTA DE MATERIALES DEL KIT DE DESARROLLO 218
HOJA DE DATOS DE LA TARJETA: C51 DEMO BOARD
219
LISTA DE MATERIALES DE LA TARJETA: C51 DEMO BOARD
225
HOJA DE DATOS DE LA TARJETA: CAN EXTENSION BOARD
226
LISTA DE MATERIALES DE LA TARJETA: CAN EXTENSION BOARD
227
viii
ÍNDICE DE TABLAS
Tabla 3.1.- Velocidad de transferencia de datos y longitud del bus ............................ 34
Tabla 3.2.- Asignación de terminales en el conector DB9 ........................................... 42
Tabla 3.3.- Asignación de terminales del conector tipo mini ....................................... 42
Tabla 3.4.- Asignación de terminales del conector tipo micro .................................... 43
Tabla 3.5.- Asignación de terminales del conector tipo nano...................................... 43
Tabla 3.6.- Asignación de terminales del conector tipo abierto .................................. 44
Tabla 3.7.- Niveles nominales de voltaje en el bus CAN de acuerdo al estándar
ISO 11898-2 ................................................................................................................ 47
Tabla 3.8.- Niveles de voltaje en el bus CAN de acuerdo al estándar ISO 11898-3 .... 50
Tabla 3.9.- Niveles de las señales CAN en el bus recomendados por el estándar
ISO 11992.................................................................................................................... 54
Tabla 3.10.- Velocidades de transferencia y parámetros de tiempos de bit
recomendados en DS-102 ........................................................................................... 55
Tabla 3.11.- Parámetros de tiempos de bit recomendados por DS-102 ..................... 56
Tabla 3.12.- Línea de bus interconectada de acuerdo a la recomendación DS-102 ... 57
Tabla 3.13.- Extensión de red y longitud de línea de extensión para DeviceNet ......... 59
Tabla 3.14.- Velocidades de transferencia y longitudes de línea recomendadas para
SDS ............................................................................................................................. 60
Tabla 3.15.- Representación bit a bit del arbitraje en el bus CAN ............................... 64
Tabla 3.16.- Codificación de los bits DLC según la longitud de los datos .................. 70
Tabla 3.17.- Ventajas y características de CANopen .................................................. 85
Tabla 4.1.- Características del kit de desarrollo para los microcontroladores Atmel
T89C51CC0x ............................................................................................................... 94
ix
Tabla 4.2.- Tipos de variables soportados por el compilador C51 ............................ 102
Tabla 4.3.- Tipos de SFR que maneja el compilador C51 ......................................... 103
Tabla 4.4.- Operaciones a nivel de bits que permite el lenguaje C ............................ 103
Tabla 4.5.- Asignaciones a nivel de bits que permite el lenguaje C ........................... 103
Tabla 4.6.- Detalle de los tipos de interrupciones del microcontrolador Atmel
T89C51CC01 ............................................................................................................. 105
Tabla 5.1.- Requerimientos de software y de hardware para el laboratorio nº1 ........ 127
Tabla 5.2.- Definición de tipos entregados en el archivo ‘compiler.h’ ....................... 129
Tabla 5.3.- Definición de constantes asociados a interrupciones entregados en el
archivo ‘compiler.h’ ................................................................................................... 129
Tabla 5.4.- Valores de recarga del registro TH0/TH1 para obtener distintas
velocidades de transmisión ....................................................................................... 138
Tabla 5.5.- Valores de recarga de los registros RCAP2H y RCAP2L para obtener
distintas velocidades de transmisión ......................................................................... 139
Tabla 5.6.- Velocidades de transmisión requeridas para la configuración del puerto
RS-232 ...................................................................................................................... 142
Tabla 5.7.- Requerimientos de software y de hardware para el laboratorio nº2 ........ 146
Tabla 5.8.- Velocidades de transmisión requeridas para la configuración del bus CAN
.................................................................................................................................. 158
Tabla 5.9.- Configuraciones requeridas para el nodo transmisor .............................. 159
Tabla 5.10.- Configuraciones requeridas para el nodo receptor ............................... 159
Tabla 5.11.- Requerimientos de software y de hardware para el laboratorio nº3 ...... 163
Tabla 5.12.- Requerimientos de software y de hardware para el laboratorio nº4 ...... 173
x
ÍNDICE DE ILUSTRACIONES
Figura 2.1.- Comparación de la red Ethernet ante variaciones del tamaño de los
paquetes ....................................................................................................................... 6
Figura 2.2.- Topologías de red .................................................................................... 16
Figura 2.3.- Clasificación de protocolos según su acceso al medio ........................... 17
Figura 2.4.- Clasificación de los diversos buses de campo según sus prestaciones .. 21
Figura 3.1.- Arquitectura de capas del protocolo CAN ............................................... 23
Figura 3.2.- Arquitectura de la capa física del protocolo CAN .................................... 26
Figura 3.3.- Comparación de la representación de bits del código NRZ y el código
Manchester.................................................................................................................. 27
Figura 3.4.- Ejemplo del procedimiento de inserción de bit ........................................ 27
Figura 3.5.- Principio de derivación del periodo de bit................................................ 28
Figura 3.6.- Segmentos del tiempo de bit ................................................................... 29
Figura 3.7.- Ejemplo de definición de un tiempo de bit ............................................... 30
Figura 3.8.- Relación entre velocidad de transferencia y longitud del bus .................. 35
Figura 3.9.- Arquitectura de un nodo CAN con transceptor ........................................ 37
Figura 3.10.- Medio de transmisión eléctrico .............................................................. 39
Figura 3.11.- Conector tipo DB9 ................................................................................. 42
Figura 3.12.- Conector tipo mini ................................................................................. 42
Figura 3.13.- Conector tipo micro ............................................................................... 43
Figura 3.14.- Conector tipo nano ................................................................................ 44
Figura 3.15.- Conector tipo abierto ............................................................................. 44
Figura 3.16.- Niveles nominales de señal en el bus CAN recomendados por el
estándar ISO 11898-2 ................................................................................................. 47
xi
Figura 3.17.- Niveles nominales de las señales presentes en un transceptor CAN ..... 49
Figura 3.18.- Niveles de señal en el bus CAN recomendados por el estándar
ISO 11898-3 ................................................................................................................ 50
Figura 3.19.- Interfaz para bus CAN utilizando un transceptor TJA 1054 de la firma
Philips .......................................................................................................................... 51
Figura 3.20.- Niveles nominales de la señal CAN en el bus de acuerdo al estándar
SAE J2411 ................................................................................................................... 53
Figura 3.21.- Niveles nominales de las señales CAN en el bus de acuerdo con el
estándar ISO 11992 ..................................................................................................... 54
Figura 3.22.- Arquitectura de la capa de enlace de datos del protocolo CAN ............ 60
Figura 3.23.- Arbitraje del bus CAN ............................................................................ 65
Figura 3.24.- Formato de una trama de datos ............................................................ 67
Figura 3.25.- Campo de arbitraje, trama estándar y extendida ................................... 67
Figura 3.26.- Campo de control .................................................................................. 69
Figura 3.27.- Campo CRC .......................................................................................... 70
Figura 3.28.- Campo de aceptación ........................................................................... 71
Figura 3.29.- Formato de una trama remota ............................................................... 72
Figura 3.30.- Formato de una trama de error .............................................................. 72
Figura 3.31.- Formato de una trama de sobrecarga ................................................... 74
Figura 3.32.- Diagrama de flujo para el manejo de errores ......................................... 77
Figura 3.33.- Diagrama de estados de error de un nodo CAN .................................... 81
Figura 3.34.- Arquitectura general de un sistema basado en CAL .............................. 84
Figura 3.35.- Arquitectura general de un sistema basado en CANopen ..................... 86
Figura 3.36.- Arquitectura de protocolos DeviceNet ................................................... 87
xii
Figura 3.37.- Arquitectura de protocolos SDS ............................................................ 88
Figura 3.38.- Arquitectura OSEK/VDX......................................................................... 90
Figura 3.39.- Representación de una red CAN con CAN Kingdom ............................. 91
Figura 4.1.- Tarjeta de demostración C51 conectada a la tarjeta de extensión CAN .. 92
Figura 4.2.- Diagrama de bloques del microcontrolador Atmel T89C51CC01 ............ 95
Figura 4.3.- Distribución de pines del microcontrolador Atmel T89C51CC01 en
formato PLCC44 .......................................................................................................... 95
Figura 4.4.- Esquema de la tarjeta de demostración C51 ........................................... 97
Figura 4.5.- Tarjeta de demostración C51 energizado en los conectores J1 y J2 ....... 98
Figura 4.6.- Estructura general de un programa escrito en C para sistemas
empotrados ............................................................................................................... 104
Figura 4.7.- Estructura general del código escrito en C de una rutina de interrupción
.................................................................................................................................. 105
Figura 4.8.- Interfaz gráfica de inicio del IDE Keil μVision3 ....................................... 106
Figura 4.9.- Ventana de selección de dispositivo...................................................... 107
Figura 4.10.- Menú desplegable ‘Options for Target’................................................ 108
Figura 4.11.- Pestaña ‘Target’ de la ventana ‘Options for Target’ ............................. 109
Figura 4.12.- Pestaña ‘Output’ de la ventana ‘Options for Target’ ............................ 110
Figura 4.13.- Menú desplegable ‘Add Files to Group’............................................... 111
Figura 4.14.- Menú desplegable ‘Build target’ .......................................................... 112
Figura 4.15.- Pestaña ‘Debug’ de la ventana ‘Options for Target’ ............................ 113
Figura 4.16.- Menú desplegable ‘New Group’ .......................................................... 114
Figura 4.17.- Menú desplegable ‘Add Files to Group’............................................... 115
Figura 4.18.- Estructura del proyecto ‘my_project’ ................................................... 116
xiii
Figura 4.19.- Conexión entre el PC y el kit de desarrollo CAN mediante RS-232 ..... 117
Figura 4.20.- Condición de hardware configurado para arrancar en modo ‘Gestor de
Arranque’ ................................................................................................................... 118
Figura 4.21.- Condición de hardware configurado para arrancar en modo ‘Aplicación
de Usuario’ ................................................................................................................ 119
Figura 4.22.- Interfaz gráfica de inicio del programador FLIP ................................... 120
Figura 4.23.- Ventana del programador FLIP con el dispositivo T89C51CC01
seleccionado ............................................................................................................. 121
Figura 4.24.- Configuración del puerto RS-232 ........................................................ 122
Figura 4.25.- Conexión exitosa del kit de desarrollo ................................................. 123
Figura 4.26.- Archivo hexadecimal debidamente cargado ........................................ 124
Figura 4.27.- Programación exitosa del microcontrolador ........................................ 125
Figura 5.1.- Ejemplo de utilización del archivo ‘config.h’ incluido en las rutinas ....... 128
Figura 5.2.- Ejemplo de utilización de la librería de la pantalla LCD .......................... 133
Figura 5.3.- Estructura del proyecto ‘display’ ........................................................... 133
Figura 5.4.- Ejemplo de utilización de la librería de la barra de LED’s....................... 135
Figura 5.5.- Estructura del proyecto ‘bargraph’ ........................................................ 136
Figura 5.6.- Ejemplo de utilización de la librería ‘stdio.h’ .......................................... 140
Figura 5.7.- Estructura del proyecto ‘rs232’.............................................................. 141
Figura 5.8.- Conexión entre el PC y el kit de desarrollo CAN para visualizar mensajes
mediante RS-232....................................................................................................... 143
Figura 5.9.- Configuración del puerto RS-232 .......................................................... 144
Figura 5.10.- Ejemplo de utilización del archivo ‘config.h’ para la definición de rutinas
.................................................................................................................................. 151
Figura 5.11.- Código de las rutinas de interrupción de la librería CAN...................... 152
xiv
Figura 5.12.- Ejemplo de utilización de la librería CAN para la transmisión de mensajes
.................................................................................................................................. 154
Figura 5.13.- Ejemplo de utilización de la librería CAN para la recepción de mensajes
.................................................................................................................................. 155
Figura 5.14.- Estructura de los proyectos ‘can_tx’ y ‘can_rx’ ................................... 157
Figura 5.15.- Utilidad para calcular la velocidad de bit para el bus CAN en el kit de
desarrollo................................................................................................................... 158
Figura 5.16.- Conexión entre el PC y el kit de desarrollo CAN para visualizar los
mensajes de los nodos trasmisor y receptor mediante RS-232 ................................. 160
Figura 5.17.- Serie de datos mostrados en el panel LCD.......................................... 161
Figura 5.18.- Estructura general del programa principal escrito en C para aplicaciones
gatilladas en el tiempo ............................................................................................... 164
Figura 5.19.- Estructura general del itinerario de tareas escrito en C para aplicaciones
gatilladas en el tiempo ............................................................................................... 166
Figura 5.20.- Estructura de los proyectos ‘bargraph’, ‘display’ y ‘rs232’ .................. 167
Figura 5.21.- Estructura de los proyectos ‘can_tx’ y ‘can_rx’ ................................... 169
Figura 5.22.- Conexión entre el PC y el kit de desarrollo CAN para visualizar los
mensajes de los nodos trasmisores/receptores mediante RS-232 ............................ 171
Figura 5.23.- Resumen de la flexibilidad del modelo productor/consumidor ............ 174
Figura 5.24.- Formato de mensajes en los modelos: a) cliente/servidor y b)
productor/consumidor ............................................................................................... 174
Figura 5.25.- Montaje para los laboratorios Nodo1/Nodo2 y Maestro/Esclavo ......... 175
xv
TÍTULO: Diseño e implementación de un sistema educativo del protocolo de
comunicaciones CAN.
CLASIFICACIÓN TEMÁTICA: Protocolos: redes industriales;
Comunicaciones aplicadas al control; Control automático;
Microcontroladores; Software; Hardware.
AUTOR: Ossandón Tapia, Erton Esteban
CARRERA: Ingeniería Civil en Electricidad
PROFESOR GUÍA: Pinto Lincoñir, Ernesto Alejandro
AÑO: 2011
CÓDIGO DE UBICACIÓN BIBLIOTECA:
2011 / E / 040
RESUMEN
El presente trabajo propone potenciar a los estudiantes en el
conocimiento de los buses CAN (Controller Area Network) a través del
desarrollo de una serie de experiencias de laboratorio empleando un kit de
desarrollo.
En un comienzo, y para interiorizarse en los distintos protocolos de
comunicaciones de control, se hace un análisis de las características y
clasificación de los buses de campo. Luego, se hace un estudio minucioso
del protocolo CAN abarcando los aspectos más relevantes: la capa física, la
capa de enlace de datos y los estándares de la capa de aplicación. A
continuación, se hace un estudio de los componentes de hardware y de
software necesarios para la puesta en funcionamiento del kit de desarrollo.
Finalmente, se crean las experiencias de laboratorio que ayudarán al alumno
a entender en profundidad el bus CAN.
xvi
CAPÍTULO 1.- INTRODUCCIÓN
1.1.- OBJETIVO GENERAL
El objetivo general de este proyecto es diseñar e implementar un sistema
educativo del protocolo de comunicaciones CAN (Controller Area Network)
para ser una herramienta de apoyo didáctico en la enseñanza de este
protocolo.
1.2.- OBJETIVOS ESPECÍFICOS
Para cumplir el objetivo general, a continuación se detallan objetivos
más específicos, que se derivan del general y lo complementan:
1.- Realizar un análisis del estado del arte de la evolución de protocolos y
normativas de transporte en redes industriales para comprender el
protocolo de comunicaciones CAN.
2.- Definir los requisitos para implementar una red de tales características,
así como también describir los módulos necesarios que conforman las
comunicaciones en redes industriales a través del protocolo de
comunicaciones CAN.
3.- Diseñar una serie de laboratorios utilizando un kit de desarrollo para
enseñar el protocolo CAN considerando aspectos académicos.
4.- Comprobar la validez de los laboratorios implementados. Realizar
pruebas en cuánto a funcionamiento y calidad.
1.3.- ORIGEN Y NECESIDAD
Debido a que los alumnos de la carrera de telecomunicaciones no tienen
una clara visión del concepto de buses de campo, se origina la necesidad de
potenciar a los estudiantes en el conocimiento de dicho concepto; en particular
1
del bus de campo CAN, donde no sólo en la industria de control automotriz se
está utilizando este protocolo, sino que también se está expandiendo a la
automatización de edificios, aeronáutica, control industrial, equipamiento
médico, entre otros.
1.4.- DESARROLLO Y ALCANCES
A continuación se realiza una breve descripción de los temas abordados
en este trabajo de título, además del desarrollo de los contenidos y alcances de
éstos.
En el capítulo 2, Características de las Redes Industriales, se hace un
análisis de los buses de campo, mostrando aspectos de: beneficios,
comparativas, características, ventajas, estandarización y clasificaciones que
se pueden realizar en torno a ellos.
En el capítulo 3, Estado del Arte del Protocolo de Comunicaciones CAN,
se realiza un estudio de requisitos para implementar un sistema de transmisión
en redes industriales a través del protocolo de comunicaciones CAN, tanto en
el aspecto de módulos requeridos como la disponibilidad de equipos que
reúnan tales características.
En el capítulo 4, Referencias para la Utilización del Kit del Desarrollo
CAN, describe los componentes de software y de hardware necesarios para la
utilización del kit de desarrollo, detallándose los procedimientos de
programación y creación de aplicaciones para el sistema.
En el capítulo 5, Puesta en Funcionamiento del Sistema CAN, se diseña
una serie de experiencias de laboratorio para ayudar al alumno a entender en
profundidad el bus CAN, se propone una metodología para crear aplicaciones
2
utilizando un kit de desarrollo, y paralelamente, se enseñan los aspectos más
relevantes del protocolo CAN.
Finalmente, en el capítulo 6, Conclusiones, se comentan los resultados
obtenidos y se establecen las conclusiones derivadas de la realización de este
trabajo de título.
3
CAPÍTULO 2.- CARACTERÍSTICAS DE LAS REDES
INDUSTRIALES
El propósito de este capítulo es hacer un análisis de los buses de
campo, mostrando aspectos de: beneficios, comparativas, características,
ventajas, estandarización y clasificaciones que se pueden realizar en torno a
ellos.
2.1.- BENEFICIOS DE LAS REDES
El concepto básico de un sistema de red es que todos los dispositivos
están conectados y se comunican entre ellos usando un único sistema
estándar. El grado en el que esto afecto a cada dispositivo depende de la
simplicidad del sistema en términos de su implementación y su uso. El permitir
a los dispositivos sencillos comunicarse por medio de una red puede causar un
incremento significativo en la complejidad y sofisticación del dispositivo, lo que
significa un costo extra, mientras que el beneficio extra para el propio
dispositivo puede ser mínimo. Sin embargo, la capacidad de integración con
otros expandirá la funcionalidad del sistema convirtiéndolo un todo; ésta es la
mayor ventaja de usar un sistema de red.
Las áreas principales en las redes traen beneficios son:
•
Estandarizado del cableado mínimo entre dispositivos y reducir los
costos de implementación.
•
Capacidad de los sistemas de control de expandirse sobre grandes
áreas geográficas.
•
Capacidad de añadir más dispositivos al sistema sin necesidad de
rediseñarlo.
•
Un estándar de comunicaciones básico único, para que los ingenieros
4
puedan aprenderlo y mantenerlo.
•
Independencia del vendedor, si el estándar está ampliamente aceptado
en la industria, por ejemplo, protocolos abiertos.
Otro beneficio asociado a las redes es que permiten transmitir datos a
través de un sistema estándar de cableado que es compartido por múltiples
dispositivos, por lo que cualquier sistema estándar de cableado, como un
cable de par trenzado entre dispositivos, tendrá el beneficio inmediato del
recorte de costos con respecto a la cantidad requerida, instalación e
implementación. Además se suma otro beneficio, que es la reducción de
costos de mantenimiento y predicción de fallos.
Los sistemas de redes pueden, en general, expandirse fácilmente.
Además, cuando se utilizan dispositivos estándar, la tarea de expansión
conllevará únicamente unos pocos conectores y unos pocos metros de cables
de red.
2.2.- REDES DE CONTROL Y REDES DE DATOS
Debido a que existen diferentes niveles de comunicación orientados a
diferentes necesidades, se puede hablar de dos tipos de redes: redes de
control y redes de datos. En general, las redes de datos están orientadas al
transporte de grandes paquetes de datos, que aparecen de forma esporádica
(baja carga) y con un gran ancho de banda para permitir el envío rápido de una
gran cantidad de datos. En contraste, las redes de control se enfrentan a un
tráfico formado por un gran número de pequeños paquetes, intercambiados
con frecuencia (alta carga) entre un alto número de estaciones que forman la
red y que muchas veces trabajan en tiempo real.
5
En principio, las redes de datos podrían emplearse para su uso como
redes de control, sin embargo, es evidente que no resultan adecuadas para las
necesidades de este tipo de aplicaciones. Por ejemplo, es sabido que la red
Ethernet tiene una gran eficiencia, hasta el 90-95% de la capacidad del canal
cuando los mensajes son largos y suficientemente espaciados. Sin embargo, la
cantidad de información que una red Ethernet es capaz de transportar cae
bruscamente cuando se utiliza por encima del 35% de la capacidad del canal,
si el tamaño de los mensajes es pequeño, como puede verse en la Figura 2.1.
En las redes de control es habitual encontrar este tipo de carga, porque el
tráfico de la red depende directamente de eventos externos que están siendo
controlados (o monitorizados) por los diferentes nodos que la componen. A
menudo, varios nodos necesitan enviar información simultáneamente en
función de uno o más eventos externos. Este hecho, junto con el gran número
de nodos que suelen estar presentes, implica la existencia de frecuentes
periodos en los que muchas estaciones envían pequeños paquetes de
información.
Figura 2.1.- Comparación de la red Ethernet ante variaciones del tamaño de los paquetes
6
2.3.- CARACTERÍSTICAS DE LAS REDES DE CONTROL
Por las razones expuestas anteriormente, es necesario diseñar una
arquitectura de red adaptada a las características particulares de este tipo de
tráfico. En el diseño se deberán tener en cuenta aspectos como los tipos de
protocolos utilizados, la interoperabilidad, la topología y la facilidad de
administración.
Por lo que se refiere al tipo de topología que deben adoptar las redes de
control, cabe destacar que cualquiera de las topologías clásicas de las redes
de datos es válida. Cada una de ellas con sus propias ventajas y limitaciones.
Cualquiera puede satisfacer las necesidades de cableado, prestaciones y costo
de algún tipo de aplicación. La elección está determinada fundamentalmente
por el control de acceso al medio y el tipo de medio que se emplea. El conjunto
formado por el medio, el control de acceso y la topología, afecta prácticamente
a cualquier otro aspecto de la red de control: costo, facilidad de instalación,
fiabilidad, prestaciones, facilidad de mantenimiento y expansión.
El control de acceso al medio es vital. Elegida una topología, hay que
definir como accederá cada nodo a la red. El objetivo es reducir las colisiones
(idealmente eliminarlas) entre los paquetes de datos y reducir el tiempo que
tarda un nodo en ganar el acceso al medio y comenzar a transmitir el paquete.
En otras palabras, maximizar la eficiencia de la red y reducir el retardo de
acceso al medio. Este último parámetro es el factor principal a la hora de
determinar si una red sirve para aplicaciones en tiempo real o no.
El direccionamiento de los nodos es otro de los aspectos claves. En una
red de control, la información puede ser originada y/o recibida por cualquier
nodo. La forma en que se direccionen los paquetes de información afectará de
7
forma importante a la eficiencia y la fiabilidad global de la red. Se pueden
distinguir tres tipos de direccionamiento:
•
Unicast: El paquete es enviado a un único nodo de destino.
•
Multicast: El paquete es enviado a un grupo de nodos simultáneamente.
•
Broadcast: El paquete es enviado a todos los nodos de la red
simultáneamente.
El direccionamiento broadcast presenta la ventaja de su sencillez y es
adecuado para redes basadas en información de estado, su funcionamiento se
basa en que cada nodo informa a todos los demás cuál es estado actual, pero
el principal inconveniente es que los nodos pueden tener que procesar
paquetes que no les afecten directamente. Los esquemas de direccionamiento
unicast y multicast son más eficientes, y facilitan operaciones como el acuse
de recibo y el reenvío, características que aumentan la fiabilidad del sistema.
En redes de control, es muy habitual encontrar esquemas de direccionamiento
del tipo maestro/esclavo, este tipo de esquemas permite plasmar ciertos
aspectos jerárquicos del control de forma sencilla, a la vez que simplifica el
funcionamiento de la red y por tanto abarata los costos de la interfaz física.
La elección del medio físico afecta a aspectos tales como la velocidad
de transmisión, distancia entre nodos y fiabilidad. En muchas redes de control
se recurre a una mezcla de distintos medios físicos para cumplir con los
requisitos de diferentes secciones al menor costo posible. Se incorporarán los
enrutadores, puentes o repetidores necesarios para asegurar el objetivo de una
comunicación extremo a extremo transparente al menor costo posible y sin
que la integración conlleve una disminución de las prestaciones.
El control en tiempo real es también otro aspecto importante a
considerar ya que demanda de las redes de control buenos tiempos de
8
respuesta. Por ejemplo, el retardo entre la detección de un objeto en una línea
de montaje de alta velocidad y el arranque de una máquina de pintado puede
ser del orden de decenas de milisegundos. En general, las redes de datos no
necesitan una respuesta en tiempo real cuando envían grandes conjuntos de
datos a través de la red. El control de acceso al medio y el número de capas
implementadas en la arquitectura de red resultan determinantes a la hora de
fijar la velocidad de respuesta de la red. La implementación de las siete capas
del modelo OSI (Open Systems Interconnection) implica una mayor potencia de
proceso por la sobrecarga que conlleva con respecto a un sistema más sencillo
que por ejemplo sólo implementase las dos primeras capas.
Otra forma de favorecer un tiempo de respuesta pequeño es la
capacidad para establecer mensajes con diferentes prioridades, de forma que
mensajes de alta prioridad (como por ejemplo una alarma) tengan más facilidad
para acceder al medio. Por último, hay que destacar el papel que juega la
seguridad de la red. Se puede destacar dos niveles diferentes de seguridad.
Por una parte la protección frente a accesos no autorizados a la red, y por otra
parte la protección frente a fallos del sistema y averías.
El primer problema es el menos grave, ya que la mayor parte de las
redes de control no están conectadas a redes externas a la fábrica. Además en
la práctica, la mayor parte de las veces, las redes pertenecientes a los
dispositivos de sensores y actuadores no están conectadas ni siquiera con las
redes de nivel superior dentro de la propia fábrica. En cualquier caso, los
mecanismos de protección son similares a los empleados en las redes de
datos: claves de usuario y autentificación de los nodos de la red.
La protección frente a fallos juega un papel mucho más importante,
debido a que se debe evitar, que este hecho afecte negativamente a la planta.
9
Por ejemplo, los sistemas de refrigeración de una central nuclear no pueden
bloquearse porque la interfaz de comunicaciones de un nodo de la red se
averíe. Para ello es fundamental que los nodos puedan detectar si la red está
funcionando correctamente o no, y en caso de avería puedan pasar a un
algoritmo de control que mantenga la planta en un punto seguro. Si el sistema
es crítico, se deben incluir equipos redundantes, que reemplacen al averiado
de forma automática en caso de avería. La monitorización de la red y la
capacidad de diagnóstico representan por tanto dos puntos básicos de
cualquier red de control.
La
necesidad
de
buenas
herramientas
de
mantenimiento
y
administración de la red son vitales. No sólo por lo dicho anteriormente sino
que también porque en las redes de control las operaciones de reconfiguración
y actualización de la red son frecuentes.
2.4.- VENTAJAS DE LOS BUSES DE CAMPO
La principal ventaja que ofrecen los buses de campo, y la que los hace
más atractivos a los usuarios finales, es la reducción de costos. El ahorro
proviene fundamentalmente de tres fuentes: ahorro en costo de instalación,
ahorro en el costo de mantenimiento y ahorros derivados de la mejora del
funcionamiento del sistema.
Una de las principales características de los buses de campo es una
significativa reducción en el cableado necesario para el control de una
instalación. Cada célula de proceso solo requiere un cable para la conexión de
los diversos nodos. Se estima que puede ofrecer una reducción de 5 a 1 en los
costos de cableado. En comparación con otros tipos de redes, dispone de
herramientas de administración del bus que permiten la reducción del número
de horas necesarias para la instalación y puesta en marcha.
10
El hecho de que los buses de campo sean más sencillos que otras redes
de uso industrial como por ejemplo MAP 1 hace que las necesidades de
mantenimiento de la red sean menores, de modo que la fiabilidad del sistema a
largo plazo aumenta. Además, los buses de campo permiten a los operadores
monitorizar todos los dispositivos que integran el sistema e interpretar
fácilmente las interacciones entre ellos. De esta forma, la detección de las
fuentes de problemas en la planta y su corrección resulta mucho más sencilla,
reduciendo los costos de mantenimiento y el tiempo de parada de la planta.
Los buses de campo ofrecen mayor flexibilidad al usuario en el diseño
del sistema. Algunos algoritmos y procedimientos de control que con sistemas
de comunicación tradicionales debían incluirse en los propios algoritmos de
control, radican ahora en los propios dispositivos de campo, simplificando el
sistema de control y sus posibles ampliaciones.
También hay que tener en cuenta que las prestaciones del sistema
mejoran con el uso de la tecnología de los buses de campo debido a la
simplificación en la forma de obtener información de la planta desde los
distintos sensores. Las mediciones de los distintos elementos de la red están
disponibles para todos los demás dispositivos. La simplificación en la
obtención de datos permitirá el diseño de sistemas de control más eficientes.
Con la tecnología de los buses de campo, se permite la comunicación
bidireccional entre los dispositivos de campo y los sistemas de control, pero
también entre los propios dispositivos de campo.
Otra ventaja de los buses de campo es que solo incluyen 4 capas
(Física, Enlace, Aplicación y Usuario), y un conjunto de servicios de
Una arquitectura de comunicaciones independiente del fabricante que permita interconectar
todos los elementos de la fábrica
1
11
administración. El usuario no tiene que preocuparse de las capas de enlace o
de aplicación, sólo necesita saber cuál es funcionalidad. Al usuario solo se le
exige tener un conocimiento mínimo de los servicios de administración de la
red, ya que parte de la información generada por dichos servicios puede ser
necesaria para la reparación de averías en el sistema. De hecho,
prácticamente, el usuario solo debe preocuparse de la capa física y la capa de
usuario.
2.5.- COMUNICACIONES EN ENTORNOS INDUSTRIALES
La estandarización de protocolos en la industria es un tema en
permanente discusión, donde intervienen problemas técnicos y comerciales.
Cada protocolo esta optimizado para diferentes niveles de automatización y en
consecuencia responden al interés de diferentes proveedores. Por ejemplo
Fieldbus
Foundation,
PROFIBUS
y
HART,
están
diseñados
para
instrumentación de control de procesos. En cambio DeviceNet y SDS están
optimizados para los mercados de los dispositivos discretos (on-off) de
detectores, actuadores e interruptores, donde el tiempo de respuesta y
repetibilidad son factores críticos.
Cada protocolo tiene un rango de aplicación, fuera del mismo disminuye
el rendimiento y aumenta la relación costo/prestación. En muchos casos no se
trata de protocolos que compitan entre sí, sino que se complementan, cuando
se trata de una arquitectura de un sistema de comunicación de varios niveles.
2.6.- CLASIFICACIÓN DE LAS REDES INDUSTRIALES
Existen muchas maneras de clasificar las redes: en función de su
funcionalidad, de los protocolos utilizados, de sus prestaciones, del tipo de
acceso, de su topología, etc. En nuestro caso se verán las siguientes:
12
•
Según su topología.
•
Según su acceso al medio.
•
Según su modelo de comunicación.
•
Según sus prestaciones.
•
Según el tipo de comunicación.
2.6.1.- SEGÚN SU TOPOLOGÍA
Se llaman topologías de red a las diferentes estructuras de
intercomunicación en que se pueden organizar las redes de transmisión de
datos entre dispositivos. Cuando componentes de automatización autónomos
tales como sensores, actuadores, autómatas programables, robots, etc.,
intercambian información, éstos deben interconectarse físicamente con una
estructura determinada. Cada topología de red lleva asociada una topología
física y una topología lógica. La primera (topología física), es la que define la
estructura física de la red, es decir, la manera en la que debe ser dispuesto el
cable de interconexión entre los elementos de la red (Figura 2.2). La topología
lógica es un conjunto de reglas normalmente asociado a una topología física,
que define el modo en el que se gestiona la transmisión de los datos en la red.
La utilización de una topología influye en el flujo de información (velocidad de
transmisión, tiempos de llegada, etc.), en el control de la red, y en la forma en
la que ésta se puede expandir y actualizar.
•
Topología en Malla: Este tipo de interconexión proporciona múltiples
enlaces físicos entre los nodos de la red, de tal modo que no existen
varios canales de comunicación compartidos y múltiples caminos de
interconexión entre dos nodos. La interconexión es total cuando todos
los nodos están conectados de forma directa entre ellos, existiendo
siempre un enlace punto a punto para su intercomunicación. La
13
interconexión es parcial cuando no todos los nodos pueden conectarse
mediante un enlace punto a punto con cualquier otro nodo de la red.
•
Topología en Estrella: Cada nodo se conecta a un nodo central
encargado del control de acceso a la red por el resto de nodos
(colisiones, errores, etc.). En esta topología adquiere una importancia
decisiva el nodo central que se encarga de controlar toda la
comunicación, pues cualquier perturbación en el mismo conduce,
generalmente, al fallo de la red completa. Su implementación puede ser
una decisión factible en el caso de que los nodos de la red no se
encuentren muy distanciados del nodo central debido al costo que
supone cablear cada nodo hasta el nodo central.
•
Topología en Bus: Todos los nodos se conectan a un único medio de
transmisión utilizando transceptores, encargados de controlar el acceso
al bus. Los mensajes se envían por el bus y todos los nodos escuchan,
aceptando los datos sólo en el caso de que vayan dirigidos a él
(reconocimiento de su propia dirección). Esta topología permite la
adición y sustracción de nodos sin interferir en el resto, aunque un fallo
en el medio de transmisión inutiliza por completo la red (rotura del cable,
por ejemplo). Suelen ser necesarios terminadores de red para poder
adaptar impedancias y evitar reflexiones de las ondas transmitidas y
recibidas. Los nodos se deben conectar a la línea de bus principal
mediante segmentos cortos pues ello influye directamente en la
velocidad de transmisión y recepción de datos para ese nodo. Esta es
una de las topologías más utilizadas habitualmente. Puede cubrir largas
distancias empleando amplificadores y repetidores. Poseen un costo
reducido, siendo las más sencillas de instalar. La respuesta es excelente
con poco tráfico, siendo empleadas en redes pequeñas.
•
Topología en Árbol: Esta topología puede interpretarse como el
14
encadenamiento de diferentes estructuras en bus de diferente longitud y
de características diferenciadas, constituyendo diferentes ramas de
interconexión. En este caso adquieren gran importancia los elementos
que permiten duplicar y enlazar las diferentes líneas, ya que actúan
como nodos principales de manera análoga a como lo hace el nodo
principal de la interconexión en estrella. Dado que existen varias
estructuras de bus, cada una debe incorporar sus terminadores y
elementos asociados, así como los elementos de enlace.
•
Topología en Anillo: Los nodos se conectan en serie alrededor del anillo.
Sería equivalente a unir los extremos de una red en bus. Los mensajes
se transmiten en una dirección (actualmente ya existen topologías en red
con envío en ambos sentidos), pasando por todos los nodos necesarios
hasta llegar a su destino. No existe un nodo principal y el control de la
red queda distribuido entre todos los nodos. Cuando la red es ampliada
o reducida, el funcionamiento queda interrumpido, y un fallo en la línea
provoca la caída de la red. Posee una relación costo/modularidad
buena, en general, la instalación es complicada, aunque es fácil variar el
número de estaciones. No influyen los fallos en las estaciones si no
condicionan la capacidad del interfaz del anillo. Es muy sensible a fallos
en los módulos de comunicaciones y en el medio de comunicación. El
retardo grande para número de estaciones elevado.
15
Figura 2.2.- Topologías de red
2.6.2.- SEGÚN SU ACCESO AL MEDIO
Como es lógico, un nodo no debería poder enviar mensajes siempre que
le pareciera. Esto provocaría un funcionamiento erróneo de la red. Para que la
comunicación tenga coherencia, se establecen políticas de arbitraje, para
determinar cuándo es posible acceder al bus, y quién puede hacerlo. Según la
forma de acceder al medio existen tres procedimientos básicos para compartir
un canal de comunicaciones: selección, reserva y contienda (Figura 2.3). Los
dos primeros pueden realizarse con control de acceso centralizado (hay una
estación encargada de que el acceso se realice de forma correcta), o
distribuido (el control se realiza de forma conjunta por todas las estaciones
conectadas al medio). Las técnicas de contienda, también denominadas de
acceso aleatorio, son específicas para redes con control de acceso distribuido.
•
Selección: El usuario es avisado al llegar su turno, y toma el control
hasta que finaliza la transmisión de los mensajes que tiene pendientes
en cola de espera. En el acceso descentralizado, existe un método de
paso de testigo el cual determina que usuario tiene acceso al medio,
16
mientras que en el acceso centralizado, existe un módulo que
selecciona por turno a los posibles usuarios cada vez que el canal de
comunicaciones queda libre. En cualquier caso, los usuarios son
seleccionados por turnos, y desconocen cuando van a serlo
nuevamente. Dentro de ésta categoría se encuentran: Token Passing,
Polling.
•
Reserva: En las técnicas de reserva, a diferencia de lo que ocurre con las
de selección, el usuario conoce con adelanto cuando va a poder utilizar
el recurso. O dispone de una reserva permanente, o antes de tomar el
recurso, solicita que se le haga y confirme una reserva determinada.
Dentro de ésta categoría se encuentra: Cyclic, Schedule Access.
•
Contienda: Cuando un usuario necesita el canal de comunicación intenta
tomarlo, estableciéndose una contienda con otros usuarios que deseen
utilizarlo. Pueden producirse colisiones porque un usuario intente
acceder al canal cuando estaba ocupado, o porque dos manden
mensajes al canal al mismo tiempo. Dentro de ésta categoría se
encuentran: CSMA/CD, CSMA/CA, CSMA/NBA.
Figura 2.3.- Clasificación de protocolos según su acceso al medio
17
2.6.3.- SEGÚN SU MODELO DE COMUNICACIÓN
Además de las diferentes técnicas de acceso de los sistemas de
comunicación, resulta importante conocer los dos modelos básicos en los que
se enmarca cualquier sistema de comunicación, estos modelos son:
•
Cliente/Servidor: La comunicación en este modelo consiste en que un
nodo emite un mensaje a cada nodo destino, debiendo repetir ese
mensaje para cada uno de los nodos si es que desea que el mensaje
llegue a varios nodos pues la trama del mensaje enviado contiene una
cabecera donde figura el nodo fuente y el nodo destino. De este modo,
no es posible la llegada simultánea del mismo mensaje a todos los
nodos, utilizando la red de comunicaciones durante un largo periodo de
tiempo. Además, el tiempo de emisión a todos los nodos cambia según
el número de nodos a los que se desea hacer llegar el mensaje, el tipo
de difusión utilizado es el envío de mensajes desde un único emisor a un
único receptor (unicast). Este modelo es empleado por protocolos como:
PROFIBUS, INTERBUS y AS-Interface.
•
Productor/Consumidor: La comunicación en este modelo emplea un
sistema por el que todos los nodos reciben los mensajes que se
transmiten, siendo la tarea de cada nodo decidir si ese mensaje debe
aceptarlo. De este modo, todos los nodos reciben el mensaje
simultáneamente y no es necesario repetirlo para cada uno de los nodos
a los que está dirigido, con el consiguiente ahorro en el tiempo de
utilización del bus. Así, el tiempo de transmisión resulta constante
independientemente del número de nodos a los que se desea hacer
llegar el mensaje. En este caso, la trama del mensaje incluye un
identificador de mensaje; este identificador permite que los nodos
receptores conozcan si deben aceptarlo o no, el tipo de difusión
18
utilizado es el envío de mensajes a un grupo de receptores (multicast) o
a toda la red (broadcast). Este modelo es empleado por protocolos
como: WorldFIP, Fieldbus Foundation, CAN, ControlNet y EtherNet/IP.
2.6.4.- SEGÚN SUS PRESTACIONES
Una clasificación de los sistemas de comunicación en red que se verá
será atendiendo a los aspectos relacionados con sus prestaciones.
•
Buses de Alta Velocidad y Baja Funcionalidad (SensorBus): Diseñados
para integrar dispositivos simples como finales de carrera, fotocélulas,
relés y actuadores simples, funcionando en aplicaciones de tiempo real,
y agrupados en una pequeña zona de la planta, típicamente una
máquina. Suelen especificar las capas física y de enlace del modelo OSI,
es decir, señales físicas y patrones de bits de las tramas. Algunos
ejemplos son: Seriplex, AS-Interface.
•
Buses de Alta Velocidad y Funcionalidad Media (DeviceBus): Se basan
en el diseño de una capa de enlace para el envío eficiente de bloques de
datos de tamaño medio. Estos mensajes permiten que el dispositivo
tenga mayor funcionalidad de modo que permite incluir aspectos como
la configuración, calibración o programación del dispositivo. Son buses
capaces de controlar dispositivos de campo complejos, de forma
eficiente y a bajo costo. Normalmente incluyen la especificación
completa de la capa de aplicación, lo que significa que se dispone de
funciones utilizables desde programas basados en PCs para acceder,
cambiar y controlar los diversos dispositivos que constituyen el sistema.
Algunos incluyen funciones estándar para distintos tipos de dispositivos
(perfiles) que facilitan la interoperabilidad de dispositivos de distintos
fabricantes. Algunos ejemplos son: PROFIBUS DP, DeviceNet, SDS,
19
INTERBUS.
•
Buses de Altas Prestaciones (FactoryBus): Son capaces de soportar
comunicaciones a nivel de toda la factoría, en muy diversos tipos de
aplicaciones. Aunque se basan en buses de alta velocidad, algunos
presentan problemas debido a la sobrecarga necesaria para alcanzar las
características funcionales y de seguridad que se les exigen. La capa de
aplicación oferta un gran número de servicios a la capa de usuario,
habitualmente
características
un
subconjunto
incluyen:
redes
del
estándar
multimaestro
MMS.
con
Entre
sus
redundancia,
comunicación maestro-esclavo según el esquema pregunta-respuesta,
recuperación de datos desde el esclavo con un límite máximo de
tiempo, capacidad de direccionamiento unicast, multicast y broadcast,
petición de servicios a los esclavos basada en eventos, comunicación
de variables y bloques de datos orientada a objetos, descarga y
ejecución remota de programas, altos niveles de seguridad de la red,
opcionalmente
con
procedimientos
de
autentificación,
conjunto
completo de funciones de administración de la red. Algunos ejemplos
son: PROFIBUS, WorldFIP, Fieldbus Foundation.
•
Buses para Áreas de Seguridad Intrínseca (Intrinsically Safety): Incluyen
modificaciones en la capa física para cumplir con los requisitos
específicos de seguridad intrínseca en ambientes con atmosferas
explosivas. La seguridad intrínseca es un tipo de protección por la que el
aparato en cuestión no tiene posibilidad de provocar una explosión en la
atmósfera circundante. Un circuito eléctrico o una parte de un circuito
tienen seguridad intrínseca, cuando alguna chispa o efecto térmico en
este circuito producidos en las condiciones de prueba establecidas por
un estándar (dentro del cual figuran las condiciones de operación normal
y de fallo específicas) no puede ocasionar una ignición. Algunos
20
ejemplos son: PROFIBUS PA, Fieldbus Foundation H1, WorldFIP y
HART.
Figura 2.4.- Clasificación de los diversos buses de campo según sus prestaciones
2.6.5.- SEGÚN EL TIPO DE COMUNICACIÓN
Según la forma de intercambiar la información existen dos tipos de
protocolos de comunicaciones de datos:
•
Protocolos orientados a nodos: El intercambio de información entre
nodos se basa en el direccionamiento de los mismos, generalmente las
tramas de datos que se transmiten contienen las direcciones de destino
y algunas veces la dirección fuente.
•
Protocolos orientados a mensajes: La información a intercambiar se
descompone en mensajes, a los cuales se les asigna un identificador y
se encapsulan en tramas para su transmisión. Cada mensaje tiene un
identificador único, con el cual los nodos deciden aceptar o no dicho
mensaje.
21
CAPÍTULO 3.- ESTADO DEL ARTE DEL PROTOCOLO DE
COMUNICACIONES CAN
El propósito de este capítulo es realizar un estudio de requisitos para
implementar un sistema de transmisión en redes industriales a través del
protocolo de comunicaciones CAN, tanto en el aspecto de módulos requeridos
como la disponibilidad de equipos que reúnan tales características
3.1.- PROTOCOLO DE COMUNICACIONES CAN
El protocolo de comunicación CAN es uno de los buses de campo más
populares, fue desarrollado por Bosch e Intel al final de los años 80 como bus
de comunicaciones de costos razonables para la industria automotriz, aunque
rápidamente se extendió a otros campos como la robótica, automática y la
manufactura.
El protocolo CAN, en su especificación ISO 11898, describe como la
información será transmitida entre los diferentes dispositivos de una red. En
conformidad con el modelo de referencia OSI, el protocolo CAN garantiza
transparencia en el diseño y flexibilidad en las implementaciones definiendo
únicamente las capas física y enlace de datos, además establece un
mecanismo de supervisión especial para la gestión y control del nodo
(Figura 3.1). Existen también ciertos protocolos en la capa de aplicación que
proporcionan especificaciones sobre la base de CAN, entre los que se
encuentran: CAL, CANopen, DeviceNet, SDS, OSEK/VDX y CAN Kingdom.
22
Figura 3.1.- Arquitectura de capas del protocolo CAN
3.2.- CONCEPTOS BÁSICOS DEL BUS CAN
CAN es un protocolo de comunicación serial que utiliza el modelo de
comunicación productor/consumidor el que proporciona los datos a través de
difusión de mensajes, además es un protocolo orientado a mensajes que
posee las siguientes características:
•
Prioridad de mensajes: Se define mediante el identificador del mensaje
durante el acceso al bus de comunicaciones. El identificador también
distingue el contenido del mensaje pero no indica el destino del mismo,
solo describe su significado. Cada nodo en la red es capaz de filtrar los
mensajes de acuerdo al identificador para decidir si deben actuar o no.
•
Garantía en tiempos de latencia: La longitud de un mensaje es corta,
23
tiene como máximo 8 bytes de datos por mensaje lo que garantiza una
baja latencia entre transmisión y recepción. El método de acceso al
medio utilizado es: acceso múltiple por detección de portadora con
arbitraje no destructivo bit a bit 2 (CSMA/NBA, Carrier Sense Multiple
Access with Non-destructive Bitwise Arbitration) esto significa que la
colisión de mensajes es evitada por medio de arbitraje tomando en
cuenta la prioridad de los mismos.
•
Flexibilidad en la configuración: En un sistema CAN un nodo no hace
ningún uso de la información del sistema de configuración como por
ejemplo la dirección física de cada estación, esto hace que el sistema
sea flexible, es decir, se puede añadir nodos a la red CAN sin necesidad
de ningún cambio de software, hardware o en la capa aplicación.
•
Recepción por multidifusión con sincronización de tiempos: Todos los
nodos de la red reciben el mismo mensaje y realizan el mismo
procedimiento de filtrado simultáneamente.
•
Sistema robusto en cuanto a consistencia de datos: Todos los
receptores verifican la consistencia de la información que es recibida y
reconocen un mensaje consistente mediante acuses de recibo.
•
Sistema multimaestro: Cuando el bus está libre, cualquier nodo puede
iniciar la comunicación. La unidad con el mensaje de mayor prioridad a
ser transmitido gana el acceso al bus.
•
Detección y señalización de errores: El sistema CAN proporciona alta
inmunidad
a
la
interferencia
electromagnética,
provee
además
mecanismos de detección de errores como los siguientes: monitoreo,
chequeo de redundancia cíclica, bits de relleno, chequeo de formato de
La literatura también conoce a este método como acceso múltiple por detección de portadora
con detección de colisiones y arbitraje por prioridad del mensaje (CSMA/CD+AMP, Carrier
Sense Multiple Access with Collision Detection and Arbitration Message Priority)
2
24
tramas del mensaje. El mecanismo de detección de errores permite a los
nodos detectar errores globales, errores distribuidos de manera
aleatoria, ráfagas de errores de longitud menor a 15 y errores de
cualquier número impar en un mensaje. La probabilidad de error en un
mensaje es de 4,7 x 10-11.
•
Retransmisión automática de tramas erróneas tan pronto como el bus
esté libre: Los mensajes erróneos son identificados por una bandera de
modo que cualquier nodo está en capacidad de detectar un error. Los
mensajes erróneos se descartan y se retransmiten automáticamente.
•
Aislamiento de fallos 3: Distinción entre errores temporales y fallas
permanentes de los nodos de la red, desconexión autónoma de nodos
defectuosos.
3.3.- CAPA FÍSICA (PHY)
La capa física de un sistema de comunicaciones define los aspectos del
medio físico para la transmisión de datos entre los nodos de una red, los más
importantes hacen referencia a los niveles de señal, representación,
sincronización y tiempos en los que los bits se transfieren al bus. El diseño de
una red CAN varía de acuerdo a las necesidades de desempeño y para ello se
deben considerar los requisitos de la capa física.
La especificación del protocolo CAN no define una capa física, sin
embargo,
los
estándares
ISO 11898-2
e
ISO 11898-3
establecen
las
características que deben cumplir las aplicaciones para la transferencia en alta
y baja velocidad respectivamente. Cabe mencionar que las características
definidas para la capa física deben implementarse en todos los nodos que se
El estándar ISO 11898 y la especificación CAN 2.0 denominan a este mecanismo como
aislamiento de fallos mientras que en la literatura se denomina limitación de errores. En este
trabajo de tesis se emplea el término aislamiento de fallos
3
25
encuentren conectados dentro de una red CAN. La capa física (PHY, Physical
Layer) se divide en tres secciones o subcapas (Figura 3.2), las cuales se
describen a continuación.
Figura 3.2.- Arquitectura de la capa física del protocolo CAN
3.3.1.- SUBCAPA DE SEÑALIZACIÓN FÍSICA (PLS)
La subcapa de señalización física (PLS, Physical Signalling) define las
funciones relacionadas con la representación, temporización y sincronización
de los bits, y está implementada en los controladores del protocolo CAN.
3.3.1.1.- REPRESENTACIÓN DE BITS
Una trama CAN está codificada de acuerdo con el método NRZ (Non
Return to Zero), el cual establece que durante todo el tiempo de bit se genera
un nivel de señal que puede ser dominante (d) o recesivo (r). Una ventaja de
dicho método, en comparación con la codificación Manchester, es que
produce una frecuencia menor de operación, ya que la codificación
Manchester requiere de flancos en la mitad del tiempo de bit (Figura 3.3).
26
Figura 3.3.- Comparación de la representación de bits del código NRZ y el código Manchester
Sin embargo, en el caso de transmitir una gran cantidad de bits con la
misma polaridad, la codificación NRZ no proporciona flancos que puedan
utilizarse en la sincronización y por ello se implementa el procedimiento de
inserción de bit (bit stuffing), el cual asegura que en la transmisión de una
trama sólo puede haber un máximo de cinco bits consecutivos con la misma
polaridad como se muestra en la Figura 3.4.
Figura 3.4.- Ejemplo del procedimiento de inserción de bit
27
3.3.1.2.- TEMPORIZACIÓN DE BITS
Una característica importante del protocolo CAN es la flexibilidad para
determinar los parámetros de velocidad de transferencia, punto de muestreo
de bit y número de muestras realizadas en un periodo de bit. Por lo tanto, el
diseño de una red CAN debe considerar los siguientes conceptos:
•
Tiempo de quantum �𝑡𝑞 �: Es una unidad básica de tiempo, es de valor
fijo y se deriva del período del oscilador, éste valor es programable y
puede tomar los valores de 1 a 32. La longitud de los segmentos de
tiempo en un intervalo de bit está definida por múltiplos enteros de la
unidad básica de tiempo (t q , time quantum) derivada del periodo del
oscilador t CLK (Figura 3.5). El parámetro t q es la unidad de tiempo
discreta más pequeña utilizada por un nodo CAN.
Figura 3.5.- Principio de derivación del periodo de bit
•
Tiempo de bit nominal (𝑡𝑏 ): Es la relación inversa entre el tiempo de
duración de un bit (t b ) y la velocidad de transferencia nominal (fb )
correspondiente al el número de bits por segundo que un transmisor
ideal emite sin resincronización. Se obtiene mediante la Ecuación 3.1 y
se divide en cuatro segmentos de tiempo no traslapados (Figura 3.6).
28
tb =
1
fb
[3. 1]
Figura 3.6.- Segmentos del tiempo de bit
Los cuatro segmentos que forman un tiempo de bit nominal son:

Segmento de sincronización (Sync_Seg): Es el primer segmento del
tiempo de bit nominal y el cual es utilizado para la sincronización de

los nodos en el bus. Su longitud es fija e igual a 1t q .
Segmento de tiempo de propagación (Prop_Seg): Es utilizado para
compensar el retardo de propagación de la señal en el bus y retardos
inherentes a los nodos como los son los retardos del controlador del

bus. Su longitud puede tomar los valores enteros de 1 a 8t q .
Segmento de memoria temporal de fase 1 (Phase_Seg1): Segmento
de longitud ajustable que se utiliza para compensar variaciones de
tiempo entre nodos, puede incrementarse durante la resincronización

Su longitud puede tomar los valores enteros de 1 a 8t q .
Segmento de memoria temporal de fase 2 (Phase_Seg2): Segmento
de longitud ajustable que se utiliza para compensar variaciones de
tiempo entre nodos y puede reducirse durante la resincronización. Su
longitud puede tomar los valores enteros desde el Tiempo de
procesamiento de la información hasta el máximo definido por
29
Phase_Seg1.
El número total de unidades básicas en un tiempo de bit debe ser
programable entre 8 a 25t q .
•
Punto de muestreo: Es el instante de tiempo en el cual se lee y se
interpreta el nivel del bus para determinar el valor del bit. Se localiza
después del segmento Phase_Seg1.
•
Tiempo de procesamiento de la información: Es el periodo de tiempo
que comienza con el Punto de muestreo reservado para calcular el nivel
de bit subsecuente. Su longitud es inferior o igual a 2t q .
Figura 3.7.- Ejemplo de definición de un tiempo de bit
3.3.1.3.- MECANISMOS DE SINCRONIZACIÓN DE BITS
El protocolo CAN utiliza transferencia de datos sincrónica, lo cual
incrementa la capacidad de transmisión pero requiere un método de
sincronización de bits debido a que sólo está disponible un bit de inicio al
comienzo de la trama. Lo anterior no es suficiente para mantener sincronizado
el muestreo de bit del receptor con el del transmisor, y para lograrlo se requiere
realizar una resincronización continua del receptor.
En una red CAN cada nodo se sincroniza con su propio oscilador,
debido a ello pueden ocurrir desplazamientos de fase en los diferentes nodos y
por lo tanto los controladores CAN proporcionan un mecanismo de
30
sincronización para compensar dichos desplazamientos mientras reciben una
trama CAN.
Antes de analizar las dos formas de sincronización descritas por el
protocolo CAN, es necesario definir:
•
Error de fase de un flanco: El error de fase de un flanco (e) está dado
por la posición del flanco respecto al segmento de sincronización
Sync_Seg y se mide en unidades (t q ). El signo del error de fase se define
de la siguiente manera:



e = 0, si el flanco se detecta dentro del Sync_Seg.
e > 0, si el flanco se detecta antes del Punto de muestreo.
e < 0, si el flanco se detecta después del Punto de muestreo del bit
previo.
•
Resincronización: Es el valor programado de unidades (t q ) que se suma
a la longitud del Phase_Seg1, o se reduce de la longitud del
Phase_Seg2. dado por un determinado valor que depende del error de
fase en la señal. Cuando la magnitud del Error de fase es mayor que el
valor de RJW,

y si el error de fase es positivo: El segmento Phase_Seg1 se prolonga

por una cantidad igual al valor de RJW (1 a 4t q ).
y si el error de fase es negativo: El segmento Phase_Seg2 se reduce
por una cantidad igual al valor de RJW (1 a 4t q ).
3.3.1.4.- TIPOS DE SINCRONIZACIÓN
El protocolo CAN define dos tipos de sincronización:
•
Sincronización al comienzo de la trama (Forzada): Ocurre en una
transición recesivo-dominante durante el tiempo en donde el bus se
31
encuentra inactivo (bus idle), se obliga al tiempo de bit interno reiniciar
con el segmento Sync_Seg al inicio del bit.
•
Resincronización dentro de la trama (RJW): Como resultado de una
Resincronización, uno de los segmentos de la fase se puede alargar
(Phase_Seg1) o se puede acortar (Phase_Seg2). La cantidad en que se
aumenta o disminuye alguno de los Phase_Seg tiene un límite superior
definido por el parámetro RJW (Resynchronization Jump Width) y deberá
ser programado entre 1 y 4t q .
Ambas formas de sincronización siguen las siguientes reglas:
1.- Dentro de un tiempo de bit sólo se permite una sincronización.
2.- Para efectos de sincronización se utiliza un flanco sólo si el valor
detectado en el punto de muestreo anterior difiere del valor del bus
inmediatamente después del flanco.
3.- Se realiza una sincronización siempre que haya un flanco recesivo a
dominante, y cuando el bus esté desocupado.
Todos los flancos recesivos a dominantes, opcionalmente los flancos
dominantes a recesivos en el caso de bajas velocidades de transferencia, que
satisfagan las reglas 1 y 2 se utilizan para una resincronización, a excepción de
que un nodo que se encuentre transmitiendo un bit dominante no puede
realizar resincronización como resultado de una flanco recesivo a dominante
con un error de fase positivo, si sólo son utilizados para la resincronización
flancos recesivos a dominantes.
32
3.3.1.5.- IMPACTO DE LA VELOCIDAD DE TRANSFERENCIA EN LA LONGITUD
DEL BUS
La longitud máxima del bus CAN depende básicamente de dos
aspectos:
•
Aspectos de corriente alterna: Que corresponden al tiempo de bit,
tolerancia del oscilador, retardo de propagación y capacitancia de la
red.
•
Aspectos de corriente directa: Correspondientes a las consecuencias de
la amplitud de la señal del bus, impedancia característica de los cables
del bus y la impedancia de entrada de los nodos.
Como se menciona anteriormente, la capa física se encarga de
representar los estados dominante y recesivo. Durante el proceso de arbitraje
para acceder al medio, el nodo compara los valores de bit que transmite con
los que recibe para decidir si continua con la transmisión, para ello los nodos
deben asegurar que la transmisión de un bit dominante se realice dentro del
periodo de bit correspondiente y por consiguiente puedan detectar una
condición de pérdida del arbitraje y detengan su transmisión.
El retardo de propagación entre los nodos es resultado del retardo de
línea del bus específica (menor a la velocidad de la luz) y del retardo de los
componentes electrónicos. Por esta razón, los requerimientos de tiempo de bit
implican que la velocidad de transferencia disminuya a medida que la longitud
del bus y/o la tolerancia del oscilador incrementan.
Existen dos criterios para optimizar la relación entre la velocidad de
transferencia y la longitud del bus:
•
El primero se enfoca en obtener una longitud de bus máxima dada una
33
velocidad de transferencia y para ello es necesario que la ubicación del
punto de muestreo esté lo más cercano posible del final del periodo de
bit, y la tolerancia del oscilador debe minimizarse utilizando un oscilador
de cristal.
•
El segundo hace hincapié en el uso de osciladores menos precisos y por
lo tanto, el tiempo de bit debe ajustarse a la tolerancia máxima del
oscilador, sin embargo, la optimización de la tolerancia del oscilador
implica una reducción considerable de la longitud de bus a una
velocidad de transferencia dada.
La relación entre la máxima velocidad de transferencia y la máxima
longitud de bus, pueden calcularse mediante la Ecuación 3.2.
[3. 2]
fB × long_bus < 50000m × Kbps
Utilizando transceptores de alta velocidad se pueden lograr distintas
longitudes de bus (Tabla 3.1 y Figura 3.8). A velocidades de transferencia de
datos menores a 1Mbps, la longitud del bus puede incrementarse
significativamente. El estándar ISO 11898 establece una longitud de bus
máxima de 1Km, pero permite el uso de puentes y/o repetidores para
incrementar la distancia entre los nodos.
Tabla 3.1.- Velocidad de transferencia de datos y longitud del bus
Velocidad de Transferencia
[Kbps]
1000
500
250
125
62,5
20
Longitud del Bus
[m]
40
100
250
500
1000
2500
Tiempo de Bits Nominal
[µs]
1
2
4
8
20
50
34
Figura 3.8.- Relación entre velocidad de transferencia y longitud del bus
3.3.1.6.- TOLERANCIA DE OSCILACIÓN
Como se mencionó en los anteriormente, cada nodo CAN deriva su
señal de tiempo de bit de su propio oscilador. En sistemas reales, la frecuencia
del oscilador fCLK se desvía de su valor nominal debido al desplazamiento de
tolerancia inicial, al envejecimiento de los componentes electrónicos y a las
variaciones de la temperatura ambiental.
La suma de desviaciones resulta en una tolerancia total del oscilador
(Δf), la cual es una tolerancia relativa que representa la desviación de la
frecuencia del oscilador normalizada a la frecuencia nominal (Ecuación 3.3).
Δf = �
fCLK máx/mín − fCLK nom
�
fCLK nom
[3. 3]
Así como la señal de reloj de un sistema CAN se deriva de la frecuencia
del oscilador, Δf representa la tolerancia relativa de la señal de reloj del
35
sistema; los valores mínimos y máximos para la duración del periodo del reloj
del sistema se aproximan como definen las Ecuaciones 3.4 y 3.5.
t SCL mín =
t SCL máx =
t SCL nom
≈ t SCL nom (1 − Δf)
1 + Δf
t SCL nom
≈ t SCL nom (1 + Δf)
1 − Δf
[3. 4]
[3. 5]
Las aproximaciones que se establecen las Ecuaciones 3.4 y 3.5 son
válidas asumiendo un valor de Δf << 1. Las referencias de reloj utilizadas en
sistemas reales, tales como osciladores de cristal (Δf < 0,1%), frecuencias
derivadas de PLL (Phase Locked Loop) (Δf < 0,5%) y resonadores cerámicos
(Δf < 1,2%), satisfacen tal consideración.
La especificación CAN, establece una tolerancia máxima para el
oscilador de 1,58%, y recomienda el uso de un resonador de cerámica en
aplicaciones que necesiten una velocidad de transferencia menor a 125Kbps.
Cuando se requiere de toda la gama de velocidades que establece el
protocolo CAN, es necesario utilizar un oscilador de cuarzo. En una red CAN, la
exactitud de oscilación requerida por los demás nodos está determinada por el
circuito integrado que demande mayor precisión en su oscilador.
Los resonadores de cerámica se utilizan únicamente cuando todos los
nodos de la red cumplen con la especificación del protocolo CAN posterior a la
versión 1.2. En controladores de protocolo que cumplan con la versión 2.0 A/B
y anteriores, se recomienda utilizar osciladores de cristal siempre y cuando
pertenezcan a la misma red.
36
3.3.2.- SUBCAPA DE UNIÓN AL MEDIO FÍSICO (PMA)
La conexión entre el controlador CAN y el medio físico se define en la
subcapa de unión al medio físico (PMA, Physical Medium Attachment). Esta
subcapa describe las características funcionales y eléctricas que debe cumplir
el transceptor para hacer posible la transmisión/recepción entre un nodo y la
red, además algunas de sus implementaciones en circuitos integrados o
discretos proporcionan los medios para detectar fallos en el bus.
La interfaz eléctrica con el bus consiste principalmente de un transmisor
y un receptor. La Figura 3.9 muestra el diagrama a bloques básico de un
transceptor en un nodo CAN, el controlador CAN provee funcionalidad básica
de transceptor, que consiste de un comparador en la recepción y un
amplificador en la salida.
Figura 3.9.- Arquitectura de un nodo CAN con transceptor
Además de la adaptación de señales entre el controlador CAN y el bus,
el transceptor tiene que cumplir con las siguientes funciones:
37
•
Suministrar la capacidad de rendimiento al controlador CAN.
•
Proteger al controlador CAN contra sobrecargas.
•
Reducir la radiación electromagnética.
Como receptor realiza las siguientes funciones:
•
Suministrar un nivel de señal recesivo.
•
Proteger el comparador de entrada del controlador CAN contra
sobre-voltajes de las líneas del bus.
•
Suministrar suficiente sensibilidad para un mejor reconocimiento de la
señal de entrada.
•
Detectar errores en el bus tales como: ruptura de la línea, corto-circuito
y conmutación a operación asimétrica de una sola línea.
Una función opcional del transceptor es proporcionar aislamiento
galvánico, al nodo CAN de las líneas de bus, mediante el empleo de
optoacopladores.
3.3.3.- SUBCAPA DE INTERFAZ DEPENDIENTE DEL MEDIO (MDI)
La interfaz dependiente del medio (MDI, Medium Dependent Interfaz)
define los aspectos eléctricos y mecánicos para la conexión entre el medio
físico y el nodo. Las especificaciones mecánicas de la capa física definen las
características de la interfaz respecto al medio de transmisión y al tipo de
conector.
3.3.3.1.- MEDIO FÍSICO
Un requisito indispensable para realizar el método de arbitraje en el bus,
es la capacidad de representar los niveles de señal recesivo y dominante.
38
Dicho principio se realiza con medios eléctricos u ópticos, los cuales se
describen a continuación.
3.3.3.1.1.- MEDIO DE TRANSMISIÓN ELÉCTRICO
La implementación de redes CAN generalmente utiliza como medio
físico un bus de dos hilos con retorno común controlados diferencialmente. En
aplicaciones específicas se utiliza un bus de un sólo hilo, por ejemplo en
dispositivos electrónicos internos de un vehículo. En la actualidad se
desarrollan soluciones en las que se transmiten las señales CAN junto con la
fuente de alimentación en el mismo bus.
Figura 3.10.- Medio de transmisión eléctrico
•
Bus de dos hilos: Permite una transmisión diferencial y es resistente a
los errores de modo común (Figura 3.10a). Las líneas del bus deben
contar con un terminador de bus en cada extremo, el cual consiste en
resistores de 120Ω para evitar la reflexión de la señal. Se garantiza la
transmisión de una señal a pesar de sus niveles bajos, además, la
interferencia de radio inducida de forma electromagnética se puede
compensar por cables del tipo par trenzado. Si se implementa un
manejo adecuado de los errores en el bus, es posible que la
comunicación continúe en condiciones de inmunidad de ruido reducida
39
aún si una línea se rompe o se encuentra en corto circuito.
•
Bus de un hilo: Esta solución da por hecho que está disponible una tierra
común para todos los nodos (Figura 3.10b) y sólo se implementa en
aplicaciones
automotrices
para
la
interconexión
de
dispositivos
electrónicos internos. El bus de un hilo está expuesto a la interferencia
inducida eléctricamente cuando no está blindado, por lo tanto es
necesario realizar un gran desplazamiento del nivel de la señal para
mejorar la relación señal/ruido, lo cual afecta el grado de emisiones
electromagnéticas y requiere la reducción de las caídas de la señal y por
lo tanto de la máxima velocidad de transferencia de datos.
•
Transmisión de la señal y fuente de alimentación integrada en la misma
línea:
Muchos
sistemas
de
Fieldbus,
como
AS-Interface
y
PROFIBUS PA, suministran la fuente de alimentación junto a la
transmisión de datos sobre la misma línea del bus. El suministro de
voltaje sobre el bus es conveniente en sistemas CAN, sin embargo, no
se recomienda la transmisión simultánea de alimentación y datos debido
al arbitraje no destructivo bit a bit que utiliza dicho protocolo.
Actualmente este tipo de transmisión se encuentra en fase de
investigación y una posible solución es utilizar modulación OOK (On-Off
Keying) para la transmisión de datos. Las investigaciones muestran que
la transmisión simultánea de datos y alimentación implica la utilización
de circuitos de alto costo, pérdida de inmunidad a la interferencia y
reducción en la longitud del bus, por lo que esta solución no es
competente frente a las ya existentes en el mercado.
3.3.3.1.2.- MEDIO DE TRANSMISIÓN ÓPTICO
Los avances relacionados con los medios de transmisión ópticos han
obtenido gran importancia en el desarrollo de redes CAN, especialmente en el
40
área de la fibra óptica. El comportamiento eléctricamente neutro de un medio
óptico es ideal para aplicaciones en ambientes potencialmente explosivos y
entornos electromagnéticos perturbados.
Las líneas de transmisión y recepción deben proporcionarse de forma
separada, debido al acoplamiento directo en el medio óptico. Además cada
línea de recepción debe acoplarse externamente con cada línea de transmisión
con el propósito de asegurar el monitoreo de bits que requiere el protocolo
CAN, esta función puede implementarse por un acoplador de tipo estrella. El
uso de acopladores pasivos tipo estrella es posible con una cantidad pequeña
de nodos, lo cual limita la expansión de este tipo de redes.
3.3.3.2.- TIPOS DE CONECTORES CAN
A nivel de capa física, existen diversos tipos de conectores
estandarizados que pueden ser utilizados, pueden ser tanto del tipo cerrado
como abierto. La definición del tipo a ser utilizado dependerá de la aplicación y
del ambiente de operación del equipamiento. A continuación se entregará una
lista de conectores más utilizados para el bus CAN en donde se mostrará la
forma y asignación de terminales de cada modelo.
3.3.3.2.1.- CONECTOR DB9
Conector DB9, recomendación DS-102 (Tabla 3.2 y Figura 3.11).
41
Tabla 3.2.- Asignación de terminales en el conector DB9
Pin
1
2
3
4
5
6
7
8
9
Señal
CAN_L
CAN_GND
CAN_SHLD
GND
CAN_H
CAN_V+
Descripción
Futuras aplicaciones
Señal de bus CAN (dominante bajo)
Señal de tierra (GND)
Futuras aplicaciones
Blindaje (opcional)
Tierra (opcional)
Señal de bus CAN (dominante alto)
Futuras aplicaciones
Fuente de alimentación externa (opcional)
Figura 3.11.- Conector tipo DB9
3.3.3.2.2.- CONECTOR TIPO MINI
Conector tipo mini (Tabla 3.3 y Figura 3.12).
Tabla 3.3.- Asignación de terminales del conector tipo mini
Pin
1
2
3
4
5
Señal
CAN_SHLD
CAN_V+
CAN_GND
CAN_H
CAN_L
Descripción
Blindaje (opcional)
Fuente de alimentación externa (opcional)
Señal de tierra (GND)
Señal de bus CAN (dominante alto)
Señal de bus CAN (dominante bajo)
Figura 3.12.- Conector tipo mini
42
3.3.3.2.3.- CONECTOR TIPO MICRO
Conector tipo micro de 5 terminales, o también llamado conector M12
(Tabla 3.4 y Figura 3.13).
Tabla 3.4.- Asignación de terminales del conector tipo micro
Pin
1
2
3
4
5
Señal
CAN_SHLD
CAN_V+
CAN_GND
CAN_H
CAN_L
Descripción
Blindaje (opcional)
Fuente de alimentación externa (opcional)
Señal de tierra (GND)
Señal de bus CAN (dominante alto)
Señal de bus CAN (dominante bajo)
Figura 3.13.- Conector tipo micro
3.3.3.2.4.- CONECTOR TIPO NANO
Conector tipo micro de 5 terminales, o también llamado conector M8
(Tabla 3.5 y Figura 3.14).
Tabla 3.5.- Asignación de terminales del conector tipo nano
Pin
1
2
3
4
5
Señal
CAN_V+
CAN_SHLD
CAN_H
CAN_L
CAN_GND
Descripción
Fuente de alimentación externa (opcional)
Blindaje (opcional)
Señal de bus CAN (dominante alto)
Señal de bus CAN (dominante bajo)
Señal de tierra (GND)
43
Figura 3.14.- Conector tipo nano
3.3.3.2.5.- CONECTOR TIPO ABIERTO
Conector tipo abierto (Tabla 3.6 y Figura 3.15).
Tabla 3.6.- Asignación de terminales del conector tipo abierto
Pin
1
2
3
4
5
Señal
CAN_GND
CAN_L
CAN_SHLD
CAN_H
CAN_V+
Descripción
Señal de tierra (GND)
Señal de bus CAN (dominante bajo)
Blindaje (opcional)
Señal de bus CAN (dominante alto)
Fuente de alimentación externa (opcional)
Figura 3.15.- Conector tipo abierto
3.3.3.3.- TOPOLOGÍA DE UNA RED CAN
Si no se consideran las medidas apropiadas, las señales eléctricas
transmitidas en las líneas del bus CAN se reflejan al final de la línea eléctrica
principal y en las líneas de extensión, por ello es necesario que las reflexiones
sobrepuestas de la señal estén debidamente atenuadas cuando se muestrea el
nivel de bit para interpretar los niveles de bus recibidos. Las reflexiones de la
44
señal se pueden evitar al colocar resistores de terminación con una impedancia
equivalente a la de la línea en ambos extremos del bus, y al evitar líneas de
extensión de grandes longitudes. De esta forma, mediante una topología de
bus se puede lograr el producto más alto de velocidad de transferencia y
longitud de línea (Figura 3.10).
En aplicaciones industriales no es común conectar un nodo al bus
mediante líneas de extensión muy cortas, sin embargo, con la configuración
apropiada de los parámetros de los tiempos de bit, el punto de muestro de bit
puede colocarse al final del tiempo de bit, y con ello se minimizan los efectos
de reflexión de la señal.
En muchas aplicaciones es inevitable utilizar topologías extendidas, por
ejemplo para conectar herramientas de diagnóstico o servicio. Para superar las
limitaciones de la topología de bus CAN se emplean repetidores, puentes y
pasarelas con la finalidad de adaptar la topología de red de acuerdo con las
necesidades geográficas de cada aplicación específica.
3.3.4.- ESTÁNDARES DE LA CAPA FÍSICA
Como se mencionó anteriormente, las redes CAN tienen diversas
aplicaciones, sin embargo la especificación CAN no define las características
del transceptor, y deja abierta la posibilidad de implementar el medio de
transmisión y los niveles de señales que más convengan al diseñador de la red.
Por ello se han definido diferentes estándares, los cuales especifican: niveles
de señales, topología de la red, máximo número de nodos, requisitos para el
bus y conectores.
45
Para medios eléctricos los voltajes diferenciales son definidos en:
ISO 11898-2 (alta velocidad), ISO 11898-3 (tolerante a fallos), SAE J2411 (un
sólo hilo), ISO 11992 (punto a punto).
3.3.4.1.- ESTÁNDAR ISO 11898-2
El estándar ISO 11898-2, destinado a la comunicación de alta velocidad
en vehículos, es la norma más importante y CiA lo recomienda para
aplicaciones industriales. Las capas de aplicación: CANopen, DeviceNet y SDS
especifican suplementos a éste estándar. Establece los fundamentos de una
serie de estándares y es la norma de capa física más importante en
aplicaciones industriales y automotrices. Dicha norma describe las funciones
de la subcapa PMA, y algunas características de la subcapa MDI. Sus
principales características son:
•
Velocidades de transferencia de datos de hasta 1Mbps.
•
Longitud máxima del bus de 40m a 1Mbps.
•
El número total de nodos está limitado por la carga eléctrica en el bus.
•
Bus diferencial de dos hilos.
•
Seguridad contra corto circuito en el rango de voltaje comprendido entre
-3V a +16V.
•
Impedancia característica de la línea de 120Ω.
•
Rango de voltaje en modo común desde -2V (CAN_L) a +7V (CAN_H).
El estándar ISO 11898-2 define un bus de dos hilos terminado en ambos
extremos con la impedancia de línea específica del medio físico y con las
siguientes características eléctricas:
•
Longitud máxima de línea de extensión: 30cm.
•
Resistencia de línea nominal por metro: 70mΩ/m.
46
•
Retardo de propagación nominal: 5ns/m.
El bus de dos hilos especificado en el estándar ISO 11898, contiene dos
señales, CAN_H y CAN_L, en donde todo nodo CAN debe proporcionar el
voltaje diferencial de salida en el bus (Ecuación 3.6):
Vdiff = VCAN_H − VCAN_L
•
Bit recesivo: -500mV a +500mV, sin carga.
•
Bit dominante: +1,5 V a +3,0 V, con una carga de 60Ω.
[3. 6]
En la Tabla 3.7 y Figura 3.16 se muestran los niveles de las señales en
el bus CAN en especificados en el estándar ISO 11898-2. Los nodos deben
detectar los dos estados posibles del bus: Dominante y Recesivo.
Tabla 3.7.- Niveles nominales de voltaje en el bus CAN de acuerdo al estándar ISO 11898-2
Señal CAN
Estado del Bus
Dominante
Recesivo
Niveles Nominales de Voltaje [V]
CAN_H
CAN_L
Vdiff
3,5
1,5
2
2,5
2,5
0
Figura 3.16.- Niveles nominales de señal en el bus CAN recomendados por el estándar
ISO 11898-2
47
Según el estándar ISO 11898-2, el acceso al medio se realiza mediante
un transceptor de alta velocidad, el cual además realiza otras tareas como
obtener las medidas de protección requeridas en vehículos de motor. Un
transceptor debe cumplir con las siguientes características:
•
Compatible con la norma ISO 11898-2.
•
Soportar velocidades de transferencia de datos de hasta 1Mbps.
•
Proteger contra sobrecarga térmica.
•
Proteger contra corto circuito, tanto de tierra como de fuente de voltaje.
•
Consumir poca corriente en modo de espera.
•
Protección contra perturbaciones de la línea del bus.
Para que un nodo cumpla con el estándar ISO 11898-2 debe contar con
un MCU y un controlador CAN, los cuales se conectan al bus mediante un
transceptor a través de dos líneas, una línea de salida de datos (TX ) y otra línea
de entrada de datos (R X ) (Figura 3.9).
Las líneas TX y R X manejan niveles TTL (Transistor-Transistor Logic) y
son unidireccionales; las líneas CAN_H y CAN_L se utilizan para enlazar el
transceptor al bus. La Figura 3.17 muestra los niveles nominales de las señales
CAN que se presentan en un transceptor CAN de alta velocidad.
48
Figura 3.17.- Niveles nominales de las señales presentes en un transceptor CAN
3.3.4.2.- ESTÁNDAR ISO 11898-3
El estándar ISO 11898-3 define una capa física CAN de baja velocidad
tolerante a fallos, destinada a aplicaciones con escasos requerimientos en
cuanto a velocidad de transferencia y longitud de bus. Fue desarrollado por las
firmas Philips y Bosch con la finalidad de reemplazar al estándar ISO 11519.
Este estándar está dirigido principalmente a la realización de redes de
unidades electrónicas que aumentan la comodidad en un automóvil.
Si se considera una red eléctricamente corta, no se considera el
problema de reflexión de la señal y puede utilizarse una línea de bus abierta. Lo
anterior significa que pueden utilizarse controladores de baja potencia, y con
ello realizarse redes de bajo consumo. Otra característica es la topología de
red, la cual no se restringe a una estructura lineal con longitudes de extensión
cortas para la conexión entre los nodos y el bus. Asimismo existe la posibilidad
de transmitir datos asimétricamente sobre un sólo hilo del bus en caso de
ocurrir una falla eléctrica en sus líneas. Los parámetros más importantes de
este estándar son los siguientes:
49
•
Velocidades de transferencia de datos de hasta 125Kbps.
•
Redes de hasta 32 nodos.
•
Transmisión de señal simétrica mediante par trenzado.
•
Prueba de corto circuito en un rango de voltaje de -6V a +16V.
•
Corriente de salida del transmisor mayor a 1mA.
•
Rango de voltaje en modo común entre -2V a +7V.
•
Fuente de alimentación de 5V.
En la Tabla 3.8 y Figura 3.18 se muestran los niveles de las señales en
el bus CAN en especificados en el estándar ISO 11898-3. Los niveles de la
señal en el bus son diferentes para el nivel recesivo y para el nivel dominante, y
de esta forma dichos niveles del bus pueden detectarse al compararse con un
voltaje de referencia de 2,5V.
Tabla 3.8.- Niveles de voltaje en el bus CAN de acuerdo al estándar ISO 11898-3
Señal CAN
Estado del Bus
Dominante
Recesivo
CAN_H
5 – 3,6
0 – 0,3
Niveles de Voltaje [V]
CAN_L
Vdiff
1,4 – 0
2,2 – 5
4,7 – 5
-4,4 – -5
Figura 3.18.- Niveles de señal en el bus CAN recomendados por el estándar ISO 11898-3
El estándar ISO 11898-3 considera la detección y el manejo de las
siguientes condiciones de error en el bus:
50
•
Interrupción de la señal CAN_H.
•
Interrupción de la señal CAN_L.
•
Corto circuito de la señal CAN_H con Vcc.
•
Corto circuito de la señal CAN_L con GND.
•
Corto circuito de la señal CAN_H con GND.
•
Corto circuito de la señal CAN_L con Vcc.
•
Corto circuito de la señal CAN_H con la señal CAN_L.
Las distintas condiciones de error pueden detectarse al comparar
ambas líneas del bus CAN, y detectando el nivel dominante a través de un
tiempo fuera al deshabilitar la línea defectuosa y conmutar a operación
asimétrica; la comunicación puede continuar sobre la línea sobrante, sin
embargo, se pierde la inmunidad a la interferencia eléctrica. Una solución de
interfaz de bus que cumpla con el estándar ISO 11898-3 puede realizarse
mediante un transceptor modelo TJA 1054 de la firma Philips (Figura 3.19).
Figura 3.19.- Interfaz para bus CAN utilizando un transceptor TJA 1054 de la firma Philips
Dicho transceptor da soporte total al manejo de errores, incluyendo la
detección de errores en el bus y la conmutación automática al modo de
51
transmisión asimétrico. Cuando la condición de error deja de existir,
automáticamente se regresa al modo de transmisión simétrico. Además el
transceptor contiene un filtro de interferencia integrado en el módulo de
recepción y un modo de ahorro de corriente, el cual habilita la conexión de
componentes adicionales que pueden agregarse cuando el bus está activo.
3.3.4.3.- ESTÁNDAR SAE J2411
El estándar de un sólo hilo SAE J2411 se aplica en redes CAN con
requisitos de velocidad de transferencia y longitud de bus menores a los
establecidos por el estándar ISO 11898-3. Los parámetros básicos de este
estándar son los siguientes:
•
Bus de comunicación de un sólo hilo.
•
Velocidad de transferencia nominal de 331/3Kbps en modo normal.
•
Alta velocidad de transferencia de datos para propósitos de diagnóstico
de 831/3Kbps.
•
Hasta 32 nodos por red.
•
Modo de temporizador selectivo.
La principal aplicación del estándar SAE J2411 está enfocada a la
realización de redes de ECUs que aumentan la comodidad en un automóvil. El
medio físico se define como un cable de un sólo hilo no blindado. Debido a la
baja velocidad de transferencia, la topología del bus no está limitada a una
estructura lineal con longitudes cortas de la línea de conexión del nodo con el
bus. La Figura 3.20 muestra los niveles nominales de la señal CAN en el bus,
en modo normal.
52
Figura 3.20.- Niveles nominales de la señal CAN en el bus de acuerdo al estándar SAE J2411
El estándar SAE J2411 puede realizarse utilizando un transceptor
modelo TLE 6255 de la firma Infineon Semiconductors.
3.3.4.4.- ESTÁNDAR ISO 11992
El estándar ISO 11992 es una alternativa de red CAN para baja
velocidad basado en conexiones punto a punto, utilizada en el control de
camiones de carga y vehículos remolcadores o grúas. Los parámetros básicos
de dicho estándar son:
•
Conexiones punto a punto para vehículos con un remolque.
•
Conexión lineal para vehículos con dos remolques.
•
Velocidad de transferencia nominal de 125Kbps.
•
Longitud de línea máxima de 40m.
•
Transmisión simétrica sobre un par de hilos con línea de tierra y fuente
de alimentación.
•
Manejo de errores de bus.
•
Voltaje de alimentación Vcc = 12V o 24V.
El medio físico está definido como un cable par trenzado y no se
especifican resistores de terminación en el bus debido a la corta longitud del
53
mismo y su baja velocidad de transferencia. El estándar ISO 11992 especifica
la capacitancia máxima por unidad de longitud, la impedancia de la línea, las
capacitancias de contacto máximas e impedancias de conexión para los
conectores, las condiciones extremas del ambiente para el cable, tipo de
conectores y los ciclos de conexión para intercambio de los remolques.
La Figura 3.21 muestra los niveles nominales de las señales CAN del
bus de acuerdo al estándar ISO 11992. Los niveles nominales en el bus
dependen de suministro de voltaje Vcc de los vehículos. Los niveles nominales
de las señales para 12V y 24V se muestran en la Tabla 3.9.
Tabla 3.9.- Niveles de las señales CAN en el bus recomendados por el estándar ISO 11992
Nivel
Dominante
Recesivo
Señal
CAN_H
CAN_L
CAN_H
CAN_L
Voltaje del vehículo [V]
12V
24V
6,0 a 10,6
10,6 a 21,3
3,0 a 5,3
5,3 a 10,6
3,0 a 5,3
5,3 a 10,6
6,0 a 10,6
10,6 a 21,3
Figura 3.21.- Niveles nominales de las señales CAN en el bus de acuerdo con el estándar
ISO 11992
El estándar ISO 11992 también especifica el manejo de errores del bus
al activar el cambio a transmisión de señal asimétrica cuando se detecta un
error de bus físico. La comunicación se puede mantener por operación
54
asimétrica en caso de ruptura, corto circuito con Vcc, con tierra o entre las
líneas. Durante la emisión de línea sencilla se verifica el modo de transmisión
de señal, para asegurar que en funcionamiento normal, o después de corregir
un error de bus, el modo de transmisión sea simétrico.
3.3.4.5.- RECOMENDACIÓN CIA DS-102
Respecto a la capa física, la recomendación CiA DS-102 brinda soporte
a la realización de redes CANopen para la comunicación entre diversos tipos
de módulos electrónicos en aplicaciones industriales. Dicha recomendación
está basada en los estándares ISO 11898-1 y 11898-2, y define lo siguiente:
Velocidades de transferencia estandarizadas desde 10Kbps a 1Mbps, con
recomendaciones para la configuración de los parámetros de tiempos de bit
(Tabla 3.10 y
•
Tabla 3.11).
•
Recomendaciones para la línea de bus.
•
Características mecánicas y eléctricas de los conectores, así como la
asignación de sus terminales (Tabla 3.7 y Figura 3.16).
Tabla 3.10.- Velocidades de transferencia y parámetros de tiempos de bit recomendados en
DS-102
Velocidad de Longitud de Tiempo de
Número de
Transferencia Línea Máxima Bit Nominal
tq
[Kbps]
[m]
[μs]
1000
25
1
8
800
50
1,25
10
500
100
2
16
250
250
4
16
125
500
8
16
50
1000
20
16
20
2500
50
16
10
5000
100
16
Duración
de tq [ns]
125
125
125
250
500
1250
3125
6250
Punto de
Muestreo
[tq]
6
8
14
14
14
14
14
14
55
Tabla 3.11.- Parámetros de tiempos de bit recomendados por DS-102
Parámetro
Frecuencia del oscilador
Método de muestreo
Modo de sincronización
Duración de SJW*
Duración de Phase_Seg2
Recomendación DS-102
16Mhz +/- 0,1%
Muestreo sencillo
Sólo flancos recesivos a dominantes
1 tq
2 tq
*Parámetro equivalente a RJW
De acuerdo a la recomendación DS-102, se implementa un par trenzado
blindado o no blindado terminado en ambos extremos con una impedancia
equivalente a la de la línea y tierra común, asimismo especifica el uso de
repetidores para incrementar el número de nodos en el bus. Es posible el
aislamiento galvánico de transceptores, sin convertidores DC/DC propios,
mediante una línea de fuente de alimentación común.
Existen dos conceptos básicos que indican cómo implementar la línea
de bus, línea de bus interconectada y línea de bus dividida, los cuales se
describen a continuación.
3.3.4.5.1.- LÍNEA DE BUS INTERCONECTADA
La línea de bus consiste de un número de secciones interconectadas
mediante dos opciones (Tabla 3.12):
•
Opción A: Se utiliza un conector tipo T 4 para interconectar las secciones
de línea de bus y el bus con el nodo.
•
Opción B: Los módulos electrónicos están equipados con dos
conectores para el bus, interconectando las secciones de línea de bus.
4
Un conector tipo T es un dispositivo pasivo que enlaza tres diferentes conectores
56
Tabla 3.12.- Línea de bus interconectada de acuerdo a la recomendación DS-102
Opción
A
Nodo
1 conector macho
Conector tipo T
Sección de línea de bus
1 conector macho y
2 conectores hembras
1 conector macho y 1
conector hembra
B
1 conector macho y
1 conector hembra
No requerido
1 conector macho y 1
conector hembra
3.3.4.5.2.- LÍNEA DE BUS NO DIVIDIDA
La línea de bus consiste de un sólo cable sin dispositivos
interconectados:
•
Nodo: Un conector macho.
•
Línea de bus: Un conector hembra por nodo, además un conector
hembra y un conector macho para terminación.
3.3.4.6.- RECOMENDACIONES DE CAPA FÍSICA POR LOS ESTÁNDARES HLP
La meta más importante que se intenta al estandarizar los protocolos de
capas altas (HLP, High Layer Protocol) y los perfiles de aplicación, tales como
CANopen, DeviceNet y SDS, es la interoperabilidad e intercambiabilidad de
dispositivos, lo cual asegura la compatibilidad total de las propiedades físicas
de los dispositivos y de la red. Por lo tanto, además de las características
básicas de la capa física definida en el estándar ISO 11898, se define:
topología de red, tipo de línea, tecnología de conexión, fuente de alimentación,
velocidad de transferencia de datos y transceptor.
3.3.4.6.1.- CANOPEN
CANopen permite la implementación de redes, hasta con 127 nodos,
cumpliendo con el estándar ISO 11898-2 y la recomendación DS-102. El
aislamiento galvánico de nodos es opcional y sólo se recomienda para buses
con longitudes mayores a 200m.
57
Todos los dispositivos CANopen deben dar soporte a la velocidad de
transferencia y a las longitudes de línea recomendadas en DS-102 (Tabla 3.10).
CANopen permite utilizar una fuente de alimentación común y recomienda el
uso de los siguientes conectores 5:
•
Conector DB9 (Tabla 3.2 y Figura 3.11).
•
Conector tipo mini (Tabla 3.3 y Figura 3.12).
•
Conector tipo micro (Tabla 3.4 y Figura 3.13).
•
Conector tipo nano (Tabla 3.5 y Figura 3.14).
•
Conector tipo abierto (Tabla 3.6 y Figura 3.15).
3.3.4.6.2.- DEVICENET
De la misma forma que CANopen, la especificación de capa física que
implementa DeviceNet es una extensión del estándar ISO 11898—2. DeviceNet
permite redes de hasta 64 nodos con topología de bus y sus líneas de bus
están terminadas en ambos extremos con una impedancia R t =121Ω +/- 1%.
DeviceNet define dos pares de cables, uno para la transmisión de la
señal y el otro para la fuente de alimentación. Se permiten tres tipos de cable
variantes en diámetro (grueso, delgado y plano), los cables grueso y plano se
utilizan en redes de longitud mayor a 100m y el cable delgado se utiliza en la
conexión del nodo al bus y en redes de longitudes menores a 100m
(Tabla 3.13). Es obligatorio el empleo del código de colores para hilos
individuales.
CANopen también define una serie de conectores adicionales los cuales son, en su mayoría,
de propósito general y de usos especiales; estos conectores se encuentran en el documento:
‘CANopen CiA Draft Recommendation 303’
5
58
Tabla 3.13.- Extensión de red y longitud de línea de extensión para DeviceNet
Velocidad de
transferencia
[Kbps]
500
250
125
Longitud de la línea principal [m]
Cable
grueso
100
250
500
Cable
delgado
100
100
100
Longitud máxima de la
línea de extensión [m]
Cable plano Acumulada
100
200
420
Individual
39
78
156
6
6
6
De acuerdo a la especificación de DeviceNet, el protocolo brinda
soporte a tres diferentes velocidades de transferencia de datos: 125, 250 y
500Kbps, además permite las conexiones del bus y los dispositivos
electrónicos pueden alimentarse de la fuente de voltaje común de 24V, se
recomienda el uso de cuatro tipos de conectores 6:
•
Conector tipo mini (Tabla 3.3 y Figura 3.12).
•
Conector tipo micro (Tabla 3.4 y Figura 3.13).
•
Conector tipo nano (Tabla 3.5 y Figura 3.14).
•
Conector tipo abierto (Tabla 3.6 y Figura 3.15).
La especificación de DeviceNet presenta ciertas recomendaciones en
cuanto a la protección de las conexiones. Opcionalmente la conexión al bus
puede aislarse galvánicamente y la corriente necesaria para alimentar a los
transceptores puede tomarse de la fuente de alimentación común.
3.3.4.6.3.- SDS
SDS describe una práctica recomendada para “autobauding”, en donde
la tasa de bit está establecido por el maestro, con la dirección más baja
posible, y todos los demás módulos comprobarán el tiempo de bits en el bus
para establecer su tasa de bits. Se recomiendan cuatro tasas de bits: 125, 250,
500 y 1000Kbps (Tabla 3.14).
DeviceNet adicionalmente recomienda el uso del conector tipo micro de 4 terminales
(conector M12 de 4-pines) para tomas auxiliares de energía
6
59
Tabla 3.14.- Velocidades de transferencia y longitudes de línea recomendadas para SDS
Velocidad de
transferencia [Kbps]
1000
500
250
125
Longitud de la línea
principal [m]
22,8
91,4
182,8
457,2
Longitud máxima de la
línea de extensión [m]
0,3
0,9
1,8
3,6
Dentro de las características de relacionadas con la capa física SDS se
encuentra que sólo soporta tramas CAN estándar y define el uso de tres tipos
de conectores 7:
•
Conector DB9 (Tabla 3.2 y Figura 3.11).
•
Conector tipo mini (Tabla 3.3 y Figura 3.12).
•
Conector tipo abierto (Tabla 3.6 y Figura 3.15).
3.4.- CAPA DE ENLACE DE DATOS (DLL)
En este apartado se describen los fundamentos y principios básicos de
la capa de enlace de datos (DLL, Data Link Layer), la cual se divide en dos
subcapas (Figura 3.22), las cuales se describen a continuación.
Figura 3.22.- Arquitectura de la capa de enlace de datos del protocolo CAN
SDS, a diferencia de DeviceNet, también recomienda el uso tipo micro de 4 terminales
(conector M12 de 4-pines) pero para extensiones de la línea del bus
7
60
3.4.1.- CONTROL DE ENLACE LÓGICO (LLC)
La subcapa de control de enlace lógico (LLC, Logic Link Control)
describe la parte alta de la capa DLL y define las tareas independientes del
método de acceso al medio, asimismo proporciona dos tipos de servicios de
transmisión sin conexión al usuario LLC:
•
Servicio de transmisión de datos sin reconocimiento: Proporciona al
usuario LLC los medios para intercambiar unidades de datos de servicio
de enlace (LSDU, Link Service Data Units) sin establecer una conexión
de enlace de datos. La transmisión de datos puede ser punto a punto,
multidifusión o difusión.
•
Servicio de petición de datos remota sin reconocimiento: Proporciona al
usuario LLC los medios para solicitar que un nodo remoto transmita sus
LDSUs sin establecer una conexión de enlace de datos.
De acuerdo con los tipos de servicios, se definen dos formatos de
tramas, de datos LLC y remota LLC. Ambos formatos definen identificadores
de 11 bits estándar (CAN 2.0A) y de 29 bits extendida (CAN 2.0B). La subcapa
LLC realiza las siguientes funciones:
•
Filtrar mensajes: El identificador de una trama no indica la dirección
destino pero define el contenido del mensaje, y mediante esta función
todo receptor activo en la red determina si el mensaje es relevante o no
para sus propósitos.
•
Notificar sobrecarga: Si las condiciones internas de un receptor
requieren un retraso en la transmisión de la siguiente trama de datos o
remota, la subcapa LLC transmite una trama de sobrecarga. Solamente
se pueden generar dos tramas de sobrecarga como máximo.
•
Gestión de recuperación: La subcapa LLC proporciona la capacidad de
61
retransmisión automática de tramas cuando una trama pierde el arbitraje
o presenta errores durante su transmisión, dicho servicio se confirma al
usuario hasta que la transmisión se completa con éxito.
3.4.2.- CONTROL DE ACCESO AL MEDIO (MAC)
El control de acceso al medio (MAC, Medium Access Control) de una red
CAN brinda soporte para procesamiento en tiempo real a todos los sistemas
que
la
integran.
El
intercambio
de
mensajes
que
demanda
dicho
procesamiento requiere de un sistema de transmisión a frecuencias altas y
retrasos mínimos. En redes multimaestro, la técnica de acceso al medio es muy
importante ya que todo nodo activo tiene los derechos para controlar la red y
acaparar sus recursos.
3.4.2.1.- ARBITRAJE DEL BUS
Para acceder al medio, los nodos CAN utilizan el mecanismo de arbitraje
que se describe a continuación:
•
Cuando un nodo necesita enviar información a través de una red CAN, la
capa de aplicación realiza una petición, de forma asíncrona, para
transmitir una trama. Puede ocurrir que varios nodos inicien el mismo
procedimiento simultáneamente generando una colisión en el bus, una
eventual colisión se resuelve asignando prioridades de cada mensaje
mediante un identificador; dicha asignación, que no puede modificarse
dinámicamente, se realiza durante el diseño del sistema en forma de
números binarios y se hace tomando en consideración que el
identificador con el menor número binario es el que tiene mayor
prioridad.
•
El método de acceso al medio utilizado es el CSMA/NBA, de acuerdo
62
con este método, los nodos en la red que necesiten transmitir
información deben esperar a que el bus esté libre (detección de
portadora); cuando se cumple esta condición, dichos nodos transmiten
un bit de inicio (acceso múltiple) y a continuación van comparando el
valor transmitido con el valor recibido bit a bit; mientras los valores sean
idénticos, los nodos continúan con la transmisión; si algún nodo detecta
una diferencia, deja de transmitir el nodo que tenga una menor prioridad
(arbitraje no destructivo bit a bit). Es decir que a pesar de que varios
nodos inicien la transmisión de sus tramas al mismo tiempo, el ganador
del arbitraje, el mensaje con la mayor prioridad, continúa con la
transmisión de su trama sin necesidad de retransmitirla desde el
principio.
•
Una vez finalizada la transmisión del mensaje más prioritario los demás
nodos volverán a intentar enviar el mensaje lo antes posible.
Para comenzar a explicar lo que sucede eléctricamente en el proceso de
arbitraje, se ha de tener en cuenta que la especificación CAN de Bosch no
establece cómo se ha de traducir cada nivel de bit (dominante o recesivo) a
variable física. Cuando se utiliza par trenzado según la norma ISO 11898 el
nivel dominante es una tensión diferencial positiva en el bus, mientras que el
nivel recesivo es ausencia de tensión o cierto valor negativo (los transceptores
no generan corriente sobre las resistencias de carga del bus). Definiendo el bit
dominante y bit recesivo en el bus de la siguiente manera:
•
El bit dominante representa un ‘0’ lógico.
•
El bit recesivo representa un ‘1’ lógico.
Se tiene que el arbitraje del bus CAN utiliza la función Wired-AND, la
cual tiene como consecuencia directa que: sólo en el caso que todos los nodos
63
de la red transmitan bits recesivos (1 lógico) el bus deberá pasar al estado
recesivo; mientras que si algún nodo transmite un bit dominante (0 lógico) el
bus pasa automáticamente a estado dominante. Es decir, que un bit recesivo
representa un estado de bus que puede ser sobrescrito por un bit dominante.
Considerando que más adelante se verá el significado de cada campo
detalladamente, podemos empezar a describir paso a paso el proceso de
arbitraje según la Tabla 3.15 y Figura 3.23. En el instante 1, se puede ver cómo
los tres nodos emiten un inicio de trama (SOF), que supone un aviso de que se
va a empezar a transmitir, a partir de aquí, los tres nodos empiezan a emitir sus
mensajes, es importante saber que durante la transferencia cada nodo va
comparando el nivel del bus con el nivel del bit que emitió, y mientras los bits
del campo de identificación del mensaje coincidan en los tres nodos, todos
siguen emitiendo; siguiendo la línea temporal, en el instante 2, el nodo 2
advierte que el nivel del bus es dominante, mientras que él había emitido un bit
recesivo, así pues, sabe que existe otro nodo que está transmitiendo un
mensaje más prioritario que él e inmediatamente deja de transmitir el mensaje
para conmutar a modo de recepción; finalmente, en el instante 3, el nodo 1
emite un bit recesivo y por lo tanto pierde el arbitraje, mientras que el nodo 3
es el que ha tomado el control sobre el bus, y por ende, el que transmitirá el
mensaje.
Tabla 3.15.- Representación bit a bit del arbitraje en el bus CAN
Nodo 1
Nodo 2
Nodo 3
Nivel del bus
S
O
F
0
0
0
0
Identificador
10
9
8
7
6
5
4
3
2
1
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
1
1
1
1
0
1
0
0
1
1
1
1
1
1
1
0
0
0
0
1
1
R
T
R
0
0
64
Figura 3.23.- Arbitraje del bus CAN
Otro aspecto a considerar, es que podría darse el caso de que se inicia
simultáneamente la transmisión, con un mismo identificador, de una trama de
datos (enviada por el nodo) y una trama remota (solicitada por un receptor) en
donde el proceso de arbitraje no puede resolverse únicamente con el
identificador de la trama, sino que tiene que utilizarse el bit de petición de
transmisión remota (RTR) el cual se transmite como recesivo en caso de
tratarse de una trama remota y como dominante en caso de tratarse de una
trama de datos; por ende, las tramas de datos tienen prioridad por sobre las
tramas remotas.
Este sistema de arbitraje tiene dos consecuencias directas: en primer
lugar, como ya se ha mencionado, limita la longitud máxima del bus en función
de la velocidad y del número de nodos presentes en la red, pues el tiempo de
transmisión de un bit debe ser lo suficientemente largo como para permitir su
decodificación por todas las estaciones de la red, ya que a mayor velocidad de
la red, menor longitud de bus (Tabla 3.1 y Figura 3.8); por otra parte, obliga a
65
que todos los mensajes posean un identificador único, que es el que establece
su prioridad.
3.4.2.2.- TRANSMISIÓN DE MENSAJES
CAN establece dos formatos de tramas que difieren en la longitud del
campo del identificador, las tramas estándares con un identificador de 11 bits
definidas en la especificación CAN 2.0A, y las tramas extendidas con un
identificador de 29 bits definidas en la especificación CAN 2.0B. Tanto las
tramas de datos como las remotas se separan de tramas precedentes
mediante espacios entre tramas. Para la transmisión y control de mensajes
CAN, se definen cuatro tipos de tramas:
•
Trama de datos: Lleva los datos de un transmisor a los receptores.
•
Trama remota: Es transmitida por un nodo para solicitar la transmisión
de la trama de datos con el mismo identificador.
•
Trama de error: Se transmite a través de cualquier unidad al detectar un
error del bus.
•
Trama de sobrecarga: Se utiliza para que un receptor solicite un retraso
en la transmisión de la trama siguiente.
3.4.2.2.1.- TRAMA DE DATOS
La trama de datos transporta información desde los transmisores hacia
los receptores, siendo el tipo de trama más utilizada. Una trama de datos se
compone de siete campos: inicio de trama, campo de arbitraje, campo de
control, campo de datos, campo CRC, campo de aceptación y fin de trama
(Figura 3.24). La longitud del campo de datos puede ser cero.
66
Figura 3.24.- Formato de una trama de datos
•
Inicio de trama: Este campo indica el inicio de una trama de datos o una
trama remota y sólo se puede enviar cuando el bus está libre. El bit de
inicio de trama (SOF, Start of Frame) consiste en un bit dominante que
sincroniza a todos los nodos activos en la red y es el mismo para la
trama estándar y extendida.
•
Campo de arbitraje: Este campo determina la prioridad de un mensaje
cuando dos o más nodos se encuentran en contienda para el acceso al
bus de comunicaciones y difiere según el formato de trama
(Figura 3.25).
Figura 3.25.- Campo de arbitraje, trama estándar y extendida

En el formato estándar está constituido por un identificador de 11
bits y el bit de petición de transmisión remota (RTR, Remote
Transmission Request). Si denotamos los bits del identificador como
ID-10 … ID-0, se tiene que el bit menos significativo del identificador
se transmite al último (ID-0) y que los siete bits más significativos no
67
pueden ser todos recesivos (ID-10 … ID-4).

En el formato extendido está formado por un identificador de 29 bits,
el bit de petición remota substituta (SRR, Substitute Remote
Request), el bit de extensión del identificador (IDE, Identifier
Extension) y el bit RTR. Si denotamos los bits del identificador como
ID-28 … ID-0, se tiene que el identificador se divide en dos
secciones: la primera sección consta de 11 bits (ID-28 … ID-18) y se
denomina identificador base, el cual es equivalente al identificador
del formato estándar; y la segunda sección consta de 18 bits
(ID-17 … ID-0) y es conocida como identificador extendido.
El bit RTR debe ser dominante para ambos formatos de trama de datos;
el bit SRR, que sustituye al bit RTR en el formato extendido ya que
ocupa la misma posición, debe transmitirse como recesivo aunque los
receptores deben ser capaces de aceptar bits tanto dominantes como
recesivos; y finalmente el bit IDE, el cual pertenece al campo de arbitraje
en el caso de un formato de trama extendida y se encuentra en el campo
de control para el caso de un formato de trama estándar, debe
transmitirse como dominante para el formato estándar y recesivo para el
extendido, por lo tanto, las posibles colisiones entre ambos tipos de
formatos de trama que tengan el mismo valor en el campo de
identificación base se resuelven de manera que el formato de trama
estándar predomina sobre el formato de trama extendida.
•
Campo de control: Este campo está compuesto de seis bits: IDE/r1, r0 y
cuatro bits que forman el código de longitud de datos (DLC, Data Length
Code). El formato del campo de control es diferente para el formato
estándar y extendido (Figura 3.26).
68
Figura 3.26.- Campo de control

En el formato estándar el primer bit del campo de control,
correspondiente al bit IDE, debe ser dominante.

En el formato extendido el primer bit del campo de control,
correspondiente al bit r1, debe transmitirse como dominante aunque
los receptores deben ser capaces de aceptar bits tanto dominantes
como recesivos.
El bit r0, reservado para futuras aplicaciones, debe transmitirse como
dominante para ambos formatos de trama de datos aunque los
receptores deben ser capaces de aceptar bits tanto dominantes como
recesivos; y finalmente los bits DLC, que indican el número de octetos
(de cero a ocho) que contendrá el campo de datos, toma las primeras
nueve combinaciones de las dieciséis posibles, por ende, las
combinaciones restantes no se consideran permitidas.
•
Campo de datos: Este campo contiene el mensaje a transmitir dentro de
una trama CAN, puede tener una longitud de cero a ocho octetos y se
envían primero los bits más significativos. Si denotamos los bits que
forman el código de longitud de datos como DLC-3 … DLC-0, se tiene
que los valores admisibles para el campo de datos están contenidos en
la Tabla 3.16. Los DLC’s en el rango de cero a siete indican la misma
69
longitud en bytes del campo de datos, mientras que todas las otras
combinaciones posibles indican que el campo de datos es de ocho
bytes.
Tabla 3.16.- Codificación de los bits DLC según la longitud de los datos
Código de longitud de datos
DLC-3 DLC-2 DLC-1 DLC-0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
1
0o1
0o1
0o1
•
Número de
bytes de datos
0
1
2
3
4
5
6
7
8
Campo CRC: Este campo está constituido por una secuencia CRC de
15 bits seguido por un delimitador CRC de 1 bit, que se transmite en
estado recesivo (Figura 3.27). La secuencia de verificación de 15 bits
usada en el protocolo CAN se basa en el código BHC 8 cuyo generador
polinomial, dado por X15+X14+X10+X8+X7+X4+X3+1, se aplica una trama
que no tenga implementado el proceso de inserción de bits (destuffed
bits) e incluye los siguientes coeficientes para su cálculo: inicio de trama,
campo de arbitraje, campo de control y campo de datos (si existe). La
finalidad de este campo consiste en que los receptores sean capaces de
verificar si la secuencia de bits recibida fue alterada.
Figura 3.27.- Campo CRC
•
8
Campo de aceptación: Este campo está constituido por una ranura de
Un código cíclico bien especializado para las longitudes de trama menores a 127 bits
70
aceptación y delimitador de aceptación (Figura 3.28). Los bits de
aceptación (ACK, Acknowledge) en los nodos transmisores se emiten
ambos en estado recesivo; mientras que en los nodos receptores se
sobrescribe la ranura de aceptación con un bit en estado dominante
para confirmar que el mensaje se ha recibido sin errores, si no existe
dicha confirmación se asume que el mensaje llegó con errores.
Figura 3.28.- Campo de aceptación
•
Fin de trama: Este campo consiste de una secuencia de siete bits en
estado recesivo, esta bandera especial es utilizada para delimitar el fin
de las tramas de datos y remotas. Cuando los bits de fin de trama (EOF,
End of Frame) están activos se realiza una violación al procedimiento de
inserción de bit, por ello dicho procedimiento no se aplica a este campo.
3.4.2.2.2.- TRAMA REMOTA
La trama remota es utilizada por un nodo (receptor) para solicitar la
transmisión de una trama de datos a otro nodo (transmisor) que posea el
mismo identificador. Una trama remota se compone de seis campos: inicio de
trama, campo de arbitraje, campo de control, campo CRC, campo de
aceptación y fin de trama (Figura 3.29). Como se puede apreciar los campos
de una trama remota son los mismos que los de una trama de datos, con las
siguientes excepciones: el bit RTR es recesivo; y no contiene el campo de
datos, independientemente si el valor de los bits DLC esté dentro del rango
admisible (cero a ocho bytes). En las tramas remotas el valor de los bits DLC
cumple con la finalidad de contener la longitud del campo de datos que se
71
espera recibir y, por ende, debe coincidir con el valor que el transmisor enviará
posteriormente.
Figura 3.29.- Formato de una trama remota
3.4.2.2.3.- TRAMA DE ERROR
La trama de error señaliza la detección de cualquier error durante la
transmisión o recepción de una trama de datos o remota, la cual viola el
procedimiento de inserción de bit y ocasiona que el transmisor reenvíe la
trama. Asimismo la detección de un error, durante la transmisión o recepción
de una trama de sobrecarga o error, genera la transmisión de una nueva trama
de error. La trama de error está formada por dos campos (Figura 3.30):
Figura 3.30.- Formato de una trama de error
•
Bandera de error: Existen dos formas de representar una bandera de
error:

Bandera de error activo: Consiste en seis bits dominantes
72
consecutivos.

Bandera de error pasivo: Está formada por seis bits recesivos
consecutivos, a menos que sean sobrescritos por bits dominantes de
otros nodos.
•
Delimitador de error: Una trama de error termina con una secuencia de
ocho bits recesivos. Posterior a la transmisión de una bandera de error,
el nodo transmite bits recesivos y verifica el nivel del bus hasta que
reconozca un bit recesivo, entonces comienza la transmisión de otros
siete bits recesivos. Con este mecanismo, el nodo puede determinar si
fue el primero en transmitir una bandera de error y con ello detectar una
condición de error.
3.4.2.2.4.- TRAMA DE SOBRECARGA
La trama de sobrecarga se utiliza para que un receptor solicite un
retraso en la transmisión de la trama siguiente, ya sea de datos o remota, o
para señalizar condiciones de error relacionadas con el campo de intermisión.
El protocolo CAN permite la generación de dos tramas de sobrecarga como
máximo para retrasar la transmisión de la siguiente trama. Las tramas de
sobrecarga se transmiten después de detectar las siguientes condiciones de
error:
•
Detección de un bit dominante durante los primeros dos bits del campo
de intermisión. La detección de un bit dominante en el tercer bit del
campo de intermisión se interpreta como un SOF.
•
Cuando un receptor detecta un bit dominante en el último bit del campo
EOF; o cuando un nodo, receptor o transmisor, detecta un bit dominante
en el último bit del delimitador de una trama de error o de sobrecarga.
73
Una trama de sobrecarga se considera una forma especial de trama de
error y consta de los siguientes campos (Figura 3.31):
Figura 3.31.- Formato de una trama de sobrecarga
•
Bandera de sobrecarga: Se constituye por seis bits dominantes. La
forma completa corresponde a la bandera de error activa.
•
Delimitador de sobrecarga: Está formado por ocho bits recesivos.
3.4.2.2.5.- ESPACIO ENTRE TRAMAS
Las tramas de datos y remotas están separadas de tramas precedentes
por un espacio entre tramas, a diferencia de las tramas de error y de
sobrecarga que se transmiten en forma sucesiva, es decir sin un espacio entre
tramas. El espacio entre tramas está formado por tres campos:
•
Intermisión: Consiste en tres bits recesivos. Durante su transmisión la
única acción que puede realizarse es señalar una condición de
sobrecarga, y no se permite que ningún nodo inicie la transmisión de
una trama de datos o remota.
•
Bus libre: Este periodo es de longitud arbitraria y tiene un nivel recesivo
hasta que algún nodo inicie la transmisión de una nueva trama.
•
Suspender transmisión: Adicionalmente, el espacio entre tramas
contiene un tiempo de inhibición de transmisión de ocho bits para nodos
que se encuentren en estado de error pasivo.
74
3.4.2.3.- CODIFICACIÓN DE TRAMAS
En una trama CAN, de datos o remota, la codificación NRZ junto con el
procedimiento de inserción de bit se aplican al: inicio de trama, campo de
arbitraje, campo de control, campo de datos 9, secuencia CRC. Los segmentos
restantes: delimitador CRC, campo de aceptación y fin de trama, tienen un
formato fijo y son transmitidos sin emplear el procedimiento de inserción de bit,
de igual forma, las tramas de error y de sobrecarga tienen un formato fijo y no
se codifican por dicho procedimiento.
3.4.2.4.- VALIDACIÓN DE TRAMAS
El instante de tiempo en el que se valida una trama difiere según:
•
Transmisor: La trama es válida si no existen errores hasta el final del
campo EOF. Si existe un error, en la trama se activa el proceso de
recuperación.
•
Receptor: La trama es válida si no existen errores hasta el siguiente bit
después del campo EOF.
3.4.2.5.- DETECCIÓN Y MANEJO DE ERRORES
Un controlador CAN cuenta con la capacidad de detectar y manejar los
errores que surjan en una red. Todo error detectado por un nodo, se notifica
inmediatamente al resto de los nodos. Un nodo puede tener una alteración
local permanente, lo que provoca el envío continuo de tramas de error. Para
prevenir dicho comportamiento, el protocolo CAN describe un algoritmo,
basado en la actividad del bus, que obliga a los nodos con errores
permanentes a desconectarse de la red, y que los demás nodos no sean
perturbados por los nodos defectuosos.
9
El campo de datos no se incluye en una trama remota
75
3.4.2.5.1.- MECANISMOS DE DETECCIÓN DE ERRORES
Para cumplir con las demandas relativas a la seguridad en la transmisión
de datos, el protocolo CAN define los siguientes mecanismos para detección
de errores:
•
Monitoreo de bits: Todo nodo verifica que el nivel del bus transmitido
sea el mismo nivel en el bus, y cuando dichos valores difieren se detecta
un error de bit. El monitoreo de bits representa un mecanismo de
seguridad global para la detección de todos los errores efectivos.
•
Verificación del procedimiento de inserción de bit: Hace referencia al
hecho de detectar un error de inserción de bit cuando ocurren seis
niveles consecutivos de bits con el mismo valor en un campo de trama
codificado por el procedimiento de inserción de bit.
•
Verificación de redundancia cíclica de 15 bits: Se presenta un error de
CRC cuando la secuencia CRC recibida no corresponde con la
secuencia CRC calculada.
•
Verificación de trama: Detecta un error cuando un campo de bit de
formato fijo contiene uno o más bits no válidos.
•
Verificación de aceptación: Un transmisor detecta un error de
aceptación cuando la ranura ACK no cambia a estado dominante.
3.4.2.5.2.- MANEJO DE ERRORES
Cuando un nodo detecta algún tipo de error, de bit, de inserción de bit,
de forma o de aceptación, inicia la transmisión de una bandera de error en el
siguiente bit. Cuando se detecta un error de CRC, se inicia la transmisión de
una trama de error después del delimitador ACK, a excepción de que
previamente se haya transmitido otra trama de error. El manejo de errores se
lleva a cabo de acuerdo con el diagrama de flujo de la Figura 3.32.
76
Figura 3.32.- Diagrama de flujo para el manejo de errores
3.4.2.5.3.- CAPACIDAD DE DETECCIÓN DE ERRORES
Los protocolos de comunicaciones de bus seriales emplean diferentes
mecanismos de detección de error, los cuales proporcionan al receptor la
capacidad de detectar si la trama recibida es errónea o no. Por otro lado, la
capacidad de detectar errores de transmisión depende de los mecanismos de
error y del protocolo utilizado.
Para valorar la integridad de los datos en un sistema de transmisión se
deben considerar las interferencias electromagnéticas y la capacidad para
detectar errores de transmisión. En un sistema de transmisión de datos existe
una medida estadística que representa la integridad de datos transferidos
conocida como probabilidad de error residual, la cual especifica la probabilidad
de que existan tramas erróneas sin detectar y está dada por la Ecuación 3.7.
77
Probabilidad de error residual
< (4,7 × 10−11 ) × (velocidad de error de trama)
[3. 7]
La cual define el número de errores de transmisión sin detectar durante
el tiempo de operación de una red CAN, que puede ser estimado por la
velocidad de error de trama, el porcentaje de carga del bus, la velocidad de
transferencia de datos y la longitud de la trama.
La mayoría de errores de transmisión son debido a interferencias
electromagnéticas. La susceptibilidad de error de un sistema de transmisión de
datos se puede caracterizar mediante parámetros estadísticos tales como la
velocidad de error de trama y la probabilidad de error de bit. La velocidad de
error está dada por la relación entre el número de tramas erróneas y el número
total de tramas transmitidas durante un periodo de tiempo, con lo cual se
describe la probabilidad de que exista una trama errónea, por otro lado, la
probabilidad de error de bit especifica la probabilidad de que exista un bit
erróneo en una trama transmitida.
Los errores de transmisión no ocurren en todos los nodos de una red,
sino que aparecen en nodos individuales con diversos patrones de error. El
protocolo CAN tiene la capacidad de señalizar los errores detectados mediante
la transmisión de una bandera de error, sin embargo existe la posibilidad de no
detectar errores locales cuando se cumplen las siguientes condiciones en la
distribución del error de bit:
•
El nodo que transmite funciona adecuadamente, y puede detectar un
error al monitorear el bit y señalizarlo a todo el sistema.
•
Cuando todos los nodos receptores que reciben una trama errónea
detectan un patrón de error no definido (indetectable). Debido a que
78
estos patrones son muy raros, todos los nodos que recibieron la trama
errónea deben mostrar un patrón de error idéntico. Esta condición es
cada vez más improbable en un sistema distribuido con un gran número
de nodos.
La DLL del protocolo de comunicaciones CAN garantiza un alto grado
de detección de errores. Todos los errores se detectan mediante el proceso de
monitoreo de bit realizado por el transmisor de la trama, mediante dicho
proceso el transmisor puede detectar errores ocasionados a nivel global por
interferencia electromagnética, la cual aparece en todos los nodos, y además
tiene la capacidad de detectar errores locales.
Los errores que sólo ocurren localmente, en receptores individuales, se
detectan mediante la verificación de la secuencia CRC de 15 bits, realizada por
el mismo receptor.
3.5.- DESCRIPCIÓN DE LA SUPERVISIÓN
La sustitución del cableado convencional por un sistema de bus serie
presenta el problema de que un nodo defectuoso puede bloquear el
funcionamiento del sistema completo. Como se ha descrito con anterioridad,
cada nodo activo transmite una bandera de error cuando detecta algún tipo de
error (principio de señalización de errores) y puede ocasionar que un nodo
defectuoso pueda acaparar el medio físico, para eliminar este riesgo el
protocolo CAN define un mecanismo autónomo para detectar y desconectar un
nodo defectuoso del bus, dicho mecanismo se conoce como aislamiento de
fallos.
El objetivo del aislamiento de fallos es preservar la disponibilidad del
sistema de transmisión de datos, incluso en el caso de que existan nodos
79
defectuosos, para ello se definen estrategias que incrementan la seguridad en
los siguientes aspectos:
•
Distinguir entre errores temporales y fallas permanentes.
•
Localizar y desconectar nodos defectuosos.
Por ello, cada nodo tiene un contador de errores de transmisión (TEC,
Transmit Error Counter) y un contador de errores de recepción (REC, Receive
Error Counter) para registrar el número de errores respectivamente. Si las
tramas se transmiten y reciben correctamente, dichos contadores decrementan
sus valores, y en caso de ocurrir errores, los contadores se incrementan en
proporciones mayores a los que se decrementan.
Los contadores incrementan o decrementan sus valores dependiendo
de la relación existente entre las tramas enviadas y recibidas correctamente y
aquellas con errores. Los valores en los contadores indican la frecuencia
relativa de perturbaciones previas. El comportamiento de los nodos se modifica
en relación a los errores, dependiendo de los valores del contador
correspondiente un nodo puede estar en uno de los siguientes estados
(Figura 3.33):
•
Error activo: Un nodo toma parte en la comunicación de bus y cuando
detecta un error envía una bandera de error activo; destruye la trama
que transmitía, viola el procedimiento de inserción de bit y previene con
ello a los demás nodos de la presencia de una trama errónea.
•
Error pasivo: Un nodo no puede enviar una bandera de error activo pero
aún toma parte en la comunicación del bus; cuando detecta un error,
sólo puede enviar una bandera de error pasivo, la cual no interfiere en la
comunicación del bus.
•
Desconectado: En este estado, un nodo no tiene ninguna influencia en el
80
bus y por ello no puede transmitir tramas, aceptación ACK, tramas de
error o de sobrecarga.
Figura 3.33.- Diagrama de estados de error de un nodo CAN
3.6.- CAPA DE APLICACIÓN
CAN se utiliza en aplicaciones en las que no está determinada una
estructura de capas entre el nivel de enlace proporcionado por el controlador
de protocolo y la aplicación en el nodo. Actualmente, con la implementación de
sistemas distribuidos basados en CAN han surgido nuevos requerimientos que
no han sido considerados en el estándar ISO 11898-2, siendo los más
importantes:
•
Disponibilidad de servicios de transmisión para bloques de datos
mayores a 8 octetos.
•
Soporte al modelo cliente/servidor.
•
Funciones dedicadas a la gestión de red.
•
Métodos para asignar identificadores de mensaje y configuración de
parámetros específicos del nodo, de forma transparente al usuario.
•
Interoperabilidad e intercambio de dispositivos de diferentes fabricantes.
•
Estandarizar la funcionalidad y definir nuevos perfiles para dispositivos.
81
La necesidad de estandarizar las capas de aplicación ha surgido sobre
todo en el sector de los buses de campo industriales, donde la comunicación
entre dispositivos de diferentes fabricantes es una característica fundamental.
Respecto al protocolo CAN, existen diferentes estándares que definen
su capa de aplicación; algunos son muy específicos y están relacionados con
sus campos de aplicación. Entre las capas de aplicación más utilizadas cabe
mencionar las siguientes:
•
CAL: Define un amplio conjunto de funciones para la comunicación y
gestión de una red CAN.
•
CANopen: Protocolo de ámbito Europeo desarrollado Bosch y
respaldado por CiA. Utiliza parte de CAL y le agrega nuevos perfiles de
protocolo y dispositivos.
•
DeviceNet: Desarrollado por la firma Rockwell Automation con mayor
utilización en EE.UU. Es un enlace de bajo costo que conecta
dispositivos industriales a una red CAN.
•
SDS (Smart Distributed System): Sistema de bus desarrollado por la
firma Honeywell para la interconexión de sensores y actuadores
inteligentes.
•
OSEK/VDX (Offene Systeme und deren schnittstellen für die Elektronik im
Kraftfahrzeug 10/Vehicle Distributed eXecutive): Desarrollado por la firma
Siemens como resultado de la cooperación entre fabricantes de
automóviles alemanes para desarrollar una arquitectura abierta para
unidades de control distribuido.
•
CANKingdom: Desarrollado por la firma Kvaser y compatible con
DeviceNet, protocolo reconocido a nivel mundial en el control de
Su traducción del alemán al español vendría a ser: Sistemas abiertos y sus interfaces para la
electrónica en automóviles
10
82
maquinaria.
3.6.1.- CAL
La organización CiA estandarizó el protocolo de comunicaciones CAL
con la finalidad de facilitar las implementaciones de sistemas abiertos de redes
CAN en aplicaciones de control industrial. CAL se considera la única
implementación independiente dedicada exclusivamente a la capa de
aplicación en redes CAN. La funcionalidad de CAL consiste en cuatro
elementos de servicio:
•
Especificación de mensajes basada en CAN (CMS, CAN based Message
Specification):
Proporciona
los
medios
para
la
descripción
e
implementación de una comunicación orientada a objetos. Contiene
distintos tipos de datos estructurados y diferentes objetos de
comunicación con características de transmisión. Mediante reglas de
codificación, especifica un formato de datos común para todos los
mensajes de la red.
•
Gestión de la red (NMT, Network Management): Asegura un inicio
ordenado de toda la red y contiene las medidas de precaución
necesarias para la supervisión e intercambio/inserción de nodos en
tiempo de ejecución.
•
Distribuidor de identificadores (DBT, Identifier Distributor): Se encarga de
la asignación dinámica de identificadores y trabaja en conjunto con el
servicio NMT.
•
Gestión de capa (LMT, Layer Management): Se encarga de la
configuración y parametrización de CAL a través de la red.
83
Los elementos anteriores se pueden configurar para diseñar sistemas
con diferentes capacidades y requerimientos. En la Figura 3.34 se muestra la
arquitectura de un sistema basado en CAL.
Figura 3.34.- Arquitectura general de un sistema basado en CAL
3.6.2.- CANOPEN
CANopen es un estándar de comunicaciones y dispositivos basados en
CAL desarrollado por un consorcio liderado por Bosch y apoyado por la
organización CiA. Inicialmente se desarrolló como una red empotrada de
configuración flexible y con apoyo de CiA logró su estandarización para
utilizarse en sistemas distribuidos de automatización industrial. En Europa se
considera el estándar de facto para la implementación de sistemas industriales
basados en CAN, y sus campos de aplicación son: equipo médico, vehículos
para terreno especiales, electrónica marítima, transporte público, domótica,
etc.
CANopen está integrado por un perfil de comunicaciones que especifica
y define los mecanismos de comunicación. Los perfiles de dispositivos
describen a los dispositivos utilizados en la tecnología de automatización
84
industrial tales como módulos de E/S analógicos y digitales, controladores,
unidades de interfaz hombre, codificadores, etc. El perfil de dispositivo define
la funcionalidad de un dispositivo en particular.
La principal característica de CANopen es la descripción funcional de
parámetros, y datos de un dispositivo, la cual se encuentra en un diccionario
de objetos (OD, Object Dictionary). La funcionalidad y características de un
dispositivo CANopen se definen en una hoja de datos electrónica (EDS,
Electronic Data Sheet) estandarizada en formato ASCII.
De forma similar a otros buses de campo, CANopen define dos
mecanismos básicos de transmisión:
•
El intercambio crítico en tiempo real de datos de proceso mediante
objetos de proceso (PDO, Process Data Object).
•
El acceso en tiempo crítico a las entradas del diccionario de objetos
mediante objetos de servicio (SDO, Service Data Object).
La Tabla 3.17 muestra las ventajas y características, mientras que la
Figura 3.35 muestra la arquitectura general de un sistema CANopen.
Tabla 3.17.- Ventajas y características de CANopen
Ventajas
Permite la interoperabilidad entre
diferentes dispositivos
Capacidad de respuesta en tiempo real
Modular, cubre dispositivos desde
simples a complejos
Amigable con el usuario, disponibilidad
de herramientas
Protocolo abierto e independiente del
vendedor, estandarizado como
EN 50325-4
Características
Configuración automática de la red
Fácil acceso a todos los parámetros del
dispositivo
Sincronización de dispositivos
Transmisión de datos controlada por
eventos y cíclica
Lectura sincrónica de configuración de
entradas, salidas o parámetros
85
Figura 3.35.- Arquitectura general de un sistema basado en CANopen
3.6.3.- DEVICENET
DeviceNet es un protocolo desarrollado por la firma Rockwell
Automation 11 y publicado como un estándar de bus de campo abierto,
actualmente desempeña un papel importante en la industria de los EE.UU. y
Asia, y en Europa se extiende cada vez más. DeviceNet es un protocolo
basado en CAN: simple, de bajo costo y eficiente que fue diseñado para el
nivel más bajo de los buses de campo, por ejemplo sensores y actuadores, y
unidades de control asociadas.
DeviceNet es una de las tres redes abiertas (DeviceNet, ControlNet, y
Ethernet/IP) que utilizan el protocolo de control e información (CIP, Control and
Information Protocol). El CIP es un protocolo de comunicaciones común y sus
La firma Rockwell Automation escribió la especificación original DeviceNet. En Europa
DeviceNet forma parte de la norma EN 50325-2 y se incluye en el estándar internacional
IEC 62026-3
11
86
interfaces hardware/software permiten la conexión de dispositivos industriales
a Internet mediante dos tipos de mensajes:
•
Control: Se utiliza para control de las E/S en tiempo real o mensajes
implícitos.
•
Información: Está dedicado al intercambio de mensajes o mensajes
explícitos.
Ambos tipos de mensajes están destinados el área de control industrial y
proporcionan las siguientes características:
•
Servicios de control común.
•
Servicios de comunicación común.
•
Capacidades de encaminamiento común.
•
Base de conocimiento común.
La especificación de DeviceNet define parte de la capa física y el medio
de transmisión. La Figura 3.36 muestra la arquitectura de protocolos de
DeviceNet.
Figura 3.36.- Arquitectura de protocolos DeviceNet
3.6.4.- SDS
Impulsado por la firma Honeywell, SDS es un sistema de bus basado en
CAN para la conexión de sensores y actuadores inteligentes. SDS implementa
87
un protocolo de capa de aplicación diseñado para cumplir los requerimientos
establecidos en la automatización industrial, como son: velocidad de
transferencia de datos, confiabilidad, flexibilidad, etc. Algunas de sus
principales características son la utilización de métodos de detección y
corrección de errores, y confiabilidad en el reconocimiento de mensajes.
El protocolo de capa de aplicación SDS proporciona un conjunto de
mensajes que abarca desde mensajes de cambio de estado controlados por
eventos, hasta
operaciones
complejas
transportando valores
binarios,
analógicos y alfanuméricos.
La arquitectura del protocolo de capa de aplicación SDS se basa en el
modelo OSI, utiliza los servicios que proporciona la capa de enlace de datos
CAN y debe implementar una capa física compatible con CAN (Figura 3.37).
Figura 3.37.- Arquitectura de protocolos SDS
3.6.5.- OSEK/VDX
OSEK/VDX es un proyecto común de la industria automotriz alemana
liderado por Siemens, su objetivo es obtener una arquitectura abierta
estandarizada para las unidades de control distribuidas en vehículos.
88
OSEK/VDX introduce una arquitectura abierta que comprende tres áreas
(Figura 3.38):
•
Comunicación: Proporciona servicios para el intercambio de datos entre
tareas y/o rutinas de servicio de interrupción (ISR, Interrupt Service
Routine), comunicación interna de una ECU, y externa entre diferentes
ECUs; el acceso a los servicios de comunicación OSEK se realiza
mediante interfaces de programación de la aplicación específica (API,
Application Program Interface).
•
Gestión de red: Define un conjunto de servicios para determinar y
supervisar
la
configuración
del
nodo.
Debe
adaptarse
a
los
requerimientos específicos del sistema de bus utilizado (métodos
globales) o a los recursos de cada nodo (métodos locales).
•
Sistema operativo: Las aplicaciones automotrices se caracterizan por
tener requerimientos de tiempo real rigurosos. El OS de OSEK
proporciona la funcionalidad necesaria para dar soporte a sistemas de
control manejados por eventos. Los servicios especificados por el OS
constituyen una base para hacer posible la integración de módulos
software realizados por distintos fabricantes.
89
Figura 3.38.- Arquitectura OSEK/VDX
3.6.6.- CAN KINGDOM
CAN Kingdom fue desarrollado por la empresa sueca Kvaser
específicamente para aplicaciones de control de maquinaria que requieren un
desempeño en tiempo real, los demás protocolos están enfocados a la
automatización industrial.
CAN Kingdom es un conjunto de primitivas del protocolo basado en
CAN y es una herramienta que el diseñador de sistemas puede utilizar para
diseñar y optimizar HLPs. Propone una filosofía para el desarrollo de máquinas
basada en comprensibilidad, seguridad, simplicidad y efectividad.
El desarrollo de un sistema CAN Kingdom sigue el principio de que los
módulos deben servir a la red y como consecuencia todo nodo en la red tiene
la información necesaria para inicializar el sistema.
CAN Kingdom describe un sistema como si fuera un país, un reino, con
su respectiva capital y ciudades. El rey gobierna al reino desde la capital, y
cada ciudad tiene un alcalde responsable del gobierno local. El único medio
para comunicarse dentro de la ciudad es el correo. La red CAN se describe
90
como el sistema postal real, cada ciudad tiene una oficina de correos y un
director de correos el cual simboliza a un controlador CAN (Figura 3.39).
Figura 3.39.- Representación de una red CAN con CAN Kingdom
Cada ciudad produce algo y puede importar o exportar información por
correo. El alcalde de la ciudad organiza cualquier información de importación o
exportación dentro de listas, dichas listas forman parte de la documentación
del módulo. El diseñador de sistemas elige los módulos específicos que se
utilizarán en su máquina, y para ello debe conocer completamente las listas.
Asimismo el diseñador crea un protocolo optimizado para su máquina, al
asignar identificadores a las variables que estén en dicha lista.
91
CAPÍTULO 4.- REFERENCIAS PARA LA UTILIZACIÓN DEL KIT
DE DESARROLLO CAN
El propósito de este capítulo es describir los componentes de software y
de hardware necesarios para la utilización del kit de desarrollo. Para realizar lo
anteriormente expuesto, se detallan los procedimientos de programación y
creación de aplicaciones para el sistema.
4.1.- DESCRIPCIÓN DEL HARDWARE
Cada kit de desarrollo incluye dos placas: una tarjeta de demostración
C51 (C51 Demo Board) y una tarjeta de extensión CAN (CAN Extension Board)
dedicada a los dispositivos CAN las cuales se interconectan, como se aprecia
en la Figura 4.1.
Figura 4.1.- Tarjeta de demostración C51 conectada a la tarjeta de extensión CAN
Todas las características proporcionadas por la tarjeta de demostración
C51 que pueden utilizarse para fines didácticos son:
•
Pantalla LCD.
92
•
Barra de LED’s.
•
Puerto RS-232.
•
Interruptor de encendido/apagado.
•
Botón de reinicio.
•
Botón de interrupción.
•
Capacidad de hardware para programar los microcontroladores CAN en
el chip de memoria flash.
La tarjeta de extensión CAN para los microcontroladores Atmel
T89C51CC0x tiene las siguientes características:
•
Zócalo PLCC44
para instalar un microcontrolador Atmel del mismo
formato.
•
Transceptor CAN Atmel ATA6660.
•
Dos tomas diferentes para transceptor: DIL8 y SO8.
•
Conectores D-sub (DE-9) conformes a la CiA de la recomendación para
la alta velocidad de bus CAN.
•
Conector ADC para la tensión de referencia VAGND y VAREF del
conversor análogo a digital.
En la Tabla 4.1 muestra un listado de las características más
importantes del kit de desarrollo.
93
Tabla 4.1.- Características del kit de desarrollo para los microcontroladores Atmel
T89C51CC0x
Características del kit de desarrollo
Arquitectura del microcontrolador
Intel 8051
Memoria FLASH interna
32k Bytes
Memoria FLASH interna para el Bootloader 2k Bytes
Memoria EEPROM interna
2k Bytes
Memoria RAM interna
256 Bytes
Memoria XRAM interna
1k Byte
Controlador CAN
15 message objects
Programación del sistema
UART / CAN
Puertos
4 puertos (0/1/2/3)
Temporizadores
3 temporizadores de 16-bit (0/1/2)
Conversor análogo a digital
8 canales de 10 bit
Arreglo de contador programable
5 canales de 16 bit
Frecuencia de trabajo
12MHz
Pines de E/S
34
Suministro de energía
9 hasta 12V
Temperatura de trabajo
-40 hasta +85ºC
Zócalos superficiales de montaje
PLCC44, PLC68, DIL24
4.1.1.- MICROCONTROLADOR
El microcontrolador que se utilizará para el estudio del bus CAN
corresponde al modelo Atmel T89C51CC01 el cual posee compatibilidad con el
set de instrucciones de los microcontroladores Intel 8051 además del soporte
para el estándar de bus CAN 2.0A y 2.0B. En la Figura 4.2 y se muestra el
diagrama
de
bloques
y
distribución
de
pines
del
microcontrolador
respectivamente.
94
Figura 4.2.- Diagrama de bloques del microcontrolador Atmel T89C51CC01
Figura 4.3.- Distribución de pines del microcontrolador Atmel T89C51CC01 en formato
PLCC44
95
Otra característica del microcontrolador es que una gran parte de la
velocidad de procesamiento y de memoria queda disponible para la aplicación,
mientras que un completo protocolo de capa superior de pila (CANopen,
DeviceNet o J1939) se ejecuta en el chip. Debido a que se implementa un
motor de interrupciones que informa a la CPU cuando ha ocurrido un evento
asociado a la transmisión o recepción de mensajes en el bus CAN sin correr
una rutina de exploración por software, se minimiza el impacto en aplicaciones
de tiempo real.
Además este microcontrolador posee una gran flexibilidad para la
programación de aplicaciones, que puede ser a través de la interfaz UART o
CAN, permitiendo la programación a distancia y actualizaciones en terreno. El
fabricante ofrece una biblioteca de rutinas de programación de aplicaciones
dentro del sistema para los clientes que deseen construir sus propios gestores
de arranque, reduciendo el tiempo de desarrollo en general.
Finalmente en la lista de periféricos del microcontrolador se incluye 3
temporizadores de 16-bits con capacidad de modulación por ancho de pulso,
un conversor A/D de 10-bit/8-canales y varias interfaces seriales. Una amplia
gama de voltaje de funcionamiento que va desde 3 hasta 5,5V además de
cinco modos de baja potencia para optimizar el consumo de energía de la
aplicación.
96
Figura 4.4.- Esquema de la tarjeta de demostración C51
4.1.2.- CONECTORES DE ENERGÍA
En el kit de desarrollo de software existen básicamente 2 formas de
energizar la placa 12, la primera es por medio de la alimentación de 9 a 12V en el
conector J1 con un transformador AC/DC y la segunda es por medio de la
alimentación en el conector J2 con una batería de 9V.
Existen distintas combinaciones de alimentación para el kit de desarrollo las cuales están
detalladas en el documento “C51 Microcontrollers Demo Board User Guide” y que hacen uso
de configuraciones que incluyen la utilización del jumper J18, que para efectos prácticos no se
van a tomar en consideración, por lo tanto, se hablará sólo de alimentación en los conectores
J1 o J2
12
97
Figura 4.5.- Tarjeta de demostración C51 energizado en los conectores J1 y J2
4.1.3.- RELOJ DEL SISTEMA
El reloj del sistema depende de un cristal externo el que permite la
operación del oscilador interno del microcontrolador, se debe tener en
consideración que un ciclo de máquina se obtiene dividiendo la frecuencia del
cristal por 12, por lo tanto, con el cristal de 12MHz implementado en la tarjeta
de extensión CAN del kit de desarrollo, el ciclo de máquina es de 1µs. Otro
aspecto a mencionar es que la mayoría de las instrucciones se ejecutan en un
ciclo de máquina 13.
4.1.4.- INTERRUPTOR DE ENCENDIDO/APAGADO
Se conoce también como interruptor de encendido y sirve para
conmutar el estado de encendido y apagado (ON/OFF) de la fuente de
alimentación en el kit de desarrollo.
Es pertinente dejar en claro que las instrucciones de las que se hablan corresponden a
instrucciones escritas en lenguaje Assembly y no a las escritas en lenguaje C el cual se utilizará
posteriormente
13
98
4.1.5.- BOTÓN DE REINICIO
Se conoce también como pin de reinicio (RESET) y sirve para inicializar
el microcontrolador y empezar a ejecutar las instrucciones desde el espacio de
programa que reside en la memoria FLASH.
4.1.6.- BOTÓN DE INTERRUPCIÓN
Se conoce también como pin de interrupción externa 1 (P3.3/INT1) y en
el kit de desarrollo se implementó como un botón el cual, como su nombre lo
indica, puede generar una interrupción cada vez que se presiona de éste.
4.1.7.- PANTALLA LCD
Una pantalla LCD de 2x16 (2 líneas de 16 caracteres) de 5x8 puntos por
carácter (5 horizontales y 8 verticales) modelo Hitachi HD44780U.
4.1.8.- BARRA DE LED’S
Una barra de LED’s de 8 segmentos, cuya distribución de izquierda a
derecha consiste en: 2 rojos, 2 amarillos y 4 verdes.
4.1.9.- PUERTO RS-232
El puerto de comunicación RS-232 se implementa en el kit de desarrollo
en los pines de recepción (P3.0/RxD) y transmisión (P3.1/TxD) de señales de
datos seriales asíncronos (UART) del microcontrolador, éste puerto cumple un
doble propósito:
•
La utilización como puerto para visualizar o procesar mensajes de
entrada/salida.
•
El uso como interfaz de programación de la memoria FLASH del
99
microcontrolador 14.
4.1.10.- PUERTO CAN
El puerto de comunicación CAN se implementa en el kit de desarrollo en
los pines de transmisión (P4.0/TxDC) y recepción (P4.1/RxDC) de señales de
datos seriales del protocolo CAN del microcontrolador, éste puerto cumple con
la especificación CAN definida por BOSH GmbH en el estándar ISO 11898-2
(2.0A y 2.0B) para alta velocidad e ISO 11898-3 para baja velocidad.
Otro aspecto a destacar es que el jumper J10 de la tarjeta de extensión
CAN permite conectar o desconectar la resistencia de terminación de 120Ω del
bus, ya que se recomienda tener una resistencia de terminación conectada en
ambos extremos cuando el bus CAN esté funcionando a altas velocidades.
4.2.- DESCRIPCIÓN DEL SOFTWARE
Para poder utilizar el kit de desarrollo de precisan principalmente de 2
programas:
•
Entorno de Desarrollo Integrado.
•
Herramienta de Programación del Sistema.
4.2.1.- ENTORNO DE DESARROLLO INTEGRADO
Un entorno de desarrollo integrado o IDE (Integrated Development
Environment), es un programa informático compuesto por un conjunto de
herramientas de programación consistente en un editor de código, un
compilador y un depurador.
La programación del microcontrolador se hace mediante una combinación de una aplicación
de software residente en un espacio de la memoria FLASH del microcontrolador llamado
“bootloader” y una aplicación de software residente en un computador llamado “FLIP”
14
100
El entorno de desarrollo que se utilizará en los siguientes apartados
corresponde a las herramientas de desarrollo de la compañía Keil para los
microcontroladores Intel 8051 llamado “Keil C51 Development Tools”, el cual
permite la programación de aplicaciones escritas en lenguaje C y Assembly.
El lenguaje empleado para crear las aplicaciones que hagan uso del bus
CAN será el C, en un principio es necesario describir los motivos de escribir un
programa en C por sobre otros lenguajes de programación existentes para
microcontroladores:
•
Algoritmos de un alto nivel de complejidad pueden ser fácilmente
escritos en C mientras que no en Assembly.
•
La portabilidad de un programa escrito en lenguaje C es mucho mayor
que la de uno escrito en Assembly.
•
Crear aplicaciones CAN es mucho más fácil utilizando el lenguaje C que
crearlas en Assembly, ya que el fabricante provee el código escrito en C
para utilizar todos los periféricos del kit de desarrollo y en particular la
librería del bus CAN.
4.2.1.1.- TIPOS DE VARIABLES
El compilador C desarrollado por la compañía Keil es llamado C51 y
soporta la mayoría de los tipos de variables del ANSI C 15 además de agregar
unos cuantos propios.
Dentro de los tipos de variables estándar del compilador C51 los únicos
tipos de variables ANSI C que no están soportados son las variables de punto
flotante debido a que la arquitectura Intel 8051 no es capaz de manejar
ANSI C es un estándar publicado por el Instituto Nacional Estadounidense de Estándares
(American National Standards Institute) para el lenguaje de programación C
15
101
eficientemente este tipo de código, otro aspecto a considerar en la escritura de
un programa en C para sistemas empotrados es que el 8051 no tiene ningún
soporte directo para los tipos de datos con signo, por ende, operaciones con
signo requieren instrucciones adicionales mientras que los tipos de datos sin
signo no lo requieren, por este motivo debe evitarse el uso de variables con
signo siempre y cuando se pueda. Los tipos de variables soportados por el
compilador C51 se muestran en la Tabla 4.2.
Tabla 4.2.- Tipos de variables soportados por el compilador C51
Tipo
bit
signed char
unsigned char
enum
signed short
unsigned short
signed int
unsigned int
signed long
unsigned long
Bits
1
8
8
16
16
16
16
16
32
32
Bytes
Rango
0a1
1
-128 a +127
1
0 a 255
2
-32.768 a +32.767
2
-32.768 a +32.767
2
0 a 65.535
2
-32.768 a +32.767
2
0 a 65.535
4
-2.147.483.648 a +2.147.483.647
4
0 a 4.294.967.295
Compilador
Keil C51
Keil C51/ANSI C
Keil C51/ANSI C
Keil C51/ANSI C
Keil C51/ANSI C
Keil C51/ANSI C
Keil C51/ANSI C
Keil C51/ANSI C
Keil C51/ANSI C
Keil C51/ANSI C
El compilador C51 también añade el manejo de nuevos tipos de
variables las cuales son llamadas SFR (Special Function Registers) y son un
tipo de registro cuyo direccionamiento es asignado para el control y
configuración de: temporizadores, puertos seriales, puertos de E/S y periféricos
en general. Los SFR se encuentran en un área de memoria RAM al cual se
puede acceder más rápidamente que la memoria de propósito general y su
acceso puede ser mediante un tipo de datos bool (1bit), byte (8bits) o word
(16bits), los tipos de SFR que maneja el compilador C51 se muestran en la
Tabla 4.3.
102
Tabla 4.3.- Tipos de SFR que maneja el compilador C51
Tipo
Sbit
Sfr
Sf16
Bits
1
8
16
Bytes
1
2
Rango
0a1
0 a 255
0 a 65.535
4.2.1.2.- OPERACIONES Y ASIGNACIONES A NIVEL DE BITS
Las operaciones a nivel de bits que maneja el lenguaje C permiten una
serie de manipulaciones de datos que son muy útiles en aplicaciones
integradas, incluyendo los ejemplos que se verán en los futuros capítulos. Por
lo tanto, se mostrará las operaciones y asignaciones a nivel de bits que permite
el lenguaje C en la Tabla 4.4 y Tabla 4.5 respectivamente.
Tabla 4.4.- Operaciones a nivel de bits que permite el lenguaje C
Símbolo Forma
~
~x
&
x&y
|
x|y
^
x^y
<<
x << y
>>
x >> y
Descripción
operación de bit NOT
operación de bit AND
operación de bit OR
operación de bit XOR
desplazamiento a la
izquierda
desplazamiento a la
derecha
Operación
todos los bits se invierten
cada bit de ‘x’ AND cada bit de ‘y’
cada bit de ‘x’ OR cada bit de ‘y’
cada bit de ‘x’ XOR cada bit de ‘y’
todos los bits en ‘x’ se desplazan a la
izquierda en ‘y’ bits
todos los bits en ‘x’ se desplazan a la
derecha en ‘y’ bits
Tabla 4.5.- Asignaciones a nivel de bits que permite el lenguaje C
Símbolo Forma
&=
x &= y
|=
x |= y
^=
x ^= y
<<=
>>=
Descripción
asignación de bit AND
asignación de bit OR
asignación de bit XOR
asignación de desplazamiento
x <<= y
a la izquierda
asignación de desplazamiento
x >>= y
a la derecha
Operación
asigna ‘x & y’ a ‘x’
asigna ‘x | y’ a ‘x’
asigna ‘x ^ y’ a ‘x’
desplaza los bits en ‘x’ hacia la
izquierda en ‘y’ bits
desplaza los bits en ‘x’ hacia la
derecha en ‘y’ bits
4.2.1.3.- ESTRUCTURA DE UN PROGRAMA ESCRITO EN C
La estructura de un programa escrito en C para un microcontrolador es
básicamente la misma estructura de un programa estándar en C con algunos
cambios menores, la estructura típica se muestra en la Figura 4.6.
103
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* This is the program header. Describe your program here briefly
*
******************************************************************************/
/* include your headers here */
#include <t89c51cc01.h>
/* include your variable declarations here */
bit
var_1;
unsigned char var_2;
unsigned int var_3;
/* include your functions here */
void func_1(void)
{
/* body of function */
}
/* include your main code here */
void main(void) /* main code */
{
/* initialisation of variables */
}
while(1)
/* start of endless loop */
{
/* body of loop */
}
Figura 4.6.- Estructura general de un programa escrito en C para sistemas empotrados
Es necesario aclarar en este punto que la serie de laboratorios que se
implementarán los programas ya estarán escritos y se le pedirá al alumno
modificar algunos parámetros necesarios para la configuración y comunicación
de los kits.
4.2.1.4.- RUTINAS DE INTERRUPCIÓN
El microcontrolador Atmel T89C51CC01 tiene un total de 10 vectores de
interrupción: dos interrupciones externas (INT0 e INT1), tres interrupciones por
temporizador (Timer 0/1/2), una interrupción por puerto serie (UART), una
104
interrupción por el arreglo de contador programable (PCA/EWC 16), una
interrupción por conversión análoga/digital (ADC), una interrupción por
comunicación CAN y finalmente una interrupción por desbordamiento del
temporizador
CAN,
el
detalle
de
los
tipos
de
interrupciones
del
microcontrolador de muestran en la Tabla 4.6.
Tabla 4.6.- Detalle de los tipos de interrupciones del microcontrolador Atmel T89C51CC01
Interrupción
Número
Externa 0 (INT0)
Timer 0 (TF0)
Externa 1 (INT1)
Timer 1 (TF1)
UART (RI o TI)
Timer 2 (TF2)
PCA (CF o CCFn)
CAN (Tx, Rx, Err, OvrBuff)
ADC (ADCI)
CAN Timer (OvrTim)
0
1
2
3
4
5
6
7
8
9
Vector de
direccionamiento
0x0003
0x000B
0x0013
0x001B
0x0023
0x002B
0x0033
0x003B
0x0043
0x004B
El compilador C51 permite declarar rutinas de interrupción en el código
C para que el programa se dirija automáticamente a éste cuando se produzca
una interrupción, genera automáticamente los vectores de interrupción además
del código para entrar y salir de las rutinas de interrupción.
El esquema de las rutinas de interrupción es similar a la declaración de
funciones con la salvedad que el número de interrupción debe declararse como
parte de la función, tal como se muestra en la Figura 4.7.
void fct_timer1_it(void) interrupt 3
{
/* interrupt service goes here */
}
Figura 4.7.- Estructura general del código escrito en C de una rutina de interrupción
Se usa indistintamente el anglicismo PCA (Programmable Counter Array) o el EWC (Event
and Waveform Controller)
16
105
4.2.1.5.- CREAR UN PROGRAMA DE REFERENCIA
Una vez familiarizado con los aspectos de la programación para
microcontroladores se mostrará cómo empezar a crear un proyecto con el IDE
Keil μVision. La forma de crear un programa de referencia se mostrará a
continuación:
1.- En primer lugar ejecutar el programa Keil μVision3 (Figura 4.8).
Figura 4.8.- Interfaz gráfica de inicio del IDE Keil μVision3
2.- Diríjase al menú desplegable ‘Project → New μVision Project…’ y guarde
el proyecto con el nombre que desee, por ejemplo ‘my_project’.
3.- A continuación en la ventana de selección de dispositivo elija el
proveedor ‘Atmel’ y posteriormente el microcontrolador ‘T89C51CC01’
(Figura 4.9).
106
Figura 4.9.- Ventana de selección de dispositivo
4.- Cuando el programa consulte por copiar el código de inicio estándar
para un microcontrolador 8051 a la carpeta del proyecto, escoger ‘No’.
5.- Una vez configurado el dispositivo de destino marque y presione el click
derecho del mouse sobre la carpeta ‘Target 1’ y seleccione el menú
desplegable ‘Options for Target’ (Figura 4.10).
107
Figura 4.10.- Menú desplegable ‘Options for Target’
6.- Aparecerá una ventana con una serie de opciones de configuración para
el proyecto, de las cuales, en primera instancia, interesa cambiar la
configuración por defecto de las pestañas ‘Target’ y ‘Output’.
7.- En la pestaña ‘Target’ (Figura 4.11) modifique la opción de frecuencia
del cristal ‘Xtal (MHz)’ por 12, para ser coincidente con el cristal de
12MHz empleado en el kit de desarrollo 17.
Ésta modificación no causa ningún cambio en el código generado cuando se compile un
proyecto, pero es útil para simular la temporización, los retardos por software y configuración
de velocidad de los periféricos en las sesiones de depuración
17
108
Figura 4.11.- Pestaña ‘Target’ de la ventana ‘Options for Target’
8.- En la pestaña ‘Output’ (Figura 4.12) seleccione la casilla de verificación
‘Create HEX File’ para generar un archivo hexadecimal del proyecto, el
que posteriormente será programado en el microcontrolador.
109
Figura 4.12.- Pestaña ‘Output’ de la ventana ‘Options for Target’
9.- A continuación marque y presione el click derecho del mouse sobre la
carpeta ‘Source Group’ y seleccione el menú desplegable ‘Add Files to
Group’ (Figura 4.13) para añadir el código de fuente de todos los
archivos necesarios para el desarrollo del proyecto.
110
Figura 4.13.- Menú desplegable ‘Add Files to Group’
10.- Finalmente se puede compilar el proyecto marcando y presionando el
click derecho del mouse sobre la carpeta ‘Target 1’ y seleccionando el
menú desplegable ‘Build target’ (Figura 4.14).
111
Figura 4.14.- Menú desplegable ‘Build target’
4.2.1.6.- AGREGAR OPCIONES DE DEPURACIÓN
Una vez que el proyecto esté creado se pueden agregar opciones de
depuración las cuales son muy útiles a la hora de identificar y corregir errores
de programación. A su vez también es una herramienta muy importante para la
revisión sistemática del código de fuente y para dar seguimiento de la
ejecución del programa presentando, por ejemplo, los valores de variables y
direcciones de memoria. La forma de agregar secuencias de comandos y
cuadros de herramientas seleccionables en el menú de depuración se mostrará
a continuación:
1.- En primer lugar debe marcar y presionar el click derecho del mouse
sobre la carpeta ‘Target 1’ y seleccionar el menú desplegable ‘Options
for Target’ (Figura 4.10).
112
2.- Dentro de la ventana de opciones del proyecto, debe dirigirse, en esta
instancia, a la pestaña ‘Debug’ (Figura 4.15), presionar el botón de
selección de la opción ‘Initialization File’ y escoger el archivo necesario
para realizar la depuración del proyecto, que en este ejemplo es llamado
‘debug.ini’.
Figura 4.15.- Pestaña ‘Debug’ de la ventana ‘Options for Target’
3.- Para tener más fácil acceso al archivo de depuración dentro del IDE, se
pude incluir dentro del espacio de trabajo un nuevo grupo que contenga
dicho archivo.
4.- Para crear un nuevo grupo debe marcar y presionar el click derecho del
mouse sobre la carpeta ‘Target 1’ y seleccionar el menú desplegable
‘New Group’ (Figura 4.16).
113
Figura 4.16.- Menú desplegable ‘New Group’
5.- A continuación se creará una nueva carpeta de archivos dentro del
proyecto la cual es conveniente renombrar con un nombre que tenga
algún significado, en este ejemplo se llamará ‘Debug Session 1’.
6.- Posteriormente debe marcar y presionar el click derecho del mouse
sobre la carpeta creada y seleccionar el menú desplegable ‘Add Files to
Group’ (Figura 4.17).
114
Figura 4.17.- Menú desplegable ‘Add Files to Group’
7.- En la ventana desplegable cambie el tipo de filtro a ‘All files (*.*)’ y
agregue el archivo de depuración que desee, continuando con el
ejemplo se selecciona ‘debug.ini’, y cuando el programa consulte por el
tipo de archivo seleccionado escoja la opción ‘Text Document file’.
8.- Finalmente, si todos los pasos han sido ejecutados correctamente, se
tendrá un espacio de trabajo del proyecto similar al mostrado en la
Figura 4.18.
115
Figura 4.18.- Estructura del proyecto ‘my_project’
4.2.2.- HERRAMIENTA DE PROGRAMACIÓN DEL SISTEMA
La herramienta de programación del sistema es llamado por la compañía
Atmel como FLIP (FLexible In-system Programmer), es un software que se
ejecuta en el computador y sirve para la programación de microcontroladores
de dicha compañía. Esta herramienta puede programar dispositivos dentro del
sistema (ISP: In-System Programming) a través de UART, USB y CAN 18. El tipo
de programación que se utilizará para los proyectos será por medio del puerto
RS-232 (UART).
4.2.2.1.- CONDICIONES DE HARDWARE
En primer lugar se debe proceder a establecer las condiciones de
hardware que se requieren para programar el kit de desarrollo las cuales se
muestran en la Figura 4.19 y se describen a continuación:
1.- Interconectar la tarjeta de demostración C51 (C51 Demo Board) con la
tarjeta de extensión CAN (CAN Extension Board).
2.- Energizar la tarjeta de demostración C51 conectando el suministro de
energía de 9V.
3.- Conectar el puerto RS-232 de la tarjeta de demostración C51 al puerto
de
comunicaciones
COM
del
PC
mediante
un
cable
RS-232
La programación para el microcontrolador T89C51CC01 puede ser sólo a través de los
puertos RS-232 y CAN ya que no posee interfaz USB, además la programación por medio del
bus CAN requiere un sistema electrónico llamado “dongle”
18
116
Macho/Hembra 19.
4.- Asegurarse
que
el
microcontrolador
T89C51CC01UA-SLIM
esté
conectado al zócalo PLCC44 de la tarjeta de extensión CAN.
Figura 4.19.- Conexión entre el PC y el kit de desarrollo CAN mediante RS-232
Debemos tener en cuenta que el microcontrolador T89C51CC01 tiene un
área de memoria residente en la FLASH que viene pre-programada con una
aplicación de software llamada gestor de arranque (Bootloader). El gestor de
arranque que se utilizará para los proyectos será el UART 20 el cual se encarga
de realizar tareas para programar o reprogramar la memoria FLASH del
microcontrolador (EEPROM) utilizando el puerto serie. El kit de desarrollo se
19
En caso de que el computador a utilizar no tenga puerto de comunicaciones serial (COM) se
puede utilizar un conversor USB a RS-232
Los microcontroladores T89C51CC01 vienen disponibles con 2 gestores de arranque: UART
y CAN ambos, a grandes rasgos, se encargan de iniciar una secuencia de reconocimiento de la
velocidad de la interfaz serial (UART o CAN) para posteriormente realizar tareas relacionadas
con la lectura y/o escritura del chip en la memoria FLASH (EEPROM)
20
117
encarga de, según el posicionamiento de los interruptores: J9, J11 y J16, saltar
la ejecución del programa principal para ejecutar el gestor de arranque y
realizar tareas de programación en el microcontrolador (modo Gestor de
Arranque) o, en sentido contrario, saltar la ejecución del gestor de arranque
para ejecutar la aplicación principal (modo Aplicación de Usuario).
Para programar la memoria FLASH del microcontrolador es necesario,
en primera instancia, realizar los ajustes hardware del kit de desarrollo que
permitan iniciar el sistema en modo ‘Gestor de Arranque’. Para iniciar el
sistema en modo ‘Gestor de Arranque’ las posiciones de los interruptores J9,
J11 y J16 de la tarjeta de demostración C51 deben quedar como se muestra
en la Figura 4.20.
Figura 4.20.- Condición de hardware configurado para arrancar en modo ‘Gestor de Arranque’
Después de establecer las condiciones necesarias programar la
memoria FLASH del microcontrolador es necesario, en segunda instancia,
realizar los ajustes hardware del kit de desarrollo que permitan iniciar el sistema
en modo ‘Aplicación de Usuario’. Para iniciar el sistema en modo ‘Aplicación
118
de Usuario’ las posiciones de los interruptores J9, J11 y J16 de la tarjeta de
demostración C51 deben quedar como se muestra en la Figura 4.21.
Figura 4.21.- Condición de hardware configurado para arrancar en modo ‘Aplicación de
Usuario’
4.2.2.2.- USO DEL PROGRAMADOR DE SISTEMA
En segundo lugar veremos los pasos necesarios para utilizar el software
de programación FLIP y verificar que se han establecido correctamente los
parámetros necesarios para poder programar la tarjeta de demostración:
1.- En primer lugar ejecutar el programa FLIP (Figura 4.22).
119
Figura 4.22.- Interfaz gráfica de inicio del programador FLIP
2.- Diríjase al menú desplegable ‘Device → Select’ seleccione el dispositivo
‘T89C51CC01’, nótese que la ventana de la aplicación mostrará ahora la
configuración del microcontrolador (Figura 4.23).
120
Figura 4.23.- Ventana del programador FLIP con el dispositivo T89C51CC01 seleccionado
3.- Asegúrese de que el kit de desarrollo se encuentre debidamente
conectado al PC con la condición de hardware configurado para
arrancar en modo ‘Gestor de Arranque’ (Figura 4.20) y posteriormente
encienda el kit de desarrollo.
4.- A
continuación
seleccione
el
menú
desplegable
‘Settings
→
Communication → RS232’, en la ventana de configuración ‘RS232
Setup’ escoja de puerto COM al cual esté conectado el kit de desarrollo
y configure la velocidad de transmisión, tal como se muestra en la
Figura 4.24.
121
Figura 4.24.- Configuración del puerto RS-232
5.- Iniciar la comunicación presionando el botón ‘Connect’ de la ventana de
configuración ‘RS232 Setup’. Si la conexión es exitosa, la ventana del
FLIP debe ser similar a la mostrada en la Figura 4.25 21.
En algunos ordenadores portátiles es necesario realizar el siguiente procedimiento: Haga clic
en ‘Connect’, resetee el kit de desarrollo y a continuación haga clic en ‘Sync’
21
122
Figura 4.25.- Conexión exitosa del kit de desarrollo
6.- En el menú desplegable ‘File → Load HEX File…’ elija la aplicación que
desee programar en el microcontrolador, previamente compilada y en
formato binario hexadecimal. El mensaje ‘HEX file parsed’ mostrado en
la parte inferior de la ventana del programador FLIP confirma que la
carga del archivo fue exitosa (Figura 4.26).
123
Figura 4.26.- Archivo hexadecimal debidamente cargado
7.- Asegurarse
que
las
casillas
de
verificación
siguientes
están
seleccionadas en la sección ‘Operations Flow’ del FLIP:

Erase

Blank Check

Program

Verify
8.- Deje sin verificar el cuadro de ‘BLJB’ en la sección ‘T89C51CC01’ a fin
de ejecutar el programa de demostración después del siguiente reinicio.
9.- Presione el botón ‘Run’ para que la programación se ejecute. El mensaje
124
‘Verify PASS’ mostrado en la parte inferior de la ventana del
programador FLIP confirma que el microcontrolador se ha programado
correctamente (Figura 4.27).
Figura 4.27.- Programación exitosa del microcontrolador
10.- Una vez programado asegúrese de que el kit de desarrollo se
encuentre con la condición de hardware configurado para arrancar en
modo ‘Aplicación de Usuario’ (Figura 4.21).
11.- Finalmente, reinicie el kit de desarrollo para iniciar la aplicación
programada en el microcontrolador.
125
CAPÍTULO 5.- PUESTA EN FUNCIONAMIENTO DEL SISTEMA
CAN
El propósito de este capítulo es la de enseñar al alumno el protocolo de
comunicaciones CAN utilizando un kit de desarrollo, considerando para esto
los aspectos académicos relacionados con el estudio de dicho protocolo. Para
realizar lo anteriormente expuesto, se enseña la metodología para crear
aplicaciones para el kit de desarrollo por medio de una serie de experiencias de
laboratorio, cuyo detalle se encuentran en el anexo A: Guías de Laboratorio.
5.1.- INTRODUCCIÓN A LA PROGRAMACIÓN DE APLICACIONES
PARA EL KIT DE DESARROLLO
El propósito de este laboratorio es familiarizar al alumno con el kit de
desarrollo y las herramientas necesarias para la creación, compilación y
programación para éste, para ello es necesario abarcar los siguientes
aspectos:
•
Explicar la estructura general de un programa que haga uso de los
distintos componentes del kit de desarrollo.
•
La importancia del reloj del sistema para la comunicación asíncrona.
•
El funcionamiento del puerto RS-232 del microcontrolador.
Este laboratorio consta de utilizar las librerías creadas específicamente
para hacer uso de los componentes de hardware implementados en el kit de
desarrollo, cuyo propósito es ayudar al alumno a crear aplicaciones que hagan
uso de dichos componentes, se entregará al alumno 3 programas escritos en
C que mostrarán el uso de:
•
La barra de LED’s.
•
La pantalla LCD.
126
•
El puerto RS-232.
5.1.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
Para la puesta en funcionamiento del kit de desarrollo es necesario
contar con herramientas de software y de hardware que se enumerarán a
continuación:
Tabla 5.1.- Requerimientos de software y de hardware para el laboratorio nº1
Requerimientos
Requerimientos de
Software
Requerimientos de
Hardware
Herramientas
Entorno de desarrollo integrado: Keil C51
Herramienta de programación del sistema: Atmel FLIP
Código de fuente de los programas ‘bargraph’, ‘display’ y
‘rs232’
Programas compilados en formato hexadecimal
‘bargraph.hex’, ‘display.hex’ y ‘rs232.hex’
Un kit de desarrollo CAN además de su respectivo
microcontrolador del tipo: T89C51CC01UA-SLSIM
Un Cable Serie RS-232 DB9/DB9 (Macho/Hembra) para la
comunicación entre el kit de desarrollo y el computador
5.1.2.- CONVENCIONES DE PROGRAMACIÓN
En todos los proyectos que se mostrarán desde ahora en adelante hará
uso de un archivo de configuración llamado ‘config.h’ (Figura 5.1) que estará
incluido en el código de fuente de todos los archivos con el fin de compartir las
configuraciones en todos los proyectos.
127
/******************************************************************************
* FILE_NAME: config.h
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is included by all source files in order to access *
*
to system wide configuration
*
******************************************************************************/
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include <t89c51cc01.h>
#include "compiler.h"
#endif /* _CONFIG_H_ */
Figura 5.1.- Ejemplo de utilización del archivo ‘config.h’ incluido en las rutinas
El archivo de configuración incluido hace a su vez la inclusión de los
archivos ‘t89c51cc01.h’ y ‘compiler.h’. El archivo ‘t89c51cc01.h’ añade el
manejo los registros de funciones encargados del direccionamiento para el
microcontrolador T89C51CC01; mientras que el archivo ‘compiler.h’ redefine
las palabras clave con el fin de asegurarse de que cualquier archivo de origen
pueda ser procesado por distintos compiladores además de definir nombres
para tipos de datos que hagan más fácil el declarar variables y parámetros
(también llamados ‘alias’).
Dentro de los nombres definidos en el archivo ‘compiler.h’ se mostrarán
los más utilizados dentro de los proyectos, los que corresponden a las
definiciones de tipo asociadas a las variables (Tabla 5.2) y las definiciones de
constantes asociadas a las interrupciones (Tabla 5.3).
128
Tabla 5.2.- Definición de tipos entregados en el archivo ‘compiler.h’
Definición
Bool
Uchar
Uint8
Uint16
Uint32
Int8
Int16
Int32
Tipo
unsigned char
unsigned char
unsigned char
signed char
unsigned int
signed int
unsigned long
signed long
Bits
8
8
8
8
16
16
32
32
Bytes
1
1
1
1
2
2
4
4
Tabla 5.3.- Definición de constantes asociados a interrupciones entregados en el archivo
‘compiler.h’
Nombre
Número
Interrupción
IRQ_INT0
0
Externa 0 (INT0)
IRQ_TIMER0
1
Timer 0 (TF0)
IRQ_INT1
2
Externa 1 (INT1)
IRQ_TIMER1
3
Timer 1 (TF1)
IRQ_UART
4
UART (RI o TI)
IRQ_TIMER2
5
Timer 2 (TF2)
IRQ_EWC
6
PCA (CF o CCFn)
IRQ_CAN
7
CAN (Tx, Rx, Err, OvrBuff)
IRQ_ADC
8
ADC (ADCI)
IRQ_CAN_TIMOVF
9
CAN Timer (OvrTim)
5.1.3.- ESTÁNDAR RS-232
El estándar RS-232, definido en el ANSI como EIA-232, emplea un
esquema de transmisión serie con un circuito eléctrico single-ended y
especifica el conjunto de reglas para intercambiar datos entre 2 equipos de
computación, originalmente nombrados como DTE (Data Terminal Equipment)
y DCE (Data Communication Equipment) o MODEM.
Es adecuado para transferir datos a máxima velocidad a distancias de
hasta 15m según la norma 22, la interfaz puede trabajar en comunicación
La revisión ‘C’ especificaba una longitud máxima entre equipos de 15m, pero posteriores
revisiones, ‘D’ y ‘E’, han cambiado este requisito por uno más realista al especificar una
capacidad máxima del canal de transmisión. De esta manera, las longitudes máximas
aceptables dependen de las características de los cables empleados y las capacidades de
entrada de los circuitos de interface
22
129
asíncrona o síncrona y tipos de canal simplex, half dúplex o full dúplex. Para
generar un enlace entre 2 dispositivos, 5 parámetros deben especificarse,
estos parámetros son: velocidad de transmisión, bits de datos, paridad, bits de
parada y control de flujo, los cuales de describen a continuación:
•
Velocidad de transmisión: Determina cuanta información es transferida
sobre un determinado intervalo de tiempo la cual se mide en bits por
segundo,
usualmente
se
pueden
elegir velocidades
que
están
estandarizadas y van desde 75 hasta 19200bps 23. Por ejemplo, de la
famosa velocidad 9600bps obtenemos 1/9600 = 104µs.
•
Bits de datos: Puede ser desde 5 a 8 bits de datos 24, comúnmente sólo
se utilizan implementaciones de 7 u 8 bits de datos dependiendo de la
naturaleza de datos a ser transferidos, como ejemplo el estándar ASCII
original consta de 7 bits, mientras que 8 bits hacen 1 byte.
•
Paridad: Este bit es opcional y puede ser usado para marcar la paridad.
Esta puede ser entonces: par, impar, marca (siempre 1), espacio
(siempre 0) o sin paridad (no se utiliza). En caso de que no esté correcto
el valor se deberá desechar el dato recibido ya que ha sido corrompido
durante la transmisión. Los bits de inicio y término no se tienen en
cuenta para el cálculo de la paridad.
•
Bits de parada: Se utiliza para asegurar que no se transmita nada por la
línea hasta pasado un tiempo, es un valor que se puede configurar y
generalmente nos dan 3 opciones: 1 bit, 1,5 bits y 2 bits, puede sonar
extraño tener un bit y medio pero hay que tener en cuenta que hace
referencia al tiempo de bit por lo que, siguiendo con el ejemplo de
En realidad se dice que la RS-232 es la menos estándar de las normas por la infinidad de
variaciones que permite ya que comúnmente es utilizado a velocidades mayores que llegan
hasta los 115200bps (o superiores) pero éstas velocidades no son parte del estándar
23
5 y 6 bits de datos se utilizan para equipos de comunicación especializados, algunos
módems permiten también el uso de 4 bits de datos pero no es estándar
24
130
9600bps, 1,5×104µs = 156µs.
•
Control de flujo: El control de flujo o también llamado handshaking
(apretón de manos) hace referencia a la forma en la que el transmisor y
el receptor se notifican su estado para llevar a cabo la comunicación y
puede ser:

Ninguno: No es necesario emplear control de flujo.

Hardware: Utilizando líneas físicas específicas para esta tarea: RTS y
CTS.

Software: Por la propia UART se envían valores específicos para este
fin: XON y XOFF 25.
Debe tomarse en consideración que siempre el bit de inicio tiene 1 bit,
por lo que la transmisión y recepción de datos seriales consiste siempre en una
trama de:
•
1 bit de inicio.
•
5 a 8 bits de datos.
•
1 bit opcional de paridad.
•
1, 1,5 o 2 bits de término.
En muchas aplicaciones se utiliza una velocidad de transmisión de
9600bps en donde 10 bits son usados para especificar la trama RS-232
consistente en: 1 bit de inicio, 8 bits de datos, sin paridad, 1 bit de parada y sin
utilizar control de flujo, esta configuración es abreviada en la literatura como:
9600-8-N-1-N (9600bps, 8 bits de datos, sin paridad, 1 bit de parada y sin
control de flujo).
En XON/XOFF, cuando el receptor quiere que el transmisor pare el envío de datos envía
XOFF, mientras que cuando el receptor quiere que el transmisor envíe más datos envía XON
25
131
5.1.4.- LABORATORIO Nº1.1
En este laboratorio se describirá la utilización de la pantalla LCD para el
kit de desarrollo utilizando la librería de la pantalla LCD, esta librería contiene
los siguientes archivos:
•
lcd.c
•
lcd.h
La cual consta de 2 funciones que pueden ser llamadas únicamente si
se incluye la cabecera del programa que lo va a utilizar, las funciones que
entrega son las siguientes:
void lcd_init(void)
void set_lcd_line(Uchar line, Uchar *pt_string)
La primera función de encarga de ejecutar los procedimientos para
inicializar la pantalla LCD por software para que puedan interpretar
correctamente los datos enviados al controlador Hitachi HD44780U, mientras
que la segunda función se encarga de escribir en la pantalla una cadena de
caracteres determinada de la forma <número de línea, texto a mostrar>, la
utilización en un programa se ejemplifica en la Figura 5.2.
132
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: Display LCD program example
*
******************************************************************************/
#include "config.h"
#include "lcd.h"
void main(void)
{
lcd_init(); /* lcd initialisation */
set_lcd_line(1, “ATMEL Wireless &”);
/* welcome */
set_lcd_line(2, “MicroControllers”);
/* message */
while(1);
/* start of endless loop */
}
Figura 5.2.- Ejemplo de utilización de la librería de la pantalla LCD
La utilización de esta librería se ejemplifica en el proyecto display.uv2 en
donde se verá la inclusión de ésta en el programa principal. Finalmente la
estructura del programa se muestra en la Figura 5.3.
Figura 5.3.- Estructura del proyecto ‘display’
Se dejará como labor para el alumno compilar el programa escrito y
programar el kit de desarrollo.
133
5.1.5.- LABORATORIO Nº1.2
En este laboratorio se describirá la utilización de la barra de LED’s para
el kit de desarrollo, ésta librería contiene los siguientes archivos:
•
bg.c
•
bg.h
La cual también consta de 2 funciones que pueden ser llamadas
únicamente si se incluye la cabecera del programa que lo va a utilizar, las
funciones que entrega son las siguientes:
void bg_init(void)
void set_bg_value(Uchar)
La primera función se encarga de ejecutar los procedimientos para
inicializar la barra de LED’s dejándolos todos apagados, mientras que la
segunda función se encarga de escribir en la barra de LED’s una secuencia de
caracteres que se entrega en formato hexadecimal, la utilización en un
programa se ejemplifica en la Figura 5.4.
134
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: Bargraph LED program example
*
******************************************************************************/
#include "config.h"
#include "bg.h"
Uchar bar_led;
Uint16 i;
void delay(Uint16 tempo)
{
for(i=0; i<tempo; i++);
}
void main(void)
{
bar_led = 0xAA; /* bar_led initialisation, 0xAA = 1010 1010 */
bg_init();
/* bargraph initialisation */
while(1)
/* start of endless loop */
{
delay(0xC350);
/* delay for approx. 250ms */
set_bg_value(bar_led); /* send bargraph output */
bar_led = ~bar_led;
/* flip all bits */
}
}
Figura 5.4.- Ejemplo de utilización de la librería de la barra de LED’s
La utilización de esta librería se ejemplifica en el proyecto bargraph.uv2
en donde se verá la inclusión de ésta en el programa principal. Además es
necesario hacer notar que tanto el programa dado como ejemplo como el que
está en el proyecto hace uso de retardos por software mediante el uso de la
función ‘void delay(Uint16)’, otro punto a destacar es que el programa que se
da en el proyecto hace uso de interrupciones por hardware presionando el
botón de interrupción ‘INT1’, finalmente la estructura del programa se muestra
en la Figura 5.5.
135
Figura 5.5.- Estructura del proyecto ‘bargraph’
Se dejará como labor para el alumno compilar el programa escrito y
programar el kit de desarrollo.
5.1.6.- LABORATORIO Nº1.3
En éste laboratorio se describirá la utilización del puerto de
comunicación RS-232 para el kit de desarrollo, para esto es necesario utilizar
una biblioteca estándar para el lenguaje de programación C, la cual es llamada
‘stdio.h’ (cabecera estándar de entrada/salida), este archivo contiene las
definiciones de macros, las constantes, las declaraciones de funciones y la
definición de tipos usados por varias operaciones de entrada y salida, la
función que se utilizará desde ahora en adelante será la función ‘int printf(const
char *format, …)’ que puede ser utilizada para mandar datos hacia el puerto
RS-232.
En caso de querer transmitir o recibir datos por el puerto serie del
microcontrolador, es necesario reconocer los siguientes registros:
•
SMOD: Registro perteneciente a ‘PMOD’, el cual es un parámetro
opcional de configuración que si es configurado como el hexadecimal
136
‘0x80’ (SMOD = 1) duplica la velocidad de bits por segundo configurada
para el puerto serie.
•
SCON: Registro de control para el puerto serie, por ejemplo si es
configurado como el hexadecimal ‘0x40’ (SM0 = 0 y SM1 = 1) se habilita
el puerto serie en modo 1 (8-bit de datos con velocidad de bits variable)
sin recepción de datos; mientras que si es configurado como el
hexadecimal ‘0x50’ (SM0 = 0, SM1 = 1 y REN = 1) se habilita el puerto
serie en modo 1 con recepción de datos.
•
TI y RI: Registros pertenecientes a ‘SCON’ se activan (establecen como
1) para indicar que se está listo para transmitir o recibir datos y deben
limpiarse (establecerse como 0) por software para el reconocimiento de
una interrupción causada por la transmisión o recepción de datos por el
puerto serie 26.
En el caso de utilizar el Timer 0/1 para la comunicación serie los
registros a configurar son los siguientes:
•
TMOD: Registro de control del modo de trabajo para los Timer 0 y 1, por
ejemplo si es configurado como el hexadecimal ‘0x02’ (M10 = 1 y M00 =
0) habilita el funcionamiento del Timer 0 en modo 2 (temporizador de 8
bits con auto-recarga 27); mientras que si es configurado como el
hexadecimal ‘0x20’ (M11 = 1 y M01 = 0) habilita el funcionamiento del
Timer 1 en modo 2.
Es pertinente indicar que siempre antes de transmitir datos por el puerto RS-232 es
necesario asignar TI = 1, pues la función ‘printf’ que a su vez hace un llamado a la función
‘putchar’ se encarga de verificar si TI = 1 antes de enviar datos al puerto serie, una vez enviado
un carácter asigna TI = 0 para luego asignar nuevamente TI = 1 en caso de requerir transmitir
más caracteres, por ende la primera asignación TI = 1 debe ser escrito por uno mismo para
que este ciclo tenga efecto
26
El valor de recarga del Timer 0/1 se lee desde TH0/TH1 cuando se desborda el registro
TL0/TL1 según sea el caso
27
137
•
TH0 y TH1: Registro de byte alto del Timer 0/1 que en el funcionamiento
en modo 2 debe ser cargado con una constante para recargar el registro
TL0/TL1 una vez que este se haya desbordado, la Tabla 5.4 muestra los
valores de recarga para distintos cristales.
•
TR0 y TR1: Registro perteneciente a ‘TCON’ que se encarga de arrancar
o parar el Timer 0/1, se activa con un valor 1 y se desactiva con un valor
0.
Tabla 5.4.- Valores de recarga del registro TH0/TH1 para obtener distintas velocidades de
transmisión
Velocidad de
Cristal [MHz]
transmisión [bps]
9600
4800
2400
1200
9600
4800
2400
1200
Valor del bit
SMOD
12,000
12,000
12,000
12,000
11,059
11,059
11,059
11,059
1
1
0
0
0
0
0
0
Valor de
recarga para
TH0/TH1
0xF9
0xF3
0xF3
0xE6
0xFD
0xFA
0xF4
0xE8
Error [%]
6,99
0,16
0,16
0,16
0
0
0
0
Los valores para el cálculo de los valores de recarga del registro
TH0/TH1 se obtienen de las Ecuaciones 5.1 y 5.2.
TH0/TH1 = 256 −
2SMOD × FOSC
384 × Baud Rate
2SMOD × FOSC
Baud Rate =
2 × 32 × [256 − TH0/TH1]
[5. 1]
[5. 2]
En el caso de utilizar el Timer 2 para la comunicación serie los registros a
configurar son los siguientes:
•
T2CON: Registro de control del Timer 2, por ejemplo si es configurado
138
como el hexadecimal ‘0x30’ (RCLK = 1 y TCLK = 1) se establece el
Timer 2 como reloj para la transmisión de datos para el puerto serie en
modo temporizador de 16 bits con auto-recarga 28.
•
RCAP2H y RCAP2L: Registro de byte alto y bajo del Timer 2
respectivamente, que en el funcionamiento en modo temporizador de 16
bits con auto-recarga deben ser cargados con una constante para
recargar el registro TL2 y TH2 una vez que estos se hayan desbordado,
la Tabla 5.5 muestra los valores de recarga para distintos cristales.
•
TR2: Registro perteneciente a ‘T2CON’ que se encarga de arrancar o
parar el Timer 2, se activa con un valor 1 y se desactiva con un valor 0.
Tabla 5.5.- Valores de recarga de los registros RCAP2H y RCAP2L para obtener distintas
velocidades de transmisión
Velocidad de
transmisión
[bps]
115200
57600
38400
19200
14400
9600
115200
57600
38400
19200
14400
9600
Cristal
[MHz]
Valor del
bit SMOD
12,000
12,000
12,000
12,000
12,000
12,000
11,059
11,059
11,059
11,059
11,059
11,059
1
1
1
1
0
0
0
0
0
0
0
0
Valor de
Valor de
recarga para recarga para Error [%]
RCAP2H
RCAP2L
0xFF
0xF9
6,99
0xFF
0xF3
0,16
0xFF
0xEC
2,34
0xFF
0xD9
0,16
0xFF
0xE6
0,16
0xFF
0xD9
0,16
0xFF
0xFD
0
0xFF
0xFA
0
0xFF
0xF7
0
0xFF
0xEE
0
0xFF
0xE8
0
0xFF
0xDC
0
Los valores para el cálculo de los valores de recarga de los registros
RCAP2H y RCAP2L se obtienen de las Ecuaciones 5.3 y 5.4.
El valor de recarga del Timer 2 se lee desde RCAP2H y RCAP2L cuando se desbordan los
registros TL2 y TH2
28
139
(RCAP2H, RCAP2L) = 65536 −
Baud Rate =
2SMOD × FOSC
32 × Baud Rate
2SMOD × FOSC
32 × [65536 − (RCAP2H, RCAP2L)]
[5. 3]
[5. 4]
Como se puede ver en la Tabla 5.4 y Tabla 5.5 la mayor velocidad de
transmisión utilizando un cristal de 12MHz y manteniendo un error aceptable 29
es de 4800bps en caso de utilizar el Timer 0/1 y 57600bps en caso de utilizar el
Timer 2, la utilización en un programa utilizando el Timer 1 se ejemplifica en la
Figura 5.6.
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: RS232 program example
*
******************************************************************************/
#include <stdio.h>
#include “config.h”
void serial_init(void)
{
PCON |= 0x80;
/*
SCON = 0x40;
/*
TMOD |= 0x20;
/*
TH1 = 0xF3;
/*
TR1 = 1;
/*
TI = 1;
/*
}
SMOD1 = 1, double baud rate */
serial port in mode 1, 8-bit UART data */
timer 1 in mode 2, 8-bit autoreload */
reload value for 2400 bauds @ 12MHz */
turn on timer 1 */
indicator ready to transmit */
void main(void)
{
serial_init(); /* serial initialisation */
printf(“ ATMEL T89C51CC01\n”);
/* welcome */
printf(“
RS232 Program Example\n\n”); /* message */
while(1);
/* start of endless loop */
}
Figura 5.6.- Ejemplo de utilización de la librería ‘stdio.h’
Se habla de un error aceptable para comunicaciones seriales un valor que no supere el 2,5%
de error en la velocidad de transferencia ya que la comunicación a través del puerto RS-232 es
extremadamente sensible a fluctuaciones
29
140
La utilización de esta librería se ejemplifica en el proyecto rs232.uv2 en
donde se verá la inclusión de ésta en el programa principal. Además es
necesario hacer notar que tanto el programa dado en el ejemplo como el que
está en el proyecto hace uso de retardos por software mediante el uso de la
función ‘void delay(Uint16)’ y de retardos por hardware haciendo uso del Timer
1 como temporizador para generar la velocidad de transferencia necesaria para
enviar mensajes por el puerto RS-232, otro punto a destacar es que el
programa que se da en el proyecto hace uso de interrupciones por hardware
presionando el botón de interrupción ‘INT1’, finalmente la estructura del
programa se muestra en la Figura 5.7.
Figura 5.7.- Estructura del proyecto ‘rs232’
Se dejará como labor para el alumno compilar el programa escrito y
programar el kit de desarrollo para generar distintas velocidades de transmisión
141
del puerto RS-232. Las velocidades requeridas van desde 2400 hasta
57600bps tal como se indica en la Tabla 5.6.
Tabla 5.6.- Velocidades de transmisión requeridas para la configuración del puerto RS-232
Velocidad de transmisión
[bps]
57600
38400
19200
14400
9600
4800
2400
1200
Temporizador
Timer 2
Timer 2
Timer 2
Timer 2
Timer 2
Timer 0/1
Timer 0/1
Timer 0/1
Para la visualización de mensajes entregados por el microcontrolador a
través del puerto de comunicaciones RS-232, el kit de desarrollo debe
conectarse al puerto de comunicaciones serie de un computador y utilizar un
terminal RS-232 estándar como Hyperterminal tal como se muestra en la
Figura 5.8.
142
Figura 5.8.- Conexión entre el PC y el kit de desarrollo CAN para visualizar mensajes mediante
RS-232
El puerto COM del PC conectado al kit de desarrollo debe configurarse
como X-8-N-1-N, en donde el valor de ‘X’ está dado por la velocidad que se
configuró el kit de desarrollo (Figura 5.9).
143
Figura 5.9.- Configuración del puerto RS-232
5.2.- ESTUDIO DE LA CAPA FÍSICA Y DE ENLACE DE DATOS DEL
PROTOCOLO CAN
El propósito de este laboratorio es familiarizar al alumno con el estudio
de la capa física y de enlace de datos del protocolo CAN haciendo uso del kit
de desarrollo, para ello es necesario abarcar los siguientes aspectos:
•
Enseñar los niveles de voltaje e impedancia que maneja el protocolo
CAN.
•
Explicar cómo crear un nodo para generar transmisión y recepción de
mensajes utilizando las librerías entregadas por el fabricante.
•
Mostrar la estructura general de una trama CAN, campos de:

SOF (inicio de trama)

Identificador (estándar o extendido)
144
•

Control (tipo de trama y número de bytes de datos)

Datos (mensaje de hasta 8 bytes)

CRC (detección de errores)

ACK (acuse de recibo)

EOF (fin de trama)
Detallar la configuración de los registros necesarios para obtener
comunicaciones a distintas velocidades.
Este laboratorio consta de utilizar las librerías CAN entregadas por el
fabricante para la programación del kit de desarrollo, se entregará al alumno
4 programas escritos en C que mostrarán el uso de:
•
Envío y recepción de distintos mensajes CAN (tramas de datos y
remotas) a distintas velocidades.
•
Rutinas de envío secuencial y recepción de mensajes CAN, mostrados
en la barra de LED’s, el panel LCD y el puerto RS-232.
5.2.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
Para la puesta en funcionamiento del kit de desarrollo es necesario
contar con herramientas de software y de hardware que se enumerarán a
continuación:
145
Tabla 5.7.- Requerimientos de software y de hardware para el laboratorio nº2
Requerimientos
Requerimientos de
Software
Requerimientos de
Hardware
Herramientas
Entorno de desarrollo integrado: Keil C51
Herramienta de programación del sistema: Atmel FLIP
Utilidad para calcular la velocidad de bit para el bus CAN en el
kit de desarrollo: X-Calculator
Código de fuente de los programas ‘can_tx’, ‘can_rx’,
‘can_gen’ y ‘can_mon’
Programas compilados en formato hexadecimal ‘can_tx.hex’,
‘can_rx.hex’, ‘can_gen.hex’ y ‘can_mon.hex’
Dos kits de desarrollo CAN además de sus respectivos
microcontroladores del tipo T89C51CC01UA-SLSIM
Un Cable Serie RS-232 DB9/DB9 (Macho/Hembra) para la
comunicación entre el kit de desarrollo y el computador
Un Cable Serie RS-232 DB9/DB9 (Macho/Macho) para la
comunicación entre ambos kits de desarrollo
5.2.2.- LIBRERÍA DE COMUNICACIÓN CAN
En estos laboratorios se describirá la utilización del bus CAN para el kit
de desarrollo utilizando la librería CAN entregada por el fabricante, ésta librería
contiene los siguientes archivos:
•
can_lib.c
•
can_lib.h
La cual consta de 5 definiciones de tipos y 14 funciones que pueden
ser llamadas únicamente si se incluye la cabecera del programa que lo va a
utilizar, las definiciones de tipo que entrega son las siguientes:
can_data_t: Uchar

can_data: campo de datos del mensaje CAN
can_id_t: union

Uint32 ext: permite el acceso al identificador de 29 bits (modo extendido)

Uint16 std: permite el acceso al identificador de 11 bits (modo estándar)

Uchar tab[4]: permite el acceso por byte al identificador
146
can_msg_t: struct

can_id_t id: identificador del mensaje CAN, 11 bits en modo estándar y 29
bits en modo extendido

Uchar ctrl: define cierta información específica como RTR, IDE y los bits
DLC

bit 5: RTR ⇒ trama de datos = 0 o trama remota = 1 (se accede por
MSK_CTRL_RTR)

bit 4: IDE ⇒ identificador estándar = 0 o identificador extendido = 1 (se accede
por MSK_CTRL_IDE)

bits 3-0: DLC ⇒ número de bytes de datos a transmitir (se accede por
MSK_CTRL_DLC)

Uchar *pt_data: puntero a la tabla que contiene los datos para enviar o
recibir
channel_t: enum

channel: CHANNEL_0 … CHANNEL_14
dlc_t: enum

dlc: DLC_0 … DLC_8
Las funciones encargadas de inicializar los parámetros de configuración
son las siguientes:
void ClearAllMailbox(void): Función que se utiliza para borrar toda la
memoria RAM del controlador CAN
void CanSetBRP(Uchar prescaler): Función que se utiliza para inicializar el
parámetro BRP (Baud Rate Prescaler) del controlador CAN con el
parámetro ‘prescaler’
void CanSetSJW(Uchar sjw): Función que se utiliza para inicializar el
parámetro SJW (re-Synchronization Jump Width) del controlador CAN con
el parámetro ‘sjw’
void CanSetPRS(Uchar prs): Función que se utiliza para inicializar el
147
parámetro PRS (Propagation time Segment) del controlador CAN con el
parámetro ‘prs’
void CanSetPHS1(Uchar phs1): Función que se utiliza para inicializar el
parámetro PHS1 (Phase Segment 1) del controlador CAN con el parámetro
‘phs1’
void CanSetPHS2(Uchar phs2): Función que se utiliza para inicializar el
parámetro PHS2 (Phase Segment 2) del controlador CAN con el parámetro
‘phs2’
Las funciones encargadas de inicializar los parámetros encargados de la
transmisión y recepción de mensajes son las siguientes:
void ConfChannel_Rx(void): Función que se utiliza para configurar un canal
en el modo de recepción. Antes de llamar a esta función el canal
correspondiente debe estar seleccionado, asegurándose de que el canal
esté libre porque no se lleva a cabo ninguna verificación de esto por la
función. El identificador de filtrado y de enmascaramiento son inicializados
con los valores contenidos en las variables globales ‘can_rx_filt’ y
‘can_rx_msk’, la configuración se define en la variable global ‘conf_rx’, las
variables globales utilizadas se detallan a continuación:

can_id_t can_rx_filt: Valor de filtro del identificador

can_id_t can_rx_msk: Valor de enmascaramiento del identificador

Uchar conf_rx: Configuración utilizada para el canal de recepción

bit
7:
MSK_RTR
⇒
sin
enmascaramiento
del
campo
RTR
(CONF_NOMSK_RTR) o enmascaramiento del campo RTR (CONF_MSK_RTR)

bit 6: MSK_IDE ⇒ sin enmascaramiento del campo IDE (CONF_NOMSK_IDE) o
enmascaramiento del campo IDE (CONF_MSK_IDE)

bit 5: RTR ⇒ si es que existe enmascaramiento del campo RTR se aceptará
solamente tramas de datos (CONF_NORTR) o tramas remotas (CONF_RTR)

bit 4: IDE ⇒ si es que existe enmascaramiento del campo IDE se aceptará
148
solamente
identificadores
estándar
(CONF_NOIDE)
o
identificadores
extendidos (CONF_IDE)

bit
0:
BUFFER
⇒
configura
el
canal
en
recepción
sin
buffer
(CONF_NOBUFFER) o en recepción con buffer (CONF_BUFFER)
void SendCanMsg(void): Esta función se utiliza enviar un mensaje en el bus
CAN. Antes de llamar a esta función el canal correspondiente debe estar
seleccionado, asegurándose de que el canal esté libre porque no se lleva a
cabo ninguna verificación de esto por la función. El identificador a enviar se
declara en la variable global ‘can_id_tx’ y los datos a transmitir son
declarados en la variable global ‘pt_candata_tx’, la configuración se define
en la variable global ‘conf_tx’, las variables globales utilizadas se detallan a
continuación:

can_id_t can_tx_id: Valor del identificador a transmitir

Uchar *pt_candata_tx: Puntero a la tabla con los datos a transmitir

Uchar conf_tx: Configuración utilizada para la transmisión

bit 5: RTR ⇒ trama de datos (CONF_NORTR) o trama remota (CONF_RTR)

bit 4: IDE ⇒ identificador estándar (CONF_NOIDE) o identificador extendido
(CONF_IDE)

bits 3-0: DLC ⇒ número de bytes de datos a transmitir (se utiliza ‘dlc_t’,
CONF_DLC_0 … CONF_DLC_8)
void ReadCanMsg(Uchar next_conf): Esta función se utiliza recibir un
mensaje en el bus CAN. Esta función lee el mensaje recibido en el canal
‘num_channel’ y lo almacena en una estructura del tipo ‘pt_st_can_rx’ para
posteriormente configurar el canal en que se recibió el mensaje con una
nueva configuración entregada a través del parámetro ‘next_conf’, la
configuración puede ser:

CHANNEL_DISABLE: El canal quedará deshabilitado

CHANNEL_RX_ENABLE: El canal quedará habilitado en el modo recepción

CHANNEL_RXB_ENABLE: El canal quedará habilitado en el modo
recepción con búfer
149
finalmente la variable global utilizada se detallan a continuación:

can_msg_t *pt_st_can_rx: Puntero a la estructura que contendrá el
mensaje a recibir
Las funciones utilizadas para manejar las interrupciones son las
siguientes:
void fct_can_it(void): Función que se encarga de manejar las interrupciones
asociadas al bus CAN, esta a su vez puede llamar a 4 funciones:

void fct_can_it_txok(void): Esta función es llamada cuando un mensaje
es transmitido, para usar esta función debe:

Definir esta rutina en el archivo ‘config.h’:
#define USER_CAN_FCT_IT_TXOK


Crear esta función en el espacio de trabajo
void fct_can_it_rxok(void): Esta función es llamada cuando un mensaje
es recibido, para usar esta función debe:

Definir esta rutina en el archivo ‘config.h’:
#define USER_CAN_FCT_IT_RXOK


Crear esta función en el espacio de trabajo
void fct_can_it_error(void): Esta función es llamada cuando ocurre un
error en un canal específico, para usar esta función debe:

Definir esta rutina en el archivo ‘config.h’:
#define USER_CAN_FCT_IT_ERROR


Crear esta función en el espacio de trabajo
void fct_can_it_gen(void): Esta función es llamada cuando ocurre un
error en cualquier canal, para usar esta función debe:

Definir esta rutina en el archivo ‘config.h’:
#define USER_CAN_FCT_IT_GEN

Crear esta función en el espacio de trabajo
void fct_can_timovf_it(void): Función que se encarga de manejar la
150
interrupción producida por el desbordamiento del temporizador CAN, ésta,
a su vez, puede llamar a la siguiente función:

void fct_can_it_timovf(void): Esta función es llamada cuando el
temporizador CAN se desborda desde ‘0xFFFF’ a ‘0x0000’, para usar esta
función debe:

Definir esta rutina en el archivo ‘config.h’:
#define USER_CAN_FCT_IT_TIMOVF

Un
Crear esta función en el espacio de trabajo
ejemplo
de
la
utilización
del
archivo
‘config.h’
para
la
inclusión/exclusión de rutinas de interrupción (Figura 5.10) además del código
de las rutinas de interrupción (Figura 5.11) se muestran a continuación.
/******************************************************************************
* FILE_NAME: config.h
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is included by all source files in order to access *
*
to system wide configuration
*
******************************************************************************/
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include <t89c51cc01.h>
#include "compiler.h"
/* prototypes declaration */
#define USER_CAN_FCT_IT_TXOK
#define USER_CAN_FCT_IT_RXOK
#undef USER_CAN_FCT_IT_ERROR
#undef USER_CAN_FCT_IT_GEN
#undef USER_CAN_FCT_IT_TIMOVF
#endif /* _CONFIG_H_ */
Figura 5.10.- Ejemplo de utilización del archivo ‘config.h’ para la definición de rutinas
151
void fct_can_it(void) interrupt 7
{
save_canpage = CANPAGE;
/* save the current CANPAGE */
channel = FindFirstChIt(); /* find first channel interrupt */
if(channel ¡= NO_CHANNEL)
{
CAN_SET_CHANNEL(channel);
bit_var = CANSTCH;
/* tx or rx interrupt */
if(IT_TXOK)
{
#ifdef USER_CAN_FCT_IT_TXOK
can_fct_it_txok();
#endif /* USER_CAN_FCT_IT_TXOK */
}
if(IT_RXOK)
{
#ifdef USER_CAN_FCT_IT_RXOK
can_fct_it_rxok();
#endif /* USER_CAN_FCT_IT_RXOK */
}
/* error analysis */
if(¡IT_RXOK && ¡IT_TXOK)
{
#ifdef USER_CAN_FCT_IT_ERROR
can_fct_it_error();
#endif /* USER_CAN_FCT_IT_ERROR */
}
CANSTCH = 0x00; /* clear all channel status registers */
}
else /* (channel == NO_CHANNEL) */
{
/* no channel match with the interrupt => general it */
#ifdef USER_CAN_FCT_IT_GEN
can_fct_it_gen();
#endif /* USER_CAN_FCT_IT_GEN */
CANGIT &= 0xF0; /* clear all general errors */
}
CANPAGE = save_canpage; /* restore the old config */
}
void fct_can_timovf_it(void) interrupt 9
{
#ifdef USER_CAN_FCT_IT_TIMOVF
can_fct_it_timovf();
#endif /* USER_CAN_FCT_IT_TIMOVF */
CANGIT &= ~MSK_CANGIT_OVRTIM; /* clear overrun timer */
}
Figura 5.11.- Código de las rutinas de interrupción de la librería CAN
152
5.2.3.- LABORATORIO Nº2.1
En este laboratorio se ejemplificará la creación de un nodo transmisor y
receptor de mensajes CAN utilizando las librerías del fabricante, se verá la
configuración de la velocidad del sistema, la habilitación de las interrupciones
que permiten la transmisión y recepción de mensajes, tipos de tramas y filtrado
de mensajes visualizándolos en el puerto RS-232 tanto en el programa de
transmisión como el de recepción de tramas.
En primer lugar se verá la utilización en un programa encargado de
transmitir mensajes, a modo de ejemplo se muestra un programa en la
Figura 5.12 que envía mensajes con un identificador estándar ‘0x123’ y 8 bytes
de datos ‘{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}’ a una velocidad de
500Kbps cada 250ms.
153
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a simple CAN transmission sample software
*
******************************************************************************/
#include "config.h"
#include "can_lib.h"
Uint16 i;
can_data_t xdata data_tx = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
can_msg_t xdata msg_tx = {STD_ID(0x0123), CONF_NOIDE | CONF_NORTR | CONF_DLC_8,
data_tx};
void delay(Uint16 tempo)
{
for(i=0; i<tempo; i++);
}
void can_init(void)
{
CAN_CONTROLLER_RESET;
ClearAllMailbox();
CanSetBRP(BRP_500k);
CanSetSJW(SJW_500k);
CanSetPRS(PRS_500k);
CanSetPHS1(PHS1_500k);
CanSetPHS2(PHS2_500k);
CAN_CONTROLLER_ENABLE;
CAN_IT_ENABLE;
CAN_TX_IT_ENABLE;
}
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
reset can controller */
clear all ram of can controller */
configure can baud rate prescaler*/
configure can re-synchronization jump width */
configure can propagation time segment */
configure can phase segment 1 */
configure can phase segment 2 */
enable can controller */
enable can interrupts */
enable can transmission interrupt */
void can_fct_it_txok(void)
{
channel = CAN_GET_CHANNEL;
/* get interrupted channel */
CAN_CHANNEL_IT_DISABLE(channel); /* disable interrupt on channel */
}
void main(void)
{
can_init();
/* can initialisation */
EA = 1;
/* enable all interrupts
while(1)
/* start of endless loop */
{
delay(0xC350);
/*
can_tx_id
= msg_tx.id;
/*
conf_tx
= msg_tx.ctrl;
/*
pt_candata_tx = msg_tx.pt_data;
/*
CAN_SET_CHANNEL(CHANNEL_0);
/*
CAN_CHANNEL_IT_ENABLE(CHANNEL_0); /*
SendCanMsg();
/*
}
}
*/
delay for approx. 250ms */
message identifier */
message configuration */
message data pointer */
select message channel */
enable interrupt on channel */
send message */
Figura 5.12.- Ejemplo de utilización de la librería CAN para la transmisión de mensajes
154
En segundo lugar se verá la utilización en un programa encargado de
recibir mensajes, a modo de ejemplo se muestra un programa en la Figura 5.13
que sólo recibe mensajes con identificadores estándar que comienzan con
‘0x012X’ a una velocidad de 500kbps.
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a simple CAN reception sample software
*
******************************************************************************/
#include "config.h"
#include "can_lib.h"
can_data_t xdata data_rx = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
can_msg_t xdata msg_rx = {0x00, 0x00, data_rx};
void can_init(void)
{
CAN_CONTROLLER_RESET;
/* reset can controller */
ClearAllMailbox();
/* clear all ram of can controller */
CanSetBRP(BRP_500k);
/* configure can baud rate prescaler*/
CanSetSJW(SJW_500k);
/* configure can re-synchronization jump width */
CanSetPRS(PRS_500k);
/* configure can propagation time segment */
CanSetPHS1(PHS1_500k); /* configure can phase segment 1 */
CanSetPHS2(PHS2_500k); /* configure can phase segment 2 */
can_rx_filt.std = 0x012F;
/* accept only identifier */
can_rx_msk.std = 0x0120;
/* start by 0x012X */
conf_rx = CONF_NOIDE|CONF_MSK_IDE; /* accept only standard identifier */
CAN_SET_CHANNEL(CHANNEL_0);
/* select message channel */
CAN_CHANNEL_IT_ENABLE(CHANNEL_0);
/* enable interrupt on channel */
ConfChannel_Rx();
/* configure channel for reception */
CAN_CONTROLLER_ENABLE; /* enable can controller */
CAN_IT_ENABLE;
/* enable can interrupts */
CAN_RX_IT_ENABLE;
/* enable can reception interrupt */
}
void can_fct_it_rxok(void)
{
pt_st_can_rx = &msg_rx;
ReadCanMsg(CHANNEL_RX_ENABLE);
}
/* message data struct pointer */
/* read message and configure channel */
void main(void)
{
can_init(); /* can initialisation */
EA = 1;
/* enable all interrupts */
while(1);
/* start of endless loop */
}
Figura 5.13.- Ejemplo de utilización de la librería CAN para la recepción de mensajes
155
Hay que tomar énfasis que el recibir mensajes es un poco más complejo
que enviarlos ya que a diferencia de la transmisión, que se sabe exactamente
cuándo y cómo será enviado, en la recepción se tiene la incertidumbre del
momento y forma serán recibidos, por lo que hay que tomar las
consideraciones necesarias para este propósito.
La utilización de esta librería se ejemplifica en los proyectos can_tx.uv2
y can_rx.uv2 en donde se verá la inclusión de ésta en el programa principal
Además es necesario hacer notar que el programa dado que está en el
proyecto hace uso de la librería ‘bg.h’ y la librería ‘lcd.h’ además de la
configuración del puerto serie para mostrar los mensajes enviados y recibidos
por los nodos a una velocidad de 9600bps, otro punto a destacar es que el
programa que se da en el proyecto hace uso de interrupciones por hardware
presionando el botón de interrupción ‘INT1’ para ambos programas, en el
programa de envío actúa como iniciador de envío de mensajes mientras que en
el programa de recepción se encarga de mostrar el último mensaje enviado
hacia el bus CAN por el puerto RS-232, finalmente se entrega la estructura de
ambos programas en la Figura 5.14.
156
Figura 5.14.- Estructura de los proyectos ‘can_tx’ y ‘can_rx’
Se dejará como labor para el alumno compilar el programa escrito y
programar el kit de desarrollo para generar distintas velocidades de transmisión
para el bus CAN utilizando el programa ‘X-Calculator’ disponible en la página
del fabricante, como se muestra en la Figura 5.15.
157
Figura 5.15.- Utilidad para calcular la velocidad de bit para el bus CAN en el kit de desarrollo
Las velocidades a configurar por el alumno serán las mostradas en la
Tabla 5.8.
Tabla 5.8.- Velocidades de transmisión requeridas para la configuración del bus CAN
Velocidad de
transmisión [kbps]
500
250
100
Sample Point [%]
80 a 90
80 a 90
80 a 90
Como tarea adicional, el alumno deberá generar las configuraciones
indicadas en la Tabla 5.9 y Tabla 5.10 para el nodo transmisor y receptor
respectivamente.
158
Tabla 5.9.- Configuraciones requeridas para el nodo transmisor
Canal
0
1
2
3
4
5
Identificador
STD: 0123
STD: 0011
STD: 0321
EXT: 01234567
EXT: 00110022
EXT: 07654321
Trama
Datos
Datos
Remota
Datos
Datos
Remota
Longitud
8 bytes
4 bytes
6 bytes
8 bytes
4 bytes
6 bytes
Datos
11, 22, 33, 44, 55, 66, 77, 88
12, 34, 56, 78
11, 22, 33, 44, 55, 66, 77, 88
12, 34, 56, 78
-
Tabla 5.10.- Configuraciones requeridas para el nodo receptor
Canal
0
1
2
3
4
5
Filtro de Identificador
STD: 012X
STD: 001X
STD: 032X
EXT: 012345XX
EXT: 001100XX
EXT: 076543XX
Filtro de Trama
Datos y Remota
Datos
Remota
Datos y Remota
Datos
Remota
Para la visualización de mensajes enviados/recibidos por el bus CAN, se
puede conectar el puerto RS-232 del kit de desarrollo al puerto de
comunicaciones serie de un computador y configurarse como 9600-8-N-1-N, el
montaje utilizado se muestra en la Figura 5.16.
159
Figura 5.16.- Conexión entre el PC y el kit de desarrollo CAN para visualizar los mensajes de
los nodos trasmisor y receptor mediante RS-232
5.2.4.- LABORATORIO Nº2.2
En este laboratorio se ejemplificará la creación de un nodo transmisor y
receptor de mensajes CAN utilizando las librerías ‘bg.h’ y ‘lcd.h’ para poder
visualizar mensajes enviados a través del bus CAN haciendo uso de la barra de
LED’s y visualizándolos en la pantalla LCD y el puerto RS-232 tanto en el
programa de transmisión como el de recepción de tramas.
160
En primer lugar se verá la utilización en un programa encargado de
transmitir mensajes que se mostrará en el panel LCD y el puerto RS-232 con
identificador estándar que parte con el valor hexadecimal ‘0x0001’ y se irá
incrementando cada vez que se envía un mensaje, el campo de datos enviado
será de 8 bytes el cual partirá inicialmente con el valor ‘{0x11, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00}’ y se irá rotando e incrementando el byte más
significativo con el valor hexadecimal ‘0x11’ cada vez que se presiona el botón
de interrupción ‘INT1’.
Mientras que en segundo lugar el receptor será capaz de mostrar
cualquier mensaje de datos con identificador estándar que se transmita por el
bus CAN, en el panel LCD y el puerto RS-232. Adicionalmente cada vez que se
presiona el botón de interrupción ‘INT1’ se mostrará el último mensaje recibido
por el bus CAN en el puerto RS-232, la secuencia de los primeros 8 mensajes
que mostrará el panel LCD tanto el transmisor como el receptor se muestra en
la Figura 5.17.
Figura 5.17.- Serie de datos mostrados en el panel LCD
161
Los programas de los que se habla anteriormente se encuentran en los
proyectos can_gen.uv2 y can_mon.uv2, finalmente la estructura (Figura 5.14)
y montaje (Figura 5.16) es el mismo que el del ‘Laboratorio nº2.1’.
5.3.- ESTUDIO DE APLICACIONES GATILLADAS EN EL TIEMPO
El propósito de este laboratorio es familiarizar al alumno con el estudio
de aplicaciones gatilladas en el tiempo para realizar tareas que requieran cierta
periodicidad, para ello es necesario abarcar los siguientes aspectos:
•
Explicar cómo construir una aplicación basada en el tiempo para
sistemas empotrados.
•
Mostrar la implementación de programas que hagan uso de tareas
gatilladas en el tiempo.
•
Mostrar un programa que haga uso de interrupciones y retardos por
hardware.
Este laboratorio consta en ver la estructura de programas gatillados en
el tiempo implementados en el kit de desarrollo, se entregará al alumno
7 programas escritos en C que mostrarán el uso de:
•
Los proyectos de la barra de LED’s, la pantalla LCD, el puerto RS-232, el
envío secuencial y recepción de distintos mensajes CAN programados
como aplicaciones gatilladas en el tiempo.
•
Explicar mediante un programa el funcionamiento de 2 nodos actuando
cada uno tanto como transmisor y receptor de mensajes, el primer nodo
se encargará de generar 8 tipos distintos de mensajes de prueba
mientras que el segundo nodo se encargará de realizar funciones de
registro y replicación de datos.
162
5.3.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
Para la puesta en funcionamiento del kit de desarrollo es necesario
contar con herramientas de software y de hardware que se enumerarán a
continuación:
Tabla 5.11.- Requerimientos de software y de hardware para el laboratorio nº3
Requerimientos
Requerimientos de
Software
Requerimientos de
Hardware
Herramientas
Entorno de desarrollo integrado: Keil C51
Herramienta de programación del sistema: Atmel FLIP
Código de fuente de los programas ‘display’, ‘bargraph’,
‘rs232’, ‘can_gen’, ‘can_mon’, ‘can_tst’ y ‘can_log’
Programas compilados en formato hexadecimal ‘display.hex’,
‘bargraph.hex’, ‘rs232.hex’, ‘can_gen.hex’, ‘can_mon.hex’,
‘can_tst.hex’ y ‘can_log.hex’
Dos kits de desarrollo CAN además de sus respectivos
microcontroladores del tipo T89C51CC01UA-SLSIM
Un Cable Serie RS-232 DB9/DB9 (Macho/Hembra) para la
comunicación entre el kit de desarrollo y el computador
Un Cable Serie RS-232 DB9/DB9 (Macho/Macho) para la
comunicación entre ambos kits de desarrollo
5.3.2.- ESTRUCTURA DE APLICACIONES GATILLADAS EN EL TIEMPO
En estos laboratorios se describirá la creación de aplicaciones
gatilladas en el tiempo. La creación de una aplicación gatillada en el tiempo
se hace a través de un itinerario de tareas (schedule task), que puede ser visto
como un sencillo sistema operativo que permite la llamada a las tareas de
forma periódica o (de forma menos frecuente) la llamada a una sola tarea.
Desde el punto de vista de niveles más bajos, un itinerario de tareas puede ser
visto como una sencilla temporización usando interrupciones mediante un reloj
para generar rutinas que pueden ser compartidas entre diferentes tareas, como
resultado un solo reloj debe ser iniciado para ejecutar una, diez o cien tareas
diferentes, la estructura de un programa que hace uso de itinerarios se puede
ver en la Figura 5.18 y Figura 5.19.
163
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a schedule program example.
*
******************************************************************************/
#include "config.h"
#include "schedule.h"
void timer1_init(void)
{
TMOD |= 0x10;
/*
TH1 = 0xF8;
/*
TL1 = 0x52;
/*
ET1 = 1;
/*
TR1 = 1;
/*
}
timer 1 in mode 1, 16 bit mode */
reload value for */
timer 1 at 2ms */
enable timer 1 interrupt */
turn on timer 1 */
void main(void) /* main code */
{
timer1_init();
/* timer 1 initialisation */
schedule_init();
/* schedule initialisation */
EA = 1;
/* enable all interrupts */
while(1)
/* start of endless loop */
{
schedule(); /* schedule task */
}
}
void fct_timer1_it(void) interrupt 3
{
TH1 = 0xF8;
/* reload value for */
TL1 = 0x52;
/* timer 1 at 2ms */
TF1 = 0;
/* clear interrupt flag */
activate_new_schedul(); /* create new schedule */
}
Figura 5.18.- Estructura general del programa principal escrito en C para aplicaciones
gatilladas en el tiempo
164
/******************************************************************************
* FILE_NAME: schedule.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a schedule tasking example.
*
******************************************************************************/
#include
#include
#include
#include
#include
"config.h"
"schedule.h"
"task_1.h"
"task_2.h"
"task_3.h"
Uchar task_in_progress;
void call_next_task(void)
{
EA = 0;
/* disable all interrupts */
task_in_progress++; /* assign next task */
EA = 1;
/* enable all interrupts */
}
void schedule_init(void)
{
task_1_init();
task_2_init();
task_3_init();
task_in_progress = 1;
}
/*
/*
/*
/*
void schedule(void)
{
switch(task_in_progress)
{
case 1:
{
task_1();
call_next_task();
break;
}
case 2:
{
task_2();
call_next_task();
break;
}
case 3:
{
task_3();
call_next_task();
break;
}
default:
{
break;
}
}
}
task 1
task 2
task 3
assign
initialisation */
initialisation */
initialisation */
first task */
/* task 1 */
/* call next task */
/* break */
/* task 2 */
/* call next task */
/* break */
/* task 3 */
/* call next task */
/* break */
/* break */
165
void activate_new_schedul(void)
{
task_in_progress = 1;
/* assign first task */
}
Figura 5.19.- Estructura general del itinerario de tareas escrito en C para aplicaciones
gatilladas en el tiempo
5.3.3.- LABORATORIO Nº3.1
En esta primera serie de laboratorios se mostrará al alumno una
variación de los proyectos de la barra de LED’s, la pantalla LCD y el puerto
RS-232 programados como aplicaciones gatilladas en el tiempo, los proyectos
son bargraph.uv2, display.uv2 y rs232.uv2 y la estructura de los programas
de muestran en la Figura 5.20.
166
a) Proyecto ‘bargraph’
b) Proyecto ‘display’
c) Proyecto ‘rs232’
Figura 5.20.- Estructura de los proyectos ‘bargraph’, ‘display’ y ‘rs232’
167
5.3.4.- LABORATORIO Nº3.2
En la segunda serie de laboratorios se mostrará al alumno una variación
de los proyectos de transmisión y recepción de mensajes CAN programados
como aplicaciones gatilladas en el tiempo, los proyectos son can_tx.uv2 y
can_rx.uv2.
El primer programa consiste en transmitir mensajes con un identificador
estándar que se irá incrementando cada vez que se envía un mensaje, la trama
de datos consiste en 8 bytes los cuales se irán rotando e el byte más
significativo cada 2 segundos, además el cada vez que se presione el botón de
interrupción ‘INT1’ se enviará instantáneamente el mensaje almacenado sin la
necesidad de esperar los 2 segundos.
Mientras que en segundo lugar el receptor será capaz de mostrar
cualquier mensaje de datos con identificador estándar que se transmita por el
bus CAN en el panel LCD y el puerto RS-232, adicionalmente cada vez que se
presiona el botón de interrupción ‘INT1’ se mostrará el último mensaje recibido
por el bus CAN en el puerto RS-232.
168
Figura 5.21.- Estructura de los proyectos ‘can_tx’ y ‘can_rx’
5.3.5.- LABORATORIO Nº3.3
En la tercera serie de laboratorios se mostrará al alumno proyectos de
transmisión y recepción de mensajes CAN actuando como generador de
mensajes de prueba y de adquisición de datos programados como
aplicaciones gatilladas en el tiempo, los proyectos son can_tst.uv2 y
can_log.uv2.
En primer lugar, se verá la utilización en un programa encargado de
transmitir 8 tipos de mensajes secuenciales con identificadores estándar y
extendidos y se irá incrementando cada vez que se envía un mensaje, se
169
enviarán tramas remotas y de datos el que será variable además de ir rotando e
incrementando el byte más significativo cada 2 segundos, el cambio del tipo de
mensaje se hará cada vez que se presiona el botón de interrupción ‘INT1’; por
otro lado también será capaz de recibir mensajes e irá generando la misma
secuencia de mensajes anteriormente descrita según el último tipo de mensaje
recibido.
Mientras que en segundo lugar, el segundo programa será capaz de
mostrar cualquier mensaje ya sea con identificador estándar o extendido y
tramas remotas o de datos que se transmita por el bus CAN en el panel LCD y
el puerto RS-232, adicionalmente cada vez que se presiona el botón de
interrupción ‘INT1’ se mostrará el último mensaje recibido por el bus CAN en el
puerto RS-232.
Para la visualización de mensajes enviados/recibidos por el bus CAN, se
puede conectar el puerto RS-232 del kit de desarrollo al puerto de
comunicaciones serie de un computador y configurarse como 9600-8-N-1-N, el
montaje utilizado se muestra en la Figura 5.22.
170
Figura 5.22.- Conexión entre el PC y el kit de desarrollo CAN para visualizar los mensajes de
los nodos trasmisores/receptores mediante RS-232
5.4.- IMPLEMENTACIÓN DE APLICACIONES QUE HAGAN USO DEL
MODELO DE COMUNICACIÓN CAN
El propósito de este laboratorio es familiarizar al alumno con las
capacidades del bus CAN para implementar los distintos modelos de control
que permite el protocolo. Debido a que el sistema de comunicación está
basado en el modelo productor/consumidor, admite los modelos de control
multimaestro, maestro/esclavo, punto a punto, etc… el cual permite la
171
transmisión de mensajes mediantes diferentes métodos tales como sondeo,
muestreo, producción cíclica y cambio de estado.
En primera instancia se ejemplificará un control gatillado por eventos en
un esquema de comunicación multimaestro y en segundo lugar un control
cíclico en un esquema de comunicación maestro/esclavo tomando énfasis en
la programación orientada a la creación de aplicaciones de control en donde se
visualizarán las funciones de:
•
Sensor/Actuador (Esclavo).
•
Controlador (Maestro).
Se explicará la función que cumple los distintos tipos de mensajes en el
bus CAN para cada modelo de comunicación implementado emulando una red
de control.
5.4.1.- REQUERIMIENTOS DE SOFTWARE Y DE HARDWARE
Para la puesta en funcionamiento del kit de desarrollo es necesario
contar con herramientas de software y de hardware que se enumerarán a
continuación:
172
Tabla 5.12.- Requerimientos de software y de hardware para el laboratorio nº4
Requerimientos
Requerimientos de
Software
Requerimientos de
Hardware
Herramientas
Entorno de desarrollo integrado: Keil C51
Herramienta de programación del sistema: Atmel FLIP
Código de fuente de los programas ‘can_trn_n1’, ‘can_trn_n2’,
‘can_air_mst’ y ‘can_air_slv’
Programas compilados en formato hexadecimal
‘can_trn_n1.hex’, ‘can_trn_n2.hex’, ‘can_air_mst.hex’ y
‘can_air_slv.hex’
Dos kits de desarrollo CAN además de sus respectivos
microcontroladores del tipo T89C51CC01UA-SLSIM
Un Cable Serie RS-232 DB9/DB9 (Macho/Hembra) para la
comunicación entre el kit de desarrollo y el computador
Un Cable Serie RS-232 DB9/DB9 (Macho/Macho) para la
comunicación entre ambos kits de desarrollo
5.4.2.- FLEXIBILIDAD DEL MODELO PRODUCTOR/CONSUMIDOR
El modelo productor/consumidor viene a cubrir las deficiencias del
antiguo modelo cliente/servidor, ya que los mensajes se identifican por su
contenido y ofrece las siguientes ventajas:
•
Múltiples nodos pueden consumir los mismos datos simultáneamente
desde un sólo productor.
•
Los nodos se pueden sincronizar fácilmente para obtener un
rendimiento más preciso del sistema.
•
Los dispositivos se pueden comunicar autónomamente, sin la necesidad
de un maestro de sistema.
La versatilidad que permite éste modelo de comunicación se puede
apreciar en la Figura 5.23, la cual muestra un resumen de su flexibilidad y
prestaciones.
173
Figura 5.23.- Resumen de la flexibilidad del modelo productor/consumidor
También éste modelo permite implementar el modelo cliente/servidor,
tomando en consideración que cada nodo debe identificar los campos de
origen y destino en el identificador, la Figura 5.24 muestra el formato de los
mensajes para cada uno de los modelos.
Figura 5.24.- Formato de mensajes en los modelos: a) cliente/servidor y b)
productor/consumidor
5.4.3.- MONTAJE DEL SISTEMA
El montaje de los laboratorios Nodo1/Nodo2 y Maestro/Esclavo,
mostrados a continuación, se muestra en la Figura 5.25.
174
Figura 5.25.- Montaje para los laboratorios Nodo1/Nodo2 y Maestro/Esclavo
5.4.4.- LABORATORIO Nº4.1
En este laboratorio se verá el funcionamiento de un sistema de control
por
cambio
de
estado,
utilizando
un
modelo
de
comunicación
productor/consumidor y una jerarquía multimaestro ejemplificado en un
sistema de control de poleas de una cinta transportadora.
Cada nodo será considerado como una estación de tambores motrices
de la cinta transportadora en donde cada nodo podrá gatillar la dirección y
estado (ON/OFF) de la cadena de correas transportadoras, las consideraciones
a tomar serán las siguientes:
175
•
Al iniciar la secuencia de encendido el estado de cada uno de los nodos
será de espera (standby).
•
Cada nodo será capaz de iniciar el arranque del sistema de correas
transportadoras.
•
Al desconectarse un nodo de la energía eléctrica y posteriormente volver
a conectarse, la secuencia de inicio deberá considerar preguntar al
sistema el estado de funcionamiento (dirección y estado) para ser capaz
de replicar su estado de funcionamiento.
•
El direccionamiento de los nodos debido a que la información puede ser
originada y/o recibida por cualquier nodo de la red, por lo que cada
nodo será capaz de identificar el tipo de direccionamiento entregado el
cual, por el tipo de control empleado, será broadcast.
El hecho de que cada nodo no transmita información hasta que se
modifica el estado de las variables se le conoce como control por cambio de
estado y el hecho de que sea capaz de generar tareas de control en el sistema
y por ende cada nodo puede actuar como: sensor, actuador y controlador se
conoce como un direccionamiento multimaestro.
5.4.5.- LABORATORIO Nº4.2
En este laboratorio se verá el funcionamiento de un sistema de control
cíclico, utilizando un modelo de comunicación cliente/servidor y una jerarquía
maestro/esclavo
ejemplificado
en
un
sistema
de
control
de
aire
acondicionado de una planta.
Existirá un nodo maestro que se encargará se ejercer el control en los
dispositivos esclavos, las consideraciones a tomar serán las siguientes:
•
La estación maestra podrá ejercer un control de temperatura para días
176
soleados y días nublados y ser capaz de identificar cada estación que
entrega el estado de la condición ambiental y temperatura de la planta.
•
Cada estación esclava deberá enviar en intervalos periódicos el estado
de la temperatura de la planta y de control ejercido sobre éste.
•
El direccionamiento de los nodos debido a que la información puede ser
originada y/o recibida por cualquier nodo de la red, por lo que cada
nodo será capaz de identificar el tipo de direccionamiento entregado el
cual, por el tipo de control empleado, será unicast.
•
Las estaciones deberán ser capaces de diferenciar entre lo que es
información de control y datos.
El hecho de que cada nodo no transmita información a la red en
intervalos de tiempo fijo se le conoce como control cíclico y el hecho de que
una estación funcione como controlador y sea capaz de generar tareas de
control en el sistema y las demás estaciones ejecuten acciones de sensor y
actuador en el sistema se conoce como un direccionamiento maestro/esclavo.
177
CAPÍTULO 6.- CONCLUSIONES
En base a la bibliografía consultada, se logró comprender los
fundamentos del protocolo CAN y sus características, como resultado de esto
se presentó un diseño de experiencias de laboratorio utilizando un kit de
desarrollo, permitiendo al alumno entender los aspectos más relevantes del
bus CAN y hacerse una idea de la implementación de los distintos modelos de
control en torno a este estándar.
La elección del set de experiencias de laboratorio no solamente ayuda al
aprendizaje del bus CAN, sino que además, contribuye a entender como
funcionan los buses de campo en general, ya que los aspectos a considerar
son similares en todos éstos, como por ejemplo, el que los nodos de un
sistema de control con reloj propio necesariamente deben ser configurados
para trabajar a la misma velocidad para que el sistema funcione
adecuadamente, además se debe considerar que en todo sistema de control
se debe asignar un direccionamiento para la comunicación entre los nodos,
entre otros aspectos relevantes.
Por otro lado, desde el punto de vista del diseño y programación de
sistemas
empotrados,
nos
permite
justificar
y
discutir
los
aspectos
relacionados con la creación de aplicaciones para microcontroladores, así
como, dejar en evidencia la importancia del diseño de software y el
conocimiento de la interfaz software/hardware.
Como aspectos transversales del estudio del bus CAN, se abarcan
aspectos relacionados con el estudio del lenguaje de programación C, el cual
corresponde al lenguaje más ampliamente difundido para crear aplicaciones en
microcontroladores, se añade además, el entendimiento de rutinas que hagan
178
uso de distintas filosofías de programación así como la importancia del uso de
interrupciones para facilitar la ejecución paralela de distintas tareas a la vez.
Finalmente, como trabajo futuro se pueden considerar el reforzar los
conocimientos de los distintos estándares existentes en torno a la capa de
aplicación que utilizan como base el protocolo CAN, así como también, buscar
potenciales aplicaciones para este kit de desarrollo, las cuales podrían incluir:
crear herramientas de diagnóstico del bus, crear interfaces para la
interpretación de datos de un sistema, generar rutinas de fiabilidad de un
sistema, o generar un sistema de control que cumpla con alguno de los
estándares de la capa aplicación basados en el protocolo CAN.
179
GLOSARIO
ACK
Acknowledge
ADC
Analog-to-Digital Converter
ANSI
American National Standards Institute
API
Application Program Interface
ASCII
American Standard Code for Information Interchange
AS-Interface
Actuator Sensor-Interface
CAL
CAN Application Layer
CAN
Controller Area Network
CiA
CAN in Automation
CIP
Control and Information Protocol
CMS
CAN based Message Specification
CPU
Central Processing Unit
CRC
Cyclic Redundancy Check
CSMA/CA
Carrier Sense Multiple Access with Collision Avoidance
CSMA/CD
Carrier Sense Multiple Access with Collision Detection
CSMA/NBA
Carrier Sense Multiple Access with Non-destructive Bitwise
Arbitration
CTRL
Control
DBT
Identifier Distributor
DCE
Data Communication Equipment
DLC
Data Length Code
DLL
Data Link Layer
DP
Decentralized Periphery
DS
Draft Standard
DTE
Data Terminal Equipment
ECU
Electronic Control Unit
180
EDS
Electronic Data Sheet
EEPROM
Electrically Erasable Programmable Read Only Memory
EIA
Electronic Industries Alliance
EN
Européenne Norme
EOF
End of Frame
EWC
Event and Waveform Controller
FLIP
Flexible In-System Programmer
GND
Ground
HART
Highway Addressable Remote Transducer
HLP
High Layer Protocol
ISP
In-System Programming
ISR
Interrupt Service Routine
I/O
Input/Output
ID
Identifier
IDE
Identifier Extension / Integrated Development Environment
IEC
International Electrotechnical Commission
LCD
Liquid Crystal Display
LED
Light-Emitting Diode
LLC
Logical Link Control
LME
Layer Management Entity
LMT
Layer Management
LSDU
Link Service Data Units
MAC
Medium Access Control
MAP
Manufacturing Automation Protocol
MCU
Microcontroller Unit
MDI
Medium Dependent Interfaz
MODEM
Modulator-Demodulator
NMT
Network Management
181
NRZ
Non-Return to Zero
OD
Object Dictionary
ODVA
Open DeviceNet Vendor Association
OOK
On-Off Keying
OS
Operating System
OSEK
Offene Systeme und deren schnittstellen für die Elektronik
im Kraftfahrzeug
OSI
Open System Interconnection
PC
Personal Computer
PCA
Programmable Counter Array
PDO
Process Data Object
PHY
Physical Layer
PLCC
Plastic Leaded Chip Carrier
PLL
Phase Locked Loop
PLS
Physical Signalling
PMA
Physical Medium Attachment
PROFIBUS
Process Field Bus
RAM
Random Access Memory
REC
Receive Error Counter
RJW
Re-synchronization Jump Width
RS
Recommended Standard
RTR
Remote Transmission Request
SAE
Society of Automotive Engineers
SDO
Service Data Object
SDS
Smart Distributed System
SFR
Special Function Registers
SJW
Synchronization Jump Width
SOF
Start of Frame
182
SRR
Substitute Remote Request
TEC
Transmit Error Counter
TTCAN
Time Triggered CAN
TTL
Transistor-Transistor Logic
UART
Universal Asynchronous Receiver/Transmitter
USB
Universal Serial Bus
VDX
Vehicle Distributed eXecutive
183
BIBLIOGRAFÍA
[1] Atmel Corporation, AT89C51CC01 Datasheet Enhanced 8-bit MCU with
CAN Controller and Flash Memory, San José, 2008.
[2] Atmel Corporation, Atmel C51 Hardware Manual, San José, 2004.
[3] Atmel Corporation, C51 Microcontrollers Demo Board, San José, 2002.
[4] Atmel Corporation, CAN Demoboard User Guide, San José, 2003.
[5] Atmel Corporation, Using Keil FlashMon Emulator with AT89C51CC01/03,
San José, 2006.
[6] K. Ayala, The 8051 Microcontroller, Jackson County: West Publishing,
1991.
[7] M. Beach y C. Hills, The C51 Primer, Staffordshire: Phaedrus Systems,
2006.
[8] D. Calcutt, F. Cowan y H. Parchizadeh, 8051 Microcontrollers, Oxford:
Newnes, 2004.
[9] J. Q. Castellano, Bus CAN: Estado de Buses Industriales y Aplicaciones,
Madrid, 2000.
[10] S. Cavalieri, A. Di Stefano y O. Mirabella, Centralized versus distributed
protocols for FieldBus applications, Cantania, 1995.
184
[11] C. A. Chamú Morales, Desarrollo de un Sistema Educativo para la
Enseñanza del Protocolo de Comunicaciones CAN, Huajuapan de León,
2005.
[12] M. Chapman, The Final Word on the 8051, San Diego, 1994.
[13] M. Distefano, Comunicaciones en Entornos Industriales, Mendoza, 2000.
[14] J. J. Fernández de Dios, Foundation Fieldbus y su adaptación a la alta
velocidad: HSE, Vigo, 2005.
[15] J. P. Ferrari, Sistemas de Control Distribuido, Rosario, 2005.
[16] I. M. Gómez González, Análisis y Diseño de Protocolos de Acceso al Medio
para el Control de Redes Eléctricas, Sevilla, 1995.
[17] R. C. Guevara Calume, Maestría en Automatización y Control Industrial,
Medellín, 2010.
[18] D. Ibrahim, Microcontroller Projects in C for the 8051, Oxford: Newnes,
2000.
[19] M. Ilyas y I. Mahgoub, Handbook of Sensor Networks Compact Wireless
and Wired Sensing Systems, Florida: CRC, 2005.
[20] H. Kaschel C. y E. Pinto L., Análisis de la Capa Física del Bus de Campo
CAN, Santiago, 2004.
[21] H. Kaschel C. y E. Pinto L., Análisis del Estado del Arte de los Buses de
Campo Aplicados al Control de Procesos Industriales, Santiago, 2002.
185
[22] H. Kaschel C. y E. Pinto L., Análisis Protocolar del Bus de Campo CAN,
Santiago, 2002.
[23] H. Kaschel C. y E. Pinto L., Implementación de la Capa Física del Bus de
Campo CAN, Santiago, 2004.
[24] H. Kaschel C. y E. Pinto L., Sistema de Diagnóstico y Sincronización de los
Buses de Campo CAN, Santiago, 2002.
[25] Keil Software, CAN Primer: Creating Your Own Network, Plano, 2009.
[26] Keil Software, Getting Started with µVision2 and C51 Microcontroller
Development Tools, Plano, 2001.
[27] B. W. Kernighan y D. M. Ritch, The C Programming Language, West
Lafayette: Prentice Hall, 1998.
[28] S. MacKenzie, The 8051 Microcontroller, West Lafayette: Prentice Hall,
1995.
[29] M. T. C. Medina, Análisis del Protocolo CAN (Controller Area Network) e
Implementación de un Prototipo de Control de Nodos Interconectados por
un Bus de Comunicaciones CAN, Quito, 2008.
[30] M. Molero Bastante, Bus CAN Diseño de Sistemas Críticos, Ciudad Real,
2005.
[31] M. Ortiz, F. Quiles, C. Moreno, M. Montuano, M. Brox y A. Gersnoviez,
CAN2PCI: Placa con Interfaz al Bus CAN y PCI con Finalidad Docente,
Córdoba, 2008.
186
[32] J. Parab, V. Shelake, R. Kamat y G. Naik, Exploring C For Microcontrollers
8051, Dordrecht: Springer, 2007.
[33] M. Pont, Embedded C, London: Addison-Wesley, 2002.
[34] M. Pont, Patterns for Time-Triggered Embedded Systems, London:
Addison-Wesley, 2011.
[35] M. Pont, Programming Embedded System I, Leicester: University of
Leicester, 2006.
[36] M. Pont, Programming Embedded System II, Leicester: University of
Leicester, 2007.
[37] A. Rosado, Sistemas Industriales Distribuidos: Tema 2, Valencia, 2003.
[38] Samson, Foundation Fieldbus: Part 4, Frankfurt, 2003.
[39] J. Sánchez Peñarroja, Controller Area Network, Valencia, 2007.
[40] T. Schultz, C and the 8051, West Lafayette: Prentice Hall, 1997.
[41] Silicon Graphics, C Language Reference Manual, Fremont: SGI Technical
Publications, 2003.
[42] G. Tejada Muñoz, Tutorial de Fieldbus, Lima, 1998.
187
ANEXOS
188
ANEXO A: GUÍAS DE LABORATORIO
189
EXPERIENCIA Nº1:
REFERENCIAS PARA LA UTILIZACIÓN DEL KIT DE DESARROLLO CAN
OBJETIVOS: El propósito de este laboratorio es describir los
componentes de software y de hardware
necesarios para la utilización del kit de desarrollo
CAN.
INTRODUCCIÓN: Para familiarizar al alumno con el kit de desarrollo y las
herramientas de trabajo, se analizarán los componentes de software y de
hardware con los que se trabajará posteriormente además de la configuración
del kit para la puesta en funcionamiento.
DESCRIPCIÓN DEL HARDWARE: Cada kit de desarrollo incluye dos placas:
una tarjeta de demostración C51 (C51 Demo Board) y una tarjeta de extensión
CAN (CAN Extension Board) dedicada a los dispositivos CAN las cuales se
interconectan.
Para programar el kit de desarrollo existen 2 condiciones de hardware que
afectan la forma en que se inicia el sistema. El kit de desarrollo se encarga de,
según el posicionamiento de los interruptores: J9, J11 y J16, saltar la ejecución
del programa principal para ejecutar el gestor de arranque y realizar tareas de
programación en el microcontrolador (modo Gestor de Arranque) o, en sentido
contrario, saltar la ejecución del gestor de arranque para ejecutar la aplicación
principal (modo Aplicación de Usuario).
190
a) Condición de hardware configurado para
arrancar en modo ‘Gestor de Arranque’
b) Condición de hardware configurado para
arrancar en modo ‘Aplicación de Usuario’
DESCRIPCIÓN DEL SOFTWARE: Para poder utilizar el kit de desarrollo de
precisan principalmente de 2 programas:
•
•
Entorno de desarrollo integrado.
Herramienta de programación del sistema.
Un entorno de desarrollo integrado o IDE (Integrated Development
Environment), es un programa informático compuesto por un conjunto de
herramientas de programación consistente en un editor de código, un
compilador y un depurador. El entorno de desarrollo que se utilizará en los
siguientes apartados corresponde a las herramientas de desarrollo de la
compañía Keil para los microcontroladores Intel 8051 llamado “Keil C51
Development Tools”, el cual permite la programación de aplicaciones escritas
en lenguaje C y Assembly.
La herramienta de programación del sistema es llamado por la compañía Atmel
como FLIP (FLexible In-system Programmer), es un software que se ejecuta en
el computador y sirve para la programación de microcontroladores de dicha
compañía. Ésta herramienta puede programar dispositivos dentro del sistema
(ISP: In-System Programming) a través de UART, USB y CAN. El tipo de
programación que se utilizará para los proyectos será por medio del puerto
RS-232 (UART) y la interconexión al PC será la siguiente:
191
CUESTIONARIO: Las preguntas siguientes deben ser respondidas por el
alumno; ya que, más de alguna será formulada antes de la experiencia.
1.- Explique las características y diferencias entre las arquitecturas von
Neumann y Harvard.
2.- Entregue la distribución de pines del microcontrolador Atmel
T89C51CC01 y los tipos de interrupciones que pueden gatillarse en el
microcontrolador Atmel T89C51CC01 junto con su numeración.
3.- Describa brevemente los siguientes componentes de hardware del kit de
desarrollo CAN: microcontrolador, conectores de energía, reloj del
sistema, interruptor de encendido/apagado, botón de reinicio, botón de
interrupción, pantalla LCD, barra de LED's, puerto RS-232 y puerto CAN.
PARTE EXPERIMENTAL: En primer lugar se debe proceder a establecer las
condiciones de hardware que se requieren para programar el kit de desarrollo
las cuales se describen a continuación:
1.- Interconectar la tarjeta de demostración C51 (C51 Demo Board) con la
tarjeta de extensión CAN (CAN Extension Board).
2.- Energizar la tarjeta de demostración C51 conectando el suministro de
energía de 9V.
3.- Conectar el puerto RS-232 de la tarjeta de demostración C51 al puerto
de comunicaciones COM del PC mediante un cable RS-232
Macho/Hembra.
4.- Asegurarse que el microcontrolador T89C51CC01UA-SLIM esté
192
conectado al zócalo PLCC44 de la tarjeta de extensión CAN.
En segundo lugar veremos los pasos necesarios para utilizar el software de
programación FLIP y verificar que se han establecido correctamente los
parámetros necesarios para poder programar la tarjeta de demostración:
1.- En primer lugar ejecutar el programa FLIP.
2.- Diríjase al menú desplegable ‘Device → Select’ seleccione el dispositivo
‘T89C51CC01’, nótese que la ventana de la aplicación mostrará ahora la
configuración del microcontrolador.
3.- Asegúrese de que el kit de desarrollo se encuentre debidamente
conectado al PC con la condición de hardware configurado para
arrancar en modo ‘Gestor de Arranque’ y posteriormente encienda el kit
de desarrollo.
4.- A continuación seleccione el menú desplegable ‘Settings →
Communication → RS232’, en la ventana de configuración ‘RS232
Setup’ escoja de puerto COM al cual esté conectado el kit de desarrollo
y configure la velocidad de transmisión con una velocidad de
transmisión de 9600bps.
5.- Iniciar la comunicación presionando el botón ‘Connect’ de la ventana de
configuración ‘RS232 Setup’.
6.- En el menú desplegable ‘File → Load HEX File…’ elija la aplicación que
desee programar en el microcontrolador, previamente compilada y en
formato binario hexadecimal. El mensaje ‘HEX file parsed’ mostrado en
la parte inferior de la ventana del programador FLIP confirma que la
carga del archivo fue exitosa.
7.- Asegurarse que las casillas de verificación siguientes están
seleccionadas en la sección ‘Operations Flow’ del FLIP: Erase, Blank
Check, Program y Verify.
8.- Deje sin verificar el cuadro de ‘BLJB’ en la sección ‘T89C51CC01’ a fin
de ejecutar el programa de demostración después del siguiente reinicio.
9.- Presione el botón ‘Run’ para que la programación se ejecute. El mensaje
‘Verify PASS’ mostrado en la parte inferior de la ventana del
programador FLIP confirma que el microcontrolador se ha programado
correctamente.
10.- Una vez programado asegúrese de que el kit de desarrollo se
encuentre con la condición de hardware configurado para arrancar en
modo ‘Aplicación de Usuario’.
11.- Finalmente reinicie el kit de desarrollo para iniciar la aplicación
programada en el microcontrolador.
193
BIBLIOGRAFÍA
[1] Atmel Corporation, AT89C51CC01 Datasheet Enhanced 8-bit MCU with
CAN Controller and Flash Memory, San José, 2008.
[2] Atmel Corporation, Atmel C51 Hardware Manual, San José, 2004.
[3] Atmel Corporation, C51 Microcontrollers Demo Board, San José, 2002.
[4] Atmel Corporation, CAN Demoboard User Guide, San José, 2003.
[5] Atmel Corporation, Using Keil FlashMon Emulator with AT89C51CC01/03,
San José, 2006.
[6] Keil Software, Getting Started with µVision2 and C51 Microcontroller
Development Tools, Plano, 2001.
[7] E. Ossandón, Diseño e Implementación de un Sistema Educativo del
Protocolo de Comunicaciones CAN, Santiago, 2011.
194
EXPERIENCIA Nº2:
INTRODUCCIÓN A LA PROGRAMACIÓN DE APLICACIONES PARA EL KIT DE
DESARROLLO
OBJETIVOS: El propósito de este laboratorio es familiarizar al
alumno con el kit de desarrollo y las
herramientas necesarias para la creación,
compilación y programación para éste.
INTRODUCCIÓN: Para familiarizar al alumno en la programación de
aplicaciones para el kit de desarrollo es necesario abarcar los siguientes
aspectos:
•
•
•
Explicar la estructura general de un programa escrito en lenguaje C y
mostrar ejemplos que haga uso de los distintos componentes del kit de
desarrollo.
Mostrar un programa que haga uso de interrupciones y retardos por
software y mostrar la importancia del reloj del sistema para la
comunicación asíncrona.
Configurar los parámetros necesarios para comunicarse a distintas
velocidades mediante puerto RS-232 del microcontrolador.
CONVENCIONES DE PROGRAMACIÓN: En todos los proyectos que se
mostrarán desde ahora en adelante hará uso de un archivo de configuración
llamado ‘config.h’ que estará incluido en el código de fuente de todos los
archivos con el fin de compartir las configuraciones en todos los proyectos, tal
como se muestra a continuación:
195
/******************************************************************************
* FILE_NAME: config.h
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is included by all source files in order to access *
*
to system wide configuration
*
******************************************************************************/
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include <t89c51cc01.h>
#include "compiler.h"
#endif /* _CONFIG_H_ */
Éste archivo hace a su vez la inclusión de los archivos ‘t89c51cc01.h’ y
‘compiler.h’. El archivo ‘t89c51cc01.h’ añade el manejo los registros de
funciones encargados del direccionamiento para el microcontrolador
T89C51CC01; mientras que el archivo ‘compiler.h’ redefine las palabras clave
con el fin de asegurarse de que cualquier archivo de origen pueda ser
procesado por distintos compiladores además de definir nombres para tipos
de datos que hagan más fácil el declarar variables y parámetros (también
llamados ‘alias’).
ESTRUCTURA DE UN PROGRAMA: La estructura de un programa escrito en
C para un microcontrolador es básicamente la misma estructura de un
programa estándar en C con algunos cambios menores, cuya estructura típica
se muestra a continuación:
196
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* This is the program header. Describe your program here briefly
*
******************************************************************************/
/* include your headers here */
#include "config.h"
/* include your variable declarations here */
bit
Uchar
Uint16
var_1;
var_2;
var_3;
/* include your functions here */
void func_1(void)
{
/* body of function */
}
/* include your main code here */
void main(void) /* main code */
{
/* initialisation of variables */
}
while(1)
/* start of endless loop */
{
/* body of loop */
}
RUTINAS DE INTERRUPCIÓN: El compilador C51 permite declarar rutinas de
interrupción en el código C para que el programa se dirija automáticamente a
ese código cuando se produzca una interrupción, genera automáticamente los
vectores de interrupción además del código para entrar y salir de las rutinas de
interrupción. El esquema de las rutinas de interrupción es similar a la
declaración de funciones con la salvedad que el número de interrupción debe
declararse como parte de la función, tal como se muestra a continuación:
void fct_timer1_it(void) interrupt 3
{
/* interrupt service goes here */
}
197
CUESTIONARIO: Las preguntas siguientes deben ser respondidas por el
alumno; ya que, más de alguna será formulada antes de la experiencia.
1.- Explique la importancia de las comunicaciones asíncronas y los
principales beneficios de éste tipo de comunicación.
2.- Revise los archivos ‘t89c51cc01.h’ y ‘compiler.h’ de cada proyecto
entregado y explique en qué consisten los SFR (Special Function
Registers).
3.- Entregue una tabla resumen de las definiciones de tipo o ‘alias’ que
posee el archivo ‘compiler.h’.
4.- Explicar los niveles de voltaje e impedancia y campos que maneja el
protocolo RS-232, además de las características de: velocidad de
transmisión, bits de datos, paridad, bits de parada y control de flujo.
PARTE EXPERIMENTAL: Este laboratorio consta de utilizar las librerías
creadas específicamente para hacer uso de los componentes de hardware
implementados en el kit de desarrollo, se entregará al alumno 3 programas
escritos en C que mostrarán el uso de:
•
•
•
La barra de LED’s.
La pantalla LCD.
El puerto RS-232.
Se dejará como labor para el alumno compilar el programa escrito y programar
el kit de desarrollo. En el proyecto que utiliza el puerto RS-232 y según las
ecuaciones que se muestran a continuación:
198
Cálculo de recarga para el Timer 0/1
TH0/TH1 = 256 −
Baud Rate =
Cálculo de recarga para el Timer 2
2SMOD × FOSC
384 × Baud Rate
2SMOD × FOSC
2 × 32 × [256 − TH0/TH1]
(RCAP2H, RCAP2L) = 65536 −
Baud Rate =
2SMOD × FOSC
32 × Baud Rate
2SMOD × FOSC
32 × [65536 − (RCAP2H, RCAP2L)]
obtenga los valores de recarga de los registros TH0/TH1 o RCAP2H y RCAP2L
según sea el caso para obtener las distintas velocidades de transmisión
entregadas a continuación:
Velocidad de transmisión
[bps]
57600
38400
19200
14400
9600
4800
2400
1200
Temporizador
Timer 2
Timer 2
Timer 2
Timer 2
Timer 2
Timer 0/1
Timer 0/1
Timer 0/1
Para la visualización de mensajes entregados por el microcontrolador a través
del puerto de comunicaciones RS-232, el kit de desarrollo debe conectarse al
puerto de comunicaciones serie de un computador, utilizar un terminal RS-232
estándar como Hyperterminal y configurar el puerto serie del PC conectado al
kit de desarrollo como 8-N-1-N (8 bits de datos, sin paridad, 1 bit de parada y
sin control de flujo) en donde la velocidad de transmisión está dada por la
configuración especificada en el microcontrolador.
199
BIBLIOGRAFÍA
[1] K. Ayala, The 8051 Microcontroller, Jackson County: West Publishing,
1991.
[2] M. Beach y C. Hills, The C51 Primer, Staffordshire: Phaedrus Systems,
2006.
[3] D. Calcutt, F. Cowan y H. Parchizadeh, 8051 Microcontrollers, Oxford:
Newnes, 2004.
[4] M. Chapman, The Final Word on the 8051, California, 1994.
[5] D. Ibrahim, Microcontroller Projects in C for the 8051, Oxford: Newnes,
2000.
[6] B. W. Kernighan y D. M. Ritch, The C Programming Language, West
Lafayette: Prentice Hall, 1998.
[7] S. MacKenzie, The 8051 Microcontroller, West Lafayette: Prentice Hall,
1995.
[8] E. Ossandón, Diseño e Implementación de un Sistema Educativo del
Protocolo de Comunicaciones CAN, Santiago, 2011.
[9] J. Parab, V. Shelake, R. Kamat y G. Naik, Exploring C For Microcontrollers
8051, Dordrecht: Springer, 2007.
[10] M. Pont, Embedded C, London: Addison-Wesley, 2002.
[11] M. Pont, Programming Embedded System I, Leicester: University of
Leicester, 2006.
200
[12] T. Schultz, C and the 8051, West Lafayette: Prentice Hall, 1997.
[13] Silicon Graphics, C Language Reference Manual, Fremont: SGI Technical
Publications, 2003.
201
EXPERIENCIA Nº3:
ESTUDIO DE LA CAPA FÍSICA Y DE ENLACE DE DATOS DEL PROTOCOLO
CAN
OBJETIVOS: El propósito de este laboratorio es familiarizar al
alumno con el estudio de la capa física y de
enlace de datos del protocolo CAN haciendo uso
del kit de desarrollo.
INTRODUCCIÓN: Para familiarizar al alumno con el estudio de la capa física y
de enlace de datos del protocolo CAN es necesario abarcar los siguientes
aspectos:
• Explicar cómo crear un nodo para generar transmisión y recepción de
mensajes utilizando las librerías entregadas por el fabricante.
• Mostrar la estructura general de una trama CAN, campos de:







SOF (inicio de trama)
Identificador (estándar o extendido)
Control (tipo de trama y número de bytes de datos)
Datos (mensaje de hasta 8 bytes)
CRC (detección de errores)
ACK (acuse de recibo)
EOF (fin de trama)
• Detallar la configuración de los registros necesarios para obtener
comunicaciones a distintas velocidades.
TRANSMISIÓN DE MENSAJES CAN: En primer lugar se verá la utilización en
un programa encargado de transmitir mensajes, a modo de ejemplo se muestra
a continuación un programa que envía mensajes con un identificador estándar
‘0x123’ y 8 bytes de datos ‘{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}’ a
una velocidad de 500Kbps cada 250ms.
202
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a simple CAN transmission sample software
*
******************************************************************************/
#include "config.h"
#include "can_lib.h"
Uint16 i;
can_data_t xdata data_tx = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88};
can_msg_t xdata msg_tx = {STD_ID(0x0123), CONF_NOIDE | CONF_NORTR | CONF_DLC_8,
data_tx};
void delay(Uint16 tempo)
{
for(i=0; i<tempo; i++);
}
void can_init(void)
{
CAN_CONTROLLER_RESET;
ClearAllMailbox();
CanSetBRP(BRP_500k);
CanSetSJW(SJW_500k);
CanSetPRS(PRS_500k);
CanSetPHS1(PHS1_500k);
CanSetPHS2(PHS2_500k);
CAN_CONTROLLER_ENABLE;
CAN_IT_ENABLE;
CAN_TX_IT_ENABLE;
}
/*
/*
/*
/*
/*
/*
/*
/*
/*
/*
reset can controller */
clear all ram of can controller */
configure can baud rate prescaler*/
configure can re-synchronization jump width */
configure can propagation time segment */
configure can phase segment 1 */
configure can phase segment 2 */
enable can controller */
enable can interrupts */
enable can transmission interrupt */
void can_fct_it_txok(void)
{
channel = CAN_GET_CHANNEL;
/* get interrupted channel */
CAN_CHANNEL_IT_DISABLE(channel); /* disable interrupt on channel */
}
void main(void)
{
can_init();
/* can initialisation */
EA = 1;
/* enable all interrupts
while(1)
/* start of endless loop */
{
delay(0xC350);
/*
can_tx_id
= msg_tx.id;
/*
conf_tx
= msg_tx.ctrl;
/*
pt_candata_tx = msg_tx.pt_data;
/*
CAN_SET_CHANNEL(CHANNEL_0);
/*
CAN_CHANNEL_IT_ENABLE(CHANNEL_0); /*
SendCanMsg();
/*
}
}
*/
delay for approx. 250ms */
message identifier */
message configuration */
message data pointer */
select message channel */
enable interrupt on channel */
send message */
203
RECEPCIÓN DE MENSAJES CAN: En segundo lugar se verá la utilización en
un programa encargado de recibir mensajes, a modo de ejemplo se muestra a
continuación un programa que sólo recibe mensajes con identificadores
estándar que comienzan con ‘0x012X’ a una velocidad de 500kbps.
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a simple CAN reception sample software
*
******************************************************************************/
#include "config.h"
#include "can_lib.h"
can_data_t xdata data_rx = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
can_msg_t xdata msg_rx = {STD_ID(0x00, 0x00, data_rx};
void can_init(void)
{
CAN_CONTROLLER_RESET;
/* reset can controller */
ClearAllMailbox();
/* clear all ram of can controller */
CanSetBRP(BRP_500k);
/* configure can baud rate prescaler*/
CanSetSJW(SJW_500k);
/* configure can re-synchronization jump width */
CanSetPRS(PRS_500k);
/* configure can propagation time segment */
CanSetPHS1(PHS1_500k); /* configure can phase segment 1 */
CanSetPHS2(PHS2_500k); /* configure can phase segment 2 */
can_rx_filt.std = 0x012F;
/* accept only identifier */
can_rx_msk.std = 0x0120;
/* start by 0x012X */
conf_rx = CONF_NOIDE|CONF_MSK_IDE; /* accept only standard identifier */
CAN_SET_CHANNEL(CHANNEL_0);
/* select message channel */
CAN_CHANNEL_IT_ENABLE(CHANNEL_0);
/* enable interrupt on channel */
ConfChannel_Rx();
/* configure channel for reception */
CAN_CONTROLLER_ENABLE; /* enable can controller */
CAN_IT_ENABLE;
/* enable can interrupts */
CAN_RX_IT_ENABLE;
/* enable can reception interrupt */
}
void can_fct_it_rxok(void)
{
pt_st_can_rx = &msg_rx;
ReadCanMsg(CHANNEL_RX_ENABLE);
}
/* message data struct pointer */
/* read message and configure channel */
void main(void)
{
can_init(); /* can initialisation */
EA = 1;
/* enable all interrupts */
while(1);
/* start of endless loop */
}
204
CUESTIONARIO: Las preguntas siguientes deben ser respondidas por el
alumno; ya que, más de alguna será formulada antes de la experiencia.
1.- Investigue los niveles de voltaje e impedancia que maneja el protocolo
CAN, según los siguientes estándares: ISO 11898-2, ISO 11898-3,
SAE J2411 e ISO 11992.
2.- Estudie la forma de arbitraje del bus, los tipos de tramas y el tipo de
codificación de línea en el protocolo CAN e indique que tipo de
mensajes tienen prioridad por sobre otros: identificador estándar v/s
identificador extendido (que compartan el mismo identificador base),
trama de datos v/s trama remota y finalmente que identificado tiene
prioridad por sobre otro (mayor o menor identificador).
3.- En base a los ejemplos entregados, entregue una tabla resumen del uso
de las funciones contenidas en el archivo ‘can_lib.c’ y las definiciones de
tipo o ‘alias’ que posee el archivo ‘can_lib.h’.
PARTE EXPERIMENTAL: Este laboratorio consta de utilizar las librerías CAN
entregadas por el fabricante para la programación del kit de desarrollo, se
entregará al alumno 4 programas escritos en C que mostrarán el uso de:
•
•
Envío y recepción de distintos mensajes CAN (tramas de datos y
remotas) a distintas velocidades.
Rutinas de envío secuencial y recepción de mensajes CAN, mostrados
en la barra de LED’s, el panel LCD y el puerto RS-232.
Se dejará como labor para el alumno compilar el programa escrito y programar
el kit de desarrollo para generar distintas velocidades de transmisión para el
bus CAN utilizando el programa ‘X-Calculator’ disponible en la página del
fabricante, las velocidades a configurar por el alumno serán las mostradas en la
siguiente tabla:
Velocidad de
transmisión [kbps]
500
250
100
Sample Point [%]
80 a 90
80 a 90
80 a 90
Como tarea adicional el alumno deberá generar las configuraciones para el
nodo transmisor indicadas a continuación:
205
Canal
0
1
2
3
4
5
Identificador
STD: 0123
STD: 0011
STD: 0321
EXT: 01234567
EXT: 00110022
EXT: 07654321
Trama
Datos
Datos
Remota
Datos
Datos
Remota
DLC
8 bytes
4 bytes
6 bytes
8 bytes
4 bytes
6 bytes
Datos
11, 22, 33, 44, 55, 66, 77, 88
12, 34, 56, 78
11, 22, 33, 44, 55, 66, 77, 88
12, 34, 56, 78
-
y las siguientes configuraciones para el nodo receptor:
Canal
0
1
2
3
4
5
Filtro de Identificador
STD: 012X
STD: 001X
STD: 032X
EXT: 012345XX
EXT: 001100XX
EXT: 076543XX
Filtro de Trama
Datos y Remota
Datos
Remota
Datos y Remota
Datos
Remota
Para visualizar los mensajes los mensajes de los nodos trasmisor y receptor
mediante RS-232, el montaje de la conexión entre el PC y el kit de desarrollo
CAN es el siguiente:
206
BIBLIOGRAFÍA
[1] J. Q. Castellano, Bus CAN: Estado de Buses Industriales y Aplicaciones,
Madrid, 2000.
[2] C. A. Chamú Morales, Desarrollo de un Sistema Educativo para la
Enseñanza del Protocolo de Comunicaciones CAN, Huajuapan de León,
2005.
[3] H. Kaschel C. y E. Pinto L., Análisis de la Capa Física del Bus de Campo
CAN, Santiago, 2004.
[4] H. Kaschel C. y E. Pinto L., Análisis Protocolar del Bus de Campo CAN,
Santiago, 2002.
[5] H. Kaschel C. y E. Pinto L., Implementación de la Capa Física del Bus de
Campo CAN, Santiago, 2004.
[6] H. Kaschel C. y E. Pinto L., Sistema de Diagnóstico y Sincronización de los
Buses de Campo CAN, Santiago, 2002.
[7] M. T. C. Medina, Análisis del Protocolo CAN (Controller Area Network) e
Implementación de un Prototipo de Control de Nodos Interconectados por
un Bus de Comunicaciones CAN, Quito, 2008.
[8] M. Molero Bastante, Bus CAN Diseño de Sistemas Críticos, Ciudad Real,
2005.
[9] E. Ossandón, Diseño e Implementación de un Sistema Educativo del
Protocolo de Comunicaciones CAN, Santiago, 2011.
[10] J. Sánchez Peñarroja, Controller Area Network, Valencia, 2007.
207
EXPERIENCIA Nº4:
ESTUDIO DE APLICACIONES GATILLADAS EN EL TIEMPO
OBJETIVOS: El propósito de este laboratorio es familiarizar al
alumno con el estudio de aplicaciones gatilladas
en el tiempo para realizar tareas que requieran
cierta periodicidad.
INTRODUCCIÓN: Para familiarizar al alumno con el estudio de aplicaciones
gatilladas en el tiempo es necesario abarcar los siguientes aspectos:
•
•
•
Explicar cómo construir una aplicación basada en el tiempo para
sistemas empotrados.
Mostrar la implementación de programas que hagan uso de tareas
gatilladas en el tiempo.
Mostrar un programa que haga uso de interrupciones y retardos por
hardware.
APLICACIONES GATILLADAS EN EL TIEMPO: La creación de una aplicación
gatillada en el tiempo se hace a través de un itinerario de tareas (schedule
task), que puede ser visto como un sencillo sistema operativo que permite la
llamada a las tareas de forma periódica o (de forma menos frecuente) la
llamada a una sola tarea. Desde el punto de vista de niveles más bajos, un
itinerario de tareas puede ser visto como una sencilla temporización usando
interrupciones mediante un reloj para generar rutinas que pueden ser
compartidas entre diferentes tareas, como resultado un solo reloj debe ser
iniciado para ejecutar una, diez o cien tareas diferentes, la estructura de un
programa que hace uso de itinerarios se puede ver en los archivos ‘main.c’ y
‘schedule.c’ mostrados a continuación:
208
/******************************************************************************
* FILE_NAME: main.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a schedule program example.
*
******************************************************************************/
#include "config.h"
#include "schedule.h"
void timer1_init(void)
{
TMOD |= 0x10;
/*
TH1 = 0xF8;
/*
TL1 = 0x52;
/*
ET1 = 1;
/*
TR1 = 1;
/*
}
timer 1 in mode 1, 16 bit mode */
reload value for */
timer 1 at 2ms */
enable timer 1 interrupt */
turn on timer 1 */
void main(void) /* main code */
{
timer1_init();
/* timer 1 initialisation */
schedule_init();
/* schedule initialisation */
EA = 1;
/* enable all interrupts */
while(1)
/* start of endless loop */
{
schedule(); /* schedule task */
}
}
void fct_timer1_it(void) interrupt 3
{
TH1 = 0xF8;
/* reload value for */
TL1 = 0x52;
/* timer 1 at 2ms */
TF1 = 0;
/* clear interrupt flag */
activate_new_schedul(); /* create new schedule */
}
209
/******************************************************************************
* FILE_NAME: schedule.c
*
*-----------------------------------------------------------------------------*
* FILE_PURPOSE: This file is a schedule tasking example.
*
******************************************************************************/
#include
#include
#include
#include
#include
"config.h"
"schedule.h"
"task_1.h"
"task_2.h"
"task_3.h"
Uchar task_in_progress;
void call_next_task(void)
{
EA = 0;
/* disable all interrupts */
task_in_progress++; /* assign next task */
EA = 1;
/* enable all interrupts */
}
void schedule_init(void)
{
task_1_init();
task_2_init();
task_3_init();
task_in_progress = 1;
}
/*
/*
/*
/*
void schedule(void)
{
switch(task_in_progress)
{
case 1:
{
task_1();
call_next_task();
break;
}
case 2:
{
task_2();
call_next_task();
break;
}
case 3:
{
task_3();
call_next_task();
break;
}
default:
{
break;
}
}
}
task 1
task 2
task 3
assign
initialisation */
initialisation */
initialisation */
first task */
/* task 1 */
/* call next task */
/* break */
/* task 2 */
/* call next task */
/* break */
/* task 3 */
/* call next task */
/* break */
/* break */
210
void activate_new_schedul(void)
{
task_in_progress = 1;
/* assign first task */
}
CUESTIONARIO: Las preguntas siguientes deben ser respondidas por el
alumno; ya que, más de alguna será formulada antes de la experiencia.
1.- Señale la importancia de la programación de aplicaciones gatilladas en
el tiempo para realizar tareas en tiempo real.
2.- ¿Cómo podría generar una mayor prioridad a algún tipo de tarea
específica en una aplicación que utilice la programación gatilladas en el
tiempo?
3.- Si es que necesito realizar una comunicación serie a través del puerto
RS-232 de éste kit de desarrollo a una velocidad de 9600bps ¿Es
posible utilizar el Timer 2 para realizar el itinerario de tareas? Explique.
PARTE EXPERIMENTAL: Este laboratorio consta en ver la estructura de
programas gatillados en el tiempo implementados en el kit de desarrollo, se
entregará al alumno 7 programas escritos en C que mostrarán el uso de:
•
•
Los proyectos de la barra de LED’s, la pantalla LCD, el puerto RS-232, el
envío secuencial y recepción de distintos mensajes CAN programados
como aplicaciones gatilladas en el tiempo.
Explicar mediante un programa el funcionamiento de 2 nodos actuando
cada uno tanto como transmisor y receptor de mensajes, el primer nodo
se encargará de generar 8 tipos de mensajes de prueba y de recibir
cualquier tipo de ellos; mientras que el segundo nodo se encargará de
realizar funciones de registro y replicación de datos.
En esta serie de laboratorios se mostrará al alumno proyectos de transmisión y
recepción de mensajes CAN actuando como generador de mensajes de prueba
y de adquisición de datos programados como aplicaciones gatilladas en el
tiempo.
Para visualizar los mensajes los mensajes de los nodos trasmisores/receptores
mediante RS-232, el montaje de la conexión entre el PC y el kit de desarrollo
CAN es el siguiente:
211
BIBLIOGRAFÍA
[1] E. Ossandón, Diseño e Implementación de un Sistema Educativo del
Protocolo de Comunicaciones CAN, Santiago, 2011.
[2] M. Pont, Patterns for Time-Triggered Embedded Systems, London:
Addison-Wesley, 2011.
[3] M. Pont, Programming Embedded System II, Leicester: University of
Leicester, 2007.
212
EXPERIENCIA Nº5:
IMPLEMENTACIÓN DE APLICACIONES QUE HAGAN USO DEL MODELO DE
COMUNICACIÓN CAN
OBJETIVOS: El propósito de este laboratorio es familiarizar al
alumno con las capacidades del bus CAN para
implementar los distintos modelos de control
que permite el protocolo.
INTRODUCCIÓN: Existen muchas maneras de clasificar las redes: en función
de su funcionalidad, de los protocolos utilizados, de sus prestaciones, del tipo
de acceso, de su topología, etc… En nuestro caso, y para no perdernos entre
las múltiples clasificaciones, veremos la clasificación según su modelo de
comunicación.
MODELOS DE COMUNICACIONES: Resulta importante conocer los dos
modelos básicos en los que se enmarca cualquier sistema de comunicación,
estos modelos son:
Cliente/Servidor: La comunicación en este modelo consiste en que un nodo
emite un mensaje a cada nodo destino, debiendo repetir ese mensaje para
cada uno de los nodos si es que desea que el mensaje llegue a varios nodos
pues la trama del mensaje enviado contiene una cabecera donde figura el nodo
fuente y el nodo destino. De este modo, no es posible la llegada simultánea del
mismo mensaje a todos los nodos, utilizando la red de comunicaciones durante
un largo periodo de tiempo. Además, el tiempo de emisión a todos los nodos
cambia según el número de nodos a los que se desea hacer llegar el mensaje,
el tipo de difusión utilizado es el envío de mensajes desde un único emisor a un
único receptor (unicast). Este modelo es empleado por protocolos como:
PROFIBUS, INTERBUS y AS-i.
Productor/Consumidor: La comunicación en este modelo emplea un sistema
por el que todos los nodos reciben los mensajes que se transmiten, siendo la
tarea de cada nodo decidir si ese mensaje debe aceptarlo. De este modo,
todos los nodos reciben el mensaje simultáneamente y no es necesario
repetirlo para cada uno de los nodos a los que está dirigido, con el
consiguiente ahorro en el tiempo de utilización del bus. Así, el tiempo de
transmisión resulta constante independientemente del número de nodos a los
que se desea hacer llegar el mensaje. En este caso, la trama del mensaje
incluye un identificador de mensaje; este identificador permite que los nodos
213
receptores conozcan si deben aceptarlo o no, el tipo de difusión utilizado es el
envío de mensajes a un grupo de receptores (multicast) o a toda la red
(broadcast). Este modelo es empleado por protocolos como: WorldFIP,
Fieldbus Foundation, CAN, ControlNet y EtherNet/IP.
FLEXIBILIDAD DEL MODELO PRODUCTOR/CONSUMIDOR: El modelo
productor/consumidor viene a cubrir las deficiencias del antiguo modelo
cliente/servidor, ya que los mensajes se identifican por su contenido y ofrece
las siguientes ventajas:
•
•
•
Múltiples nodos pueden consumir los mismos datos simultáneamente
desde un sólo productor.
Los nodos se pueden sincronizar fácilmente para obtener un
rendimiento más preciso del sistema.
Los dispositivos se pueden comunicar autónomamente, sin la necesidad
de un maestro de sistema.
El resumen de su flexibilidad y prestaciones que permite éste modelo de
comunicación se puede apreciar en la siguiente figura:
También éste modelo permite implementar el modelo cliente/servidor, tomando
en consideración que cada nodo debe identificar los campos de origen y
destino en el identificador, a continuación se muestra el formato de los
mensajes para cada uno de los modelos:
MONTAJE DEL SISTEMA: El montaje de los laboratorios Nodo1/Nodo2 y
Maestro/Esclavo se muestra a continuación:
214
CUESTIONARIO: Las preguntas siguientes deben ser respondidas por el
alumno; ya que, más de alguna será formulada antes de la experiencia.
1.- Explicar cuál es la función que cumple el filtrar los datos en el bus para
la recepción de mensajes en el modelo cliente/servidor y en el modelo
productor/consumidor.
2.- Explicar la función que cumplen los identificadores y los datos en ambos
modelos de comunicación: cliente/servidor y productor/consumidor.
3.- Explicar las funciones de controlador, sensor y actuador en los distintos
modelos de comunicación y como éstos se implementan en el sistema
PARTE EXPERIMENTAL: En el primer laboratorio de ésta experiencia se verá
el funcionamiento de un sistema de control por cambio de estado en un
esquema de comunicación multimaestro ejemplificado en un sistema de
control de poleas de una cinta transportadora. Cada nodo será considerado
como una estación de tambores motrices de la cinta transportadora en donde
cada nodo podrá gatillar la dirección y estado (ON/OFF) de la cadena de
correas transportadoras, las consideraciones a tomar serán las siguientes:
215
•
•
•
•
Al iniciar la secuencia de encendido el estado de cada uno de los nodos
será de espera (standby).
Cada nodo será capaz de iniciar el arranque del sistema de correas
transportadoras.
Al desconectarse un nodo de la energía eléctrica y posteriormente volver
a conectarse, la secuencia de inicio deberá considerar preguntar al
sistema el estado de funcionamiento (dirección y estado) para ser capaz
de replicar su estado de funcionamiento.
El direccionamiento de los nodos debido a que la información puede ser
originada y/o recibida por cualquier nodo de la red, por lo que cada
nodo será capaz de identificar el tipo de direccionamiento entregado el
cual, por el tipo de control empleado, será broadcast.
El hecho de que cada nodo no transmita información hasta que se modifica el
estado de las variables se le conoce como control por cambio de estado y el
hecho de que sea capaz de generar tareas de control en el sistema y por ende
cada nodo puede actuar como: sensor, actuador y controlador se conoce
como un direccionamiento multimaestro.
En el segundo laboratorio de ésta experiencia se verá el funcionamiento de un
sistema de control cíclico en un esquema de comunicación maestro/esclavo
ejemplificado en un sistema de control de aire acondicionado de una planta.
Existirá un nodo maestro que se encargará se ejercer el control en los
dispositivos esclavos, las consideraciones a tomar serán las siguientes:
•
•
•
•
La estación maestra podrá ejercer un control de temperatura para días
soleados y días nublados y ser capaz de identificar cada estación que
entrega el estado de la condición ambiental y temperatura de la planta.
Cada estación esclava deberá enviar en intervalos periódicos el estado
de la temperatura de la planta y de control ejercido sobre éste.
El direccionamiento de los nodos debido a que la información puede ser
originada y/o recibida por cualquier nodo de la red, por lo que cada
nodo será capaz de identificar el tipo de direccionamiento entregado el
cual, por el tipo de control empleado, será unicast.
Las estaciones deberán ser capaces de diferenciar entre lo que es
información de control y datos.
El hecho de que cada nodo no transmita información a la red en intervalos de
tiempo fijo se le conoce como control cíclico y el hecho de que una estación
funcione como controlador y sea capaz de generar tareas de control en el
sistema y las demás estaciones ejecuten acciones de sensor y actuador en el
sistema se conoce como un direccionamiento maestro/esclavo.
216
BIBLIOGRAFÍA
[1] Keil Software, CAN Primer: Creating Your Own Network, Plano, 2009.
[2] M. Ortiz, F. Quiles, C. Moreno, M. Montuano, M. Brox y A. Gersnoviez,
CAN2PCI: Placa con Interfaz al Bus CAN y PCI con Finalidad Docente,
Córdoba, 2008.
[3] E. Ossandón, Diseño e Implementación de un Sistema Educativo del
Protocolo de Comunicaciones CAN, Santiago, 2011.
217
ANEXO B: HOJA DE DATOS Y LISTA DE MATERIALES DEL KIT DE
DESARROLLO
218
HOJA DE DATOS DE LA TARJETA: C51 DEMO BOARD
219
220
221
222
223
224
LISTA DE MATERIALES DE LA TARJETA: C51 DEMO BOARD
Reference
Type
Specs
Qty
Comment
C1-C28
C2:C10-C19:C23
C11
C12
C13-C14-C24:C27
C15:C18
D1-D14
D2-D11:D13
D3:D6
D7:D8
D9:D10
J1
J2
J3
J4
J5-J10
J6:J7
J8
J9
J11
J12
J13
J14
J15
J16
J17
J18
J19
R1-R24-R28-R29
R2-R3-R20-R21-R25
R4:R11
R12-R19
R21
R23
R30
U1
U2
U3-U4-U7-U8
U5
U6
U9
U10
U12
U13
U14
U15
X1
X2
POL_CAPACITOR
CAPACITOR
POL_CAPACITOR
POL_CAPACITOR
CAPACITOR
POL_CAPACITOR
1N4001
LED
LED_GREEN
LED_YELLOW
LED_RED
CONNECTOR
CONNECTOR_BATTERY_9V
STRAP
DB9_MALE
DB9_FEMELLE
Push_Button
Switch ON-ON
Commut_DIP_2
Commut_DIP_8
CONNECTOR
Jumper_2,54mm
LCD_2X16
ALE_DIS
Commut_DIP_1
Switch ON-ON
jumper Battery
Switch ON-ON
RESISTOR
RESISTOR
RESISTOR
RESISTOR
POTENTIOMETER
RESISTOR
RESISTOR
LM7805C
LM2936Z5
74ACT573
TSC80C31
AT49HF010-45JC
ICL232CBE
HEF4555P
TSC80C51
TSC80C51
74ACT14
74ACT00
Quartz_11,0592
Quartz_22,1184
4,7uF
100nF
3,3uF
10uF
22pF
10uF
1N4001
LED
GREEN LED
YELLOW LED
RED LED
CONNECTOR
CONN_BATTERY_9V
STRAP
DB9_MALE
DB9_FEMELLE
Push_Button
Switch ON-ON
Commut_DIP_2
Commut_DIP_8
CONNECTOR
CONNECTOR
LCD_2X16
Strap
Commut_DIP_1
Switch ON-ON
Picot Pile
Switch ON-ON
1kOhm
10kOhm
10kOhm
1kOhm
10kOhm
100 Ohm
180 Ohm
LM7805C
LM2936Z5
74ACT573
Socket
Socket
ICL232CBE
HEF4555P
Socket
Socket
74ACT14
74ACT00
11,0592MHz
22,1184MHz
2
14
1
1
6
4
2
4
1
1
1
1
1
0
1
2
2
1
1
1
1
1
1
0
1
1
1
CMS_TAJ_Package_B
Package_0805
TAJ_CMS_Package_B
TAJ_CMS_Package_B
Serie_680
CMS_TAJ_Package_B
Package_DO204AL
CMS_STANDART
in_line_2.54mm step
in_line_2.54mm step
in_line_2.54mm step
4
6
2
2
1
1
1
1
1
4
1
1
1
1
1
1
1
1
1
1
Package_0603
Package_0603
Package_1206-CMS_ARC_241
Package_1206_CMS_ARC_241
SERIE_3362P
0.6W -1%
0,5W
TO220 + Heater
TO92
CMS
PLCC44
PLCC32
CMS
DIL
DIL24
PLCC68
CMS
CMS
HC49/4H
HC49/U
SUBD9Pins_Right_Angle
SUBD9Pins_Right_Angle
CMS
DIL
DIN41612_3*32_MALE_Right_Angle
2*11 contacts
NULL
Inter. ON/OFF
2 pins, step of 2,54mm
225
HOJA DE DATOS DE LA TARJETA: CAN EXTENSION BOARD
226
LISTA DE MATERIALES DE LA TARJETA: CAN EXTENSION BOARD
Reference
Value
Quantity
C1,C2
C3
J1
J2
R1
U1
U2
U3
X1
J12
J10
22pF
100 nF
2 pin connector
DB9 Female Connector
120Ω 1/4W
PLCC44 Socket
DIP8 socket
CAN Driver ATA6660 or compatible
12MHz Crystal
DIN3*32 Female Connector
Jumper Spacing 2.54 mm
2
1
1
1
1
1
1
1
1
1
1
227
Descargar