Sie sind auf Seite 1von 81

Qu es CAN y cmo funciona el mdulo del microcontrolador dsPIC30F4013

Grupos 03-04

Relacin de alumnos que han participado:

Alepuz Soriano, Hctor Nazario Gimnez Espinosa de los Monteros, Hctor Jord Fernndez, Jorge Manuel Ripoll Gisbert, Felipe Saval Sendra, Pablo Miguel Serrano Reche, Juan Talens Noguera, Juan Vicente

ndice
1. INTRODUCCIN 1.1. Motivacin histrica .................................................. pag. 4 1.2. Caractersticas bsicas del bus CAN ....................... pag. 7 1.3. Competencia y futuro ............................................. pag. 10 1.4. Campos de aplicacin .............................................. pag. 13 1.5. Ejemplo de aplicacin prctica: Domtica ................ pag. 14 2. TRANSMISIN DE DATOS 2.1. Arquitectura de capas 2.1.1. Capa fsica................................................. pag. 2.1.2. Capa de enlace de datos ........................... pag. 2.2. Estructura de un nodo CAN.................................... pag. 2.3. Formato de codificacin y sincronizacin de datos...pag. 2.4. Tramas 2.4.1. Tipos de tramas ......................................... pag. 2.4.2. Trama de datos ......................................... pag. 2.4.3. Trama remota ............................................ pag. 2.4.4. Trama de error........................................... pag. 2.4.5. Trama de sobrecarga ................................ pag. 2.4.6. Espacio entre tramas................................. pag. 2.5. Acceso mltiple y abitraje de acceso al bus ........... pag. 2.6. Deteccin de errores 2.6.1. Deteccin de errores ................................. pag. 2.6.2. Aislamiento de nodos defectuosos ............ pag. 2.7. Especificaciones..................................................... pag. 2.8. Implementaciones .................................................. pag. 3. CAN DEL MICRO dsPIC30F4013 3.1. Caractersticas bsicas ........................................... pag. 3.2. Transceptor (transceiver) ........................................ pag. 3.3. Modos de funcionamiento ....................................... pag. 3.4. Recepcin de mensajes .......................................... pag. 3.5. Transmisin de mensajes........................................ pag. 3.6. Temporizacin y sincronizacin de bits 3.6.1. Temporizacin de bits................................ pag. 3.6.2. Sincronizacin de bits................................ pag. 3.6.3. Parmetros del tiempo de bit nominal ....... pag. 3.7. Programacin 3.7.1. MPLAB ...................................................... pag. 3.7.2. Funciones .................................................. pag. 3.7.3. Ejemplo de aplicacin de cdigo ............... pag. 39 41 43 46 48 51 52 53 55 56 69 18 21 22 23 24 25 27 28 30 30 31 33 34 35 35

4. ANEXO: Dispositivos CAN ....................................................... pag. 72 5. BIBLIOGRAFA......................................................................... pag. 80

1. INTRODUCCIN

1.1. Motivacin histrica


El sistema de bus serie CAN, siglas cuyo significado en castellano es Control de rea de Red, naci en febrero de 1986, cuando el grupo Robert Bosch GmbH (ms conocido como Bosch a secas) lo present en el congreso de la Sociedad de Ingeniera de la Automocin. Desde entonces, CAN se ha convertido en uno de los protocolos lderes en la utilizacin del bus serie.

Razones A comienzos de los 80, los ingenieros de Bosch evaluaron el posible uso de los sistemas de bus serie existentes en los coches de pasajeros, pero ninguno de los protocolos de red disponibles satisfacan los requisitos de estos.

El ingeniero Uwe Kiencke fue quien inici el desarrollo del nuevo sistema en 1983.

Este protocolo de bus serie se ide principalmente para aportar mayor funcionalidad, seguridad y fiabilidad, junto a una mayor eficiencia en el gasto del combustible, ya que la reduccin del peso y la complejidad de los automviles a travs de la reduccin del cableado iban a favorecer este hecho. Ingenieros de Mercedes-Benz pronto se involucraron en las primeras fases de creacin del nuevo sistema, y pronto lo hizo tambin Intel como potencial vendedor de semiconductores. El profesor Wolfhard Lawrenz de la universidad de ciencias aplicadas de Brunswick-Wolfenbttel, Alemania, fue quin dio al nuevo protocolo de red el nombre de Controller Area Network (CAN). A mediados de 1987, Intel present el primer chip de controlador CAN: el 82526. Poco tiempo despus, Semiconductores Philips presentara el 82C200. Estos dos antepasados primigenios de los controladores CAN actuales eran completamente distintos en cuanto a filtros de aceptacin y control de mensajes: Intel adopt el concepto de FullCAN; este requera menos carga de la CPU del microcontrolador que la implementacin BasicCAN elegida por Philips. Pero por otra parte, el dispositivo de FullCAN era limitado con respecto al nmero de los mensajes que podan ser recibidos. Adems, el controlador de BasicCAN requera menos silicio, lo que abarataba aun ms su coste. Actualmente, los trminos BasicCAN y FullCAN han quedado obsoletos.

Estandardizacin La especificacin CAN (versin 2.0) de Bosch fue sometida a la estandardizacin internacional a comienzos de los 90. Concretamente en Noviembre de 1993, despus de diversos conflictos polticos, se public el estndar ISO 11898, que defina adems una capa fsica para velocidades de hasta 1 Mbit/s. Paralelamente, un formato de CAN tolerante a fallos se incluy en la ISO 11519-2. En 1995, el estndar se ampli con la descripcin del identificador CAN de 29 bits. Desafortunadamente, todas las especificaciones y estandarizaciones publicadas acerca de CAN contenan errores o estaban incompletas. Para evitar incompatibilidades, Bosch se cercior, y sigue hacindolo, de que todos los micros CAN cumplen con el modelo de referencia que ellos definieron. De todas formas, las especificaciones CAN han sido revisadas y estandarizadas con el tiempo en diferentes secciones: la norma ISO 11898-1 describe la 'capa de transmisin de datos CAN'; la ISO 11898-2 la capa fsica CAN no tolerante a fallos'; y la ISO 11898-3 la capa fsica CAN tolerante a fallos. Los estndares de ISO 11992 (referente a la interfaz para camiones y remolques) e ISO 11783 (referente a la maquinaria agrcola y forestal) definen los perfiles del uso de CAN basados en el US-protocol J1939.

Pioneros A pesar de que CAN surgi con la idea de ser utilizado en coches de pasajeros, un gran nmero de las primeras aplicaciones llegaran desde otros segmentos de mercado distintos: Entre otros, el fabricante finlands de ascensores Kone, fue uno de los primeros en aprovecharse de sus ventajas. La oficina de ingeniera Suiza Kyaser lo introdujo a los fabricantes de maquinaria textil del pas, que acabaron fundando el Grupo de usuarios textiles CAN, bajo el liderazgo de Lars-Berno Frediksson. En Holanda, Sistemas mdicos Philips lo utiliz para las redes internas de sus mquinas de Rayos X. La especificacin para mensajes de Philips (PMS), desarrollada principalmente por Tom Suters, represent la primera capa de aplicacin para redes CAN. Tambin se sucedieron todo tipo de propuestas acadmicas, como por ejemplo, la creacin a finales de los 80 de un sistema de bus basado en CAN, para vehculos agrcolas (LBS).

Ya en 1992, Mercedes-Benz implant CAN en sus automviles de clase alta. Y aunque en un principio el bus se limitaba a interconectar las unidades de control electrnico que cuidaban del control del motor, pronto conectaran adems las unidades de control necesarias para los componentes electrnicos. Para ello, se implementaron dos sistemas de bus CAN separados fsicamente, y conectados a travs de gateways. Actualmente, muchos otros fabricantes de coches como BMW, Renault, Fiat, Saab, Volkswagen o Volvo, han seguido su ejemplo y suelen implementar dos redes CAN en sus coches. En Marzo de ese mismo ao, usuarios internacionales y grupos de fabricantes fundaron oficialmente la organizacin 'CAN en la Automocin (CiA). La primera publicacin tcnica, que trataba acerca de la capa fsica, fue emitida solo unas semanas despus: CiA recomendaba utilizar solamente transceptores CAN que cumplieran la normativa ISO 11898. A da de hoy, son los transceptores RS485 los utilizados ms comnmente. Otra de las primeras tareas de la CiA fue la especificacin de la capa de aplicacin CAN (CAL), que se desarroll a partir del material existente de los Sistemas mdicos de Philips y de STZP.

Capas de aplicacin
Desde 1993, dentro del alcance del proyecto ASPIC, un consorcio europeo liderado por BOSCH, desarroll un prototipo conocido como CANopen para las redes internas de las celdas de produccin. En 1995, se public el perfil totalmente revisado de las comunicaciones de CANopen, que en el plazo de cinco aos ya se haba convertido en la red integrada estandarizada ms importante de Europa, puesto que ofreca una gran flexibilidad y un gran nmero de opciones de configuracin, as como diversos perfiles de dispositivo, interfaz y uso. Actualmente, CANopen se sigue utilizando especialmente en Europa: mquinas de moldeado por inyeccin en Italia, mquinas expendedoras en Inglaterra, gras en Francia, control de maquinaria en Austria, o maquinaria de fabricacin de relojes en Suiza... Mientras que en Estados Unidos CANopen se abre camino en el mbito de los toros mecnicos y las mquinas clasificadoras. Poco despus de aquello, a comienzos de 1994, Allen-Bradley desarroll la tecnologa DeviceNet, enfocada esencialmente a la automatizacin de las fbricas. Pronto ganara adeptos en Estados Unidos debido sobretodo a su funcionamiento plug & play (enchufar y listo).

Pero no fueron las nicas. Desde el momento de la creacin de CAL, se fue sucediendo la creacin de diferentes estndares que definan la capa de aplicacin; algunos son muy especficos y estn relacionados casi exclusivamente con sus campos de aplicacin. Dejando de lado las 3 mencionadas anteriormente, entre los protocolos de alto nivel y las capas de aplicacin ms utilizadas cabe mencionar: SDS, OSEK y CANKingdom. Por una parte, SDS (Smart Distributed System), fue creado por Honeywell durante la gestacin de DeviceNet, y de hecho era muy similar a este, as que no entraremos en detalle. OSEK, que estaba basado adems en TCP/IP y algoritmos DSP, rpidamente enfocara su aplicacin a una gran cantidad de usos en los turismos. Mientras que CANKingdom se enfoc a aplicaciones con una necesidad alta de aplicaciones en tiempo real, como pueda ser por ejemplo la electrnica martima. Ya por ltimo, en el ao 2000, ISO form un grupo de trabajo que agrupaba empleados de Bosch, acadmicos y expertos de la industria de los semiconductores, que defini un nuevo protocolo basado en CAN, el llamado TTCAN (Time-tiggered communication on CAN). Esta extensin permita tanto la transmisin de mensajes simultneos, como la implementacin de un bucle cerrado para el control del bus. Y gracias a que el protocolo del bus no fue modificado, este tipo de mensajes podan seguir siendo enviados con el mismo sistema fsico de bus.

1.2. Caractersticas bsicas del bus CAN


Econmico y sencillo: Dos de las razones que motivaron su desarrollo fueron precisamente la necesidad de economizar el coste monetario y el de minimizar la complejidad del cableado, por parte del sector automovilstico. Estandarizado: Se trata de un estndar definido en las normas ISO (Internacional Organization for Standardization), concretamente la ISO 11898, que se divide a su vez en varias partes, cada una de las cuales aborda diferentes aspectos de CAN. Medio de transmisin adaptable: El cableado, como ya hemos dicho, es muy reducido a comparacin de otros sistemas. Adems, a pesar de que por diversas razones el estndar de hardware de transmisin sea un par trenzado de cables, el sistema de bus CAN tambin es capaz de trabajar con un solo cable. Esta particularidad es empleada en diversos tipos de enlaces, como los enlaces pticos o los enlaces de radio. Estructura definida: La informacin que circula entre las unidades a travs de los dos cables (bus) son paquetes de bits (0s y 1s) con una longitud limitada y con una estructura definida de campos que conforman el mensaje. Programacin sencilla. Nmero de nodos: Es posible conectar hasta 110 dispositivos en una sola red CAN. Garanta de tiempos de latencia: CAN aporta la seguridad de que se transmitir cierta cantidad de datos en un tiempo concreto, es decir, que la latencia de extremo a extremo no exceder un nivel especfico de tiempo. Adems, la transmisin siempre ser en tiempo real. Optimizacin del ancho de banda: Los mtodos utilizados para distribuir los mensajes en la red, como el envo de estos segn su prioridad, contribuyen a un mejor empleo del ancho de banda disponible. Desconexin autnoma de nodos defectuosos: Si un nodo de red cae, sea cual sea la causa, la red puede seguir funcionado, ya que es capaz de desconectarlo o aislarlo del resto. De forma contraria, tambin se pueden aadir nodos al bus sin afectar al resto del sistema, y sin necesidad de reprogramacin. Velocidad flexible: ISO define dos tipos de redes CAN: una red de alta velocidad (de hasta 1 Mbps) definida por la ISO 11898-2, y una red de baja velocidad tolerante a fallos (menor o igual a 125 Kbps) definida por la ISO 11898-3.

Relacin velocidad-distancia: Al punto anterior habra que aadir que la velocidad tambin depende de la distancia hasta un mximo de 1000 metros (aunque podemos aumentar la distancia con bridges o repetidores), como podemos corroborar en la siguiente tabla comparativa: Velocidad (Kbps) 1000 800 500 250 125 50 20 10 Tiempo de bit (S) 1 1.25 2 4 8 20 50 100 Longitud mxima de bus (m) 30 50 100 250 500 1000 2500 5000

Adems podemos hablar de otras caractersticas tcnicas en las que profundizaremos ms adelante: Orientado a mensajes: Se trata de un protocolo orientado a mensajes, y no a direcciones, es decir, la informacin que se va a intercambiar se descompone en mensajes, a los cuales se les asigna un identificador y son encapsulados en tramas para su transmisin. Cada mensaje tiene un identificador nico dentro de la red, a partir del cual los nodos deciden aceptar o no dicho mensaje. Adems estn priorizados. Multidifusin (multicast): Permite que todos los nodos puedan acceder al bus de forma simultnea con sincronizacin de tiempos. Medio compartido (broadcasting): La informacin es enviada en la red a todos los destinos de forma simultnea. As que los destinos habrn de saber si la informacin les concierne o deben rechazarla. Deteccin y sealizacin de errores: CAN posee una gran capacidad de deteccin de errores, tanto temporales, como permanentes, lograda a travs de cinco mecanismos de deteccin, 3 al nivel de mensaje y 2 a nivel de bit. Los errores adems pueden ser sealizados. Retransmisin automtica de tramas errneas: Junto a la deteccin y sealizacin de errores la retransmisin automtica de tramas errneas aporta la integridad de los datos. Adems ambos procesos son transparentes al usuario. Jerarqua multimaestro: CAN es un sistema multimaestro en el cual puede haber ms de un maestro (o master) al mismo tiempo y sobre la misma red, es decir, todos los nodos son capaces de transmitir, hecho que permite construir sistemas inteligentes y redundantes.

1.3. Competencia y futuro


Realmente CAN se encuentra en una posicin privilegiada en el mercado. El siguiente grfico traza una comparativa entre diferentes tecnologas respecto al coste por nodo.

Vemos que J1850, pero sobretodo LIN, que tiene una mayor presencia en la industria, son opciones ms econmicas, pero hasta qu punto son estas tecnologas competidoras de CAN? En la siguiente tabla, se exponen las diferentes caractersticas de LIN y CAN (y de cmo extra el I2C de Philips), para detallar la similitud entre ellas: CAN Compaa que lo desarroll Bosh 1Mb/s Velocidad Tamao de datos Prioridad de mensajes Garanta de latencia Flexibilidad en la configuracin Sistema Multimaestro Deteccin y sealizacin de errores Retransmisin de tramas 64bits Si Si Si Si Si automtica LIN Open source 20 Kb/s 8bits No *** *** No Si No I2C Philips 0.1Mb/s / 0.4Mb/s 8bits No No Si Si Si programable

Se puede llegar a la conclusin fcilmente, de que cada una va a ser til en un mbito de manufactura distinto, ya que sus caractersticas son distintas. La diferencia principal, adems de la econmica, va a resultar ser la velocidad.

10

Dentro de la industria automovilstica por ejemplo, CAN es empleado como bus de comunicaciones para los elementos ms importantes de este, que van a requerir una seguridad y velocidad mayores. Para otro tipo de visicitudes, como los elevalunas elctricos por ejemplo, que tienen mucha menos importancia que la que puedan tener los frenos o el estado del motor, se emplea el bus LIN. Uso general del bus CAN en los coches:

Uso general del bus LIN en los coches:

En definitiva, ms que competir, lo que hacen es repartirse el pastel, ya que al tener diferentes caractersticas, el fabricante va a poder adaptarse en todo momento de la mejor forma a las exigencias del mercado, eligiendo uno u otro para cada necesidad.

11

Ya que otro grupo de la clase ha optado por hacer un trabajo acerca de Ethernet, vamos a nombrar algunas de las diferencias ms importantes que hay entre estos, aunque no sean competidores directos:

CAN Ethernet Aun cuando las similitudes entre CAN y Ethernet son obvias, CAN posee algn beneficio clave cuando se compara con el protocolo Ethernet. El esquema de arbitraje que usa el protocolo CAN es de bit inteligente no destructivo. Esto significa que se comparan los mensajes con cada bit en un momento determinado, pero el mensaje con la prioridad ms alta no se destruye y se retransmite; slo el mensaje que no gana el arbitraje de bus se detiene y se retransmite. ste es un punto importante que ayuda a minimizar el tiempo de fuera de servicio del bus y aumentan al mximo uso eficaz del ancho de banda disponible. Otra ventaja importante del arbitraje del bit inteligente no destructivo, que usa CAN, es el hecho que esto da al bus caractersticas muy predecibles. Con Ethernet, ambos transmisores se detienen cuando se detecta una colisin y una cantidad de tiempo aleatorio se permite pasar antes de que ambos prueben de la retransmisin. Con este elemento aleatorio de tiempo eliminado de la funcin del bus, es posible lograr casi el 100% de eficacia en trminos de utilizacin del ancho de banda.

Futuro A da de hoy, el futuro de CAN se prev esperanzador, ya que incluso las estimaciones ms conservadoras coinciden en que la presencia de CAN en el mercado y en diversos campos de la industria, va a seguir en aumento durante los prximos diez o quince aos.

12

1.4. Campos de aplicacin


El 80% de las aplicaciones modernas del bus CAN se pueden encontrar en la ingeniera del automvil y otro tipo de vehculos como autobuses, trenes y aviones. En el caso de los automviles por ejemplo, CAN es el encargado de la comunicacin y automatizacin del sistema de freno, los faros, el ABS, o el ordenador de abordo, del cual vemos su esquema en el siguiente grfico:

Sin embargo, tambin se puede encontrar el bus CAN en aplicaciones de diversa ndole debido a su naturaleza, que le aporta robustez, economa y un altsimo grado de seguridad y fiabilidad; entre las ms comunes:

Control y automatizacin industrial: - Redes entre diversas mquinas y elementos de las mismas. - Redes de supervisin. - Redes de seguridad. Control y automatizacin de edificios: - Control de ascensores, puertas mecnicas, aspersores y diversos elementos mecnicos. - Control de iluminacin. Aplicaciones especficas: - Control de mquinas expendedoras (en Inglaterra est muy extendido su uso). - Control de equipamiento mdico. - Control de sistemas automticos de almacenaje. - Control de electrodomsticos.

13

1.5. Ejemplo de aplicacin prctica: Domtica


La lnea que vamos a tratar, permite una gran versatilidad de interconexionado de los mdulos que la componen, ya que la topologa en la que se basa el sistema de instalacin es en modo rbol. Esta caracterstica facilita las posibles ampliaciones del sistema y en consecuencia reduce el coste de instalacin porque el cableado y el tiempo necesario para la instalacin, es menor que en las instalaciones convencionales. Se trata de un sistema modular distribuido. Modular, porque el sistema consta de distintos mdulos que permiten una fcil instalacin y configuracin. Distribuido, porque cada Controlador Inteligente (CI) es capaz de tomar sus propias decisiones y actuar en consecuencia, es decir, no existe una nica unidad central; adems la prdida de comunicacin entre mdulos no impide el desarrollo de las decisiones locales. La instalacin consta como mnimo de un controlador inteligente. Este CI controla los distintos elementos que se conectan directamente a l (como sondas de temperatura, lectores de llaves, etc...) y es el encargado de gestionar el bus principal (bus CAN) que es el bus que utilizan los distintos CI para comunicarse entre s (comunicacin principal). Tambin se encarga de controlar al bus local (bus I2C4H) transmitiendo las rdenes procedentes de otros CI a los distintos mdulos de ampliacin que se le pueden conectar y de reenviar la informacin captada por estos mdulos al resto de CI si procede (comunicacin local).

CI

Dimensiones: 4 mdulos DIN Frontal: LED de estatus de alimentacin 7 LED's de reconocimiento de nodo de expansin Botn de RESET Entradas / Salidas: 1 entrada de bus CAN 1 entrada para 5 sondas de temperatura 1 entrada para 2 receptores IR 1 salida para 4 emisores de IR 1 salida de bus IEE para nodos de expansin Comunicaciones externas: Puerto RS-232

14

La comunicacin principal basada en CAN, aprovecha todas las caractersticas de este ya explicadas a lo largo del trabajo: comunicacin tipo "broadcast", donde todos los CI estn escuchando y si el mensaje les afecta toman la decisin de actuar o no, por lo que no hay posibilidad de colisin; la cabecera de los mensajes est compuesta por un nivel de prioridad de tal forma que es el mensaje de menor prioridad el que cede el bus al mensaje de mayor prioridad. El bus local I2C4H acta de forma parecida con la diferencia de que si que existe una direccin de remitente y de destino en los mensajes, tambin el flujo de informacin es menor a nivel local y el CI gestiona este trfico. Por otra parte, encontramos el derivador, elemento que hace de ladrn entre los distintos CI, y que incorpora la alimentacin al bus principal y permite la activacin de la resistencia final de lnea en cada una de las terminaciones. Derivador Dimensiones: 2 mdulos DIN Lateral: Interruptor final de bus Entradas / Salidas: 3 conectores bus CAN, configurable segn topologa 1 entrada alimentacin 24 VCD 1 entrada para lnea de telfono 1 entada aux. 1 salida de bus IEE para nodos de expansin Comunicaciones externas: No Vamos a ver algunos ejemplos de montaje: Este es un ejemplo tpico de vivienda con un nico CI y dos ampliaciones, una para ocho entradas y ocho salidas en modo encendido y apagado y una segunda ampliacin para el control de cuatro zonas reguladas.

15

En este otro ejemplo de topologa podemos ver una instalacin tpica para un adosado con tres CI, uno por planta de la vivienda, uno de los cuales (el primero de ellos) se encontrara al lmite de su capacidad; podra ser el que se encontrara en la primera planta del adosado, por ser esta planta la que mayores controles requiere.

Para una mejor compresin en este ejemplo solo se han representado los CI y no sus respectivos mdulos de ampliacin. Este sera un ejemplo de aplicacin en un edificio de oficinas, residencia o en un hotel, donde tenemos distintas plantas que controlar. En funcin de la totalidad de elementos que vamos a controlar dispondremos de una mayor o menor cantidad de CI por planta.

16

2. TRANSMISIN DE DATOS

17

2.1. Arquitectura de capas


Las implementaciones hardware de CAN cubren de forma estandarizada las capas fsicas y de enlace del modelo de comunicaciones OSI (Open Systems Interconection), mientras diversas soluciones de software no estandarizadas cubren la capa de aplicacin. Las estandarizaciones ISO (International Standard Organization), a diferencia de las normas BOSCH, especifican tambin el medio de comunicacin. Por lo tanto una implementacin CAN a partir de las especificaciones de BOSCH no siempre ser compatible con las normas ISO.

2.1.1. Capa fsica La capa fsica de CAN, es responsable de la transferencia de bits entre los distintos nodos que componen la red. Define aspectos como niveles de seal, codificacin, sincronizacin y tiempos en que los bits se transfieren al bus. En la especificacin original de CAN , la capa fsica no fue definida, permitiendo diferentes opciones para la eleccin del medio y niveles elctricos de transmisin. Las caractersticas de la seales elctricas en el bus, fueron establecidas ms tarde por el ISO 11898 para las aplicaciones de alta velocidad y, por el estndar ISO 11519 para las aplicaciones de baja velocidad

18

Estndar 11519

Los nodos conectados en este bus interpretan dos niveles lgicos denominados: Dominante y Recesivo. Dominante: la tensin diferencial (CAN_H - CAN_L) es del orden de 2.0 V con CAN_H = 3.5V y CAN_L = 1.5V (nominales). Recesivo: la tensin diferencial (CAN_H - CAN_L) es del orden de 5V con CAN_H = 0V y CAN_L = 5V (nominales).

A diferencia del bus de alta velocidad, el bus de baja velocidad requiere dos resistencias en cada transceptor: RTH para la seal CAN_H y RTL para la seal CAN_L. Esta configuracin permite al transceptor de bus de baja velocidad (fault-tolerant) detectar fallas en la red. La suma de todas las resistencias en paralelo, debe estar en el rango de 100-500.

Red Bus CAN de Baja Velocidad ( Fault Tolerant).

19

Estndar 11898

Los nodos conectados en este bus interpretan los siguientes niveles lgicos: Dominante: la tensin diferencial (CAN_H - CAN_L) es del orden de 2.0 V con CAN_H = 3.5V y CAN_L = 1.5V (nominales). Recesivo: la tensin diferencial (CAN_H - CAN_L) es del orden de 0V con CAN_H = CAN_L = 2.5V (nominales).

El par de cables trenzados (CAN_H y CAN_L) constituyen una transmisin de lnea. Si dicha transmisin de lnea no est configurada con los valores correctos, cada trama transferida causa una reflexin que puede originar fallos de comunicacin. Como la comunicacin en el bus CAN fluye en ambos sentidos, ambos extremos de red deben de estar cerrados mediante una resistencia de 120. Ambas resistencias deberan poder disipar 0.25 w. de potencia.

Red Bus CAN de Alta Velocidad.

20

2.1.2. Capa de enlace de datos La capa de enlace de datos es responsable del acceso al medio y el control lgico y est dividida a su vez en dos niveles. El subnivel LLC (Logical Link Control): Gestiona el filtrado de los mensajes, las notificaciones de sobrecarga y la administracin de la recuperacin. El subnivel MAC (Medium Acces Control): Es el ncleo del protocolo CAN y gestiona el tramado y desentramado de los mensajes, el arbitraje a la hora de acceder al bus y el reconocimiento de los mensajes, as como el chequeo de posibles errores y su sealizacin, el aislamiento de fallos en unidades de control y la identificacin del estado libre del bus para iniciar una transmisin o recepcin de un nuevo mensaje.

21

2.2. Estructura de un nodo CAN


Dentro de un nodo CAN, se pueden distinguir una serie de mdulos interconectados entre ellos: un bus de direcciones, datos y un control (paralelo) enlazando el controlador central, la memoria de los datos y el programa(donde esta almacenado el software de aplicacin y el controlador de red de alto nivel), los dispositivos de entrada y salida y, la interfaz de comunicacin. Desde el punto de vista del controlador, la interfaz de comunicacin se puede ver como un conjunto de buzones, donde cada uno de estos sirve como registro lgico de interfaz entre el controlador local y los nodos remotos. Si un nodo quiere comunicarse, tiene que dar de alta los correspondientes buzones de recepcin y transmisin antes de hacer ninguna operacin.

22

Teniendo en cuenta esta arquitectura, el funcionamiento sigue los siguientes pasos: Para inicializar, el programador especifica los parmetros de los registros de control de interfaz de comunicacin, como las caractersticas del controlador de red o la velocidad de transmisin. A continuacin, se actualizan todos los buzones. En cada buzn se especifica si es receptor o transmisor y, su estado inicial, inicializando su parte de datos del bfer. Posteriormente, para transmitir un mensaje es necesario poner los datos en el bfer de datos correspondiente al buzn de transmisin y activar el flanco de transmisin. Por ltimo, la interfaz de red intenta comunicar los datos a travs de la red. El estado de la transferencia se puede comprobar en el estatus de estado de cada buzn.

Una vez hecha la configuracin inicial a partir del software de la capa de aplicacin de esta manera, los nodos CAN funcionarn de forma autnoma.

2.3. Formato de codificacin y sincronizacin de datos. La codificacin de bits se realiza por el mtodo NRZ (Non-Return-to Zero) que se caracteriza por que el nivel de seal puede permanecer constante durante largos periodos de tiempo y habr que tomar medidas para asegurarse de que el intervalo mximo permitido entre dos seales no es superado. Esto es importante para la sincronizacin (Bit Timing). Este tipo de codificacin requiere poco ancho de banda para transmitir, pero en cambio, no puede garantizar la sincronizacin de la trama transmitida. Para resolver esta falta de sincronismo se emplea la tcnica del bit stuffing: cada 5 bits consecutivos con el mismo estado lgico en una trama (excepto del delimitador de final de trama y el espacio entre tramas), se inserta un bit de diferente polaridad, no perdindose as la sincronizacin. Por otro lado este bit extra debe ser eliminado por el receptor de la trama, que slo lo utilizar para sincronizar la transmisin. No hay flanco de subida ni de bajada para cada bit, durante el tiempo de bit hay bits dominantes (0) y recesivos (1) y disminuye la frecuencia de seal respecto a otras codificaciones .

23

2.4 Tramas
2.4.1.Tipo de tramas El protocolo CAN est basado en mensajes, no en direcciones. El nodo emisor transmite el mensaje a todos los nodos de la red sin especificar un destino y todos ellos escuchan el mensaje para luego filtrarlo segn le interese o no. Existen distintos tipos de tramas predefinidas por CAN para la gestin de la transferencia de mensajes: Trama de datos: Se utiliza normalmente para poner informacin en el bus y la pueden recibir algunos o todos los nodos. Trama de informacin remota: Puede ser utilizada por un nodo para solicitar la transmisin de una trama de datos con la informacin asociada a un identificador dado. El nodo que disponga de la informacin definida por el identificador la transmitir en una trama de datos. Trama de error: Se generan cuando algn nodo detecta algn error definido. Trama de sobrecarga: Se generan cuando algn nodo necesita ms tiempo para procesar los mensajes recibidos. Espaciado entre tramas: Las tramas de datos (y de interrogacin remota) se separan entre s por una secuencia predefinida que se denomina espaciado inter-trama. Bus en reposo: En los intervalos de inactividad se mantiene constantemente el nivel recesivo del bus.

En un bus CAN los nodos transmiten la informacin espontneamente con tramas de datos, bien sea por un proceso cclico o activado ante eventos en el nodo. La trama de interrogacin remota slo se suele utilizar para deteccin de presencia de nodos o para puesta al da de informacin en un nodo recin incorporado a la red. Los mensajes pueden entrar en colisin en el bus, el de identificador de mayor prioridad sobrevivir y los dems son retransmitidos lo antes posible.

24

2.4.2. Trama de datos

Es la utilizada por un nodo normalmente para poner informacin en el bus. Puede incluir entre 0 y 8 bytes de informacin til.

Los mensajes de datos consisten en celdas que envan datos y aaden informacin definida por las especificaciones CAN:

Inicio de trama (SOF): El inicio de trama es una celda de un slo bit siempre dominante que indica el inicio del mensaje, sirve para la sincronizacin con otros nodos. Celda de Arbitraje (Arbitration Field): Es la celda que concede prioridad a unos mensajes o a otros: En formato estndar tendr 11 bits seguidos del bit RTR (Remote Transmisin Request) que en este caso ser dominante.

25

En formato extendido sern 11 bits de identificador base y 18 de extendido. El bit SRR substituye al RTR y ser recesivo.

NOTA: La trama en formato estndar prevalece sobre la extendida Celda de control (Control Field): El campo de control est formado por dos bits reservados para uso futuro y cuatro bits adicionales que indican el nmero de bytes de datos. En realidad el primero de estos bits (IDE) se utiliza para indicar si la trama es de CAN Estndar (IDE dominante) o Extendido (IDE recesivo). El segundo bit (RB0) es siempre recesivo. Los cuatro bits de cdigo de longitud (DLC) indican en binario el nmero de bytes de datos en el mensaje (0 a 8) Celda de Datos (Data Field): Es el campo de datos de 0 a 8 bytes. CRC: Cdigo de redundancia cclica: Tras comprobar este cdigo se podr comprobar si se han producido errores. Celda de reconocimiento (ACK): es un campo de 2 bits que indica si el mensaje ha sido recibido correctamente. El nodo transmisor pone este bit como recesivo y cualquier nodo que reciba el mensaje lo pone como dominante para indicar que el mensaje ha sido recibido. Fin de trama (EOF): Consiste en 7 bits recesivos sucesivos e indica el final de la trama. Espaciado entre tramas (IFS): Consta de un mnimo de 3 bits recesivos.

26

2.4.3 Trama remota (Remote Frame)

Los nodos tienen habilidad para requerir informacin a otros nodos. Un nodo pide una informacin a los otros y el nodo que tiene dicha informacin enva una comunicacin con la respuesta que puede ser recibida adems por otros nodos si estn interesados.

Un mensaje de peticin remota tiene la siguiente forma:

En este tipo de mensajes se enva una trama con el identificador del nodo requerido, a diferencia con los mensajes de datos, el bit RTR toma valor recesivo y no hay campo de datos. En caso de que se enve un mensaje de datos y de peticin remota con el mismo identificador, el de datos ganar el acceso al bus puesto que el RTR lleva valor dominante.

27

2.4.4. Trama de error Las tramas de error son generadas por cualquier nodo que detecta un error. Consiste en dos campos: Indicador de error ("Error Flag") y Delimitador de error(Error Delimeter). El delimitador de error consta de 8 bits recesivos consecutivos y permite a los nodos reiniciar la comunicacin limpiamente tras el error. El Indicador de error es distinto segn el estado de error del nodo que detecta el error:

Si un nodo en estado de error "Activo" detecta un error en el bus interrumpe la comunicacin del mensaje en proceso generando un "Indicador de error activo" que consiste en una secuencia de 6 bits dominantes sucesivos. Esta secuencia rompe la regla de relleno de bits y provocar la generacin de tramas de error en otros nodos. Por tanto el indicador de error puede extenderse entre 6 y 12 bits dominantes sucesivos. Finalmente se recibe el campo de delimitacin de error formado por los 8 bits recesivos. Entonces la comunicacin se reinicia y el nodo que haba sido interrumpido reintenta la transmisin del mensaje. Si un nodo en estado de error "Pasivo" detecta un error, el nodo transmite un "Indicador de error pasivo" seguido, de nuevo, por el campo delimitador de error. El indicador de error de tipo pasivo consiste en 6 bits recesivos seguidos y, por tanto, la trama de error para un nodo pasivo es una secuencia de 14 bits recesivos. De aqu se deduce que la transmisin de una trama de error de tipo pasivo no afectar a ningn nodo en la red, excepto cuando el error es detectado por el propio nodo que est transmitiendo. En ese caso los dems nodos detectarn una violacin de las reglas de relleno y transmitirn a su vez tramas de error. Tras sealar un error por medio de la trama de error apropiada cada nodo transmite bits recesivos hasta que recibe un bit tambin recesivo, luego transmite 7 bits recesivos consecutivos antes de finalizar el tratamiento de error.

28

La regla de relleno de bits que aparece lneas superiores, consiste en que cada cinco bits de igual valor se introduce uno de valor inverso tal y como se ve en la figura siguiente:

Otro mtodo para la deteccin de errores es el chequeo de la trama:

El campo CRC contiene informacin adicional a la trama, ste se calcula con un polinomio generador de igual manera en el receptor y en el emisor. Esto permite detectar errores aleatorios en hasta 5 bits o una secuencia seguida de 15 bits corruptos. El campo ACK, en el caso del emisor ser recesivo y el receptor deber sobrescribirlo como dominante y el primero comprobar, mediante la monitorizacin, que el mensaje ha sido escuchado. Si no sucede as, la trama se considerar corrupta.

29

2.4.5. Trama de sobrecarga

Una trama de sobrecarga tiene el mismo formato que una trama de error activo. Sin embargo, la trama de sobrecarga slo puede generarse durante el espacio entre tramas. De esta forma se diferencia de una trama de error, que slo puede ser transmitida durante la transmisin de un mensaje. La trama de sobrecarga consta de dos campos, el Indicador de Sobrecarga, y el delimitador. El indicador de sobrecarga consta de 6 bits dominantes que pueden ser seguidos por los generados por otros nodos, dando lugar a un mximo de 12 bits dominantes. El delimitador es de 8 bits recesivos. Una trama de sobrecarga puede ser generada por cualquier nodo que debido a sus condiciones internas no est en condiciones de iniciar la recepcin de un nuevo mensaje. De esta forma retrasa el inicio de transmisin de un nuevo mensaje. Un nodo puede generar como mximo 2 tramas de sobrecarga consecutivas para retrasar un mensaje. Otra razn para iniciar la transmisin de una trama de sobrecarga es la deteccin por cualquier nodo de un bit dominante en los 3 bits de "intermission". Por todo ello una trama de sobrecarga de 5 generada por un nodo dar normalmente lugar a la generacin de tramas de sobrecarga por los dems nodos dando lugar, como se ha indicado, a un mximo de 12 bits dominantes de indicador de sobrecarga.

2.4.6. Espacio entre tramas

El espacio entre tramas separa una trama (de cualquier tipo) de la siguiente trama de datos o interrogacin remota. El espacio entre tramas ha de constar de, al menos, 3 bits recesivos. Esta secuencia de bits se denomina "ntermission". Una vez transcurrida esta secuencia un nodo en estado de error activo puede iniciar una nueva transmisin o el bus permanecer en reposo. Para un nodo en estado error pasivo la situacin es diferente, deber espera una secuencia adicional de 8 bits recesivos antes de poder iniciar una transmisin. De esta forma se asegura una ventaja en inicio de transmisin a los nodos en estado activo frente a los nodos en estado pasivo.

30

2.5 Acceso mltiple y arbitraje de acceso al bus


Unas de las caractersticas que distingue a CAN con respecto a otras normas, es su tcnica de acceso al medio denominada como CSMA/CD+CR o "Carrier Sense, Multiple Access/Collision Detection + Collision Resolution" (Acceso Mltiple con deteccin de portadora, deteccin de colisin ms Resolucin de colisin). Cada nodo debe vigilar el bus en un periodo sin actividad antes de enviar un mensaje (Carrier Sense) y adems, una vez que ocurre el periodo sin actividad cada nodo tiene la misma oportunidad de enviar un mensaje (Multiple Access). En caso de que dos nodos comiencen a transmitir al unsono se detectar la colisin. El mtodo de acceso al medio utilizado en bus CAN aade una caracterstica adicional: la resolucin de colisin. En la tcnica CSMA/CD utilizada en redes Ethernet ante colisin de varias tramas, todas se pierden. CAN resuelve la colisin con la supervivencia de una de las tramas que chocan en el bus. Adems la trama superviviente es aquella a la que se ha identificado como de mayor prioridad. La resolucin de colisin se basa en una topologa elctrica que aplica una funcin lgica determinista a cada bit, que se resuelve con la prioridad del nivel definido como bit de tipo dominante. Definiendo el bit dominante como equivalente al valor lgico '0' y bit recesivo al nivel lgico '1' se trata de una funcin AND de todos los bits transmitidos simultneamente. Cada transmisor escucha continuamente el valor presente en el bus, y se retira cuando ese valor no coincide con el que dicho transmisor ha forzado. Mientras hay coincidencia la transmisin continua, finalmente el mensaje con identificador de mxima prioridad sobrevive. Los dems nodos reintentarn la transmisin lo antes posible. Se ha de tener en cuenta que la especificacin CAN de Bosh no establece cmo se ha de traducir cada nivel de bit (dominante o recesivo) a variable fsica. Cuando se utiliza par trenzado segn ISO 11898 el nivel dominante es una tensin diferencial positiva en el bus, el nivel recesivo es ausencia de tensin, o cierto valor negativo, (los transceptores no generan corriente sobre las resistencias de carga del bus). Esta tcnica aporta la combinacin de dos factores muy deseados en aplicaciones industriales distribuidas: la posibilidad de fijar con determinismo la latencia en la transmisin de mensajes entre nodos y el funcionamiento en modo multimaestro sin necesidad de gestin del arbitraje, es decir control de acceso al medio, desde las capas de software de protocolo. La prioridad queda as determinada por el contenido del mensaje, en CAN es un campo determinado, el identificador de mensaje, el que determina la prioridad

31

En un bus nico, un identificador de mensaje ha de ser asignado a un solo nodo concreto, es decir, se ha de evitar que dos nodos puedan iniciar la transmisin simultanea de mensajes con el mismo identificador y datos diferentes. El protocolo CAN establece que cada mensaje es nico en el sistema, de manera que por ejemplo, si en un automvil existe la variable presin de aceite, esta variable ha de ser transmitida por un nodo concreto, con un identificador concreto, con una longitud fija concreta y coherente con la codificacin de la informacin en el campo de datos. En la siguiente figura se ve un ejemplo de arbitraje en un bus CAN.

32

2.6. Deteccin de Errores


Una de las caractersticas ms importantes y tiles de CAN es su alta fiabilidad, incluso en entornos de ruido extremos, el protocolo CAN proporciona una gran variedad de mecanismos para detectar errores en las tramas. Esta deteccin de error es utilizada para retransmitir la trama hasta que sea recibida con xito. Otro tipo de error es el de aislamiento, y se produce cuando un dispositivo no funciona correctamente y un alto por ciento de sus tramas son errneas. Este error de aislamiento impide que el mal funcionamiento de un dispositivo condicione el funcionamiento del resto de nodos implicados en la red.

2.6.1. Deteccin de errores En el momento en que un dispositivo detecta un error en una trama, este dispositivo transmite una secuencia especial de bits, el error flag.Cuando el dispositivo que ha transmitido la trama errnea detecta el error flan, transmite la trama de nuevo. Los dispositivos CAN detectan los errores siguientes: Error de bit: Durante la transmisin de una trama, el nodo que transmite monitoriza el bus. Cualquier bit que reciba con polaridad inversa a la que ha transmitido se considera un error de bit, excepto cuando se recibe durante el campo de arbitraje o en el bit de reconocimiento. Adems, no se considera error de bit la deteccin de bit dominante por un nodo en estado de error pasivo que retransmite una trama de error pasivo. Error de relleno (Stuff Error): Se considera error de relleno la deteccin de 6 bits consecutivos del mismo signo, en cualquier campo que siga la tcnica de relleno de bits, donde por cada 5 bits iguales se aade uno diferente. Error de CRC: Se produce cuando el calculo de CRC realizado por un receptor no coincide con el recibido en la trama. El campo CRC (Cyclic Redundant Code) contiene 15 bits y una distancia de Hamming de 6, lo que asegura la deteccin de 5 bits errneos por mensaje. Estas medidas sirven para detectar errores de transmisin debido a posible incidencias en el medio fsico como por ejemplo el ruido. Error de forma (Form Error): Se produce cuando un campo de formato fijo se recibe alterado como bit. Error de reconocimiento (Acknowledgement Error): Se produce cuando ningn nodo cambia a dominante el bit de reconocimiento.

33

Si un nodo advierte alguno de los fallos mencionados, iniciar la transmisin de una trama de error. El protocolo CAN especifica diversos fallos en la lnea fsica de comunicacin, como por ejemplo lnea desconectada, problemas con la terminacin de los cables o lneas cortocircuitadas. Sin embargo, no especificar como reaccionar en caso de que se produzca alguno de estos errores.

2.6.2. Aislamiento de nodos defectuosos Para evitar que un nodo en problemas condicione el funcionamiento del resto de la red, se han incorporado a la especificacin CAN medidas de aislamiento de nodos defectuosos que son gestionadas por los controladores. Un nodo pude encontrarse en uno de los tres estados siguientes en relacin a la gestin de errores: Error Activo (Error Active): Es el estado normal de un nodo. Participa en la comunicacin y en caso de deteccin de error enva una trama de error activa Error pasivo (Error Passive): Un nodo en estado de error pasivo participa en la comunicacin, sin embargo ha de esperar una secuencia adicional de bits recesivos antes de transmitir y slo puede sealar errores con una trama de error pasiva. Anulado (Bus Off): En este estado, deshabilitar su transceptor y no participar en la comunicacin.

La evolucin entre estos estados se basa en dos contadores incluidos en el controlador de comunicaciones. Contador de errores de transmisin (TEC) y Contador de errores de recepcin (REC).

Evolucin entre estados de error.

34

2.7. Especificaciones
CAN tiene dos formatos diferentes para transmitir datos: el formato de trama estndar (Standard Frame), segn la especificacin CAN 2.0A y, el formato de trama extendida (Extended Frame) segn la especificacin CAN 2.0B. La principal diferencia entre ambos es la longitud del identificador del mensaje (ID), que en el caso de la trama estndar es de 11 bits (2032 identificadores, ya que los 16 bits identificadores de menor prioridad estn reservados) y en el caso de la extendida es de 29 bits (mas de 536 millones de identificadores): Controladores 2.0A: nicamente transmiten y reciben mensajes en formato estndar. Si el formato es extendido se producir un error. Controladores 2.0B pasivos: nicamente transmiten y reciben mensajes en formato estndar, pero admiten la recepcin de mensajes en formato extendido, aunque los ignora posteriormente. Controladores 2.0B activos: transmiten y reciben mensajes en ambos formatos.

2.8. Implementaciones
Existen tres tipos de arquitecturas en microcontroladores: Stand-Alone CAN controller, Integrated CAN Controller y Single-Chip CAN Node.

Stand-Alone CAN Controller

Es la arquitectura ms simple, para llevar a cabo una comunicacin en una red CAN ser necesario: 1. Un microcontrolador como puede ser el 16F877, con el que se ha venido trabajando a lo largo de todo este proyecto. 2. Un controlador CAN que introduzca el protocolo CAN, filtro de mensajes, y todo el interface necesario para las comunicaciones. Un ejemplo de controlador CAN es el MCP2510 cuya DATA SHEET se puede encontrar en la pgina web de microchip. 3. Un transceiver CAN, esto es, un transmisor/receptor que puede ser por ejemplo el MCP2551 desarrollado por microchip.

35

As pues, si de alguna manera se pretende trabajar en una red CAN con una placa de pruebas, en un principio no sera factible a no ser que de alguna manera se le acoplasen el controlador y el transceptor CAN correspondiente. Pero Microchip ha creado una placa de pruebas especfica para este tipo de comunicaciones, que desarrolla adems este tipo de arquitectura y que se puede conseguir tambin a travs de la pgina web de microchip.

Integrated CAN Controller

Este tipo de arquitectura consiste en un microcontrolador que incluya, no slo sus caractersticas propias sino adems un mdulo CAN con las caractersticas de un microcontrolador CAN. El transceiver se sita de manera separada. Este es el caso de nuestro microcontrolador dSPIC30F4013. El mdulo del transceptor acta como un controlador de lnea, balanceando la seal, esto es, adecuando los niveles de tensin de esta al exterior.

36

Single-chip CAN Node

Se trata de un chip que incluye en su interior los tres elementos necesarios para llevar a cabo las comunicaciones en un entorno CAN.

37

2. CAN DEL MICRO dsPIC30F4013

38

3.1. Caractersticas bsicas


Se trata de una interfaz serie, utilizada para la comunicacin con otros mdulos CAN u otros dispositivos del propio microcontrolador. El mdulo est formado por un motor de protocolo (protocol engine) y por un control y almacenamiento de los mensajes. El motor de protocolo CAN maneja todas las funciones encargadas de recibir y transmitir mensajes a travs del bus. El estado y los errores de la transmisin pueden consultarse leyendo en los registros apropiados. Adems, como ya sabemos, cualquier mensaje detectado en el bus es sometido a un control de errores y despus es filtrado para comprobar si debera ser recibido y almacenado en uno de los registros de recepcin, o debera por lo contrario ser rechazado. Bsicamente las caractersticas tcnicas del mdulo son las siguientes: Implementa el protocolo CAN 2.0 A/B tal y como lo define Bosch, es decir, soporta CAN 1.2, CAN 2.0A, CAN 2.0B Pasivo y CAN 2.0B Activo. Soporta tramas de datos estndar y extendidas. De 0 a 8 bytes de longitud de datos. Velocidad de transferencia de datos programable hasta 1 Mbit/segundo. Admite tramas remotas. Receptor de doble bfer, con dos bufers de almacenamiento de mensajes con prioridad recibidos (cada bfer puede contener hasta 8 bytes de datos). 6 filtros de aceptacin completa (full acceptance filter), tanto para mensajes con identificador estndar como extendido. De ellos, 2 estn asociados con el bfer de recepcin de prioridad alta y 4 lo estn asociados con el bfer de recepcin de prioridad baja. 2 mscaras de filtro de aceptacin completa (full acceptance filter masks), cada una de ellas asociada a los bufers de recepcin de alta o de baja prioridad. 3 bufers de transmisin con asignacin de prioridades especficas y capacidad de aborto (cada bfer puede contener hasta 8 bytes de datos) Funcin de despertador (wake-up) programable con filtros paso-bajo integrados. Modo Loopback programable con operacin de auto-test (self-test).

39

Capacidad de sealizacin a travs de interrupciones por parte de todos los receptores y transmisores de estados de error CAN. Reloj fuente (clock source) programable. Enlace programable al mdulo de captura de entrada (IC2, tanto para CAN1 como para CAN2) para la funcin time-stamping (marcas de tiempo) y sincronizacin de red. 2 modos de baja potencia: Sleep (dormido) e Idle (parado).

40

3.2. Transceptor (transceiver)


Como ya hemos visto anteriormente, dsPIC30F4013 implementa un controlador CAN integrado, y en este tipo de implementaciones el transceptor (transceiver) no est dentro del propio microcontrolador. En definitiva, para poder trabajar con l deberemos conectar uno de estos transceptores al microcontrolador. A pesar de que los transceptores pueden funcionar a diferentes tensiones, tendremos que elegir uno que pueda funcionar a 3.3 voltios, que es la tensin con la que vamos a alimentar al microcontrolador a la hora de utilizarlo. Ejemplo de Transceptor CAN de alta velocidad: MCP2551 Aunque existen un gran nmero en el mercado, hemos escogido un modelo compatible para explicar como seran las conexiones y una breve explicacin de su funcionamiento.

Este transceptor puede direccionar una carga mnima de 45 Ohms, permitiendo conectarse a un mximo de 112 nodos. La entrada del transceptor, RXD, proporciona el diferencial de tensin entre CANH y CANL. El pin Rs permite elegir entre 3 modos de funcionamiento: - High Speed mode: Se consigue conectando el pin Rs a Vdd. - Slope Control:: Reduce enormemente las emisiones electromagnticas disminuyendo los tiempos de subida y de cada de CANH y CANL. Este control se logra mediante una resistencia entre Rs y Ground (masa). La tasa de ralentizacin es proporcional a la salida actual en Rs. - Standby mode: Se consigue poniendo a nivel alto la patilla Rs. En este modo, el transmisor est apagado, y el receptor funciona ralentizado, es decir, el pin del receptor RXD seguir operativo, pero de forma ms lenta. 41

La conexin fsica sera a travs de los pines C1RX (recepcin CAN del micro), C1TX (transmisin CAN del micro) del microcontrolador, con los pines RXD y TXD del transceptor. Recordar que la funcin del transceptor es la de adecuar la seal de entrada del bus a la del sistema. Esta entrada de seal del bus se efecta a travs de los patillas CANH y CANL del transceptor. Aqu vemos la conexin entre el micro y el transceptor, representado esta vez por un diagrama de bloques: Encapsulado del microcontrolador dsPIC30F4013

Diagrama de bloques del transceptor

42

3.3. Modos de funcionamiento


El mdulo puede trabajar en uno de entre varios modos de funcionamiento, previamente escogido por el usuario entre: Modo de inicializacin (Initialization mode) Modo deshabilitado (Disable mode) Modo de funcionamiento normal (Normal operation mode) Modo de solo escucha (Listen only mode) Modo en bucle (Loopback mode) Modo de reconocimiento de errores (Error recognition mode)

Los modos se solicitan poniendo los bits del registro REQOP<2:0> (CiCTRL<10:8>), excepto el modo de reconocimiento de errores que se selecciona a travs de los bits RXM<1:0> (CiRXnCON<6:5>, donde n=0 o n=1 representan un bfer de recepcin en particular). La entrada en un modo se reconoce observando los bits del registro OPMODE<2:0> (CiCTRL<7:5>). El mdulo no cambiar de modo, ni tampoco cambiar los bits OPMODE mientras el cambio de modo no sea correcto. Generalmente, para que sea correcto ha de hacerse durante el tiempo en que el bus est parado (Idle time), es decir, cuando se envan al menos 11 bits recesivos consecutivos.

Modo de inicializacin (Initialization mode) En este modo, el mdulo no puede transmitir ni recibir datos. Al seleccionarlo, los contadores de error se ponen a 0 y las banderas de interrupcin (interrupt flags) permanecen inalterables. A la hora de programar, desde l tendremos acceso a ciertos registros de configuracin a los cuales no se puede acceder desde ningn otro modo. Adems, el mdulo nos proteger de violaciones accidentales del protocolo CAN que podamos causar durante la programacin. Para poder acceder al modo de configuracin (Configuration mode) no se puede estar en mitad de una transmisin; es por ello que ninguno de los registros que controlan la configuracin del mdulo puede ser modificado mientras el mdulo est conectado. El susodicho modo de configuracin ejerce de cerrojo para proteger los siguientes registros: Registros de control del mdulo (Module control registers) Registros de tasa (velocidad de transmisin) en baudios (Baud rate registers) y registros de configuracin de interrupciones (Interrupt configuration registers) Registros de temporizacin del bus (Bus timing registers) Registros identificadores de los filtros de aceptacin (Identifier acceptance filter registers) Registros identificadores de las mscaras de aceptacin (Identifier acceptance mask registers).

43

Modo deshabilitado (Disable mode) En este modo, el mdulo tampoco transmite ni recibe datos. Si hay actividad en el bus, el mdulo pondr a 1 los bits del registro WAKIF, mientras que las interrupciones sin ejecutar quedaran pendientes y los contadores de error conservaran su valor. Si los bits REQOP<2:0> (CiCTRL<10:8>) = 001, el mdulo entrar en el modo deshabilitado. Si en ese momento el mdulo est activo, entonces esperar hasta que le lleguen 11 bits recesivos desde el bus, los cuales detectar e interpretar como a que el bus est sin utilizar (Idle bus); despus aceptar el comando de mdulo deshabilitado (module disable command). Cuando los bits OPMODE<2:0> (CiCTRL<7:5>) = 001, el mdulo habr entrado satisfactoriamente al modo. Los pins de entrada/salida (I/O) volvern a su funcin normal cuando el mdulo est en el modo de mdulo inutilizado (Module Disable mode). El mdulo puede ser programado para aplicar un filtro paso-bajo a la lnea de entrada CiRX, mientras el mdulo o la CPU estn en modo dormido (Sleep mode). El bit WAKFIL (CiCFG2<14>) es el que activa o desactiva este filtro. NOTA: Si el mdulo va a trabajar en un modo de funcionamiento particular y es solicitada una transmisin inmediatamente despus de que el mdulo CAN se haya colocado en ese modo de funcionamiento, esperar 11 bits recesivos consecutivos en el bus antes de empezar la transmisin. Si el usuario decide cambiar al modo deshabilitado (disable mode) dentro del periodo de esos 11 bits recesivos, la transmisin ser cancelada y se colocar el bit TXABT y ser borrado el bit TXREQ.

Modo de funcionamiento normal (Normal operation mode) Para seleccionar el modo de funcionamiento normal, debemos poner los bits REQOP<2:0> = 000. Al entrar en este modo, el mdulo se activa y los pins de entrada/salida (I/O) asumen las funciones del bus CAN, es decir, el mdulo transmitir y recibir mensajes del bus a travs de los pins CxTX y CxRX.

Modo de solo escucha (Listen only mode) Cuando activamos este modo, el mdulo est pasivo. Los bufers de transmisin funcionan como puertos de entrada/salida (I/O), y los pins receptores por su parte, continan como entradas. El receptor deja de enviar banderas de error (error flags) y seales de reconocimiento (acknowledge signals), y los contadores de error se desactivan. El modo de solo escucha puede ser utilizado para detectar la tasa (velocidad de transmisin) en baudios sobre el bus. Parece evidente que para poder utilizarlo, es necesario que haya al menos dos nodos remotos que se comuniquen el uno con el otro.

44

Modo de escucha de todos los mensajes (Listen all messages mode) En l, el mdulo es fijado para ignorar todos los errores y poder recibir as cualquier mensaje que se ha enviado a travs del bus. Para activarlo, debemos poner los bits de REQOP<2:0> = 111. En este modo, los datos que estn en el buffer de ensamblado de mensajes (message assembly buffer) hasta que ocurre un error, son copiados en el bfer de recepcin y pueden ser ledos a travs de la interfaz de la CPU.

Modo loopback (Loopback mode) Cuando el modo loopback se activa, la seal interna de transmisin y la seal interna de recepcin se conectan en el lmite del mdulo, formando una especie de bucle cerrado. Los pins de transmisin y de recepcin vuelven a sus funciones de puerto de entrada/salida I/O.

45

3.4. Recepcin de mensajes


Bufers de recepcin El mdulo del bus CAN tiene 3 bufers de recepcin. No obstante, uno de los bufers de recepcin se dedica continuamente a escuchar el bus en espera de mensajes entrantes. Este bfer se llama Bfer de ensamblado de mensajes (Message Assembly Buffer o MAB). Por tanto hay 2 bufers de recepcin visibles, RXB0 y RXB1, que pueden recibir simultneamente un mensaje completo desde el motor de protocolo. Todos los mensajes son montados por el MAB y son transferidos a los bufers RXBn solo si se encuentran los filtros de criterios de aceptacin. Cuando se recibe un mensaje, la bandera (flag) RXnIF (CiINTF <0> o CiINTF <1>) se pone a 1. Este bit solo puede ser activado por el modulo cuando se recibe un mensaje. La CPU pone el bit a cero cuando ha completado el procesado del mensaje en el bfer. Si el bit RXiIE (CiINTE <0> o CiINTE <1>) est a 1, se generar una interrupcin cuando se reciba un mensaje. Los filtros RXF0 y RXF1 con la mscara RXM0 estn asociados con RXB0. Los filtros RXF2, RXF3, RXF4 y RXF5 y la mscara RXM1 estn asociados con RXB1.

Filtros de aceptacin de mensajes Los filtros y mascaras de aceptacin de mensajes se usan para determinar si un mensaje del bfer de ensamblado de mensajes debe ser cargado en alguno de los bufers de recepcin. Una vez un mensaje vlido ha sido recibido por el MAB, los campos de identificacin del mensaje son comparados con los valores de los filtros. Si hay una coincidencia, ese mensaje ser cargado en el bfer de recepcin apropiado. El filtro de aceptacin busca en los mensajes entrantes el bit RXIDE (CiRXnSID<0>) para determinar como comparar los identificadores. Si el bit RXIDE esta desactivado, el mensaje es una trama estndar y solo se comparan los filtros con el bit EXIDE (CiRXFnSID<0>) a cero. Si el bit RXIDE est puesto a 1, el mensaje es una trama extendida, y solo son comparados los filtros con el EXIDE a 1. Configurando los bits RXM<1:0> a 01 a 10 se puede borrar el bit EXIDE.

Mscaras de filtro de aceptacin de mensajes Los bits de mscara determinan que bits se han de aplicar en el filtro. Si un bit de mscara est a cero, entonces este bit ser aceptado automticamente independientemente del bit de filtro. Hay 2 mscaras de filtro de aceptacin programables, asociadas con los bufers de recepcin, una por cada bfer.

46

Sobrecarga de recepcin: Esta condicin de sobrecarga se da cuando el MAB ha ensamblado un mensaje recibido vlido, cuando el mensaje es aceptado a travs del filtro de aceptacin, y cuando el bfer de recepcin asociado con el filtro no ha sido designado como vaco por el mensaje previo. El flag de error de sobrecarga, RXnOVR (CiINTF<15> o CiINTF<14>), y el bit ERRIF (CiINTF<5>) son puestos a 1 y el mensaje del MAB es descartado. Si el bit DBEN est desactivado, RXB1 y RXB0 operan independientemente. Cuando esto ocurre, un mensaje dirigido a RXB0 no es desviado a RXB1 si el RXB0 contiene un mensaje no ledo y el RX0OVR se pone a 1. Si el bit DBEN esta activado, la sobrecarga del RXB0 se trata de forma diferente. Si se recibe un mensaje vlido para RXB0 y el bit RXFUL = 0, el mensaje para RXB0 se carga en RXB1. No se genera un mensaje de error de sobrecarga para RXB0. Si se recibe un mensaje valido para RXB0 y el bit RXFUL = 1, tanto RXB0 como RXB1 estn llenos, por lo tanto, el mensaje se perder y se generar un mensaje de error de sobrecarga para RXB1.

Errores de recepcin El Modulo CAN puede detectar los siguientes errores de recepcin: - Error de Chequeo de Redundancia Cclica (CRC) - Error de Relleno de Bits (Bit Stuffing Error) - Error de Mensaje Invlido Recibido Estos errores de recepcin no generan una interrupcin. Sin embargo, si que se incrementa el contador de errores de recepcin. El bit RXWAR (CiINTF<9>) indica que el contador de errores de recepcin ha alcanzado el lmite de advertencia de la CPU (este lmite es 96) y se genera una interrupcin.

Interrupciones de recepcin Las Interrupciones de recepcin se pueden dividir en 3 grandes grupos, cada uno de ellos incluye varias condiciones que generan interrupciones: - Interrupcin de recepcin: Un mensaje se ha recibido correctamente y se ha cargado en uno de los bufers de recepcin. Esta interrupcin se activa inmediatamente despus de recibir el campo Fin de Trama (EOF). El flag RXnIF indica que buffer de recepcin ha causado la interrupcin. - Interrupcin de despertador (Wake-up Interrupt): El mdulo CAN se ha despertado del modo Deshabilitado (Disable) o el dispositivo se ha despertado del modo Durmiendo (Sleep) - Interrupcin de error de recepcin: Una interrupcin de error de recepcin se seala en el bit ERRIF. La fuente del error puede ser determinada comprobando los bits del registro Estatus de Interrupcin CAN, CiINTF.

47

Mensaje Invlido Recibido: Si ocurre algn tipo de error durante la recepcin del ultimo mensaje, se indicar un error mediante el bit IVRIF. Sobrecarga de Receptor: El bit RXnOVR indica que ha ocurrido un error de sobrecarga. Advertencia del Receptor: El bit RXWAR indica que el contador de errores de recepcin (RERRCNT<7:0>) ha alcanzado el lmite de advertencia de 96. Error de Recepcin Pasivo: El bit RXEP indica que el contador de errores de recepcin ha excedido el lmite de error pasivo de 127 y el mdulo ha entrado en el estado error pasivo.

3.5. Transmisin de mensajes


Bufers de transmisin: El mdulo CAN tiene 3 bufers de transmisin. Cada uno de los 3 bufers de transmisin ocupa 14 bytes de datos. Ocho de los bytes son los 8 bytes que puede ocupar como mximo el mensaje transmitido. Cinco bytes son los identificadores estndar y extendidos y otra informacin de control del mensaje.

Prioridad de transmisin del mensaje: La prioridad de transmisin es una priorizacin dentro de cada nodo de los mensajes pendientes de transmitir. Hay 4 niveles de prioridad de transmisin. Si TXPRI<1:0> (CiTXnCON<1:0>, donde n = 0, 1 o 2 representa el bfer de transmisin en particular) para un bfer de mensaje en particular se establece a 11, ese bfer tiene la mxima prioridad. Si TXPRI<1:0> para un bfer de mensaje en particular se establece a 10 o a 01, ese bfer tiene una prioridad intermedia. Si TXPRI<1:0> para un bfer de mensaje en particular se establece a 00, ese bfer tiene la mnima prioridad.

Secuencia de transmisin: Para iniciar la transmisin del mensaje, el bit TXREQ (CiTXnCON<3>) debe ponerse a 1. El mdulo del bus CAN resuelve cualquier conflicto de tiempo entre el establecimiento del bit TXREQ y el Inicio de Trama (SOF), asegurando que si la prioridad ha sido cambiada, se ha resuelto correctamente antes de llegar al SOF. Cuando se pone a 1 TXREQ, los bits del flag TXABT (CiTXnCON<6>), TXLARB (CiTXnCON<5>) y TXERR (CiTXnCON<4>) son puestos a 0 automticamente. Poner a 1 el bit TXREQ simplemente marca un bfer de mensaje como puesto en cola para transmisin. Cuando el mdulo detecta el bus disponible, empieza a transmitir el mensaje que tiene mayor prioridad.

48

Si la transmisin se completa satisfactoriamente en el primer intento, el bit TXREQ se pone a 0 automticamente y se genera una interrupcin si TXIE haba sido activado. Si la transmisin del mensaje falla, se activa uno de los avisos de condicin de error y el bit TXREQ permanece a 1, indicando que el mensaje est an pendiente de transmisin. Si el mensaje encuentra una condicin de error durante el intento de transmisin, el bit TXERR se pone a 1 y puede causar una interrupcin. Si el mensaje pierde arbitraje durante el intento de transmisin, se pone a 1 el bit TXLARB. No se genera interrupcin para indicar la perdida de arbitraje.

Abortando la transmisin del mensaje: El sistema tambin puede abortar el envo de un mensaje poniendo a 0 el bit TXREQ asociado con cada bfer de mensaje. Poniendo a 1 el bit ABAT (CiCTRL<12>) se solicita abortar todos los mensajes pendientes. Si el mensaje an no ha iniciado la transmisin, o si el mensaje la ha iniciado pero es interrumpida por prdida de arbitraje o por un error, se procesa el aborto. El aborto se indica poniendo a 1 el bit TXABT y la bandera (flag) TXnIF no se activa automticamente.

Errores de transmisin El modulo CAN detecta los siguientes errores de transmisin: - Error de Ack - Error de forma - Error de bit Estos errores de transmisin no generan necesariamente una interrupcin, pero son indicados por el contador de errores de transmisin, incrementndolo en uno. Una vez que el contador de errores supera el valor de 96, los bits ERRIF (CiINTF<5>) y TXWAR (CiINTF<10>) son puestos a 1. Adems, se genera una interrupcin y se pone a 1 el bit TXWAR del registro de banderas de error.

Interrupciones de transmisin Las Interrupciones de transmisin se pueden dividir en 2 grandes grupos, cada uno de estos incluye varias condiciones que generan interrupciones: Interrupciones de transmisin: Al menos uno de los tres bufers de transmisin est vaco y puede ser cargado para programar una transmisin de mensaje. Los flags TXnIF indican que bfer de transmisin est disponible y ha sido el causante de la interrupcin. Interrupciones de errores de transmisin: Una interrupcin error de transmisin se indica con el flag ERRIF. La fuente del error se puede determinar comprobando los flags de error en el registro de Estatus

49

de Interrupcin del CAN, CiINTF. Los flags de este registro estn relacionados con los errores de transmisin y de recepcin. Interrupcin de Advertencia del Transmisor: El bit TXWAR indica que el contador de errores de transmisin ha alcanzado el lmite de advertencia de la CPU (96). Error Pasivo del Transmisor: El bit TXEP (CiINTF<12>) indica que el contador de errores de transmisin ha superado el lmite de error pasivo de 127 y el modulo ha entrado en el estado de error pasivo. Bus Off: El bit TXBO (CiINTF<13>) indica que el contador de errores de transmisin ha superado 255 y el mdulo ha entrado en el estado de bus off.

50

3.6. Temporizacin y sincronizacin de bits


3.6.1. Temporizacin de bits Las seales elctricas del bus sufren las alteraciones propias de la distorsin que se produce, tanto por las caractersticas fsicas de la lnea, los retardos de propagacin, y los retardos producidos en los propios controladores, como por las posibles fuentes externas de interferencia electromagntica. Por otra parte, cada controlador CAN depende, normalmente, de un oscilador distinto, lo que provoca diferencias de frecuencia que pueden dar lugar a desfases en el muestreo de tramas de los distintos nodos. Por ello, los controladores siguen un proceso de muestreo y resincronizacin orientado a evitar los desajustes debidos a estas circunstancias adversas. Estos desajustes se manifiestan especialmente en el arbitraje de mensajes, cuando varios nodos transmiten de forma simultnea, ya que es prcticamente imposible que esten completamente sincronizados; y adems la frecuencia del oscilador de ambos puede ser ligeramente distinta. Los receptores que se han sincronizado con el primer flanco de bajada detectado, debern ir resincronizndose sucesivamente a los flancos producidos por el nodo que acabe transmitiendo. CAN utiliza sealizacin asncrona y un tipo de codificacin NRZ, en la que normalmente 0V representa un 0 lgico, y 5V representa un 1 lgico. Es necesaria, por tanto, una operacin de muestreo por parte de los receptores, que se han de resincronizar peridicamente. Adems, la tasa de transmisin (desde menos de 1 kbps hasta 1 Mbps) tambin es un factor determinante. Todos estos parmetros pueden programarse individualmente y ser ejecutados por el reloj lgico de CAN (Bit Timing Logic). Para que el controlador, que es un sistema digital sncrono con una frecuencia de reloj generada por un oscilador (generalmente un oscilador de cuarzo), pueda muestrear la seal asncrona recibida con seguridad y precisin ha de utilizar una frecuencia de muestreo superior a la de la seal transmitida. Por otra parte, el controlador ha de utilizar una frecuencia de reloj que sea mltiplo de la frecuencia nominal de bit (nmero de bis transmitidos en ausencia de resincronizaciones por un transmisor ideal). Esta frecuencia se obtiene como cociente de la frecuencia del oscilador. La velocidad de comunicacin a la que queda configurado el controlador, para un oscilador de cierta frecuencia, queda definida por el valor del divisor de frecuencia (BRP), tambin configurable, y por el nmero de TQ por bit. TQ (quantum de tiempo) es una unidad de tiempo fija, derivada del periodo del oscilador.

51

Debemos, por tanto, cambiar de escala para bajar la frecuencia del reloj, y as poder adecuar el sistema a nuestras necesidades. Este valor para nuestro dsPIC30F4013, se define en su correspondiente manual como ajuste de preescalado (prescaler setting) y se obtiene a partir de la siguiente ecuacin:

TQ =

2( BRP < 5 : 0 > +1) FCAN

donde FCAN es FCY (si el bit CANKS est puesto a 1) o 4FCY (si CANKS est puesto a 0). Adems, FCAN no debe sobrepasar nunca los 30 MHz, es decir que si CANKS = 0, FCY no debe exceder de 7.5 MHz, ya que como hemos dicho FCAN=4FCY en este caso. Adems, para asegurar la funcionalidad de la red, se incluye en una posicin concreta del tiempo de bit (del cual hablaremos ms adelante), un punto de muestreo (sample point en ingls). Este es el punto exacto en el que el nivel de bus es ledo e interpretado como el valor de ese respectivo bit. En algunos microcontroladores, entre los que se incluye dsPIC30F4013, si la temporizacin de bits se retrasa y contiene muchos TQ, es posible realizar tambin, un muestreo mltiple sobre el bus. En este caso, las muestras para realizar el clculo pueden ser tomadas en el punto de muestreo o en dos posiciones anteriores a este con una distancia de TQ/2. Adems, el mdulo CAN permite al usuario elegir entre muestrear tres veces en el mismo punto o una vez en cada uno de los tres puntos, segn pongamos a 0 o a 1 el bit SAM (CiCFG2<6>). Es decir, en este tipo de muestreo el nivel determinado por el bus corresponde al resultado por mayora de tres valores. Para asegurar la validez del clculo, este muestreo debe ocupar del 60 al 70 por ciento del tiempo de bit, dependiendo de los parmetros del sistema.

3.6.2. Resincronizacin de bits (Resynchronization) La resincronizacin consiste en el acortamiento o alargamiento del tiempo de bit (o nmero de TQ por bit) para que el punto de muestreo se desplace con relacin al ltimo flanco recesivo-dominante detectado. Esta decisin la toma el controlador tras detectar el flanco y evaluar el error. En CAN se siguen dos mtodos de sincronizacin del muestreo con la secuencia de bits de la trama: Sincronizacin de trama ("Hard Synchronization"): Es la reinicializacin de la lgica de muestreo de bit que ocurre ante el flanco de bajada (paso de recesivo a dominante) producido por un bit de inicio de trama. Resincronizacin o sincronizacin intra-trama ("Soft Synchronization" o Resyncronization): Es un proceso de sincronizacin que ocurre en cada flanco de bajada que se produce durante la transmisin de la trama.

52

Puede producir el alargamiento o el acortamiento de los segmentos de fase de los que hablamos en la siguiente seccin.

3.6.3. Parmetros del tiempo de bit nominal El tiempo de bit nominal se ide como una divisin del tiempo en segmentos separados y no superpuestos. El microcontrolador dsPIC30F4013 define para el tiempo de bit nominal un mnimo de 8 TQ y un mximo de 25 TQ, mientras que define el mnimo tiempo de bit nominal como 1 segundo, correspondiente a una tasa mxima (velocidad de transmisin mxima) en bits de 1 MHz. Su esquema grfico es el siguiente:

Se puede observar como el punto de muestreo del bit (sample point) se realiza inmediatamente despus del segmento Phase_Seg1 y antes de Phase_Seg2. Las funciones y los tiempos de cada uno de los segmentos son los siguientes: Segmento de sincronizacin (Sync_Seg): En este intervalo se espera que se produzca cualquier cambio de recesivo a dominante en el bus. Su duracin es de 1 TQ. Segmento de propagacin (Prop_Seg): Est orientado a la compensacin del retardo de tiempo de la red. Este retardo es la suma del provocado por la lnea y el debido a la electrnica de la interfaz de los controladores. El segmento puede configurarse como de 1 a 8 TQ de duracin poniendo a 1 los bits PRSEG<2:0> (CiCFG2<2:0>). Segmento de fase 1 (Phase_Seg1): Este segmento est orientado a la deteccin y reajuste de desfases entre nodos. Puede configurarse como de 1 a 8 TQ de duracin poniendo a 1 los bits SEG1PH<2:0> (CiCFG2<5:3>), aunque puede alargarse en operaciones de resincronizacin.

53

Segmento de fase 2 (Phase_Seg2): Es el encargado de retrasar la siguiente transicin de datos a transmitir. Su valor mximo puede ser igual al segmento de fase 1 ms grande o al tiempo de procesado de la informacin (2 TQ). El segmento es programable desde 1TQ hasta 8 TQ de duracin poniendo a 1 los bits SEG2PH<2:0> (CiCFG2<10:8>). Puede acortarse (nunca menos del tiempo de procesado de la informacin) en las operaciones de resincronizacin.

Un requisito imprescindible que deben cumplir los segmentos de fase para el ajuste de sus respectivas longitudes es el siguiente: Prop Seg + Phase 1 Seg >= Phase 2 Seg Y ya por ltimo, en cuanto al cambio de longitudes por la resincronizacin, se define un parmetro adicional: el salto de resincronizacin (Sjw o Resynchronization jump width) que establece el valor del salto mximo que se pueda llegar a efectuar como producto de la resincronizacin. En dsPIC30F4013 se especifica a travs de los bits del registro SJW<1:0> (CiCFG1<7:6>), con valores de entre 1 y 4 TQ, pero no mayores que Phase_Seg2, ya que durante el proceso, el valor de este parmetro o bien ser aadido al segmento de fase 1 o bien recortado del segmento de fase 2. Es decir, ha de cumplirse que: Phase2 Seg > Synchronization Jump Width

54

3.7. Programacin
3.7.1. MPLAB MPLAB es un software que junto con un emulador y un programador de los mltiples que existen en el mercado, forman un conjunto de herramientas de desarrollo muy completo para el trabajo y/o el diseo con los microcontroladores PIC y dsPIC desarrollados y fabricados por la empresa Arizona Microchip Technology (AMT). MPLAB incorpora todas las utilidades necesarias para la realizacin de cualquier proyecto y, si no se dispone de un emulador, el programa permite editar el archivo fuente en lenguaje ensamblador de nuestro proyecto, adems de ensamblarlo y simularlo en pantalla, pudiendo ejecutarlo posteriormente en modo paso a paso y ver como evolucionaran de forma real tanto sus registros internos, la memoria RAM y/o EEPROM de usuario como la memoria de programa, segn se fueran ejecutando las instrucciones. Adems el entorno que se utiliza es el mismo que si se estuviera utilizando un emulador. Nosotros, durante el desarrollo de la asignatura, utilizaremos la versin MpLab 30 v2 student edition (edicin gratuita que podemos adquirir en la pgina oficial de Microchip) la cual presenta algunas limitaciones respecto al software original pero que para nuestro trabajo es ms que suficiente ya que permite simular directamente sobre la placa de pruebas. Como ya hemos comentado, la utilizacin de MpLab requiere un emulador de lenguajes de alto nivel, para evitar la utilizacin del lenguaje de ensamblador que incluye el mismo MpLab. Nosotros utilizaremos el compilador c30.

Para conectar la placa con el ordenador y poder simular nuestros programas, utilizaremos el hardware y esquema de conexiones de la fotografa.

55

3.7.2. Funciones Esta seccin contiene una lista de las funciones para CAN y un ejemplo de uso de las funciones. El uso de las funciones, nos ahorra tener que conocer en profundidad las estructuras del mdulo CAN, ya que a travs de ellas podemos realizar acciones sin tener que cambiar manualmente los valores de los bits de ciertos registros. Adems, pueden ser puestas en prctica como macros. Las siguientes funciones definen a toda la familia dsPIC30f, en nuestro caso el dsPIC30F4013 solamente tiene un CAN.

Funciones individuales

CAN1AbortAll CAN2AbortAll Descripcin: Include: Prototipo: Argumentos: Valores de retorno: Comentarios: Archivo de origen: Ejemplo de cdigo:

Esta funcin aborta inicialmente todas las transmisiones pendientes. can.h void CAN1AbortAll(void); void CAN2AbortAll(void); Ninguno Ninguno CAN1AbortAll.c CAN2AbortAll.c CAN1AbortAll();

CAN1GetRXErrorCount CAN2GetRXErrorCount Descripcin: Include: Prototipo: Argumentos: Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

Esta funcin devuelve la cuenta del valor del error al recibir. can.h Unsigned char CAN1GetRXErrorCount(void); Unsigned char CAN2GetRXErrorCount(void); Ninguno El contenido de CIRERRCNT, que son 8 bits Esta funcin devuelve el contenido de CIRERRCNT (el bit ms bajo del registro CiEC) que indica la cuenta de errores recibidos. CAN1GetRXErrorCount.c CAN2GetRXErrorCount.c unsigned char rx_error_count; rx_error_count = CAN1GetRXErrorCount();

56

CAN1GetTXErrorCount CAN2GetTXErrorCount Descripcin: Include: Prototipo: Argumentos: Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

Esta funcin devuelve la cuenta del valor del error al enviar. can.h Unsigned char CAN1GetTXErrorCount(void); Unsigned char CAN2GetTXErrorCount(void); Ninguno El contenido de CIRERRCNT, que son 8 bits Esta funcin devuelve el contenido de CIRERRCNT (el bit superior del registro CiEC) que indica la cuenta de errores al transmitir. CAN1GetTXErrorCount.c CAN2GetTXErrorCount.c unsigned char tx_error_count; tx_error_count = CAN1GetTXErrorCount();

CAN1sBusOff CAN2sBusOff Descripcin: Include: Prototipo: Argumentos: Valores de retorno:

Comentarios: Archivo de origen: Ejemplo de cdigo:

Esta funcin determina cuando el nodo CAN est en modo Bus Off. can.h Char CAN1IsBusOff(void); Char CAN2IsBusOff(void); Ninguno Si el valor de TXBO es 1, ese 1 es devuelto, indicando que el bus est siendo cambiado a off debido a un error de transmisin. Si el valor de TXBO es 0, ese 0 es devuelto, indicando que el bus no ser cambiado a off. Esta funcin devuelve el estado del bit TXBO del registro CilNTF. CAN1IsBusOff.c CAN2IsBusOff.c While (CAN1IsBusOff());

CAN1sRXReady CAN2sRXReady Descripcin: Include: Prototipo: Argumentos: Valores de retorno:

Esta funcin devuelve el estado del bfer de recepcin. can.h Char CAN1IsRXReady(char); Char CAN2IsRXReady(char); Buffno: el valor de buffno indica cual es el estado requerido para el bufer de recepcin. Si RXFUL es 1, esto indica que el buffer de recepcin contiene un mensaje recibido. Si RXFUL es 0, esto indica que el bufer de recepcin esta abierto para recibir un mensaje

57

Comentarios:

Archivo de origen: Ejemplo de cdigo:

nuevo. Esta funcin devuelve el estado del bit RXFUL del registro de control de recepcin (control register) CAN1IsRXReady.c CAN2IsRXReady.c char rx_1_status; rx_1_status = CAN1IsRXReady(1);

CAN1sRXPassive CAN2sRXPassive Descripcin: Include: Prototipo: Argumentos: Valores de retorno:

Comentarios: Archivo de origen: Ejemplo de cdigo:

Esta funcin determina si la recepcin se encuentra en estado Error Pasivo. can.h char CAN1IsRXPassive(void); char CAN2IsRXPassive(void); Ninguno Si el valor de RXEP es 1, el uno es devuelto, indicando que el nodo pasivo previsto ser un error en recepcin. Si el valor de RXEP es 0, el cero es devuelto, indicando que no hay error en el bus. Esta funcin devuelve el estado del bit RXEP del registro CiiNTF. CAN1IsRXPassive.c CAN2IsRXPassive.c char rx_bus_status; rx_bus_status = CAN1sRXPassive();

CAN1sTXPassive CAN2sTXPassive Descripcin: Include: Prototipo: Argumentos: Valores de retorno:

Comentarios: Archivo de origen: Ejemplo de cdigo:

Esta funcin determina si la transmisin se encuentra en estado Error Pasivo. can.h char CAN1IsTXPassive(void); char CAN2IsTXPassive(void); Ninguno Si el valor de TXEP es 1, el uno es devuelto, indicando error en el bus de transmisin y que el bus ser pasivo. Si el valor de TXEP es 0, el cero es devuelto, indicando que no hay error en el bus de transmisin. Esta funcin devuelve el estado del bit TXEP en el registro CiiNTF. CAN1IsTXPassive.c CAN2IsTXPassive.c char tx_bus_status; tx_bus_status = CAN1IsTXPassive();

58

CAN1lsTXReady CAN2lsTXReady Descripcin:

Include: Prototipo: Argumentos: Valores de retorno:

Comentarios:

Archivo de origen: Ejemplo de cdigo:

Esta funcin devuelve que el estado del transmisor indica si el nodo CAN esta preparado para la prxima transmisin. can.h Char CAN1IsTXReady(char); Char CAN2IsTXReady(char); Buffno: el valor de buffno indica cual es el estado requerido para el bfer de transmisin. Si TXREQ es 1, devuelve un 0 indicando que el bfer de transmisin no esta vaco. Si TXREQ es 0, devuelve un 1 indicando que el bfer de transmisin esta vaco, y que el transmisor esta preparado para la prxima transmisin. Esta funcin devuelve el estado del bit TXREQ del registro de control de transmisin (control transmit) CAN1IsTXReady.c CAN2IsTXReady.c char tx_2_status; tx_2_status = CAN1IsTXReady(2);

CAN1RecieveMessage CAN2RecieveMessage Descripcin: Include: Prototipo:

Argumentos:

Esta funcin lee el dato del buffer de recepcin. can.h void CAN1RecieveMessage(unsigned char * data, unsigned char datalen, char MsgFlag); void CAN2RecieveMessage(unsigned char * data, unsigned char datalen, char MsgFlag); Data: El puntero con la localizacin donde los datos recibidos deben ser almacenados. Datalen: El nmero de bytes de datos esperados. MsFlag: El nmero de buffer donde el dato es recibido. Si es 1, el dato de CiRX1B1 a CiRX1B4 es ledo. Si es 0, el dato de CiRX0B1 a CiRX0B4 es ledo. Ninguno Esta funcin lee los datos recibidos dentro de la direccin del puntero por el parmetro de entrada data. CAN1RecieveMessage.c CAN2RecieveMessage.c Unsigned char*rx_data; CAN1RecieveMessage(rx_data, 5, 0);

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

59

CAN1SendMessage CAN2SendMessage Descripcin:

Include: Prototipo:

Esta funcin escribe datos para ser transmitidos a registros de transmisin, pone la longitud de los datos e inicia la transmisin. can.h void CAN1SendMessage(unsigned int sid, unsigned long eid, unsigned char *data, unsigned char datalen, char MsgFlag); void CAN2SendMessage(unsigned int sid, unsigned long eid, unsigned char *data, unsigned char datalen, char MsgFlag); sid: El valor de 16 bits para ser escrito en CiTXnSID. CAN_TX_SID(x) x es el valor de SID requerido. Sustituto de respuesta remota CAN_SUB_REM_TX_REQ CAN_SUB_NOR_TX_REQ Mensaje tipo ID CAN_TX_EID_EN CAN_TX_EID_DIS eid: El valor de 32 bits para ser escrito en los registros CiTXnEID y CiTXnDLC. CAN_TX_EID(x) x es el valor de EID requerido. Sustituto de respuesta remota CAN_REM_TX_REQ CAN_NOR_TX_REQ data: El puntero con la localizacin donde los datos transmitidos sern almacenados. datalen: Nmero de bytes de datos a transmitir. MsgFlag: El nmero del bfer (0, 1 o 2) desde donde los datos sern transmitidos. Si es 1, los datos se escriben en CiTX1B1 a CiTX1B4. Si es 2, los datos se escriben en CiTX2B1 a CiTX2B4. Si es 0 (o otro valor), los datos se escriben en CiTX0B1 a CiTX0B4. Ninguno Esta funcin escribe el valor identificador en los registros SID y EID, los datos que sern transmitidos en el registro TX, pone la longitud de los datos e inicializa la transmisin por el bit TXREQ. CAN1SendMessage.c CAN2SendMessage.c CAN1SendMessage((CAN_TX_SID(1920)) & (CAN_TX_EID_EN) &

Argumentos:

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

60

(CAN_SUB_NOR_TX_REQ), (CAN_TX_EID(12344)) & (CAN_NOR_TX_REQ), Txdata, datalen, tx_rx_no);

CAN1SetFilter CAN2SetFilter Descripcin:

Include: Prototipo:

Esta funcin pone a 1 los valores (SID y EID) con filtro de aceptacin para el filtro especificado. can.h void CAN1SetFilter(char filter_no, unsigned int sid, unsigned long eid); void CAN2SetFilter(char filter_no, unsigned int sid, unsigned long eid); filter_no: El filtro (0, 1, 2, 3, 4 o 5) para el cual los nuevos valores deben ser configurados. sid: el valor de 16 bits para escribir en los registros CiRXFnSID. CAN_FILTER_SID(x) x es valor de SID requerido. Tipo de mensaje a recibir CAN_RX_EID_EN CAN_RX_EID_DIS Eid: El valor de 32bits para ser escritos en los registros CiRXFnEIDH yCiRXFnEIDL. CAN_FILTER_EID(x) x es el valor de EID requerido. ninguno Esta funcin escribe el valor de 16 bits de sid en el registro CiRXFnSID y el valor de 32 bits en CiRXFnEIDH y CiRXFnEIDL, registros correspondientes al filtro especificado por filter_no. El filtro 0 es tomado como falta. CAN1SetFilter.c CAN2SetFilter.c CAN1SetFilter(1, CAN_FILTER_SID(7) & CAN_RX_EID_EN, CAN_FILTER_EID(3));

Argumentos:

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

61

CAN1SetMask CAN2SetMask Descripcin:

Include: Prototipo:

Esta funcin pone a 1 el valor de la mscara de aceptacin (SID y EID) para la mscara especificada. can.h void CAN1SetMask(char mask_no, unsigned int sid, unsigned long eid); void CAN2SetMask(char mask_no, unsigned int sid, unsigned long eid); mask_no: La mscara (0 or 1) para el cual los valores de mscara tienen que ser configurados sid: El valor de 16 bits que se escribirn en el registro CiRXMnSID. CAN_MASK_SID(x) x es el valor de SID requerido. Match/ignore message type specified in filter CAN_MATCH_FILTER_TYPE CAN_IGNORE_FILTER_TYPE Eid: El valor de 32 bits que sern escritos en los registros CiRXMnEIDH y CiRXMnEIDL. CAN_MASK_EID(x) x es el valor de EID requerido. Ninguno Esta funcin escribe el valor de 16 bits de sid en el registro CiRXFnSID y otro valor de 32 bits de eid en CiRXFnEIDH y CiRXFnEIDL, registros correspondientes a la mscara especificada por mask_no. El filtro 0 es tomado como falta. CAN1SetMask.c CAN2SetMask.c CAN1SetMask(1, CAN_MASK_SID(7) & CAN_MATCH_FILTER_TYPE, CAN_MASK_EID(3));

Argumentos:

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

CAN1SetOperationMode CAN2SetOperationMode Descripcin: Include: Prototipo:

Argumentos:

Esta funcin configura el mdulo CAN can.h void CAN1SetOperationMode(unsigned int config); void CAN2SetOperationMode(unsigned int config); Config valor de 16 bits que sern cargados en el registro CiCTRL , la combinacin de la siguientes definiciones.

62

CAN_IDLE_CON CAN On in Idle mode CAN_IDLE_STOP CAN Stop in Idle mode CAN_MASTERCLOCK_1 FCAN is FCY CAN_MASTERCLOCK_0 FCAN is 4 FCY Modos de operacin de CAN CAN_REQ_OPERMODE_NOR CAN_REQ_OPERMODE_DIS CAN_REQ_OPERMODE_LOOPBK CAN_REQ_OPERMODE_LISTENONLY CAN_REQ_OPERMODE_CONFIG CAN_REQ_OPERMODE_LISTENALL CAN Capture Enable/Disable CAN_CAPTURE_EN CAN_CAPTURE_DIS Valores de retorno: Comentarios: Ninguno Esta funcin configura los siguientes bits de CiCTRL:-CSIDL, REQOP<2:0> y CANCKS CAN1SetOperationMode.c CAN2SetOperationMode.c CAN1SetOperationMode(CAN_IDLE_STOP & CAN_MASTERCLOCK_0 & CAN_REQ_OPERMODE_DIS & CAN_CAPTURE_DIS);

Archivo de origen: Ejemplo de cdigo:

CAN1SetOperationModeNoWait CAN2SetOperationModeNoWait Esta funcin aborta las transmisiones pendientes y Descripcin: configura el mdulo CAN can.h Include: void CAN1SetOperationModeNoWait( Prototipo: unsigned int config); void CAN2SetOperationModeNoWait( unsigned int config); Config: valor de 16 bits que sern cargados en el Argumentos: registro CiCTRL , la combinacin de la siguientes definiciones. CAN_IDLE_CON_NO_WAIT CAN On in Idle mode CAN_IDLE_STOP_NO_WAIT CAN Stop in Idle mode CAN_MASTERCLOCK_1_NO_WAIT FCAN is FCY CAN_MASTERCLOCK_0_NO_WAIT FCAN is 4 FCY Modos de operacin de CAN CAN_REQ_OPERMODE_NOR_NO_WAIT CAN_REQ_OPERMODE_DIS_NO_WAIT

63

CAN_REQ_OPERMODE_LOOPBK_NO_WAIT CAN_REQ_OPERMODE_LISTENONLY_NO_WAIT CAN_REQ_OPERMODE_CONFIG_NO_WAIT CAN_REQ_OPERMODE_LISTENALL_NO_WAIT CAN Capture Enable/Disable CAN_CAPTURE_EN_NO_WAIT CAN_CAPTURE_DIS_NO_WAIT Ninguno Esta funcin pone a 1 el bit de aborto as aborta la iniciacin de todos las transmisiones pendientes y configura los siguientes bits CiCTRL:-CSIDL, REQOP<2:0> y CANCKS CAN1SetOperationModeNoWait.c CAN2SetOperationModeNoWait.c CAN1SetOperationModeNoWait(CAN_IDLE_CON & CAN_MASTERCLOCK_1 & CAN_REQ_OPERMODE_LISTEN & CAN_CAPTURE_DIS_NO_WAIT);

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

CAN1SetRXMode
CAN2SetRXMode Descripcin: Include: Prototipo: Esta funcin configura el receptor CAN. can.h void CAN1SetRXMode(char buffno, unsigned int config); void CAN2SetRXMode(char buffno, unsigned int config); buffno: indica el registro de control que ser configurado. config: El valor que ser escrito en el registro CiRXnCON , la combinacin de las siguientes definiciones. Clear RXFUL bit CAN_RXFUL_CLEAR Double buffer enable/disable CAN_BUF0_DBLBUFFER_EN CAN_BUF0_DBLBUFFER_DIS Ninguno. Esta funcin configura los siguientes bits del registro CiRXnCON: RXRTR, RXFUL (only 0), RXM<1:0> and DBEN CAN1SetRXMode.c CAN2SetRXMode.c CAN1SetRXMode(0,CAN_RXFUL_CLEAR & CAN_BUF0_DBLBUFFER_EN);

Argumentos:

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

64

CAN1SetTXMode (funcin) CAN2SetTXMode Descripcin: Include: Prototipo:

Argumentos:

Esta funcin configura el transmisor del mdulo CAN. can.h void CAN1SetTXMode(char buffno, unsigned int config); void CAN2SetTXMode(char buffno, unsigned int config); buffno: buffno indica el registro de control que ser configurado. config: El valor que ser escrito en el registro CiTXnCON, la combinacin de las siguientes definiciones. Message send request CAN_TX_REQ CAN_TX_STOP_REQ Message transmission priority CAN_TX_PRIORITY_HIGH CAN_TX_PRIORITY_HIGH_INTER CAN_TX_PRIORITY_LOW_INTER CAN_TX_PRIORITY_LOW Ninguno. Esta funcin configura los bits siguientes del registro CiTXnCON: TXRTR, TXREQ, DLC, TXPRI<1:0> CAN1SetTXMode.c CAN2SetTXMode.c CAN1SetTXMode(1, CAN_TX_STOP_REQ & CAN_TX_PRIORITY_HIGH);

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

CAN1Initialize CAN2Initialize Descripcin: Include: Prototipo:

Argumentos:

Esta funcin configura el mdulo CAN. can.h void CAN1Initialize(unsigned int config1, unsigned int config2); void CAN2Initialize(unsigned int config1, unsigned int config2); config1: El valor que ser escrito en el registro CiCFG1, la combinacin de las siguientes definiciones. Sync jump width CAN_SYNC_JUMP_WIDTH1 CAN_SYNC_JUMP_WIDTH2 CAN_SYNC_JUMP_WIDTH3

65

CAN_SYNC_JUMP_WIDTH4 Baud Rate prescaler CAN_BAUD_PRE_SCALE(x) (((x-1) & 0x3f) | 0xC0) config2: El valor que ser escrito en el registro CiCFG2, la combinacin de las siguientes definiciones. CAN bus line filter selection for wake-up CAN_WAKEUP_BY_FILTER_EN CAN_WAKEUP_BY_FILTER_DIS CAN propagation segment length CAN_PROPAGATIONTIME_SEG_TQ(x) (((x-1) & 0x7) | 0xC7F8) CAN phase segment 1 length CAN_PHASE_SEG1_TQ(x) ((((x-1) & 0x7) *0x8) | 0xC7C7) CAN phase segment 2 length CAN_PHASE_SEG2_TQ(x) ((((x-1) & 0x7) *0x100) | 0xC0FF) CAN phase segment 2 mode CAN_SEG2_FREE_PROG CAN_SEG2_TIME_LIMIT_SET Sample of the CAN bus line CAN_SAMPLE3TIMES CAN_SAMPLE1TIME Ninguno. Esta funcin configura los bits siguientes de los registros CiCFG1 y CiCFG2. SJW<1:0>, BRP<5:0>, CANCAP, WAKEFIL, SEG2PH<2:0>, SEGPHTS, SAM, SEG1PH<2:0>, PRSEG<2:0> CAN1Initialize.c CAN2Initialize.c CAN1Initialize(CAN_SYNC_JUMP_WIDTH2 & CAN_BAUD_PRE_SCALE(2), CAN_WAKEUP_BY_FILTER_DIS & CAN_PHASE_SEG2_TQ(5) & CAN_PHASE_SEG1_TQ(4) & CAN_PROPAGATIONTIME_SEG_TQ(4) & CAN_SEG2_FREE_PROG & CAN_SAMPLE1TIME);

Valores de retorno: Comentarios:

Archivo de origen: Ejemplo de cdigo:

66

ConfigIntCAN1 ConfigIntCAN2 Descripcin: Include: Prototipo:

Argumentos:

Esta funcin configura las interrupciones de CAN. can.h void ConfigIntCAN1(unsigned int config1, unsigned int config2); void ConfigIntCAN2(unsigned int config1, unsigned int config2); config1: La informacin de interrupcin enable/disable se define: Interrupt enable CAN_INDI_INVMESS_EN CAN_INDI_WAK_EN CAN_INDI_ERR_EN CAN_INDI_TXB2_EN CAN_INDI_TXB1_EN CAN_INDI_TXB0_EN CAN_INDI_RXB1_EN CAN_INDI_RXB0_EN Interrupt disable CAN_INDI_INVMESS_DIS CAN_INDI_WAK_DIS CAN_INDI_ERR_DIS CAN_INDI_TXB2_DIS CAN_INDI_TXB1_DIS CAN_INDI_TXB0_DIS CAN_INDI_RXB1_DIS CAN_INDI_RXB0_DIS config2: La informacin de Prioridad de interrupcin de CAN y Enable/disable se define: CAN Interrupt enable/disable CAN_INT_ENABLE CAN_INT_DISABLE CAN Interrupt priority CAN_INT_PRI_0 CAN_INT_PRI_1 CAN_INT_PRI_2 CAN_INT_PRI_3 CAN_INT_PRI_4 CAN_INT_PRI_5 CAN_INT_PRI_6 CAN_INT_PRI_7 Ninguno. Esta funcin configura las Interrupciones CAN. Es el enable/disables de las interrupciones de

Valores de retorno: Comentarios:

67

Archivo de origen: Ejemplo de cdigo:

CAN. Y tambin pone las prioridades. ConfigIntCAN1.c ConfigIntCAN2.c ConfigIntCAN1(CAN_INDI_INVMESS_EN & CAN_INDI_WAK_DIS & CAN_INDI_ERR_DIS & CAN_INDI_TXB2_DIS & CAN_INDI_TXB1_DIS & CAN_INDI_TXB0_DIS & CAN_INDI_RXB1_DIS & CAN_INDI_RXB0_DIS , CAN_INT_PRI_3 & CAN_INT_ENABLE);

Macros individuales
EnableIntCAN1 EnableIntCAN2 Descripcin: Include: Argumentos: Comentarios: Ejemplo de cdigo: DisableIntCAN1 DisableIntCAN2 Descripcin: Include: Argumentos: Comentarios: Ejemplo de cdigo: SetPriorityIntCAN1 SetPriorityIntCAN2 Descripcin: Include: Argumentos: Comentarios: Ejemplo de cdigo:

Esta macro habilita las interrupciones de CAN. can.h Ninguno. Esta macro pone a 1 el bit CAN Interrupt Enable en el registro Interrupt Enable Control. EnableIntCAN1;

Esta macro deshabilita la interrupcin CAN can.h Ninguno Esta macro pone a 0 el bit de CAN Interruption Enable del registro Interrupt Enable Control DisableIntCAN2;

Esta macro pone prioridad a la interrupcin de CAN. can.h Priority Esta macro pone los bits de interrupcin de CAN en el registro Interrupt Priority Control. SetPriorityIntCAN1(2);

68

3.7.3. Ejemplo de aplicacin de cdigo


#define __dsPIC30F4013__ #include<p30fxxxx.h> #include<can.h> #define dataarray 0x1820 int main(void) { /* Longitud de los datos que sern transmitidos */ unsigned char datalen; unsigned char Txdata[] = {'M','I','C','R','O','C','H','I','P','\0'}; unsigned int TXConfig, RXConfig; unsigned long MaskID,MessageID; char FilterNo,tx_rx_no; unsigned char * datareceived = (unsigned char *) dataarray; /* Holds the data received */ /* pone la respuesta en el modo de configuracin */ CAN1SetOperationMode(CAN_IDLE_CON & CAN_MASTERCLOCK_1 & CAN_REQ_OPERMODE_CONFIG & CAN_CAPTURE_DIS); while(C1CTRLbits.OPMODE <=3); /* Carga el registro de configuracin */ CAN1Initialize(CAN_SYNC_JUMP_WIDTH2 & CAN_BAUD_PRE_SCALE(2), CAN_WAKEUP_BY_FILTER_DIS & CAN_PHASE_SEG2_TQ(5) & CAN_PHASE_SEG1_TQ(4) & CAN_PROPAGATIONTIME_SEG_TQ(4) & CAN_SEG2_FREE_PROG & CAN_SAMPLE1TIME); /* Carga el registro de filtro de Aceptacin*/ FilterNo = 0; CAN1SetFilter(FilterNo, CAN_FILTER_SID(1920) & CAN_RX_EID_EN, CAN_FILTER_EID(12345)); /* Carga el registro de filtro de Mscara */ CAN1SetMask(FilterNo, CAN_MASK_SID(1920) & CAN_MATCH_FILTER_TYPE, CAN_MASK_EID(12344)); /* Pone el modo de transmisor y receptor */ tx_rx_no = 0; CAN1SetTXMode(tx_rx_no, CAN_TX_STOP_REQ & CAN_TX_PRIORITY_HIGH ); CAN1SetRXMode(tx_rx_no, CAN_RXFUL_CLEAR & CAN_BUF0_DBLBUFFER_EN); /* Carga el mensaje ID , datos dentro del buffer de transmisin y pone el bit de respuesta de transmisin */

69

datalen = 8; CAN1SendMessage((CAN_TX_SID(1920)) & CAN_TX_EID_EN & CAN_SUB_NOR_TX_REQ, (CAN_TX_EID(12344)) & CAN_NOR_TX_REQ, Txdata,datalen,tx_rx_no); /* Pone la respuesta en modo Loopback */ CAN1SetOperationMode(CAN_IDLE_CON & CAN_CAPTURE_DIS & CAN_MASTERCLOCK_1 & CAN_REQ_OPERMODE_LOOPBK); while(C1CTRLbits.OPMODE !=2); /* Espera que el mensaje se transmita completamente */ while(!CAN1IsTXReady(0)) /* Espera que el buffer de recepcin contenga el mensaje vlido */ while(!CAN1IsRXReady(0)); /* Lee los datos recibidos del buffer de recepcin*/ CAN1ReceiveMessage(datareceived, datalen, tx_rx_no); while(1); return 0; }

70

4. ANEXO: Dispositivos CAN

71

4. Dispositivos CAN
Evidentemente enumerar todos los dispositivos que podemos conectar a CAN nos es imposible, pero s podemos mostrar algunos de estos productos, para comprobar la versatilidad y el gran nmero de estos que se encuentran en el mercado. Nos centraremos principalmente en los sensores, ya que nos van a ser ms tiles a la hora de realizar nuestro trabajo en el dsPIC30F4013.

SENSORES

Sensor digital de presin HDA 4000 CAN Caractersticas tcnicas: Interfaz CAN Rango de medida: presiones de 40 bar a 600 bar. Precisin 0.25 % Rango de temperatura soportable: 25 C a +85 C Tensin: de 10 a 35 VDC Tasa de transmisin de 10kbit a 1Mbit (configurable) Sensores MDT CAN + IDA CAN - La seal digital tiene una resolucin de 13 bits sobre los dos cables del bus CAN. - El tiempo de medida y de conversin de la seal de presin es de 20 milisegundos, ms que suficiente para la mayora de las aplicaciones industriales. - El cableado interno de CAN, supervisa de forma automtica que las funciones del transductor de presin sean las correctas, y enva una seal de alarma en caso contrario.

72

Codificador de eje rotatorio 5860 Caractersticas tcnicas: Todos los valores obtenidos son enviados a travs del interfaz CAN. Parmetros programables va CAN Rotacin: 6000 rpm. Rango de temperatura soportable: -20 C a +85 C Tensin: 10 a 30 VDC

Codificador magntico ATM 60 Caractersticas tcnicas: Interfaz Bus CAN de alta velocidad 8192 medidas por vuelta Octoacoplador para aislar del bus la corriente continua. Alta resistencia a vibraciones y golpes

Familia de inclinmetros AnguSens Caractersticas tcnicas: Todos los valores obtenidos son enviados a travs del interfaz CAN. Parmetros programables va CAN Rango de medida: 15 o 30 Precisin: hasta 0.001 Mximo dos ejes de medida.

73

Sensores de compactacin ASC (para camiones y maquinaria pesada)

Utilizado para medir lo compacto de un terreno Un sensor de aceleracin empotrado mide la reaccin del tambor, mientras que un microregulador calcula la frecuencia de vibracin y otros parmetros que son transferidos va CAN, por ejemplo a un display. Memoria EEPROM disponible, con diccionario CAN. Rango de medida: 41 g Temperatura soportable: -40C a +85C Tensin: 8V a 32V DC Consumo: 80mA a 12V aprox. Transductores BTL5-H1

Transmite las medidas de posicin y velocidad del sistema de control obtenidas a otro nodo a travs del Bus CAN. Los hay disponibles de tres formas, segn el transductor que lleven: un imn de posicin, dos imanes de posicin, o FMM (modo magntico flexible) con de 1 a 4 imanes de posicin. Gran precisin: 5 m para la posicin y 0.1 mm/s para la velocidad. Rango de temperatura soportable: de -40C a +85C Muy lineales e insensibles a las vibraciones, los golpes y los ruidos.

74

Familia de sensores CAN

Adems de una gran cantidad de sensores, podemos encontrar esta familia de mdulos para sensores CAN, que esta especialmente diseada para los fabricantes de sensores que quieran aadir una interfaz CAN a estos, ya sean sensores de tensin, de corriente, presin, calor, esfuerzo Todos estos mdulos tienen un rango de temperatura soportable que va de 40 C a + 85 C y un rango de tensin de 8 V a 60 V de corriente continua.

Otro tipo de dispositivos ESCNERES

75

ACTUADORES

DATALOGGERS

MDULOS DE ENTRADA-SALIDA

76

GATEWAYS, CONVERSORES Y BRIDGES


CAN - USB

CAN - ETHERNET

CAN-RS232

CAN-CBM-DP / CAN-DP

77

CAN-Wireless

CAN-GSM

CAN-GPRS

CAN-Bluetooth

REPETIDORES

78

5. BIBLIOGRAFA

79

Bibliografa bsica:

1. INTRODUCCIN www.can-cia.org/can/ www.can-cia.org/can/protocol/history/history.html www.can-cia.org/applications/cankingdom/ www.serconet.com/usr/laureanog/HPV1B_31.HTM www.semiconductors.bosch.de/de/20/can/index.asp www.can.bosch.com http://es.wikipedia.org/wiki/CAN_bus www.canbus.galeon.com/electronica/canbus.htm www.ihs.com.es/ 2. TRANSMISIN DE DATOS http://www.kvaser.com/index.htm www.unavarra.es 3. CAN DEL MICRO dsPIC30F4013 www.port.de/pdf/CAN_Bit_Timing.pdf http://cabierta.uchile.cl/revista/19/articulos/pdf/edu4.doc www.microchip.com 4. ANEXO: Dispositivos CAN http://www.can-cia.org/products/pg2005/html/index.htm http://www.canusb.com/index.htm http://www.ixxat.de/

80

Das könnte Ihnen auch gefallen