4 C 28 e 265 e 2942
4 C 28 e 265 e 2942
4 C 28 e 265 e 2942
DOCUMENTO I. MEMORIA
I. Memoria II. Estudio econmico III. Manual de usuario del robot IV. Manual del Driver de I2C V. Manual del Programa de prueba de las cinemticas VI. Cdigo fuente VII. Hojas de caractersticas pg. 15 pg. 113 pg. 116 pg. 118 pg. 126 pg. 129 pg. 210 a a a a a a a 112 115 117 125 128 209 292 98 pginas 3 pginas 2 pginas 8 pginas 3 pginas 81 pginas 83 pginas
Fdo.: . . . . . . . . . . . . . . . . . . . . . . . .
Fecha: . . . . . . / . . . . . . / . . . . . . . . .
VO BO
DEL
C OORDINADOR DE P ROYECTOS
Fdo.: . . . . . . . . . . . . . . . . . . . . . . . .
Fecha: . . . . . . / . . . . . . / . . . . . . . . .
AUTOR: Jaime Boal Martn-Larrauri DIRECTOR: Prof. Dr. lvaro Snchez Miralles MADRID, Junio de 2010
Resumen
todava muchos lugares inaccesibles sobre la supercie terrestre a los que slo se puede llegar a pie, lo cual impide la automatizacin de algunos trabajos repetitivos que liberaran mano de obra para realizar tareas de mayor valor.
XISTEN
Durante los ltimos veinte aos, la robtica se ha centrado en el la bsqueda de soluciones para entornos conocidos y controlados, lo cual ha contribuido de forma decisiva al avance en el mbito de los brazos robticos y las plantas automatizadas. Sin embargo, se ha descuidado otra vertiente de esta disciplina, la robtica mvil, que ofrece posibilidades casi innitas. La mayor parte de los robots mviles que se han desarrollado hasta el momento parten de la premisa de que la supercie por la que se van a desplazar es dura y lisa o control varied from machine to machine, they all shared these hydraulic oil and a radiator cools the engine for sustained presenta ligeras inclinaciones de hasta operation. por lo que su uso queda muy restringido. un 30 %, three essential ingredients.
Whereas the Leg Laboratory robots did a good job of An onboard computer controls BigDog's behavior, manages communications with a remote demonstrated the feasibility of dynamically balanced legged the sensors, and handles Previous researchers have suggested the use of kinematic reconfigura its practical effectiveness has giro radical Es cierto, limitations that would need to human operator. se control computer also un not yet been demonstrated on a real rov systems, they had two primary no obstante, que ms recientemente The est produciendorecords large stability-based kinematic reconfigurability is presented, and applied analysis, be addressed to build practical legged vehicles. One is the amounts of engineering data for performancevariables to failure stability measure are written reconfigurable joint muy a vehicle en la power so the robot could operate y han empezado a aparecer this prototipos need for on-board concepcin de la robticain the analysis and operational support. stability measure and sosticados on a function that maintains adequate gr terrain. A rapid conjugate-gradient optimization the performan field without hoses and wires. Another is the need for control BigDog has about 50 sensors. Inertial sensors measure the capaces de moverse por terrenos extremadamente adversos. Desafortunadamente, casi of map of the terr constraints. The method does not rely algorithms that provide locomotion and stability on rough attitude and acceleration of the body, while joint sensors on a detailed angles are terrain. We now turn to BigDog, a self-contained quadruped ameasure motion and force wheel-terrain contact working estimated using simple on-board sens la totalidad de ellos estn destinados aplicaciones de usoof the actuators forces dueatto the por loand can account for militar o aeroespacial, weight considers gravitational rover robot that uses many of the ideas and concepts of the Leg joints. The onboard computer integrates information from Computational requirements are Laboratory que no contribuyenthe mejorar la calidad de vida del conjunto dehow sociedad.light, being compatible with limited o robots, but also addresses a practical problems these sensors to provide estimates of la BigDog is moving of onboard power and rough-terrain controls in order to move in space. Other sensors experimental results under field conditions show that kinematic reconf monitor BigDog's homeostasis: terrain. toward practical legged vehicles. hydraulic pressure, flow and temperature, engine speed and temperature, and the like. The onboard computer performs both low-level and highlevel control functions. The low-level control system servos positions and forces at the joints. The high-level control system coordinates behavior of the legs to regulate the velocity, attitude and altitude of the body during locomotion. The control system also regulates ground interaction forces to maintain support, propulsion and traction.
Figure 2. BigDog climbingBigDog (a) a snow-covered hill during testing. To see BigDog in action, click this link:
www.BostonDynamics.com/dist/BigDog.wmv.
BigDog has a variety of locomotion behaviors. It can stand up, squat down, walk with a crawling gait that lifts just one leg at a time, walk with a trotting gait that lifts diagonal legs in pairs, trot with a running gait that includes a flight phase, and bound in a special gallop gait. Travel speed for the crawl is about 0.2 m/s, for the trot is about 1.6 m/s (3.5 mph), for (b) RHex (c) Sample Return the running trot is about 2 m/s (4.4 mph) and BigDog brieflyRover Figure 2. Jet Propulsion Laboratory Sam exceeded 3.1 m/s (7 mph) while bounding in the laboratory.
Figura 1. Ejemplos de robots todoterreno con varios sistemas de locomocin KINEMATIC REC 2. GENERAL BigDog weighs about 109 kg (240 lbs), is about 1 meter tall,
3. BIGDOG
1.1 meters long, and 0.3 m wide. a general n-link tree-structured mobile robot on uneven terra Consider BigDog is a legged robot under development at Boston The n links can form hybrid serial-parallel kinematic chains. We assum BigDog is usually driven by a values are operatori,who works We also assume the wheels o their human denoted i={1,,n}. Dynamics, with funding from DARPA. The goal is to build through an operator control unit contact points communicates with their location defined as terrain (OCU) that are denoted Pj, unmanned legged vehicles with rough-terrain mobility with the robot via IP radios. The operator uses the OCU to are denoted j, j={1,,m}. corresponding link-terrain contact angles superior to existing wheeled and tracked vehicles. The ideal system would travel anywhere a person or para la navegacin por high-level steering and goal of kinematicguide the robot is to improve robot performanc Desarrollo de un robot 4x4 animal could go provide terrenos agrestes speed input to reconfigurability IV The user-specified performance operator using their Jaime Boalmany hours at a time, and carry its along its path and to controlathe speed of travel. The index. Such performance indices includ legs, run for Martn-Larrauri for optimal force engine, and others. own fuel and payload. It would be smart enough to negotiate can also tell the robot to start or stop itsapplication,stand up, Since forward and inverse ki general difficult to formulate, analytical terrain with a minimum of human guidance and intervention. squat down, walk, trot, or jog. A visual display provides the solutions often cannot be ob motivates data. The operator only operator operational and engineeringthe use of numerical optimization techniques.
R ESUMEN
Por ello, el objetivo de este proyecto es desarrollar un robot todoterreno autnomo con ruedas para uso civil, capaz de desplazarse por terrenos agrestes, que se podra utilizar para innidad de aplicaciones: bsqueda de personas desaparecidas, operaciones de rescate, transporte de materiales. . . Sin embargo, el uso para el que inicialmente est destinado es que un grupo de tres de estos robots sirva para georreferenciar imgenes areas de campos de cultivo tomadas desde un helicptero de radiocontrol. Esto permitir determinar las necesidades especcas de cada plantacin y establecer los cuidados pertinentes. Partiendo de una plataforma mecnica de aluminio y de una tarjeta programable de control de sensores y actuadores, la TCS3, desarrolladas en proyectos anteriores, se han implementado los sistemas elctricos, electrnicos y de comunicaciones siguiendo un diseo modular.
(b) TCS3
Figura 2. Recursos iniciales del proyecto El conjunto consta de cuatro motores brushless trifsicos de corriente continua de 100 W de potencia, controlados por sendas tarjetas que se han diseado ex profeso para ese cometido, y seis servos que permiten el giro independiente de cada rueda, as como la modicacin de la geometra de la estructura, mediante la variacin de la longitud y la altura de la plataforma. Gracias a estos diez grados de libertad, se pueden conseguir cuatro cinemticas de avance distintas (Ackerman, Doble Ackerman, Sncrona y Sncrona orientada) y desplazar el centro de gravedad para incrementar la versatilidad del robot. Para posicionarse en entornos abiertos desconocidos, se utiliza un receptor GPS y, para la deteccin de obstculos, sensores de ultrasonidos. Se deber valorar, en un futuro, la necesidad de incorporar una IMU. Todos estos sistemas distribuidos por el robot se interconectan con la TCS3 mediante un bus I2 C estndar, para poder intercambiar consignas y datos entre los dispositivos y un ordenador de control a travs de un enlace inalmbrico Wi-Fi.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
V
R ESUMEN
Figura 3. Arquitectura del sistema Para facilitar la experiencia del usuario se han programado una serie de drivers de control en C++ que permiten gestionar toda la informacin y manejar todos los actuadores de forma sencilla. En denitiva, este proyecto ha contribuido a desarrollar un robot recongurable adaptable sencillo de controlar al que falta por dotar de inteligencia para que pueda cumplir cualquier tarea que se le encomiende. Asimismo, durante el proceso se han desarrollado una tarjeta de control de motores brushless y unos sistemas de comunicacin que pueden ser aprovechados para otras aplicaciones.
Figura 4. Robot todoterreno desarrollado Palabras clave: Robtica mvil, robot todoterreno recongurable, terrenos agrestes, motores brushless DC, GPS, I2 C, cinemticas.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
VI
Abstract
are still many inaccessible places on the Earths surface where one can only arrive on foot. This prevents the automation of some repetitive jobs which would lead to the release of labour to accomplish more valuable tasks.
HERE
Over the past twenty years, robotics has concentrated on the search for solutions for known and controlled environments and its contribution to the progress of robotic arms and automated plants has been decisive. Nevertheless, another aspect of this discipline such as mobile robotics, which provides almost innite possibilities, has been neglected. Most of the mobile robots developed to date, assume that the surface where they are likely to move around is hard and smooth or has slight slopes of no more than 30%. control varied from machine to machine, they all shared these hydraulic oil and a radiator cools the engine for sustained Thus, its use three essential ingredients. is limited to a great extent. operation.
Whereas the Leg Laboratory robots did a good job of An onboard computer controls BigDog's behavior, manages communications with a remote demonstrated the feasibility of dynamically balanced legged the sensors, and handles Previous researchers have suggested the use of kinematic reconfigura its practical effectiveness also records lately, as It is primary limitations that that robotics conception The control computersharp has not yet been demonstrated on a real rov systems, they had two certain, however, would need to human operator. is undergoing a kinematic swiftlarge stability-based reconfigurability is presented, and applied amounts of engineering data for performance analysis, failure be addressed to build practical legged vehicles. One is the reconfigurable vehicle are written some power so the robot could operate capable of dealing withsupport. stabilitychallenging terrains,measureadequate gr sophisticate prototypes, in the analysis and operational extremely joint variables toaafunction stability need for on-board on this measure and that maintains terrain. A conjugate-gradient optimization field without hoses and wires. Another is the need for control BigDog has about 50 sensors. Inertial sensors measure the have started to appear. Unfortunately, almost all of them arerapid method does military or of the performan aimed at not rely constraints. The algorithms that provide locomotion and stability on rough attitude and acceleration of the body, while joint sensors on a detailed map of the terr angles are terrain. We now turn to BigDog, a self-contained quadruped do not contribute force wheel-terrain contact working estimated using simple on-board sens of the gravitational at rover aerospace applications. Hence, they measure motion and to increasing the qualitytoof life ofand can account for considers actuators forces due the weight robot that uses many of the ideas and concepts of the Leg joints. The onboard computer integrates information from Computational requirements are light, being compatible with limited o Laboratory society as a addresses the practical problems these sensors to provide estimates of how BigDog is moving robots, but also whole. of onboard power and rough-terrain controls in order to move in space. Other sensors experimental results under field conditions show that kinematic reconf monitor BigDog's homeostasis: terrain. toward practical legged vehicles. hydraulic pressure, flow and temperature, engine speed and temperature, and the like. The onboard computer performs both low-level and highlevel control functions. The low-level control system servos positions and forces at the joints. The high-level control system coordinates behavior of the legs to regulate the velocity, attitude and altitude of the body during locomotion. The control system also regulates ground interaction forces to maintain support, propulsion and traction.
Figure 2. BigDog climbingBigDog (a) a snow-covered hill during testing. To see BigDog in action, click this link:
www.BostonDynamics.com/dist/BigDog.wmv.
BigDog has a variety of locomotion behaviors. It can stand up, squat down, walk with a crawling gait that lifts just one leg at a time, walk with a trotting gait that lifts diagonal legs in pairs, trot with a running gait that includes a flight phase, and bound in a special gallop gait. Travel speed for the crawl is about 0.2 m/s, for the trot is about 1.6 m/s (3.5 mph), for (b) RHex (c) Sample Return the running trot is about 2 m/s (4.4 mph) and BigDog brieflyRover Figure 2. Jet Propulsion Laboratory Sam exceeded 3.1 m/s (7 mph) while bounding in the laboratory.
3. BIGDOG 1.1 meters long, and 0.3 m wide. a general n-link tree-structured mobile robot on uneven terra Consider BigDog is a legged robot under development at Boston The n links can form hybrid serial-parallel kinematic chains. We assum their human denoted i={1,,n}. Dynamics, with funding from DARPA. The goal is to build BigDog is usually driven by a values are operatori,who works We also assume the wheels o terrain (OCU) that are denoted Pj, unmanned legged vehicles with rough-terrain mobility through an operator control unit contact points communicates with their location defined as corresponding link-terrain contact angles superior to existing wheeled and tracked vehicles. The ideal with the robot via IP radios. The operator uses the OCU to are denoted j, j={1,,m}. speed input to system would travel anywhere a person or animal could go provide high-level steering and goal of kinematicguide the robot is to improve robot performanc The reconfigurability user-specified performance operator using their legs, run for many hours at a time, and carry its along its path and to controlathe speed of travel. The index. Such performance indices includ can also tell the robot to start or stop itsapplication,stand up, Since forward and inverse ki engine, and others. VII for optimal force Development of a 4x4 robot for to negotiate own fuel and payload. It would be smart enough rough terrain navigation general difficult to formulate, analytical terrain with a minimum of human guidance and intervention. squat down, walk, trot, or jog. A visual display provides the solutions often cannot be ob Jaime Boal Martn-Larrauri motivates the use of numerical optimization techniques. The BigDog robots we have built have taken steps toward operator operational and engineering data. The operator only On-line BigDog's onboard control these goals, though there remains a great deal of work to be provides high-level input, leaving kinematic reconfigurability requires three steps: system to operate the legs, provideEvaluation on the robot kinematic configuration using on-boa 1) stability of rough terrain,
Figure 1. All-terrain robot samples equipped about 109 kg (240 lbs), is about 1 meter tall, with different locomotion2.systems KINEMATIC REC GENERAL BigDog weighs
A BSTRACT
Therefore, the main target of this project is to develop a wheeled autonomous allterrain mobile robot for civil use, capable of coping with rough terrains, which could be used for uncountable tasks, such as looking for people who have got lost, rescue operations or the transportation of materials. Nonetheless, its initial application is to constitute a group of three identical robots which would help to georeference aerial photographs of crop elds taken from a radio control helicopter. This would permit to determine and meet the specic requirements of each farming. Starting off with an aluminium recongurable platform and a programmable sensor and actuator control board, known as TCS3, both developed in previous projects, the electric, electronic and communication systems have been implemented following a modular design.
(b) TCS3
Figure 2. Initial resources of the project The robot is made up of four 100 W three-phase brushless DC motors, each of them controlled by a board specically designed for this purpose, and six servomotors which allow each wheel to turn independently, as well as modifying the structures geometry, by changing the length and height of the platform. Thanks to these ten degrees of freedom, four different kinematic architectures can be adopted (Ackerman, Double Ackerman, Synchronous drive and Rolling point turn) and, moreover, the position of the centre of mass can be altered to increase the robots versatility. To locate the robot in unknown open spaces a GPS receiver is equipped, whereas for obstacle detection US sensors are used. It is still to be determined whether an IMU is needed or not. All the systems distributed throughout the robot are interconnected to the TCS3 by means of a standard I2 C bus, which permits to exchange orders and data between the devices and a control computer through a wireless link.
Development of a 4x4 robot for rough terrain navigation Jaime Boal Martn-Larrauri
VIII
A BSTRACT
Figure 3. System architecture With a view to making the users experience easier, a series of control drivers have also been programmed in C++, in order to deal with all the information and handle all the actuators straightforward. In conclusion, this project has contributed to the development of an easy to control, recongurable and adaptable robot. The only thing left is to program some intelligent algorithms which would allow it to accomplish any task. In addition, during the process, a brushless motor control board and a communication system, both of which could be useful for other applications, have been developed.
Figure 4. Developed all-terrain robot Keywords: Mobile robotics, all-terrain recongurable robot, WAMR, rough terrain, brushless DC motors, GPS, I2 C, kinematics.
Development of a 4x4 robot for rough terrain navigation Jaime Boal Martn-Larrauri
IX
A mis padres, por creer siempre en m, apoyarme en los momentos difciles y, sobre todo, haberme formado como persona.
En los momentos de crisis, slo la imaginacin es ms importante que el conocimiento. A LBERT E INSTEIN
Si puedes formular las preguntas, puedes encontrar las respuestas. S IDDHARTA G AUTAMA , B UDA
Agradecimientos
agradecer a mis padres todo el apoyo que me han brindado a lo largo de la carrera y, en especial, durante el desarrollo de este proyecto, que no me ha permitido, en muchos casos, prestarles la atencin que merecen. Espero que a partir de ahora les pueda devolver parte de lo que me han dado. Muchas gracias.
UISIERA
Tampoco me quiero olvidar de mis compaeros, que han hecho de mi paso por la universidad una experiencia memorable. No se me ocurre nadie mejor con quin haber compartido estos cinco aos de mi vida. Gracias a todos. Mencin especial se merecen ngel, con quien he compartido muchas horas de trabajo en el IIT, por su contribucin a la implantacin de las comunicaciones inalmbricas, y Antonio, por su ayuda en la fabricacin de piezas para la plataforma. Gracias tambin a todo el personal de la universidad que han contribuido a que este proyecto llegase a buen puerto. A Aurelio y Fidel, por su ayuda con la electrnica de potencia, y a los responsables del taller de electrnica, Jos Mara y Antonio, por su paciencia y predisposicin a atender mis innumerables peticiones. Por ltimo, me gustara agradecer lvaro, mi director, por haberme inculcado el inters por la robtica y por haber estado siempre pendiente de los problemas que han ido surgiendo.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
XI
TML
DOCUMENTO I
MEMORIA
ndice
I. Memoria 15 16 16 18 19 20 21 23 24 25 26 27 27 27 28 29 30 30 31 31 31 31 31 31 31 32 32 32 32 32
1. Introduccin 1.1. Estado del arte . . . . . . 1.1.1. BigDog . . . . . . . 1.1.2. RHex . . . . . . . . 1.1.3. Loper . . . . . . . . 1.1.4. Octopus . . . . . . . 1.1.5. Nomad . . . . . . . 1.1.6. Sample Return Rover 1.1.7. Scarab . . . . . . . . 1.2. Motivacin . . . . . . . 1.3. Objetivos . . . . . . . . 1.4. Recursos . . . . . . . . . 1.4.1. Hardware . . . . . . 1.4.2. Software . . . . . . . 1.5. Metodologa . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
2. Arquitectura del robot 2.1. Componentes principales . . 2.1.1. Alimentacin . . . . . . 2.1.1.1. Bateras Li-Po . . . 2.1.1.2. Regulador de tensin 2.1.1.3. Filtro EMI . . . . . 2.1.2. Actuadores . . . . . . . 2.1.2.1. Servos . . . . . . . . 2.1.2.2. Motores . . . . . . . 2.1.2.3. TCM Brushless DC . 2.1.3. Sensores . . . . . . . . . 2.1.4. Comunicaciones . . . . 2.1.4.1. I2 C . . . . . . . . . 2.1.4.2. Wi-Fi . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
2.2. Arquitectura: Alimentacin . . . . . . . . . . . . . . . . . . . . . . . 2.3. Arquitectura: Control . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Inter-Integrated Circuit (I2 C) 3.1. Mdulo I2 C en el dsPIC30F3010 . . . . . . . . . . . . . 3.1.1. Pines . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2. Direcciones . . . . . . . . . . . . . . . . . . . . . . 3.1.3. Registros . . . . . . . . . . . . . . . . . . . . . . . 3.1.3.1. I2CCON . . . . . . . . . . . . . . . . . . . . . 3.1.3.2. I2CSTAT . . . . . . . . . . . . . . . . . . . . . 3.1.3.3. I2CRCV . . . . . . . . . . . . . . . . . . . . . 3.1.3.4. I2CTRN . . . . . . . . . . . . . . . . . . . . . . 3.1.3.5. I2CADD . . . . . . . . . . . . . . . . . . . . . 3.1.3.6. I2CBRG . . . . . . . . . . . . . . . . . . . . . 3.1.4. Protocolo . . . . . . . . . . . . . . . . . . . . . . . 3.1.4.1. Transmisin y recepcin desde el maestro . . . . 3.1.4.2. Transmisin y recepcin desde el esclavo . . . . 3.1.4.2.1. Recepcin . . . . . . . . . . . . . . . . . . 3.1.4.2.2. Transmisin . . . . . . . . . . . . . . . . . 3.2. Circuito de acondicionamiento . . . . . . . . . . . . . . 3.2.1. Clculo de las resistencias serie y de pull-up . . . . . 3.2.1.1. Resistencias de pull-up . . . . . . . . . . . . . . 3.2.1.2. Resistencias serie . . . . . . . . . . . . . . . . . 3.3. Programacin del dsPIC30F3010 . . . . . . . . . . . . . 3.3.1. Maestro . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1.1. Diagrama de ujo . . . . . . . . . . . . . . . . . 3.3.1.2. Funcin de inicializacin . . . . . . . . . . . . . 3.3.1.3. Interrupcin . . . . . . . . . . . . . . . . . . . . 3.3.2. Esclavo . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2.1. Diagrama de ujo . . . . . . . . . . . . . . . . . 3.3.2.2. Funcin de inicializacin . . . . . . . . . . . . . 3.3.2.3. Interrupcin . . . . . . . . . . . . . . . . . . . . 3.3.2.4. Funcin de procesamiento . . . . . . . . . . . . 3.3.3. Problemas detectados . . . . . . . . . . . . . . . . . 3.4. Programacin del driver . . . . . . . . . . . . . . . . . . 3.4.1. Modicaciones realizadas en la clase Comm . . . . . 3.4.1.1. Variables y funciones aadidas . . . . . . . . . . 3.4.1.2. Modicaciones en funciones existentes de Comm 3.4.2. Clase CComunicaI2C . . . . . . . . . . . . . . . . . 3.4.2.1. Diagrama de ujo . . . . . . . . . . . . . . . . .
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
33 34 36 36 37 37 38 38 38 38 38 38 38 39 39 40 40 41 45 46 46 47 47 48 48 49 50 51 51 51 52 53 53 54 54 54 56 58 58 3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4.2.2. Variables . . . . . . . . . . . . . . . . 3.4.2.3. Funciones . . . . . . . . . . . . . . . . 3.4.2.3.1. Funciones de inicio y comunicacin 3.4.2.3.2. Funciones de transmisin . . . . . 3.4.2.3.3. Funciones de procesamiento . . . . 3.4.2.3.4. Funciones de lectura . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
59 60 60 61 62 63 64 64 68 68 69 69 69 70 70 72 72 73 73 74 75 75 75 78 80 80 82 82 83 83 84 84 84 84 85 85 86 86
4. Motores Brushless DC 4.1. Principio de funcionamiento . . . . . . . . . . . . . . 4.2. Tarjeta TCM Brushless DC . . . . . . . . . . . . . . . 4.2.1. Componentes . . . . . . . . . . . . . . . . . . . . 4.2.2. Funcionalidades . . . . . . . . . . . . . . . . . . . 4.2.3. Diseo . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3.1. Alimentacin de los motores: Filtro EMI . . . 4.2.3.2. Alimentacin del driver: Filtro LC . . . . . . . 4.2.3.3. Medida de corriente . . . . . . . . . . . . . . 4.2.3.3.1. Mejoras para diseos futuros . . . . . . . . 4.2.3.4. Consigna de PWM . . . . . . . . . . . . . . . 4.2.3.5. Circuito de acondicionamiento . . . . . . . . . 4.2.3.6. Circuito de programacin del microcontrolador 4.2.4. Conexionado . . . . . . . . . . . . . . . . . . . . 4.2.5. Programacin del dsPIC30F3010 . . . . . . . . . . 4.2.5.1. Diagrama de ujo . . . . . . . . . . . . . . . . 4.2.5.2. Funciones de inicializacin . . . . . . . . . . . 4.2.5.3. Interrupciones . . . . . . . . . . . . . . . . . 5. Global Positioning System (GPS) 5.1. Principio de funcionamiento . . . . . . . . . . . . . . 5.2. Tarjeta GPS I2 C/SPI Hub . . . . . . . . . . . . . . . . 5.2.1. Componentes . . . . . . . . . . . . . . . . . . . . 5.2.1.1. Garmin GPS 15L . . . . . . . . . . . . . . . . 5.2.2. Funcionalidades . . . . . . . . . . . . . . . . . . . 5.2.3. Diseo . . . . . . . . . . . . . . . . . . . . . . . . 5.2.3.1. Circuito de acondicionamiento . . . . . . . . . 5.2.3.2. Circuito de programacin del microcontrolador 5.2.3.3. Interfaz I2 C/SPI . . . . . . . . . . . . . . . . . 5.2.3.4. Conguracin del GPS . . . . . . . . . . . . . 5.2.4. Conexionado . . . . . . . . . . . . . . . . . . . . 5.2.5. Programacin . . . . . . . . . . . . . . . . . . . . 5.2.5.1. Funcin principal . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
5.2.5.2. Mdulo UART . . . . . . . . . 5.2.5.2.1. Diagrama de ujo . . . . . 5.2.5.2.2. Funcin de inicializacin . . 5.2.5.2.3. Funciones de procesamiento 5.2.5.2.4. Funciones de lectura . . . . 5.2.5.3. Mdulo I2 C . . . . . . . . . . . 6. Cinemticas 6.1. Ackerman . . . . . . . . . . . . . . . 6.2. Doble Ackerman . . . . . . . . . . . 6.3. Sncrona . . . . . . . . . . . . . . . . 6.4. Sncrona orientada . . . . . . . . . . . 6.5. Programacin de la clase CCinematica 6.5.1. Variables . . . . . . . . . . . . . 6.5.2. Constructor y destructor . . . . . 6.5.3. Funciones . . . . . . . . . . . . . 6.5.4. Ejemplo de uso . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
87 87 87 88 90 90 92 92 94 95 95 96 97 97 97 102
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
7. Resultados y pruebas realizadas 103 7.1. Prueba de control de los motores . . . . . . . . . . . . . . . . . . . . 103 7.2. Prueba de comunicaciones I2 C . . . . . . . . . . . . . . . . . . . . . 104 7.3. Prueba de las cinemticas . . . . . . . . . . . . . . . . . . . . . . . . 105 8. Conclusiones 9. Futuros desarrollos Bibliografa II. Estudio econmico 107 109 110 113 116 118 119 119 119 120 120 121 121 121 122 5
III. Manual de usuario del robot IV. Manual de programador del Driver de I2 C 1. Introduccin 1.1. Archivos necesarios . . . . . . . 1.2. Inicializacin y envo de tramas . 1.3. Direcciones . . . . . . . . . . . 1.4. Otras constantes . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2. Funciones 2.1. Funcin ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Funciones de la TCM Brushless DC . . . . . . . . . . . . . . . . . .
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
2.2.1. Factor de servicio de los motores . 2.2.1.1. Ejemplo . . . . . . . . . . . . 2.2.2. Velocidad de los motores . . . . . 2.2.2.1. Ejemplo . . . . . . . . . . . . 2.2.3. Medida del consumo de corriente . 2.2.3.1. Ejemplo . . . . . . . . . . . . 2.3. Funciones del GPS . . . . . . . . . . 2.3.1. Coordenadas . . . . . . . . . . . 2.3.1.1. Ejemplo . . . . . . . . . . . . 2.3.2. Fecha . . . . . . . . . . . . . . . 2.3.2.1. Ejemplo . . . . . . . . . . . . 2.3.3. Hora . . . . . . . . . . . . . . . . 2.3.3.1. Ejemplo . . . . . . . . . . . . V.
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
122 122 122 122 123 123 123 123 124 124 125 125 125 126 127 127 129
1. Mdulo I2 C 130 1.1. I2C.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 1.2. I2C.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 2. Driver de I2 C 143 2.1. CComunicaI2C.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 2.2. CComunicaI2C.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 3. Tarjeta TCM Brushless DC 3.1. main.c . . . . . . . . . 3.2. motor.h . . . . . . . . 3.3. motor.c . . . . . . . . . 3.4. timers.h . . . . . . . . 3.5. timers.c . . . . . . . . 3.6. I2C.h . . . . . . . . . . 3.7. I2C.c . . . . . . . . . . 4. Tarjeta GPS I2 C/SPI Hub 4.1. main.c . . . . . . . . 4.2. RS232.h . . . . . . . 4.3. RS232.c . . . . . . . 4.4. I2C.h . . . . . . . . . 160 160 162 163 169 170 172 174 181 181 183 184 191 6
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
4.5. I2C.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 5. Clase CCinematica 200 5.1. CCinematica.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 5.2. CCinematica.cpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 VII. Hojas de caractersticas 210
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
ndice de guras
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Ejemplos de robots todoterreno . . . . . . . . . . . . . . . . . . . . . . . . BigDog escalando una colina nevada y una pila de escombros . . . . . . . Componentes principales de BigDog . . . . . . . . . . . . . . . . . . . . . RHex en un terreno embarrado . . . . . . . . . . . . . . . . . . . . . . . . Loper subiendo escaleras . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitectura mecnica de Octopus . . . . . . . . . . . . . . . . . . . . . . Diseo de la rueda tctil de Octopus . . . . . . . . . . . . . . . . . . . . . Arquitectura electrnica de Octopus . . . . . . . . . . . . . . . . . . . . . Nomad con las ruedas orientadas para girar sobre su propio eje . . . . . . . Opciones de reconguracin de Nomad . . . . . . . . . . . . . . . . . . . Ejemplo de reconguracin de un robot para mejorar la estabilidad en terrenos inclinados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sample Return Rover con el centro de gravedad en posiciones extremas . . Scarab con la suspensin adaptada al terreno . . . . . . . . . . . . . . . . . Tarjeta de Control de Sensores v3.0 (TCS3) . . . . . . . . . . . . . . . . . Diseo CAD de la plataforma recongurable . . . . . . . . . . . . . . . . Diagrama de los componentes principales del sistema . . . . . . . . . . . . Diagrama de la alimentacin de los componentes principales del sistema . . Esquema de la alimentacin donde se indica la posicin del interruptor y la proteccin con fusible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de las seales de control y los sistemas de comunicacin empleados Pines del dsPIC30F3010 . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de tiempos de una comunicacin completa desde el punto de vista de un maestro con direcciones de 7 bits . . . . . . . . . . . . . . . . . . . Diagrama de tiempos de una recepcin desde el punto de vista de un esclavo con direcciones de 7 bits . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrama de tiempos de una transmisin desde el punto de vista de un esclavo con direcciones de 7 bits . . . . . . . . . . . . . . . . . . . . . . . . . . . Esquema del circuito de acondicionamiento del bus I2 C . . . . . . . . . . . Diagrama de ujo simplicado del mdulo maestro . . . . . . . . . . . . . Diagrama de ujo simplicado del mdulo esclavo . . . . . . . . . . . . . 17 18 19 20 20 21 21 22 23 23 24 24 25 27 28 30 33 34 34 37 42 43 44 45 49 51
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.
La clase CComunicaI2C hereda de Comm . . . . . . . . . . . . . . . . . . 54 Diagrama de ujo de una comunicacin a travs del driver de I2 C. . . . . . 59 Representacin simplicada del funcionamiento de un motor elctrico . . . 64 Posiciones del campo magntico del esttor de un motor brushless DC . . . 65 Medida de los sensores de efecto Hall y tensin aplicada a los bobinados en funcin de la posicin del rotor en grados elctricos . . . . . . . . . . . . . 66 Funcionamiento de un puente de MOSFET . . . . . . . . . . . . . . . . . 67 Ejemplo de cmo se vara la velocidad del motor conmutando los transistores inferiores del puente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Ubicacin de los componentes de la tarjeta TCM Brushless DC . . . . . . . 68 Filtro de modo comn para interferencias electromagnticas conducidas . . 69 Filtro de la alimentacin del puente de MOSFET . . . . . . . . . . . . . . 70 Curva caracterstica del transductor de corriente de efecto Hall LTSR 25-NP 71 Esquema del circuito del sensor de corriente . . . . . . . . . . . . . . . . . 72 Filtro paso bajo de la consigna de PWM . . . . . . . . . . . . . . . . . . . 73 Circuito de programacin del dsPIC30F3010 . . . . . . . . . . . . . . . . 73 Conexionado de la TCM Brushless DC . . . . . . . . . . . . . . . . . . . 74 Diagrama de ujo de la TCM Brushless DC . . . . . . . . . . . . . . . . . 75 Registro OVDCON de un dsPIC30F. En el caso del dsPIC30F3010 slo se pueden usar los PWM 1 a 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Determinacin de la posicin mediante la interseccin de esferas . . . . . . 81 Fuentes de error de las medidas del GPS . . . . . . . . . . . . . . . . . . . 81 Esquema de funcionamiento del GPS diferencial . . . . . . . . . . . . . . 81 Ubicacin de los componentes de la tarjeta GPS I2 C/SPI Hub . . . . . . . . 82 Eleccin del bus de comunicaciones de salida: I2 C o SPI . . . . . . . . . . 84 Circuito de conguracin del GPS . . . . . . . . . . . . . . . . . . . . . . 85 Conexionado de la tarjeta GPS I2 C/SPI Hub . . . . . . . . . . . . . . . . . 86 Diagrama de ujo del mdulo UART . . . . . . . . . . . . . . . . . . . . . 87 Cinemtica Ackerman . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Cinemtica Doble Ackerman . . . . . . . . . . . . . . . . . . . . . . . . . 94 Cinemtica Sncrona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Cinemtica Sncrona orientada . . . . . . . . . . . . . . . . . . . . . . . . 95 Interfaz del programa de pruebas de las cinemticas . . . . . . . . . . . . . 105 Ciclo de vida de un producto . . . . . . . . . . . . . . . . . . . . . . . . . 115 Interfaz de usuario del programa de pruebas de las cinemticas . . . . . . . 127
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
ndice de tablas
1. Direcciones soportadas por el bus I2 C del dsPIC30F3010 . . . . . . . . . . 2. Especicaciones elctricas necesarias para el clculo de las resistencias del bus I2 C con el dsPIC30F3010 . . . . . . . . . . . . . . . . . . . . . . . . 3. Tiempos de subida mximos de las seales del bus I2 C en el dsPIC30F3010 4. Valor mximo de las resistencias de pull-up para distintas condiciones de operacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. Estructura de la trama de I2 C . . . . . . . . . . . . . . . . . . . . . . . . . 6. Componentes de la tarjeta TCM Brushless DC . . . . . . . . . . . . . . . . 7. Conguracin de las espiras del transductor de corriente LTSR 25-NP . . . 8. Componentes de la tarjeta GPS I2 C/SPI Hub . . . . . . . . . . . . . . . . . 9. Tiempos aproximados de conexin del GPS . . . . . . . . . . . . . . . . . 10. Cdigo de colores de los cables del GPS . . . . . . . . . . . . . . . . . . . 37 46 46 47 61 68 71 82 83 85
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
10
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
11
31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
Funcin de procesamiento de mensajes de la UART . . . . . . . . . . . . Prototipos de las funciones de lectura de variables de la UART . . . . . . Funcin de procesamiento del mdulo I2 C de la tarjeta del GPS . . . . . Constantes denidas en la clase CCinematica . . . . . . . . . . . . . . . Constructor y destructor por defecto de la clase CCinematica . . . . . . . Prototipos de las funciones de CCinematica . . . . . . . . . . . . . . . . Funcin CalcularBatalla . . . . . . . . . . . . . . . . . . . . . . . . . . Funcin Ackerman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Funcin PotenciaMaxima . . . . . . . . . . . . . . . . . . . . . . . . . . Funcin Aceleracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejemplo de uso de la clase CCinematica . . . . . . . . . . . . . . . . . . Estructura de una transmisin de CComunicaI2C . . . . . . . . . . . . . Direcciones de los dispositivos del bus I2 C . . . . . . . . . . . . . . . . . Otras constantes del driver . . . . . . . . . . . . . . . . . . . . . . . . . Prototipos de las funciones asociadas al ping . . . . . . . . . . . . . . . . Ejemplo de uso de la funcin ping . . . . . . . . . . . . . . . . . . . . . Prototipo de la funcin DCMotorI2C . . . . . . . . . . . . . . . . . . . . Ejemplo de uso de la funcin que ja el factor de servicio de los motores Ejemplo de uso de las funciones de lectura de la velocidad de los motores Ejemplo de uso de las funciones de lectura de la corriente de los motores . Prototipos de las funciones asociadas a las coordenadas . . . . . . . . . . Ejemplo de uso de las funciones de lectura de coordenadas GPS . . . . . Prototipos de las funciones para obtener la fecha del GPS . . . . . . . . . Ejemplo de uso de las funciones de fecha . . . . . . . . . . . . . . . . . Prototipos de las funciones para obtener la hora del GPS . . . . . . . . . Ejemplo de uso de las funciones de hora . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
90 90 91 96 97 98 98 100 100 101 102 119 120 120 121 121 122 122 122 123 124 124 124 125 125 125
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
12
Acrnimos
CAD CIR DARPA EMI GPS I2 C IMU JPL Li-Po MIT PCB PWM SPI SRR TCM TCS3 UART WAMR Computer Aided Design Centro Instantneo de Rotacin Defense Advanced Research Projects Agency Electromagnetic Interference Global Positioning System Inter-Integrated Circuit Inertial Measurement Unit Jet Propulsion Laboratory Lithium Polymer Massachussets Institute of Technology Printed Circuit Board Pulse Width Modulation Serial Peripheral Interface Sample Return Rover Tarjeta de Control de Motores Tarjeta de Control de Sensores v3.0 Universal Asynchronous Receiver Transmitter Wheeled Autonomous Mobile Robots
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
13
Smbolos
b l ho rs ri ro rg s i o v vdi vdo vti vto Va Batalla Distancia del CIR a la rueda trasera externa Distancia al CIR de la rueda triciclo equivalente Distancia de la rueda interna al CIR Distancia de la rueda externa al CIR Distancia del centro del robot al CIR Giro de la rueda triciclo equivalente Giro de la rueda interna Giro de la rueda externa Velocidad del punto medio del robot Velocidad de la rueda delantera interna Velocidad de la rueda delantera externa Velocidad de la rueda trasera interna Velocidad de la rueda trasera externa
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
14
PARTE I
TML
MEMORIA
Captulo 1 Introduccin
captulo se estudia la situacin actual de la robtica mvil de exteriores, en especial de aquella destinada a desplazarse por terrenos agrestes. A partir de este anlisis, se exponen las razones que han inducido la creacin de un nuevo prototipo, as como los objetivos que se persiguen.
N ESTE
1.1.
Como se destaca en [2], la mayora de los robots para exteriores desarrollados hasta el momento han sido diseados para trabajar en unas condiciones no demasiado exigentes, que limitan de forma determinante su campo de aplicacin. Son capaces de navegar por supercies duras con una densidad de obstculos de entre un 5 y un 10 % y pendientes modestas (menores del 30 %). Sin embargo, la corriente actual fomenta el desarrollo de robots todoterreno, con un perl diametralmente opuesto, capaces de hacer frente a terrenos que supongan un autntico desafo. Su objetivo es superar obstculos ms altos que el radio de sus ruedas sin necesidad de esquivarlos, ascender por rampas con inclinaciones de hasta el 50 % y moverse por terrenos escarpados de manera estable, uida y rpida. En [4] se hace tambin especial hincapi en la necesidad de desarrollar sistemas ecientes de bajo consumo, en aras de conseguir la mayor autonoma posible. Como se explica en [1], existen diferentes estrategias a la hora de abordar el problema de la navegacin por terrenos agrestes, como los anteriormente descritos. Algunas de ellas estn inspiradas en seres vivos, como pueden ser los robots con patas, los podos y los saltadores, mientras que otras parten de inventos desarrollados por el hombre para su locomocin, como los robots con ruedas o los de traccin oruga, diseados tomando los carros de combate como modelo. Estos dos ltimos tipos se pueden agrupar en uno slo, dadas sus semejanzas constructivas y de funcionamiento.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
16
I. M EMORIA l 1. I NTRODUCCIN
Historia (II)
Figura 1. Ejemplos de robots todoterreno De entre las alternativas citadas, las ms desarrolladas hasta la fecha son los robots con ruedas o WAMR (Wheeled Autonomous Mobile Robots, en ingls), y los robots con patas. La opcin rodada se caracteriza por poseer una alta eciencia con un mecanismo de control relativamente sencillo, mientras que los robots con patas son ms verstiles en terrenos escarpados, a costa de necesitar un sistema de control y coordinacin mucho ms sosticado [5]. Por su parte, los robots saltadores cuentan con la ventaja de requerir menos actuadores que los robots con patas o ruedas. Sin embargo, presentan una serie de inconvenientes que no han conseguido ser resueltos an de forma satisfactoria y que han frenado su desarrollo. Dada su ligereza, la carga que pueden transportar es bastante exigua y, sobre todo, las vibraciones que se producen durante los impulsos y posteriores aterrizajes pueden afectar a las medidas de los sensores instalados o, incluso, daarlos. Finalmente, en los ltimos aos se ha venido investigando en robots formados por cadenas modulares que se desplazan, generalmente, como si fuesen serpientes, de ah
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
17
I. M EMORIA l 1. I NTRODUCCIN
que reciban tambin el nombre de podos. Suponen un nuevo enfoque en la disciplina de la construccin de robots, puesto que su diseo modular permite que puedan adaptar su forma en funcin del tipo de terreno. Es una alternativa de futuro que an se encuentra en los primeros estadios de su desarrollo [20]. A continuacin, se van a presentar con mayor detalle algunos robots representativos Figure 3. Illustration showing BigDogs major components. por las soluciones adoptadas para hacer frente a terrenos complicados.mud and snow and on We have tested BigDog travelling in
Figure 4. Top: scree-like surfa experiment. B pile using a experiment, all its way along.
We have integra BigDog. The s Propulsion Lab cameras, a com can be used to a of the robot, a LIDAR is bein leader, without
1.1.1.
BigDog
BigDog es un robot en proceso de desarrollo por la empresa Boston Dynamics. Est BigDogs longest nanciado por DARPA (Defense Advanced Researchlasted continuous operationcontinuallykm hike (6.2 Projects Agency), was a 10 developing una agencia del miles) that 2.5 hours. We are BigDogs reliability, with an initial goal of 20 hours mean Departamento de Defensa de los Estados Unidos failure. responsable del desarrollo de nuevas time to control varied from machine to machine, they all shared these hydraulic oil and a radiator cools the engine for sustained tecnologas para uso militar. three essential ingredients. operation.
inclines with a variety of surfaces, including rutted trials, rocky, and loose scree. BigDog has also jumped about 1.1 meters. and carried various loads. On flat terrain BigDog has carried 340 lbs (154 kg), although loads of 50 kg are more typical. We are working on a redesign of BigDog to climb with larger loads.
To move at hu dynamically bal its lateral velo sensed behavio inertial sensors.
BigDogs cont ground reaction postural comma legs to optimiz loading across individual legs Whereas the Leg Laboratory robots did a good job of An onboard computer controls BigDog's behavior, manages directed toward demonstrated the feasibility of dynamically balanced legged the sensors, and handles communications with a remote and actuator eff Su objetivo es construir un robot autnomo con patas con una movilidad superior systems, they had two primary limitations that would need to human operator. The control computer also records large be la de los build practical legged ruedas. One is the amounts of debera poder performance analysis, failure Basic walking addressed to vehculos con vehicles. El sistema nal engineering data for alcanzar cualquier a for on-board power so the robot could operate in the analysis and operational support. below. A gait c need field without hoses and persona o the need pudiera acceder about 50 sus piernas o patas, leg communicat lugar al que unawires. Another isanimalfor control BigDog has usandosensors. Inertial sensors measure the stable gait. A v algorithms that provide locomotion and stability on rough attitude and acceleration of the body, while joint sensors terrain. We now turn to gran a self-contained una autonoma motion and horas. Tambin ser capaz transportando unaBigDog, carga y con quadruped measure de varias force of the actuators working at the robot that uses many of the ideas and concepts of the Leg joints. The onboard computer integrates information from Laboratory robots, but also addresses the practical problems these sensors to provide estimates of how de superar cualquier obstculo con un mnimo de intervencin humana. BigDog is moving of onboard power and rough-terrain controls in order to move in space. Other sensors monitor BigDog's homeostasis: toward practical legged vehicles. hydraulic pressure, flow and temperature, engine speed and temperature, and the like.
Figure 2. BigDog climbing a snow-covered hill during (a) testing. To see BigDog in action, click this link:
www.BostonDynamics.com/dist/BigDog.wmv.
The onboard computer performs both low-level and highlevel control functions. The low-level control system servos positions and forces at the joints. The high-level control system coordinates behavior of the legs to regulate the velocity, attitude and altitude of the body during locomotion. Figure 5: Contr The control system also regulates ground interaction forces to We developed maintain support, propulsion and traction. and rough terra BigDog has a variety of locomotion behaviors. It can stand before testing up, squat down, walk with a crawling gait that lifts just one simulated robot leg at a time, walk with a trotting gait that lifts diagonal legs slopes up to 60 in pairs, trot with a running gait that includes a flight phase, on the level to and bound in a special gallop gait. Travel speed for the crawl accommodates is about 0.2 m/s, for the trot is about 1.6 m/s (3.5 mph), for by irregularities (b) the running trot is about 2 m/s (4.4 mph) and BigDog briefly exceeded 3.1 m/s (7 mph) while bounding in the laboratory.
3. BIGDOG 1.1 meters long, and 0.3 m wide. BigDog is a legged robot under development at Boston Dynamics, with funding from DARPA. The goal is to build BigDog is usually driven by a human operator who works BigDog cuenta con sistemas de alimentacin, actuacin, sensorizacin, control y unmanned legged vehicles with rough-terrain mobility through an operator control unit (OCU) that communicates with the robot via The operator uses the OCU to superior to existing wheeled and tracked vehicles. The ideal alimentacinIP radios. motor de combustin comunicaciones embarcados. La fuentego provide high-level steering and speed input to guide the robot de es un system would travel anywhere a person or animal could using their alternativo de dos tiempos refrigerado legs, run for time, carry its along its path and to control the speed of travel. The operator internaand payload. It many hours at aenoughand negotiate canpor agua que proporciona una potencia also tell the robot to start or stop its engine, stand up, own fuel would be smart to squat down, walk, trot, or jog. A visual display provides the terrain with a minimum of CV, guidance and intervention. aproximada de 15 humanes decir, unos 11 kW, a una bomba hidrulicadata. The operator los que nutre a only The BigDog robots we have built have taken steps toward operator operational and engineering provides high-level input, leaving BigDog's onboard control these goals, though there remains a presin. work to be actuadores de aceite a alta great deal ofUn ordenador de aoperate the legs, provide stability on rough terrain, system to bordo controla su comportamiento, done. gestiona los sensores thatfacilitapower,comunicaciones con el operador humano. y provide las actuation, and reflex responses to external disturbances. BigDog has onboard systems sensing, controls and communications. The power supply is a water-cooled two-stroke internal combustion engine that delivers about 15 hp. The engine drives a hydraulic pump which delivers high-pressure hydraulic oil through a system of filters, manifolds, accumulators and other plumbing to the robots leg actuators. The actuators are low-friction hydraulic cylinders robot 4x4 para la aerospace-quality Desarrollo de unregulated by two-stage navegacin por terrenos agrestes 18 servovalves. Jaime Each Eachhas 4 hydraulic actuators that power and Boal leg actuator has sensors for joint position the Martn-Larrauri force. joints, as well as a 5th passive degree of freedom. See Figure 3. A heat-exchanger mounted on BigDog's body cools the
Figura 2. BigDog escalando (a) una colinaBigDog weighs(b) una pila de escombros [6] nevada y about 109 kg (240 lbs), is about 1 meter tall,
I. M EMORIA l 1. I NTRODUCCIN
Incorpora ms de 50 sensores. Los sensores inerciales miden la postura y la aceleracin del cuerpo, mientras que los de las articulaciones controlan el movimiento y la fuerza de los actuadores para estimar cmo se est moviendo el robot en el espacio. Otros sensores monitorizan su homeostasis: la presin, el ujo y la temperatura del aceite, la velocidad del motor y otras variables similares.
Figure 4. Top: BigDog scree-like surface. The experiment. Bottom:.Bi pile using a crawl ga experiment, all terrain s its way along.
We have integrated a ster BigDog. The stereo visi Propulsion Laboratory. cameras, a computer and can be used to acquire th of the robot, and also t LIDAR is being used to leader, without requiring Figure 3. Illustration showing BigDogs major components.
We have tested BigDog travelling in mud and snow and on 4 inclines variedad de formas de locomocin, rutted puede Presenta una gran with a variety of surfaces, including ya que trials, arrastrarse a rocky, and loose scree. BigDog has also jumped about 1.1 0,2 m/s (0,72 km/h), trotarcarriedm/s (5,76 km/h) o correr a 2 m/s (7,2 km/h) en entornos human-wal meters. and a 1,6 various loads. On flat terrain BigDog has To move at carried 340 laboratorio although loads of 50 una velocidad de 3,1 m/s, reales. En condiciones delbs (154 kg), ha llegado a alcanzarkg are more dynamically balanced tro typical. We are working on a redesign of BigDog to climb its lateral velocity and esto es, 11,16 km/h. Tambin es capaz de saltar hasta 1,1 metros. sensed behavior the leg with larger loads. inertial sensors.
BigDogs longest continuous 1 m de alto, a 10 de largo y 0,3 BigDog pesa en torno a 109 kg y mideoperation was1,1 mkm hike (6.2 m de ancho. miles) that lasted 2.5 hours. We are continually developing BigDogs control system Puede transportar 154 kg en terrenos llanos y hasta 50 kg en terrenos inclinados. Su BigDogs reliability, with an initial goal of 20 hours mean ground reaction forces of postural time to failure. autonoma mxima es de 10 km, lo que equivale aproximadamente a 2,5 horas [6]. commands. The
legs to optimize their l loading across the limbs individual legs are encou 1.1.2. RHex directed toward the hips, and actuator RHex es un robot hexpodo desarrollado por Boston Dynamics y nanciado por efforts.
DARPA, que se caracteriza por poseer una extraordinaria movilidad en terrenos agrestes. control u Basic walking below. A gait Es capaz de escalar terrenos rocosos superando obstculos de hasta 20 cm de altura, coordinati leg communication, initia desplazarse por barro, arena y zonas frondosas, as como ascender por pendientes deA virtual leg stable gait. o hasta 45 o subir escaleras. Su cuerpo sellado lo convierte en un robot completamente operativo en condiciones de lluvia y barro, adems de permitirle nadar o, incluso, bucear. Alcanza velocidades de hasta 2,7 m/s (9,72 km/h) en terrenos relativamente llanos. Su autonoma, que no es demasiado elevada, asciende a 45 minutos de media, unos 3,7 kilmetros.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
19
I. M EMORIA l 1. I NTRODUCCIN
Figura 4. RHex en un terreno embarrado [24] Est controlado remotamente por un operador situado a una distancia mxima de 600 m. Un enlace de radio le permite transmitir las imgenes tomadas por sus cmaras delantera y trasera as como datos de navegacin como, por ejemplo, coordenadas GPS [24, 25].
1.1.3.
Loper
Loper es una plataforma robtica verstil, diseada para trabajar en entornos interiores y exteriores, capaz de superar obstculos naturales y estructuras construidas por el hombre como escaleras. Esto es posible gracias a sus cuatro novedosas ruedas de tres lbulos acopladas a sendos servoactuadores de corriente alterna de alto par.
Figura 5. Loper subiendo escaleras [26] Alcanza velocidades mximas de 8 km/h en terreno llano y puede subir escaleras a un ritmo de 6 peldaos/s aunque, por motivos de seguridad, ambas velocidades estn limitadas a 3 km/h y 3 peldaos/s.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
20
I. M EMORIA l 1. I NTRODUCCIN
1.1.4.
Octopus
El sosticado mecanismo locomotor de Octopus consta de 15 grados de libertad 3 El soporte ROBOT (Figura 6).THE OCTOPUSde carga central (payload support) y los dos cuerpos (body) situados a cada lado, design architecture una conguracin diferencial pasiva. A su vez, estn unidos con 3.1 Mechanical The sophisticated locomotion conectan Octopus has un paralelogramo. payload los brazos (arm) y el cuerpo semechanism of formando15 degrees of freedom. The Finalmente, los support and the two bodies on each side are linked in a passive differential configuration. The two arms and the body on each side of ruedas are linked in a motorized parallelogram antebrazos (forearm), que soportan dos the robot cada uno, estn unidos a los brazos por configuration. The forearms are linked to the arms by a motorized joint. Each forearm has two una junta tactile, motorized wheels mecanismo tan complejo permite al the robotmantener todas motorizada. Este attached to it. This mechanism architecture allows robot to have all the wheels touching the ground at the same time, independently of the terrain profile (fig las ruedas7). contacto con el suelo, independientemente del perl del mismo. en
Admite una carga mxima de 5 kg ubicada en el soporte central, donde tambin van payload support for autonomous operation. alojadas las bateras.
Figura 7. Diseo Tactile Wheel Figure 8: Infrared Sensor TCRT1000 with de la rueda tctil de Octopus [7]
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Motor Torque Jaime Boal Martn-Larrauri
S16 S1 S2 S3
21
E E R
T Touch Sensitive Sensors I. M l 1. I I 2-Axis Tilt Sensor F Payload A Supportde este peculiar diseo mecnico, la solucin R innovadora reside en pesar ms Radio Link (Bluetooth) B sus ruedas, que son tctiles y permiten recabar informacin acerca del terreno. Esto es Rposible gracias aFque se han distribuido 16 sensores de infrarrojos aBattery del cubo de x 1,2V) B lo largo Pack (10 (Figura con el n de medir Ela ruedadeM 7), con el terreno. la deformacin del neumtico causada por las E Empty Slot fuerzas contacto I
EMORIA NTRODUCCIN
M M
P E
M T T M
En cuanto a los componentes electrnicos, todos estn integrados en la estructura, como se puede apreciar en la Figura 8. Los motores estn controlados por sendos Bus Specifications microprocesadores locales que miden la velocidad, la posicin y el par, mientras que Arm Arm F F F F cada rueda incorpora un microprocesador adicional para gestionar los sensores de Body I2C Bus Forearm Forearm infrarrojos. Para monitorizar la posicin de los cuerpos, se utilizan dos inclinmetros Power Supply 5V todos los de 2 ejes. El sistema se gobierna desde un mdulo maestro conectado a Supply dispositivos a travs de un bus I2 C estndar [7].
M M
P E
M T T M
Articulations Motors Electronic (6x) Infrared Sensors for Touch Sensitive Wheels (8x) WheelsMotors Electronic (8x)
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
22
I. M EMORIA l 1. I NTRODUCCIN
1.1.5.
Nomad
Nomad es un robot de exploracin lunar creado en 1997 para la NASA por el Instituto de Robtica de la Universidad Carnegie Mellon, y que posteriormente fue adaptado para buscar meteoritos en la Antrtida bajo el nombre de LORAX (Life On ice: Robotic Antarctic eXplorer).
Figura 9. Nomad con las ruedas orientadas para girar sobre su propio eje [8] En su tiempo supuso una revolucin, puesto que puede modicar tanto su chasis como su conguracin de avance para adaptarse a las condiciones del terreno, lo cual le footprint of the locomotion increases by 35% (Figure 26). The ability to change footprint has had major impact on por pendientes de its amenability o La Figura 10 muestra las posiciones del permitea ascender Nomads overall trafficability and hasta 28to.autonomous control. The deployed chassis has a 20% greater static stability over its stowed on the kinematics of a turn and possible limitations of power draw. For example, with the configuration. posibles cinemticas [8]. rear its deployed right-side both rotate chasis y lasFurthermore, because of reduced load transfer from the front to theeffortchassis at by 20 degrees,configuration, if the left-sideonand6-foot inneractuatorsradius which wheels when driving on slopes, the deployed chassis can develop 10% more tractive clockwise the rover makes a right turn a turning
CONFIGURATION OF NOMADS ROBOTIC LOCOMOTION
CONFIGURATION OF NOMADS ROBOTIC LOCOMOTION
than its stowed configuration and can therefore improve its gradeability by 10% based on equals the total length of the stowed chassis. The minimum inner turning radius is estimated vehicle-terrain limitations. The gradeability of the stowed rover on sandy hills has been to be 20 in [Shamah98]. estimated at 23 degrees, whereas the deployed chassis can climb slopes up to 28 degrees.
Dual Ackermann
Figure 26: Nomads transforming chassis in a compacted and deployed configuration (top). Four steps in the deployment of the right chassis frame (bottom).
(b) Cinemticas
4.3.3
Nomads metal tires are constructed of a thin aluminum shell manufactured to the shape of Coordinated Steering a wide-profile pneumatic tire. The compound spherical shell provides maximum strength The kinematics and actuation of the transforming chassis accommodate the execution of and resilience for minimum mass. Despite the negative impact of a wider tire on steering various steering geometries such as a dual Ackermann and differential skid steering resistance, the selected diameter to width ratio improves vehicle flotation and reduces ground contact pressure with positive effects on trafficability in loose sand. The tire contact
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Any steering scheme Jaime velocities of the is achieved through kinematic coordination of the two chassis frames. Boal Martn-Larrauri pairs of wheels are electronically servoed based The inner and outer
53
(Figure 27). In addition, Nomad can point-turn without any lateral resistance when the two sides of the transforming chassis are deployed to the maximum kinematic limit of the fourbar mechanisms. In this case Nomads wheels roll smoothly on the desired steering arc without slipping.
54
23
Karl Iagnemmaa, Adam Rzepniewskia, Steven Dubowskya*, Paolo Pirjanianb, Terrence Huntsbergerb, Paul Schenkerb
a
Department of Mechanical Engineering, Massachusetts Institute of Technology I. M EMORIA l 1. I NTRODUCCIN Cambridge, MA 02139 USA
b
1.1.6.
Science and Technology Development Section, Jet Propulsion Laboratory, California Institute of Technology, Pasadena, CA 91109 USA Sample Return Rover
El Sample Return Rover (SSR) es un robot de cuatro ruedas que ha sido desarrollado ABSTRACT Future Jet Propulsion Laboratory (JPL) perform tasks in rough con Working in such conditions, a rover por elplanetary exploration missions will use rovers to en colaboracinterrain. el Massachussets Institute could become trapped due to loss of wheel traction, or even tip over. The Jet Propulsion Laboratory has developed a new of Technology (MIT). rover with the ability to reconfigure its structure to improve tipover stability and ground traction. This paper presents a Su gran aportacin es la habilidad de modicar activamente su conguracin, lo cual permite mejorar la movilidad en terrenos irregulares. El sistema se basa en reposicionar 1. INTRODUCTION el centro de are increasingly being used in high-risk, rough terrainAs, por ejemplo, cuando atraviesa un gravedad para aumentar la estabilidad. situations, such as planetary exploration1. Future Mobile robots planetary exploration puede will require mobile robots to perform difficult mobility taskspara que la 2,3. Such tasks missions hacer descender plano inclinadovehicle stability, leading to tipover,un ladoofde su traction, leading to entrapment. Clearly, tipover suspensin in rough terrain plataforma can result in loss of and loss wheel instability can result in rover damage and la mayor parte superior, donde se concentratotal mission failure. del peso, permanezca horizontal. Si las The Jet Propulsion Laboratorys Sample Return Rover (SRR) has been developed with the ability to actively modify its circunstancias lo to enhance rough terrain mobility4. Reconfigurable robots can reposition their center el mass to kinematic configuration requieren, tambin puede redistribuir su masa reubicando of brazo improve stability in rough terrain. For example, when traversing an incline the SRR can lower one side of its suspension to robtico stabilitygradossee Figure 1. It accomplishes this using two active shoulder joints that adjust the two angles 1 increase its de 3 margin, de libertad que incorpora para recoger muestras, como su propio and 2, see Figures 1 and 2. It can also redistribute its center of mass by repositioning its manipulator. Both of these effects nombre indica. can be exploited to improve system stability.
Keywords: Mobile robots, reconfigurability, static stability, rough terrain method to control this reconfigurability to enhance system tipover stability. A stability metric is defined and optimized online using a quasi-static model. Simulation and experimental results for the Sample Return Rover (SRR) are presented. The method is shown to be practical and yields significantly improved stability in rough terrain.
Previous researchers have suggested the the use kinematic reconfigurability to enhance rough-terrain mobility5,6,7. However, Previous researchers have suggested use of of kinematic reconfigurability to enhance rough-terrain mobility5,6,7. However, its practical effectiveness hashas not yet been demonstrated a realreal rover system rough terrain. In thisthis paper a method for its practical effectiveness not yet been demonstrated on on a rover system in in rough terrain. In paper a method for stability-based kinematic reconfigurability is presented, andand applied the the JPL SRR4Kinematic equations relating the the stability-based kinematic reconfigurability is presented, applied to to JPL SRR4. . Kinematic equations relating reconfigurable joint variables to ato a vehicle stability robot improving rough-terrain stability by adjusting shoulder joints indexdefined based reconfigurable joint variables Example of stability measure are are writtenclosed form. A performance index is is defined based Figure 1. vehicle reconfigurable measure written in in closed form. A performance on on this stability measure andfunction reconguracinadequate robot para mejorar important consideration rough this stability measure and a a function that maintains de un ground clearance, an la estabilidad en in in rough Figura 11. Ejemplo de that maintains adequate ground clearance, an important consideration terrain. A rapid conjugate-gradient optimization of the the performance index performed subject to vehicle kinematic terrain. A rapid conjugate-gradient optimization of performance index is is performed subject to vehicle kinematic terrenos inclinados [3] constraints. The Correspondence:not not rely ondetailed map of the the terrain. This prohibitsglobal optimization. However, constraints. * method does dubowsky@mit.edu detailed map of terrain. This prohibits a a global optimization. However, The method does rely on a a wheel-terrain contact angles are are estimated using simple on-board sensors8,9. This allows for local optimization. The method wheel-terrain contact angles estimated using simple on-board sensors8,9. This allows for local optimization. The method considers gravitational forces dueduerover weight andand can account for forces duemanipulation of the the environment. considers gravitational forces to to rover weight can account for forces due to to manipulation of environment. Computational requirements are are light, being compatible with limited on-board resources planetary rovers. Simulation andand Computational requirements light, being compatible with limited on-board resources of of planetary rovers. Simulation le results under field conditions show diversas (vase el Captulo greatly improve rover funcin experimental permite adoptar cinemticas thatthat kinematic reconfigurability6. Cinemticas) en stability in rough experimental results under field conditions show kinematic reconfigurability cancan greatly improve rover stability in rough terrain. terrain.
Por otra parte, cada rueda es controlada de forma totalmente independiente, lo que
Figura 12. Sample Return Rover con el centro de gravedad en posiciones extremas [3]
2. GENERAL KINEMATIC RECONFIGURABILITY 2. GENERAL KINEMATIC RECONFIGURABILITY
Figure 2. Jet Jet Propulsion Laboratory Sample Return Rover (SRR) Figure 2. Propulsion Laboratory Sample Return Rover (SRR)
24 Consider aDesarrollo de un robot 4x4 para mobile robot uneven terrain. agrestesexample such a robot is shown in Figure 3. 3. Consider a general n-link tree-structured la navegacin por terrenos An An general n-link tree-structured mobile robot on on uneven terrain. example of of such a robot is shown in Figure The n links cancan form hybrid serial-parallel kinematic chains. We assume the joints are active revoluteprismatic joints, andand The n links form hybrid serial-parallel kinematic chains. We assume the joints are active revolute or or prismatic joints, Jaime Boal Martn-Larrauri their values are are denoted i={1,,n}. WeWe also assume the wheels legs make point contact with the the terrain. Thelinktheir values denoted i, i, i={1,,n}. also assume the wheels or or legs make point contact with terrain. The m m linkterrain contact points are are denoted, P , with their location defined a vector p from the the vehicle center mass. The terrain contact points denoted P with their location defined as as a vector p from vehicle center of of mass. The
I. M EMORIA l 1. I NTRODUCCIN
1.1.7.
Scarab
over refers to tipping side to side. With Scarab are attributes are symmetrical. en la Universidad
2.2 m high stance, wave was equal to the wheelbase, the suspension sides 1.6 m low stance rocked opposite each other and held the body level : 280 kg Al igual que en el SSR, las suspensiones de ambosthe suspension through the course. Figure 7 shows lados son independientes, lo que ht: 2740 N Earth surface differencing clearly, where the side frames are rocked 450 N Lunar surfacedesplazamiento por pendientes pronunciadas. Para ajustarlas, se basa en la facilita el relative to each other, matching the wheels to the age power available: 100 W medida de una IMUterrain. (Intertial Measurement Unit). nal power: 175 - 200 W ower: 24 W motion speed: 3 - 6 cm/s el diameter: 65 cm width: 1.4 m elbase: 0.8 - 1.4 m 1.2 m nominal ct ratio: 1:1.0 low stance k/wheelbase) 1:1.2 nominal stance 1:1.7 high stance lanar location: On geometric center eight: 0.48 m low stance 0.64 m nominal stance 0.74 m high stance pitch-over: 56 low stance 43 nominal stance 30 high stance roll-over: 61 low stance 53 nominal stance 49 high stance mum straddle: 55 cm mum straddle: Belly contact Figure 7: Suspension conforming to terrain oach,departure angle: 105 nominal stance Figura 13. Scarab con la suspensin adaptada al terreno [9] kover angle: 115 nominal stance In field testing, the vehicle has performed a long continuous traverse of 1 km, roughly the distance it arly Performance would cover between drill sites during a mission. En cuanto a la navegacin, utiliza sensores propioceptivos para estimar su posicin Scarab has also encountered a range of terrain such as y velocidad en he following sections summarize early rover combinacin con escneres craters para construir modelos del entorno, slopes of varying grade and lser on the order of 5 m rmance characterized through the Fall of 2007. in diameter formed with loose, mixed grain detectar obstculos y determinar rutas ptimas y seguras. size slag. Scarab is able to climb rock obstacles of 40-50 cm Mobility height, with a range a shapes. Mobility on slopes can se alimenta the dos bateras de ion de litio El sistema, de 200 W de potencia nominal,be aided by con rovers the laboratory, drawbar pull tests characterized ability to lean, as seen in Figure 1. Attempting to hold rength and traction of the rover. With V con una capacidad de 26 Ah, las cuales 11 m on a un periodo de funcionamiento de 28 the rubber a straight cross-slope path for permiten 20-25 slag loader tires in place, Scarab pulled 2,000 N in slope, Scarab experienced 15% downhill slip without de tres horas x d grain sized sand, which is approximately 0.7circulando a mxima velocidad y hasta seis horas en operacin normal. Su leaning, and 7% with leaning into the slope. This le weight, and 2,700 N on concrete pavement, velocidad mxima de 6 cm/sin slip is due to shifting of the pero est justicada porque decrease (0,216 km/h) parece ridcula, vehicles h is approximately equal to vehicle weight. weight vector, which returns weight to the uphill cuya de 280 ar tests are planned where la tarea principal del robot,and themasa eseffect of kg para poder soportar los esfuerzos lunar gravity is wheels, edging the wheels plowing ated with an off-loading system.del taladro en condiciones de gravedad as opposed to skiing mayor nmero de muestras terraces in the slope baja, es recoger el with the the field, Scarab has demonstrated skid steering contact patches parallel to the slope face. On a steeper posible en una turns of varying curvature, as well as point turns.misma zona [9, 10].
tower (upright):
Scarab es un robot de prospeccin concebido para misiones lunares desarrollado Point turning is possible at a large range of poses, Carnegie Mellon. Est equipado con un taladro e instrumentos para where the wheelbase changes considerably. On a con geometry twist course, the differencing analizar el sustrato. Cuenta pure una suspensin pasiva ajustable para reducir su altura effect of the suspension was readily apparent. The twist y favorecer el taladrado que, al mismo tiempo, permiteform ramps, course consisted of two saw tooth wave bajar el centro de gravedad y Table 1: Vehicle specifications one for the right wheels and one for the left, positioned mejorar la estabilidad en movimiento. period. Since the period of the out of phase by 1/2
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
25
I. M EMORIA l 1. I NTRODUCCIN
1.2.
Motivacin
La robtica mvil es una disciplina en claro auge. Existen innidad de tareas de supervisin y transporte, generalmente tediosas y repetitivas, que podran ser realizadas sin necesidad de intervencin humana, liberando un capital personal que podra dedicarse a otros menesteres donde sera ms productivo. Es verdad que existen brazos robticos y dispositivos loguiados que pueden realizar actividades semejantes, pero precisan de un entorno de trabajo acondicionado que, aparte de las importantes inversiones que supone, restringe de forma signicativa su campo de aplicacin. El principal avance que incorporan los robots mviles es su gran capacidad de adaptacin, de modo que un mismo modelo puede realizar con xito tareas muy diversas en condiciones cambiantes. No obstante, esta disciplina se encuentra an en los primeros estadios de su desarrollo, por lo que este proyecto pretende contribuir a la evolucin de esta rea de conocimiento. Como se ha comentado en el apartado anterior (vase el Epgrafe 1.1. Estado del arte), en la actualidad, casi la totalidad de los prototipos existentes parten de la premisa de que la supercie por la que se van a desplazar es prcticamente lisa, por lo que no son aptos, en principio, para tareas en campo abierto. Los proyectos que excepcionalmente no realizan esta hiptesis de trabajo, estn, en su mayora, destinados a aplicaciones militares o de exploracin aeroespacial y suelen contar con nanciacin gubernamental. As pues, se busca desarrollar un robot mvil autnomo con ruedas para uso civil, capaz de desplazarse en exteriores por terrenos irregulares. En funcin de la lgica de que se le dote podra destinarse a tareas de vigilancia en exteriores, transporte de materiales de construccin o localizacin de heridos en operaciones de rescate por citar algunos ejemplos. Sin embargo, la aplicacin para la que inicialmente ha sido concebido este robot es utilizar tres unidades idnticas para georreferenciar fotografas areas de plantaciones tomadas desde un helicptero, con el n de establecer los cuidados ms apropiados (fumigacin, riego. . . ) para cada zona y reducir las cuantiosas prdidas de cosechas que se producen cada ao. Cuando el helicptero haga una fotografa, almacenar las coordenadas GPS de cada uno de los robots en ese instante, lo que posibilitar la posterior ubicacin geogrca de la toma.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
26
I. M EMORIA l 1. I NTRODUCCIN
1.3.
Objetivos
El objetivo ltimo es desarrollar una plataforma autnoma capaz de desplazarse por terrenos agrestes, entendiendo por agreste campos de cultivo y terrenos irregulares con pendientes de hasta el 100 % (45o ). Para ello, deber contar con un sistema de localizacin GPS que le permita identicar los puntos inicial y nal del desplazamiento por sus coordenadas. Este proyecto se centra en disear, a partir de una plataforma mecnica recongurable que permite modicar la posicin del centro de gravedad y adoptar varias cinemticas (vase el Epgrafe 1.4. Recursos), los mdulos elctrico, electrnico y de comunicaciones que permitan el desplazamiento del robot por este tipo de terrenos, as como el control y medida remota de las variables de inters. En una etapa futura, se debern utilizar estos actuadores y medidas para programar la inteligencia del robot, que deber trazar la ruta a seguir y superar o esquivar los obstculos que se encuentre por el camino de la forma ms eciente posible.
1.4.
Recursos
Los recursos empleados durante la realizacin de este proyecto se pueden clasicar en dos grandes grupos: hardware y software.
1.4.1.
Hardware
Tarjeta de Control de Sensores v3.0 (TCS3), desarrollada por Alberto Santamara. Permite controlar a travs de un ordenador, bien va cable serie, bien Wi-Fi, motores, servomotores, encoders y varios tipos de sensores distintos [12].
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
27
I. M EMORIA l 1. I NTRODUCCIN
Plataforma mecnica recongurable fabricada en aluminio de 10 grados de libertad 4 para los motores, 4 para la direccin y 2 ms para modicar la posicin de la plataforma superior permitiendo variaciones independientes de las alturas delantera y trasera, diseada por Tobias Hans [11].
Dos ordenadores, al menos uno de ellos con puerto RS-232. Dos sistemas de desarrollo MPLAB ICD3 de Microchip. Router inalmbrico. Osciloscopio. Fuente de tensin de 5 A. Transformador universal 220 VAC / 312 VDC 1 A. Equipo de soldadura: Soldador, desoldador, estao, pinzas y alicates.
1.4.2.
Software
EAGLE Layout Editor v4.09r2, para disear los PCBs. MPLAB IDE v8.50, para programar los microcontroladores. Microsoft Visual Studio 2008, para programar en C++ el driver de I2 C, las cinemticas y el programa de control. GARMIN Sensor Conguration Software v3.20, para congurar el GPS.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
28
I. M EMORIA l 1. I NTRODUCCIN
1.5.
Metodologa
La robtica mvil abarca, a grandes rasgos, cuatro reas: mecnica, electricidad, electrnica y control. Partiendo de la estructura mecnica existente, construida por Tobias Hans, se ha trabajado en las otras tres. En primer lugar, se han diseado sendas tarjetas de control con consignas analgicas para los cuatro motores elctricos de corriente continua sin escobillas de 100 W. Dichas tarjetas se denominan TCM Brushless DC. A continuacin, se ha montado el circuito de alimentacin con dos bateras Li-Po de 18,5 V y 4.800 mAh en serie y un regulador de tensin para obtener 5 y 12 V. Acto seguido, se ha integrado todos los actuadores con la TCS3 y se ha vericado su correcto funcionamiento. Posteriormente, se ha programado un mdulo I2 C para el microcontrolador dsPIC30F3010 y se ha incorporado a la TCS3, que acta como maestro del bus, y a las TCM Brushless DC, que funcionan como esclavos, para controlarlas con seales digitales. Simultneamente, se ha elaborado un driver en C++ que permite al usuario controlar los dispositivos del bus I2 C. Ms tarde, se ha diseado una tarjeta para conectar el GPS al bus I2 C. Una vez integrados todos los sistemas, se ha programado una aplicacin que permite controlar remotamente el robot va Wi-Fi y recibir medidas tales como las coordenadas GPS o la velocidad y el consumo de corriente de los motores. Finalmente, se ha documentado exhaustivamente todo el proyecto.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
29
N ESTE
2.1.
Componentes principales
El sistema se puede dividir en cuatro grandes grupos: alimentacin, actuadores, sensores y comunicaciones como se puede ver en la Figura 16. A continuacin, se presentan los elementos fundamentales de cada uno de ellos. Puede consultar las hojas de caractersticas en la Parte VII.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
2.1.1.
2.1.1.1.
Alimentacin
Bateras Li-Po
La fuente de energa son dos bateras de polmero de litio, o simplemente Li-Po, de 18,5 V y 4.800 mAh nominales repartidos en 5 celdas, aunque a plena carga pueden llegar a suministrar 21 V. 2.1.1.2. Regulador de tensin
Para alimentar la electrnica se precisan tensiones inferiores, por lo que se ha empleado un regulador basado en el MC33167 que proporciona 5 y 12 V con una corriente mxima de 5,5 A para cada una de las tensiones. 2.1.1.3. Filtro EMI
Con el objetivo de reducir el efecto de las interferencias electromagnticas conducidas se ha dispuesto un ltro de modo comn, constituido por una bobina de 25 mH y 6 A, a la entrada de la tarjeta de control de cada motor que, junto con los dos condensadores electrolticos de 820 F colocados en paralelo de dicha tarjeta, forman un ltro de segundo orden. Para ms detalles remtase al Epgrafe 4.2.3.1.
2.1.2.
Actuadores
Como ya se coment, la plataforma mecnica cuenta con 10 grados de libertad que hay que controlar. Cuatro corresponden a los motores y, para los 6 restantes, se emplean servos. 2.1.2.1. Servos
Los cuatro servos de direccin son Futaba S-3001, los cuales poseen un par y una velocidad mximos de 3 kgcm y 0,22 sec/60o respectivamente [27]. Por su parte, los servos de la plataforma necesitan ms par para mover y mantener la plataforma en una posicin ja, por lo que se han escogido unos Hitec HSR 5990TG que proporcionan un par de hasta 24 kgcm y alcanzan una velocidad de 0,17 sec/60o [28]. 2.1.2.2. Motores
Para la motorizacin se han elegido 4 motores EC-powermax 30 trifsicos de corriente continua sin escobillas (brushless) de 100 W fabricados por Maxon [29]. A su tensin nominal de 36 V, el par es de 69,7 mNm y la velocidad de 16.800 rpm. Como estos valores no son tiles para esta aplicacin se ha acoplado una reductora de 86:1.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
31
2.1.2.3.
TCM Brushless DC
Para el control de los motores se ha diseado una tarjeta, basada en un microcontrolador dsPIC30F3010 y en el puente de MOSFET MSK 4400 de 10 A y 75 V, que gestiona la seal de PWM que se debe aplicar y mide parmetros del motor, tales como el consumo de corriente o la velocidad. Su funcionamiento se explica en detalle en el Captulo 4. Motores Brushless DC.
2.1.3.
Sensores
Aparte de la medida de las variables internas de los motores, es requisito imprescindible en un robot de estas caractersticas contar con sensores que le permitan conocer el entorno por el que se mueve. Se usarn sensores de ultrasonidos conectados a la TCS3 para realizar la planicacin a corto plazo y evitar obstculos insalvables, mientras que para conocer la ubicacin del robot se emplear el GPS Garmin 15L. Si hiciese falta, se podra incorporar una unidad de medida inercial o IMU para conocer la inclinacin y aceleracin del robot en todo momento.
2.1.4.
2.1.4.1.
Comunicaciones
I2 C
Una de las funcionalidades de la TCS3 que no se desarroll en [12] fue el mdulo de comunicaciones I2 C (vase Captulo 3), aunque se dej prevista la tarjeta para est ampliacin. En este proyecto se ha programado este bus de comunicaciones para interconectar las dems tarjetas desarrolladas. 2.1.4.2. Wi-Fi
Como ya se ha mencionado, la TCS3 admite comunicaciones Wi-Fi. En este proyecto se utiliza el mdulo Digi Connect Wi-ME, compatible con IEEE 802.11b y dotado de seguridad WPA2, para enlazar el ordenador de control con la TCS3 a travs de un router convencional.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
32
2.2.
Arquitectura: Alimentacin
En este apartado se explica brevemente cmo se alimenta cada uno de los componentes. La Figura 17 presenta esta informacin de forma esquemtica.
Figura 17. Diagrama de la alimentacin de los componentes principales del sistema Partiendo de las dos bateras Li-Po conectadas en serie se alimenta, por un lado, a los motores, a travs de un ltro para prevenir las interferencias electromagnticas (vase Epgrafe 4.2.3.1. Alimentacin de los motores: Filtro EMI) y, por otro al regulador de tensin. El regulador alimenta a 12 V la TCS3, el mdulo Wi-Fi y la electrnica de control de los puentes de MOSFET de las tarjetas TCM Brushless DC. Si al nal se utilizase una IMU, se alimentara tambin desde esta fuente de tensin. El resto de los componentes funcionan a 5 V. La TCS3 cuenta con un regulador de tensin propio para suministrar 5 V a los microcontroladores, pero la corriente est limitada a 1 A. Por ello, los dispositivos que no consumen demasiada intensidad, como los microcontroladores de la TCM Brushless DC, los sensores de ultrasonidos o el GPS, se alimentan desde la TCS3, mientras que los servos lo hacen directamente desde el regulador de tensin.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
33
Finalmente en la Figura 18 se muestra la posicin del interruptor de maniobra y la proteccin con fusible de 16 A empleada.
12 V 16 A
Regulador de tensin
5V
18,5 V
Motores
18,5 V
Figura 18. Esquema de la alimentacin donde se indica la posicin del interruptor y la proteccin con fusible
2.3.
Arquitectura: Control
En cuanto a las seales de control que se envan para gobernar el sistema, la Figura 19 las resume de forma esquemtica:
Figura 19. Diagrama de las seales de control y los sistemas de comunicacin empleados 34
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Desde el ordenador de control se envan, a travs de una red inalmbrica, instrucciones al mdulo Wi-Fi, que las retransmite va RS-232 a la TCS3. En funcin de las rdenes recibidas, la TCS3 genera consignas para los sensores y actuadores o devuelve medidas por el enlace inalmbrico. Los servos se controlan con seales de PWM de 50 Hz con un factor de servicio de entre el 2,5 y el 12,5 %, mientras que los motores admiten un doble sistema de control. De forma analgica, se enva una seal de PWM que la TCM Brushless DC ltra para obtener el valor medio, en funcin del cual un microcontrolador dsPIC30F3010 genera la seal de PWM necesaria para controlar el motor. Si el valor medio es de 0 5 V, el motor gira a mxima velocidad en un sentido o en otro y, si es de 2,5 V, permanece parado. La segunda estrategia de control consiste en utilizar el bus I2 C, por el que se envan directamente el sentido de giro y el factor de servicio que se quiere proporcionar a los motores. Evidentemente este mtodo es ms preciso pero presenta algn problema como se ver en el Captulo 3. Inter-Integrated Circuit (I2 C), por lo que se ha decidido conservar los dos para asegurar redundancia en un sistema tan crtico. Es importante resear que aprovechando este enlace se devuelven tambin medidas de corriente y velocidad. En lo que a los sensores se reere, tanto la IMU si se instalase, como el GPS devuelven las medidas por RS-232. Como el mdulo UART de la TCS3 ya est ocupado por el enlace Wi-Fi, la nica forma de conectarlos es a travs de un interfaz programado en un dsPIC30F3010, que retransmite los datos a travs del bus I2 C
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
35
autnomo como un robot es clave conocer, en todo momento, cuales son las variables internas y externas que puedan afectar a su comportamiento, con el n de poder adaptarlo a las circunstancias. Dado el diseo modular del sistema, en el que existen tarjetas de control distribuidas, hace falta transmitir toda la informacin a un ncleo de procesamiento central, para lo cual resulta imprescindible contar con algn medio de comunicacin.
N UN SISTEMA
I2 C es un bus serie half-duplex1 sncrono diseado para interconectar perifricos y otros microcontroladores. Funciona con un protocolo maestro-esclavo de uno o varios maestros, y permite la transmisin y recepcin de tramas de 8 bits por medio de una interfaz de dos cables, uno para el reloj y otro para los datos. Aunque las velocidades especicadas inicialmente en [14] eran de 100 y 400 kHz, el modo de alta velocidad, que no es soportado por todos los dispositivos, permite conseguir tasas de transmisin de hasta 3,4 Mbit/s.
3.1.
El bus I2 C se ha implantado mediante microcontroladores dsPIC30F3010, que incorporan todas las funciones del maestro y el esclavo especicadas en el I2 C estndar y en el modo de alta velocidad aunque este ltimo est limitado a 1 MHz, y permite, adems, que un mdulo est congurado simultneamente de las dos formas (vanse [15, 16, 17]). A lo largo de esta seccin se explican los principios bsicos del funcionamiento del mdulo I2 C en el dsPIC30F3010, tanto a nivel de hardware como de protocolo.
1
Esto signica que slo se puede producir una transmisin o una recepcin al mismo tiempo.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
36
3.1.1.
Pines
El mdulo I2 C utiliza nicamente dos pines del microcontrolador, SCL para el reloj y SDA para los datos, es decir, los pines 17 y 18 respectivamente.
3.1.2.
Direcciones
Las direcciones pueden ser de 7 10 bits. Si es de 10 bits, los dos bits ms altos pueden tomar cualquier valor, siempre y cuando un maestro y un esclavo no tengan el ms signicativo igual, como se advierte en [17]. Es decir, que si el bit 9 del maestro es 1, el de los esclavos ser 0 y viceversa. La Tabla 1 muestra los 8 bits menos signicativos de todas las direcciones permitidas. Direcciones Funcin
0x00 Difusin o broadcast 0x01 0x03 Reservadas 0x04 0x07 Cdigos para maestros con el oscilador HS 0x08 0x77 Direcciones de 7 bits vlidas 0x78 0x7B Direcciones de 10 bits vlidas (8 bits menos signicativos) 0x7C 0x7F Reservadas Tabla 1. Direcciones soportadas por el bus I2 C del dsPIC30F3010 Obsrvese que el octavo bit est siempre a cero. Eso es debido a que para enviar el modo de operacin maestro transmisor o receptor, se utiliza el bit 0 de la trama y los bits 7 a 1 contienen la direccin de la tabla anterior.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
37
3.1.3.
Registros
El mdulo I2 C tiene 6 registros especcos asociados: I2CCON, I2CSTAT, I2CRCV, I2CTRN, I2CADD e I2CBRG. 3.1.3.1. I2CCON
El registro de control de I2 C consta de varios bits para congurar algunos parmetros como el formato de las direcciones, as como para iniciar eventos de operacin en tiempo real como las condiciones de inicio y n de comunicacin. Todos estos bits son pueden ser ledos y escritos por el usuario. 3.1.3.2. I2CSTAT
El registro de estado de I2 C contiene banderas que indican varias eventos que se producen durante una secuencia de transmisin as como algunas condiciones de error como desbordamientos (overows, en ingls). La mayora de estos bits son de slo lectura. 3.1.3.3. I2CRCV
Mientras se est recibiendo una trama, los bits se almacenan en el registro I2CRSR. Cuando el byte est completo, se transere al registro de recepcin I2CRCV que est mapeado en memoria, para que el usuario pueda leerlo. I2CRCV es de slo lectura. 3.1.3.4. I2CTRN
Es el registro de transmisin. Cuando se quiere enviar un byte basta con escribir en l. Se trata de un registro de lectura y escritura. 3.1.3.5. I2CADD
I2CADD es un registro de 10 bits donde se almacena la direccin del mdulo esclavo que se usa para identicarlo en el bus. 3.1.3.6. I2CBRG
Este registro de 9 bits establece la velocidad de transmisin. Como ya se ha mencionado las velocidades tpicas son 100 y 400 kHz, aunque este microcontrolador soporta hasta 1 MHz. El valor que ha de contener el registro para obtener la velocidad deseada se calcula segn la Ecuacin 1: I2CBRG = FCY FCY 1 FSCL 1.111.111 (1)
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
38
donde: FCY es la frecuencia del oscilador FSCL es la frecuencia del reloj de I2 C deseada Observacin: Lo valores 0 y 1 no estn permitidos en I2CBRG. Si un mdulo slo acta como esclavo no necesita inicializarlo, puesto que el control del reloj corresponde exclusivamente al maestro.
3.1.4.
Protocolo
Durante la comunicacin, un dispositivo acta como maestro, que es quien inicia la transmisin y genera la seal de reloj, mientras que otro es el esclavo que responde. La lnea del reloj (SCL), es una salida para el maestro y una entrada para el esclavo, aunque ocasionalmente el esclavo puede controlarla. La lnea de datos (SDA), en cambio, puede ser de entrada o salida para cualquier dispositivo. En una topologa de bus, se requiere que todos los mensajes identiquen a su destinatario mediante una direccin. Cuando un maestro quiere iniciar una transmisin, lo primero que hace es enviar la direccin del dispositivo con el que quiere comunicarse. Todos los dispositivos conectados reciben el mensaje para vericar si va dirigido a ellos. El bit 0 indica si el maestro quiere leer o escribir en el el esclavo. En funcin de esto, se pueden dar dos modos de operacin: Maestro transmisor y esclavo receptor Esclavo transmisor y maestro receptor En cualquiera de los dos casos, la seal de reloj es generada por el maestro. 3.1.4.1. Transmisin y recepcin desde el maestro
A continuacin, se explica brevemente qu protocolo se sigue en la comunicacin, desde la perspectiva del maestro, utilizando direcciones de 7 bits, que es lo ms habitual si no existen muchos dispositivos ms de 100 en la red. La Figura 21 muestra un diagrama de tiempo del proceso. 1. Toda transmisin comienza cuando el maestro enva el bit de inicio (SEN = 1), que consiste en una transicin de bajada en la lnea de datos (SDA), mientras el reloj (SCL) est en reposo (a nivel alto).
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
39
2. Se escribe la direccin del dispositivo esclavo con el que se quiere comunicar en los 7 bits ms altos del registro I2CTRN, de modo que el bit 0 (R/W) queda reservado para indicar si el maestro pretende transmitir o espera respuesta. Cuando se quiere enviar un mensaje desde el maestro, R/W = 0. 3. Si la direccin enviada ha sido reconocida, el esclavo correspondiente enviar automticamente una conrmacin o acknowledge en el 9o ciclo de reloj. El maestro puede, ahora, transmitir el mensaje byte a byte, vericando que se ha producido el acknowledge de la comunicacin previa antes de cada envo. 4. Una vez nalizada la transmisin del mensaje, se enva el bit de parada (PEN = 1), que consiste en una transicin positiva en la lnea SDA mientras el reloj est a nivel alto. Todas las comunicaciones deben terminar con este evento. 5. Si se espera una respuesta por parte del esclavo, se vuelve a provocar la condicin de inicio. Observacin: Los eventos 4 y 5 se pueden agrupar en uno slo, la condicin de reinicio (RSEN = 1), para disminuir la latencia de las comunicaciones. 6. Se enva de nuevo la direccin del esclavo, pero esta vez con R/W = 1. 7. Si hay acknowledge, se habilita la recepcin del maestro (RCEN = 1). 8. Cuando se recibe un byte, si se quiere seguir recibiendo se transmite una conrmacin (ACKDT = 0, ACKEN = 1), en el 9o ciclo de reloj. Si no se quiere seguir recibiendo, se enva not acknowledge (ACKDT = 1, ACKEN = 1). 9. Finalmente, se enva el bit de parada. 3.1.4.2. Transmisin y recepcin desde el esclavo
La Figura 22 ilustra los eventos que se producen durante el envo de datos a un esclavo, mientras que en la Figura 23 se presenta el proceso inverso, el envo de datos desde un esclavo hacia el maestro. La combinacin de ambas guras sera el equivalente al ejemplo del maestro que se ha comentado en el Epgrafe 3.1.4.1 y en la Figura 21. 3.1.4.2.1. Recepcin
Adems de comentar el funcionamiento bsico de una recepcin por parte del esclavo, se explica en este apartado una funcionalidad muy til del mdulo esclavo de I2 C, la retencin del reloj (en ingls, clock stretching). El esclavo, para tener tiempo
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
40
de procesar el mensaje recibido y preparar la respuesta que debe enviar, fuerza el reloj a permanecer a nivel bajo hasta que haya terminado. El proceso que se sigue para recibir un mensaje es el siguiente: 1. El esclavo detecta la condicin de inicio, activa la bandera S y desactiva P en el registro I2CSTAT, y habilita la retencin del reloj (STREN = 1) si no lo haba hecho previamente. 2. Inmediatamente despus, recibe una direccin. Si coincide con la suya enva un acknowledge automticamente. 3. La trama que se recibe a continuacin es de datos. Cuando se termina la recepcin, se mueve al buffer de lectura I2CRCV y se indica que est lleno con la bandera RBF. El acknowledge es, de nuevo, automtico. 4. Como RBF = 1, se inicia la retencin del reloj para que el maestro no pueda mandar ms hasta que se lea I2CRCV y prevenir un desbordamiento. 5. Cuando el usuario lee los datos, la bandera RBF se borra. 6. Se libera el reloj por software (SCLREL = 1). 7. Si en una transmisin RBF = 0, no se retiene el reloj. 8. El proceso se repite indenidamente hasta que se produzca la condicin de n de comunicacin. En ese momento, se borra S y se activa P. 3.1.4.2.2. Transmisin
1. Se produce la condicin de inicio o de reinicio, segn el caso. 2. Se recibe la direccin con R/W = 1, para indicar que el maestro espera respuesta. Se suspende el reloj. 3. Se escribe el dato que se quiere enviar en I2CTRN. La bandera TBF se activa. 4. Se libera el reloj y se produce la transmisin. 5. Se borra TBF por hardware. 6. Si el maestro enva un acknowledge, se retiene el reloj y se repite el proceso. 7. Si al nal del 9o ciclo de reloj no se ha recibido conrmacin por parte del maestro no se retiene el reloj ni se envan ms datos. 8. Se reconoce el bit de parada.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
41
Figura 21. Diagrama de tiempos de una comunicacin completa (transmisin y recepcin) desde el punto de vista de un maestro con direcciones de 7 bits [16]
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
42
Figura 22. Diagrama de tiempos de una recepcin desde el punto de vista de un esclavo con direcciones de 7 bits [16]
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
43
Figura 23. Diagrama de tiempos de una transmisin desde el punto de vista de un esclavo con direcciones de 7 bits [16]
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
44
3.2.
Circuito de acondicionamiento
Los mdulos de comunicacin son, en general, muy sensibles a las condiciones de operacin. Para garantizar el correcto funcionamiento del bus I2 C, se deben cumplir las siguientes especicaciones de diseo: Debe existir un condensador de desacoplo de 100 nF entre alimentacin y tierra, lo ms prximo posible a los pines del microcontrolador, para reducir la impedancia entre ellos y estabilizar la tensin, ya que deriva a tierra el ruido de alta frecuencia. Al pin de reset del microcontrolador deben conectarse una resistencia de pull-up de entre 4,7 y 10 k y un condensador de 100 nF a tierra, para garantizar que no se producen activaciones intempestivas del reset. La especicacin del bus I2 C establece que son necesarias dos resistencias de pull-up para todo el bus en las lneas SCL y SDA, a n de asegurar que la tensin de reposo en ambas lneas es la de alimentacin, en este caso, 5 V. En el Epgrafe 3.2.1.1 se explica con detalle qu valor deben tener estas resistencias. Opcionalmente, se pueden colocar sendas resistencias serie en los pines SCL y SDA de cada microcontrolador para mejorar la relacin seal-ruido (SNR). Su clculo se desarrolla en el Epgrafe 3.2.1.2.
Vcc 10 k
RESET
100 nF
Vcc
1 2 3 4 5 6 7 8 9 10 11 12 13 14
28 27 26 25 24 23 22 21 20 19 18 17 16 15
Vcc
dsPIC30F3010
Vcc
Vcc GND SDA SCL
100 nF Rp Rs Rs
SDA SCL
Rp
CB
CB
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
3.2.1.
Para poder calcular los valores de las resistencias del bus I2 C, es preciso conocer, de antemano, una serie de especicaciones elctricas (Tabla 2) y de temporizacin (Tabla 3) del microcontrolador. Smbolo VCCmax VILmax VOLmax IOLmax CB Descripcin Tensin de alimentacin mxima Tensin mnima de los pines de salida Tensin mnima de los pines de entrada Corriente de fuga de los pines de salida Capacidad del bus Valor 5 + 10 % V 0,3VCCmax 0,6 V 8,5 mA 10 400 pF Condiciones VCC = 5 V VCC = 5 V -
Tabla 2. Especicaciones elctricas necesarias para el clculo de las resistencias del bus I2 C con el dsPIC30F3010
Condiciones CB = 10 pF mx.
Tabla 3. Tiempos de subida mximos de las seales del bus I2 C en el dsPIC30F3010 3.2.1.1. Resistencias de pull-up
El valor de las resistencias de pull-up debe estar comprendido en un rango de valores determinado por las siguientes dos ecuaciones para que el microcontrolador sea capaz de llevar el bus a nivel bajo y, al mismo tiempo, se satisfagan los tiempos de subida para las seales. Rpmin = VCCmax VOLmax = 575 IOLmax tRmax VILmax CB ln VCCmax (2)
Rpmax =
(3)
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
46
CB = 10 pF 83 k 25 k 25 k
Tabla 4. Valor mximo de las resistencias de pull-up para distintas condiciones de operacin 3.2.1.2. Resistencias serie
Las resistencias serie puede valer, como mximo: Rsmax = VILmax VOLmax = 123 IOLmax (4)
3.3.
Se ha desarrollado un mdulo de I2 C genrico que se encarga de gestionar el protocolo en el microcontrolador, con el n de incorporar esta funcionalidad a la TCS3 y a todas las dems tarjetas que se han desarrollado. A lo largo de esta seccin, se explicarn los puntos clave del cdigo para facilitar su comprensin. No obstante, si desea consultar el cdigo fuente completo del mdulo remtase a la Parte VI. El cdigo se ha programado pensando en un entorno con un nico maestro, la TCS3, y muchos esclavos. Es vlido tanto para el maestro como para el esclavo, modicando simplemente el parmetro de compilacin en el archivo de cabecera I2C.h.
#define _MAESTRO_
Cdigo 1. Opciones de compilacin del mdulo I2 C Asimismo, en este archivo se han denido una serie de constantes para hacer ms legible y portable el cdigo como frecuencias de trabajo, prioridades, tamaos de colas, direcciones, cdigos de instruccin y valores lgicos.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
47
// Frecuencias de trabajo #define FCY 29480000 // Oscilador: FRC (7.37 MHz) PLL x16 #define FSCL 1000000 // Velocidad de transmisin del bus I2C en Hz (mx. 1 MHz) // Sentido del flujo de informacin #define MAESTRO_TR 0 #define MAESTRO_REC 1 #define ESCLAVO_TR 1 #define ESCLAVO_REC 0 // Tipo de informacin enviada #define DIRECCION 0 #define DATOS 1 // Respuesta esperada? (S/N) #define RESP_SI 1 #define RESP_NO 0 // Valores lgicos #define SI 1 #define NO 0 // Tamao de los vectores y colas #define TAM_TR_I2C 50 // Cola de transmisin #define TAM_REC_I2C 75 // Cola de recepcin // Prioridad de las interrupciones #define PR_INT_I2C 6 // Direcciones #define DIR_TCS3 0x08 #define DIR_BRUSHLESS_DI #define DIR_BRUSHLESS_DD #define DIR_BRUSHLESS_TI #define DIR_BRUSHLESS_TD #define DIR_GPS 0x0D // Instrucciones #define PING 13
3.3.1.
3.3.1.1.
Maestro
Diagrama de ujo
El mdulo maestro funciona como una pasarela o pass-through entre el ordenador de control y los dispositivos esclavos. La TCS3 recibe una comunicacin para el bus I2 C a travs de RS-232 y llama a la funcin EnlaceI2C, que hace saltar la interrupcin, la cual controla todo el protocolo. Si se esperaba respuesta por parte del esclavo, el maestro la coloca, sin procesamiento alguno ni control de errores, en la cola de transmisin de la UART para reenviarla al PC mediante la funcin PonerI2CEnColaUART.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
48
EnlaceI2C
EnlaceI2C
Interrupcin Interrupcin
PonerI2CEnColaUART
PonerI2CEnColaUART
void EnlaceI2C(unsigned int *ui_colaRx, unsigned int *ui_indiceRx); void PonerI2CEnColaUART(unsigned int *ui_colaTx, unsigned int *ui_indiceTx);
Cdigo 3. Prototipos de las funciones de interfaz del maestro 3.3.1.2. Funcin de inicializacin
Esta funcin recoge la conguracin de todos los registros necesarios para manejar el bus I2 C utilizando interrupciones.
// // // //
Utilizar los pines SDA y SCL para la UART Habilitar la UART que tiene ms prioridad a la hora de usar los pines SDA y SCL que I2C para prevenir falsos inicios de comunicacin en la conexin
if (FSCL >= 1000000) // Velocidad de transmisin (mx. 1 MHz) I2CBRG = 2; // Los valores 0 y 1 no estn permitidos else I2CBRG = (FCY/FSCL - FCY/1111111) - 1; // Configuracin del mdulo I2C I2CCONbits.DISSLW = 1; // Deshabilitar el control del slew-rate // (Habilitar slo para 400 kHz) I2CCONbits.A10M = 0; // Direcciones de 7 bits (A10M = 1 para 10 bits) I2CCONbits.I2CSIDL = 0; // Funcionar normalmente en suspensin I2CCONbits.I2CEN = 1; // Habilitar el mdulo I2C y los puertos SDA y SCL U1MODEbits.UARTEN = 0; // Desactivar la UART // Prioridad de la interrupcin del maestro // Habilitar las interrupciones del maestro
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Lo ms destacado es que para evitar falsas condiciones de inicio en el bus ocasionadas por tensiones espreas durante la conexin que pueden bloquear las comunicaciones, se activa en primer lugar el mdulo de la UART. Dicho mdulo tiene mayor prioridad a la hora de usar los pines SDA y SCL del microcontrolador que el I2 C, de modo que si se conguran los dos usos de dichos pines al mismo tiempo, la UART tendr preferencia y el I2 C no se bloquear. Una vez terminado el transitorio de conexin, y congurado y activado el mdulo I2 C, se puede desactivar la UART.
En lo referente a la velocidad de transmisin, ya se comentaron las restricciones del valor del registro I2CBRG en el Epgrafe 3.1.3.6. Sin embargo no se hizo alusin a otro aspecto importante. Si se desea utilizar la velocidad de 400 kHz, es necesario activar el control de slew-rate, borrando el bit DISSLW del registro I2CCON. En todos los dems casos, permanecer a 1. 3.3.1.3. Interrupcin
El cdigo de la interrupcin que gestiona toda la transmisin es demasiado extenso para poder reproducirlo aqu. Puede encontrarlo en la Parte VI. No obstante, en este apartado se van a tratar algunas consideraciones importantes. La primera es que resulta fundamental conocer qu eventos desencadenan una interrupcin [16]: Las secuencias de inicio, reinicio y parada Enviar o recibir una trama Conrmar una transmisin (ACKEN = 1) Colisiones en el bus Por otro lado, dado que el maestro debe decidir cuando ha recibido todos los datos del mensaje de un esclavo para dejar de conrmar, necesita conocer, de alguna forma, cuando termina. Para ello, se ha denido un protocolo de comunicacin sencillo. Tanto para la transmisin como para la recepcin, se enva en el primer byte de datos una cabecera que indica el nmero de caracteres que faltan por llegar.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
50
3.3.2.
3.3.2.1.
Esclavo
Diagrama de ujo
En el caso del esclavo, la interrupcin gestiona toda el proceso y llama a la funcin reentrante ProcesarMensajeI2C para preparar el mensaje de respuesta. En cambio, cuando el mensaje recibido es una instruccin que no espera respuesta, el procesamiento se ejecuta en el bucle de scan. De ah la necesidad de que la funcin sea reentrante.
Interrupcin
Bucle de scan
ProcesarMensajeI2C
Figura 26. Diagrama de ujo simplicado del mdulo esclavo 3.3.2.2. Funcin de inicializacin
La funcin de inicializacin del esclavo es muy similar a la del maestro aunque con algunas ligeras variaciones.
EnlaceI2C
Obsrvese que, al igual que ocurra con el maestro, se activa primero la UART para prevenir inicios intempestivos.
Interrupcin
Sin embargo, aqu no hace falta denir la velocidad puesto que el control del tiempo recae exclusivamente en el mdulo maestro. En su lugar, se ha de indicar cul ser la direccin del esclavo en el bus, la cual se almacena en la variable esttica global al PonerI2CEnColaUART mdulo static unsigned char uc_direccion_esclavo. Otros aspecto que cabe destacar es que se ha activado la retencin del reloj o clock stretching y se ha limpiado, por precaucin, la bandera de desbordamiento del buffer de lectura I2COV.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
void InicializarI2C(unsigned char uc_direccion) { U1MODEbits.ALTIO = 0; // Utilizar los pines SDA y SCL para la UART U1MODEbits.UARTEN = 1; // Habilitar el mdulo UART que tiene ms prioridad // a la hora de usar los pines SDA y SCL que I2C // para prevenir falsos inicios de comunicacin // en la conexin // Direccin como esclavo uc_direccion_esclavo = uc_direccion; I2CADD = uc_direccion_esclavo; // Configuracin del mdulo I2C // (Los bits no modificados permanecen en el estado inicial) I2CCONbits.STREN = 1; // Habilitar la suspensin de la transmisin // en la recepcin I2CCONbits.GCEN = 0; // Deshabilitar las interrupciones para mensajes // de difusin o broadcast I2CCONbits.DISSLW = 1; // Deshabilitar el control del slew-rate // (Habilitar slo para 400 kHz) I2CCONbits.A10M = 0; // Direcciones de 7 bits (A10M = 1 para 10 bits) I2CCONbits.IPMIEN = 0; // No responder a cualquier direccin vlida // (Activar para repetidores) I2CCONbits.SCLREL = 1; // Transmisin inicialmente despierta I2CCONbits.I2CSIDL = 0; // Funcionar normalmente cuando el microcontrolador // entre en suspensin I2CCONbits.I2CEN = 1; // Habilitar el mdulo I2C y // configurar los puertos SDA y SCL U1MODEbits.UARTEN = 0; // Desactivar la UART // // // // Prioridad de la interrupcin del esclavo (mx. 7 - mn. 1, 4 por defecto) Habilitar la atencin de las interrupciones del esclavo
I2CSTATbits.I2COV = 0; }
Las causas de interrupcin en el esclavo son slo tres: Detectar una direccin que coincide con la suya (la de difusin inclusive) Recibir datos Recibir un acknowledge por parte del maestro solicitando el envo de un byte
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
52
3.3.2.4.
Funcin de procesamiento
Se presenta a continuacin la funcin que se encarga de procesar los mensajes recibidos por I2 C, con la funcin ping como ejemplo. En este caso, lo nico que se hace es enviar el nmero de caracteres del mensaje, la direccin del esclavo que responde y el valor 7 como respuesta, para conrmar que el dispositivo est activo en el bus.
void ProcesarMensajeI2C(void) { unsigned char uc_instruccion; DeshabilitarInterrupcionesEsclavoI2C(); if (u_procesar_mensaje_habilitado) { while (ui_icola_rec != ui_icabeza_rec) { uc_instruccion = SacarDeColaRecepcionI2C(); switch (uc_instruccion) { case PING: // Ping PonerEnColaTransmisionI2C(2); // Nmero de caracteres PonerEnColaTransmisionI2C(uc_direccion_esclavo); // Direccin PonerEnColaTransmisionI2C(7); // Respuesta break; } } } HabilitarInterrupcionesEsclavoI2C(); }
3.3.3.
Problemas detectados
Durante el periodo de pruebas del mdulo, se detect un problema que se adverta poda suceder en [17]. Cuando existe ms de un esclavo en el bus, el buffer de recepcin de los esclavos queda ocupado con datos de las transmisiones entre el maestro y otros dispositivos. Esto impide que los esclavos reconozcan su direccin cuando un mensaje va a dirigido a ellos, por lo que no se produce la interrupcin pertinente. Se ha probado sin xito la solucin propuesta en [17], por lo que queda para futuros desarrollos solventar esta cuestin.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
53
3.4.
Para hacer la experiencia del usuario del bus I2 C ms sencilla, se ha programado un EnlaceI2C driver en C++ que facilita la tarea de controlar y recibir medidas de los dispositivos conectados. En la Parte IV se explica cmo utilizar el driver a nivel de usuario para programar aplicaciones.
Interrupcin Bucle de scan
Se ha tomado como punto de partida el driver de comunicacin de la TCS3 desarrollado en [12], denominado Comm, al cual se han incorporado las funcionalidades PonerI2CEnColaUART necesarias para enviar tramas de I2 C. Sin embargo, todo el procesamiento del mensaje se hace en la clase CComunicaI2C, diseada ex profeso, que hereda de Comm.
Comm
Herencia
CComunicaI2C
Figura 27. La clase CComunicaI2C hereda de Comm Es importante destacar, llegado este punto, que la TCS3 cuenta con dos microcontroladores, pero slo el primero, denominado dsPIC0, tiene el circuito de adaptacin necesario para gestionar el I2 C, de modo que todas las comunicaciones de esta naturaleza se enviarn a travs de este microcontrolador.
Observacin: Se ha asignado la instruccin nmero 21 a los mensajes destinados a ser transmitidos por I2 C.
3.4.1.
3.4.1.1.
Dos variables privadas vTxI2C y vRxI2C, del tipo denido por la estructura VectorByte, para manejar las colas de transmisin y recepcin de mensajes del bus I2 C. Una funcin privada, void recibeI2C(int *i), que separa las respuestas de los dispositivos esclavos de los dems mensajes de la TCS3 y los almacena en vRxI2C (Cdigo 8).
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
54
Dos funciones protegidas para que sean privadas hacia el exterior y accesibles para CComunicaI2C al heredar, que realizan el intercambio de informacin entre las dos clases (Cdigos 9 y 10).
typedef struct { int nEle; BYTE *bVector; } VectorByte;
class Comm { private: VectorByte vTxI2C, vRxI2C; ... void recibeI2C(int *i); protected: void IntroduceTxI2C(BYTE b); VectorByte GetVectorRecepcionI2C(); ... }
void Comm::recibeI2C(int *i) { unsigned int ui_num_elementos; ui_num_elementos = vRX1.bVector[*i]; (*i)++; for (unsigned int j = 0; j < ui_num_elementos; j++) { vRxI2C.bVector[vRxI2C.nEle] = vRX1.bVector[*i]; (*i)++; } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Cdigo 10. Funcin que devuelve el vector con los mensajes de I2 C recibidos 3.4.1.2. Modicaciones en funciones existentes de Comm
Para incorporar el I2 C ha sido necesario aadir tambin algunas lneas de cdigo en funciones que ya existan. En primer lugar, en los constructores se ha inicializado la memoria dinmica de las variables y en el destructor por defecto se ha liberado, como se muestra a continuacin:
// Constructor para comunicar por el puerto serie Comm::Comm() { ... vTxI2C.nEle = 0; vTxI2C.bVector = NULL; vTxI2C.bVector = (BYTE*)calloc(50,sizeof(BYTE)); vRxI2C.nEle = 0; vRxI2C.bVector = NULL; vRxI2C.bVector = (BYTE*)calloc(50,sizeof(BYTE)); ... } // Constructor para comunicar por Wi-Fi Comm::Comm(char *sdireccIP) { ... vTxI2C.nEle = 0; vTxI2C.bVector = NULL; vTxI2C.bVector = (BYTE*)calloc(50,sizeof(BYTE)); vRxI2C.nEle = 0; vRxI2C.bVector = NULL; vRxI2C.bVector = (BYTE*)calloc(50,sizeof(BYTE)); ... }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
56
Cdigo 12. Cdigo incorporado al destructor de la clase Comm En segundo lugar, se han modicado la funcin void inicio(), que comienza el proceso de comunicacin limpiando las colas de transmisin y recepcin, y bool comunica(), que es la que establece la comunicacin (Cdigo 13).
void Comm::inicio() { ... vTxI2C.nEle = 0; vRxI2C.nEle = 0; ... } bool Comm::comunica() { ... // Si hay datos para el primer microcontrolador de la TCS3 o para el bus I2C if (vTX1.nEle > 0 || vTxI2C.nEle > 0) { enviaTX1(); // Enva las tramas ok = recibeRX1(); // Recibe las respuestas } ... } // Inicializacin del vector de transmisin de I2C // Inicializacin del vector de recepcin de I2C
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
57
Finalmente, se han alterado las funciones de envo y recepcin de datos procedentes del dsPIC0.
void Comm::enviaTX1() { if (vTxI2C.nEle > 0) { IntroduceEspera(21, 1); serialport.PortWrite(21); for (int i = 0; i < vTxI2C.nEle; i++) { if (vTxI2C.bVector[i] == 92) serialport.PortWrite(92); serialport.PortWrite(vTxI2C.bVector[i]); } } ... } void Comm::recepcionDatos1(int *i) { ... case 21: // I2C recibeI2C(&iaux); break; ... }
3.4.2.
Clase CComunicaI2C
En este apartado se explican tanto la parte genrica del driver programado como las funciones especcas que se emplean para cada dispositivo concreto conectado al bus. Para una mejor comprensin de las mismas, se recomienda consultar los captulos 4 y 5. 3.4.2.1. Diagrama de ujo
En el diseo de la clase CComunicaI2C se ha procurado conservar el mismo esquema de la clase Comm. El proceso comienza llamando a la funcin void inicio() que inicializa los vectores para una nueva transmisin. A continuacin se aaden al vector de transmisin las tramas que se desean enviar mediante unas funciones diseadas a tal efecto. Finalmente se llama a la funcin void comunica() que establece la comunicacin con los dispositivos del bus.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
58
Comm
I. M EMORIA l 3. I NTER -I NTEGRATED C IRCUIT (I 2 C)
Herencia
Si la comunicacin ha sido satisfactoria y se esperaba respuesta de alguna de las instrucciones, comienza la fase de procesamiento. Se interpretan las respuestas y se CComunicaI2C almacenan en variables privadas que el usuario puede leer mediante funciones.
void inicio()
void comunica()
Comunicacin correcta
Respuesta esperada
S
Procesar mensaje
NO
FIN
NO
Almacenar datos
Leer datos
Figura 28. Diagrama de ujo de una comunicacin a travs del driver de I2 C. 3.4.2.2. Variables
En lo que concierne a las variables, todas son privadas. vEsperaI2C es un vector de bytes que almacena las instrucciones que esperan respuesta. m_ping es un mapa cuya clave es la direccin de un dispositivo en el bus, y su valor un bool que indica si la ltima vez que se ha realizado un ping a ese dispositivo ha habido o no respuesta. m_velocidad_motores es un mapa que almacena la ltima velocidad medida de los motores. m_corriente_motores es otro mapa igual al anterior que contiene la ltima medida de corriente de los motores. m_vd_coordenadas es un vector de double que almacena, por este orden, la latitud y la longitud en grados devuelta por el GPS.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
59
m_ui_num_satelitesGPS, de tipo unsigned int, almacena el nmero de satlites con los que se han calculado las coordenadas del GPS. m_b_posicionGPS_valida es una variable de tipo bool que indica si la ltima medida del GPS est actualizada o no. m_vui_fecha contiene la fecha del GPS. En el ndice 0 se encuentra, el da, a continuacin el mes y, por ltimo, el ao. m_vui_hora guarda la hora del GPS ordenada en horas, minutos y segundos.
class CComunicaI2C : public Comm { private: // Variables privadas std::vector<BYTE> vEsperaI2C; std::map<BYTE, bool> m_ping; std::map<BYTE, unsigned int> m_velocidad_motores; std::map<BYTE, unsigned int> m_corriente_motores; std::vector<double> m_vd_coordenadas; unsigned int m_ui_num_satelitesGPS; bool m_b_posicionGPS_valida; std::vector<unsigned int> m_vui_fecha; std::vector<unsigned int> m_vui_hora; ... }
Sin considerar las funciones de inicio y comunicacin, las dems funciones se podran clasicar en tres grandes grupos: funciones de transmisin, funciones de procesamiento y funciones de lectura. 3.4.2.3.1. Funciones de inicio y comunicacin
La funcin de inicio se limita a limpiar la cola de respuestas esperadas y a llamar a la funcin homnima de la clase Comm. En cambio, void comunica() es ligeramente ms compleja. Una vez realizada la comunicacin, se verica si ha sido satisfactoria y se inicia el procesamiento del mensaje.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
60
void CComunicaI2C::inicio() { vEsperaI2C.clear(); Comm::inicio(); } bool CComunicaI2C::comunica() { bool b_ok; b_ok = Comm::comunica(); if (b_ok) ProcesarMensajeI2C(); return b_ok; }
Todas estas funciones comparten una misma estructura de trama. En primer lugar, se enva la direccin del dispositivo esclavo al que va dirigido el mensaje, despus si se espera respuesta, el nmero de caracteres que ocupan los datos y el cdigo de la instruccin en el esclavo y, por ltimo, los parmetros de la instruccin. Direccin Respuesta esperada No de caracteres de datos Instruccin Parmetros
Tabla 5. Estructura de la trama de I2 C Si la funcin espera respuesta, se aade su cdigo de instruccin a la cola de espera. A continuacin se muestran dos ejemplos, uno de una funcin bidireccional y otro de una monodireccional.
void CComunicaI2C::PingI2C(const BYTE &b_direccion) { IntroduceTxI2C(b_direccion); // Direccin del dispositivo IntroduceTxI2C(RESP_SI); // Espera respuesta: S IntroduceTxI2C(1); // Nmero de caracteres de datos IntroduceTxI2C(PING); // Instruccin RespuestaEsperada(PING); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
void CComunicaI2C::DCMotorI2C(const BYTE &b_direccion, const unsigned int &ui_duty_cycle, const BYTE &b_sentido_giro) { IntroduceTxI2C(b_direccion); // Direccin del dispositivo IntroduceTxI2C(RESP_NO); // Espera respuesta: S IntroduceTxI2C(4); // Nmero de caracteres de datos IntroduceTxI2C(INST_DC); // Instruccin IntroduceTxI2C((ui_duty_cycle & 0xFF00) >> 8); // Byte alto del duty cycle IntroduceTxI2C(ui_duty_cycle & 0x00FF); // Byte bajo del duty cycle IntroduceTxI2C(b_sentido_giro); // Sentido de giro }
Cdigo 18. Ejemplo de funcin de transmisin sin respuesta esperada 3.4.2.3.3. Funciones de procesamiento
Existe una funcin de procesamiento principal, ProcesarMensajeI2C() que se encarga de descifrar las tramas de respuesta recibidas. Si la trama es muy compleja, se llama a otras funciones de procesamiento especcas para cada dispositivo concreto.
void CComunicaI2C::ProcesarMensajeI2C() { unsigned int j = 0; VectorByte vb_recepcionI2C; vb_recepcionI2C = GetVectorRecepcionI2C(); // Para cada funcin que esperaba respuesta for (unsigned int i = 0; i < vEsperaI2C.size(); i++) { switch (vEsperaI2C[i]) { case VEL_BRUSHLESS: m_velocidad_motores[vb_recepcionI2C.bVector[j]] = (vb_recepcionI2C.bVector[j+1] << 8) | vb_recepcionI2C.bVector[j+2]; j += 3; break; case INT_BRUSHLESS: m_corriente_motores[vb_recepcionI2C.bVector[j]] = (vb_recepcionI2C.bVector[j+1] << 8) | vb_recepcionI2C.bVector[j+2]; j += 3; break; case COORDENADAS_GPS: ProcesarCoordenadasGPS(vb_recepcionI2C, j); break;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
62
case HORA_GPS: ProcesarHoraGPS(vb_recepcionI2C, j); break; case FECHA_GPS: ProcesarFechaGPS(vb_recepcionI2C, j); break; case PING: if (vb_recepcionI2C.bVector[j+1] == 7) m_ping[vb_recepcionI2C.bVector[j]] = true; else m_ping[vb_recepcionI2C.bVector[j]] = false; j += 2; break; } } }
Las funciones de lectura se limitan a devolver una copia de los datos almacenados en las variables privadas. En algunos casos, estas funciones tambin realizan un cambio de unidades.
double CComunicaI2C::GetVelocidadI2C(const BYTE &b_direccion) { std::map<BYTE, unsigned int>::iterator iter = m_velocidad_motores.find(b_direccion); if (iter != m_velocidad_motores.end()) return ((iter->second)/(REDUCTORA*PARES_POLOS*POS_HALL*T_REBOSE_ENCODER)); else return 0; }
Cdigo 20. Ejemplo de funcin de lectura. En este caso se devuelve la velocidad de un motor en revoluciones por segundo (rps)
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
63
ARA
4.1.
Principio de funcionamiento
Como ocurre con todos los motores elctricos, el giro del rotor se basa en la atraccin entre dos campos magnticos no alineados. Se ja un campo magntico al rotor y se va cambiando el del esttor para evitar que se alineen (Figura 29).
Par
Brotor
Bestator
Figura 29. Representacin simplicada del funcionamiento de un motor elctrico En el caso de los motores brushless DC, el rotor est constituido por un imn permanente. Dado que el motor de que se dispone cuenta con dos pares de polos, se supondr esta distribucin en las explicaciones subsiguientes.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
64
Por su parte, el esttor est formado por tres bobinas distribuidas uniformemente en una circunferencia, es decir, separadas 120o . Cada una de ellas puede generar un campo magntico en dos sentidos distintos en funcin del sentido de la corriente que la atraviese. Por consiguiente, con esta conguracin se pueden obtener seis orientaciones del campo magntico.
I A
HC
I A
HC
N
HA
B
HA
S S N
HB
C I
N
B
HB
I
I A A
HC
II
N
HA
HC
S S S N
HB HA
C I
I B
S
B
HB
B
I A
III B
A
HC
IV
B
HA
S
HA
HC
N N S
HB
N N S
HB
C B I
I B
VI
Figura 30. Posiciones del campo magntico del esttor de un motor brushless DC
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
65
En la Figura 30, se presentan las seis posiciones posibles del campo magntico. Las echas designadas con I representan el sentido de circulacin de la corriente por los bobinados de colores rojo, verde y azul. Las echas discontinuas de dichos colores representan el vector campo magntico generado por cada bobina. La echa negra muestra el sentido del campo magntico del esttor resultante. Para conseguir que el rotor gire, se ha de conocer su posicin a n de cambiar el campo magntico del esttor como se ha visto en la Figura 29. Para ello, un motor brushless DC cuenta con tres sensores de efecto Hall desfasados 30o respecto a los bobinados (denotados HA, HB y HC), los cuales proporcionan una seal de tensin cuando detectan el paso de un polo negativo S. Con esta conguracin de sensores se consiguen 6 estados que se pueden asociar a las seis posiciones del campo magntico indicadas en la Figura 30. En la Figura 31 se muestran, en gris, el valor de los sensores de efecto Hall en funcin de la posicin del rotor en grados elctricos y, en rojo, el nivel de tensin, positivo o negativo, del PWM que se aplica a cada bobina para conseguir que la corriente circule en el sentido deseado. Se recuerda que en un motor con 2 pares de polos, 360o elctricos equivalen a 180o mecnicos.
I
60
II
120
III
180
IV
240
V
300
VI
360
1 0 1 0 1 0 H 0 L H 0 L H 0 L UC UB HC HB HA
UA
Figura 31. Medida de los sensores de efecto Hall y tensin aplicada a los bobinados en funcin de la posicin del rotor en grados elctricos 66
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Las citadas tensiones se consiguen con un puente de MOSFET, denominado comnmente driver. Si se est en la Posicin I, para conseguir el campo magntico se ha de imponer que la corriente circule del arrollamiento A al B como se indica en la Figura 32. Para conseguirlo, se han de activar los transistores QAH y QBL .
I
I
60 Q
AH
II
120
III
IV
240 QCH
V
300
VI
360
QBH 180
A
HA
I
1 0 1 0 H 0
B
QAL QBL QCL
HB
HC
UA
L Finalmente, se puede modicar el mdulo del campo magntico para conseguir H variar la fuerza de atraccin que se ejerce sobre el rotor y, en consecuencia, Bla velocidad U 0 del motor. Para ello, lo ms sencillo es dejar siempre el interruptor superior del puente L en la posicin que le corresponda, en funcin de la medida de los sensores de efecto Hall, y conmutar los inferiores a frecuencias no audibles por el odo humano mayores H UC 0 de 20 kHz para variar el nivel medio de la tensin aplicada (Figura 33).
Observacin: Ha de evitarse que dos transistores asociados a la misma bobina entren en conduccin simultneamente, puesto que se producira un cortocircuito.
I
60
II
120
III
180
IV
240
V
300
VI
360
H 0 L H 0 L H 0 L
UA
UB
UC
Figura 33. Ejemplo de cmo se vara la velocidad del motor conmutando los transistores inferiores del puente 67
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Para poder controlar los motores brushless DC de 100 W escogidos (vase el Epgrafe 2.1.2.2), se ha diseado una tarjeta que gestiona las medidas de los sensores de efecto Hall y genera las seales de PWM y, al mismo tiempo, toma medidas de variables tales como el consumo de corriente o la velocidad, que se pueden leer a travs del bus I2 C.
4.2.1.
B
Componentes
B
En la Tabla 6 se listan los componentes necesarios para montar la tarjeta. Asimismo, en la Figura 34 se muestra su distribucin.
Componente
Uds.
Componente
Uds.
MSK 4400U 1 dsPIC30F3010 1 LTSR 25-NP 1 E Terminal PCB vertical 5 mm 5 Conector JST B5B-EH-A 1 Conector doble macho 2,54 mm 1 Conector triple macho 2,54 mm 2 MATERIAL Pines 17 TOLERANCIA macho 2,54 mm NOMBRE FECHA Pulsador 1
F
DIBUJADO COMPROBADO ESCALA: JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
Bobina axial 10 H 1 Cond. electroltico 100 H 25 V 1 Cond. electroltico 820 H 63 V 2 Condensador de papel 100 nF 1 Condensador de papel 470 nF 1 Condensador de papel 1 F 2 Resistencia 5,6 k 1 TCM BRUSHLESS DC 1 Resistencia 10 k
19 - VI - 2010
COMPONENTES
N DE LMINA:
3:2
I.C.A.I.
5
4
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes 1 2 3 Jaime Boal Martn-Larrauri
68
4.2.2.
Funcionalidades
Las caractersticas principales de la TCM Brushless DC son: Control de velocidad de un motor brushless DC utilizando como consigna el valor medio de una seal de PWM. Medida de corriente y velocidad del motor y su envo a travs del bus I2 C. Control de la velocidad del motor mediante consignas digitales recibidas por I2 C. Posibilidad de programar la lgica del dsPIC30F3010 sobre la propia tarjeta.
4.2.3.
Diseo
En esta seccin se exponen las soluciones de diseo ms relevantes de la tarjeta. 4.2.3.1. Alimentacin de los motores: Filtro EMI
Durante las primeras pruebas realizadas se constat que exista ruido si se conectaban, al mismo tiempo, varios motores. Despus de analizar el problema, se concluy que la causa eran las interferencias electromagnticas, especialmente las conducidas, producidas por la conmutacin de los transistores del puente. Para solucionarlo hubo que recurrir a un ltro de modo comn formado por una bobina y tres condensadores en paralelo. Estrictamente hablando, slo los condensadores forman parte de la tarjeta pero, como la alimentacin de los motores pasa por las bobinas antes de llegar a ella, se ha decidido incluirlas en esta explicacin.
I 25 mH
37 V I 25 mH
820 F
820 F
1 F
Driver
Motor
El funcionamiento de este ltro es sencillo. Las dos bobinas comparten un mismo 12 V ncleo magntico, por lo que se garantiza que toda la intensidad que entra de la tarjeta 10 H Vbias sale de la misma. De este modo, se reduce el riesgo de que aparezcan corrientes + 100 F F parsitas. Adems, con los condensadores y1la bobina de entrada se consigue establecer la frecuencia de corte indicada en la Ecuacin 5, mucho menor que la de conmutacin mnima de los interruptores del driver, para que la corriente sea lo ms continua posible. Obsrvese que se ha colocado tambin un condensador de papel de 1 F, porque
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
69
los condensadores de esta tecnologa tienen un mejor comportamiento ante las altas frecuencias que los electrolticos. fc = 1 = 2 LC 2 1 25 mH (2 820 F + 1 F) = 24, 85 Hz (5)
Por ltimo, como complemento a este ltro para interferencias conducidas, se ha procurado reducir lo mximo posible el rea de las pistas de potencia de la tarjeta para minimizar las interferencias electromagnticas radiadas, las cuales son proporcionales al cuadrado del rea. 4.2.3.2. Alimentacin del driver: Filtro LC
Las interferencias no slo eran problemticas en los motores, sino que el puente de MOSFET presentaba activaciones intempestivas de algunos transistores, provocando pequeos cortocircuitos. Para corregirlo, se coloc un ltro de segundo orden en la alimentacin de 12 V del driver de una frecuencia de corte sucientemente baja como I 25 mH para eliminar el problema y, al mismo tiempo, capaz de permitir la conmutacin rpida de los transistores. + + 820 F 37 V 820 F Driver
I
Motor
Al igual que en el ltro anterior, se ha colocado un condensador de papel de 1 F 25 mH para las altas frecuencias.
Vbias
12 V
10 H 100 F
+
Vbias
1 F
fc =
1 = 2 LC 2
1 10 H (100 F + 1 F)
5 kHz
(6)
4.2.3.3.
Medida de corriente
Para realizar la medida de la intensidad consumida por el motor se ha recurrido al transductor de corriente LTSR 25-NP, capaz de medir hasta 25 A. Sin embargo, la sensibilidad de la tensin de salida respecto a la intensidad que lo atraviese depende de cmo se conecten los pines de entrada 1 a 6, que estn conectados internamente
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
70
formando espiras abiertas, de forma que si se unen los pares 16, 25 y 34 se consiguen ions LTSR 6, LTSR 15, LTSR 25-NP (in mm. 1 mm = 0.0394 inch) tres espiras independientes. ions LTSR 6, LTSR 15, LTSR 25-NP (in mm. 1 mm = 0.0394 inch) ions LTSR 6, LTSR 15, LTSR 25-NP (in mm. 1 mm = 0.0394 inch) El comportamiento del sensor es lineal en la zona de inters, como se aprecia en la Figura 37, donde Ipn depende de la conguracin de espiras. En la Tabla 7 se recogen las formas de conexin posibles y el valor de Ipn resultante.
day year day of day of the year PC PC PC theof the year year yearyear
Figura 37. Curva caracterstica del transductor de corriente de efecto Hall LTSR 25-NP
Primary nominal Primary nominal RMS current RMS current IPN [ A ] Primary nominal IPN [ A ] RMS current Nominal Primary Nominal Primary output voltage resistance output voltage resistance VOUT [ V ] R P [ m ] Nominal Primary VOUT [ V ] R P [ m ] output voltage resistance * [ V ] VVOUT 0.625 R P 0.18 ] [ m REF 0.18 VREF* 0.625 Primary Primary insertion inductance o Ninsertion inductance de espiras ] Ipn L P [ H Primary L P [ H ] insertion inductance 0.013 L P [ H ] 1 0.013 25 A Recommended Recommended connections connections Conguracin de espiras Recommended connections
6 5 5 4 4 5 2 2 5 2 5 5 2 2 5 5 2 5 2 2 2 4 3 3 4 3 4 4 3 3 4 4 3 4 3 3 3
LTSR 6-NP] 6 IPN [ A 6 LTSR 15-NP 6 LTSR 6-NP 15 6 LTSR 6-NP 15 15-NP 6 IN 1 LTSR 25-NP 25 VREF* 0.625 0.18 0.013 IN 1 LTSR 25-NP 25 LTSR 15-NP 3 6 LTSR 6-NP 15 VREF* 0.625 0.81 0.05 IN 1 6 25-NP 3 LTSR 6-NP 25 VREF* 0.625 0.81 0.05 LTSR 15-NP 7.5 VREF* 0.625 LTSR 6-NP 12 VREF* 0.625 15-NP 3 6 LTSR 25-NP 7.5 VREF* 0.600 0.625 0.81 2 0.05 12 A I N 1 LTSR 25-NP 7.5 VREF* 0.600 12 V * 0.625 IN 1 LTSR 15-NP 6 1.62 0.12 LTSR 6-NP 2 VREF * 0.625 REF 6 25-NP 2 V REF* 0.600 0.625 1.62 0.12 LTSR 6-NP 12 V REF** 0.625 V IN 1 LTSR 15-NP 5 REF 6 LTSR 15-NP 5 VREF* 0.625 LTSR 25-NP 8 VREF** 0.600 1.62 0.12 6-NP 2 VREF 0.625 IN 1 LTSR 25-NP 8 VREF* 0.600 LTSR 15-NP 5 VREF* 0.625 3 V 25 mV)A RefN mode 8 in I in 1 5 V 25 mV in Refout mode, VREF = External reference (1.9 .. 2.7 LTSR 25-NP 8 VREF* 0.600 I in 1 5 V 25 mV in Refout mode, VREF = External reference (1.9 .. 2.7 V 25 mV) in Ref N mode
5 V 25 mV in Refout mode, VREF = External reference (1.9 .. 2.7 V 25 mV) in Ref in mode cal characteristics Remark Tabla 7. Conguracin de las espiras del transductor de corriente LTSR 25-NP cal characteristics Remark olerance 0.2 mm VOUT is positive when IP flows from terminals 1, 2, 3 to cal connection of primary characteristics Remarkpositive when IP flows from terminals 1, 2, 3 to olerance pinsmm x 0.8 mm 0.2 0.8 terminals 6, 5, 4. VOUT is g& 6
golerance & connection of ended PCB hole primary ended PCB hole primary g & connection of secondary g & connection of secondary ended PCB hole ended PCB hole l primary through-hole g & connection of secondary l primary through-hole ended PCB hole
6 pinsmm x 0.8 terminals 6, que installation in the terminals must 1.3 mmComo mm 0.2 0.8 The is positive when IP circular por el motor no supera en ningn caso V mxima 5, la corriente OUT transducer4.puede flows fromapplication1, 2, 3 to 1.3 mm xx0.35 mm respect the installations rules the application IEC 61010-1 The transducer4. 4 pins 0.5 0.8 6 pins 0.8 terminals 6, 5, installation in defined by the must muestra en installations rules the application IEC 61010-1 4 pins 8 x como respect the 0.8los0.5 A0.35 mm se Standard. la hoja de caractersticas (Parte VII), se ha escogido la 1.3 mm The transducer installation in defined by the must 0.8 mm Standard. pins 0.5 x 0.35 mm de tres espiras. installations rules defined by the using the 4 3.2 mm The indicated performances are reached by IEC 61010-1 respect the conguracin 3.2 mm primary conductor integrated arethe case. by using the The indicated performances to reached 0.8 mm Standard. l primary through-hole 3.2 mm primary order to improve them, without previous notice. The in conductor integrated to the case. ves the right to carry out modifications on its transducers, indicated performances are reached by using the primary conductor integrated to the case. Finalmente, la salida del sensor se conecta without previous notice. ves the right to carry out modifications on its transducers, in order to improve them, al conversor analgico digital AN0 del 13 ves the right to carry out modifications on its transducers, se order toen la Figura 38. microcontrolador como in indica improve them, without previous notice. 13 13
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
71
AN0
1 2 3 4 5 6 7 8 9 10 11 12 13 14
28 27 26 25 24 23 22 21 20 19 18 17 16 15
Vmot
AN0 Vmot
REF OUT GND Vcc
6 1
5 2
4 3
LTSR 25-NP
Vcc
dsPIC30F3010
820 F
820 F
1 F
Figura 38. Esquema del circuito del sensor de corriente 4.2.3.3.1. Mejoras para diseos futuros
Si bien el circuito anterior muestra el conexionado actual, se ha constatado que la medida de corriente presenta bastante ruido, de modo que es conveniente colocar un ltro paso bajo, con una frecuencia de corte de unos 60 Hz, a la entrada del conversor A/D, formado por una resistencia de 5,6 k y un condensador de 470 nF. 4.2.3.4. Consigna de PWM
La velocidad del motor se puede controlar de dos formas distintas como se ha comentado, bien mediante tramas enviadas a travs del bus I2 C, bien mediante una seal de PWM generada por la TCS3. En este segundo caso, la velocidad se determina en funcin del valor medio: 5 V signica mxima velocidad de avance 0 V indica mxima velocidad de retroceso Con 2,5 V el motor se para En los puntos intermedios, el comportamiento es lineal. Para obtener el valor medio de la tensin se utiliza un ltro paso bajo de frecuencia de corte 60 Hz como el de la Figura 39.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
72
PWM
5,6 k 470 nF
AN2
1 2 3 4 5 6 7 8 9 10 11 12 13 14
28 27 26 25 24 23 22 21 20 19 18 17 16 15
Figura 39. Filtro paso bajo de la consigna de PWM 4.2.3.5. Circuito de acondicionamiento
Esta tarjeta no cuenta exactamente con el circuito de acondicionamiento propuesto en el Epgrafe 3.2 a pesar de utilizar I2 C para comunicarse con el exterior porque se dise con anterioridad. Lo nico que falta es el condensador de desacoplo que, si bien parece que no es imprescindible, resulta conveniente instalarlo en futuras versiones. 4.2.3.6. Circuito de programacin del microcontrolador
Finalmente, para poder programar el dsPIC30F3010 directamente sobre la tarjeta se ha diseado el siguiente circuito:
Vcc 10 k
RESET
dsPIC30F3010
28 27 26 25 24 23 22 21 20 19 18 17 16 15
100 nF
Vcc EMUD2
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Vcc
dsPIC30F3010
PGD
Vcc
PGC PGD
EMUC2
PGC
PRG(1) JTAG
1
RESET Vcc EMUD2
6
EMUC2
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Para programar y depurar se debe colocar el conector JTAG con los pines 1 a 6 segn se indica en la Figura 40 y, adems, para programar se deben poner sendos jumpers en los dos pares de pines designados como PRG, que debern quitarse para depurar y ejecutar en modo release.
4.2.4.
Conexionado
La Figura 41 muestra cmo se han de conectar los distintos componentes de la tarjeta, as como el color de los cables correspondientes. Cabe destacar que tanto en el 1 2 3 4 motor como en el puente el cable de alimentacin est en el exterior. En cuanto a la consigna de PWM, se conecta en el pin triple indicado, con la seal A en el interior y la tierra en el exterior. En los pines dobles situados justo debajo se se colocan, en el exterior, los 5 V que alimentan el microcontrolador, y la seal de enable que habilita el funcionamiento del puente, en el interior. Este conector est duplicado a n poder puentear estas seales entre las dos tarjetas de un mismo eje y reducir el cableado.
Alimentacin del motor
MATERIAL TOLERANCIA
NOMBRE FECHA 19 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES
TCM BRUSHLESS DC
DIBUJADO COMPROBADO
COMPONENTES
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes ESCALA: FIRMA: Jaime Boal Martn-Larrauri
3:2
I.C.A.I.
3
N DE LMINA:
74
5
4
4.2.5.
En esta seccin se explican los aspectos principales de la programacin de la tarjeta. El cdigo completo est recogido en la Parte VI. 4.2.5.1. Diagrama de ujo
El sistema se gestiona mediante interrupciones. A grandes rasgos, la interrupcin de cambio de estado monitoriza los sensores de efecto Hall y, cuando alguno cambia, se activan los transistores correspondientes para variar el campo magntico. Por su parte, si el sistema funciona de forma analgica, cada vez que se realiza una conversin A/D de la consigna de PWM se actualiza el factor de servicio para modicar la velocidad del motor. Si el control se hace mediante I2 C, se procesan los mensajes en el bucle de scan y se aplica el duty-cycle indicado.
Interrupcin A/D
Bucle de scan
ProcesarMensajeI2C
Para arrancar el sistema, se deben inicializar 3 mdulos: la interrupcin de deteccin de cambio de estado, el generador de seales de PWM y el conversor A/D, lo cual se hace con la funcin InicializarMotor.
Cdigo 21. Funcin de inicializacin principal A continuacin, se presentan las tres funciones que se indican en el Cdigo 21 y se comentan sus aspectos fundamentales. La primera de ellas congura los puertos CN5, CN6 y CN7, que es donde van conectados los sensores de efecto Hall de los motores, como entradas digitales para que salte una interrupcin cada vez que cambien.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
75
void InicializarDeteccionCambioEstado(void) { CNEN1 = 0x00E0; // Habilitar interrupciones de CN5, CN6 y CN7 // (Hall A, B y C respectivamente) CNPU1 = 0x00E0; // Conectar las resistencias de pull-up internas IFS0bits.CNIF = 0; IPC3bits.CNIP = PR_INT_CN; IEC0bits.CNIE = 1; } // Borrar la bandera de la interrupcin // Prioridad de la interrupcin (mx. 7 - mn. 1) // Habilitar la atencin de las interrupciones
void InicializarPWM(void) { unsigned int ui_posicion_inicial; TRISE &= 0xFFC0; PTCONbits.PTCKPS = 0; PTPER = FCY/FPWM - 1; // Los pines de PWM (RE0 a RE5) son salidas // Preescalado 1:1 // Base de tiempos ("periodo") del PWM. // Configuracin actual: 1000 // // // // Deshabilitar los pines de PWM. Pares de pines independientes Permitir el control manual de las seales de PWM a travs de este registro
// Factor de servicio inicial nulo. Motor parado PDC1 = 0; PDC2 = 0; PDC3 = 0; PWMCON2bits.IUE = 0; // // // // // // // Sincronizar el cambio de factor de servicio con el periodo Sincronizar cambios en las salidas a travs de OVDCON con el periodo Permitir la modificacin del factor de servicio y del periodo Arrancar el generador de PWM
// Inicializar posicin ui_posicion_inicial = (PORTB >> 3) & 0x7; OVDCON = vui_avanzar[ui_posicion_inicial]; PWMCON1 |= 0x0077; // Habilitar los pines de PWM
Cdigo 23. Funcin de inicializacin del generador de PWM La funcin de inicializacin del generador de PWM congura los pines RE0 a RE5 como salidas digitales y establece una frecuencia de conmutacin de 29,45 kHz, la cual
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
76
permite, con la conguracin de reloj actual, controlar el factor de servicio con una resolucin del 0,05 %. Asimismo, se habilita el control manual de las seales de PWM a travs del registro OVDCON. Finalmente, al inicializar el conversor A/D se establece que se conviertan secuencialmente los puertos AN0 y AN2, a los que estn conectados la salida del transductor de efecto Hall y la consigna de PWM respectivamente. Cada vez que se terminan ambas conversiones se produce una interrupcin.
void InicializarConversorAD(void) { ADPCFG &= 0xFFFA; // Configurar RB0 y RB2 como seales analgicas ADCON1bits.ADSIDL ADCON1bits.FORM ADCON1bits.SSRC ADCON1bits.SIMSAM ADCON1bits.ASAM ADCON2bits.VCFG ADCON2bits.CSCNA ADCON2bits.CHPS ADCON2bits.SMPI ADCON2bits.BUFM ADCON2bits.ALTS ADCON3bits.ADRC ADCON3bits.ADCS ADCON3bits.SAMC = = = = = 0; 0; 3; 0; 1; // // // // // // // // // // Continuar operando si se entra en suspensin Formato de la medida: unsigned int (10 bits) Sincronizar la conversin con el PWM Muestrear los canales de forma secuencial Comenzar a muestrear al terminar una conversin Tensiones de referencia internas: AVdd y AVss No escanear con CH0 las entradas analgicas indicadas en ADCSSL Convertir los canales CH0 y CH1 La interrupcin salta cada 2 conversiones
= 0; = 0; = 1; = 1; = 0; = 0; = 0; = 6; = 2;
// Almacenar resultados en un buffer de 16 bits // Usar siempre las conexiones del multiplexor A // // // // // Usar un mltiplo del reloj interno como reloj del conversor A/D (TAD) TAD > 95,24ns -> 750 ksps. ADCS = Entero_superior(2*(TAD/TCY)) Tiempo de muestreo: 2 TAD
// Pines conectados a los canales del multiplexor A ADCHSbits.CH0NA = 0; // Tensin negativa de referencia para la // conversin: AVss ADCHSbits.CH0SA = 2; // Conectar AN2 al CH0 ADCHSbits.CH123SA = 0; // Conectar AN0 al CH1, AN1 al CH2 y AN2 al CH3 IFS0bits.ADIF = 0; IPC2bits.ADIP = PR_INT_AD; IEC0bits.ADIE = 1; ADCON1bits.ADON = 1; // Borrar la bandera de la interrupcin // Prioridad de la interrupcin (mx. 7 - mn. 1) // Habilitar las interrupciones del conversor A/D // Arrancar el conversor A/D
a los canales del multiplexor A 0; // Tensin negativa de referencia: AVss 2; // Conectar AN2 al CH0 0; // Conectar AN0 al CH1, AN1 al CH2 y AN2 al CH3
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
77
4.2.5.3.
Interrupciones
El ncleo del funcionamiento de la tarjeta reside en las interrupciones. En la de cambio de estado se lee la posicin de los sensores y se activan los interruptores del puente necesarios para conseguir la siguiente posicin del campo magntico del esttor en funcin del sentido de giro. Adems, se cuenta el nmero de interrupciones cada 500 ms para determinar la velocidad del rotor.
void __attribute__((interrupt, no_auto_psv)) _CNInterrupt(void) { unsigned int ui_estado_hall; IFS0bits.CNIF = 0; // Borrar la bandera de la interrupcin // Leer la posicin del sensor
Cdigo 25. Interrupcin de cambio de estado Para ello, se utiliza la tabla que se muestra en el Cdigo 26. Los 8 bits ms altos indican si el pulso se controla con el generador de PWM (1) o con el valor de los 8 bits menos signicativos (0). Como se ha comentado, lo ms sencillo es generar una seal de PWM para controlar la velocidad del motor slo en los transistores bajos del puente, que corresponden a los bits pares (0, 2, 4 . . . ) y dejar abiertos o cerrados los interruptores superiores segn corresponda. Por ejemplo, 0x010A signica que el transistor superior de la bobina C est activo y el transistor inferior de la bobina A se conmuta con una seal de PWM. Observacin: La lgica transistores superiores del puente es negada.
Figura 43. Registro OVDCON de un dsPIC30F. En el caso del dsPIC30F3010 slo se pueden usar los PWM 1 a 3 78
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
= {0x002A, 0x0428, static unsigned int vui_retroceder[] = {0x002A, 0x0122, #elif defined _MOTOR_IZQUIERDO_ static unsigned int vui_avanzar[] = {0x002A, 0x0122, static unsigned int vui_retroceder[] = {0x002A, 0x0428, #endif
Cdigo 26. Tabla de conmutacin de los interruptores del puente En la interrupcin del conversor A/D se lee y almacena el valor de la corriente y se determina la consigna de PWM, si el control es analgico, o se introducen el valor del duty-cycle recibido por I2 C, si es digital.
void __attribute__((interrupt, no_auto_psv)) _ADCInterrupt (void) { unsigned int ui_consigna_motor; IFS0bits.ADIF = 0; // Borrar la bandera de la interrupcin
ui_consigna_motor = ADCBUF0 - 511; ui_intensidad = ADCBUF1; #ifdef _CONTROL_ANALOGICO_ if (ui_consigna_motor >= 0) { uc_sentido_giro = AVANZAR; ui_duty_cycle = (unsigned int)((ui_consigna_motor/512.0)*2000); } else { uc_sentido_giro = RETROCEDER; ui_duty_cycle = (unsigned int)(-(ui_consigna_motor/511.0)*2000); } if (ui_potencia <= 10) ui_duty_cycle = 0; #endif PDC1 = ui_duty_cycle; PDC2 = PDC1; PDC3 = PDC1; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
79
ARA poder navegar por terrenos desconocidos, es preciso disponer de algn sistema
de localizacin. El GPS es, probablemente, la mejor alternativa, dado que tiene buena cobertura en prcticamente cualquier lugar del planeta. En este captulo se explica brevemente cmo funciona, se presenta el dispositivo receptor GPS que se ha escogido y se detallan las funcionalidades de la tarjeta diseada para conectar el GPS al bus I2 C.
5.1.
Principio de funcionamiento
El sistema GPS est constituido por 24 satlites que orbitan a una altitud de 20.200 km con un periodo de 11 horas y 58 minutos (12 horas sidreas). Los satlites se distribuyen uniformemente en 6 planos orbitales inclinados 55o respecto al Ecuador. La disponibilidad de los 24 satlites asciende al 70 %, mientras que 21 de ellos funcionan, al menos, el 98 % del tiempo. Sin entrar en demasiados detalles acerca de los tipos de mensajes que se intercambian entre los satlites y los dispositivos terrestres, un receptor GPS determina su posicin calculando su distancia a tres satlites en funcin del tiempo que tarda en recibir respuesta a sus peticiones. Con las distancias obtenidas se construyen sendas esferas que se intersecan en dos puntos, de los cuales slo uno se encuentra sobre la supercie terrestre. Sin embargo, como el oscilador local de los receptores suele ser un reloj de cuarzo que tiene una deriva que altera las medidas, se utiliza la distancia a un cuarto satlite para corregirla [19].
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
80
por la estacin
o td
por el receptor
a posicin:
Measuring Devices
Superficie
for las medidas [18]. A purposes), research was made to know terrestre que alteran collision avoidancepartir de 8 satlites, la medida obtenida se whyther puede considerarerrors, and how to correct them. os de posicin, velocidad y tiempo (hora). buena y, con 12, muy buena, con errores menores de 15 metros en depende del tipo de cdigocualquieraSPS (~20m). 2.3 illustrates the principle source errors. utilizado de losFigure dos casos.
de la Tierra a la distancia a un satlite como d = td*c. a posicin de los satlites: Efemrides extrada de la seal D(t). Figura 44. Determinacin de la posicin mediante ellas se 2.1.2 ntial GPS Una de la interseccin de esferas [19] triangulacin) se determinan dos posibles localizaciones del receptor. Solution: DGPS la posicin respecto de la superficie de la tierra. taciones emisoras son muy precisos (relojes atmicos), pero el de la estacin no suele serpractice it is not very precise Sin embargo,In pesar de the method seems perfect, but in demasiado precisa a theory esta correccin, la medida de cuarzo, por lo que tiene una deriva que introduce un error en la medida.la ionosfera modican la trayectoria con slo cuatro satlites, puesto que la troposfera y accuracies with the most modern GPS receivers of about 2 meters [O con la medida de distancia a un cuarto satlite: sistema de 4 ecuaciones con 4 With that kind of error the rebotes contra objetos de be considered reliab de las seales y, adems, se producen reexiones ymeasurement can notla supercie y deriva de reloj).
da son consecuencia de: reloj de satlites, efemrides, desviacin de rbita, atmosfricos , instrumentales (orientacin de antena, ruido). n ser reducidos utilizando medidas diferenciales, tpicamente ~5m e incluso por debajo del tilizar como referencia una estacin base con posicin conocida. Troposfera
Ionosfera
Figura 45. Fuentes de error de las medidas del GPS [18] Figure 2.3: GPS Error Sources Measuring Devices 7 Por ltimo, existe otra forma de disminuir el error de las medidas, utilizar el These errors were found to be [Carlson 2004]: denominado GPS diferencial. La seal del satlite se transmite simultneamente al The best solution to avoid these errors is provided by a dierential GPS (DGPS). vehculo en movimiento y a una a DGPS there are two GPS antennas receiving As can be seen in gure 2.4 in estacin base que se comunica con el receptor para Ionosphere and Troposphere lengthen the GPS signal path (gu reducir el margen are able to un mximo other. position data andde error hastacorrect eachde 3 5 metros.
reected GPS signals have longer paths than direct satellite- G (gure 2.3 middle)
satellites that are very close together and all oriented to the GPS the same angle give a worse solution than those that are spread (gure 2.3 right)
Figura 46. Esquema de funcionamiento del GPS diferencial [18] Figure 2.4: Dierential GPS Normally there will be a base station, this is, an antenna located in a known Desarrollo de un robot 4x4 move navegacin por terrenos this would be the antenna located 81 position that does not para la and a rover station, agrestes Jaime Boal Martn-Larrauri on the car that does move. As the base station knows its position, it is able to calculate the GPS signal errors (the dierence between its known, real, position
5.2.
1
Se ha diseado una tarjeta para que acte de interfaz entre el receptor GPS que se ha adquirido y el bus I2 C que se utiliza para comunicar todos los dispositivos del sistema. En esta seccin se muestran sus especicaciones y los criterios de diseo adoptados, as como los componentes necesarios.
5.2.1.
2
Componentes
La Tabla 8 recoge los componentes empleados en el montaje de la tarjeta GPS I C/SPI Hub. En la Figura 47 se puede apreciar su distribucin.
B B
Componente
E
Uds. 1 1 2 5
Uds. 20 1 1 2
E
Garmin GPS 15L dsPIC30F3010 Conector JST B4B-EH-A Conector triple macho 2,54 mm
MATERIAL TOLERANCIA
Tabla 8. Componentes de la tarjeta GPS I2 C/SPI Hub NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
COMPONENTES
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri 1 2 3
2:1
I.C.A.I.
N DE LMINA:
10
4
82
5.2.1.1.
De entre todos los componentes, el ms importante es, evidentemente el GPS. Por ese motivo se presentan a continuacin, sus caractersticas ms relevantes. Receptor de 12 canales que permite el uso simultneo de hasta 12 satlites Admite GPS diferencial Tensin de alimentacin: 3,3 5,4 V Comunicaciones: RS-232 compatible con lgica TTL a una velocidad mxima de 38.400 baudios Tasa de refresco de las medidas: 1 segundo Peso: 14,1 gramos En cuanto a los tiempos de conexin del dispositivo con la red de satlites depende de la conguracin inicial. La Tabla 9 recoge los valores aproximados. Situacin Posicin inicial conocida Posicin inicial desconocida Tiempo 15 45 segundos 5 minutos
5.2.2.
Funcionalidades
Las funcionalidades de la tarjeta desarrollada son: Congurar el GPS va RS-232 desde un ordenador. Conectar el GPS al bus I2 C y servir de hub para conectar el maestro con los esclavos siguiendo una topologa en estrella, de forma que si se rompe un canal el resto de dispositivos sigan comunicados. Programar la lgica del dsPIC30F3010 sobre la propia tarjeta. Filtrar la informacin recibida del GPS, descartando la que no sea necesaria. El diseo del hardware permite una futura ampliacin para interconectar el GPS con un bus SPI.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
83
5.2.3.
Diseo
En este apartado se recogen los aspectos ms importantes del diseo de la tarjeta. 5.2.3.1. Circuito de acondicionamiento
Como el cometido principal de la tarjeta es funcionar como interfaz entre sistemas de comunicacin, el circuito de acondicionamiento es el mismo que se ha explicado en el Epgrafe 3.2. Ntese, sin embargo, que no se han instalado las resistencias de pull-up en esta tarjeta, porque al ser un esclavo, podra estar o no en el bus. Por ese motivo, el lugar ideal para colocarlas es en un maestro, en este caso, la TCS3. 5.2.3.2. Circuito de programacin del microcontrolador
El circuito que permite programar el dsPIC30F3010 directamente sobre la tarjeta es idntico al expuesto en el Epgrafe 4.2.3.6. 5.2.3.3. Interfaz I2 C/SPI
El diseo de la tarjeta permite elegir qu tipo de bus se emplea para comunicarse con el exterior, I2 C o SPI. Se han dispuesto 4 conectores de tres pines de los cuales dos son comunes para ambos, como se observa en la Figura 48. El tercer pin se utiliza para enviar el reloj del SPI o la tierra en el caso del I2 C. No es crtico que no se enve la referencia de tensiones en el SPI porque la alimentacin de la tarjeta proviene del maestro, la TCS3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15
dsPIC30F3010
I2C/SPI
I2C/SPI
I2C/SPI
I2C/SPI
I2C
SPI
SCK
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
1 2 3 4 5 6 7 8 9 10 11 12 13 14
28 27 26 25 24 23 22 21 20 19 18 17 16 15
dsPIC30F3010
Para conmutarC/SPI I2 CC/SPI colocar un jumper uniendo los pines I2 entre I2 y SPI, basta con I2C/SPI I2C/SPI homnimos indicados en naranja en la Figura 50.
PGC/SDA/SDI1 PGD/SCL/SDO1 SCK 5.2.3.4.
La tarjeta permite congurar el GPS desde un ordenador a travs del conector I2 C SPI RS-232 disponible. Durante este proceso se ha de desconectar el dispositivo del SCK microcontrolador retirando los jumpers de los pines denominados GPS, que estn sealados en amarillo en la Figura 50. Una vez concluido el proceso, se pueden restituir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 28 27 26 25 24 23 22 21 20 19 18 17 16 15
Tx GPS Rx GPS
Rx GPS
Tx GPS
GPS
Rx GPS Tx GPS Vcc
5.2.4.
Conexionado
Durante los epgrafes anteriores se ha explicado cmo conectar todos los dispositivos a excepcin del GPS, que cuenta con 8 cables distintos cuya funcin se explica en la Tabla 10. Conector GPS I Cable Negro Rojo Amarillo Azul Funcin GND Vcc Tx GPS Rx GPS Cable Blanco Naranja Gris Verde Conector GPS II Funcin Batera de respaldo Vext antena Generador de pulsos de 1Hz Rx GPS alternativa
Tabla 10. Cdigo de colores de los cables del GPS Para esta aplicacin, slo se requieren los cables agrupados bajo la denominacin Conector GPS I. Los dems se conectarn indistintamente en el Conector GPS II.
dsPIC30F3010
RS232
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
85
La Figura 50 destaca tambin los jumpers que hay que modicar para seleccionar las distintas funciones de la tarjeta, as como los pines de alimentacin y programacin.
B B
Conexin GPS-Micro
C C
5.2.5.
5.2.5.1.
Programacin
Funcin principal
Inicializa los mdulos I2 C y UART en este orden como se vio en el Epgrafe 3.3, MATERIAL y llama, dentro del bucle de scan, a sus funciones de procesamiento.
TOLERANCIA NOMBRE FECHA 03 - VI - 2010 JAIME BOAL MARTN-LARRAURI
DIBUJADO COMPROBADO
int main(void) LVARO SNCHEZ MIRALLES 21 - VI - 2010 { ESCALA: FIRMA: while(!OSCCONbits.LOCK); // Esperar a que el PLL se sincronice
COMPONENTES
N DE LMINA:
2:1
I.C.A.I.
3
10
4
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
5.2.5.2. 5.2.5.2.1.
El GPS enva tramas cada segundo. Cada vez que llega un byte, salta la interrupcin y se almacena en una cola circular. El bucle de scan llama a la funcin de procesamiento y vaca la cola de recepcin, eliminando los caracteres innecesarios de la trama. Si se ha detectado el nal de la trama, la funcin ProcesarMensaje selecciona los parmetros deseados y los almacena en variables para que el mdulo I2 C pueda leerlos cuando sea preciso.
Interrupcin
Bucle de scan
ProcesarUART
ProcesarMensaje
Almacenar datos
Figura 51. Diagrama de ujo del mdulo UART 5.2.5.2.2. Funcin de inicializacin
Lo ms relevante de la funcin de inicializacin del mdulo UART es que funciona a 38.400 baudios con 8 bits de datos, 1 bit de parada y sin control de paridad. Como los pines por defecto del mdulo estn compartidos con los mdulos I2 C y SPI, se han congurado los pines alternativos, que corresponden a los pines 11 y 12 del dsPIC30F3010.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
87
// Velocidad de transmisin Bits de parada: 1 Bits de datos: 8, Paridad: Ninguna Usar los pines de Tx y Rx alternativos (U1ATX y U1ARX). Los estndar (U1TX y U1RX) coinciden con SCL y SDA del bus I2C Habilitar el mdulo UART Habilitar la transmisin (Slo si UARTEN = 1) Modo de interrupcion de Tx: Cada vez que se vacia U1TXREG Modo de interrupcion de Rx: Cuando se recibe un caracter
= PR_INT_TX_UART; // Prioridad de la int. de transmisin = PR_INT_RX_UART; // Prioridad de la int. de recepcin = 0; = 1; // Deshabilitar las interrupciones de transmisin // Habilitar las interrupciones de recepcin
Cdigo 29. Funcin de inicializacin del mdulo UART 5.2.5.2.3. Funciones de procesamiento
Se han programado dos funciones diferentes para gestionar los mensajes recibidos, ProcesarUART y ProcesarMensaje, que se llama desde la anterior. La primera de ellas, detecta el n del mensaje y elimina el checksum y los caracteres de terminacin. La segunda, recibe el mensaje con los datos de ProcesarUART, obtiene el cdigo de instruccin y selecciona los parmetros deseados, en este caso, las coordenadas y otra informacin asociada, como el nmero de satlites, la fecha y la hora.
void ProcesarUART(void) { static char c_mensaje[TAM_MENS_REC]; static unsigned int ui_imensaje = 0; if (ui_icola_rec != ui_icabeza_rec) { do{ c_mensaje[ui_imensaje] = SacarDeColaRecepcionUART(); ui_imensaje++; }while((ui_icola_rec != ui_icabeza_rec) || (c_mensaje[ui_imensaje - 1] == \n)); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
88
void ProcesarMensaje(char *c_mensaje) { int i = 0; int j = 0; unsigned char uc_num_parametro = 1; char c_instruccion[TAM_INST_GPS]; char c_parametro[TAM_PARAM_GPS]; static char c_coordenadas[TAM_COORD_GPS]; // Obtener el cdigo de instruccin while (c_mensaje[i] != ,) { c_instruccion[i] = c_mensaje[i]; i++; } c_instruccion[i] = \0; // Adquirir los parmetros if (!strcmp(c_instruccion,"$GPGGA")) // Devuelve 0 si las cadenas son iguales { while (uc_num_parametro <= 7) { c_parametro[j++] = c_mensaje[i++]; if (c_mensaje[i-1] == , || c_mensaje[i-1] == *) { c_parametro[j] = \0; j = 0; if (uc_num_parametro == 1) strcpy(c_horaGPS, c_parametro); else if (uc_num_parametro == 2) strcpy(c_coordenadas, c_parametro); else if((uc_num_parametro <= 3 && uc_num_parametro >=5) || uc_num_parametro == 7) strcat(c_coordenadas, c_parametro); uc_num_parametro++; } } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
89
else if (!strcmp(c_instruccion,"$GPRMC")) { while (uc_num_parametro <= 9) { c_parametro[j++] = c_mensaje[i++]; if (c_mensaje[i-1] == , || c_mensaje[i-1] == *) { c_parametro[j] = \0; j = 0; if (uc_num_parametro == 2) strcat(c_coordenadas, c_parametro); else if (uc_num_parametro == 9) strcpy(c_fechaGPS, c_parametro); uc_num_parametro++; } } strcpy(c_coordenadasGPS, c_coordenadas); } }
Para que otros mdulos como el I2 C puedan acceder a los datos almacenados se han denido las siguientes funciones:
unsigned int GetCoordenadasGPS (char *c_coordenadas); unsigned int GetHoraGPS (char *c_hora); unsigned int GetFechaGPS (char *c_fecha);
Cdigo 32. Prototipos de las funciones de lectura de variables de la UART 5.2.5.3. Mdulo I2 C
Todo el mdulo es idntico al del Captulo 3. Inter-Integrated Circuit (I2 C), salvo por las instrucciones aadidas a la funcin de procesamiento, la cual se reproduce en el Cdigo 33.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
90
void ProcesarMensajeI2C(void) { unsigned char uc_instruccion; char c_medidasGPS[TAM_MED_GPS]; unsigned int ui_num_caracteres = 0; int i; DeshabilitarInterrupcionesEsclavoI2C(); if (u_procesar_mensaje_habilitado) { while (ui_icola_rec != ui_icabeza_rec) { uc_instruccion = SacarDeColaRecepcionI2C(); switch (uc_instruccion) { case INST_COORD: // Coordenadas ui_num_caracteres = GetCoordenadasGPS(c_medidasGPS); PonerEnColaTransmisionI2C(ui_num_caracteres); // N o caracteres for (i = 0; i < ui_num_caracteres; i++) PonerEnColaTransmisionI2C(c_medidasGPS[i]); // Datos break; case INST_HORA: // Hora ui_num_caracteres = GetHoraGPS(c_medidasGPS); PonerEnColaTransmisionI2C(ui_num_caracteres); // N o caracteres for (i = 0; i < ui_num_caracteres; i++) PonerEnColaTransmisionI2C(c_medidasGPS[i]); // Datos break; case INST_FECHA: // Fecha ui_num_caracteres = GetFechaGPS(c_medidasGPS); PonerEnColaTransmisionI2C(ui_num_caracteres); // N o caracteres for (i = 0; i < ui_num_caracteres; i++) PonerEnColaTransmisionI2C(c_medidasGPS[i]); // Datos break; case PING: // Ping PonerEnColaTransmisionI2C(2); // No caracteres PonerEnColaTransmisionI2C(uc_direccion_esclavo); // Direccin PonerEnColaTransmisionI2C(7); // Respuesta break; } } } HabilitarInterrupcionesEsclavoI2C(); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
91
Captulo 6 Cinemticas
grados de libertad de la plataforma permiten adoptar cuatro conguraciones de avance diferentes. En este captulo se presentan las ecuaciones que denen las cinemticas y se explica brevemente como funciona la clase programada en C++ para calcularlas.
OS DIEZ
6.1.
Ackerman
La cinemtica Ackerman es, probablemente la ms comn y conocida de todas, ya que es la que se emplea en la mayora de los vehculos de cuatro ruedas. Puede utilizar dos o cuatro ruedas motrices, pero slo usa dos ruedas directrices, normalmente las delanteras.
o
vdo
i
vdi
v ro vto vti l
rs
ri
rg
CIR
b ho
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
I. M EMORIA l 6. C INEMTICAS
Como se muestra en la Figura 52, el objetivo es que el conjunto gire en torno a un nico punto, el centro instantneo de rotacin o CIR. Para ello, la rueda delantera interior a la curva se rota un ngulo mayor que la interior, a n de evitar que las ruedas patinen. A partir del CIR y de las dimensiones del chasis, es decir, de la batalla l y de la va b, se puede deducir la Ecuacin 7. Sin embargo, para poder determinar el ngulo de las ruedas hace falta una segunda ecuacin, la cual se obtiene suponiendo que existe una rueda virtual en el centro del eje delantero que gira es ngulo deseado s (Ecuacin 8). Para facilitar su posterior programacin, se han despejado las variables desconocidas o y i en funcin de los parmetros conocidos (Ecuaciones 9 y 10). b = ctg(o ) ctg(i ) l b = ctg(o ) ctg(s ) 2l o = arcctg b + ctg(s ) 2l b + ctg(s ) 2l (7) (8)
(9) (10)
i = arcctg
Una vez resuelto el problema de la direccin es necesario abordar el de la velocidad. Evidentemente, las ruedas exteriores debern girar ms deprisa porque deben recorrer ms espacio en el mismo tiempo. Se tomar el punto medio del robot como referencia de velocidades, lo cual signica que la velocidad v que se conoce es la de ese punto. Las dems sern proporcionales a la distancia al CIR.
vdo = v donde:
ro rg
vdi = v
ri rg
vto = v
ho rg
vti = v
ho b rg
(11)
ro =
l sen(o ) rg =
ri =
l sen(i ) b 2
2
ho = l 2
2
l sen(o )
(12)
ho
(13)
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
93
I. M EMORIA l 6. C INEMTICAS
6.2.
Doble Ackerman
La cinemtica Doble Ackerman es idntica en cuanto a su funcionamiento a la Ackerman convencional, con la diferencia de que las cuatro ruedas son directrices, por lo que se reducen los radios de giro.
o
vdo
i
vdi
rs v l ro rg
ri
CIR
vto
ro
vti
ri
b ho
Figura 53. Cinemtica Doble Ackerman Las ecuaciones que denen el movimiento se muestran a continuacin: 2b = ctg(o ) ctg(i ) l b = ctg(o ) ctg(s ) l o = arcctg b + ctg(s ) l (14) (15)
(16) (17) ri rg
b i = arcctg + ctg(s ) l vdo = vto = v donde: ro = l/2 sen(o ) ri = l/2 sen(i ) ho = l/2 sen(o ) rg = ho b 2 ro rg vdi = vti = v
(18)
(19)
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
94
I. M EMORIA l 6. C INEMTICAS
6.3.
Sncrona
La cinemtica Sncrona se caracteriza porque el chasis mantiene siempre la misma orientacin y son las ruedas las que giran para avanzar en la direccin deseada. La velocidad y el giro de las ruedas coincide con los valores deseados.
v
l
6.4.
Sncrona orientada
La cinemtica Sncrona orientada es una variante de la Sncrona. Consiste en girar sobre uno mismo hasta que el chasis est orientado en la direccin deseada y, posteriormente, avanzar en lnea recta.
45
-45
-45
45
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
I. M EMORIA l 6. C INEMTICAS
6.5.
Todas las cinemticas expuestas se han implementado en una clase de C++ denominada CCinematica. Con el objetivo de hacer la clase lo ms genrica posible, se han denido una serie de constantes para hacer ms intuitivo el cdigo y facilitar su comprensin. Adems, las velocidades se manejan en porcentaje para que se pueda utilizar con cualquier motor.
#define PI 3.1415926535897932384626433832795 // Dimensiones (cm) #define VIA 30 #define DIST_MOTOR_RUEDA 8 #define RADIO_RUEDA 6 #define LONG_PLAT_SUP 26 #define LONG_BARRA_DIAG 20 // ngulos iniciales de la plataforma ( o ) #define ANGULO_DELANTERO_INICIAL 30 #define ANGULO_TRASERO_INICIAL 30 // Aceleracin mxima #define ACELERACION 10 // Cinemticas #define ACKERMAN 0 #define DOBLE_ACKERMAN 1 #define SINCRONA 2 #define ROTAR 3 // Traccin #define DELANTERA 1 #define TRASERA 2 #define TOTAL 3 // ndices de los motores y servos #define iMDI 0 #define iMDD 1 #define iMTD 2 #define iMTI 3 #define iSDI 4 #define iSDD 5 #define iSTD 6 #define iSTI 7
Cdigo 34. Constantes denidas en la clase CCinematica A continuacin, se explica brevemente cmo funciona la clase, as como las caractersticas de las funciones principales. Puede encontrar el cdigo completo en la Parte VI.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
96
I. M EMORIA l 6. C INEMTICAS
6.5.1.
Variables
Todas las variables vuelven a ser privadas. m_d_batalla es un double que almacena el valor de la batalla del robot en funcin de la posicin de los ngulos de la plataforma. Obsrvese que, en cambio, la va es una constante. m_vd_pos_objetivo es un vector de double de 8 elementos que almacena el valor al que deben tender los actuadores. Dichos actuadores se ordenan segn los ndices denidos en el Cdigo 34.
6.5.2.
Constructor y destructor
El constructor de la clase inicializa la posicin de todos los actuadores a 0 para que los motores empiecen parados y los servos se siten de forma que el robot avance en lnea recta. Asimismo, calcula la batalla en funcin de los ngulos iniciales denidos.
CCinematica::CCinematica(void) { for (unsigned int i = 0; i < 8; i++) m_vd_pos_objetivo[i] = 0; CalcularBatalla(ANGULO_DELANTERO_INICIAL, ANGULO_TRASERO_INICIAL); } CCinematica::~CCinematica(void) { }
6.5.3.
Funciones
Para usar esta clase se han denido unas funciones que devuelven todas las variables que hay que aplicar a los actuadores.
class CCinematica { private: ... void PotenciaMaxima(double &d_potencia); void Aceleracion(double *pd_consignas);
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
97
I. M EMORIA l 6. C INEMTICAS
public: // Constructor y destructor CCinematica(void); ~CCinematica(void); // Funciones void Ackerman(double &d_potencia, const double &d_giro, double *pd_consignas); void DobleAckerman(double &d_potencia, const double &d_giro, double *pd_consignas); void Sincrona(double &d_potencia, const double &d_giro, double *pd_consignas); void Rotar(double &d_potencia, double *pd_consignas); void CalcularBatalla(const double &d_angulo_plataforma_delantero, const double &d_angulo_plataforma_trasero); };
Cdigo 36. Prototipos de las funciones de CCinematica Como se ha visto en los epgrafes anteriores, las cinemticas Ackerman y Doble Ackerman necesitan conocer la batalla para poder resolver sus ecuaciones. Para ello, se ha denido la funcin CalcularBatalla, que determina la batalla en funcin de la longitud de la plataforma superior, los ngulos de apertura y la longitud de las barras que unen la plataforma con la parte inferior. El resultado se almacena en la variable privada m_d_batalla para que las dems funciones de la clase puedan utilizarla.
void CCinematica::CalcularBatalla(const double &d_angulo_plataforma_delantero, const double &d_angulo_plataforma_trasero) { m_d_batalla = LONG_PLAT_SUP + LONG_BARRA_DIAG* (cos(d_angulo_plataforma_delantero*PI/180) + cos(d_angulo_plataforma_trasero*PI/180)); }
Cdigo 37. Funcin CalcularBatalla Una vez conocidos todos los parmetros del modelo mecnico, se pueden explicar las funciones que calculan las cinemticas. La primera de ellas es Ackerman, que recibe la velocidad del punto central del robot (o la potencia de un motor equivalente situado en dicho punto) en porcentaje y el giro de la rueda triciclo equivalente en grados y devuelve un vector con las consignas que hay que aplicar en funcin de las ecuaciones de esta cinemtica.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
98
I. M EMORIA l 6. C INEMTICAS
No obstante, es importante enfatizar una modicacin que se ha realizado en las ecuaciones respecto a las denidas en el Epgrafe 6.1. Obsrvese en el Cdigo 38 que en el clculo de la velocidad de los motores se ha aadido en el numerador la distancia del punto de rotacin del servo a la rueda, puesto que los neumticos no estn situados exactamente encima del chasis.
void CCinematica::Ackerman(double &d_potencia, const double &d_giro, double *pd_consignas) { double d_angulo_interior = 0; double d_angulo_exterior = 0; double d_rs, d_ro, d_ri, d_ho, d_rg; // Potencia de los motores if (d_giro != 0) // Si no se desplaza en lnea recta { d_angulo_exterior = atan(1/(1/tan(fabs(d_giro)*PI/180) + VIA/(2*m_d_batalla))); d_angulo_interior = atan(1/(1/tan(fabs(d_giro)*PI/180) VIA/(2*m_d_batalla))); d_rs d_ro d_ri d_ho d_rg = = = = = fabs(m_d_batalla/sin(d_giro*PI/180)); fabs(m_d_batalla/sin(d_angulo_exterior)); fabs(m_d_batalla/sin(d_angulo_interior)); fabs(m_d_batalla/tan(d_angulo_exterior)); sqrt((d_ho-VIA/2)*(d_ho-VIA/2)+(m_d_batalla/2)*(m_d_batalla/2));
if (d_giro > 0) { m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMTD] d_potencia/d_rg; m_vd_pos_objetivo[iMTI] } else { m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMTI] d_potencia/d_rg; m_vd_pos_objetivo[iMTD] } } else {
// Si se mueve en lnea recta m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMTD] m_vd_pos_objetivo[iMTI] = = = = d_potencia; d_potencia; d_potencia; d_potencia;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
99
I. M EMORIA l 6. C INEMTICAS
PotenciaMaxima(d_potencia); // Ajustar la potencia para que no supere el 100 % // Direccin if (d_giro >= 0) { m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] } else { m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] } m_vd_pos_objetivo[iSTD] = 0; m_vd_pos_objetivo[iSTI] = 0; Aceleracion(pd_consignas); // Curva de aceleracin de los motores for (unsigned int i = iSDI; i <= iSTI; i++) // Devolucin de las consignas pd_consignas[i] = m_vd_pos_objetivo[i]; }
= d_angulo_exterior*180/PI; = d_angulo_interior*180/PI;
= d_angulo_interior*180/PI; = d_angulo_exterior*180/PI;
Cdigo 38. Funcin Ackerman Durante el clculo, se utilizan dos funciones privadas: PotenciaMaxima y Aceleracion. La primera de ellas, reduce la velocidad de todos los motores de forma proporcional en caso de que alguno de ellos tuviese que ir a ms del 100 % de la velocidad mxima para satisfacer las consignas del usuario, y modica la consigna de velocidad recibida para que el usuario pueda saber cul ha sido el valor real aplicado.
void CCinematica::PotenciaMaxima(double &d_potencia) { double d_potencia_maxima = 0; for (unsigned int i = iMDI; i <= iMTI; i++) // Mayor potencia aplicada { if (fabs(m_vd_pos_objetivo[i]) > d_potencia_maxima) d_potencia_maxima = fabs(m_vd_pos_objetivo[i]); } if (d_potencia_maxima > 100) { d_potencia = d_potencia*100/d_potencia_maxima; for (unsigned int i = iMDI; i <= iMTI; i++) m_vd_pos_objetivo[i] = m_vd_pos_objetivo[i]*100/d_potencia_maxima; } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
I. M EMORIA l 6. C INEMTICAS
La segunda, establece una variacin mxima en porcentaje para la velocidad de los motores, en funcin de la constante ACELERACION denida. Si la aceleracin mxima de cualquier motor es mayor que este valor, se aplica una variacin proporcional a cada motor de manera que ninguno supere la aceleracin mxima permitida. En caso contrario, se aplican los valores calculados directamente. Para alcanzar la velocidad objetivo, habr que llamar a la funcin de la cinemtica tantas veces como sea necesario hasta que se satisfaga esta condicin.
void CCinematica::Aceleracion(double *pd_consignas) { double d_aceleracion_maxima = 0; // Se identifica la mayor diferencia entre las // potencias actual y objetivo de los motores for (unsigned int i = iMDI; i <= iMTI; i++) { if (fabs(m_vd_pos_objetivo[i] - pd_consignas[i]) > d_aceleracion_maxima) d_aceleracion_maxima = fabs(m_vd_pos_objetivo[i] - pd_consignas[i]); } // Si dicha diferencia es mayor que la aceleracin mxima permitida, // se obtiene una curva de aceleracin proporcional para cada motor if (d_aceleracion_maxima > ACELERACION) { double d_incremento; d_incremento = d_aceleracion_maxima/ACELERACION; for (unsigned int i = iMDI; i <= iMTI; i++) pd_consignas[i] += (m_vd_pos_objetivo[i] pd_consignas[i])/d_incremento; } // En caso contrario, se aplican todos los cambios directamente else { for (unsigned int i = iMDI; i <= iMTI; i++) pd_consignas[i] = m_vd_pos_objetivo[i]; } }
Cdigo 40. Funcin Aceleracion La funcin DobleAckerman es totalmente anloga a la Ackerman salvo porque las ecuaciones son distintas. En cuanto a la funcin Sncrona, no hay mucho que destacar. nicamente que en combinacin con la funcin Rotar, que hace girar sobre su propio eje al robot, se puede conseguir la cinemtica Sncrona orientada.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
101
I. M EMORIA l 6. C INEMTICAS
6.5.4.
Ejemplo de uso
CCinematica cinematica; double consignas[8]; cinematica.CalcularBatalla(20, 20); // Slo si se desea cambiar // el valor por defecto cinematica.Ackerman(25.3, 10, consignas);
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
102
AS PRUEBAS
A lo largo de este documento se han ido planteando los problemas encontrados as como las soluciones adoptadas en cada caso. De todas formas, se recogen de nuevo aqu para facilitar su seguimiento.
7.1.
Una vez diseada y construida la TCM Brushless DC (vase el Epgrafe 4.2) se procedi a ensayarla con un motor y se comprob que funcionaba correctamente. Sin embargo, al conectar dos o ms motores, uno o varios de ellos no funcionaba de forma uida o, incluso, se bloqueaba. Despus de analizar todas las formas de onda de con el osciloscopio, se observ que el problema radicaba en que la seal de PWM que se suministraba a los motores desde el puente de MOSFET presentaba ruido. Al producirse este efecto slo cuando haba ms de un motor conectado, se concluy que existan interferencias entre ellos. El problema se solucion nalmente colocando un ltro de modo comn en la alimentacin de cada motor para asegurar que la corriente que entraba y sala era la misma, se disminuy el rea de las pistas para reducir las interferencias radiadas2 y un ltro de segundo orden en la alimentacin del puente para evitar fallos en la conmutacin debidos al ruido.
2
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
103
Una vez realizadas estas modicaciones se repiti la prueba. Se comprob que el sistema es robusto ante las interferencias y que los motores admiten arranques del 0 al 100 % de la velocidad sin ningn inconveniente, por lo que la capacidad de reaccin, que es clave para desplazarse por terrenos complicados, est garantizada. No obstante, se detect que como la seal de consigna pasaba a travs de un conversor analgico/digital no todos los motores se movan exactamente a la misma velocidad con la misma consigna, por lo que se decidi intentar utilizar control digital a travs del bus I2 C.
7.2.
El mdulo I2 C ha sido una de las mayores fuentes de problemas. Cuando se termin de programar, se comprob en depuracin su funcionamiento entre la TCS3, que actuaba como maestro, y un esclavo. El resultado de esta prueba fue satisfactorio. Sin embargo, al programar el sistema en modo release la comunicacin no se produca. Como el problema no pareca encontrarse en la programacin, pues funcionaba en depuracin, se analizaron con el osciloscopio las tramas enviadas y se detect que el esclavo no conrmaba las transacciones, es decir, que no detectaba que haba un mensaje dirigido a l. A pesar de que la seal pareca limpia de ruido, se prob reducir la velocidad de transmisin al mnimo (100 kHz) a apantallar el cable, revisar el valor de las resistencias de pull-up y colocar buffers de I2 C sin xito. Finalmente, la solucin se encontr en el reset del esclavo. Debido al ruido, el reset del esclavo produca disparos intempestivos en modo release. Para solucionarlo se coloc un circuito de acondicionamiento como el que se ha explicado en el Epgrafe 3.2. En modo depuracin esto no ocurra porque el programador controla el pin de reset. Una vez resuelta esta incidencia se procedi a aumentar la velocidad al mximo permitido, 1 MHz y se veric que la comunicacin es correcta. As pues, el sistema est dotado de un sistema de comunicacin que le permite transmitir datos entre los mdulos del robot a gran velocidad. No obstante, cuando se intent comunicar en entornos con ms de un esclavo, se detect un nuevo problema. El buffer de recepcin de los esclavos queda bloqueado por las transmisiones entre el maestro y otros esclavos, impidiendo que se reconozca su direccin cuando hay un mensaje dirigido a l. Este problema se especica en la hoja de 104
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
erratas del microcontrolador [17]. Se intent aplicar la solucin propuesta sin ninguna mejora, por lo que este asunto est an por resolver. Tal cual est el bus I2 C ahora mismo, se pueden controlar los motores mediante seales analgicas y conectar el GPS como nico esclavo a travs de I2 C.
7.3.
Como se ha visto en el Captulo 6, el robot puede adoptar hasta cuatro cinemticas distintas en funcin de las circunstancias. Para comprobar su funcionamiento se ha desarrollado una aplicacin que permite el control remoto del robot desde un ordenador a travs de una red Wi-Fi. Dicha aplicacin consiste en una ventana de dilogo, mostrada en la Figura 56, desde la cual se pueden seleccionar la cinemtica deseada, la traccin, la potencia y la direccin, o la posicin de la plataforma superior. El funcionamiento de dicha aplicacin se explica con ms detalle en la Parte V.
Figura 56. Interfaz del programa de pruebas de las cinemticas En primer lugar se realizaron las pruebas con todos los actuadores en vaco, es decir, en el aire, y se comprob que todo funciona como estaba previsto. Desafortunadamente, cuando se coloca el robot en el suelo existen graves problemas. Los servos que controlan la posicin de la plataforma tienen fuerza suciente, pero los engranajes de delrin (poliformaldehido) con los que se realiza la transmisin no
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
105
son adecuados, porque se deforman y los dientes deslizan, por lo que son incapaces mantener la plataforma en la ubicacin deseada. Con el n de esquivar temporalmente este problema y probar el funcionamiento del resto de los actuadores convenientemente, se bloque la posicin de la plataforma superior y se hizo una nueva prueba. Los resultados tampoco fueron demasiado satisfactorios. Los motores son tan potentes que los servos son incapaces de permanecer en una posicin ja, por lo que resulta imprescindible instalar algn mecanismo autoblocante en la direccin o, en su defecto, intentar colocar unos servos con ms par.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
106
Captulo 8 Conclusiones
proyecto se ha centrado en el desarrollo del hardware elctrico y electrnico, as como de los sistemas de comunicacin, necesarios para controlar el robot todoterreno. Los productos resultantes son los siguientes:
L PRESENTE
Cuatro tarjetas TCM Brushless DC, basadas en un microcontrolador dsPIC, para controlar sendos motores trifsicos de corriente continua de 100 W. Permiten control analgico, mediante una seal de PWM de factor de servicio variable, o digital a travs de un bus I2 C estndar. Por dicho bus de comunicaciones se envan tambin lecturas de consumo de corriente y velocidad. Una tarjeta GPS I2 C/SPI Hub que acta de interfaz entre el GPS, que transmite va RS-232, y el bus I2 C. El diseo del PCB se ha hecho de tal modo que permite programar tambin una interfaz en SPI. Un driver de manejo de los dispositivos del bus I2 C, programado en C++, para facilitar la interaccin del usuario. Una clase en C++ que calcula la posicin y velocidad de las ruedas para implementar las cuatro cinemticas posibles: Ackerman, Doble Ackerman, Sncrona y Sncrona orientada. Una aplicacin en C++ de control remoto del robot, a travs de una red inalmbrica Wi-Fi convencional, para probar las cinemticas. En conclusin, se han sentado las bases para conseguir, en un futuro prximo, un robot todoterreno autnomo. El robot cuenta ya con actuadores y sensores propioceptivos gestionables de forma sencilla, lo que permitir utilizar odometra para monitorizar la posicin del robot en todo momento. Las coordenadas proporcionadas por el GPS podrn ser usadas para planicar las rutas y las cuatro cinemticas dotarn al robot de gran versatilidad en todo tipo de supercies.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
107
I. M EMORIA l 8. C ONCLUSIONES
Por otro lado, durante el desarrollo del proyecto se ha tenido que hacer frente principalmente a dos problemas, que han supuesto un importante freno al avance. Se considera que hay que enfatizarlos para evitar que se reproduzcan en otras aplicaciones similares. En primer lugar, se ha constatado que para que los microcontroladores funcionen correctamente, en especial en lo que se reere a comunicaciones, resulta imprescindible realizar un buen circuito de acondicionamiento, como el que se ha presentado en el Epgrafe 3.2. La colocacin de un condensador y una resistencia de valor adecuados en el reset previene reinicios intempestivos, mientras que los condensadores de desacoplo limitan el efecto de las altas frecuencias en la tensin de alimentacin, que pueden ocasionar un mal funcionamiento del sistema. Estos ltimos son especialmente importantes en entornos ruidosos como el del robot, donde el ruido procede, en su mayora, de la conmutacin de los interruptores de los inversores de los motores. Si los cables no estn apantallados, actan como antenas receptoras y potencian el problema. La otra cuestin a considerar son las interferencias electromagnticas (EMI), especialmente las conducidas. Al igual que sucede con los microcontroladores, el ruido de unos motores puede interferir en las seales de control de otros y provocar avances a saltos o, incluso, el bloqueo de los mismos. Para solucionarlo, hay que reducir, en la medida de lo posible, el rea de las pistas del motor en las tarjetas con el n de disminuir las interferencias radiadas y, sobre todo, colocar un ltro paso bajo de segundo orden compuesto por una bobina y un condensador en la alimentacin para evitar las interferencias de modo comn. Dicho ltro garantiza que el ujo de corriente neto en cada motor es nulo, por lo que no se producen fugas de corriente por otros caminos. En resumen, el ruido electromagntico es uno de los primeros factores que hay que tener en cuenta a la hora de disear sistemas con motores elctricos, como un robot todoterreno, porque las interferencias son la causa ms comn de problemas.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
108
Corregir las deciencias detectadas en la plataforma mecnica. Hay reemplazar todos los servos por mecanismos autoblocantes equivalentes, que eliminen la necesidad de estar alimentando los actuadores constantemente y que sean capaces de soportar la fuerza ejercida por los motores. Adaptar el mdulo I2 C para que funcione en entornos con mltiples esclavos (vase el Epgrafe 3.3.3). Incorporar SPI tanto a la TCS3 como a todos los dispositivos esclavos para contar con un bus de comunicaciones alternativo en caso de que el I2 C siga ocasionando problemas. Permitir control analgico y digital simultneo de las tarjetas TCM Brushless DC. Si se dejan de recibir rdenes de control digitales, el sistema deber conmutar a control analgico. Esto garantiza redundancia en un sistema tan crtico como los motores. Instalar sensores de ultrasonidos para ayudar a realizar la planicacin a corto plazo y estudiar la necesidad de incorporar una IMU. Desarrollar e implantar algoritmos de navegacin de un punto a otro empleando coordenadas GPS y odometra. Las rutas debern ser optimizadas en funcin de los obstculos.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
109
Bibliografa
[1] P. Fiorini, Ground Mobility Systems for Planetary Exploration. Jet Propulsion Laboratory, California Institute of Technology, 2000. [2] P.S. Schenker, P. Pirjanian, B. Balaram, et al., Recongurable robots for all terrain exploration. Jet Propulsion Laboratory, California Institute of Technology, Septiembre 2000. [3] K. Iagnemma, A. Rzepniewski, S. Dubowsky, P. Pirjanian, T. Huntsberger y P. Schenker, Mobile robot kinematic recongurability for rough-terrain, Department of Mechanical Engineering, Massachusetts Institute of Technology y Science and Technology Development Section, Jet Propulsion Laboratory, California Institute of Technology. SPIE Proceedings Vol. 4196. [4] T. Thueer, A. Krebs y R. Siegwart, Comprehensive Locomotion Performance Evaluation of All-Terrain Robots, Autonomous Systems Lab, Swiss Federal Institute of Technology Zrich (ETHZ), 2006. [5] M. Takahashi, K. Yoneda, y S. Hirose, Rough Terrain Locomotion of a LegWheel Hybrid Quadruped Robot, Tokyo Institute of Technology. Proceedings of the IEEE International Conference on Robotics and Automation, 2006. [6] M. Raibert, K. Blankespoor, G. Nelson, R. Playter and the BigDog Team, BigDog, the Rough-Terrain Quadruped Robot, Boston Dynamics. Proceedings of the 17th World Congress The International Federation of Automatic Control. Sel, Corea del Sur, Julio 2008. [7] M. Lauria , Y. Piguet y R. Siegwart, Octopus: An Autonomous Wheeled Climbing Robot, Autonomous Systems Laboratory, Swiss Federal Institute of Technology (EPFL), 2002. [8] D.S. Apostolopoulos, Analytical Conguration of Wheeled Robotic Locomotion, Robotics Ph.D., The Robotics Institute, Carnegie Mellon University, Abril 2001. [9] P.W. Bartlett, D. Wettergreen y W. Whittaker, Design of the Scarab Rover for Mobility & Drilling in the Lunar Cold Traps, Carnegie Mellon University, 2008.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
110
I. M EMORIA l B IBLIOGRAFA
[10] D.Wettergreen, D. Jonak, D. Kohanbash, et al., Design and Experimentation of a Rover Concept for Lunar Crater Resource Survey, Carnegie Mellon University, 2009. [11] T.A. Hans, Development of a Recongurable Platform for All-Terrain, Master Thesis, Escuela Tcnica Superior de Ingeniera (ICAI), Universidad Ponticia Comillas y Technische Universitt Darmstadt, Septiembre 2008. [12] A. Santamara, Desarrollo de una tarjeta para el control de robots mviles, Proyecto Fin de Carrera, Escuela Tcnica Superior de Ingeniera (ICAI), Universidad Ponticia Comillas, Junio 2009. [13] P. Roa, Diseo e implementacin de un patinete elctrico. Complemento ecolgico al transporte pblico, Proyecto Fin de Carrera, Escuela Tcnica Superior de Ingeniera (ICAI), Universidad Ponticia Comillas, Junio 2009. [14] Philips Semiconductors, The I2 C-Bus Specication, Versin 2.1, Enero 2000. [15] Microchip Technology Inc., dsPIC30F3010/3011 Data Sheet, 2008. [16] Microchip Technology Inc., dsPIC30F Family Reference Manual, 2005. [17] Microchip Technology Inc., dsPIC30F3010/3011 Family Silicon Errata and Data Sheet Clarication, 2010. [18] B. Arronte, Sensor Fusion of Differential GPS and Inertial Measurement Unit to Measure Stat of a Test Vehicle, Proyecto Fin de Carrera, Escuela Tcnica Superior de Ingeniera (ICAI), Universidad Ponticia Comillas, Junio 2007. [19] J. Pozas, Sistemas de comunicacin comerciales, Apuntes de la asignatura Sistemas de Comunicacin, Escuela Tcnica Superior de Ingeniera (ICAI), Universidad Ponticia Comillas, 2009. [20] J. Gonzlez, Diseo de robots podos: Cube Revolutions, Escuela Politcnica Superior, Universidad Autnoma de Madrid. Semana de ciencia andaluza, Escuela Superior de Ingeniera de Cdiz, 2004. [21] NASA, Sojourner Rover. ltima consulta: 05/06/2010 http://www.nasa.gov/mission_pages/mars-pathnder/ [22] NASA Jet Propulsion Laboratory, LEMUR. ltima consulta: 05/06/2010 http://www-robotics.jpl.nasa.gov/systems/system.cfm?System=5 [23] Massachussets Institute of Technology, 3D One-Leg Hopper. ltima consulta: 05/06/2010 http://www.ai.mit.edu/projects/leglab/robots/3D_hopper/3D_hopper.html
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
111
I. M EMORIA l B IBLIOGRAFA
[24] Boston Dynamics, RHex. ltima consulta: 05/06/2010 http://www.bostondynamics.com/robot_rhex.html [25] Wikipedia, RHex. ltima consulta: 05/06/2010 http://en.wikipedia.org/wiki/Rhex [26] University of Minnesota, Loper. ltima consulta: 05/06/2010 http://distrob.cs.umn.edu/loper.php [27] Futaba Corporation, Fabricante del servo Futaba S3001. ltima consulta: 15/06/2010 http://www.futaba-rc.com [28] Hitec Robotics, Fabricante del servo digital HSR 5990TG. ltima consulta: 15/06/2010 http://www.hitecrobotics.com [29] Maxon Motor, Pgina web del fabricante del motor EC-powermax 30 y de la reductora empleada. ltima consulta: 15/06/2010 http://www.maxonmotor.com [30] Digi, Pgina web del mdulo Wi-Fi Digi Connect Wi-Me. ltima consulta: 15/06/2010 http://www.digi.com/products/embeddedsolutions/digiconnectwime.jsp#specs
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
112
PARTE II
TML
ESTUDIO ECONMICO
de la robtica mvil para uso civil es an incipiente y su tasa de crecimiento, lenta. Sin embargo, las expectativas para los prximos aos son ms halageas. Se espera que las ventas del sector despeguen apoyadas en los avances tecnolgicos, que permitirn construir robots ms sencillos y fciles de manejar, capaces de desempear tareas que liberen de trabajo a los seres humanos.
L MERCADO
La predisposicin del pblico a adquirir este tipo de dispositivos es, en general, buena, gracias a imagen que se han venido forjando en el mundo cinematogrco los robots domsticos. Posiblemente por este motivo, los primeros robots mviles que han conseguido penetrar en el mercado han sido los aspiradores autnomos, como Roomba de la compaa iRobot. A la espera de que el mercado de la robtica mvil pueda explotar denitivamente, este es el momento para desarrollar prototipos que satisfagan las demandas de los posibles compradores e intentar consolidarse en el sector antes de que proliferen muchas compaas que exacerben la rivalidad interna. Las aplicaciones de un robot todoterreno son casi innitas y existe un gran nmero de clientes potenciales. Algunos ejemplos representativos seran los siguientes: En el sector pblico, los servicios de emergencia podran usarlo para buscar desaparecidos en terrenos abiertos y proveerlos de material de supervivencia mientras llegan los efectivos de rescate. En el sector de la construccin podra reducir costes si se utiliza como sistema de transporte de material. En el sector agrcola se podra emplear para controlar el estado de los campos de cultivo y realizar tareas de mantenimiento sencillas. En el sector seguridad podra usarse como sistema complementario o sustitutivo de los vigilantes.
La clave para conseguir posicionarse en un mercado de estas caractersticas suele radicar en ser el primero en ofrecer un producto exclusivo orientado a un perl de cliente determinado y conseguir mantener esta ventaja a lo largo del tiempo. El robot que se est desarrollando puede ser pionero en cualquiera de los sectores que se han citado. Todo producto experimenta cuatro etapas diferenciadas durante su vida como se representa en la Figura 57. Durante la etapa de introduccin, que es en la que se
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
114
encuentra el producto actualmente, las ventas no son sucientes para cubrir los gastos de desarrollo, por lo que se producirn prdidas. Adems, habr que hacer modicaciones Tiempo en el diseo para adaptarlo a los requerimientos de los clientes.
Introd.
Crecimiento
Madurez
Declive
Ben
efic ios
Tiempo
Figura 57. Ciclo de vida de un producto Una vez dado a conocer el producto en el mercado, la demanda comenzar a crecer por lo que ser necesario invertir en la mejora de los procesos productivos con el n de poder satisfacerla ecientemente. Afortunadamente, debido a la curva de la experiencia, que hace que cada vez que se dobla la produccin total acumulada de un producto los costes de produccin se vean reducidos en una determinada cantidad, las prdidas se irn reduciendo. Una vez consolidado en el mercado, se estabilizarn las ventas en la etapa de madurez, en la cual se empezarn a reportar benecios porque los costes de produccin seguirn disminuyendo. Finalmente, llegar el declive del producto con su obsolescencia. En conclusin, la robtica mvil es un sector con expectativas de futuro. Para conseguir triunfar en este nuevo mercado ahora es el momento de denir qu demanda la sociedad y empezar a trabajar en el desarrollo de prototipos. La gran ventaja de este robot es su versatilidad, que le permite dirigirse a un amplio perl de clientes.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
115
PARTE III
TML
Precauciones
LA HORA de manejar el robot hay que tener en cuenta una serie de consideraciones
de seguridad. Siga estas instrucciones al pie de la letra para evitar accidentes ya que el sistema utiliza tensiones y corrientes que pueden suponer un riesgo para la salud. 1. Antes de conectar las bateras, asegrese de que no existen cortocircuitos con un polmetro, en especial en el circuito de potencia. 2. Verique que la tensin de cada una de las bateras no sea menor de 15 V. En caso contrario, crguelas antes de iniciar el sistema. Si la tensin es inferior a 13,5 V no las cargue bajo ningn concepto, puesto que pueden explotar. Reemplcelas por unas nuevas. 3. Una vez que la tensin sea correcta, conecte las bateras en serie y active el interruptor. Si el LED de la TCS3 no se ilumina apague el robot inmediatamente. 4. Espere unos 30 segundos hasta que el mdulo Wi-Fi se conecte con el router. Sabr que esto ha sucedido cuando la luz verde del mdulo parpadee rpidamente. 5. Llegados a este punto el robot se puede operar con seguridad con el Programa de pruebas de las cinemticas o con cualquier otro que se haya desarrollado. 6. Para apagar el sistema, abra el interruptor y, si no va a usar el sistema en un tiempo, desconecte fsicamente las bateras del resto del circuito para evitar cortocircuitos.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
117
PARTE IV
TML
Captulo 1 Introduccin
documento pretende conseguir que un usuario se familiarice con el driver que permite controlar los dispositivos conectados al bus I2 C con el n de que sea capaz de programar aplicaciones en C++ utilizando una serie de funciones que gestionan las comunicaciones con los esclavos.
L PRESENTE
1.1.
Archivos necesarios
Para poder utilizar el driver de I2 C en un proyecto es necesario incluir los archivos CComunicaI2C.cpp y CComunicaI2C.h, adems del driver de la TCS3, denominado Comm, y las clases que controlan el puerto serie y las comunicaciones va Wi-Fi, llamadas serial y wi respectivamente.
1.2.
Para comenzar una transmisin, lo primero que hay que hacer es crear una variable de tipo CComunicaI2C. De ahora en adelante dicha funcin se denominar comunica. Una vez hecho esto, todas las instrucciones se que se quieran enviar deben ir encerradas entre las funciones inicio() y comunica().
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
119
Si alguna de las comunicaciones espera respuesta, sta se procesa y se almacena en variables privadas de la clase que se pueden leer con unas funciones habilitadas a tal efecto que se explican ms adelante.
1.3.
Direcciones
Para facilitar el acceso a los esclavos, se han denido unas constantes con las direcciones de cada uno de los dispositivos, las cuales se indican a continuacin:
// Direcciones #define DIR_TCS3 0x08 #define DIR_BRUSHLESS_DI #define DIR_BRUSHLESS_DD #define DIR_BRUSHLESS_TI #define DIR_BRUSHLESS_TD #define DIR_GPS 0x0D
// // // // // //
1.4.
Otras constantes
Adems de las direcciones se han denido otras dos constantes que indican el sentido de giro de los motores y otras dos para la latitud y la longitud.
// Sentido de giro de los motores #define AVANZAR 1 #define RETROCEDER 0 // Coordenadas GPS #define LATITUD 0 #define LONGITUD 1
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
120
Captulo 2 Funciones
2.1. Funcin ping
Todos los esclavos tienen implementada una funcin ping para saber si estn activos en el bus. Los prototipos de las funciones asociadas son:
void PingI2C(const BYTE &b_direccion); // Funcin de peticin bool ComprobarPingI2C(const BYTE &b_direccion); // Funcin de lectura
Cdigo 45. Prototipos de las funciones asociadas al ping PingI2C: Realiza una peticin de ping a la direccin deseada. ComprobarPingI2C: Devuelve true si el ltimo ping a la direccin indicada fue satisfactorio y false en caso contrario.
2.1.1.
Ejemplo
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
121
2.2.
2.2.1.
La funcin DCMotorI2C permite denir el sentido de giro y el factor de servicio de la seal de PWM que se ha de aplicar al motor. Toma tres parmetros: Direccin del esclavo Factor de servicio entre 0 y 2000, donde 0 equivale a un duty-cycle del 0 % y 2000 a un 100 %. Sentido de giro: AVANZAR o RETROCEDER.
void DCMotorI2C(const BYTE &b_direccion, const unsigned int &ui_duty_cycle, const BYTE &b_sentido_giro);
2.2.1.1.
Ejemplo
Cdigo 48. Ejemplo de uso de la funcin que ja el factor de servicio de los motores
2.2.2.
Para obtener la velocidad de los motores simplemente hace falta llamar a la funcin LeerVelocidadI2C indicando la direccin y acceder al resultado mediante GetVelocidadI2C. 2.2.2.1. Ejemplo
Cdigo 49. Ejemplo de uso de las funciones de lectura de la velocidad de los motores
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
122
2.2.3.
Cdigo 50. Ejemplo de uso de las funciones de lectura de la corriente de los motores
2.3.
El GPS devuelve las coordenadas y otras variables asociadas que permiten determinar la validez de la medida, la fecha y la hora.
2.3.1.
Coordenadas
Existe una nica funcin de peticin asociada a las coordenadas GPS. Sin embargo, como devuelve mucha informacin, se han denido varias funciones para acceder a ella. GetCoordenadasGPS: Devuelve un vector de double en el que el primer elemento es la latitud y el segundo, la longitud, ambas en grados GetLatitudGPS: Devuelve la latitud en grados en formato double. GetLongitudGPS: Devuelve un double con la longitud en grados. GetSatlitesGPS: Devuelve el nmero de satlites con el que se han calculado las coordenadas. Se recuerda que con menos de 4 satlites la medida no es correcta en ningn caso y que a partir de 8, se puede considerar que el error es relativamente pequeo. PosicionGPSValida: Indica si las coordenadas proporcionadas por el GPS son vlidas (true) o no (false).
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
123
// Funcin de peticin void LeerCoordenadasGPS(); // Funciones de lectura de las variables std::vector<double> GetCoordenadasGPS() const; double GetLatitudGPS() const; double GetLongitudGPS() const; unsigned int GetSatelitesGPS() const; bool PosicionGPSValida() const;
Cdigo 51. Prototipos de las funciones asociadas a las coordenadas 2.3.1.1. Ejemplo
Un ejemplo sencillo en el que se usan varias de las funciones sera el siguiente, en el que se comprueba si la medida del GPS es vlida y, en caso armativo, se leen la latitud y la longitud.
comunica.inicio(); comunica.LeerCoordenadasGPS(); comunica.comunica(); if (PosicionGPSValida()) { double latitud = GetLatitud(); double longitud = GetLongitud(); }
2.3.2.
Fecha
Existe una nica funcin para pedir la fecha, pero se puede leer en dos formatos distintos, como cadena de caracteres con estructura dd/mm/aa o separado en tres variables distintas de tipo unsigned int. En este ltimo caso, la fecha se devuelve a travs de los parmetros.
void LeerFechaGPS(); std::string GetFechaGPS() const; void GetHoraGPS(unsigned int &ui_dd, unsigned int &ui_mm, unsigned int &ui_aa);
Cdigo 53. Prototipos de las funciones para obtener la fecha del GPS
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
124
2.3.2.1.
Ejemplo
2.3.3.
Hora
Al igual que en el caso anterior, la fecha se devuelve en dos formatos. La cadena de caracteres tiene la estructura hh:mm:ss.
void LeerHoraGPS(); std::string GetHoraGPS() const; void GetHoraGPS(unsigned int &ui_hh, unsigned int &ui_mm, unsigned int &ui_ss);
Cdigo 55. Prototipos de las funciones para obtener la hora del GPS 2.3.3.1. Ejemplo
comunica.inicio(); comunica.LeerHoraGPS(); comunica.comunica(); unsigned int hora, minutos, segundos; GetHoraGPS(hora, minutos, segundos);
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
125
PARTE V
TML
1.
Introduccin
E HA PROGRAMADO
una aplicacin para probar las cuatro cinemticas posibles y controlar el robot remotamente a travs de un enlace Wi-Fi. Su uso es bastante intuitivo. La Figura 58 muestra la interfaz de usuario.
Figura 58. Interfaz de usuario del programa de pruebas de las cinemticas Los cuadros de texto grises son de slo lectura e indican la velocidad de los motores en porcentaje o el ngulo de giro de los servos en grados. La barra inferior muestra la carga de la batera tanto en voltios como en porcentaje de la barra de progreso. Para ello, se ha conectado la batera a un conversor A/D de la TCS3 mediante un divisor resistivo.
2.
Cuando la aplicacin arranca, los pines de la TCS3 se conguran automticamente. No obstante, se puede repetir el proceso en caso de necesidad pulsando el botn Congurar. Los botones Start y Stop habilitan y deshabilitan los motores respectivamente. Cambiar modica la conguracin de todos los servos y motores en funcin de la cinemtica elegida y los valores introducidos en los cuadros de potencia y direccin. Tambin tiene en cuenta el ngulo en grados de los servos superiores de la plataforma
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
127
que se pueden modicar en los cuadros de texto habilitados a tal efecto en la esquina superior derecha de la interfaz. El campo de la derecha controla el ngulo delantero y el de la izquierda, el trasero. Los botones indicados con + y tienen el mismo efecto que Cambiar salvo porque slo incrementan o reducen la potencia y la direccin en una unidad. Finalmente, el botn Detener enva la seal de parar a los motores pero sin deshabilitarlos.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
128
PARTE VI
TML
CDIGO FUENTE
I2C.h
------------------------------------------------------------------------------------------------- INTERFAZ DEL MDULO I2C (Inter-Integrated Circuit) ----------------------------------------------------------------------------------------------Archivo: I2C.h Descripcin: Mdulo encargado de controlar las comunicaciones a travs del bus I2C. Versin: 1.0.0 Fecha: 07/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#ifndef _I2C_H #define _I2C_H // ---------------------------------------------------------------------------------#define _MAESTRO_ // Opciones de compilacin: _MAESTRO_ y _ESCLAVO_
// Ruta: C:\Archivos de Programa\Microchip\MPLAB C30\support\dsPIC30F\h\p30F3010.h #include "p30f3010.h" // ---------------------------------------------------------------------------------// Frecuencias de trabajo #define FCY 29480000 // Oscilador: FRC (7.37 MHz) PLL x16 -> FCY = 7.37e6*(16/4) #define FSCL 1000000 // Velocidad de transmisin del bus I2C en Hz (mx. 1 MHz) // Sentido del flujo de informacin #define MAESTRO_TR 0 #define MAESTRO_REC 1 #define ESCLAVO_TR 1 #define ESCLAVO_REC 0
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
130
// Tipo de informacin enviada #define DIRECCION 0 #define DATOS 1 // Respuesta esperada? (S/N) #define RESP_SI 1 #define RESP_NO 0 // Valores lgicos #define SI 1 #define NO 0 // Tamao de los vectores y colas #define TAM_TR_I2C 50 // Cola de transmisin #define TAM_REC_I2C 75 // Cola de recepcin // Prioridad de las interrupciones #define PR_INT_I2C 6 // Direcciones #define DIR_TCS3 0x08 #define DIR_BRUSHLESS_DI #define DIR_BRUSHLESS_DD #define DIR_BRUSHLESS_TI #define DIR_BRUSHLESS_TD #define DIR_GPS 0x0D // Instrucciones #define PING 13 // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PBLICAS ---------------------// ---------------------------------------------------------------------------------#ifdef _MAESTRO_ void InicializarI2C(void); void EnlaceI2C(unsigned int *ui_colaRx, unsigned int *ui_indiceRx); void PonerI2CEnColaUART(unsigned int *ui_colaTx, unsigned int *ui_indiceTx); #elif defined _ESCLAVO_ void InicializarI2C(unsigned char uc_direccion); void ProcesarMensajeI2C(void); #endif #endif
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
131
1.2.
// // // // // // // // // // // // // // // //
I2C.c
------------------------------------------------------------------------------------------------------- MDULO I2C (Inter-Integrated Circuit) -----------------------------------------------------------------------------------------------------Archivo: I2C.c Descripcin: Mdulo encargado de controlar las comunicaciones a travs del bus I2C. Versin: 1.0.0 Fecha: 07/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "I2C.h" // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PRIVADAS ---------------------// ---------------------------------------------------------------------------------#ifdef _MAESTRO_ inline void ContinuarRecepcionI2C(void); inline void TerminarRecepcionI2C(void); inline void HabilitarInterrupcionesMaestroI2C(void); inline void DeshabilitarInterrupcionesMaestroI2C(void); void __attribute__((__interrupt__)) _MI2CInterrupt(void); #elif defined _ESCLAVO_ inline void HabilitarInterrupcionesEsclavoI2C(void); inline void DeshabilitarInterrupcionesEsclavoI2C(void); void __attribute__((__interrupt__)) _SI2CInterrupt(void); void PonerEnColaTransmisionI2C(unsigned char uc_dato); unsigned char SacarDeColaTransmisionI2C(void); void PonerEnColaRecepcionI2C(unsigned char uc_dato); unsigned char SacarDeColaRecepcionI2C(void); #endif // ---------------------------------------------------------------------------------// -------------------------- VARIABLES GLOBALES AL MDULO -------------------------// ---------------------------------------------------------------------------------static static static static static unsigned unsigned unsigned unsigned unsigned char uc_cola_transmision[TAM_TR_I2C]; char uc_cola_recepcion[TAM_REC_I2C]; int ui_icabeza_tr = 0; int ui_icola_tr = 0; int ui_icabeza_rec = 0;
#ifdef _MAESTRO_ static unsigned int ui_estado_maestroI2C = 0; static unsigned u_comunicacionI2C_terminada = SI;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
132
#elif defined _ESCLAVO_ static unsigned char uc_direccion_esclavo; static unsigned int ui_icola_rec = 0; static unsigned u_procesar_mensaje_habilitado = SI; #endif // ---------------------------------------------------------------------------------// ------------------------------ FUNCIONES DEL MAESTRO ----------------------------// ---------------------------------------------------------------------------------#ifdef _MAESTRO_ /* Nombre: InicializarI2C * Descripcin: Funcin de inicializacin del mdulo maestro del bus I2C. Como usa la configuracin de la UART para evitar falsos inicios de comunicacin, * debe llamarse antes que la funcin de inicializacin de dicho mdulo. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void InicializarI2C(void) { U1MODEbits.ALTIO = 0; // Utilizar los pines SDA y SCL para la UART U1MODEbits.UARTEN = 1; // Habilitar el mdulo UART que tiene ms prioridad a la // hora de usar los pines SDA y SCL que I2C para prevenir // falsos inicios de comunicacin en la conexin // Velocidad de transmisin (mx. 1 MHz) if (FSCL >= 1000000) I2CBRG = 2; // Los valores 0 y 1 no estn permitidos else I2CBRG = (FCY/FSCL - FCY/1111111) - 1; // Configuracin del mdulo I2C // (Los bits no modificados permanecen en el estado inicial) I2CCONbits.DISSLW = 1; // Deshabilitar el control del slew-rate // (Habilitar slo para 400 kHz) I2CCONbits.A10M = 0; // Direcciones de 7 bits (A10M = 1 para 10 bits) I2CCONbits.I2CSIDL = 0; // Funcionar normalmente cuando el microcontrolador // entre en suspensin I2CCONbits.I2CEN = 1; // Habilitar el mdulo I2C y // configurar los puertos SDA y SCL U1MODEbits.UARTEN = 0; // Desactivar la UART // // // // Prioridad de la interrupcin del maestro (mx. 7 - mn. 1, 4 por defecto) Habilitar la atencin de las interrupciones del maestro
// ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
133
/* Nombre: ContinuarRecepcionI2C * Descripcin: Funcin que configura el maestro para seguir recibiendo y enva ACK para pedir al esclavo el siguiente byte. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void ContinuarRecepcionI2C(void) { I2CCONbits.ACKDT = 0; // Configurar ACK como secuencia de confirmacin I2CCONbits.ACKEN = 1; // Enviar la secuencia de confirmacin. // Borrado por HW al terminar } // ---------------------------------------------------------------------------------/* Nombre: TerminarRecepcionI2C * Descripcin: Funcin que enva NACK para indicar al esclavo que deje de enviar datos. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void TerminarRecepcionI2C(void) { I2CCONbits.ACKDT = 1; // Configurar NACK como secuencia de confirmacin I2CCONbits.ACKEN = 1; // Enviar la secuencia de confirmacin. // Borrado por HW al terminar } // ---------------------------------------------------------------------------------/* Nombre: HabilitarInterrupcionesMaestroI2C * Descripcin: Habilita las interrupciones del mdulo maestro del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void HabilitarInterrupcionesMaestroI2C(void) { IEC0bits.MI2CIE = 1; } // ---------------------------------------------------------------------------------/* Nombre: DeshabilitarInterrupcionesMaestroI2C * Descripcin: Deshabilita las interrupciones del mdulo maestro del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void DeshabilitarInterrupcionesMaestroI2C(void) { IEC0bits.MI2CIE = 0; } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
134
/* Nombre: _MI2CInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a interrupcin que gestiona el protocolo I2C del mdulo maestro. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void __attribute__((interrupt, no_auto_psv)) _MI2CInterrupt(void) { static unsigned char uc_espera_respuesta; static unsigned char uc_direccion_esclavo; static unsigned char uc_num_caracteres; static unsigned char uc_caracteres_transmitidos = 0; static unsigned u_cabecera_recibida = NO; unsigned char uc_dato_recibido; IFS0bits.MI2CIF = 0; // Borrar la bandera de la interrupcin
// Mquina de estados switch (ui_estado_maestroI2C) { case 0: // Bus inactivo // No hay break para que cuando se fuerce una interrupcin por software // en este estado comience la comunicacin inmediatamente case 1: // Iniciar la comunicacin como maestro si hay datos en cola if (ui_icabeza_tr != ui_icola_tr) { I2CCONbits.SEN = 1; // Enviar la secuencia de inicio. // Borrado por HW al terminar ui_estado_maestroI2C = 2; } else { u_comunicacionI2C_terminada = SI; ui_estado_maestroI2C = 0; } break; case 2: // Enviar la direccin del esclavo e // indicar que el maestro va a transmitir uc_direccion_esclavo = uc_cola_transmision[ui_icola_tr++]; uc_espera_respuesta = uc_cola_transmision[ui_icola_tr++]; uc_num_caracteres = uc_cola_transmision[ui_icola_tr]; I2CTRN = (uc_direccion_esclavo << 1) | MAESTRO_TR; ui_estado_maestroI2C = 3; break; case 3: // Enviar el cdigo de instruccin y sus parmetros asociados if (!I2CSTATbits.ACKSTAT) // Si el esclavo ha respondido con un ACK { I2CTRN = uc_cola_transmision[ui_icola_tr++]; uc_caracteres_transmitidos++; // Datos ms cabecera if (uc_caracteres_transmitidos > uc_num_caracteres) { uc_caracteres_transmitidos = 0; if (uc_espera_respuesta) ui_estado_maestroI2C = 4; else
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
135
ui_estado_maestroI2C = 8; } } else // ERROR: Terminar la comunicacin y dejar el bus inactivo { I2CCONbits.PEN = 1; // Enviar la secuencia de fin. // Borrado por HW al terminar ui_estado_maestroI2C = 1; } break; case 4: // Reiniciar la comunicacin para que el maestro pueda recibir if (!I2CSTATbits.ACKSTAT) // Si el esclavo ha respondido con un ACK { I2CCONbits.RSEN = 1; // Enviar la secuencia de reinicio. // Borrado por HW al terminar ui_estado_maestroI2C = 5; } else // ERROR: Terminar la comunicacin y comprobar si hay datos nuevos { I2CCONbits.PEN = 1; // Enviar la secuencia de fin. // Borrado por HW al terminar ui_estado_maestroI2C = 1; } break; case 5: // Enviar la direccin del esclavo e // indicar que el maestro espera respuesta I2CTRN = (uc_direccion_esclavo << 1) | MAESTRO_REC; ui_estado_maestroI2C = 6; break; case 6: // Indicar que el maestro est listo para recibir I2CCONbits.RCEN = 1; ui_estado_maestroI2C = 7; break; case 7: // Almacenar la respuesta en la cola de recepcin uc_dato_recibido = I2CRCV; if (!u_cabecera_recibida) { uc_num_caracteres = uc_dato_recibido; u_cabecera_recibida = SI; } else uc_cola_recepcion[ui_icabeza_rec++] = uc_dato_recibido; uc_caracteres_transmitidos++; if (uc_caracteres_transmitidos > uc_num_caracteres) { TerminarRecepcionI2C(); uc_caracteres_transmitidos = 0; u_cabecera_recibida = NO; ui_estado_maestroI2C = 8; } else { ContinuarRecepcionI2C(); ui_estado_maestroI2C = 6; } break;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
136
case 8: // Terminar la comunicacin a travs del bus I2C I2CCONbits.PEN = 1; // Enviar la secuencia de fin. // Borrado por HW al terminar ui_estado_maestroI2C = 1; break; } } // ---------------------------------------------------------------------------------/* Nombre: EnlaceI2C * Descripcin: Funcin que aade datos a la cola de transmisin y comienza una comunicacin por I2C. * Argumentos: Ninguno * * Valor devuelto: Ninguno */ void EnlaceI2C(unsigned int *ui_colaRx, unsigned int *ui_indiceRx) { int i; unsigned char uc_num_caracteres = 0; u_comunicacionI2C_terminada = NO; uc_num_caracteres = ui_colaRx[(*ui_indiceRx)++]; for (i = 0; i < uc_num_caracteres; i++) uc_cola_transmision[ui_icabeza_tr++] = ui_colaRx[(*ui_indiceRx)++]; if (ui_estado_maestroI2C == 0) IFS0bits.MI2CIF = 1; // // // // // Si el bus est inactivo, forzar una interrupcin. Esta condicin es innecesaria porque actualmente no se puede pedir una nueva comunicacin por I2C hasta que el driver haya recibido la respuesta a la anterior.
} // ---------------------------------------------------------------------------------/* Nombre: PonerI2CEnColaUART * Descripcin: Funcin que pone las respuestas recibidas por el bus I2C en la cola de transmisin del puerto serie para enviarlas al PC. * * Argumentos: unsigned int *ui_colaTx: Puntero a la cola de transmisin * unsigned int *ui_indiceTx: Puntero al ndice de la cola * Valor devuelto: Ninguno * */ void PonerI2CEnColaUART(unsigned int *ui_colaTx, unsigned int *ui_indiceTx) { int i; while (!u_comunicacionI2C_terminada); if (ui_icabeza_rec > 0) { ui_colaTx[(*ui_indiceTx)++] = ui_icabeza_rec; for (i = 0; i < ui_icabeza_rec; i++) { ui_colaTx[(*ui_indiceTx)++] = uc_cola_recepcion[i];
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
137
if (ui_colaTx[(*ui_indiceTx)-1] == 92) ui_colaTx[(*ui_indiceTx)++] = 92; } } ui_icabeza_tr = 0; ui_icola_tr = 0; ui_icabeza_rec = 0; } // ---------------------------------------------------------------------------------// ------------------------------ FUNCIONES DEL ESCLAVO ----------------------------// ---------------------------------------------------------------------------------#elif defined _ESCLAVO_ /* Nombre: InicializarI2C * Descripcin: Funcin de inicializacin del mdulo esclavo del bus I2C. Como usa la configuracin de la UART para evitar falsos inicios de comunicacin, * debe llamarse antes que la funcin de inicializacin de dicho mdulo. * * Argumentos: unsigned char uc_direccion: Direccin del dispositivo esclavo * * Valor devuelto: Ninguno */ void InicializarI2C(unsigned char uc_direccion) { U1MODEbits.ALTIO = 0; // Utilizar los pines SDA y SCL para la UART U1MODEbits.UARTEN = 1; // Habilitar el mdulo UART que tiene ms prioridad // a la hora de usar los pines SDA y SCL que I2C // para prevenir falsos inicios de comunicacin // en la conexin // Direccin como esclavo uc_direccion_esclavo = uc_direccion; I2CADD = uc_direccion_esclavo; // Configuracin del mdulo I2C // (Los bits no modificados permanecen en el estado inicial) I2CCONbits.STREN = 1; // Habilitar la suspensin de la transmisin // en la recepcin I2CCONbits.GCEN = 0; // Deshabilitar las interrupciones para mensajes // de difusin o broadcast I2CCONbits.DISSLW = 1; // Deshabilitar el control del slew-rate // (Habilitar slo para 400 kHz) I2CCONbits.A10M = 0; // Direcciones de 7 bits (A10M = 1 para 10 bits) I2CCONbits.IPMIEN = 0; // No responder a cualquier direccin vlida // (Activar para repetidores) I2CCONbits.SCLREL = 1; // Transmisin inicialmente despierta I2CCONbits.I2CSIDL = 0; // Funcionar normalmente cuando el microcontrolador // entre en suspensin I2CCONbits.I2CEN = 1; // Habilitar el mdulo I2C y // configurar los puertos SDA y SCL U1MODEbits.UARTEN = 0; // Desactivar la UART // // // // Prioridad de la interrupcin del esclavo (mx. 7 - mn. 1, 4 por defecto) Habilitar la atencin de las interrupciones del esclavo
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
138
I2CSTATbits.I2COV = 0; }
// ---------------------------------------------------------------------------------/* Nombre: HabilitarInterrupcionesEsclavoI2C * Descripcin: Habilita las interrupciones del mdulo esclavo del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void HabilitarInterrupcionesEsclavoI2C(void) { IEC0bits.SI2CIE = 1; } // ---------------------------------------------------------------------------------/* Nombre: DeshabilitarInterrupcionesEsclavoI2C * Descripcin: Deshabilita las interrupciones del mdulo esclavo del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void DeshabilitarInterrupcionesEsclavoI2C(void) { IEC0bits.SI2CIE = 0; } // ---------------------------------------------------------------------------------/* Nombre: _SI2CInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a interrupcin que gestiona el protocolo I2C del mdulo esclavo. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void __attribute__((interrupt, no_auto_psv)) _SI2CInterrupt(void) { static unsigned char uc_num_caracteres; static unsigned char uc_caracteres_transmitidos = 0; static unsigned u_cabecera_recibida = NO; static unsigned u_direccion_recibida = NO; unsigned char uc_dato_recibido; IFS0bits.SI2CIF = 0; I2CSTATbits.I2COV = 0; // Borrar la bandera de la interrupcin // Borrar la bandera de desbordamiento del // buffer de lectura. Puede estar activa por // el envo de mensajes a otros esclavos.
// Direccin del dispositivo reconocida. Preparado para recibir if (I2CSTATbits.R_W == ESCLAVO_REC && I2CSTATbits.D_A == DIRECCION) { uc_dato_recibido = I2CRCV; // Leer la direccin para liberar // el buffer de lectura u_procesar_mensaje_habilitado = NO; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
139
// Datos recibidos else if (I2CSTATbits.R_W == ESCLAVO_REC && I2CSTATbits.D_A == DATOS) { // Como STREN = 1, la transmisin se suspende automticamente si al recibir // un nuevo dato I2CRCV sigue lleno (RBF = 1) con el del envo anterior. uc_dato_recibido = I2CRCV; I2CCONbits.SCLREL = 1; // Reanudar la transmisin por si est suspendida if (!u_cabecera_recibida) { uc_num_caracteres = uc_dato_recibido; u_cabecera_recibida = SI; } else PonerEnColaRecepcionI2C(uc_dato_recibido); uc_caracteres_transmitidos++; if (uc_caracteres_transmitidos > uc_num_caracteres) { uc_caracteres_transmitidos = 0; u_cabecera_recibida = NO; u_procesar_mensaje_habilitado = SI; } } // Direccin reconocida. Se puede enviar la respuesta else if (I2CSTATbits.R_W == ESCLAVO_TR) { // La transmisin se suspende automticamente para preparar la respuesta if (!u_direccion_recibida) { uc_dato_recibido = I2CRCV; ProcesarMensajeI2C(); uc_num_caracteres = uc_cola_transmision[ui_icola_tr]; u_direccion_recibida = SI; } if (uc_caracteres_transmitidos > uc_num_caracteres) { uc_caracteres_transmitidos = 0; u_direccion_recibida = NO; } else { I2CTRN = SacarDeColaTransmisionI2C(); I2CCONbits.SCLREL = 1; // Reanudar la transmisin uc_caracteres_transmitidos++; } } } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
140
/* Nombre: ProcesarMensajeI2C * Descripcin: Funcin que procesa todas las instrucciones recibidas por I2C. Como usa variables globales al mdulo y puede ser llamada desde * la rutina de interrupcin del esclavo, para responder inmediatamente * a las instrucciones que lo soliciten (lo cual obliga a procesar todo * lo que estuviese previamente en la cola), o ser atendida en el bucle * de scan, debe ser reentrante. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void ProcesarMensajeI2C(void) { unsigned char uc_instruccion; DeshabilitarInterrupcionesEsclavoI2C(); if (u_procesar_mensaje_habilitado) { while (ui_icola_rec != ui_icabeza_rec) { uc_instruccion = SacarDeColaRecepcionI2C(); switch (uc_instruccion) { case PING: // Ping PonerEnColaTransmisionI2C(2); // Nmero de caracteres PonerEnColaTransmisionI2C(uc_direccion_esclavo); // Direccin PonerEnColaTransmisionI2C(7); // Respuesta break; } } } HabilitarInterrupcionesEsclavoI2C(); } // ---------------------------------------------------------------------------------/* Nombre: PonerEnColaTransmisionI2C * Descripcin: Funcin que coloca un dato en la cola de transmisin. * Argumentos: unsigned char uc_dato: Caracter que se quiere poner en cola * Valor devuelto: Ninguno * */ void PonerEnColaTransmisionI2C(unsigned char uc_dato) { uc_cola_transmision[ui_icabeza_tr] = uc_dato; ui_icabeza_tr++; if (ui_icabeza_tr == TAM_TR_I2C) ui_icabeza_tr = 0; } // ---------------------------------------------------------------------------------// Gestin del rebose del ndice
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
141
/* Nombre: SacarDeColaTransmisionI2C * Descripcin: Funcin que obtiene un dato de la cola de transmisin. * Argumentos: Ninguno * Valor devuelto: unsigned char: Caracter recuperado de la cola * */ unsigned char SacarDeColaTransmisionI2C(void) { unsigned char uc_dato; uc_dato = uc_cola_transmision[ui_icola_tr]; ui_icola_tr++; if (ui_icola_tr == TAM_TR_I2C) ui_icola_tr = 0; return uc_dato; } // ---------------------------------------------------------------------------------/* Nombre: PonerEnColaRecepcionI2C * Descripcin: Funcin que coloca un dato en la cola de recepcin. * Argumentos: unsigned char uc_dato: Caracter que se quiere poner en cola * * Valor devuelto: Ninguno */ void PonerEnColaRecepcionI2C(unsigned char uc_dato) { uc_cola_recepcion[ui_icabeza_rec] = uc_dato; ui_icabeza_rec++; if (ui_icabeza_rec == TAM_REC_I2C) ui_icabeza_rec = 0; } // ---------------------------------------------------------------------------------/* Nombre: SacarDeColaRecepcionI2C * Descripcin: Funcin que obtiene un dato de la cola de recepcin. * Argumentos: Ninguno * Valor devuelto: unsigned char: Caracter recuperado de la cola * / * unsigned char SacarDeColaRecepcionI2C() { unsigned char uc_dato; uc_dato = uc_cola_recepcion[ui_icola_rec]; ui_icola_rec++; if (ui_icola_rec == TAM_REC_I2C) ui_icola_rec = 0; return uc_dato; } #endif // Gestin del rebose del ndice // Gestin del rebose del ndice // Gestin del rebose del ndice
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
142
CComunicaI2C.h
----------------------------------------------------------------------------------------------- INTERFAZ DEL DRIVER DE LA TCS3 CON COMUNICACIONES I2C ---------------------------------------------------------------------------------------------Archivo: CComunicaI2C.h Descripcin: Clase encargada de facilitar la comunicacin serie entre el usuario y la tercera versin de la Tarjeta de Control de Sensores (TCS3), con el fin de que pueda controlarse sin conocer la programacin de los microcontroladores. Permite comunicarse con otros dispositivos a travs del bus I2C. Versin: 1.0.0 Fecha: 08/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#pragma once // ---------------------------------------------------------------------------------#include #include #include #include #include #include "Comm.h" "Parametros.h" <string> <vector> <map> <time.h>
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
143
// Direcciones #define DIR_TCS3 0x08 #define DIR_BRUSHLESS_DI #define DIR_BRUSHLESS_DD #define DIR_BRUSHLESS_TI #define DIR_BRUSHLESS_TD #define DIR_GPS 0x0D
// Instrucciones comunes a los micros y al driver #define PING 13 // Instrucciones en los microcontroladores // Motores Brushless DC #define INST_DC 0 #define INST_VELOCIDAD 1 #define INST_CORRIENTE 2 // GPS #define INST_COORD 0 #define INST_HORA 1 #define INST_FECHA 2 // Instrucciones del driver #define VEL_BRUSHLESS 0 #define INT_BRUSHLESS 1 #define COORDENADAS_GPS 2 #define HORA_GPS 3 #define FECHA_GPS 4 // Parmetros de los motores #define REDUCTORA 86 #define PARES_POLOS 2 #define POS_HALL 6 // Nmero de posiciones de los sensores de efecto Hall #define T_REBOSE_ENCODER 0.5 // Tiempo de rebose del timer que controla el encoder // Sentido de giro de los motores #define AVANZAR 1 #define RETROCEDER 0 // ndices de los mensajes del GPS #define LATITUD 0 #define LONGITUD 1 // ---------------------------------------------------------------------------------class CComunicaI2C : public Comm { private: // Variables privadas std::vector<BYTE> vEsperaI2C; std::map<BYTE, bool> m_ping; std::map<BYTE, unsigned int> m_velocidad_motores; std::map<BYTE, unsigned int> m_corriente_motores; std::vector<double> m_vd_coordenadas; unsigned int m_ui_num_satelitesGPS; bool m_b_posicionGPS_valida; std::vector<unsigned int> m_vui_fecha; std::vector<unsigned int> m_vui_hora;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
144
// Funciones de procesamiento de mensajes void RespuestaEsperada(const BYTE &b_instruccion); void ProcesarMensajeI2C(); void ProcesarCoordenadasGPS(const VectorByte &vb_recepcionI2C, unsigned int &j); void ProcesarHoraGPS(const VectorByte &vb_recepcionI2C, unsigned int &j); void ProcesarFechaGPS(const VectorByte &vb_recepcionI2C, unsigned int &j); // Funciones de cambio de tipo int StringToInteger(const std::string &str); double StringToDouble(const std::string &str); public: // Constructor y destructor CComunicaI2C(void); ~CComunicaI2C(void); // Funciones de comunicacin void inicio(); bool comunica(); void PingI2C(const BYTE &b_direccion); void DCMotorI2C(const BYTE &b_direccion, const unsigned int &ui_duty_cycle, const BYTE &b_sentido_giro); void LeerVelocidadI2C(const BYTE &b_direccion); void LeerCorrienteI2C(const BYTE &b_direccion); void LeerCoordenadasGPS(); void LeerHoraGPS(); void LeerFechaGPS(); // Funciones para acceder a los datos recibidos bool ComprobarPingI2C(const BYTE &b_direccion); double GetVelocidadI2C(const BYTE &b_direccion); double GetCorrienteI2C(const BYTE &b_direccion); std::vector<double> GetCoordenadasGPS() const; double GetLatitudGPS() const; double GetLongitudGPS() const; unsigned int GetSatelitesGPS() const; bool PosicionGPSValida() const; std::string GetHoraGPS() const; void GetHoraGPS(unsigned int &ui_hh, unsigned int &ui_mm, unsigned int &ui_ss); std::string GetFechaGPS() const; void GetFechaGPS(unsigned int &ui_dd, unsigned int &ui_mm, unsigned int &ui_aa); };
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
145
2.2.
// // // // // // // // // // // // // // // // // // //
CComunicaI2C.cpp
----------------------------------------------------------------------------------------------------- DRIVER DE LA TCS3 CON COMUNICACIONES I2C ----------------------------------------------------------------------------------------------------Archivo: CComunicaI2C.cpp Descripcin: Clase encargada de facilitar la comunicacin serie entre el usuario y la tercera versin de la Tarjeta de Control de Sensores (TCS3), con el fin de que pueda controlarse sin conocer la programacin de los microcontroladores. Permite comunicarse con otros dispositivos a travs del bus I2C. Versin: 1.0.0 Fecha: 08/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "StdAfx.h" #include "CComunicaI2C.h" // ---------------------------------------------------------------------------------// --------------------------- CONSTRUCTOR Y DESTRUCTOR ----------------------------// ---------------------------------------------------------------------------------/* Nombre: CComunicaI2C * Descripcin: Constructor por defecto. Inicializa los vectores. * Argumentos: Ninguno * Valor devuelto: Ninguno */ CComunicaI2C::CComunicaI2C(void) { m_vd_coordenadas.resize(2); m_vui_hora.resize(3); m_vui_fecha.resize(3); m_ui_num_satelitesGPS = 0; m_b_posicionGPS_valida = false; } // ---------------------------------------------------------------------------------/* Nombre: ~CComunicaI2C * Descripcin: Destructor por defecto. * Argumentos: Ninguno * Valor devuelto: Ninguno */ CComunicaI2C::~CComunicaI2C(void) { }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
146
// ---------------------------------------------------------------------------------// --------------------------- FUNCIONES DE COMUNICACIN ---------------------------// ---------------------------------------------------------------------------------/* Nombre: inicio * Descripcin: Funcin que limpia todas las colas para poder realizar una nueva comunicacin. Sobrecarga (polimorfismo) la funcin homnima de Comm. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void CComunicaI2C::inicio() { vEsperaI2C.clear(); Comm::inicio(); } // ---------------------------------------------------------------------------------/* Nombre: inicio * Descripcin: Funcin que enva todas las tramas introducidas a travs de RS-232 o Wi-Fi. Sobrecarga (polimorfismo) la funcin homnima de Comm. * * Argumentos: Ninguno * Valor devuelto: true: Comunicacin satisfactoria * false: Se produjo algn error en la comunicacin * / * bool CComunicaI2C::comunica() { bool b_ok; b_ok = Comm::comunica(); if (b_ok) ProcesarMensajeI2C(); return b_ok; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
147
// ---------------------------------------------------------------------------------// -------------------- FUNCIONES DE PROCESAMIENTO DE MENSAJES ---------------------// ---------------------------------------------------------------------------------/* Nombre: RespuestaEsperada * Descripcin: Funcin que introduce una instruccin en la cola de respuestas esperadas. * * Argumentos: const BYTE &b_instruccion: Instruccin que espera respuesta * * Valor devuelto: Ninguno */ void CComunicaI2C::RespuestaEsperada(const BYTE &b_instruccion) { vEsperaI2C.push_back(b_instruccion); } // ---------------------------------------------------------------------------------/* Nombre: ProcesarMensajeI2C * Descripcin: Funcin que procesa los mensajes de los dispositivos conectados al bus I2C. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void CComunicaI2C::ProcesarMensajeI2C() { unsigned int j = 0; VectorByte vb_recepcionI2C; vb_recepcionI2C = GetVectorRecepcionI2C(); // Para cada funcin que esperaba respuesta for (unsigned int i = 0; i < vEsperaI2C.size(); i++) { switch (vEsperaI2C[i]) { case VEL_BRUSHLESS: m_velocidad_motores[vb_recepcionI2C.bVector[j]] = (vb_recepcionI2C.bVector[j+1] << 8)|vb_recepcionI2C.bVector[j+2]; j += 3; break; case INT_BRUSHLESS: m_corriente_motores[vb_recepcionI2C.bVector[j]] = (vb_recepcionI2C.bVector[j+1] << 8)|vb_recepcionI2C.bVector[j+2]; j += 3; break; case COORDENADAS_GPS: ProcesarCoordenadasGPS(vb_recepcionI2C, j); break; case HORA_GPS: ProcesarHoraGPS(vb_recepcionI2C, j); break; case FECHA_GPS: ProcesarFechaGPS(vb_recepcionI2C, j); break; case PING: if (vb_recepcionI2C.bVector[j+1] == 7) m_ping[vb_recepcionI2C.bVector[j]] = true;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
148
else m_ping[vb_recepcionI2C.bVector[j]] = false; j += 2; break; } } } // ---------------------------------------------------------------------------------/* Nombre: ProcesarCoordenadasGPS * Descripcin: Funcin que procesa los datos de las coordenadas del GPS recibidas a travs del bus I2C. * Argumentos: * const VectorByte &vb_recepcionI2C: Vector que contiene las tramas recibidas * a travs del bus I2C * unsigned int &j: ndice del vector anterior * * Valor devuelto: Ninguno */ void CComunicaI2C::ProcesarCoordenadasGPS(const VectorByte &vb_recepcionI2C, unsigned int &j) { std::string str; double i_grados; double d_minutos; // Leer e interpretar sucesivamente la latitud y la longitud for (unsigned int k = 0; k < 2; k++) { // Grados: La latitud es de 2 caracteres y la longitud de 3 for (unsigned int i = 0; i < (2+k); i++) { str += vb_recepcionI2C.bVector[j]; j++; } i_grados = StringToInteger(str); str.clear(); // Minutos for (unsigned int i = 0; i < 7; i++) { str += vb_recepcionI2C.bVector[j]; j++; } d_minutos = StringToDouble(str); str.clear(); // Almacenar la latitud en formato decimal con signo if (k == LATITUD) { // Latitud Norte positiva if (vb_recepcionI2C.bVector[j++] == N) m_vd_coordenadas[LATITUD] = i_grados + d_minutos/60; // Latitud Sur negativa else m_vd_coordenadas[LATITUD] = -(i_grados + d_minutos/60); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
149
// Almacenar la longitud en formato decimal con signo else { // Longitud Este positiva if (vb_recepcionI2C.bVector[j++] == E) m_vd_coordenadas[LONGITUD] = i_grados + d_minutos/60; // Longitud Oeste negativa else m_vd_coordenadas[LONGITUD] = -(i_grados + d_minutos/60); } } // Nmero de satlites for (unsigned int i = 0; i < 2; i++) { str += vb_recepcionI2C.bVector[j]; j++; } m_ui_num_satelitesGPS = (unsigned int)StringToInteger(str); str.clear(); // Posicin vlida if (vb_recepcionI2C.bVector[j++] == A) m_b_posicionGPS_valida = true; else m_b_posicionGPS_valida = false; } // ---------------------------------------------------------------------------------/* Nombre: ProcesarHoraGPS * Descripcin: Funcin que procesa los datos de la hora del GPS recibida a travs del bus I2C. * * Argumentos: const VectorByte &vb_recepcionI2C: Vector que contiene las tramas recibidas * a travs del bus I2C * unsigned int &j: ndice del vector anterior * * Valor devuelto: Ninguno */ void CComunicaI2C::ProcesarHoraGPS(const VectorByte &vb_recepcionI2C, unsigned int &j) { std::string str; for (unsigned int i = 0; i < 3; i++) { str = vb_recepcionI2C.bVector[j++]; str += vb_recepcionI2C.bVector[j++]; m_vui_hora[i] = StringToInteger(str); } } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
150
/* Nombre: ProcesarFechaGPS * Descripcin: Funcin que procesa los datos de la fecha del GPS recibida a travs del bus I2C. * * Argumentos: const VectorByte &vb_recepcionI2C: Vector que contiene las tramas recibidas * a travs del bus I2C * unsigned int &j: ndice del vector anterior * * Valor devuelto: Ninguno */ void CComunicaI2C::ProcesarFechaGPS(const VectorByte &vb_recepcionI2C, unsigned int &j) { std::string str; for (unsigned int i = 0; i < 3; i++) { str = vb_recepcionI2C.bVector[j++]; str += vb_recepcionI2C.bVector[j++]; m_vui_fecha[i] = StringToInteger(str); } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
151
// ---------------------------------------------------------------------------------// ------------------------ FUNCIONES DE CONVERSIN DE TIPO ------------------------// ---------------------------------------------------------------------------------/* Nombre: StringToInteger * Descripcin: Funcin que convierte una cadena de caracteres a entero. * Argumentos: const std::string &str: Cadena que se quiere convertir * * Valor devuelto: int: Nmero entero * / * int CComunicaI2C::StringToInteger(const std::string &str) { std::istringstream iss; int i_resultado; iss.str(str); iss >> i_resultado; return i_resultado; } // ---------------------------------------------------------------------------------/* Nombre: StringToDouble * Descripcin: Funcin que convierte una cadena de caracteres a coma flotante de doble precisin. * Argumentos: * const std::string &str: Cadena que se quiere convertir * Valor devuelto: * double: Nmero en formato double * */ double CComunicaI2C::StringToDouble(const std::string &str) { std::istringstream iss; double d_resultado; iss.str(str); iss >> d_resultado; return d_resultado; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
152
// ---------------------------------------------------------------------------------// ------------------------------------- PING --------------------------------------// ---------------------------------------------------------------------------------/* Nombre: PingI2C * Descripcin: Funcin que enva una trama para verificar que existe comunicacin por I2C con un dispositivo. * * Argumentos: const BYTE &b_direccion: Direccin del dispositivo en el bus I2C * * Valor devuelto: Ninguno */ void CComunicaI2C::PingI2C(const BYTE &b_direccion) { IntroduceTxI2C(b_direccion); // Direccin del dispositivo IntroduceTxI2C(RESP_SI); // Espera respuesta: S IntroduceTxI2C(1); // Nmero de caracteres de datos IntroduceTxI2C(PING); // Instruccin RespuestaEsperada(PING); } // ---------------------------------------------------------------------------------/* Nombre: ComprobarPingI2C * Descripcin: Funcin que indica si se ha podido comunicar por I2C con un dispositivo. * Argumentos: * const BYTE &b_direccion: Direccin del dispositivo en el bus I2C * Valor devuelto: * true: Existe comunicacin * false: No se ha podido establecer la comunicacin * */ bool CComunicaI2C::ComprobarPingI2C(const BYTE &b_direccion) { std::map<BYTE, bool>::iterator iter = m_ping.find(b_direccion); if (iter != m_ping.end()) return (iter->second); else return false; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
153
// ---------------------------------------------------------------------------------// ------------------------------ MOTORES BRUSHLESS DC -----------------------------// ---------------------------------------------------------------------------------/* Nombre: DCMotorI2C * Descripcin: Funcin que modifica el factor de servicio del PWM de control de un motor. * * Argumentos: const BYTE &b_direccion: Direccin del motor en el bus I2C * const unsigned int &ui_duty_cycle: Factor de servicio * const BYTE &b_sentido_giro: Sentido de giro del motor * Avanzar: 1 * Retroceder: 0 * Valor devuelto: Ninguno * */ void CComunicaI2C::DCMotorI2C(const BYTE &b_direccion, const unsigned int &ui_duty_cycle, const BYTE &b_sentido_giro) { IntroduceTxI2C(b_direccion); // Direccin del dispositivo IntroduceTxI2C(RESP_NO); // Espera respuesta: S IntroduceTxI2C(4); // Nmero de caracteres de datos IntroduceTxI2C(INST_DC); // Instruccin IntroduceTxI2C((ui_duty_cycle & 0xFF00) >> 8); // Byte alto del duty cycle IntroduceTxI2C(ui_duty_cycle & 0x00FF); // Byte bajo del duty cycle IntroduceTxI2C(b_sentido_giro); // Sentido de giro } // ---------------------------------------------------------------------------------/* Nombre: LeerVelocidadI2C * Descripcin: Funcin que pide la velocidad de un motor. * Argumentos: const BYTE &b_direccion: Direccin del motor en el bus I2C * * Valor devuelto: Ninguno */ void CComunicaI2C::LeerVelocidadI2C(const BYTE &b_direccion) { IntroduceTxI2C(b_direccion); // Direccin del dispositivo IntroduceTxI2C(RESP_SI); // Espera respuesta: S IntroduceTxI2C(1); // Nmero de caracteres de datos IntroduceTxI2C(INST_VELOCIDAD); // Instruccin RespuestaEsperada(VEL_BRUSHLESS); } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
154
/* Nombre: LeerCorrienteI2C * Descripcin: Funcin que pide la corriente que est consumiendo un motor. * Argumentos: const BYTE &b_direccion: Direccin del motor en el bus I2C * * Valor devuelto: Ninguno */ void CComunicaI2C::LeerCorrienteI2C(const BYTE &b_direccion) { IntroduceTxI2C(b_direccion); // Direccin del dispositivo IntroduceTxI2C(RESP_SI); // Espera respuesta: S IntroduceTxI2C(1); // Nmero de caracteres de datos IntroduceTxI2C(INST_CORRIENTE); // Instruccin RespuestaEsperada(INT_BRUSHLESS); } // ---------------------------------------------------------------------------------/* Nombre: GetVelocidadI2C * Descripcin: Funcin que devuelve la velocidad de un motor. * Argumentos: const BYTE &b_direccion: Direccin del motor en el bus I2C * * Valor devuelto: double: Velocidad del motor (rps) * */ double CComunicaI2C::GetVelocidadI2C(const BYTE &b_direccion) { std::map<BYTE, unsigned int>::iterator iter = m_velocidad_motores.find(b_direccion); if (iter != m_velocidad_motores.end()) return ((iter->second)/(REDUCTORA*PARES_POLOS*POS_HALL*T_REBOSE_ENCODER)); else return 0; } // ---------------------------------------------------------------------------------/* Nombre: GetCorrienteI2C * Descripcin: Funcin que devuelve la intensidad consumida por un motor. * Argumentos: const BYTE &b_direccion: Direccin del motor en el bus I2C * Valor devuelto: * double: Intensidad consumida por el motor (A) * / * double CComunicaI2C::GetCorrienteI2C(const BYTE &b_direccion) { std::map<BYTE, unsigned int>::iterator iter = m_corriente_motores.find(b_direccion); if (iter != m_corriente_motores.end()) return (((iter->second)*(5.0/1023)-2.5)*(25/2)); else return 0; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
155
// ---------------------------------------------------------------------------------// -------------------------------------- GPS --------------------------------------// ---------------------------------------------------------------------------------/* Nombre: LeerCoordenadasGPS * Descripcin: Funcin que pide las coordenadas al GPS. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void CComunicaI2C::LeerCoordenadasGPS() { IntroduceTxI2C(DIR_GPS); // Direccin del dispositivo IntroduceTxI2C(RESP_SI); // Espera respuesta: S IntroduceTxI2C(1); // Nmero de caracteres de datos IntroduceTxI2C(INST_COORD); // Instruccin RespuestaEsperada(COORDENADAS_GPS); } // ---------------------------------------------------------------------------------/* Nombre: LeerHoraGPS * Descripcin: Funcin que pide la hora al GPS. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void CComunicaI2C::LeerHoraGPS() { IntroduceTxI2C(DIR_GPS); // Direccin del dispositivo IntroduceTxI2C(RESP_SI); // Espera respuesta: S IntroduceTxI2C(1); // Nmero de caracteres de datos IntroduceTxI2C(INST_HORA); // Instruccin RespuestaEsperada(HORA_GPS); } // ---------------------------------------------------------------------------------/* Nombre: LeerFechaGPS * Descripcin: Funcin que pide la fecha al GPS. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void CComunicaI2C::LeerFechaGPS() { IntroduceTxI2C(DIR_GPS); // Direccin del dispositivo IntroduceTxI2C(RESP_SI); // Espera respuesta: S IntroduceTxI2C(1); // Nmero de caracteres de datos IntroduceTxI2C(INST_FECHA); // Instruccin RespuestaEsperada(FECHA_GPS); } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
156
/* Nombre: GetCoordenadasGPS * Descripcin: Funcin que devuelve las coordenadas del GPS. * Argumentos: Ninguno * Valor devuelto: std::vector<double>: Latitud y longitud * */ std::vector<double> CComunicaI2C::GetCoordenadasGPS() const { return m_vd_coordenadas; } // ---------------------------------------------------------------------------------/* Nombre: GetLatitudGPS * Descripcin: Funcin que devuelve la latitud. * Argumentos: Ninguno * Valor devuelto: double: Latitud * */ double CComunicaI2C::GetLatitudGPS() const { return m_vd_coordenadas[LATITUD]; } // ---------------------------------------------------------------------------------/* Nombre: GetLongitudGPS * Descripcin: Funcin que devuelve la longitud. * Argumentos: Ninguno * Valor devuelto: double: Longitud * */ double CComunicaI2C::GetLongitudGPS() const { return m_vd_coordenadas[LONGITUD]; } // ---------------------------------------------------------------------------------/* Nombre: GetSatelitesGPS * Descripcin: Funcin que devuelve el nmero de satlites visibles por el GPS. Si es menor que 4, las coordenadas no son fiables, y si * es mayor o igual que 8, la calidad de la medida es ptima. * Argumentos: Ninguno * * Valor devuelto: unsigned int: Nmero de satlites * */ unsigned int CComunicaI2C::GetSatelitesGPS() const { return m_ui_num_satelitesGPS; } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
157
/* Nombre: PosicionGPSValida * Descripcin: Funcin que indica si las ltimas medidas del GPS son correctas o no. * Argumentos: Ninguno * Valor devuelto: true: Posicin vlida * false: Posicin no vlida * */ bool CComunicaI2C::PosicionGPSValida() const { return m_b_posicionGPS_valida; } // ---------------------------------------------------------------------------------/* Nombre: GetHoraGPS * Descripcin: Funcin que devuelve la hora. * Argumentos: Ninguno * Valor devuelto: std::string: Hora en formato cadena de caracteres * */ std::string CComunicaI2C::GetHoraGPS() const { std::stringstream out; out << m_vui_hora[0] << ":" << m_vui_hora[1] << ":" << m_vui_hora[2]; return out.str(); } // ---------------------------------------------------------------------------------/* Nombre: GetHoraGPS * Descripcin: Funcin que devuelve hora separada en horas, minutos y segundos. * Argumentos: unsigned int &ui_hh: Parmetro para devolver la hora * unsigned int &ui_mm: Parmetro para devolver los minutos * unsigned int &ui_ss: Parmetro para devolver los segundos * * Valor devuelto: Ninguno */ void CComunicaI2C::GetHoraGPS(unsigned int &ui_hh, unsigned int &ui_mm, unsigned int &ui_ss) { ui_hh = m_vui_hora[0]; ui_mm = m_vui_hora[1]; ui_ss = m_vui_hora[2]; } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
158
/* Nombre: GetFechaGPS * Descripcin: Funcin que devuelve la fecha. * Argumentos: Ninguno * Valor devuelto: std::string: Fecha en formato cadena de caracteres * */ std::string CComunicaI2C::GetFechaGPS() const { std::stringstream out; out << m_vui_fecha[0] << "/" << m_vui_fecha[1] << "/" << m_vui_fecha[2]; return out.str(); } // ---------------------------------------------------------------------------------/* Nombre: GetFechaGPS * Descripcin: Funcin que devuelve hora separada en da, mes y ao. * Argumentos: unsigned int &ui_dd: Parmetro para devolver el da * unsigned int &ui_mm: Parmetro para devolver el mes * unsigned int &ui_aa: Parmetro para devolver el ao * * Valor devuelto: Ninguno */ void CComunicaI2C::GetFechaGPS(unsigned int &ui_dd, unsigned int &ui_mm, unsigned int &ui_aa) { ui_dd = m_vui_fecha[0]; ui_mm = m_vui_fecha[1]; ui_aa = m_vui_fecha[2]; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
159
main.c
----------------------------------------------------------------------------------------------------------------- TCM BRUSHLESS DC ----------------------------------------------------------------------------------------------------------------Archivo: main.c Descripcin: Programa de control de los motores Brushless DC. Versin: 1.0.0 Fecha: 08/05/2010 Autor: Jaime Boal Martn-Larrauri ---------------------------------------------------------------------------------"p30F3010.h" "motor.h" "timers.h" "I2C.h"
// ---------------------------------------------------------------------------------// ----------------------------- BITS DE CONFIGURACIN -----------------------------// ---------------------------------------------------------------------------------_FOSC(FRC_PLL16 & CSW_FSCM_OFF); // Seleccin del oscilador. // No permitir conmutacin de reloj _FWDT(WDT_OFF); // Desactivar el Watch-Dog Timer _FBORPOR(PBOR_ON & BORV_45 & PWRT_16 & MCLR_EN & RST_IOPIN); _FICD(ICS_PGD2); // Usar EMUC2 y EMUD2 para programar y depurar
// ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
160
int main(void) { while(!OSCCONbits.LOCK); // Esperar a que el PLL se sincronice InicializarTimer1(); InicializarMotor(); InicializarI2C(DIR_BRUSHLESS_TI); // Bucle de scan while (1) { ProcesarMensajeI2C(); } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
161
3.2.
// // // // // // // // // // // // // // //
motor.h
----------------------------------------------------------------------------------------------- INTERFAZ DEL MDULO DE CONTROL DEL MOTOR BRUSHLESS DC ---------------------------------------------------------------------------------------------Archivo: motor.h Descripcin: Mdulo encargado de controlar un motor brushless DC. Versin: 1.0.0 Fecha: 21/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#ifndef _MOTOR_H #define _MOTOR_H // ---------------------------------------------------------------------------------#define _MOTOR_IZQUIERDO_ // Opciones: _MOTOR_DERECHO_ y _MOTOR_IZQUIERDO_ #define _CONTROL_ANALOGICO_ // Si no se define se supone control digital #include "p30f3010.h" // ---------------------------------------------------------------------------------// Frecuencias de trabajo #define FCY 29480000 // Oscilador: FRC (7.37 MHz) PLL x16 -> FCY = 7.37e6*(16/4) #define FPWM 29450 // Frecuencia de PWM: 29,450 kHz // Sentido de giro #define AVANZAR 1 #define RETROCEDER 0 // Caractersticas del motor #define POLOS 4 #define PARES_POLOS (POLOS/2) #define REDUCTORA 86 // Reductora 86:1 #define REV_ELEC_VUELTA (PARES_POLOS*REDUCTORA) // Rev. elctr. por vuelta mecnica // Prioridad de las interrupciones #define PR_INT_CN 4 // Deteccin de cambio de estado #define PR_INT_AD 4 // Conversor A/D // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PBLICAS ---------------------// ---------------------------------------------------------------------------------void InicializarMotor(void); void ActualizarEncoder(void); void DCMotor(unsigned char uc_sentido, unsigned int ui_dc); unsigned int GetIntensidad(void); unsigned int GetVelocidad(void); #endif
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
162
3.3.
// // // // // // // // // // // // // // //
motor.c
----------------------------------------------------------------------------------------------------- MDULO DE CONTROL DEL MOTOR BRUSHLESS DC ----------------------------------------------------------------------------------------------------Archivo: motor.c Descripcin: Mdulo encargado de controlar un motor brushless DC. Versin: 1.0.0 Fecha: 21/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "motor.h" // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PRIVADAS ---------------------// ---------------------------------------------------------------------------------void InicializarDeteccionCambioEstado(void); void InicializarPWM(void); void InicializarConversorAD(void); inline void HabilitarInterrupcionesMotores(void); inline void DeshabilitarInterrupcionesMotores(void); void __attribute__((interrupt, no_auto_psv)) _CNInterrupt (void); void __attribute__((interrupt, no_auto_psv)) _ADCInterrupt(void); // ---------------------------------------------------------------------------------// -------------------------- VARIABLES GLOBALES AL MDULO -------------------------// ---------------------------------------------------------------------------------static static static static static unsigned unsigned unsigned unsigned unsigned char uc_sentido_giro = AVANZAR; int ui_duty_cycle = 0; int ui_cuenta_cambio_estado = 0; int ui_cuenta_encoder = 0; int ui_intensidad = 0;
// Tablas para controlar la conmutacin del PWM (slo conmuta el nivel bajo). // Los 8 bits ms altos indican si el pulso se controla con el generador de PWM (1) // o segn el valor de los 8 bits ms bajos (0), en cuyo caso 1 significa ON y 0 OFF. // De los 8 bits menos significativos, los impares (1, 3, 5...) corresponden al nivel // alto que, de acuerdo con el diseo de la TCM Brushless DC, deben ir negados. #ifdef _MOTOR_DERECHO_ static unsigned int vui_avanzar[] = {0x002A, 0x010A, 0x1022, 0x0122, 0x0428, 0x040A, 0x1028, 0x002A}; static unsigned int vui_retroceder[] = {0x002A, 0x1028, 0x040A, 0x0428, 0x0122, 0x1022, 0x010A, 0x002A}; #elif defined _MOTOR_IZQUIERDO_ static unsigned int vui_avanzar[] = {0x002A, 0x1028, 0x040A, 0x0428, 0x0122, 0x1022, 0x010A, 0x002A}; static unsigned int vui_retroceder[] = {0x002A, 0x010A, 0x1022, 0x0122, 0x0428, 0x040A, 0x1028, 0x002A}; #endif
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
163
// ---------------------------------------------------------------------------------// ------------------------------------ FUNCIONES ----------------------------------// ---------------------------------------------------------------------------------/* Nombre: InicializarMotor * Descripcin: Funcin que inicializa las funciones del microcontrolador necesarias para controlar un motor trifsico de corriente continua. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void InicializarMotor(void) { InicializarDeteccionCambioEstado(); InicializarPWM(); InicializarConversorAD(); } // ---------------------------------------------------------------------------------/* Nombre: InicializarDeteccionCambioEstado * Descripcin: Funcin que inicializa las interrupciones de deteccin de cambio de estado, que saltan cuando se produce una variacin en una entrada * digital. Se utilizan para monitorizar los sensores de efecto Hall. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void InicializarDeteccionCambioEstado(void) { CNEN1 = 0x00E0; // Habilitar interrupciones de CN5, CN6 y CN7 // (Hall A, B y C respectivamente) CNPU1 = 0x00E0; // Conectar las resistencias de pull-up internas IFS0bits.CNIF = 0; IPC3bits.CNIP = PR_INT_CN; IEC0bits.CNIE = 1; } // ---------------------------------------------------------------------------------/* Nombre: InicializarPWM * Descripcin: Funcin de inicializacin del generador de PWM. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void InicializarPWM(void) { unsigned int ui_posicion_inicial; TRISE &= 0xFFC0; PTCONbits.PTCKPS = 0; PTPER = FCY/FPWM - 1; // Configurar los pines de PWM (RE0 a RE5) como salidas // Preescalado 1:1 // Base de tiempos ("periodo") del PWM. // Configuracin actual: 1000 // // // // Deshabilitar los pines de PWM. Pares de pines independientes Permitir el control manual de las seales de PWM a travs de este registro // Borrar la bandera de la interrupcin // Prioridad de la interrupcin (mx. 7 - mn. 1) // Habilitar la atencin de las interrupciones
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
164
// Factor de servicio inicial nulo. Motor parado PDC1 = 0; PDC2 = 0; PDC3 = 0; PWMCON2bits.IUE = 0; // Sincronizar el cambio de factor de servicio // con el periodo PWMCON2bits.OSYNC = 1; // Sincronizar cambios en las salidas a travs de OVDCON // con el periodo PWMCON2bits.UDIS = 0; // Permitir la modificacin del factor de servicio y // del periodo PTCONbits.PTEN = 1; // Arrancar el generador de PWM // Inicializar posicin ui_posicion_inicial = (PORTB >> 3) & 0x7; OVDCON = vui_avanzar[ui_posicion_inicial]; PWMCON1 |= 0x0077; } // ---------------------------------------------------------------------------------/* Nombre: InicializarConversorAD * Descripcin: Funcin de inicializacin del conversor analgico digital. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void InicializarConversorAD(void) { ADPCFG &= 0xFFFA; // Configurar RB0 y RB2 como seales analgicas ADCON1bits.ADSIDL ADCON1bits.FORM ADCON1bits.SSRC ADCON1bits.SIMSAM ADCON1bits.ASAM ADCON2bits.VCFG ADCON2bits.CSCNA ADCON2bits.CHPS ADCON2bits.SMPI ADCON2bits.BUFM ADCON2bits.ALTS ADCON3bits.ADRC ADCON3bits.ADCS ADCON3bits.SAMC = = = = = 0; 0; 3; 0; 1; // // // // // // // // // // Continuar operando si se entra en suspensin Formato de la medida: unsigned int (10 bits) Sincronizar la conversin con el PWM Muestrear los canales de forma secuencial Comenzar a muestrear al terminar una conversin Tensiones de referencia internas: AVdd y AVss No escanear con CH0 las entradas analgicas indicadas en ADCSSL Convertir los canales CH0 y CH1 La interrupcin salta cada 2 conversiones // Habilitar los pines de PWM
= 0; = 0; = 1; = 1; = 0; = 0; = 0; = 6; = 2;
// Almacenar resultados en un buffer de 16 bits // Usar siempre las conexiones del multiplexor A // // // // // Usar un mltiplo del reloj interno como reloj del conversor A/D (TAD) TAD > 95,24ns -> 750 ksps. ADCS = Entero_superior(2*(TAD/TCY)) Tiempo de muestreo: 2 TAD
// Pines conectados a los canales del multiplexor A ADCHSbits.CH0NA = 0; // Tensin negativa de referencia para la // conversin: AVss ADCHSbits.CH0SA = 2; // Conectar AN2 al CH0 ADCHSbits.CH123SA = 0; // Conectar AN0 al CH1, AN1 al CH2 y AN2 al CH3 IFS0bits.ADIF = 0; IPC2bits.ADIP = PR_INT_AD; // Borrar la bandera de la interrupcin // Prioridad de la interrupcin (mx. 7 - mn. 1)
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
165
IEC0bits.ADIE = 1; ADCON1bits.ADON = 1;
a los canales del multiplexor A 0; // Tensin negativa de referencia: AVss 2; // Conectar AN2 al CH0 0; // Conectar AN0 al CH1, AN1 al CH2 y AN2 al CH3
// ---------------------------------------------------------------------------------/* Nombre: HabilitarInterrupcionesMotores * Descripcin: Habilita las interrupciones relacionadas con los motores. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void HabilitarInterrupcionesMotores(void) { IEC0bits.ADIE = 1; // Habilitar las interrupciones del conversor A/D IEC0bits.CNIE = 1; // Habilitar las interrupciones de cambio de estado } // ---------------------------------------------------------------------------------/* Nombre: DeshabilitarInterrupcionesMotores * Descripcin: Deshabilita las interrupciones relacionadas con los motores. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void DeshabilitarInterrupcionesMotores(void) { IEC0bits.ADIE = 0; // Deshabilitar las interrupciones del conversor A/D IEC0bits.CNIE = 0; // Deshabilitar las interrupciones de cambio de estado } // ---------------------------------------------------------------------------------/* Nombre: _CNInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a la interrupcin de cambio de estado. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void __attribute__((interrupt, no_auto_psv)) _CNInterrupt(void) { unsigned int ui_estado_hall; IFS0bits.CNIF = 0; // Borrar la bandera de la interrupcin // Leer la posicin del sensor
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
166
/* Nombre: _ADCInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a interrupcin del conversor A/D. Modifica el factor de servicio del PWM. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void __attribute__((interrupt, no_auto_psv)) _ADCInterrupt (void) { unsigned int ui_consigna_motor; IFS0bits.ADIF = 0; // Borrar la bandera de la interrupcin
ui_consigna_motor = ADCBUF0 - 511; ui_intensidad = ADCBUF1; #ifdef _CONTROL_ANALOGICO_ if (ui_consigna_motor >= 0) { uc_sentido_giro = AVANZAR; ui_duty_cycle = (unsigned int)((ui_consigna_motor/512.0)*2000); } else { uc_sentido_giro = RETROCEDER; ui_duty_cycle = (unsigned int)(-(ui_consigna_motor/511.0)*2000); } if (ui_potencia <= 10) ui_duty_cycle = 0; #endif PDC1 = ui_duty_cycle; PDC2 = PDC1; PDC3 = PDC1; } // ---------------------------------------------------------------------------------/* Nombre: ActualizarEncoder * Descripcin: Funcin reentrante que almacena la cuenta del encoder del ltimo periodo de muestreo, definido por el rebose del Timer 1. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void ActualizarEncoder(void) { DeshabilitarInterrupcionesMotores(); ui_cuenta_encoder = ui_cuenta_cambio_estado; ui_cuenta_cambio_estado = 0; HabilitarInterrupcionesMotores(); } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
167
/* Nombre: DCMotor * Descripcin: Funcin que establece el valor del duty-cycle y el sentido de giro. Se utiliza slo con control digital. * * Argumentos: unsigned char uc_sentido: Sentido de giro: AVANZAR o RETROCEDER * unsigned int ui_dc: Factor de servicio * * Valor devuelto: Ninguno */ void DCMotor(unsigned char uc_sentido, unsigned int ui_dc) { ui_duty_cycle = ui_dc; uc_sentido_giro = uc_sentido; } // ---------------------------------------------------------------------------------/* Nombre: GetVelocidad * Descripcin: Funcin que devuelve la cuenta del encoder para ser transmitida por el bus I2C. * * Argumentos: Ninguno * Valor devuelto: unsigned int: Cuenta del encoder * */ unsigned int GetVelocidad(void) { return ui_cuenta_encoder; } // ---------------------------------------------------------------------------------/* Nombre: GetIntensidad * Descripcin: Funcin que devuelve la ltima medida de corriente para enviarla a travs del bus I2C. * * Argumentos: Ninguno * Valor devuelto: unsigned int: Medida de intensidad del conversor A/D. El driver de I2C cambia * las unidades a Amperios. * */ unsigned int GetIntensidad(void) { return ui_intensidad; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
168
3.4.
// // // // // // // // // // // // // // //
timers.h
---------------------------------------------------------------------------------------------------- INTERFAZ DEL MDULO DE CONTROL DE LOS TIMERS -------------------------------------------------------------------------------------------------Archivo: timers.h Descripcin: Mdulo encargado de controlar los contadores. Versin: 1.0.0 Fecha: 21/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#ifndef _TIMERS_H #define _TIMERS_H // ---------------------------------------------------------------------------------#include "p30f3010.h" #include "motor.h" // ---------------------------------------------------------------------------------// Valores lgicos #define SI 1 #define NO 0 // Prioridad de las interrupciones #define PR_INT_TIMER1 3 // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PBLICAS ---------------------// ---------------------------------------------------------------------------------void InicializarTimer1(void); #endif
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
169
3.5.
// // // // // // // // // // // // // // //
timers.c
---------------------------------------------------------------------------------------------------------- MDULO DE CONTROL DE LOS TIMERS --------------------------------------------------------------------------------------------------------Archivo: timers.c Descripcin: Mdulo encargado de controlar los contadores. Versin: 1.0.0 Fecha: 21/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "timers.h" // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PRIVADAS ---------------------// ---------------------------------------------------------------------------------inline void HabilitarInterrupcionesTimer1(); inline void DeshabilitarInterrupcionesTimer1(); void __attribute__((interrupt,no_auto_psv)) _T1Interrupt(void); // ---------------------------------------------------------------------------------// ------------------------------------ FUNCIONES ----------------------------------// ---------------------------------------------------------------------------------/* Nombre: InicializarTimer1 * Descripcin: Funcin que inicializa el Timer 1. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void InicializarTimer1(void) { T1CONbits.TCKPS = 3; // Preescalado 1:256 PR1 = 57578; // Cuenta para saltar cada 500 ms. PR1 = FCY*tiempo/TCKPS T1CONbits.TON = 1; // Arrancar el timer IPC0bits.T1IP IFS0bits.T1IF IEC0bits.T1IE } // ---------------------------------------------------------------------------------= PR_INT_TIMER1; = 0; = 1; // Prioridad de las interrupciones del Timer 1 // Borrar la bandera de la interrupcin // Habilitar las interrupciones del Timer 1
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
170
/* Nombre: HabilitarInterrupcionesTimer1 * Descripcin: Habilita las interrupciones del Timer 1. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void HabilitarInterrupcionesTimer1() { IEC0bits.T1IE = 1; } // ---------------------------------------------------------------------------------/* Nombre: DeshabilitarInterrupcionesTimer1 * Descripcin: Deshabilita las interrupciones del Timer 1. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void DeshabilitarInterrupcionesTimer1() { IEC0bits.T1IE = 0; } // ---------------------------------------------------------------------------------/* Nombre: _T1Interrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a la interrupcin del Timer 1. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void __attribute__((interrupt,no_auto_psv)) _T1Interrupt(void) { IFS0bits.T1IF = 0; // Borrar la bandera de la interrupcin ActualizarEncoder(); } // Registrar las cuentas del encoder desde // que se produjo el ltimo rebose del timer
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
171
3.6.
// // // // // // // // // // // // // // // //
I2C.h
------------------------------------------------------------------------------------------------- INTERFAZ DEL MDULO I2C (Inter-Integrated Circuit) ----------------------------------------------------------------------------------------------Archivo: I2C.h Descripcin: Mdulo encargado de controlar las comunicaciones a travs del bus I2C. Versin: 1.0.0 Fecha: 12/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#ifndef _I2C_H #define _I2C_H // ---------------------------------------------------------------------------------// Ruta: C:\Archivos de Programa\Microchip\MPLAB C30\support\dsPIC30F\h\p30F3010.h #include "p30f3010.h" #include "motor.h" // ---------------------------------------------------------------------------------// Frecuencias de trabajo #define FCY 29480000 // Oscilador: FRC (7.37 MHz) PLL x16 -> FCY = 7.37e6*(16/4) #define FSCL 400000 // Velocidad de transmisin del bus I2C en Hz (mx. 1 MHz) // Sentido del flujo de informacin #define MAESTRO_TR 0 #define MAESTRO_REC 1 #define ESCLAVO_TR 1 #define ESCLAVO_REC 0 // Tipo de informacin enviada #define DIRECCION 0 #define DATOS 1 // Respuesta esperada? (S/N) #define RESP_SI 1 #define RESP_NO 0 // Valores lgicos #define SI 1 #define NO 0 // Tamao de los vectores y colas #define TAM_TR_I2C 50 // Cola de transmisin #define TAM_REC_I2C 75 // Cola de recepcin // Prioridad de las interrupciones #define PR_INT_I2C 2
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
172
// Direcciones #define DIR_TCS3 0x08 #define DIR_BRUSHLESS_DI #define DIR_BRUSHLESS_DD #define DIR_BRUSHLESS_TI #define DIR_BRUSHLESS_TD #define DIR_GPS 0x0D // Instrucciones #define INST_DC 0 #define INST_VELOCIDAD 1 #define INST_CORRIENTE 2 #define PING 13
// ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PBLICAS ---------------------// ---------------------------------------------------------------------------------void InicializarI2C(unsigned char uc_direccion); void ProcesarMensajeI2C(void); #endif
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
173
3.7.
// // // // // // // // // // // // // // // //
I2C.c
------------------------------------------------------------------------------------------------------- MDULO I2C (Inter-Integrated Circuit) -----------------------------------------------------------------------------------------------------Archivo: I2C.c Descripcin: Mdulo encargado de controlar las comunicaciones a travs del bus I2C. Versin: 1.0.0 Fecha: 12/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "I2C.h" // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PRIVADAS ---------------------// ---------------------------------------------------------------------------------inline void HabilitarInterrupcionesEsclavoI2C(void); inline void DeshabilitarInterrupcionesEsclavoI2C(void); void __attribute__((__interrupt__)) _SI2CInterrupt(void); void PonerEnColaTransmisionI2C(unsigned char uc_dato); unsigned char SacarDeColaTransmisionI2C(void); void PonerEnColaRecepcionI2C(unsigned char uc_dato); unsigned char SacarDeColaRecepcionI2C(void); // ---------------------------------------------------------------------------------// -------------------------- VARIABLES GLOBALES AL MDULO -------------------------// ---------------------------------------------------------------------------------static static static static static unsigned unsigned unsigned unsigned unsigned char uc_cola_transmision[TAM_TR_I2C]; char uc_cola_recepcion[TAM_REC_I2C]; int ui_icabeza_tr = 0; int ui_icola_tr = 0; int ui_icabeza_rec = 0;
// Variables exclusivas del esclavo static unsigned char uc_direccion_esclavo; static unsigned int ui_icola_rec = 0; static unsigned u_procesar_mensaje_habilitado = SI;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
174
// ---------------------------------------------------------------------------------// ------------------------------ FUNCIONES DEL ESCLAVO ----------------------------// ---------------------------------------------------------------------------------/* Nombre: InicializarI2C * Descripcin: Funcin de inicializacin del mdulo esclavo del bus I2C. Como usa la configuracin de la UART para evitar falsos inicios de comunicacin, * debe llamarse antes que la funcin de inicializacin de dicho mdulo. * * Argumentos: unsigned char uc_direccion: Direccin del dispositivo esclavo * Valor devuelto: Ninguno * */ void InicializarI2C(unsigned char uc_direccion) { U1MODEbits.ALTIO = 0; // Utilizar los pines SDA y SCL para la UART U1MODEbits.UARTEN = 1; // Habilitar el mdulo UART que tiene ms prioridad // a la hora de usar los pines SDA y SCL que I2C // para prevenir falsos inicios de comunicacin // en la conexin // Direccin como esclavo uc_direccion_esclavo = uc_direccion; I2CADD = uc_direccion_esclavo; // Configuracin del mdulo I2C // (Los bits no modificados permanecen en el estado inicial) I2CCONbits.STREN = 1; // Habilitar la suspensin de la transmisin // en la recepcin I2CCONbits.GCEN = 0; // Deshabilitar las interrupciones para mensajes // de difusin o broadcast I2CCONbits.DISSLW = 1; // Deshabilitar el control del slew-rate // (Habilitar slo para 400 kHz) I2CCONbits.A10M = 0; // Direcciones de 7 bits (A10M = 1 para 10 bits) I2CCONbits.IPMIEN = 0; // No responder a cualquier direccin vlida // (Activar para repetidores) I2CCONbits.SCLREL = 1; // Transmisin inicialmente despierta I2CCONbits.I2CSIDL = 0; // Funcionar normalmente cuando el microcontrolador // entre en suspensin I2CCONbits.I2CEN = 1; // Habilitar el mdulo I2C y // configurar los puertos SDA y SCL U1MODEbits.UARTEN = 0; // Desactivar la UART // Prioridad de la interrupcin del esclavo // (mx. 7 - mn. 1, 4 por defecto) // Habilitar la atencin de las interrupciones // del esclavo // Borrar la bandera de desbordamiento // del buffer de lectura
// ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
175
/* Nombre: HabilitarInterrupcionesEsclavoI2C * Descripcin: Habilita las interrupciones del mdulo esclavo del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void HabilitarInterrupcionesEsclavoI2C(void) { IEC0bits.SI2CIE = 1; } // ---------------------------------------------------------------------------------/* Nombre: DeshabilitarInterrupcionesEsclavoI2C * Descripcin: Deshabilita las interrupciones del mdulo esclavo del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void DeshabilitarInterrupcionesEsclavoI2C(void) { IEC0bits.SI2CIE = 0; } // ---------------------------------------------------------------------------------/* Nombre: _SI2CInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a interrupcin que gestiona el protocolo I2C del mdulo esclavo. * Argumentos: Ninguno * * Valor devuelto: Ninguno */ void __attribute__((interrupt, no_auto_psv)) _SI2CInterrupt(void) { static unsigned char uc_num_caracteres; static unsigned char uc_caracteres_transmitidos = 0; static unsigned u_cabecera_recibida = NO; static unsigned u_direccion_recibida = NO; unsigned char uc_dato_recibido; IFS0bits.SI2CIF = 0; I2CSTATbits.I2COV = 0; // Borrar la bandera de la interrupcin // Borrar la bandera de desbordamiento del // buffer de lectura. Puede estar activa por // el envo de mensajes a otros esclavos.
// Direccin del dispositivo reconocida. Preparado para recibir if (I2CSTATbits.R_W == ESCLAVO_REC && I2CSTATbits.D_A == DIRECCION) { uc_dato_recibido = I2CRCV; // Leer la direccin para liberar // el buffer de lectura u_procesar_mensaje_habilitado = NO; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
176
// Datos recibidos else if (I2CSTATbits.R_W == ESCLAVO_REC && I2CSTATbits.D_A == DATOS) { // Como STREN = 1, la transmisin se suspende automticamente si al recibir // un nuevo dato I2CRCV sigue lleno (RBF = 1) con el del envo anterior. uc_dato_recibido = I2CRCV; I2CCONbits.SCLREL = 1; // Reanudar la transmisin por si est suspendida if (!u_cabecera_recibida) { uc_num_caracteres = uc_dato_recibido; u_cabecera_recibida = SI; } else PonerEnColaRecepcionI2C(uc_dato_recibido); uc_caracteres_transmitidos++; if (uc_caracteres_transmitidos > uc_num_caracteres) { uc_caracteres_transmitidos = 0; u_cabecera_recibida = NO; u_procesar_mensaje_habilitado = SI; } } // Direccin reconocida. Se puede enviar la respuesta else if (I2CSTATbits.R_W == ESCLAVO_TR) { // La transmisin se suspende automticamente para preparar la respuesta if (!u_direccion_recibida) { uc_dato_recibido = I2CRCV; ProcesarMensajeI2C(); uc_num_caracteres = uc_cola_transmision[ui_icola_tr]; u_direccion_recibida = SI; } if (uc_caracteres_transmitidos > uc_num_caracteres) { uc_caracteres_transmitidos = 0; u_direccion_recibida = NO; } else { I2CTRN = SacarDeColaTransmisionI2C(); I2CCONbits.SCLREL = 1; // Reanudar la transmisin uc_caracteres_transmitidos++; } } } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
177
/* Nombre: ProcesarMensajeI2C * Descripcin: Funcin que procesa todas las instrucciones recibidas por I2C. Como usa variables globales al mdulo y puede ser llamada desde * la rutina de interrupcin del esclavo, para responder inmediatamente * a las instrucciones que lo soliciten (lo cual obliga a procesar todo * lo que estuviese previamente en la cola), o ser atendida en el bucle * de scan, debe ser reentrante. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void ProcesarMensajeI2C(void) { unsigned char uc_instruccion; unsigned int ui_variable; DeshabilitarInterrupcionesEsclavoI2C(); if (u_procesar_mensaje_habilitado) { while (ui_icola_rec != ui_icabeza_rec) { uc_instruccion = SacarDeColaRecepcionI2C(); switch (uc_instruccion) { case INST_DC: // DC Motor DCMotor(SacarDeColaRecepcionI2C(), (SacarDeColaRecepcionI2C() << 8) | SacarDeColaRecepcionI2C()); break; case INST_VELOCIDAD: // Leer velocidad ui_variable = GetVelocidad(); PonerEnColaTransmisionI2C(3); // No caracteres PonerEnColaTransmisionI2C(uc_direccion_esclavo); // Direccin PonerEnColaTransmisionI2C(ui_variable >> 8); // Byte alto PonerEnColaTransmisionI2C(ui_variable); // Byte bajo break; case INST_CORRIENTE: // Leer corriente ui_variable = GetIntensidad(); PonerEnColaTransmisionI2C(3); // No caracteres PonerEnColaTransmisionI2C(uc_direccion_esclavo); // Direccin PonerEnColaTransmisionI2C(ui_variable >> 8); // Byte alto PonerEnColaTransmisionI2C(ui_variable); // Byte bajo break; case PING: // Ping PonerEnColaTransmisionI2C(2); // No caracteres PonerEnColaTransmisionI2C(uc_direccion_esclavo); // Direccin PonerEnColaTransmisionI2C(7); // Respuesta break; } } } HabilitarInterrupcionesEsclavoI2C(); } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
178
/* Nombre: PonerEnColaTransmisionI2C * Descripcin: Funcin que coloca un dato en la cola de transmisin y gestiona el rebose del ndice. * * Argumentos: unsigned char uc_dato: Caracter que se quiere poner en cola * * Valor devuelto: Ninguno */ void PonerEnColaTransmisionI2C(unsigned char uc_dato) { uc_cola_transmision[ui_icabeza_tr] = uc_dato; ui_icabeza_tr++; if (ui_icabeza_tr == TAM_TR_I2C) ui_icabeza_tr = 0; } // ---------------------------------------------------------------------------------/* Nombre: SacarDeColaTransmisionI2C * Descripcin: Funcin que obtiene un dato de la cola de transmisin y gestiona el rebose del ndice. * * Argumentos: Ninguno * Valor devuelto: unsigned char: Caracter recuperado de la cola * */ unsigned char SacarDeColaTransmisionI2C(void) { unsigned char uc_dato; uc_dato = uc_cola_transmision[ui_icola_tr]; ui_icola_tr++; if (ui_icola_tr == TAM_TR_I2C) ui_icola_tr = 0; return uc_dato; } // ---------------------------------------------------------------------------------/* Nombre: PonerEnColaRecepcionI2C * Descripcin: Funcin que coloca un dato en la cola de recepcin y gestiona el rebose del ndice. * Argumentos: * unsigned char uc_dato: Caracter que se quiere poner en cola * Valor devuelto: Ninguno * */ void PonerEnColaRecepcionI2C(unsigned char uc_dato) { uc_cola_recepcion[ui_icabeza_rec] = uc_dato; ui_icabeza_rec++; if (ui_icabeza_rec == TAM_REC_I2C) ui_icabeza_rec = 0; } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
179
/* Nombre: SacarDeColaRecepcionI2C * Descripcin: Funcin que obtiene un dato de la cola de recepcin y gestiona el rebose del ndice. * * Argumentos: Ninguno * Valor devuelto: unsigned char: Caracter recuperado de la cola * */ unsigned char SacarDeColaRecepcionI2C() { unsigned char uc_dato; uc_dato = uc_cola_recepcion[ui_icola_rec]; ui_icola_rec++; if (ui_icola_rec == TAM_REC_I2C) ui_icola_rec = 0; return uc_dato; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
180
main.c
---------------------------------------------------------------------------------------------------------- GPS (Global Positioning System) --------------------------------------------------------------------------------------------------------Archivo: main.c Descripcin: Programa de control del GPS. Recibe peridicamente informacin del dispositivo a travs del puerto serie y la enva por I2C cuando se solicita. Versin: 1.0.0 Fecha: 08/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "p30F3010.h" #include "I2C.h" #include "RS232.h" // ---------------------------------------------------------------------------------// ----------------------------- BITS DE CONFIGURACIN -----------------------------// ---------------------------------------------------------------------------------_FOSC(FRC_PLL16 & CSW_FSCM_OFF); // Seleccin del oscilador. // No permitir conmutacin de reloj _FWDT(WDT_OFF); // Desactivar el Watch-Dog Timer _FBORPOR(PBOR_ON & BORV_45 & PWRT_16 & MCLR_EN & RST_IOPIN); _FICD(ICS_PGD2); // Usar EMUC2 y EMUD2 para programar y depurar
// ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
181
int main(void) { while(!OSCCONbits.LOCK); // Esperar a que el PLL se sincronice // Inicializaciones InicializarI2C(DIR_GPS); InicializarUART(); // Bucle de scan while (1) { ProcesarUART(); ProcesarMensajeI2C(); } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
182
4.2.
// // // // // // // // // // // // // // //
RS232.h
-------------------------------------------------------------------------------------- INTERFAZ DEL MDULO UART (Universal Asynchronous Receiver Transmitter) -------------------------------------------------------------------------------------Archivo: RS232.h Descripcin: Mdulo que controla las comunicaciones a travs del puerto serie. Versin: 1.0.0 Fecha: 15/04/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#ifndef _RS232_H #define _RS232_H // ---------------------------------------------------------------------------------// Ruta: C:\Archivos de Programa\Microchip\MPLAB C30\support\dsPIC30F\h\p30F3010.h #include "p30f3010.h" #include <string.h> // ---------------------------------------------------------------------------------// Frecuencias de trabajo #define FCY 29480000 // Oscilador: FRC (7.37 MHz) PLL x16 -> FCY = 7.37e6*(16/4) #define BAUDRATE 38400 // Velocidad de transmisin del puerto serie en baudios // Tamao de los vectores y colas #define TAM_TR_UART 100 // Cola de transmisin #define TAM_REC_UART 200 // Cola de recepcin #define TAM_MENS_REC 85 // Mensaje recibido del GPS (mx. 82 caracteres) #define TAM_INST_GPS 7 // Instruccin #define TAM_PARAM_GPS 11 // Parmetros asociados a las instrucciones #define TAM_COORD_GPS 30 // Coordenadas #define TAM_FECHA_GPS 7 // Fecha #define TAM_HORA_GPS 7 // Hora // Prioridad de las interrupciones #define PR_INT_TX_UART 6 // Transmisin #define PR_INT_RX_UART 6 // Recepcin // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PBLICAS ---------------------// ---------------------------------------------------------------------------------void InicializarUART(void); void ProcesarUART(void); unsigned int GetCoordenadasGPS (char *c_coordenadas); unsigned int GetHoraGPS (char *c_hora); unsigned int GetFechaGPS (char *c_fecha); #endif
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
183
4.3.
// // // // // // // // // // // // // // //
RS232.c
--------------------------------------------------------------------------------------------- MDULO UART (Universal Asynchronous Receiver Transmitter) -------------------------------------------------------------------------------------------Archivo: RS232.c Descripcin: Mdulo que controla las comunicaciones a travs del puerto serie. Versin: 1.0.0 Fecha: 15/04/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "RS232.h" // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PRIVADAS ---------------------// ---------------------------------------------------------------------------------void PonerEnColaTransmisionUART(unsigned char uc_dato); unsigned char SacarDeColaTransmisionUART(void); void PonerEnColaRecepcionUART(unsigned char uc_dato); unsigned char SacarDeColaRecepcionUART(void); void __attribute__((interrupt,no_auto_psv)) _U1TXInterrupt(void); void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void); void ProcesarMensaje(char *c_mensaje); // ---------------------------------------------------------------------------------// -------------------------- VARIABLES GLOBALES AL MDULO -------------------------// ---------------------------------------------------------------------------------static static static static static static static static static unsigned char uc_cola_transmision[TAM_TR_UART]; unsigned char uc_cola_recepcion[TAM_REC_UART]; unsigned int ui_icabeza_tr = 0; unsigned int ui_icola_tr = 0; unsigned int ui_icabeza_rec = 0; unsigned int ui_icola_rec = 0; char c_coordenadasGPS[TAM_COORD_GPS]; char c_fechaGPS[TAM_FECHA_GPS]; char c_horaGPS[TAM_HORA_GPS];
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
184
// ---------------------------------------------------------------------------------// ------------------------------------ FUNCIONES ----------------------------------// ---------------------------------------------------------------------------------/* Nombre: InicializarUART * Descripcin: Funcin de inicializacin del mdulo UART. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void InicializarUART(void) { U1BRG = (FCY/BAUDRATE)/16 - 1; // Velocidad de transmisin U1MODEbits.STSEL U1MODEbits.PDSEL U1MODEbits.ALTIO = 0; = 0; = 1; // // // // // // // // // // // Bits de parada: 1 Bits de datos: 8, Paridad: Ninguna Usar los pines de Tx y Rx alternativos (U1ATX y U1ARX). Los estndar (U1TX y U1RX) coinciden con SCL y SDA del bus I2C Habilitar el mdulo UART Habilitar la transmisin (Slo si UARTEN = 1) Modo de interrupcion de Tx: Cada vez que se vacia U1TXREG Modo de interrupcion de Rx: Cuando se recibe un caracter
= PR_INT_TX_UART; // Prioridad de la int. de transmisin = PR_INT_RX_UART; // Prioridad de la int. de recepcin = 0; = 1; // Deshabilitar las interrupciones de transmisin // Habilitar las interrupciones de recepcin
// ---------------------------------------------------------------------------------/* Nombre: PonerEnColaTransmisionUART * Descripcin: Funcin que coloca un dato en la cola de transmisin y gestiona el rebose del ndice. * * Argumentos: unsigned char uc_dato: Caracter que se quiere poner en cola * * Valor devuelto: Ninguno */ void PonerEnColaTransmisionUART(unsigned char uc_dato) { uc_cola_transmision[ui_icabeza_tr] = uc_dato; ui_icabeza_tr++; if (ui_icabeza_tr == TAM_TR_UART) ui_icabeza_tr = 0; } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
185
/* Nombre: SacarDeColaTransmision * Descripcin: Funcin que obtiene un dato de la cola de transmisin y gestiona el rebose del ndice. * * Argumentos: Ninguno * Valor devuelto: unsigned char: Caracter recuperado de la cola * */ unsigned char SacarDeColaTransmisionUART(void) { unsigned char uc_dato; uc_dato = uc_cola_transmision[ui_icola_tr]; ui_icola_tr++; if (ui_icola_tr == TAM_TR_UART) ui_icola_tr = 0; return uc_dato; } // ---------------------------------------------------------------------------------/* Nombre: PonerEnColaRecepcionUART * Descripcin: Funcin que coloca un dato en la cola de recepcin y gestiona el rebose del ndice. * * Argumentos: unsigned char uc_dato: Caracter que se quiere poner en cola * Valor devuelto: Ninguno * */ void PonerEnColaRecepcionUART(unsigned char uc_dato) { uc_cola_recepcion[ui_icabeza_rec] = uc_dato; ui_icabeza_rec++; if (ui_icabeza_rec == TAM_REC_UART) ui_icabeza_rec = 0; } // ---------------------------------------------------------------------------------/* Nombre: SacarDeColaRecepcionUART * Descripcin: Funcin que obtiene un dato de la cola de recepcin y gestiona el rebose del ndice. * Argumentos: Ninguno * * Valor devuelto: unsigned char: Caracter recuperado de la cola * */ unsigned char SacarDeColaRecepcionUART() { unsigned char uc_dato; uc_dato = uc_cola_recepcion[ui_icola_rec]; ui_icola_rec++; if (ui_icola_rec == TAM_REC_UART) ui_icola_rec = 0; return uc_dato; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
186
/* Nombre: _U1TXInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a interrupcin del mdulo de transmisin. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void __attribute__((interrupt,no_auto_psv)) _U1TXInterrupt(void) { IFS0bits.U1TXIF = 0; // Borrar la bandera de la interrupcin U1TXREG = SacarDeColaTransmisionUART(); if (ui_icola_tr == ui_icabeza_tr) IEC0bits.U1TXIE = 0; // Deshabilitar interrupciones de transmisin } // ---------------------------------------------------------------------------------/* Nombre: _U1RXInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a interrupcin del mdulo de recepcin. * Argumentos: Ninguno * Valor devuelto: Ninguno */ void __attribute__((interrupt,no_auto_psv)) _U1RXInterrupt(void) { IFS0bits.U1TXIF = 0; // Borrar la bandera de la interrupcin PonerEnColaRecepcionUART(U1RXREG); } // ---------------------------------------------------------------------------------/* Nombre: ProcesarUART * Descripcin: Funcin encargada de procesar los mensajes recibidos a travs del puerto serie. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void ProcesarUART(void) { static char c_mensaje[TAM_MENS_REC]; static unsigned int ui_imensaje = 0; if (ui_icola_rec != ui_icabeza_rec) { do{ c_mensaje[ui_imensaje] = SacarDeColaRecepcionUART(); ui_imensaje++; }while((ui_icola_rec != ui_icabeza_rec) || (c_mensaje[ui_imensaje - 1] == \n)); } if (c_mensaje[ui_imensaje - 1] == \n) { c_mensaje[ui_imensaje - 4] = \0; // Eliminar el checksum, el CR y el LF ProcesarMensaje(c_mensaje); ui_imensaje = 0; } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
187
/* Nombre: ProcesarMensaje * Descripcin: Funcin encargada de identificar el mensaje recibido y discriminar la informacin til. * * Argumentos: char *c_mensaje: Mensaje recibido a travs del puerto serie * * Valor devuelto: Ninguno */ void ProcesarMensaje(char *c_mensaje) { int i = 0; int j = 0; unsigned char uc_num_parametro = 1; char c_instruccion[TAM_INST_GPS]; char c_parametro[TAM_PARAM_GPS]; static char c_coordenadas[TAM_COORD_GPS]; // Obtener el cdigo de instruccin while (c_mensaje[i] != ,) { c_instruccion[i] = c_mensaje[i]; i++; } c_instruccion[i] = \0; // Adquirir los parmetros if (!strcmp(c_instruccion,"$GPGGA")) // Devuelve 0 si las cadenas son iguales { while (uc_num_parametro <= 7) { c_parametro[j++] = c_mensaje[i++]; if (c_mensaje[i-1] == , || c_mensaje[i-1] == *) { c_parametro[j] = \0; j = 0; if (uc_num_parametro == 1) strcpy(c_horaGPS, c_parametro); else if (uc_num_parametro == 2) strcpy(c_coordenadas, c_parametro); else if((uc_num_parametro <= 3 && uc_num_parametro >=5) || uc_num_parametro == 7) strcat(c_coordenadas, c_parametro); uc_num_parametro++; } } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
188
else if (!strcmp(c_instruccion,"$GPRMC")) { while (uc_num_parametro <= 9) { c_parametro[j++] = c_mensaje[i++]; if (c_mensaje[i-1] == , || c_mensaje[i-1] == *) { c_parametro[j] = \0; j = 0; if (uc_num_parametro == 2) strcat(c_coordenadas, c_parametro); else if (uc_num_parametro == 9) strcpy(c_fechaGPS, c_parametro); uc_num_parametro++; } } strcpy(c_coordenadasGPS, c_coordenadas); } } // ---------------------------------------------------------------------------------/* Nombre: GetCoordenadasGPS * Descripcin: Funcin que devuelve las ltimas coordenadas recibidas del GPS. * Argumentos: * char *c_coordenadas: Puntero por el que se devuelven las coordenadas * * Valor devuelto: unsigned int: Longitud de la cadena de caracteres * */ unsigned int GetCoordenadasGPS (char *c_coordenadas) { strcpy(c_coordenadas, c_coordenadasGPS); return (strlen(c_coordenadas)); } // ---------------------------------------------------------------------------------/* Nombre: GetHoraGPS * Descripcin: Funcin que devuelve la hora recibida del GPS. * Argumentos: char *c_hora: Puntero por el que se devuelve la hora * * Valor devuelto: unsigned int: Longitud de la cadena de caracteres * */ unsigned int GetHoraGPS (char *c_hora) { strcpy(c_hora, c_horaGPS); return (strlen(c_hora)); } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
189
/* Nombre: GetFechaGPS * Descripcin: Funcin que devuelve la fecha recibida del GPS. * Argumentos: char *c_hora: Puntero por el que se devuelve la fecha * * Valor devuelto: unsigned int: Longitud de la cadena de caracteres * */ unsigned int GetFechaGPS (char *c_fecha) { strcpy(c_fecha, c_fechaGPS); return (strlen(c_fecha)); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
190
4.4.
// // // // // // // // // // // // // // // //
I2C.h
------------------------------------------------------------------------------------------------- INTERFAZ DEL MDULO I2C (Inter-Integrated Circuit) ----------------------------------------------------------------------------------------------Archivo: I2C.h Descripcin: Mdulo encargado de controlar las comunicaciones a travs del bus I2C. Versin: 1.0.0 Fecha: 12/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#ifndef _I2C_H #define _I2C_H // ---------------------------------------------------------------------------------// Ruta: C:\Archivos de Programa\Microchip\MPLAB C30\support\dsPIC30F\h\p30F3010.h #include "p30f3010.h" // ---------------------------------------------------------------------------------// Frecuencias de trabajo #define FCY 29480000 // Oscilador: FRC (7.37 MHz) PLL x16 -> FCY = 7.37e6*(16/4) #define FSCL 400000 // Velocidad de transmisin del bus I2C en Hz (mx. 1 MHz) // Sentido del flujo de informacin #define MAESTRO_TR 0 #define MAESTRO_REC 1 #define ESCLAVO_TR 1 #define ESCLAVO_REC 0 // Tipo de informacin enviada #define DIRECCION 0 #define DATOS 1 // Respuesta esperada? (S/N) #define RESP_SI 1 #define RESP_NO 0 // Valores lgicos #define SI 1 #define NO 0 // Tamao de los vectores y colas #define TAM_TR_I2C 50 // Cola de transmisin #define TAM_REC_I2C 75 // Cola de recepcin #define TAM_MED_GPS 85 // Tamao mximo de las medidas del GPS // Prioridad de las interrupciones #define PR_INT_I2C 6
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
191
// Direcciones #define DIR_TCS3 0x08 #define DIR_BRUSHLESS_DI #define DIR_BRUSHLESS_DD #define DIR_BRUSHLESS_TI #define DIR_BRUSHLESS_TD #define DIR_GPS 0x0D // Instrucciones #define INST_COORD 0 #define INST_HORA 1 #define INST_FECHA 2 #define PING 13
// ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PBLICAS ---------------------// ---------------------------------------------------------------------------------void InicializarI2C(unsigned char uc_direccion); void ProcesarMensajeI2C(void); #endif
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
192
4.5.
// // // // // // // // // // // // // // // //
I2C.c
------------------------------------------------------------------------------------------------------- MDULO I2C (Inter-Integrated Circuit) -----------------------------------------------------------------------------------------------------Archivo: I2C.c Descripcin: Mdulo encargado de controlar las comunicaciones a travs del bus I2C. Versin: 1.0.0 Fecha: 12/05/2010 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "I2C.h" // ---------------------------------------------------------------------------------// ---------------------- PROTOTIPOS DE LAS FUNCIONES PRIVADAS ---------------------// ---------------------------------------------------------------------------------inline void HabilitarInterrupcionesEsclavoI2C(void); inline void DeshabilitarInterrupcionesEsclavoI2C(void); void __attribute__((__interrupt__)) _SI2CInterrupt(void); void PonerEnColaTransmisionI2C(unsigned char uc_dato); unsigned char SacarDeColaTransmisionI2C(void); void PonerEnColaRecepcionI2C(unsigned char uc_dato); unsigned char SacarDeColaRecepcionI2C(void); // ---------------------------------------------------------------------------------// -------------------------- VARIABLES GLOBALES AL MDULO -------------------------// ---------------------------------------------------------------------------------static static static static static unsigned unsigned unsigned unsigned unsigned char uc_cola_transmision[TAM_TR_I2C]; char uc_cola_recepcion[TAM_REC_I2C]; int ui_icabeza_tr = 0; int ui_icola_tr = 0; int ui_icabeza_rec = 0;
// Variables exclusivas del esclavo static unsigned char uc_direccion_esclavo; static unsigned int ui_icola_rec = 0; static unsigned u_procesar_mensaje_habilitado = SI;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
193
// ---------------------------------------------------------------------------------// ------------------------------ FUNCIONES DEL ESCLAVO ----------------------------// ---------------------------------------------------------------------------------/* Nombre: InicializarI2C * Descripcin: Funcin de inicializacin del mdulo esclavo del bus I2C. Como usa la configuracin de la UART para evitar falsos inicios de comunicacin, * debe llamarse antes que la funcin de inicializacin de dicho mdulo. * * Argumentos: unsigned char uc_direccion: Direccin del dispositivo esclavo * Valor devuelto: Ninguno * */ void InicializarI2C(unsigned char uc_direccion) { U1MODEbits.ALTIO = 0; // Utilizar los pines SDA y SCL para la UART U1MODEbits.UARTEN = 1; // Habilitar el mdulo UART que tiene ms prioridad // a la hora de usar los pines SDA y SCL que I2C // para prevenir falsos inicios de comunicacin // en la conexin // Direccin como esclavo uc_direccion_esclavo = uc_direccion; I2CADD = uc_direccion_esclavo; // Configuracin del mdulo I2C // (Los bits no modificados permanecen en el estado inicial) I2CCONbits.STREN = 1; // Habilitar la suspensin de la transmisin // en la recepcin I2CCONbits.GCEN = 0; // Deshabilitar las interrupciones para mensajes // de difusin o broadcast I2CCONbits.DISSLW = 1; // Deshabilitar el control del slew-rate // (Habilitar slo para 400 kHz) I2CCONbits.A10M = 0; // Direcciones de 7 bits (A10M = 1 para 10 bits) I2CCONbits.IPMIEN = 0; // No responder a cualquier direccin vlida // (Activar para repetidores) I2CCONbits.SCLREL = 1; // Transmisin inicialmente despierta I2CCONbits.I2CSIDL = 0; // Funcionar normalmente cuando el microcontrolador // entre en suspensin I2CCONbits.I2CEN = 1; // Habilitar el mdulo I2C y // configurar los puertos SDA y SCL U1MODEbits.UARTEN = 0; // Desactivar la UART // Prioridad de la interrupcin del esclavo // (mx. 7 - mn. 1, 4 por defecto) // Habilitar la atencin de las interrupciones // del esclavo // Borrar la bandera de desbordamiento // del buffer de lectura
// ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
194
/* Nombre: HabilitarInterrupcionesEsclavoI2C * Descripcin: Habilita las interrupciones del mdulo esclavo del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void HabilitarInterrupcionesEsclavoI2C(void) { IEC0bits.SI2CIE = 1; } // ---------------------------------------------------------------------------------/* Nombre: DeshabilitarInterrupcionesEsclavoI2C * Descripcin: Deshabilita las interrupciones del mdulo esclavo del bus I2C. * Argumentos: Ninguno * Valor devuelto: Ninguno */ inline void DeshabilitarInterrupcionesEsclavoI2C(void) { IEC0bits.SI2CIE = 0; } // ---------------------------------------------------------------------------------/* Nombre: _SI2CInterrupt (establecido por defecto por el microcontrolador) * Descripcin: Rutina de atencin a interrupcin que gestiona el protocolo I2C del mdulo esclavo. * Argumentos: Ninguno * * Valor devuelto: Ninguno */ void __attribute__((interrupt, no_auto_psv)) _SI2CInterrupt(void) { static unsigned char uc_num_caracteres; static unsigned char uc_caracteres_transmitidos = 0; static unsigned u_cabecera_recibida = NO; static unsigned u_direccion_recibida = NO; unsigned char uc_dato_recibido; IFS0bits.SI2CIF = 0; I2CSTATbits.I2COV = 0; // Borrar la bandera de la interrupcin // Borrar la bandera de desbordamiento del // buffer de lectura. Puede estar activa por // el envo de mensajes a otros esclavos.
// Direccin del dispositivo reconocida. Preparado para recibir if (I2CSTATbits.R_W == ESCLAVO_REC && I2CSTATbits.D_A == DIRECCION) { uc_dato_recibido = I2CRCV; // Leer la direccin para liberar // el buffer de lectura u_procesar_mensaje_habilitado = NO; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
195
// Datos recibidos else if (I2CSTATbits.R_W == ESCLAVO_REC && I2CSTATbits.D_A == DATOS) { // Como STREN = 1, la transmisin se suspende automticamente si al recibir // un nuevo dato I2CRCV sigue lleno (RBF = 1) con el del envo anterior. uc_dato_recibido = I2CRCV; I2CCONbits.SCLREL = 1; // Reanudar la transmisin por si est suspendida if (!u_cabecera_recibida) { uc_num_caracteres = uc_dato_recibido; u_cabecera_recibida = SI; } else PonerEnColaRecepcionI2C(uc_dato_recibido); uc_caracteres_transmitidos++; if (uc_caracteres_transmitidos > uc_num_caracteres) { uc_caracteres_transmitidos = 0; u_cabecera_recibida = NO; u_procesar_mensaje_habilitado = SI; } } // Direccin reconocida. Se puede enviar la respuesta else if (I2CSTATbits.R_W == ESCLAVO_TR) { // La transmisin se suspende automticamente para preparar la respuesta if (!u_direccion_recibida) { uc_dato_recibido = I2CRCV; ProcesarMensajeI2C(); uc_num_caracteres = uc_cola_transmision[ui_icola_tr]; u_direccion_recibida = SI; } if (uc_caracteres_transmitidos > uc_num_caracteres) { uc_caracteres_transmitidos = 0; u_direccion_recibida = NO; } else { I2CTRN = SacarDeColaTransmisionI2C(); I2CCONbits.SCLREL = 1; // Reanudar la transmisin uc_caracteres_transmitidos++; } } } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
196
/* Nombre: ProcesarMensajeI2C * Descripcin: Funcin que procesa todas las instrucciones recibidas por I2C. Como usa variables globales al mdulo y puede ser llamada desde * la rutina de interrupcin del esclavo, para responder inmediatamente * a las instrucciones que lo soliciten (lo cual obliga a procesar todo * lo que estuviese previamente en la cola), o ser atendida en el bucle * de scan, debe ser reentrante. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ void ProcesarMensajeI2C(void) { unsigned char uc_instruccion; char c_medidasGPS[TAM_MED_GPS]; unsigned int ui_num_caracteres = 0; int i; DeshabilitarInterrupcionesEsclavoI2C(); if (u_procesar_mensaje_habilitado) { while (ui_icola_rec != ui_icabeza_rec) { uc_instruccion = SacarDeColaRecepcionI2C(); switch (uc_instruccion) { case INST_COORD: // Coordenadas ui_num_caracteres = GetCoordenadasGPS(c_medidasGPS); PonerEnColaTransmisionI2C(ui_num_caracteres); // N o caracteres for (i = 0; i < ui_num_caracteres; i++) PonerEnColaTransmisionI2C(c_medidasGPS[i]); // Datos break; case INST_HORA: // Hora ui_num_caracteres = GetHoraGPS(c_medidasGPS); PonerEnColaTransmisionI2C(ui_num_caracteres); // N o caracteres for (i = 0; i < ui_num_caracteres; i++) PonerEnColaTransmisionI2C(c_medidasGPS[i]); // Datos break; case INST_FECHA: // Fecha ui_num_caracteres = GetFechaGPS(c_medidasGPS); PonerEnColaTransmisionI2C(ui_num_caracteres); // N o caracteres for (i = 0; i < ui_num_caracteres; i++) PonerEnColaTransmisionI2C(c_medidasGPS[i]); // Datos break; case PING: // Ping PonerEnColaTransmisionI2C(2); // No caracteres PonerEnColaTransmisionI2C(uc_direccion_esclavo); // Direccin PonerEnColaTransmisionI2C(7); // Respuesta break; } } } HabilitarInterrupcionesEsclavoI2C(); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
197
/* Nombre: PonerEnColaTransmisionI2C * Descripcin: Funcin que coloca un dato en la cola de transmisin y gestiona el rebose del ndice. * * Argumentos: unsigned char uc_dato: Caracter que se quiere poner en cola * * Valor devuelto: Ninguno */ void PonerEnColaTransmisionI2C(unsigned char uc_dato) { uc_cola_transmision[ui_icabeza_tr] = uc_dato; ui_icabeza_tr++; if (ui_icabeza_tr == TAM_TR_I2C) ui_icabeza_tr = 0; } // ---------------------------------------------------------------------------------/* Nombre: SacarDeColaTransmisionI2C * Descripcin: Funcin que obtiene un dato de la cola de transmisin y gestiona el rebose del ndice. * * Argumentos: Ninguno * Valor devuelto: unsigned char: Caracter recuperado de la cola * */ unsigned char SacarDeColaTransmisionI2C(void) { unsigned char uc_dato; uc_dato = uc_cola_transmision[ui_icola_tr]; ui_icola_tr++; if (ui_icola_tr == TAM_TR_I2C) ui_icola_tr = 0; return uc_dato; } // ---------------------------------------------------------------------------------/* Nombre: PonerEnColaRecepcionI2C * Descripcin: Funcin que coloca un dato en la cola de recepcin y gestiona el rebose del ndice. * Argumentos: * unsigned char uc_dato: Caracter que se quiere poner en cola * Valor devuelto: Ninguno * */ void PonerEnColaRecepcionI2C(unsigned char uc_dato) { uc_cola_recepcion[ui_icabeza_rec] = uc_dato; ui_icabeza_rec++; if (ui_icabeza_rec == TAM_REC_I2C) ui_icabeza_rec = 0; } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
198
/* Nombre: SacarDeColaRecepcionI2C * Descripcin: Funcin que obtiene un dato de la cola de recepcin y gestiona el rebose del ndice. * * Argumentos: Ninguno * Valor devuelto: unsigned char: Caracter recuperado de la cola * */ unsigned char SacarDeColaRecepcionI2C() { unsigned char uc_dato; uc_dato = uc_cola_recepcion[ui_icola_rec]; ui_icola_rec++; if (ui_icola_rec == TAM_REC_I2C) ui_icola_rec = 0; return uc_dato; }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
199
CCinematica.h
---------------------------------------------------------------------------------------------------------- INTERFAZ DE LA CLASE CCinematica -------------------------------------------------------------------------------------------------------Archivo: CCinematica.h Descripcin: Clase encargada de calcular las disitintas cinemticas posibles del robot. Versin: 1.0.0 Fecha: 28/11/2009 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#pragma once // ---------------------------------------------------------------------------------#include <math.h> #define PI 3.1415926535897932384626433832795 // Dimensiones (cm) #define VIA 30 #define DIST_MOTOR_RUEDA 8 #define RADIO_RUEDA 6 #define LONG_PLAT_SUP 26 #define LONG_BARRA_DIAG 20 // ngulos iniciales de la plataforma ( o ) #define ANGULO_DELANTERO_INICIAL 30 #define ANGULO_TRASERO_INICIAL 30 // Aceleracin mxima #define ACELERACION 10
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
200
// Cinemticas #define ACKERMAN 0 #define DOBLE_ACKERMAN 1 #define SINCRONA 2 #define ROTAR 3 // Traccin #define DELANTERA 1 #define TRASERA 2 #define TOTAL 3 // ndices de los motores y servos #define iMDI 0 #define iMDD 1 #define iMTD 2 #define iMTI 3 #define iSDI 4 #define iSDD 5 #define iSTD 6 #define iSTI 7 // ---------------------------------------------------------------------------------class CCinematica { private: // Variables double m_d_batalla; double m_vd_pos_objetivo[8]; // Funciones privadas void PotenciaMaxima(double &d_potencia); void Aceleracion(double *pd_consignas); public: // Constructor y destructor CCinematica(void); ~CCinematica(void); // Funciones pblicas void Ackerman(double &d_potencia, const double &d_giro, double *pd_consignas); void DobleAckerman(double &d_potencia, const double &d_giro, double *pd_consignas); void Sincrona(double &d_potencia, const double &d_giro, double *pd_consignas); void Rotar(double &d_potencia, double *pd_consignas); void CalcularBatalla(const double &d_angulo_plataforma_delantero, const double &d_angulo_plataforma_trasero); };
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
201
5.2.
// // // // // // // // // // // // // // // //
CCinematica.cpp
----------------------------------------------------------------------------------------------------------------- CLASE CCinematica ---------------------------------------------------------------------------------------------------------------Archivo: CCinematica.cpp Descripcin: Clase encargada de calcular las disitintas cinemticas posibles del robot. Versin: 1.0.0 Fecha: 28/11/2009 Autor: Jaime Boal Martn-Larrauri ----------------------------------------------------------------------------------
#include "StdAfx.h" #include "CCinematica.h" // ---------------------------------------------------------------------------------// --------------------------- CONSTRUCTOR Y DESTRUCTOR ----------------------------// ---------------------------------------------------------------------------------/* Nombre: CCinematica * Descripcin: Constructor por defecto. Inicializa la velocidad de los motores y la posicin de los servos. * * Argumentos: Ninguno * Valor devuelto: Ninguno */ CCinematica::CCinematica(void) { for (unsigned int i = 0; i < 8; i++) m_vd_pos_objetivo[i] = 0; CalcularBatalla(ANGULO_DELANTERO_INICIAL, ANGULO_TRASERO_INICIAL); } // ---------------------------------------------------------------------------------/* Nombre: ~CCinematica * Descripcin: Destructor por defecto. * Argumentos: Ninguno * Valor devuelto: Ninguno */ CCinematica::~CCinematica(void) { }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
202
// ---------------------------------------------------------------------------------// ------------------------- FUNCIONES DE LAS CINEMTICAS --------------------------// ---------------------------------------------------------------------------------/* Nombre: Ackerman * Descripcin: Funcin que calcula una cinemtica Ackerman a partir de la potencia y el giro. * * Argumentos: double &d_potencia: Potencia en % aplicada a una rueda triciclo equivalente * situada en el centro del eje delantero. Si algn motor * superase su potencia mxima, se la aplica la potencia * mxima admisible y se corrige la de los dems motores. * Se devuelve por esta variable la potencia efectiva * aplicada en porcentaje. * const double &d_giro: Giro en grados de la rueda triciclo equivalente * double *pd_consignas: Vector por el que se devuelven las consignas para los * motores ( %) y los servos de direccin ( o ) * * Valor devuelto: Ninguno */ void CCinematica::Ackerman(double &d_potencia, const double &d_giro, double *pd_consignas) { double d_angulo_interior = 0; double d_angulo_exterior = 0; double d_rs, d_ro, d_ri, d_ho, d_rg; // Potencia de los motores if (d_giro != 0) // Si no se desplaza en lnea recta { d_angulo_exterior = atan(1/(1/tan(fabs(d_giro)*PI/180) + VIA/(2*m_d_batalla))); d_angulo_interior = atan(1/(1/tan(fabs(d_giro)*PI/180) VIA/(2*m_d_batalla))); d_rs d_ro d_ri d_ho d_rg = = = = = fabs(m_d_batalla/sin(d_giro*PI/180)); fabs(m_d_batalla/sin(d_angulo_exterior)); fabs(m_d_batalla/sin(d_angulo_interior)); fabs(m_d_batalla/tan(d_angulo_exterior)); sqrt((d_ho-VIA/2)*(d_ho-VIA/2)+(m_d_batalla/2)*(m_d_batalla/2));
if (d_giro > 0) { m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMTD] d_potencia/d_rg; m_vd_pos_objetivo[iMTI] } else { m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMTI] d_potencia/d_rg; m_vd_pos_objetivo[iMTD] } }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
203
else // Si se mueve en lnea recta { m_vd_pos_objetivo[iMDI] = d_potencia; m_vd_pos_objetivo[iMDD] = d_potencia; m_vd_pos_objetivo[iMTD] = d_potencia; m_vd_pos_objetivo[iMTI] = d_potencia; } // Ajustar la potencia para que no sobrepase el 100 % PotenciaMaxima(d_potencia); // Direccin if (d_giro >= 0) { m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] } else { m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] }
= d_angulo_exterior*180/PI; = d_angulo_interior*180/PI;
= d_angulo_interior*180/PI; = d_angulo_exterior*180/PI;
// Las ruedas traseras no son directrices en una Ackerman convencional m_vd_pos_objetivo[iSTD] = 0; m_vd_pos_objetivo[iSTI] = 0; // Clculo de la curva de aceleracin de los motores Aceleracion(pd_consignas); // Devolucin de las consignas que hay que aplicar for (unsigned int i = iSDI; i <= iSTI; i++) pd_consignas[i] = m_vd_pos_objetivo[i]; } // ---------------------------------------------------------------------------------/* Nombre: DobleAckerman * Descripcin: Funcin que calcula una cinemtica Doble Ackerman a partir de la potencia y el giro. * * Argumentos: double &d_potencia: Potencia en % aplicada a una rueda triciclo equivalente * situada en el centro del eje delantero. Si algn motor * superase su potencia mxima, se la aplica la potencia * mxima admisible y se corrige la de los dems motores * Se devuelve por esta variable la potencia efectiva * aplicada en porcentaje. * const double &d_giro: Giro en grados de la rueda triciclo equivalente * double *pd_consignas: Vector por el que se devuelven las consignas para * los motores ( %) y los servos de direccin ( o ) * * Valor devuelto: Ninguno */ void CCinematica::DobleAckerman(double &d_potencia, const double &d_giro, double *pd_consignas) { double d_angulo_interior = 0; double d_angulo_exterior = 0; double d_rs, d_ro, d_ri, d_ho, d_rg;
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
204
// Potencia de los motores if (d_giro != 0) // Si no se desplaza en lnea recta { d_angulo_exterior = atan(1/(1/tan(fabs(d_giro)*PI/180) + VIA/(m_d_batalla))); d_angulo_interior = atan(1/(1/tan(fabs(d_giro)*PI/180) - VIA/(m_d_batalla))); d_rs d_ro d_ri d_ho d_rg = = = = = fabs((m_d_batalla/2)/sin(d_giro*PI/180)); fabs((m_d_batalla/2)/sin(d_angulo_exterior)); fabs((m_d_batalla/2)/sin(d_angulo_interior)); fabs((m_d_batalla/2)/tan(d_angulo_exterior)); d_ho - VIA/2;
if (d_giro > 0) { m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMTD] m_vd_pos_objetivo[iMTI] } else { m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMTI] m_vd_pos_objetivo[iMTD] } } else {
= = = =
+ +
= = = =
+ +
// Si se mueve en lnea recta m_vd_pos_objetivo[iMDI] m_vd_pos_objetivo[iMDD] m_vd_pos_objetivo[iMTD] m_vd_pos_objetivo[iMTI] = = = = d_potencia; d_potencia; d_potencia; d_potencia;
} // Ajustar la potencia para que no sobrepase el 100 % PotenciaMaxima(d_potencia); // Direccin if (d_giro >= 0) { m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] m_vd_pos_objetivo[iSTD] m_vd_pos_objetivo[iSTI] } else { m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] m_vd_pos_objetivo[iSTD] m_vd_pos_objetivo[iSTI] }
= = = =
= = = =
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
205
// Devolucin de las consignas que hay que aplicar for (unsigned int i = iSDI; i <= iSTI; i++) pd_consignas[i] = m_vd_pos_objetivo[i]; } // ---------------------------------------------------------------------------------/* Nombre: Sncrona * Descripcin: Funcin que calcula una cinemtica Sncrona a partir de la potencia y el giro. * Argumentos: * double &d_potencia: Potencia aplicada a los cuatro motores en porcentaje * const double &d_giro: Giro en grados de las cuatro ruedas * double *pd_consignas: Vector por el que se devuelven las consignas para * los motores ( %) y los servos de direccin ( o ) * * Valor devuelto: Ninguno */ void CCinematica::Sincrona(double &d_potencia, const double &d_giro, double *pd_consignas) { // Verificar que la potencia mxima no supera el 100 % if (d_potencia > 100) d_potencia = 100; else if (d_potencia < -100) d_potencia = -100; // Potencia de los motores m_vd_pos_objetivo[iMDI] = d_potencia; m_vd_pos_objetivo[iMDD] = d_potencia; m_vd_pos_objetivo[iMTD] = d_potencia; m_vd_pos_objetivo[iMTI] = d_potencia; // Direccin m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] m_vd_pos_objetivo[iSTD] m_vd_pos_objetivo[iSTI]
= = = =
// Clculo de la curva de aceleracin de los motores Aceleracion(pd_consignas); // Devolucin de las consignas que hay que aplicar for (unsigned int i = iSDI; i <= iSTI; i++) pd_consignas [i] = m_vd_pos_objetivo[i]; } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
206
/* Nombre: Rotar * Descripcin: Funcin que hace rotar al robot sobre su propio eje. * Argumentos: double &d_potencia: Potencia aplicada a los cuatro motores en porcentaje * double *pd_consignas: Vector por el que se devuelven las consignas para * los motores ( %) y los servos de direccin ( o ) * * Valor devuelto: Ninguno */ void CCinematica::Rotar(double &d_potencia, double *pd_consignas) { // Verificar que la potencia mxima no supera el 100 % if (d_potencia > 100) d_potencia = 100; else if (d_potencia < -100) d_potencia = -100; // Potencia de los motores m_vd_pos_objetivo[iMDI] = d_potencia; m_vd_pos_objetivo[iMDD] = d_potencia; m_vd_pos_objetivo[iMTD] = d_potencia; m_vd_pos_objetivo[iMTI] = d_potencia; // Direccin m_vd_pos_objetivo[iSDI] m_vd_pos_objetivo[iSDD] m_vd_pos_objetivo[iSTD] m_vd_pos_objetivo[iSTI]
= = = =
Aceleracion(pd_consignas); for (unsigned int i = iSDI; i <= iSTI; i++) pd_consignas [i] = m_vd_pos_objetivo[i]; } // ---------------------------------------------------------------------------------/* Nombre: PotenciaMaxima * Descripcin: Funcin que calcula la potencia que se puede aplicar para que ningn motor supere la potencia mxima. * * Argumentos: double &d_potencia: Potencia en % aplicada a una rueda triciclo equivalente * situada en el centro del eje delantero. Por esta variable * se devuelve la potencia efectiva aplicada * Valor devuelto: Ninguno * */ void CCinematica::PotenciaMaxima(double &d_potencia) { double d_potencia_maxima = 0; // Se busca la mayor potencia aplicada a los motores for (unsigned int i = iMDI; i <= iMTI; i++) { if (fabs(m_vd_pos_objetivo[i]) > d_potencia_maxima) d_potencia_maxima = fabs(m_vd_pos_objetivo[i]); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
207
// // // if {
Si alguna supera el 100 % se escala la potencia efectiva y se corrigen proporcionalmente las todas las potencias para que la mxima sea del 100 % (d_potencia_maxima > 100) d_potencia = d_potencia*100/d_potencia_maxima; for (unsigned int i = iMDI; i <= iMTI; i++) m_vd_pos_objetivo[i] = m_vd_pos_objetivo[i]*100/d_potencia_maxima;
} } // ---------------------------------------------------------------------------------/* Nombre: Aceleracin * Descripcin: Funcin que calcula la curva de aceleracin de cada motor. * Argumentos: double *pd_consignas: Vector que contiene las consignas objetivo. Por * l se devuelven unas consignas modificadas para * que el cambio de velocidad sea progresivo. * * Valor devuelto: Ninguno */ void CCinematica::Aceleracion(double *pd_consignas) { double d_aceleracion_maxima = 0; // Se identifica la mayor diferencia entre las // potencias actual y objetivo de los motores for (unsigned int i = iMDI; i <= iMTI; i++) { if (fabs(m_vd_pos_objetivo[i] - pd_consignas[i]) > d_aceleracion_maxima) d_aceleracion_maxima = fabs(m_vd_pos_objetivo[i] - pd_consignas[i]); } // Si dicha diferencia es mayor que la aceleracin mxima permitida, // se obtiene una curva de aceleracin proporcional para cada motor if (d_aceleracion_maxima > ACELERACION) { double d_incremento; d_incremento = d_aceleracion_maxima/ACELERACION; for (unsigned int i = iMDI; i <= iMTI; i++) pd_consignas[i] += (m_vd_pos_objetivo[i] - pd_consignas[i])/d_incremento; } // En caso contrario, se aplican todos los cambios directamente else { for (unsigned int i = iMDI; i <= iMTI; i++) pd_consignas[i] = m_vd_pos_objetivo[i]; } } // ----------------------------------------------------------------------------------
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
208
/* Nombre: CalcularBatalla * Descripcin: Funcin que calcula la batalla en funcin de la posicin de la plataforma superior. * * Argumentos: const double &d_angulo_plataforma_delantero: ngulo frontal de la plataforma * en grados * const double &d_angulo_plataforma_trasero: ngulo trasero de la plataforma * en grados * * Valor devuelto: Ninguno */ void CCinematica::CalcularBatalla(const double &d_angulo_plataforma_delantero, const double &d_angulo_plataforma_trasero) { m_d_batalla = LONG_PLAT_SUP + LONG_BARRA_DIAG* (cos(d_angulo_plataforma_delantero*PI/180) + cos(d_angulo_plataforma_trasero*PI/180)); }
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
209
PARTE VII
TML
HOJAS DE CARACTERSTICAS
M 1:2
Stock program Standard program Special program (on request)
Order Number
309755
309756
309757
309758
Specifications
17 18 19 20 21 22 Thermal data Thermal resistance housing-ambient 7.95 K / W Thermal resistance winding-housing 0.831 K / W Thermal time constant winding 4.28 s Thermal time constant motor 859 s Ambient temperature -20 ... +100C Max. permissible winding temperature +155C
Operating Range
n [rpm]
25000 20000 15000
Comments
100
309756
Continuous operation In observation of above listed thermal resistance (lines 17 and 18) the maximum permissible winding temperature will be reached during continuous operation at 25C ambient. = Thermal limit. Short term operation The motor may be briefly overloaded (recurring). Assigned power rating
10000 Mechanical data (preloaded ball bearings) 23 Max permissible speed 25000 rpm 5000 0 mm 24 Axial play at axial load < 8.0 N > 8.0 N 0.14 mm 60 80 100 20 40 25 Radial play preloaded 26 Max. axial load (dynamic) 5.5 N 2.0 4.0 6.0 8.0 27 Max. force for press fits (static) 100 N (static, shaft supported) 2000 N 28 Max. radial loading, 5 mm from flange 25 N maxon Modular System
10.0
Overview on page 16 - 21
Encoder MR 128 - 1000CTP, 3 channels Page 258 Encoder HEDL 5540 500CTP, 3 channels Page 266 Brake AB 20 20 mm 24 VDC, 0.1 Nm Page 306
Other specifications 29 Number of pole pairs 30 Number of phases 31 Weight of motor Values listed in the table are nominal. Connection Motor (Cable AWG 18) black Motor winding 2 white Motor winding 3 red Motor winding 1 Connection Sensors (Cable AWG 26) black/grey Hall sensor 2 blue GND green VHall 4.5 24 VDC red/grey Hall sensor 1 white/grey Hall sensor 3
Recommended Electronics: DECS 50/5 Page 284 DEC 70/10 286 DES 70/10 287 EPOS 70/10 295 EPOS2 50/5 295 Notes 20
maxon EC motor
187
M 1:2
Stock program Standard program Special program (on request)
Order Number
320247 14 : 1 676/ 49 5 326659 18 : 1 624/ 35 4 326660 21 : 1 299/ 14 3 326661 23 : 1 576/ 25 4 326662 28 : 1 138/ 5 3 2 8 12 75 178 1.6 0.8 47.4 326663 33 : 1 529/ 16 3 326664 51 : 1
17576/ 343
326668 111:1
13824/ 125
324942 246 : 1
421824/ 1715
324948 492 : 1
86112/ 175
324953 762 : 1
19044/ 25
overall length
overall length
Combination
+ Motor RE 35, 90 W RE 35, 90 W RE 35, 90 W RE 35, 90 W RE 35, 90 W RE 35, 90 W EC-power 30, 100 W EC-power 30, 100 W EC-power 30, 100 W EC-power 30, 100 W EC-power 30, 100 W EC-power 30, 200 W EC-power 30, 200 W EC-power 30, 200 W EC-power 30, 200 W EC-power 30, 200 W MCD EPOS, 60 W MCD EPOS P, 60 W Page 81 81 81 81 81 81 184 184 184 184 184 185 185 185 185 185 295 295 + Tacho / Brake MR HED_ 5540 DCT 22 AB 28 HEDS 5540 / AB 28 MR HEDL 5540 AB 20 HEDL 5540/AB 20 MR HEDL 5540 AB 20 HEDL 5540/AB 20 Page 251 254/256 263 300 254/300 250 258 298 258/298 250 258 298 258/298 118.5 129.8 139.4 136.5 154.5 171.6 94.5 106.7 115.1 126.6 147.2 111.5 123.7 132.1 143.6 164.2 167.5 167.5
= Motor length + gearhead length + (tacho / brake) + assembly parts
118.5 129.8 139.4 136.5 154.5 171.6 94.5 106.7 115.1 126.6 147.2 111.5 123.7 132.1 143.6 164.2 167.5 167.5
125.2 136.5 146.1 143.2 161.2 178.3 101.2 113.4 121.8 133.3 153.9 118.2 130.4 138.8 150.3 170.9 174.2 174.2
125.2 136.5 146.1 143.2 161.2 178.3 101.2 113.4 121.8 133.3 153.9 118.2 130.4 138.8 150.3 170.9 174.2 174.2
131.9 143.2 152.8 149.9 167.9 185.0 107.9 120.1 128.5 140.0 160.6 124.9 137.1 145.5 157.0 177.6 180.9 180.9
131.9 143.2 152.8 149.9 167.9 185.0 107.9 120.1 128.5 140.0 160.6 124.9 137.1 145.5 157.0 177.6 180.9 180.9
131.9 143.2 152.8 149.9 167.9 185.0 107.9 120.1 128.5 140.0 160.6 124.9 137.1 145.5 157.0 177.6 180.9 180.9
maxon gear
233
Cell Specification
Typical Capacity1) Nominal Voltage Charge Max. Current Voltage Continuous Current Peak Current Cut-off Voltage Cycle Life Operating Temp. Dimension Charge Discharge Thickness (mm) Width (mm) Length (mm) Weight (g)
1) Typical Capacity : 0.5C, 4.2 ~ 2.7V @25OC
4.8 Ah 3.7 V 9.6 A 4.2V 0.03 V 96.0 A 192.0 A 2.7 V > 500 Cycles 0 ~ 40 -20 ~ 60 11.0 0.2 42.5 0.5 140.0 0.5 115.0 4.0
10 AMP, 75V, 3 PHASE MOSFET BRIDGE WITH INTELLIGENT INTEGRATED GATE DRIVE
4400
(315) 701-6751
75 Volt Motor Supply Voltage 10 Amp Output Switch Capability, All N-Channel MOSFET Output Bridge 100% Duty Cycle High Side Conduction Capable Suitable for PWM Applications from DC to 100KHz Shoot-Through/Cross Conduction Protection Undervoltage Lockout Protection Programmable Dead-Time Control Low Active Enable for Bridge Shutdown Control Isolated Base Plate Design for High Voltage Isolation Plus Good Thermal Transfer
DESCRIPTION:
The MSK 4400 is a 3 phase MOSFET bridge plus drivers in a convenient isolated baseplate package. The module is capable of 10 amps of output current and 75 volts of DC bus voltage. It has a full line of protection features, including undervoltage lockout protection of the bias voltage, cross conduction control and a user programmable dead-time control for shoot-through elimination. In addition, the bridge may be shut down by using the ENABLE control. The MSK 4400 provides good thermal conductivity for the MOSFETs due to an isolated plate design that allows direct heat sinking of the device without insulators.
EQUIVALENT SCHEMATIC
TYPICAL APPLICATIONS
3 Phase Brushless DC Servo Control Fin Actuator Control Gimbal Control 3 Phase AC Induction Motor Control HVAC Blower Control 1 2 3 4 5 6 7 8 9 10
PIN-OUT INFORMATION
N/C N/C N/C BH BL AL AH GND SWR VBIAS 20 19 18 17 16 15 14 13 12 11 BO BO CV+ CV+ CO CO N/C CH CL EN
28 27 26 25 24 23 22 21
ELECTRICAL SPECIFICATIONS
Parameter CONTROL SECTION VBIAS Quiescent Current VBIAS Operating Current 4 4 All Inputs Off f=20KHz, 50% Duty Cycle 5.75 6.2 2.7 VIN=0V VIN=5V 60 -1 6 22 6.6 7.1 100 7 25 7.5 8.0 0.8 135 +1 mAmp mAmp Volts Volts Volts Volts Amp Amp Test Condition @ 25C unless otherwise specified MSK 4400 Min. Typ. 3 Max. Units
Undervoltage Threshold (Falling) Undervoltage Threshold (Rising) Low Level Input Voltage High Level Input Voltage Low Level Input Current High Level Input Current OUTPUT BRIDGE Drain-Source Breakdown Voltage Drain-Source Leakage Current Drain-Source On Resistance (Each FET) Voltage Drop Across Bridge Phase SWITCHING CHARACTERISTICS Rise Time Fall Time Enable Turn-On Prop Delay (Lower) Enable Turn-Off Prop Delay (Lower) Enable Turn-On Prop Delay (Upper) Enable Turn-Off Prop Delay (Upper) Dead Time Dead Time 4 SOURCE-DRAIN DIODE CHARACTERISTICS Forward Voltage Reverse Recovery Time ISD=10A ISD=10A, di/dt=100A/S SWR Resistor= SWR Resistor= SWR=Open SWR=12K V+=38V ID=25A Peak 2 1 4 ID=100A, All Inputs Off VDS=70V ID=25A ID=10A
75 -
1.3
50 0.033 1.5
6.0 0.3
8.0 0.7
120
1.7 -
NOTES:
1 2 3 4 5 Use for maximum MOSFET junction temperature calculations. Use for overall efficiency and dissipation calculations. Typical parameters are representative of actual device performance but are for reference only. Parameter is 100% tested on production devices. All other parameters are guaranteed. Continuous operation at or above absolute maximum ratings may adversely effect the device performance and/or life cycle.
2
Rev. F 1/08
High Voltage Supply 75V Bias Supply 16V Logic Input Voltages -0.3V to VBIAS +0.3V Continuous Output Current 10A Peak Output Current 25A
JC Thermal Resistance TST Storage Temperature Range TLD Lead Temperature Range (10 Seconds) TC Case Operating Temperature TJ Junction Temperature
V Amp VOLTS
Volts nSec
Rev. F 1/08
Rev. F 1/08
MECHANICAL SPECIFICATIONS
WEIGHT=18 GRAMS TYPICAL NOTE: ALL DIMENSIONS ARE 0.010 INCHES UNLESS OTHERWISE LABELED.
ORDERING INFORMATION
Part Number MSK4400S MSK4400D MSK4400U Lead Option Straight Down Up Screening Level Industrial Industrial Industrial
IPN = 6 - 15 - 25 A
Electrical data
IPN IP VOUT VREF NS RL CL R IM TCR IM VC IC Vd Ve Vw Primary nominal r.m.s. current Primary current, measuring range Analog output voltage @ IP IP = 0 Voltage reference (internal reference), refout mode Voltage reference (external reference), Ref in mode Number of secondary turns ( 0.1 %) Load resistance Max. capacitive loading Internal measuring resistance ( 0.5 %) Thermal drift of R IM Supply voltage ( 5 %) Current consumption @ VC = 5 V Typ RMS voltage for AC isolation test, 50/60 Hz, 1 mn RMS voltage for partial discharge extinction @ 10 pC Impulse withstand voltage 1.2/50 s 6/15/25 At 0 .. 19.2/48/80 1)At 2.5 (0.625IP/IPN) V 2.5 2) V 2.5 3) V 1.9 .. 2.7 4) V 2000 2 k 500 pF 208.33/83.33/50 < 50 ppm/K 5 V 28 + IS5) +(V /RL) mA OUT 3 kV > 1.5 kV >8 kV
Features
Closed loop (compensated) multirange current transducer using the Hall effect Unipolar voltage supply Compact design for PCB mounting Insulated plastic case recognized according to UL 94-V0 Incorporated measuring resistance Extended measuring range Access to the internal voltage reference Possibility to feed the transducer reference from external supply.
Advantages
Excellent accuracy Very good linearity Very low temperature drift Optimized response time Wide frequency bandwidth No insertion losses High immunity to external interference Current overload capability.
TCVOUT Thermal drift of VOUT/VREF @ IP = 0 - 40C .. +85C TC G Thermal drift of the gain - 40C .. +85C VOM Residual voltage @ IP = 0, after an overload of 3 x IPN 5 x IPN 10 x IPN TCVREF Thermal drift of internal VREF @ IP = 0 - 10C .. + 85C - 40C .. - 10C tr a Reaction time @ 10 % of IPN tr Response time @ 90 % of IPN di/dt di/dt accurately followed f Frequency bandwidth (0 .. - 0.5 dB) (- 0.5 .. 1 dB) 030326/1 12 ppm/K ppm/K mV mV mV ppm/K ppm/K ns ns A/s kHz kHz
Applications
AC variable speed drives and servo motor drives Static converters for DC motor drives Battery supplied applications Uninterruptible Power Supplies (UPS) Switched Mode Power Supplies (SMPS) Power supplies for welding applications.
Dimensions LTSR 6, LTSR 15, LTSR 25-NP (in mm. 1 mm = 0.0394 inch)
Number Primary nominal of primary RMS current turns IPN [ A ] 1 LTSR 6-NP 6 LTSR 15-NP 15 LTSR 25-NP 25
(0 0 0 0 0)
Recommended connections
6 5 4 OUT
1 6
2 5
3 4 OUT
LTSR 6-NP 3 VREF* 0.625 LTSR 15-NP 7.5 VREF* 0.625 LTSR 25-NP 12 VREF* 0.600 LTSR 6-NP 2 LTSR 15-NP 5 LTSR 25-NP 8 VREF* 0.625 VREF* 0.625 VREF* 0.600
0.81
0.05
IN
1.62
0.12
IN
1 6
2 5
3 4
OUT
* VREF = 2.5 V 25 mV in Refout mode, VREF = External reference (1.9 .. 2.7 V 25 mV) in Ref in mode
Mechanical characteristics
General tolerance Fastening & connection of primary
0.2 mm 6 pins 0.8 x 0.8 mm Recommended PCB hole 1.3 mm Fastening & connection of secondary 4 pins 0.5 x 0.35 mm Recommended PCB hole 0.8 mm Additional primary through-hole 3.2 mm
Remark
VOUT is positive when IP flows from terminals 1, 2, 3 to
terminals 6, 5, 4.
LEM reserves the right to carry out modifications on its transducers, in order to improve them, without previous notice. 13
MC 3x167T AWLYWW
Output Switch Current in Excess of 5.0 A Fixed Frequency Oscillator (72 kHz) with OnChip Timing Provides 5.05 V Output without External Resistor Divider Precision 2% Reference 0% to 95% Output Duty Cycle CyclebyCycle Current Limiting Undervoltage Lockout with Hysteresis Internal Thermal Shutdown Operation from 7.5 V to 40 V Standby Mode Reduces Power Supply Current to 36 mA Economical 5Lead TO220 Package with Two Optional Leadforms Also Available in Surface Mount D2PAK Package Moisture Sensitivity Level (MSL) Equals 1 PbFree Packages are Available
Vin ILIMIT Oscillator 4
1 5
MC 3x167T AWLYWW
1 5 Pin 1. 2. 3. 4. 5.
MC 3x167T AWLYWW
S Q R 2 1 UVLO
Voltage Feedback Input Switch Output Ground Input Voltage/VCC Compensation/Standby D2PAK D2T SUFFIX CASE 936A
PWM
5 L
MC 3x167T AWLYWW
Thermal Reference EA 1
Heatsink surface (shown as terminal 6 in case outline 1 drawing) is connected to Pin 3 VO x A WL Y WW = 3 or 4 = Assembly Location = Wafer Lot = Year = Work Week
ORDERING INFORMATION
See detailed ordering and shipping information in the package dimensions section on page 17 of this data sheet.
MC34167, MC33167
MAXIMUM RATINGS (Note 2)
Rating Power Supply Input Voltage Switch Output Voltage Range Voltage Feedback and Compensation Input Voltage Range Power Dissipation Case 314A, 314B and 314D (TA = +25C) Thermal Resistance, JunctiontoAmbient Thermal Resistance, JunctiontoCase Case 936A (D2PAK) (TA = +25C) Thermal Resistance, JunctiontoAmbient Thermal Resistance, JunctiontoCase Operating Junction Temperature Operating Ambient Temperature (Note 3) MC34167 MC33167 Storage Temperature Range Symbol VCC VO(switch) VFB, VComp PD qJA qJC PD qJA qJC TJ TA 0 to + 70 40 to + 85 Tstg 65 to +150 C Value 40 2.0 to + Vin 1.0 to + 7.0 Internally Limited 65 5.0 Internally Limited 70 5.0 +150 Unit V V V W C/W C/W W C/W C/W C C
Maximum ratings are those values beyond which device damage can occur. Maximum ratings applied to the device are individual stress limit values (not normal operating conditions) and are not valid simultaneously. If these limits are exceeded, device functional operation is not implied, damage may occur and reliability may be affected. 1. Maximum package power dissipation limits must be observed to prevent thermal shutdown activation. 2. This device series contains ESD protection and exceeds the following tests: Human Body Model 2000 V per MILSTD883, Method 3015. Machine Model Method 200 V. Thigh = + 70C for MC34167 3. Tlow = 0C for MC34167 = 40C for MC33167 = + 85C for MC33167
http://onsemi.com
2
MC34167, MC33167
ELECTRICAL CHARACTERISTICS (VCC = 12 V, for typical values TA = +25C, for min/max values TA is the operating ambient temperature range that applies (Notes 4, 5), unless otherwise noted.)
Characteristic OSCILLATOR Frequency (VCC = 7.5 V to 40 V) ERROR AMPLIFIER Voltage Feedback Input Threshold TA =+ 25C TA = Tlow to Thigh VFB(th) Regline IIB PSRR VOH VOL 4.95 4.85 60 4.2 5.05 0.03 0.15 80 4.9 1.6 5.15 5.20 0.078 1.0 1.9 V %/V mA dB V TA = +25C TA = Tlow to Thigh fOSC 65 62 72 79 81 kHz Symbol Min Typ Max Unit
Line Regulation (VCC = 7.5 V to 40 V, TA = +25C) Input Bias Current (VFB = VFB(th) + 0.15 V) Power Supply Rejection Ratio (VCC = 10 V to 20 V, f = 120 Hz) Output Voltage Swing PWM COMPARATOR Duty Cycle (VCC = 20 V) SWITCH OUTPUT Output Voltage Source Saturation (VCC = 7.5 V, ISource = 5.0 A) OffState Leakage (VCC = 40 V, Pin 2 = GND) Current Limit Threshold (VCC = 7.5 V) Switching Times (VCC = 40 V, Ipk = 5.0 A, L = 225 mH, TA = +25C) Output Voltage Rise Time Output Voltage Fall Time UNDERVOLTAGE LOCKOUT Startup Threshold (VCC Increasing, TA = +25C) Hysteresis (VCC Decreasing, TA = +25C) TOTAL DEVICE Power Supply Current (TA = +25C ) Standby (VCC = 12 V, VComp < 0.15 V) Operating (VCC = 40 V, Pin 1 = GND for maximum duty cycle) Maximum (VFB = 0 V) Minimum (VComp = 1.9 V) High State (ISource = 75 mA, VFB = 4.5 V) Low State (ISink = 0.4 mA, VFB = 5.5 V)
DC(max) DC(min)
92 0
95 0
100 0
5.5
V mA A ns
5.5 0.6
5.9 0.9
6.3 1.2
V V
36 40
100 60
mA mA
4. Low duty cycle pulse techniques are used during test to maintain junction temperature as close to ambient as possible. 5. Tlow = 0C for MC34167 Thigh = + 70C for MC34167 = 40C for MC33167 = + 85C for MC33167
http://onsemi.com
3
MC34167, MC33167
V FB(th), VOLTAGE FEEDBACK INPUT THRESHOLD (V) 5.25 VCC = 12 V 5.17 5.09 5.01 VFB(th) Min = 4.95 V 4.93 4.85 55 VFB(th) Max = 5.15 V 100 I IB, INPUT BIAS CURRENT (nA) 80 60 40 20 0 55 VCC = 12 V VFB = VFB(th)
25
100
125
25
100
125
80 Gain 60 40
30 60 90
100
20 10
100
1.0 M
0.4
2.0
Figure 4. Error Amp Open Loop Gain and Phase versus Frequency
4.0
8.0
12 55
25
125
2.0
4.5
http://onsemi.com
4
MC34167, MC33167
Vsat, SWITCH OUTPUT SOURCE SATURATION (V) 0 0.5 1.0 1.5 2.0 2.5 3.0 0 2.0 4.0 6.0 ISource, SWITCH OUTPUT SOURCE CURRENT (A) 8.0 Vsw, SWITCH OUTPUT VOLTAGE (V) VCC TA = +25C 0 GND 0.2 0.4 0.6 0.8 1.0 1.2 55 25 0 25 50 75 TA, AMBIENT TEMPERATURE (C) 100 125 Isw = 10 mA VCC = 12 V Pin 5 = 2.0 V Pins 1, 3 = GND Pin 2 Driven Negative
Isw = 100 mA
120
6.4
80
6.0
40
5.6 55
25
100
125
0 0
10
40
6.5 I CC, SUPPLY CURRENT (mA) 6.0 5.5 5.0 4.5 4.0 55 TurnOff Threshold VCC Decreasing Startup Threshold VCC Increasing
50 40 30 20 10 0
Pin 4 = VCC Pins 1, 3 = GND Pins 2, 5 Open TA = +25C 0 10 20 30 VCC, SUPPLY VOLTAGE (V) 40
25
100
125
http://onsemi.com
5
MC34167, MC33167
Vin + Oscillator CT Current Sense 4 Input Voltage/VCC Cin S Q R Pulse Width Modulator PWM Latch Undervoltage Lockout Switch Output 2
VO CO
R1
http://onsemi.com
6
MC34167, MC33167
INTRODUCTION The MC34167, MC33167 series are monolithic power switching regulators that are optimized for dctodc converter applications. These devices operate as fixed frequency, voltage mode regulators containing all the active functions required to directly implement stepdown and voltageinverting converters with a minimum number of external components. They can also be used cost effectively in stepup converter applications. Potential markets include automotive, computer, industrial, and cost sensitive consumer products. A description of each section of the device is given below with the representative block diagram shown in Figure 14.
Oscillator
The oscillator frequency is internally programmed to 72 kHz by capacitor CT and a trimmed current source. The charge to discharge ratio is controlled to yield a 95% maximum duty cycle at the Switch Output. During the discharge of CT, the oscillator generates an internal blanking pulse that holds the inverting input of the AND gate high, disabling the output switch transistor. The nominal oscillator peak and valley thresholds are 4.1 V and 2.3 V respectively.
Pulse Width Modulator
A high gain Error Amplifier is provided with access to the inverting input and output. This amplifier features a typical dc voltage gain of 80 dB, and a unity gain bandwidth of 600 kHz with 70 degrees of phase margin (Figure 4). The noninverting input is biased to the internal 5.05 V reference and is not pinned out. The reference has an accuracy of 2.0% at room temperature. To provide 5.0 V at the load, the reference is programmed 50 mV above 5.0 V to compensate for a 1.0% voltage drop in the cable and connector from the converter output. If the converter design requires an output voltage greater than 5.05 V, resistor R1 must be added to form a divider network at the feedback input as shown in Figures 14 and 19. The equation for determining the output voltage with the divider network is:
Vout + 5.05 R2 )1 R1
The Pulse Width Modulator consists of a comparator with the oscillator ramp voltage applied to the noninverting input, while the error amplifier output is applied into the inverting input. Output switch conduction is initiated when CT is discharged to the oscillator valley voltage. As CT charges to a voltage that exceeds the error amplifier output, the latch resets, terminating output transistor conduction for the duration of the oscillator rampup period. This PWM/Latch combination prevents multiple output pulses during a given oscillator clock cycle. Figures 7 and 15 illustrate the switch output duty cycle versus the compensation voltage.
Current Sense
The MC34167 series utilizes cyclebycycle current limiting as a means of protecting the output switch transistor from overstress. Each on cycle is treated as a separate situation. Current limiting is implemented by monitoring the output switch transistor current buildup during conduction, and upon sensing an overcurrent condition, immediately turning off the switch for the duration of the oscillator rampup period. The collector current is converted to a voltage by an internal trimmed resistor and compared against a reference by the Current Sense comparator. When the current limit threshold is reached, the comparator resets the PWM latch. The current limit threshold is typically set at 6.5 A.
External loop compensation is required for converter stability. A simple lowpass filter is formed by connecting a resistor (R2) from the regulated output to the inverting input, and a series resistorcapacitor (RF, CF) between Pins 1 and 5. The compensation network component values shown in each of the applications circuits were selected to provide stability over the tested operating conditions. The stepdown converter (Figure 19) is the easiest to compensate for stability. The stepup (Figure 21) and voltageinverting (Figure 23) configurations operate as continuous conduction flyback converters, and are more difficult to compensate. The simplest way to optimize the compensation network is to observe the response of the output voltage to a step load change, while adjusting RF and CF for critical damping. The final circuit should be verified for stability under four boundary conditions. These conditions are minimum and maximum input voltages, with minimum and maximum loads. By clamping the voltage on the error amplifier output (Pin 5) to less than 150 mV, the internal circuitry will be placed into a low power standby mode, reducing the power supply current to 36 mA with a 12 V supply voltage. Figure 11 illustrates the standby supply current versus supply voltage. The Error Amplifier output has a 100 mA current source pullup that can be used to implement softstart. Figure 18 shows the current source charging capacitor CSS through a series diode. The diode disconnects CSS from the feedback loop when the 1.0 M resistor charges it above the operating range of Pin 5.
http://onsemi.com
7
MC34167, MC33167
Switch Output
The output transistor is designed to switch a maximum of 40 V, with a minimum peak collector current of 5.5 A. When configured for stepdown or voltageinverting applications, as in Figures 19 and 23, the inductor will forward bias the output rectifier when the switch turns off. Rectifiers with a high forward voltage drop or long turn on delay time should not be used. If the emitter is allowed to go sufficiently negative, collector current will flow, causing additional device heating and reduced conversion efficiency. Figure 9 shows that by clamping the emitter to 0.5 V, the collector current will be in the range of 100 mA over temperature. A 1N5825 or equivalent Schottky barrier rectifier is recommended to fulfill these requirements.
Undervoltage Lockout
functional before the output stage is enabled. The internal reference voltage is monitored by the comparator which enables the output stage when VCC exceeds 5.9 V. To prevent erratic output switching as the threshold is crossed, 0.9 V of hysteresis is provided.
Thermal Protection
An Undervoltage Lockout comparator has been incorporated to guarantee that the integrated circuit is fully
Internal Thermal Shutdown circuitry is provided to protect the integrated circuit in the event that the maximum junction temperature is exceeded. When activated, typically at 170C, the latch is forced into a reset state, disabling the output switch. This feature is provided to prevent catastrophic failures from accidental device overheating. It is not intended to be used as a substitute for proper heatsinking. The MC34167 is contained in a 5lead TO220 type package. The tab of the package is common with the center pin (Pin 3) and is normally connected to ground.
DESIGN CONSIDERATIONS Do not attempt to construct a converter on wirewrap or plugin prototype boards. Special care should be taken to separate ground paths from signal currents and ground paths from load currents. All high current loops should be kept as short as possible using heavy copper runs to minimize ringing and radiated EMI. For best operation, a tight component layout is recommended. Capacitors Cin, CO, and all feedback components should be placed as close to the IC as physically possible. It is also imperative that the Schottky diode connected to the Switch Output be located as close to the IC as possible.
http://onsemi.com
8
MC34167, MC33167
+ 100 mA + 100 mA Error Amp 1 Compensation 120 5 R1 5 R1 I = Standby Mode VShutdown = VZener + 0.7 1 Error Amp
120 Compensation
R1
http://onsemi.com
9
MC34167, MC33167
Vin 12 V + Oscillator ILIMIT 4 + S Q R PWM UVLO Q1 2 D1 1N5825 Cin 330
L 190 mH
VO 5.05 V/5.0 A
CF 0.1
RF 68 k R1
Test Line Regulation Load Regulation Output Ripple Short Circuit Current Efficiency
Conditions Vin = 10 V to 36 V, IO = 5.0 A Vin = 12 V, IO = 0.25 A to 5.0 A Vin = 12 V, IO = 5.0 A Vin = 12 V, RL = 0.1 W Vin = 12 V, IO = 5.0 A Vin = 24 V, IO = 5.0 A
L = Coilcraft M1496A or General Magnetics Technology GMT0223, 42 turns of #16 AWG on Magnetics Inc. 58350A2 core. Heatsink = AAVID Engineering Inc. 5903B, or 5930B. The StepDown Converter application is shown in Figure 19. The output switch transistor Q1 interrupts the input voltage, generating a squarewave at the LCO filter input. The filter averages the squarewaves, producing a dc output voltage that can be set to any level between Vin and Vref by controlling the percent conduction time of Q1 to that of the total oscillator cycle time. If the converter design requires an output voltage greater than 5.05 V, resistor R1 must be added to form a divider network at the feedback input.
MC34167 STEPDOWN
(Bottom View)
Figure 20. StepDown Converter Printed Circuit Board and Component Layout http://onsemi.com
10
R2 RF CF R1 (Top View)
+
1.9
Vin
CO
VO
+
L D1
Cin
MC34167, MC33167
Vin 12 V + Oscillator ILIMIT 4 + S Q R PWM UVLO *RG 620 Q2 MTP3055EL + EA R2 1 6.8 k CO 2200 D3 1N967A D2 1N5822 + VO 28 V/0.9 A Q1 2 D1 1N5825 L 190 mH D4 1N4148 Reference + Cin 330
Thermal
CF 0.47
RF 4.7 k R1 1.5 k
*Gate resistor RG, zener diode D3, and diode D4 are required only when Vin is greater than 20 V.
Test Line Regulation Load Regulation Output Ripple Short Circuit Current Efficiency
Conditions Vin = 10 V to 24 V, IO = 0.9 A Vin = 12 V, IO = 0.1 A to 0.9 A Vin = 12 V, IO = 0.9 A Vin = 12 V, RL = 0.1 W Vin = 12 V, IO = 0.9 A Vin = 24 V, IO = 0.9 A
L = Coilcraft M1496A or General Magnetics Technology GMT0223, 42 turns of #16 AWG on Magnetics Inc. 58350A2 core. Heatsink = AAVID Engineering Inc. MC34167: 5903B, or 5930B MTP3055EL: 5925B Figure 21 shows that the MC34167 can be configured as a stepup/down converter with the addition of an external power MOSFET. Energy is stored in the inductor during the ON time of transistors Q1 and Q2. During the OFF time, the energy is transferred, with respect to ground, to the output filter capacitor and load. This circuit configuration has two significant advantages over the basic stepup converter circuit. The first advantage is that output short circuit protection is provided by the MC34167, since Q1 is directly in series with Vin and the load. Second, the output voltage can be programmed to be less than Vin. Notice that during the OFF time, the inductor forward biases diodes D1 and D2, transferring its energy with respect to ground rather than with respect to Vin. When operating with Vin greater than 20 V, a gate protection network is required for the MOSFET. The network consists of components RG, D3, and D4.
1.9
R2
Cin
R1
D1
RF
CF
+
(Bottom View)
RG
(Top View)
Figure 22. StepUp/Down Converter Printed Circuit Board and Component Layout http://onsemi.com
11
Q2
Vin
CO
D2
MC34167, MC33167
Vin 12 V + ILIMIT Oscillator 4 + S Q R PWM UVLO Q1 2 L 190 mH D1 1N5825 Reference + EA R1 + 1 2.4 k VO 12 V/1.7 A CO 4700 + Cin 330
Thermal
CF 0.47
RF 4.7 k R2 3.3 k
C1 0.047
Test Line Regulation Load Regulation Output Ripple Short Circuit Current Efficiency
Conditions Vin = 10 V to 24 V, IO = 1.7 A Vin = 12 V, IO = 0.1 A to 1.7 A Vin = 12 V, IO = 1.7 A Vin = 12 V, RL = 0.1 W Vin = 12 V, IO = 1.7 A Vin = 24 V, IO = 1.7 A
L = Coilcraft M1496A or General Magnetics Technology GMT0223, 42 turns of #16 AWG on Magnetics Inc. 58350A2 core. Heatsink = AAVID Engineering Inc. 5903B, or 5930B. Two potential problems arise when designing the standard voltageinverting converter with the MC34167. First, the Switch Output emitter is limited to 1.5 V with respect to the ground pin and second, the Error Amplifiers noninverting input is internally committed to the reference and is not pinned out. Both of these problems are resolved by connecting the IC ground pin to the converters negative output as shown in Figure 23. This keeps the emitter of Q1 positive with respect to the ground pin and has the effect of reversing the Error Amplifier inputs. Note that the voltage drop across R1 is equal to 5.05 V when the output is in regulation.
+
MC34167 VOLTAGE-INVERTING Vin
+
R1 C1
+
+ (Bottom View)
Figure 24. VoltageInverting Converter Printed Circuit Board and Component Layout http://onsemi.com
12
R2 RF CF (Top View)
+
1.9
CO
VO
Cin
D1
MC34167, MC33167
Vin 24 V + Oscillator ILIMIT 4 + S Q R PWM UVLO 2 1N5825 MUR110 + Thermal Reference + EA 6.8 k 1 1000 + VO1 5.0 V/3.0 A + T1 MUR110 VO3 1000 12 V/200 mA 1000
5 0.1 68 k
Results 3.0 mV = 0.029% 572 mV = 2.4% 711 mV = 2.9% 1.0 mV = 0.009% 409 mV = 1.5% 528 mV = 2.0% 75 mVpp 20 mVpp 20 mVpp 6.5 A 2.7 A 2.2 A 84.2%
Load Regulation
Vin = 24 V, IO1 = 30 mA to 3.0 A, IO2 = 250 mA, IO3 = 200 mA Vin = 24 V, IO1 = 3.0 A, IO2 = 100 mA to 250 mA, IO3 = 200 mA Vin = 24 V, IO1 = 3.0 A, IO2 = 250 mA, IO3 = 75 mA to 200 mA Vin = 24 V, IO1 = 3.0 A, IO2 = 250 mA, IO3 = 200 mA
Output Ripple
Vin = 24 V, RL = 0.1 W
Efficiency
T1 = Primary: Coilcraft M1496A or General Magnetics Technology GMT0223, 42 turns of #16 AWG on Magnetics Inc. 58350A2 core. T1 = Secondary: VO2 69 turns of #26 AWG T1 = Secondary: VO3 104 turns of #28 AWG Heatsink = AAVID Engineering Inc. 5903B, or 5930B. Multiple auxiliary outputs can easily be derived by winding secondaries on the main output inductor to form a transformer. The secondaries must be connected so that the energy is delivered to the auxiliary outputs when the Switch Output turns off. During the OFF time, the voltage across the primary winding is regulated by the feedback loop, yielding a constant Volts/Turn ratio. The number of turns for any given secondary voltage can be calculated by the following equation:
# TURNS(SEC) + VO(SEC) ) VF(SEC) VO(PRI))VF(PRI) #TURNS(PRI)
Note that the 12 V winding is stacked on top of the 5.0 V output. This reduces the number of secondary turns and improves lead regulation. For best auxiliary regulation, the auxiliary outputs should be less than 33% of the total output power.
http://onsemi.com
13
MC34167, MC33167
+ Oscillator ILIMIT 4 22 0.01 1N5825 2 L D1 + Reference EA + 1 6.8 k Z1 R1 MUR415 + MTP 3055E 2N3906 R1 36 k VO + 36 V/0.3 A 1000
S Q R Q1 UVLO
R VO + 5.05 1 ) 0.7 R2
PWM
Thermal
3 Vin 12 V +
0.22 0.002
470 k
R2 5.1 k
1000
*Gate resistor RG, zener diode D3, and diode D4 are required only when Vin is greater than 20 V.
Conditions Vin = 10 V to 20 V, IO = 0.3 A Vin = 12 V, IO = 0.03 A to 0.3 A Vin = 12 V, IO = 0.3 A Vin = 12 V, IO = 0.3 A
L = General Magnetics Technology GMT0223, 42 turns of #16 AWG on Magnetics Inc. 58350A2 core. Heatsink = AAVID Engineering Inc. 5903B or 5930B
ILIMIT
Brush Motor
50 k Faster
Figure 27. Variable Motor Speed Control with EMF Feedback Sensing
http://onsemi.com
14
MC34167, MC33167
0.001 T1 MBR20100CT + 1000 1N5404 115 VAC RFI Filter + 0.001 0.001 220 MJE13005 0.047 1N4937 50 MBR20100CT T2 0.01 0.001 0.001 3.3 + 1N4003 MBR20100CT + 1000 0.001 T1 = Core and Bobbin Coilcraft PT3595 T1 = Primary 104 turns #26 AWG T1 = Base Drive 3 turns #26 AWG T1 = Secondaries 16 turns #16 AWG T1 = Total Gap 0.002, T2 = Core TDK T6 x 1.5 x 3 H5C2 T2 = 14 turns center tapped #30 AWG T2 = Heatsink = AAVID Engineering Inc. T2 = MC34167 and MJE13005 5903B T2 = MBR20100CT 5925B MC34167 StepDown Converter + 100 + 1000 MC34167 StepDown Converter + MC34167 StepDown Converter +
Output 1
100k
Output 2
Output 3
The MC34167 can be used cost effectively in offline applications even though it is limited to a maximum input voltage of 40 V. Figure 28 shows a simple and efficient method for converting the AC line voltage down to 24 V. This preconverter has a total power rating of 125 W with a conversion efficiency of 90%. Transformer T1 provides output isolation from the AC line and isolation between each of the secondaries. The circuit selfoscillates at 50 kHz and is controlled by the saturation characteristics of T2. Multiple MC34167 post regulators can be used to provide accurate independently regulated outputs for a distributed power system.
PD(max) for TA = +50C 70 60 50 40 RqJA 30 0 5.0 10 15 20 L, LENGTH OF COPPER (mm) Free Air Mounted Vertically 3.0 2.0 oz. Copper L 2.5 2.0 1.5 1.0
25
30
Figure 29. D2PAK Thermal Resistance and Maximum Power Dissipation versus P.C.B. Copper Length
http://onsemi.com
15
80 JUNCTION-TO-AIR ( C/W)
3.5
MC34167, MC33167
Table 1. Design Equations
Calculation ton toff (Notes 1, 2) StepDown Vout ) VF Vin * Vsat * Vout ton toff ton fosc )1 toff ton fosc Iout DI IL avg ) L 2 Vin * Vsat * Vout ton DIL DIL 1 2 ) (ESR)2 8foscCo R Vref 2 ) 1 R1 StepUp/Down Vout ) VF1 ) VF2 Vin * VsatQ1 * VsatQ2 ton toff ton fosc )1 toff ton fosc t Iout on ) 1 toff DI IL avg ) L 2 Vin * VsatQ1 * VsatQ2 ton DIL ton )1 toff 1 2 ) (ESR)2 foscCo R Vref 2 ) 1 R1 ton )1 toff VoltageInverting |Vout| ) VF Vin * Vsat ton toff ton fosc )1 toff ton fosc t Iout on ) 1 toff DI IL avg ) L 2 Vin * Vsat ton DIL 1 2 ) (ESR)2 foscCo R Vref 2 ) 1 R1
ton
1. Vsat Switch Output source saturation voltage, refer to Figure 8. 2. VF Output rectifier forward voltage drop. Typical value for 1N5822 Schottky barrier rectifier is 0.35 V. 3. Duty cycle is calculated at the minimum operating input voltage and must not exceed the guaranteed minimum DC(max) specification of 0.92. The following converter characteristics must be chosen: Vout Desired output voltage. Iout Desired output current. DIL Desired peaktopeak inductor ripple current. For maximum output current especially when the duty cycle is greater than 0.5, it is suggested that DIL be chosen minimum current limit threshold of 5.5 A. If the design goal is to use a minimum inductance value, let DIL = 2 (IL avg). This will proportionally reduce the converters output current capability. Vripple(pp) Desired peaktopeak output ripple voltage. For best performance, the ripple voltage should be kept to less than 2% of Vout. Capacitor CO should be a low equivalent series resistance (ESR) electrolytic designed for switching regulator applications.
http://onsemi.com
16
MC34167, MC33167
ORDERING INFORMATION
Device MC33167D2T MC33167T MC33167TG MC33167TH MC33167TV MC33167TVG MC34167D2T MC34167T MC34167TH MC34167TV MC34167TVG TA= 0 to +70C TA= 40 to +85C TA= 40 to +85C Operating Temperature Range D2PAK Package (Surface Mount) 50 Units/Rail Shipping
TO220 (Straight Lead) TO220 (Straight Lead) (PbFree) TO220 (Horizontal Mount) TO220 (Vertical Mount) TO220 (Vertical Mount) (PbFree) D2PAK (Surface Mount) TO220 (Straight Lead) TO220 (Horizontal Mount) TO220 (Vertical Mount) TO220 (Vertical Mount) (PbFree)
50 Units/Rail
50 Units/Rail
50 Units/Rail
50 Units/Rail
50 Units/Rail
For information on tape and reel specifications, including part orientation and tape sizes, please refer to our Tape and Reel Packaging Specifications Brochure, BRD8011/D.
http://onsemi.com
17
MC34167, MC33167
PACKAGE DIMENSIONS
TO220 TH SUFFIX CASE 314A03 ISSUE E
T B P
OPTIONAL CHAMFER SEATING PLANE NOTES: 1. DIMENSIONING AND TOLERANCING PER ANSI Y14.5M, 1982. 2. CONTROLLING DIMENSION: INCH. 3. DIMENSION D DOES NOT INCLUDE INTERCONNECT BAR (DAMBAR) PROTRUSION. DIMENSION D INCLUDING PROTRUSION SHALL NOT EXCEED 0.043 (1.092) MAXIMUM. INCHES MIN MAX 0.572 0.613 0.390 0.415 0.170 0.180 0.025 0.038 0.048 0.055 0.570 0.585 0.067 BSC 0.015 0.025 0.730 0.745 0.320 0.365 0.140 0.153 0.210 0.260 0.468 0.505 MILLIMETERS MIN MAX 14.529 15.570 9.906 10.541 4.318 4.572 0.635 0.965 1.219 1.397 14.478 14.859 1.702 BSC 0.381 0.635 18.542 18.923 8.128 9.271 3.556 3.886 5.334 6.604 11.888 12.827
C E
A L
G
5X
5X
D 0.014 (0.356)
M
S T P
M
DIM A B C D E F G J K L Q S U
B P
C
OPTIONAL CHAMFER
U K F
A S L W V
NOTES: 1. DIMENSIONING AND TOLERANCING PER ANSI Y14.5M, 1982. 2. CONTROLLING DIMENSION: INCH. 3. DIMENSION D DOES NOT INCLUDE INTERCONNECT BAR (DAMBAR) PROTRUSION. DIMENSION D INCLUDING PROTRUSION SHALL NOT EXCEED 0.043 (1.092) MAXIMUM. DIM A B C D E F G H J K L N Q S U V W INCHES MIN MAX 0.572 0.613 0.390 0.415 0.170 0.180 0.025 0.038 0.048 0.055 0.850 0.935 0.067 BSC 0.166 BSC 0.015 0.025 0.900 1.100 0.320 0.365 0.320 BSC 0.140 0.153 0.620 0.468 0.505 0.735 0.090 0.110 MILLIMETERS MIN MAX 14.529 15.570 9.906 10.541 4.318 4.572 0.635 0.965 1.219 1.397 21.590 23.749 1.702 BSC 4.216 BSC 0.381 0.635 22.860 27.940 8.128 9.271 8.128 BSC 3.556 3.886 15.748 11.888 12.827 18.669 2.286 2.794
5X
J T H N T
SEATING PLANE
G
5X
0.24 (0.610)
D
M
0.10 (0.254)
T P
http://onsemi.com
18
MC34167, MC33167
PACKAGE DIMENSIONS
TO220 T SUFFIX CASE 314D04 ISSUE E
SEATING PLANE NOTES: 1. DIMENSIONING AND TOLERANCING PER ANSI Y14.5M, 1982. 2. CONTROLLING DIMENSION: INCH. 3. DIMENSION D DOES NOT INCLUDE INTERCONNECT BAR (DAMBAR) PROTRUSION. DIMENSION D INCLUDING PROTRUSION SHALL NOT EXCEED 10.92 (0.043) MAXIMUM. DIM A B C D E G H J K L Q U INCHES MIN MAX 0.572 0.613 0.390 0.415 0.170 0.180 0.025 0.038 0.048 0.055 0.067 BSC 0.087 0.112 0.015 0.025 0.990 1.045 0.320 0.365 0.140 0.153 0.105 0.117 MILLIMETERS MIN MAX 14.529 15.570 9.906 10.541 4.318 4.572 0.635 0.965 1.219 1.397 1.702 BSC 2.210 2.845 0.381 0.635 25.146 26.543 8.128 9.271 3.556 3.886 2.667 2.972
T Q B C E
U K
1234 5
A L
G D
5 PL
J H
M
0.356 (0.014)
T Q
http://onsemi.com
19
MC34167, MC33167
D2PAK D2T SUFFIX CASE 936A02 ISSUE B
T A K B
1 2 3 4 5 OPTIONAL CHAMFER NOTES: 1. DIMENSIONING AND TOLERANCING PER ANSI Y14.5M, 1982. 2. CONTROLLING DIMENSION: INCH. 3. TAB CONTOUR OPTIONAL WITHIN DIMENSIONS A AND K. 4. DIMENSIONS U AND V ESTABLISH A MINIMUM MOUNTING SURFACE FOR TERMINAL 6. 5. DIMENSIONS A AND B DO NOT INCLUDE MOLD FLASH OR GATE PROTRUSIONS. MOLD FLASH AND GATE PROTRUSIONS NOT TO EXCEED 0.025 (0.635) MAXIMUM. INCHES MIN MAX 0.386 0.403 0.356 0.368 0.170 0.180 0.026 0.036 0.045 0.055 0.067 BSC 0.539 0.579 0.050 REF 0.000 0.010 0.088 0.102 0.018 0.026 0.058 0.078 5 _ REF 0.116 REF 0.200 MIN 0.250 MIN MILLIMETERS MIN MAX 9.804 10.236 9.042 9.347 4.318 4.572 0.660 0.914 1.143 1.397 1.702 BSC 13.691 14.707 1.270 REF 0.000 0.254 2.235 2.591 0.457 0.660 1.473 1.981 5 _ REF 2.946 REF 5.080 MIN 6.350 MIN
TERMINAL 6
U V
S H M L
D 0.010 (0.254)
M
N G R
SOLDERING FOOTPRINT*
8.38 0.33
DIM A B C D E G H K L M N P R S U V
10.66 0.42
1.016 0.04
5.08 0.20
*For additional information on our PbFree strategy and soldering details, please download the ON Semiconductor Soldering and Mounting Techniques Reference Manual, SOLDERRM/D.
ON Semiconductor and are registered trademarks of Semiconductor Components Industries, LLC (SCILLC). SCILLC reserves the right to make changes without further notice to any products herein. SCILLC makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does SCILLC assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation special, consequential or incidental damages. Typical parameters which may be provided in SCILLC data sheets and/or specifications can and do vary in different applications and actual performance may vary over time. All operating parameters, including Typicals must be validated for each customer application by customers technical experts. SCILLC does not convey any license under its patent rights nor the rights of others. SCILLC products are not designed, intended, or authorized for use as components in systems intended for surgical implant into the body, or other applications intended to support or sustain life, or for any other application in which the failure of the SCILLC product could create a situation where personal injury or death may occur. Should Buyer purchase or use SCILLC products for any such unintended or unauthorized application, Buyer shall indemnify and hold SCILLC and its officers, employees, subsidiaries, affiliates, and distributors harmless against all claims, costs, damages, and expenses, and reasonable attorney fees arising out of, directly or indirectly, any claim of personal injury or death associated with such unintended or unauthorized use, even if such claim alleges that SCILLC was negligent regarding the design or manufacture of the part. SCILLC is an Equal Opportunity/Affirmative Action Employer. This literature is subject to all applicable copyright laws and is not for resale in any manner.
http://onsemi.com
20
MC34167/D
Crimp
EH CONNECTOR
Disconnectable Crimp style connectors
Compact and slim
Radial Tape
2.5mm
(.098") pitch
Features
This connector is designed to be compact and unusually thin. It measures only 8.1mm (.319") high after mounting and is just 3.8mm (.150") wide.
Polarizing guides
The header and housing have guides to prevent improper mating.
Whisker prevention
The contact material is treated with a reflow process, and the square post is copper-undercoated and tin/lead-plated for
This, the thinnest, 2.5mm (.098") pitch connector, is 8.1mm (.319") in height after mounting and 3.8mm (.150") in width. It is designed to meet the demand for the highdensity connection of internal wires to printed circuit boards. It is compact, highly reliable and low in cost.
whisker prevention.
Interchangeability
The shrouded header is interchangeable with those of 2.5mm (.098") pitch insulation displacement HR connectors.
Specifications
JST
5
B
Current rating: 3.0A AC, DC Voltage rating: 250V AC, DC Temperature range: -25C to +85C (including temperature rise in applying electrical current) Contact resistance: Initial value/10m max. After environmental testing/20m max. Insulation resistance: 1,000M min. Withstanding voltage: 800V AC/minute Applicable wire: AWG #32 to #22 Applicable PC board thickness: 0.8 to 1.6mm(.031" to .063") * Contact JST for details.
Standards
Recognized file No. E60389 Certified file No. LR20812 File No. R75089 (conforms to DIN/VDE 0627)
21
EH
CONNECTOR
Contact
Shape A
5.7(.224) 2.85(.112) 2.05(.081) 1.0(.039) 2.0(.079)
Shape
A B
mm2
0.05 to 0.3 0.032 to 0.08
1.6(.063)
Note: 1.Contact JST if you require gold-plated contacts.Contact JST for details. 2.SEH-003T-P0.6L is not TUV approved.
Shape B
5.7(.224) 2.85(.112) 2.05(.081) 1.1(.039) 2.0(.079) 1.6(.063)
Housing
Circuits
2
Model No. EHR- 2 EHR- 3 EHR- 4 EHR- 5 EHR- 6 EHR- 7 EHR- 8 EHR- 9 EHR-10 EHR-11 EHR-12 EHR-13 EHR-14 EHR-15
Dimensions mm(in.) A
2.5( .098) 5.0( .197) 7.5( .295) 10.0( .394) 12.5( .492) 15.0( .591) 17.5( .689) 20.0( .787) 22.5( .866) 25.0( .984) 27.5(1.083) 30.0(1.181) 32.5(1.280) 35.0(1.378)
B
7.0( .276) 9.5( .374) 12.0( .472) 14.5( .571) 17.0( .669) 19.5( .768) 22.0( .866) 24.5( .965) 27.0(1.063) 29.5(1.161) 32.0(1.260) 34.5(1.358) 37.0(1.457) 39.5(1.555)
Qty / bag
1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,000
0.6 (.024)
B A 3.8(.150)
3 4 5 6 7
7
6.5(.256)
JST
8 9 10 11
0.7 (.028)
12 13 14 15
Material
Nylon 66, UL94V-0, natural (white)
22
EH
CONNECTOR
Shrouded header
The shrouded headers are interchangeable with those of the HR crimp style and insulation displacement connectors (see page 146).
Dimensions mm.(in) A
2.5( .098) 5.0( .197) 7.5( .295) 10.0( .394) 12.5( .492) 15.0( .591) 17.5( .689) 20.0( .787) 22.5( .866) 25.0( .984) 27.5(1.083) 30.0(1.181) 32.5(1.280) 35.0(1.378)
Top entry type B 2B-EH-A B 3B-EH-A B 4B-EH-A B 5B-EH-A B 6B-EH-A B 7B-EH-A B 8B-EH-A B 9B-EH-A B10B-EH-A B11B-EH-A B12B-EH-A B13B-EH-A B14B-EH-A B15B-EH-A
Side entry type S 2B-EH S 3B-EH S 4B-EH S 5B-EH S 6B-EH S 7B-EH S 8B-EH S 9B-EH S10B-EH S11B-EH S12B-EH S13B-EH S14B-EH S15B-EH
B
7.5( .295) 10.0( .394) 12.5( .492) 15.0( .591) 17.5( .689) 20.0( .787) 22.5( .886) 25.0( .984) 27.5(1.083) 30.0(1.181) 32.5(1.280) 35.0(1.378) 37.5(1.476) 40.0(1.575)
6.0(.236) 3.3(.130)
3 4 5
3.2(.126)
6 7 8 9
2.5(.098)
(3 to 15 circuits)
3.8(.150)
10 11 12
6.0(.236) 3.3(.130)
5.1(.201)
13 14 15
3.2(.126)
0.64 (.025) A B
Note: 1. Also available and identified as model BxxB-EH is a top entry type having a post extension length of 4.0mm(.157") 2. Top entry type headers are not TUV approved.
2.5 (.098)
2.5 (.098) A B
0.64 (.025)
3.2 (.126)
6.7(.264)
7.5(.295)
Note: 1. Tolerances are non-cumulative:0.05mm(.002" ) for all centers. 2. Hole dimension differ according to the kind of PC board and piercing method. If PC boards made of hard material such as FR-4 are used, the hole dimensions should be larger. The dimensions above should serve as a guideline. Contact JST for details.
23
EH
CONNECTOR
TS type (2 circuits)
7.5(.295) 2.5(.098) 5.4(.213) [1.0(.039)] 6.5 1.5(.059) (.255)
Circuits
Dimensions mm(in.) A
5.0(.197) 7.5(.295) 10.0(.394) 12.5(.492) 15.0(.591) 17.5(.689)
B
10.0(.394) 12.5(.492) 15.0(.591) 17.5(.689) 20.0(.787) 22.5(.886)
Qty / box
1,400 1,400 700 700 700 700 700
2 3 4 5 6 7
0.64(.025) dia.
(3 to 8 circuits)
B A 0.64(.025) dia. [1.0(.039)] 1.5(.059) 2.8(.110) 6.5(.256) 5.6(.220) 4.4 (.173) 2.2(.087)
2.5(.098) 2.5(.098)
0.64(.025) dia.
TV4 type
2.5(.098) 2.5(.098) B A 0.64(.025) 2.8(.110) 6.5(.256) 5.6(.220) 4.4 (.173) 2.2(.087)
Circuits
3 4 5 6 7
Dimensions mm(in.) A
5.0(.197) 7.5(.295) 10.0(.394) 12.5(.492) 15.0(.591) 17.5(.689)
B
10.0(.394) 12.5(.492) 15.0(.591) 17.5(.689) 20.0(.787) 22.5(.886)
Qty / box
1,400 700 700 700 700 700
24
EH
CONNECTOR
Taping specifications
2 and 3 circuits:12.7(.500) 4 to 8 circuits:25.4(1.000)
20.0(.787) 9.0(.354)
2circuits:5.1(.201) 3 to 8 circuits:3.85(.152)
Packaging specifications
D
Distance between the end of the tape and the first connector's center line (either end)
TERMIN ALS
Tail tape
& CONN ECTORS
Lead tape
Package type Distance between folds Box size Distance between the end of the tape and the first connectors center line (either end)
Flat pack (zigzag folded) 24 indexing holes per fold (304.8mm/12") (316x45x330mm)12.4"(W)x1.8"(D) x13.0"(H) 19.05mm(.750")
4.4 (.173)
Note: 1. Tolerances are non-cumulative:0.05mm(.002" ) for all centers. 2. Hole dimensions differ depending on the kind of PC board and piercing method. The dimensions above should serve as a guideline. Contact JST for details.
6.5(.256) 8.6(.339)
25
Garmin International, Inc. 1200 E. 151st Street Olathe, KS 66062 USA 190-00266-01, Revision D February 2006
Copyright 20042006 Garmin Ltd. or its subsidiaries Garmin International, Inc. 1200 East 151st Street, Olathe, Kansas 66062, U.S.A. Tel. 913/397.8200 or 800/800.1020 Fax 913/397.8282 Garmin (Europe) Ltd. Unit 5, The Quadrangle, Abbey Park Industrial Estate, Romsey, SO51 9DL, U.K. Tel. 44/0870.8501241 Fax 44/0870.8501251 Garmin Corporation No. 68, Jangshu 2nd Road, Shijr, Taipei County, Taiwan Tel. 886/2.2642.9199 Fax 886/2.2642.9099 All rights reserved. Except as expressly provided herein, no part of this manual may be reproduced, copied, transmitted, disseminated, downloaded, or stored in any storage medium, for any purpose without the express prior written consent of Garmin. Garmin hereby grants permission to download a single copy of this manual onto a hard drive or other electronic storage medium to be viewed and to print one copy of this manual or of any revision hereto, provided that such electronic or printed copy of this manual must contain the complete text of this copyright notice and provided further that any unauthorized commercial distribution of this manual or any revision hereto is strictly prohibited. Information in this document is subject to change without notice. Garmin reserves the right to change or improve its products and to make changes in the content without obligation to notify any person or organization of such changes or improvements. Visit the Garmin Web site (www.garmin.com) for current updates and supplemental information concerning the use and operation of this and other Garmin products. Garmin, AutoLocate, and MapSource are registered trademarks and WAAS Enabled is trademark of Garmin Ltd. or its subsidiaries and may not be used without the express permission of Garmin. Web site address: www.garmin.com
RECORD OF REVISIONS
Revision A B C D
Description Initial Release Revised and Redrawn Revised and Redrawn Revised and Redrawn
190-00266-01
Rev. D
GPS 15H & 15L Wire Descriptions and Wiring Diagrams .....................................8
2.1 GPS 15H & 15L Wire Descriptions ..................................................................................................8 2.2 GPS 15H & 15L Wiring Diagrams ...................................................................................................9
3 4
Mechanical Characteristics & Mounting.................................................................10 GPS 15H & 15L Software Interface.........................................................................11
4.1 Received NMEA 0183 Sentences ...................................................................................................11
4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.2.10 4.2.11 Almanac Information (ALM) ...............................................................................................................11 Sensor Initialization Information (PGRMI)..........................................................................................12 Sensor Configuration Information (PGRMC) ......................................................................................12 Additional Sensor Configuration Information (PGRMC1) ..................................................................13 Output Sentence Enable/Disable (PGRMO) ........................................................................................13 Tune DGPS Beacon Receiver (PSLIB) ................................................................................................14 Sentence Transmission Rate.................................................................................................................15 Transmitted Time .................................................................................................................................16 Global Positioning System Almanac Data (ALM) ...............................................................................16 Global Positioning System Fix Data (GGA) ........................................................................................16 GPS DOP and Active Satellites (GSA) ................................................................................................17 GPS Satellites in View (GSV)..............................................................................................................17 Recommended Minimum Specific GPS/TRANSIT Data (RMC) ........................................................17 Track Made Good and Ground Speed (VTG) ......................................................................................17 Geographic Position (GLL)..................................................................................................................18 Estimated Error Information (PGRME) ...............................................................................................18 GPS Fix Data Sentence (PGRMF) .......................................................................................................18
190-00266-01
Rev. D
Map Datum (PGRMM) ........................................................................................................................18 Sensor Status Information (PGRMT) ...................................................................................................19 3D velocity Information (PGRMV) .....................................................................................................19 DGPS Beacon Information (PGRMB) .................................................................................................19
4.3 Baud Rate Selection ........................................................................................................................20 4.4 One-Pulse-Per-Second (PPS) Output ..............................................................................................20 4.5 Received RTCM Data .....................................................................................................................20
Appendix C: Changing the Baud Rate in Garmin Mode.............................................28 Appendix D: Ephemeris Data Download (Programming Example)...........................29
Synopsis ...........................................................................................................................................................29 Garmin Binary Format Review ........................................................................................................................29 Ephemeris Download Procedure ......................................................................................................................30 TX Packet: Ephemeris Data Request .......................................................................................................30 RX Packet: Acknowledgement ................................................................................................................30 RX Packet: Number of Data Packets to Expect........................................................................................30 TX Packet: Acknowledgement.................................................................................................................30 RX Packet: Ephemeris Data .....................................................................................................................31 TX Packet: Download Complete..............................................................................................................33
190-00266-01
Rev. D
1 1.1
The GPS system is operated by the government of the United States, which is solely responsible for its accuracy and maintenance. Although the GPS 15H & 15L sensors are precision electronic NAVigation AIDs (NAVAID), any NAVAID can be misused or misinterpreted, and therefore become unsafe. Use these products at your own risk. To reduce the risk, carefully review and understand all aspects of these Technical Specifications before using the GPS 15H & 15L. When in actual use, carefully compare indications from the GPS to all available navigation sources including the information from other NAVAIDs, visual sightings, charts, etc. For safety, always resolve any discrepancies before continuing navigation.
FCC Compliance
The GPS 15H & 15L sensors comply with Part 15 of the FCC interference limits for Class B digital devices FOR HOME OR OFFICE USE. These limits are designed to provide reasonable protection against harmful interference in a residential installation, and are more stringent than outdoor requirements. Operation of this device is subject to the following conditions: (1) This device may not cause harmful interference, and (2) this device must accept any interference received, including interference that may cause undesired operation. This equipment generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this equipment does cause harmful interference to radio or television reception, which can be determined by turning the equipment off and on, the user is encouraged to try to correct the interference by one or more of the following measures: Reorient or relocate the receiving antenna. Increase the separation between the equipment and receiver. Connect the equipment into an outlet on a circuit different from that to which the receiver is connected. Consult the dealer or an experienced radio/TV technician for help.
The GPS 15H & 15L sensors do not contain any user-serviceable parts. Unauthorized repairs or modifications could result in permanent damage to the equipment and void your warranty and your authority to operate these devices under Part 15 regulations.
190-00266-01
Rev. D
1.2
LIMITED WARRANTY
This Garmin product is warranted to be free from defects in materials or workmanship for one year from the date of purchase. Within this period, Garmin will at its sole option repair or replace any components that fail in normal use. Such repairs or replacement will be made at no charge to the customer for parts or labor, provided that the customer shall be responsible for any transportation cost. This warranty does not cover failures due to abuse, misuse, accident, or unauthorized alteration or repairs. THE WARRANTIES AND REMEDIES CONTAINED HEREIN ARE EXCLUSIVE AND IN LIEU OF ALL OTHER WARRANTIES EXPRESS OR IMPLIED OR STATUTORY, INCLUDING ANY LIABILITY ARISING UNDER ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, STATUTORY OR OTHERWISE. THIS WARRANTY GIVES YOU SPECIFIC LEGAL RIGHTS, WHICH MAY VARY FROM STATE TO STATE. IN NO EVENT SHALL GARMIN BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER RESULTING FROM THE USE, MISUSE, OR INABILITY TO USE THIS PRODUCT OR FROM DEFECTS IN THE PRODUCT. Some states do not allow the exclusion of incidental or consequential damages, so the above limitations may not apply to you. Garmin retains the exclusive right to repair or replace the unit or software or offer a full refund of the purchase price at its sole discretion. SUCH REMEDY SHALL BE YOUR SOLE AND EXCLUSIVE REMEDY FOR ANY BREACH OF WARRANTY. To obtain warranty service, contact your local Garmin authorized dealer or call Garmin Product Support at one of the numbers listed below for shipping instructions and an RMA tracking number. The unit should be securely packed with the tracking number clearly written on the outside of the package. The unit should then be sent, freight charges prepaid, to any Garmin warranty service station. A copy of the original sales receipt is required as the proof of purchase for warranty repairs. Garmin International, Inc. 1200 E 151st Street, Olathe, Kansas 66062 U.S.A. Tel. 913/397.8200 or 800/800.1020 Fax. 913/397.8282 Garmin (Europe) Ltd. Unit 5, The Quadrangle, Abbey Park Industrial Estate, Romsey, SO51 9DL U.K. Tel. 44/0870.8501241 Fax 44/0870.8501251 Online Auction Purchases: Products sold through online auctions are not eligible for rebates or other special offers from Garmin. Online auction confirmations are not accepted for warranty verification. To obtain warranty service, an original or copy of the sales receipt from the original retailer is required. Garmin will not replace missing components from any package purchased through an online auction. International Purchases: A separate warranty is provided by international distributors for units purchased outside the United States. This warranty is provided by the local in-country distributor and this distributor provides local service for your unit. Distributor warranties are only valid in the area of intended distribution. Units purchased in the United States or Canada must be returned to the Garmin service center in the United Kingdom, the United States, Canada, or Taiwan for service.
190-00266-01
Rev. D
1.3
OVERVIEW
The GPS 15H & 15L are part of Garmins latest generation of GPS sensor boards designed for a broad spectrum of OEM (Original Equipment Manufacture) system applications. Based on the proven technology found in other Garmin 12-channel GPS receivers, the GPS 15H & 15L track up to 12 satellites at a time while providing fast time-to-first-fix, one-second navigation updates, and low power consumption. The GPS 15H & 15L also provide the capability of FAA Wide Area Augmentation System (WAAS) differential GPS. Their far-reaching capabilities meet the sensitivity requirements of land navigation, the timing requirements for precision timing applications, as well as the dynamics requirements of high-performance aircraft. The GPS 15H & 15L designs utilize the latest technology and high-level circuit integration to achieve superior performance while minimizing space and power requirements. Critical components of the system, such as the digital baseband processor, were designed by Garmin to ensure that the GPS 15H & 15L provide the quality, performance, and capabilities that you have grown to expect from Garmin GPS receivers. The elegant hardware design, combined with software intelligence, makes the GPS 15H & 15L easy to integrate and use. Because they are complete GPS receivers, the GPS 15H & 15L require minimal additional components from an OEM or system integrator. A minimum system must provide the GPS receiver with a source of power, a GPS antenna, and a clear view of GPS satellites within the 1.5 GHz band. For optimum performance, the GPS antenna should be an active antenna with a gain between 10 and 30 dB. If cost constraints prevent the use of an active antenna, a well-matched, efficient, passive antenna attached by a short cable can be used instead. The system may communicate with the GPS 15H & 15L via two RS-232 compatible receive channels and one transmit channel. The GPS 15H & 15L internal FLASH memory allows the GPS to retain critical data such as satellite orbital parameters, last-known position, date and time. End-user interfaces such as keyboards and displays are the responsibility of the application designer.
1.4
FEATURES
12-channel GPS receiver tracks and uses up to 12 satellites for fast, accurate positioning and low power consumption. Differential DGPS capability utilizing real-time WAAS or RTCM corrections yielding 35 meter position accuracy (see section 1.5.4.4). Compact, rugged design ideal for applications with minimal space. May be remotely mounted in an out-of-the-way location. Receiver status information can be displayed directly on a chartplotter or PC. User initialization is not required. Once installed and a fix is obtained, the unit automatically produces navigation data. User-configurable navigation mode (2-dimensional or 3-dimensional fix). Highly accurate one-pulse-per-second (PPS) output for precise timing measurements. Pulse width is configurable in 20 millisecond increments from 20 ms to 980 ms. Configurable for binary format carrier phase data output on COM 1 port. Flexible input voltage levels of 3.3 to 5.4 VDC (GPS 15L) or 8.0 to 40 VDC (GPS 15H). Built-in backup battery to maintain real-time clock for up to 21 days. Provision for external power to maintain the real-time clock for longer intervals. FLASH-based program and non-volatile memory. New software revisions upgradeable through Web site download and serial interface. Non-volatile memory does not require battery backup.
190-00266-01
Rev. D
1.5
TECHNICAL SPECIFICATIONS
1.5.1
Physical Characteristics
1.5.1.1 Size 1.400 (35.56 mm) wide x 1.805 (45.85 mm) long x 0.327 (8.31 mm) high 1.5.1.2 Weight GPS 15H: GPS 15L:
1.5.1.3 Available Connector Options GPS 15H-F & 15L-F: 8-pin LIF (Low Insertion Force) flex connector, 1-millimeter pitch. For use with common 1 mm pitch, 8-conductor flex cable, available as Garmin Part Number 310-00040-01. This flex cable mates with common 1 mm pitch, 8pin flex connectors, such as Garmin Part Number 330-00346-08 or Molex Part Number 52793-0890. Refer to the Molex Web site at www.molex.com. GPS 15H & 15L-W: 8-pin JST connector, 1-millimeter pitch. Mating wire harness included (Garmin Part Number 325-00118-01). The connector housing used on this harness is equivalent to JST Part Number SHR-08V-S-B. The 8-wire crimp socket is equivalent to JST Part Number SSH-003T-P0.2. Refer to the JST Web site at www.jst.com.
1.5.1.4 Antenna Connector The GPS 15H & 15L sensors provide a MCX female connector for connection to an active GPS antenna, so the antennas cable should be terminated in MCX male. A suitable antenna is Garmins GA 27C Antenna (Garmin Part Number 010-10052-05). Other antennas that are terminated in male BNC connectors may be adapted via a Garmin MCX to BNC Adapter Cable (Garmin Part Number 010-10121-00).
1.5.2
Electrical Characteristics
1.5.2.1 Input Voltage GPS 15H: 8.0 VDC to 40 VDC unregulated GPS 15L: 3.3 VDC to 5.4 VDC (must have less than 100 mV peak-to-peak ripple)
1.5.2.2 Input Current GPS 15H: 60 mA peak, 50 mA nominal @ 8.0 VDC 40 mA peak, 33 mA nominal @ 12 VDC 15 mA peak, 12 mA nominal @ 40 VDC GPS 15L: 100 mA peak, 85 mA nominal @ 3.3 to 5.0 VDC
1.5.3
Environmental Characteristics
Operating Temperature: Storage Temperature: -30C to +80C -40C to +90C
190-00266-01
Rev. D
1.5.4
GPS Performance
1.5.4.1 Receiver WAAS Enabled, 12 parallel channel GPS receiver continuously tracks and uses up to 12 satellites (up to 11 with PPS active) to compute and update your position. 1.5.4.2 Acquisition Times Reacquisition: Less than 2 seconds Warm: Cold: AutoLocate: SkySearch: Approx. 15 seconds (all data known) Approx. 45 seconds (initial position, time, and almanac known; ephemeris unknown) 5 minutes (almanac known; initial position and time unknown) 5 minutes (no data known)
1.5.4.3 Update Rate 1 second default; NMEA 0183 output interval configurable from 1 to 900 seconds in 1-second increments. 1.5.4.4 Accuracy GPS Standard Positioning Service (SPS) Position: < 15 meters, 95% typical Velocity: 0.1 knot RMS steady state DGPS (USCG/RTCM) Position: 3-5 meters, 95% typical Velocity: 0.1 knot RMS steady state DGPS (WAAS) Position: < 3 meters, 95% typical Velocity: 0.1 knot RMS steady state PPS Time: 1 microsecond at rising edge of PPS pulse (subject to Selective Availability) Dynamics: 999 knots velocity (only limited at altitude greater than 60,000 feet), 6g dynamics
190-00266-01
Rev. D
1.5.5
Interfaces
1.5.5.1 GPS 15H & 15L Electrical Characteristics True RS-232 output (Port 2 output not used at time of publication), asynchronous serial input compatible with RS-232 or TTL voltage levels, RS-232 polarity. User selectable NMEA 0183 baud rate (300, 600, 1200, 2400, 4800, 9600, 19200, 38400). Factory setting is 4800 baud.
1.5.5.2 Port 1 Protocols Configurable between NMEA 0183 Versions 2.00 and 3.00. ASCII output sentences: GPALM, GPGGA, GPGLL, GPGSA, GPGSV, GPRMC, and GPVTG (NMEA-approved sentences); and PGRMB, PGRME, PGRMF, PGRMM, PGRMT, and PGRMV (Garmin proprietary sentences). NMEA 0183 Outputs (see section 4.2 for full protocol specifications) Position, velocity and time Receiver and satellite status Differential Reference Station ID and RTCM Data age Geometry and error estimates NMEA 0183 Inputs (see section 4.1 for full protocol specifications) Initial position, date and time (not required) Earth datum and differential mode configuration command, PPS Enable, GPS satellite almanac Configurable for binary data output including GPS carrier phase data
1.5.5.3 Port 2 Protocols Real-time Differential Correction input (RTCM SC-104 message types 1, 2, 3, 7, and 9) 1.5.5.4 PPS 1 Hz pulse, programmable width, 1 s accuracy
1.5.6
Antenna Specifications
Should be an active antenna with the following specifications: Gain: Antenna should provide between 10 dB to 30 dB net gain between the antenna feed point and the connection to the GPS 15H & 15L. Consider all amplifier gains, filter losses, cable losses, etc. when calculating the gain. RF Connection: GPS 15H & 15L RF Connection: MCX Female connector (on the GPS 15H & 15L board). Antenna Connection: MCX Male connector (on the end of the antenna cable). Garmin Antenna: GPS 27C (Garmin Part Number 010-10052-05) provides the required MCX Male connector. Other Garmin antennas terminated in a BNC Male connector may also be used if a Garmin MCX to BNC Adapter Cable (Garmin Part Number 010-10121-00) is used. Place the MCX to BNC Adapter Cable between the connector on the end of the antenna cable and the connector on the GPS 15H & 15L.
190-00266-01
Rev. D
Noise Figure/Gain:
The total noise figure on the external antenna must be 7 dB. Refer to the table below.
18.0
17.0
16.0
15.0
SNR (dB)
14.0
13.0
12.0
11.0
10.0 10.0
15.0
20.0
25.0
30.0
35.0
40.0
Gain (dB)
NF=1.3dB NF=2.3dB NF=3.3dB NF=4.3dB NF=5.3dB NF=6.3dB NF=7.3dB
Properly bias the antenna from an on-board source or an external source: Bias voltage from on-board source: GPS 15H supplies 3.3 VDC to the center conductor of the MCX female, relative to the connector shell ground. GPS 15L supplies 3.0 VDC to the center conductor of the MCX female, relative to the connector shell ground In both the GPS 15H and 15L, the source resistance of the DC supply to the center conductor of the connector is approximately 10 Ohms, which is included as a current limiting resistance. This resistance allows the receiver to survive momentary shorting of the antenna port. The GPS 15H and 15L sensors with serial numbers between 27700000 and 28099999 can detect if the antenna is shorted. GPS 15H and 15L sensors no in the serial number range listed above do not have a provision to protect against a continuously shorted antenna port. The antenna must not draw more than 60 mA. Bias voltage from external source: 4.0 to 8.0 VDC bias through the series combination of an on-board ~10 Ohm current limiting resistance and a Schottky diode. The antenna must not draw more than 60 mA.
190-00266-01
Rev. D
The GPS 15H-F & 15L-F use an eight-contact flex circuit LIF (low insertion force) connector. The GPS 15H-W & 15L-W use an eight-pin JST connector (mating wire harness included). See section 1.5.1.3.
2.1
Pin # 1
2 3
GROUND POWER
PORT 1 DATA IN
RF BIAS
PPS
PORT 2 DATA IN
190-00266-01
Rev. D
2.2
190-00266-01
Rev. D
1. Dimensions in millimeters [inches] 2. Dimension tolerance: +/-0.25 mm [0.01] 3. Use M2 mounting screws
1. Dimensions identical to GPS 15H-F and GPS 15L-F 2. Use M2 mounting screws
190-00266-01
Rev. D
The GPS 15H & 15L interface protocol design on COM 1 is based on the National Marine Electronics Associations NMEA 0183 ASCII interface specification. The COM 2 port can receive differential GPS (DGPS) correction data using the Radio Technical Commission for Maritime Services RTCM SC-104 standard. These standards are fully defined in NMEA 0183, Version 3.0 (copies may be obtained from NMEA, www.nmea.org) and RTCM Recommended Standards For Differential Navstar GPS Service, Version 2.2, RTCM Special Committee No.104 (copies may be obtained from RTCM, www.rtcm.org). The GPS 15H & 15L interface protocol, in addition to transmitting navigation information as defined by NMEA 0183, transmits additional information using the convention of Garmin proprietary sentences. These proprietary sentences begin with the characters, $PGRM, instead of the characters $G that are typical of the standard NMEA 0183 sentences. The characters $P indicate that the sentence is a proprietary implementation and the characters and the characters GRM indicate that it is Garmins proprietary sentence. The letter (or letters) that follow the characters $PGRM uniquely identifies that particular Garmin proprietary sentence. Binary phase data information can alternatively be output on the COM 1 port; see Appendix B: Binary Phase Output Format for details. The following sections describe the NMEA 0183 data format of each sentence transmitted and received by the GPS 15H & 15L.
4.1
The following paragraphs define the sentences that can be received on the GPS sensors port. Null fields in the configuration sentence indicate no change in the particular configuration parameter. All sentences received by the GPS sensor must be terminated with <CR><LF>, the ASCII characters for carriage return (0D hexadecimal) and line feed (0A hexadecimal), respectively. The checksum *hh is used for parity checking data and is recommended for use in environments containing high electromagnetic noise. It is generally not required in normal PC environments. When used, the parity bytes (hh) are the ASCII representation of the upper and lower nibbles of the exclusive-or (XOR) sum of all the characters between the $ and * characters, non-inclusive. The hex representation must be a capital letter, such as 3D instead of 3d. Sentences may be truncated by <CR><LF> after any data field and valid fields up to that point will be acted on by the sensor.
4.1.1
The $GPALM sentence can be used to initialize the GPS sensors stored almanac information in the unlikely event of non-volatile memory loss, or after storage of greater than six months without tracking GPS satellites. $GPALM,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>*hh<CR><LF> <1> <2> <3> <4> <5> <6> <7> <8> <9> <10> <11> <12> <13> <14> <15> Total number of ALM sentences to be transmitted by the GPS sensor during almanac download. This field can be null or any number when sending almanac to the GPS sensor. Number of current ALM sentence. This field can be null or any number when sending almanac to the GPS sensor. Satellite PRN number, 01 to 32 GPS week number SV health, bits 17-24 of each almanac page Eccentricity Almanac reference time Inclination angle Rate of right ascension Root of semi major axis Omega, argument of perigee Longitude of ascension node Mean anomaly af0 clock parameter af1 clock parameter
190-00266-01
Rev. D
4.1.2
The $PGRMI sentence provides information used to initialize the GPS sensors set position and time used for satellite acquisition. Receipt of this sentence by the GPS sensor causes the software to restart the satellite acquisition process. If there are no errors in the sentence, it is echoed upon receipt. If an error is detected, the echoed PGRMI sentence will contain the current default values. Current PGRMI defaults (with the exception of the Receiver Command, which is a command rather than a mode) can also be obtained by sending $PGRMIE to the GPS sensor. $PGRMI,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh<CR><LF> <1> <2> <3> <4> <5> <6> <7> Latitude, ddmm.mmm format (leading zeros must be transmitted) Latitude hemisphere, N or S Longitude, dddmm.mmm format (leading zeros must be transmitted) Longitude hemisphere, E or W Current UTC date, ddmmyy format Current UTC time, hhmmss format Receiver Command, A = Auto Locate, R = Unit Reset
4.1.3
The $PGRMC sentence provides information used to configure the GPS sensors operation. Configuration parameters are stored in non-volatile memory and retained between power cycles. The GPS sensor echoes this sentence upon its receipt if no errors are detected. If an error is detected, the echoed PGRMC sentence will contain the current default values. Current default values can also be obtained by sending $PGRMCE to the GPS sensor. $PGRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*hh<CR><LF> Fix mode, A = automatic, 2 = 2D exclusively (host system must supply altitude), 3 = 3D exclusively <2> Altitude above/below mean sea level, -15H & 15L00.0 to 18000.0 meters <3> Earth datum index. If the user datum index (96) is specified, fields <4> through <8> must contain valid values. Otherwise, fields <4> through <8> must be null. Refer to Appendix A: Earth Datums for a list of earth datums and the corresponding earth datum index. <4> User earth datum semi-major axis, 6360000.000 to 6380000.000 meters (.001 meters resolution) <5> User earth datum inverse flattening factor, 285.0 to 310.0 (10-9 resolution) <6> User earth datum delta x earth centered coordinate, -5000.0 to 5000.0 meters (1 meter resolution) <7> User earth datum delta y earth centered coordinate, -5000.0 to 5000.0 meters (1 meter resolution) <8> User earth datum delta z earth centered coordinate, -5000.0 to 5000.0 meters (1 meter resolution) <9> Differential mode, A = automatic (output DGPS data when available, non-DGPS otherwise), D = differential exclusively (output only differential fixes) <10> NMEA 0183 Baud rate, 1 = 1200, 2 = 2400, 3 = 4800, 4 = 9600, 5 = 19200, 6 = 300, 7 = 600, 8 = 38400 <11> Velocity filter, 0 = No filter, 1 = Automatic filter, 2-255 = Filter time constant (e.g., 10 = 10 second filter) <12> PPS mode, 1 = No PPS, 2 = 1 Hz <13> PPS pulse length, 0-48 = (n+1)*20 ms. Example: n = 4 corresponds to a 100 ms wide pulse <14> Dead reckoning valid time 1-30 (sec) All configuration changes take effect after receipt of a valid value except baud rate and PPS mode. Baud rate and PPS mode changes take effect on the next power cycle or an external reset event. <1>
190-00266-01
Rev. D
4.1.4
The $PGRMC1 sentence provides additional information used to configure the GPS sensor operation. Configuration parameters are stored in non-volatile memory and retained between power cycles. The GPS sensor echoes this sentence upon its receipt if no errors are detected. If an error is detected, the echoed PGRMC1 sentence will contain the current default values. Current default values can also be obtained by sending $PGRMC1E to the GPS sensor. $PGRMC1,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>*hh<CR><LF> <1> <2> <3> <4> <5> <6> <7> <8> <9> NMEA 0183 output time 1-900 (sec) Binary Phase Output Data, 1 = Off, 2 = On Automatic Position Averaging when Stopped, 1 = Off, 2 = On DGPS beacon frequency 0.0, 283.5 325.0 kHz in 0.5 kHz steps DGPS beacon bit rate 0, 25, 50, 100, or 200 bps DGPS beacon scanning, 1 = Off, 2 = On NMEA 0183 version 2.30 mode indicator, 1 = Off, 2 = On DGPS mode, A = Automatic, W = WAAS Only, R = RTCM Only, N = None (DGPS disabled) Power Save Mode, P = Power Save mode, N = Normal
At power up or external reset, a stored beacon frequency other than 0.0 causes the GPS sensor to tune the beacon receiver. Configuration changes take effect immediately, with the exception of Binary Phase Output Data, which takes effect on the next power cycle or a reset event. A reset can be commanded by sending the sentence $PGRMI,,,,,,,R (refer to section 4.1.2). If the GPS sensor is in the Binary data mode, it is necessary to send the following eight-byte data stream to the COM 1 input to temporarily change the data format to NMEA 0183. Then send a PGRMC1 sentence that turns off the Binary Phase Output Data format: 10 0A 02 26 00 CE 10 03 (Hexadecimal)
4.1.5
The $PGRMO sentence provides the ability to enable and disable specific output sentences. The following sentences are enabled at the factory: GPGGA, GPGSA, GPGSV, GPRMC, PGRMB, PGRME, PGRMM, PGRMT, and PSLIB. $PGRMO,<1>,<2>*hh<CR><LF> Target sentence description (e.g., PGRMT, GPGSV, etc.) Target sentence mode, where: 0 = disable specified sentence 1 = enable specified sentence 2 = disable all output sentences (except PSLIB) 3 = enable all output sentences (except GPALM) 4 = restore factory default output sentences The following notes apply to the PGRMO input sentence: 1. If the target sentence mode is 2 (disable all), 3 (enable all), or 4 (restore defaults), the target sentence description is not checked for validity. In this case, an empty field is allowed (e.g., $PGRMO,,3), or the mode field may contain from 1 to 5 characters. If the target sentence mode is 0 (disable) or 1 (enable), the target sentence description field must be an identifier for one of the sentences that can be output by the GPS sensor. If either the target sentence mode field or the target sentence description field is not valid, the PGRMO sentence will have no effect. $PGRMO,GPALM,1 causes the GPS sensor to transmit all stored almanac information. All other NMEA 0183 sentence transmission is suspended temporarily. $PGRMO,,G causes the COM 1 port to change to Garmin Data Transfer format for the duration of the power cycle. The Garmin mode is required for GPS 15H & 15L product software updates. <1> <2>
2. 3. 4. 5.
190-00266-01
Rev. D
4.1.6
The $PSLIB sentence provides the ability to tune a Garmin GBR 21, GBR 23 or equivalent beacon receiver. $PSLIB,<1>,<2>*hh<CR><LF> <1> Beacon tune frequency, 0.0, 283.5325.0 kHz in 0.5 kHz steps <2> Beacon bit rate, 0, 25, 50, 100, or 200 bps If valid data is received, the GPS sensor stores it in the EEPROM and echoes the PSLIB command to the beacon receiver. If the GPS sensor is using any stored beacon frequency other than 0.0, it will tune the beacon receiver once immediately after power up or external reset.
190-00266-01
Rev. D
4.2
The subsequent paragraphs define the sentences that can be transmitted on COM 1 by the GPS sensor.
4.2.1
Sentences are transmitted with respect to the user-selected baud rate. Regardless of the selected baud rate, the information transmitted by the GPS sensor is referenced to the one-pulse-per-second output pulse immediately preceding the GPRMC sentence, or whichever sentence is output first in the burst (see Table 3 below). The GPS sensor transmits each sentence (except where noted in particular transmitted sentence descriptions) at a periodic rate based on the user-selected baud rate and user-selected output sentences. The GPS sensor transmits the selected sentences contiguously. The contiguous transmission starts at a GPS second boundary. Determine the length of the transmission with the following equation and Tables 3 and 4: length of transmission = total characters to be transmitted --------------------------------------------characters transmitted per second
Sentence Output by Default? Maximum Characters GPRMC 74 GPGGA 82 GPGSA 66 GPGSV 70 PGRME 35 GPGLL 44 GPVTG 42 PGRMV 32 PGRMF 82 PGRMB 40 PGRMM 32 PGRMT Once per minute 50 Table 3: NMEA 0183 Output Sentence Order and Size Baud Characters per Second 300 30 600 60 1200 120 2400 240 4800 480 9600 960 19200 1920 38400 3840 Table 4: Characters per Second for Available Baud Rates The maximum number of fields allowed in a single sentence is 82 characters including delimiters. Values in the table include the sentence start delimiter character $ and the termination delimiter <CR><LF>. The factory set defaults result in a once per second transmission at the NMEA 0183 specification transmission rate of 4800 baud.
190-00266-01
Rev. D
4.2.2
Transmitted Time
The GPS sensor outputs UTC (Coordinated Universal Time) date and time of day in the transmitted sentences. Before the initial position fix, the on-board clock provides the date and time of day. After the initial position fix, the date and time of day are calculated using GPS satellite information and are synchronized with the one-pulse-per-second output. The GPS sensor uses information obtained from the GPS satellites to add or delete UTC leap seconds and correct the transmitted date and time of day. The transmitted date and time of day for leap second correction follow the guidelines in National Institute of Standards and Technology Special Publication 432 (Revised 1990). This document is for sale by the Superintendent of Documents, U.S. Government Printing Office, Washington, D.C., 20402, U.S.A. When a positive leap second is required, one second is inserted at the beginning of the first hour (0h 0m 0s) of the day that the positive leap is occurring. The minute containing the leap second is 61 seconds long. The GPS sensor would have transmitted this information for the leap second added December 31, 1998 as follows: $GPRMC,235959,A,3851.3651,N,09447.9382,W,000.0,221.9,071103,003.3,E*69 $GPRMC,000000,A,3851.3651,N,09447.9382,W,000.0,221.9,081103,003.3,E*67 $GPRMC,000000,A,3851.3651,N,09447.9382,W,000.0,221.9,081103,003.3,E*67 $GPRMC,000001,A,3851.3651,N,09447.9382,W,000.0,221.9,081103,003.3,E*66 If a negative leap second should be required, one second is deleted at the end of some UTC month. The minute containing the leap second will be only 59 seconds long. In this case, the GPS sensor will not transmit the time of day 0h 0m 0s (the zero second) for the day from which the leap second is removed. $GPRMC,235959,A,3851.3650,N,09447.9373,W,000.0,000.0,111103,003.3,E*69 $GPRMC,000001,A,3851.3650,N,09447.9373,W,000.0,000.0,121103,003.3,E*6A $GPRMC,000002,A,3851.3650,N,09447.9373,W,000.0,000.0,121103,003.3,E*69
4.2.3
Almanac sentences are not normally transmitted. Almanac transmission can be initiated by sending the GPS sensor a $PGRMO,GPALM,1 command. Upon receipt of this command, the GPS sensor transmits available almanac information on GPALM sentences. During the transmission of almanac sentences, other NMEA 0183 data output is suspended temporarily. $GPALM,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>,<15>*hh<CR><LF> <field information> can be found in section 4.1.1.
4.2.4
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
190-00266-01
Rev. D
4.2.5
$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh<CR><LF>
4.2.6
$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,...<4>,<5>,<6>,<7>*hh<CR><LF> <1> Total number of GSV sentences to be transmitted <2> Number of current GSV sentence <3> Total number of satellites in view, 00 to 12 (leading zeros are transmitted) <4> Satellite PRN number, 01 to 32 (leading zeros are transmitted) <5> Satellite elevation, 00 to 90 degrees (leading zeros are transmitted) <6> Satellite azimuth, 000 to 359 degrees, true (leading zeros are transmitted) <7> Signal to noise ratio (C/No) 00 to 99 dB, null when not tracking (leading zeros are transmitted) Note: Items <4>,<5>,<6>, and <7> repeat for each satellite in view to a maximum of four (4) satellites per sentence. Additional satellites in view information must be sent in subsequent bursts of NMEA 0183 data. These fields will be null if unused.
4.2.7
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
4.2.8
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>
190-00266-01
Rev. D
4.2.9
$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh<CR><LF>
190-00266-01
Rev. D
190-00266-01
Rev. D
4.3
Baud rate selection can be performed by sending the appropriate configuration sentence to the GPS sensor as described in the $PGRMC section 4.1.3, field <10>.
4.4
The highly accurate one-pulse-per-second (PPS) output is provided for applications requiring precise timing measurements. The signal is generated after the initial position fix has been calculated and continues until power down. The rising edge of the signal is synchronized to the start of each GPS second. Regardless of the selected baud rate, the information transmitted by the GPS 15H & 15L is referenced to the pulse immediately preceding the NMEA 0183 RMC sentence. The accuracy of the one-pulse-per-second output is maintained only while the GPS 15H & 15L can compute a valid position fix. To obtain the most accurate results, the one-pulse-per-second output should be calibrated against a local time reference to compensate for cable and internal receiver delays and the local time bias. The default pulse width is 100 ms, however; it may be programmed in 20 ms increments between 20 ms and 980 ms as described in $PGRMC section 4.1.3, field <13>.
4.5
Position accuracy of less than 5 meters can be achieved with the GPS 15H & 15L by using Differential GPS (DGPS) real-time pseudo-range correction data in RTCM SC-104 format, with message types 1, 2, 3, 7, and 9. These corrections can be received by the GPS 15H & 15L on COM 2. The RTCM data must be received at the same baud rate as the COM 1 port. For details on the SC-104 format, refer to RTCM Paper 134-89/SC 104-68 by the Radio Technical Commission for Maritime Services.
190-00266-01
Rev. D
190-00266-01
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
HONG KONG 1963 - Hong Kong INDIAN - Bangladesh, India, Nepal INDIAN - Thailand, Vietnam IRELAND 1965 - Ireland ISTS O73 ASTRO 1969 - Diego Garcia JOHNSTON ISLAND 1961 - Johnston Island KANDAWALA - Sri Lanka KERGUELEN ISLAND - Kerguelen Island KERTAU 1948 - West Malaysia, Singapore L.C. 5 ASTRO - Cayman Brac Island LIBERIA 1964 - Liberia LUZON - Mindanao Island LUZON - Phillippines (excluding Mindanao Island) MAHE 1971 - Mahe Island MARCO ASTRO - Salvage Islands MASSAWA - Eritrea (Ethiopia) MERCHICH - Morocco MIDWAY ASTRO 1961 - Midway Island MINNA - Nigeria NORTH AMERICAN 1927 - Alaska NORTH AMERICAN 1927 - Bahamas (excluding San Salvador Island) NORTH AMERICAN 1927 - Central America (Belize, Costa Rica, El Salvador, Guatemala, Honduras, Nicaragua) NORTH AMERICAN 1927 - Canal Zone NORTH AMERICAN 1927 - Canada (including Newfoundland Island) NORTH AMERICAN 1927 - Caribbean (Barbados, Caicos Islands, Cuba, Dominican Republic, Grand Cayman, Jamaica, Leeward Islands, Turks Islands) NORTH AMERICAN 1927 - Mean Value (CONUS) NORTH AMERICAN 1927 - Cuba NORTH AMERICAN 1927 - Greenland (Hayes Peninsula) NORTH AMERICAN 1927 - Mexico NORTH AMERICAN 1927 - San Salvador Island NORTH AMERICAN 1983 - Alaska, Canada, Central America, CONUS, Mexico NAPARIMA, BWI - Trinidad and Tobago NAHRWAN - Masirah Island (Oman) NAHRWAN - Saudi Arabia NAHRWAN - United Arab Emirates OBSERVATORIO 1966 - Corvo and Flores Islands (Azores) OLD EGYPTIAN - Egypt OLD HAWAIIAN - Mean Value OMAN - Oman GPS 15H & 15L Technical Specifications Page 22 Rev. D
190-00266-01
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
PICO DE LAS NIEVES - Canary Islands PITCAIRN ASTRO 1967 - Pitcairn Island PUERTO RICO - Puerto Rico, Virgin Islands QATAR NATIONAL - Qatar QORNOQ - South Greenland REUNION - Mascarene Island ROME 1940 - Sardinia Island RT 90 - Sweden PROVISIONAL SOUTH AMERICAN 1956 - Bolivia, Chile, Colombia, Ecuador, Guyana, Peru, Venezuela SOUTH AMERICAN 1969 - Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Guyana, Paraguay, Peru, Venezuela, Trinidad and Tobago SOUTH ASIA - Singapore PROVISIONAL SOUTH CHILEAN 1963 - South Chile SANTO (DOS) - Espirito Santo Island SAO BRAZ - Sao Miguel, Santa Maria Islands (Azores) SAPPER HILL 1943 - East Falkland Island SCHWARZECK - Namibia SOUTHEAST BASE - Porto Santo and Madeira Islands SOUTHWEST BASE - Faial, Graciosa, Pico, Sao Jorge, and Terceira Islands (Azores) TIMBALAI 1948 - Brunei and East Malaysia (Sarawak and Sabah) TOKYO - Japan, Korea, Okinawa TRISTAN ASTRO 1968 - Tristan da Cunha User defined earth datum VITI LEVU 1916 - Viti Levu Island (Fiji Islands) WAKE-ENIWETOK 1960 - Marshall Islands WORLD GEODETIC SYSTEM 1972 WORLD GEODETIC SYSTEM 1984 ZANDERIJ - Surinam CH-1903 - Switzerland Hu - Tzu - Shan Indonesia 74 Austria Potsdam Taiwan - modified Hu-Tzu-Shan GDA - Geocentric Datum of Australia Dutch
190-00266-01
Rev. D
The data bytes of each packet contain the record specified by the record ID. A description of each record follows.
} cpo_sat_data;
190-00266-01
Rev. D
The status bit field represents a set of booleans described below: Bit Meaning when bit is one (1) 0 The unit has ephemeris data for the specified satellite. 1 The unit has a differential correction for the specified satellite. 2 The unit is using this satellite in the solution. This pattern is repeated for all 12 channels for a total of 12 X 7 bytes = 84 (0x54) bytes : typedef struct { cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data cpo_sat_data } cpo_all_sat_data The RS-232 Packet for the Satellite Record looks like: - 0x10 - 0x72 - 0x54 - cpo_all_sat_data - 0x## - 0x10 - 0x03 (2s complement of the arithmetic sum of the bytes between the delimiters) (DLE) (ETX is last byte) (DLE is first byte) (Record ID single byte) (Number of data bytes single byte)
190-00266-01
Rev. D
Position Record
The Position Record has a record identifier of typedef struct { float alt; float epe; float eph; float epv; int fix; double gps_tow; double lat; double lon; float lon_vel; float lat_vel; float alt_vel; float msl_hght; int leap_sec; long grmn_days; } cpo_pvt_data; alt epe eph epv fix gps_tow lat lon lon_vel lat_vel alt_vel msl_hght leap_sec grmn_days Ellipsoid altitude (meters) Est pos error (meters) Pos err, horizontal (meters) Pos err, vertical (meters) 0 = no fix; 1 = no fix; 2 = 2D; 3 = 3D; 4 = 2D differential; 5 = 3D differential; 6 and greater - not defined GPS time of week (sec) Latitude (radians) Longitude (radians) Longitude velocity (meters/second) Latitude velocity (meters/second) Altitude velocity (meters/second) Mean sea level height (meters) UTC leap seconds Garmin days (days since December 31, 1989)
Receiver time of week (seconds) Receiver week number Number of accumulated cycles Pseudorange (meters) To convert to (0 -359.999) multiply by 360.0 and divide by 2048.0 0 = no cycle slip detected; non-zero = cycle slip detected Signal strength - db Hz GPS 15H & 15L Technical Specifications Page 26 Rev. D
svid valid
Satellite number (0-31 and 119-138 for WAAS) Note: Add 1 to offset to current svid numbers. 0 = information not valid; non-zero = information valid
Sample C Code
DLE and ETX bytes: Sample C code to receive the two records should filter DLE and ETX bytes as described below: typedef enum { DAT, DLE, ETX } rx_state_type; /* Declare and initialize static variables */ static char in_que[ 256 ]; static int in_que_ptr = 0; static rx_state_type rx_state = DAT; . . . void add_to_que( char data ) { #define DLE_BYTE 0x10 #define ETX_BYTE 0x03 if ( rx_state == DAT ) { if ( data == DLE_BYTE ) { rx_state = DLE; } else { in_que[ in_que_ptr++ ] = data; } } else if ( rx_state == DLE ) { if ( data == ETX_BYTE ) { rx_state = ETX; } else { rx_state = DAT; in_que[ in_que_ptr++ ] = data; } } else if ( rx_state == ETX ) { if ( data == DLE_BYTE ) { rx_state = DLE; } } if ( in_que_ptr > 255 ) { in_que_ptr = 0; } } 190-00266-01 GPS 15H & 15L Technical Specifications Page 27 Rev. D
6.
190-00266-01
Rev. D
CHKSUM
The DLE (0x10) is a delimiter byte used in conjunction with the ETX byte to determine beginning and ending of a packet. However, a 0x10 could appear in the data itself, so if this occurs the byte is escaped with another DLE byte (sometimes referred to as DLE stuffing). In other words, if a DLE occurs in the data, another DLE is transmitted immediately after to indicate that it is a data byte and it is not being used as a delimiter. Note that the size byte of the packet does not count the second DLE byte in an escaped DLE pair in the data field. Since a DLE that is a part of the data will have a second DLE to escape it, a single DLE followed by an ETX byte means that the end of a packet has been reached. In order to interpret these packets properly, one must remove the escaped DLE bytes. This can be achieved using an algorithm similar to the Sample C Code fragment on the previous page.
190-00266-01
Rev. D
Then, the unit immediately sends a packet communicating how many data packets to expect for the ephemeris download (a maximum of twelve): RX Packet: Number of Data Packets to Expect Byte Description Delimiter Record ID Number of bytes in data Number of records Pad Checksum calculation Delimiter End of packet Name DLE IOP_RECORDS SIZE NUM_SV DATA CHKSUM DLE ETX HEX Value 0x10 0x1B 0x02 0x0C 0x00 ---0x10 0x03
This packet requires acknowledgement, as shown below (note that the data field contains the IOP_RECORDS ID to indicate the acknowledgement of the IOP_RECORDS packet): TX Packet: Acknowledgement Byte Description Delimiter Record ID Number of bytes in data Pad ID of packet being ACKd Checksum calculation Delimiter End of packet Name DLE IOP_ACK_BYTE SIZE DATA IOP_RECORDS CHKSUM DLE ETX HEX Value 0x10 0x06 0x02 0x00 0x1B ---0x10 0x03
190-00266-01
Rev. D
Next, the unit sends the specified number of packets containing the ephemeris information. An example packet is shown below. Each packet should be acknowledged as before (be sure to modify the ACK packet to indicate what type of packet being acknowledgedfor ephemeris data the ID is 0x35). RX Packet: Ephemeris Data Byte Description Delimiter Ephemeris data ID Number of bytes in data Ephemeris data . . . Checksum calculation Delimiter End of packet Name DLE IOP_SPC_EPH_DATA SIZE DATA . . . CHKSUM DLE ETX HEX Value 0x10 0x35 0x78 ---. . . ---0x10 0x03
The data portion of each packet can then be parsed into an instance of the following structure. Each of these structures represents data from a single satellite.
typedef struct { sint16 wn; float toc; float toe; float af0; float af1; float af2; float ura; double e; double sqrta; double dn; double m0; double w; double omg0; double i0; float odot; float idot; float cus; float cuc; float cis; float cic; float crs; float crc; unsigned char iod; } SDM_spc_eph_type; /* ephemeris data record for SPC /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* week number (weeks) reference time of clock parameters (s) reference time of ephemeris parameters (s) clock correction coefficient - group delay (s) clock correction coefficient (s/s) clock correction coefficient (s/s/s) user range accuracy (m) eccentricity (-) square root of semi-major axis (a) (m**1/2) mean motion correction (r/s) mean anomaly at reference time (r) argument of perigee (r) right ascension (r) inclination angle at reference time (r) rate of right ascension (r/s) rate of inclination angle (r/s) argument of latitude correction, sine (r) argument of latitude correction, cosine (r) inclination correction, sine (r) inclination correction, cosine (r) radius correction, sine (m) radius correction, cosine (m) issue of data */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */
190-00266-01
Rev. D
An example function to complete the parsing is shown below. Note that the double data types are converted by the function cnvt_ieee_double(). This function merely swaps the upper and lower words of the double. This is necessary on GPS 15, 16, 17 series sensors due to a compatibility issue with the IEEE floating point standard): In this example, the array m_TempArray contains the data portion of the ephemeris packet (with DLE stuffing removed).
/**************************************************************************** * * PROCEDURE NAME: * copyData - ephemeris data unpacker * * DESCRIPTION: * unpacks data from ephemeris packet DATA field after extraneous DLEs * have been removed. Note that sint16 refers to a signed 16-bit * integer type. * ****************************************************************************/ void GPM_ephList::copyData /* ephemeris data unpacker */ ( GPM_ephData* pTemp /* pointer to ephemeris data array */ ) { pTemp->EphStruct.wn = *(sint16*)&m_TempArray[IDX_EPH_WN]; pTemp->EphStruct.toc = *(float*)&m_TempArray[IDX_EPH_TOC]; pTemp->EphStruct.toe = *(float*)&m_TempArray[IDX_EPH_TOE]; pTemp->EphStruct.af0 = *(float*)&m_TempArray[IDX_EPH_AF0]; pTemp->EphStruct.af1 = *(float*)&m_TempArray[IDX_EPH_AF1]; pTemp->EphStruct.af2 = *(float*)&m_TempArray[IDX_EPH_AF2]; pTemp->EphStruct.ura = *(float*)&m_TempArray[IDX_EPH_URA]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_E]); pTemp->EphStruct.e = *(double*)&m_TempArray[IDX_EPH_E]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_SQRTA]); pTemp->EphStruct.sqrta = *(double*)&m_TempArray[IDX_EPH_SQRTA]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_DN]); pTemp->EphStruct.dn = *(double*)&m_TempArray[IDX_EPH_DN]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_M0]); pTemp->EphStruct.m0 = *(double*)&m_TempArray[IDX_EPH_M0]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_W]); pTemp->EphStruct.w = *(double*)&m_TempArray[IDX_EPH_W]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_OMG0]); pTemp->EphStruct.omg0 = *(double*)&m_TempArray[IDX_EPH_OMG0]; cnvt_ieee_double((long *)&m_TempArray[IDX_EPH_I0]); pTemp->EphStruct.i0 = *(double*)&m_TempArray[IDX_EPH_I0]; pTemp->EphStruct.odot = *(float*)&m_TempArray[IDX_EPH_ODOT]; pTemp->EphStruct.idot = *(float*)&m_TempArray[IDX_EPH_IDOT]; pTemp->EphStruct.cus = *(float*)&m_TempArray[IDX_EPH_CUS]; pTemp->EphStruct.cuc = *(float*)&m_TempArray[IDX_EPH_CUC]; pTemp->EphStruct.cis = *(float*)&m_TempArray[IDX_EPH_CIS]; pTemp->EphStruct.cic = *(float*)&m_TempArray[IDX_EPH_CIC]; pTemp->EphStruct.crs = *(float*)&m_TempArray[IDX_EPH_CRS]; pTemp->EphStruct.crc = *(float*)&m_TempArray[IDX_EPH_CRC]; pTemp->EphStruct.iod = *(unsigned char*)&m_TempArray[IDX_EPH_IOD]; return; } /* copyData */
190-00266-01
Rev. D
Each data member of the ephemeris data structure is indexed into the data array of the ephemeris packet and cast as the appropriate data type. The indices are as follows (note that they correlate to the data members of the structure respectively):
#define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define IDX_EPH_WN IDX_EPH_TOC IDX_EPH_TOE IDX_EPH_AF0 IDX_EPH_AF1 IDX_EPH_AF2 IDX_EPH_URA IDX_EPH_E IDX_EPH_SQRTA IDX_EPH_DN IDX_EPH_M0 IDX_EPH_W IDX_EPH_OMG0 IDX_EPH_I0 IDX_EPH_ODOT IDX_EPH_IDOT IDX_EPH_CUS IDX_EPH_CUC IDX_EPH_CIS IDX_EPH_CIC IDX_EPH_CRS IDX_EPH_CRC IDX_EPH_IOD 0 4 8 12 16 20 24 28 36 44 52 60 68 76 84 88 92 96 100 104 108 112 116
The last packet is a download complete packet that looks like this: TX Packet: Download Complete Byte Description Delimiter Download Complete ID Number of bytes in data Ephemeris Download ID Pad Checksum calculation Delimiter End of packet Name DLE IOP_DL_CMPLT SIZE IOP_DOWN_LOAD_EPH DATA CHKSUM DLE ETX HEX Value 0x10 0x0c 0x02 0x5D 0x00 ---0x10 0x03
After properly acknowledging this packet (ACK the IOP_DL_CMPLT ID), the ephemeris download is complete.
190-00266-01
Rev. D
For the latest free software updates (excluding map data) throughout the life of your Garmin products, visit the Garmin Web site at www.garmin.com.
Copyright 20042006 Garmin Ltd. or its subsidiaries Garmin International, Inc. 1200 East 151st Street, Olathe, Kansas 66062, U.S.A. Garmin (Europe) Ltd. Unit 5, The Quadrangle, Abbey Park Industrial Estate, Romsey, SO51 9DL, U.K. Garmin Corporation No. 68, Jangshu 2nd Road, Shijr, Taipei County, Taiwan www.garmin.com Part Number 190-00266-01 Rev. D
TML
DOCUMENTO II
PLANOS
Lista de planos
Plano 1. TCM Brushless DC: Esquema elctrico Plano 2. TCM Brushless DC: PCB superior Plano 3. TCM Brushless DC: PCB inferior Plano 4. TCM Brushless DC: Pistas Plano 5. TCM Brushless DC: Componentes Plano 6. GPS I2C/SPI Hub: Esquema elctrico Plano 7. GPS I2C/SPI Hub: PCB superior Plano 8. GPS I2C/SPI Hub: PCB inferior Plano 9. GPS I2C/SPI Hub: Pistas Plano 10. GPS I2C/SPI Hub: Componentes
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Vcc
A
10 k
RESET Vcc
100 nF
PWM
AN0
5,6 k 470 nF
AN2 HA HB HC
B
HALL
1 2 3 4 5 6 7 8 9 10 11 12 13 14
28 27 26 25 24 23 22 21 20 19 18 17 16 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14
MSK4400U
28 27 26 25 24 23 22 21 20 19 18 17 16 15
Vmot
MA
dsPIC30F3010
GND
Vmot
MB
Vmot
MC
C
PWM
PGD
PGC
Vbias
JTAG
PRG(1)
1
Vcc EN RESET Vcc EMUD2
6
EMUC2
12 V
10 H 100 F
+
Vbias
1 F
Vmot
I2C
I 2C
D
SDA SCL MC MB MA Vmot
D
Motor Vmot
AN0
REF OUT GND Vcc
6 1
5 2
4 3
LTSR 25-NP
Vcc
820 F
820 F
1 F
E
(1)
E
Poner dos jumpers para programar el microcontrolador. Quitarlos para depurar y ejecutar.
MATERIAL TOLERANCIA
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
TCM BRUSHLESS DC
ESQUEMA ELCTRICO
1 2
I.C.A.I.
3
N DE LMINA:
1
4
MATERIAL TOLERANCIA
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
TCM BRUSHLESS DC
PCB SUPERIOR
1:1
1 2
I.C.A.I.
3
N DE LMINA:
2
4
MATERIAL TOLERANCIA
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
TCM BRUSHLESS DC
PCB INFERIOR
1:1
1 2
I.C.A.I.
3
N DE LMINA:
3
4
Pistas superiores
Pistas inferiores
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
MATERIAL TOLERANCIA
TCM BRUSHLESS DC
PISTAS
F
N DE LMINA:
3:2
1 2
I.C.A.I.
3
4
4
MATERIAL TOLERANCIA
NOMBRE FECHA 19 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
TCM BRUSHLESS DC
COMPONENTES
3:2
1 2
I.C.A.I.
3
N DE LMINA:
5
4
U1ATX
U1ARX
(1)
GPS(2)
Rx GPS
Tx GPS
RS232
Tx GPS Rx GPS
En el Conector GPS I se indican los cables que hay que utilizar necesariamente para que el dispositivo funcione. En GPS II se pueden conectar los restantes de cualquier forma, puesto que no se usan en esta tarjeta. El cdigo de colores es el siguiente: - Blanco: Batera de respaldo - Negro: GND - Rojo: Vcc - Amarillo: Tx GPS - Azul: Rx GPS - Naranja: Vext antena - Gris: Generador de pulsos de 1Hz - Verde: Rx GPS alternativa
(2)
Rx GPS Tx GPS
Vcc
Estos jumpers conectan el GPS al microcontrolador. Hay que quitarlos para configurar el GPS va RS232.
Vcc 10 k
(3)
C
RESET
100 nF
D
U1ATX U1ARX Vcc EMUD2
1 2 3 4 5 6 7 8 9 10 11 12 13 14
28 27 26 25 24 23 22 21 20 19 18 17 16 15
Vcc
Poner dos jumpers para programar el microcontrolador. Quitarlos para depurar y ejecutar.
(4)
dsPIC30F3010
Colocar un solo jumper para poder conectar dispositivos del bus I2C o del SPI.
I2C/SPI
Vcc GND
I2C/SPI
I2C/SPI
I2C/SPI
100 nF
I2C(4)
PGD PGC
SPI(4)
SCK
JTAG
PRG(3)
E
Vcc
1
RESET Vcc EMUD2
6
EMUC2
MATERIAL TOLERANCIA
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
ESQUEMA ELCTRICO
1 2
I.C.A.I.
3
N DE LMINA:
6
4
MATERIAL TOLERANCIA
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
PCB SUPERIOR
1:1
1 2
I.C.A.I.
3
N DE LMINA:
7
4
MATERIAL TOLERANCIA
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
PCB INFERIOR
1:1
1 2
I.C.A.I.
3
N DE LMINA:
8
4
Pistas superiores
Pistas inferiores
MATERIAL TOLERANCIA NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
PISTAS
F
N DE LMINA:
2:1
1 2
I.C.A.I.
3
9
4
MATERIAL TOLERANCIA
NOMBRE FECHA 03 - VI - 2010 21 - VI - 2010 JAIME BOAL MARTN-LARRAURI LVARO SNCHEZ MIRALLES FIRMA:
COMPONENTES
2:1
1 2
I.C.A.I.
3
N DE LMINA:
10
4
DOCUMENTO III
TML
PLIEGO DE CONDICIONES
ndice
1. Condiciones generales y econmicas 1.1. Condiciones generales . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Condiciones econmicas . . . . . . . . . . . . . . . . . . . . . . . . 2. Condiciones tcnicas y particulares 2.1. Equipo informtico . . . . . . . 2.2. Placas de circuito impreso . . . . 2.2.1. Soporte . . . . . . . . . . . 2.2.2. Pistas . . . . . . . . . . . . 2.3. Normas de calidad . . . . . . . . 2.4. Normas de seguridad e higiene . 2.5. Vida til del producto . . . . . . 2.6. Otros criterios . . . . . . . . . . 3 3 4 5 5 5 5 6 6 7 7 7
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Las condiciones y clusulas que se establecen en este documento son de obligado cumplimiento por las partes contratantes. I. Tanto el suministrador como el cliente se comprometen desde la fecha de la rma del contrato a llevar a cabo lo que se estipule. II. Ante cualquier reclamacin o discrepancia en lo concerniente al cumplimiento de lo pactado por cualquiera de las partes, una vez agotada toda va de entendimiento, se tramitar el asunto por la va de lo legal. El dictamen o sentencia ser acatado por ambas partes. III. Al rmarse el contrato, el suministrador se compromete a facilitar toda la informacin necesaria para la instalacin y buen funcionamiento del sistema, siempre que se le requiera para ello. IV. Asimismo, el comprador queda obligado a explicar al fabricante todas las caractersticas distintivas del sistema en que se va a implantar, con el objeto de facilitar su instalacin, quedando el proveedor libre de responsabilidades sobre cualquier deciencia que surja por el incumplimiento de dicha obligacin. V. El plazo de entrega ser de tres meses, a partir de la fecha de la rma del contrato, pudiendo ampliarse en un mes. Cualquier modicacin de los plazos deber contar con el acuerdo de las dos partes. VI. En caso de retrasos imputables al suministrador, se considerar una indemnizacin del 1 % del valor estipulado por semana de retraso.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
VII. Existir un plazo de garanta de un ao a partir de la entrega del sistema. Dicha garanta quedar sin efecto si se demostrase que el sistema ha estado sometido a manipulacin o uso indebido. VIII. Cumplido dicho plazo de garanta, el suministrador queda obligado a la reparacin del sistema durante un plazo de cinco aos, fuera del cual quedar a su propio criterio atender la peticin del cliente. IX. El suministrador no tendr en ningn momento obligacin alguna frente a desperfectos o averas ocasionadas por un uso indebido por parte de personas no autorizadas.
1.2.
Condiciones econmicas
I. Los precios indicados en este proyecto son rmes y sin revisin bajo ningn concepto, siempre y cuando se acepten dentro del periodo de validez del presupuesto que se ja hasta diciembre de 2010. II. El pago se realizara como sigue: 75 % a la rma del contrato 25 % en el momento de la entrega III. La forma de pago ser al contado mediante cheque nominativo o transferencia bancaria. En ningn caso se aceptarn letras de cambio. IV. El suministrador se har cargo de los gastos de embalaje y de transporte dentro de la ciudad donde se encuentre la instalacin. Si es necesario realizar un transporte interurbano, el gasto correr por cuenta del cliente. En todo caso, el responsable de los posibles desperfectos ocasionados durante el transporte ser el proveedor. V. Durante el plazo de garanta, la totalidad de los gastos originados por las reparaciones corrern por cuenta del suministrador. VI. Fuera de dicho plazo y durante los siguientes cinco aos, los costes sern jados mediante acuerdo por ambas partes. Pasado ese tiempo, los jar exclusivamente el suministrador.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
I. El equipo informtico deber estar homologado conforme a las reglamentaciones europea y espaola vigentes a fecha de junio de 2010. II. El lugar de instalacin del equipo deber ajustarse a los niveles de temperatura y humedad indicados por el fabricante. III. Los programas informticos empleados contarn con la licencia preceptiva y se cumplir con los trminos de la misma. En caso de usar programas con licencia GNU, se debern respetar sus condiciones.
2.2.
2.2.1.
El soporte aislante utilizado en las placas de circuito impreso ser de bra de vidrio de un espesor normalizado de 1,6 mm. Se recomienda que cumpla, como mnimo, las caractersticas de la Tabla 1. Resistividad supercial (M) 2105 Resistividad volumtrica (Mcm2 /cm) 8107 Constante dielctrica a 1 MHz 4,7 Factor de disipacin dielctrica a 1 MHz 0,25 Temperatura mxima de trabajo 125 o C Temperatura mxima de soldadura (20 s) 260 o C Tabla 1. Caractersticas mnimas recomendadas para la bra de vidrio del soporte de una placa de circuito impreso
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Las placas sern de una o dos caras y se fabricarn por el mtodo sustractivo basado en mscaras. Debern ir acompaadas de un esquema que indique los taladros que hay que realizar, as como la ubicacin exacta de los componentes.
2.2.2.
Pistas
El diseo se realizar atenindose a las recomendaciones para equipos de alta frecuencia y de telecomunicaciones que dicta la normativa europea en cuanto a: Compatibilidad electromagntica (89/36/EEC) Niveles de tensin (73/23/EEC) Asimismo, las pistas de cobre electroltico se trazarn siguiendo el estndar ANSI IPC-2221, que establece su ancho en milipulgadas en funcin de la siguiente ecuacin: I (k T k2 ) k3 Ancho = 1 1, 378 L donde: I: Corriente mxima soportada [A] T : Incremento de temperatura mximo permitido [o C] L: Espesor de cobre [oz/ft2 ]1
1
(1)
Coeciente k1 k2 k3
2.3.
Normas de calidad
Los sistemas se disearn de forma que cumplan las normas UNE, CEI y EN aplicables a este tipo de productos, as como las normas ETSI (European Telecommunications Standards Institute) para sistemas de radiofrecuencia.
1 oz/ft2 equivale a 35 m.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
2.4.
2.5.
Los sistemas debern tener una vida til no inferior a diez aos en funcionamiento continuo.
2.6.
Otros criterios
Los circuitos electrnicos se disearn empleando componentes normalizados siempre que sea posible.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
TML
DOCUMENTO IV
PRESUPUESTO
ndice
1. Mediciones 1.1. Componentes principales 1.2. TCM Brushless DC . . . 1.3. Tarjeta GPS I2 C/SPI Hub 1.4. Equipo y herramientas . 1.5. Software . . . . . . . . . 1.6. Mano de obra directa . . 2. Precios unitarios 2.1. Componentes principales 2.2. TCM Brushless DC . . . 2.3. Tarjeta GPS I2 C/SPI Hub 2.4. Equipo y herramientas . 2.5. Software . . . . . . . . . 2.6. Mano de obra directa . . 3. Sumas parciales 3.1. Componentes principales 3.2. TCM Brushless DC . . . 3.3. Tarjeta GPS I2 C/SPI Hub 3.4. Equipo y herramientas . 3.5. Software . . . . . . . . . 3.6. Mano de obra directa . . 4. Presupuesto general 3 3 4 4 5 5 5 6 6 7 7 8 8 8 9 9 10 11 11 12 12 13
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
Captulo 1 Mediciones
En este captulo se recogen las unidades de los componentes y equipos utilizados, as como las horas imputables al proyecto, divididas en varias partidas diferentes.
1.1.
Componentes principales
Componentes Plataforma recongurable de aluminio Tarjeta de Control de Sensores v3.0 (TCS3) Servo Hitec HSR 5990TG Servo Futaba S-3001 Motor Maxon EC-powermax 30 100 W con reductora 86:1 Ruedas de 120 mm de dimetro Mdulo Wi-Fi Digi Connect Wi-ME Batera Li-Po Kokam SLPB 11043140H 18,5 V 4.800 mAh Regulador de tensin basado en MC33167 40 V/5-12 V Interruptor de 16 A Fusible de 16 A Portafusibles Cable RS-232 Cable de cobre de 4 mm2 Cantidad 1 1 2 4 4 4 1 2 1 1 1 1 1 4m
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
1.2.
TCM Brushless DC
En la siguiente tabla se muestran las cantidades necesarias para fabricar una unidad de la tarjeta TCM Brushless DC. Tngase en cuenta que se requieren cuatro. Componentes PCB Puente de MOSFET MSK 4400U 10 A 75 V Microcontrolador dsPIC30F03010 Sensor de corriente LTSR 25-NP Terminal para PCB vertical 5 mm Conector JST B5B-EH-A Conector doble macho 2,54 mm Conector triple macho 2,54 mm Pines macho 2,54 mm Pulsador Bobina de ltrado doble RD 6 A 25 mH Bobina tipo BC axial 10 H 680 mA Condensador electroltico 100 F 25 V Condensador electroltico 820 F 63 V Condensador de papel 100 nF Condensador de papel 470 nF Condensador de papel 1 F Resistencia 5,6 k Resistencia 10 k Cantidad 1 1 1 1 11 1 1 2 17 1 1 1 1 2 1 1 2 1 1
1.3.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
1.4.
Equipo y herramientas
Cantidad 1 2 1 1 1 1 1 1 Horas de proyecto 400 150 200 30 20 20 15 40 Horas de uso al ao 1.600 300 400 300 450 500 250 1.250
Elemento Ordenador Programador MPLAB ICD3 Fuente de alimentacin 30 VDC 5 A Osciloscopio de 4 canales Polmetro Soldador Desoldador Destornillador, alicates y otras herramientas
1.5.
Software
Cantidad 1 2 1 1 1 1 Horas de proyecto 150 250 120 100 100 100 Horas de uso al ao 250 500 1.000 500 500 500
Programa Eagle Layout Editor v4.09r2 MPLAB IDE v8.50 Microsoft Visual Studio 2008 A MikTeX 2.7 (Distribucin de LTEX) TeXnicCenter v1.0 SumatraPDF
1.6.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
2.1.
Componentes principales
Precio (e/ud.) 200,00 100,00 104,52 14,00 857,03 34,76 127,60 304,23 55,00 2,44 0,46 4,21 3,25 3,00
Componentes Plataforma recongurable de aluminio Tarjeta de Control de Sensores v3.0 (TCS3) Servo Hitec HSR 5990TG Servo Futaba S-3001 Motor Maxon EC-powermax 30 100 W con reductora 86:1 Ruedas de 120 mm de dimetro Mdulo Wi-Fi Digi Connect Wi-ME Batera Li-Po Kokam SLPB 11043140H 18,5 V 4.800 mAh Regulador de tensin basado en MC33167 40 V/5-12 V Interruptor de 16 A Fusible de 16 A Portafusibles Cable RS-232 Cable de cobre de 4 mm2
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
2.2.
TCM Brushless DC
Componentes PCB Puente de MOSFET MSK 4400U 10 A 75 V Microcontrolador dsPIC30F03010 Sensor de corriente LTSR 25-NP Terminal para PCB vertical 5 mm Conector JST B5B-EH-A Conector doble macho 2,54 mm Conector triple macho 2,54 mm Pines macho 2,54 mm Pulsador Bobina de ltrado doble RD 6 A 25 mH Bobina tipo BC axial 10 H 680 mA Condensador electroltico 100 F 25 V Condensador electroltico 820 F 63 V Condensador de papel 100 nF Condensador de papel 470 nF Condensador de papel 1 F Resistencia 5,6 k Resistencia 10 k Precio (e/ud.) 2,11 74,30 5,79 13,49 0,085 0,051 0,0032 0,0043 0,0053 1,02 44,40 0,259 0,012 0,348 0,0107 0,062 0,092 0,0035 0,0035
2.3.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
2.4.
Equipo y herramientas
Elemento Ordenador Programador MPLAB ICD3 Fuente de alimentacin 30 VDC 5 A Osciloscopio de 4 canales Polmetro Soldador Desoldador Destornillador, alicates y otras herramientas Precio (e/ud.) 799,00 154,60 219,90 1.580,00 45,00 35,00 35,00 80,00
2.5.
Software
Programa Precio (e/ud.)
Eagle Layout Editor v4.09r2 Versin de libre distribucin MPLAB IDE v8.50 Versin de libre distribucin Microsoft Visual Studio 2008 275,95 A MikTeX 2.7 (Distribucin de LTEX) Software libre TeXnicCenter v1.0 Software libre SumatraPDF Software libre
2.6.
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
3.1.
Componentes principales
Cantidad 1 1 2 4 4 4 1 2 1 1 1 1 1 4m Precio (e/ud.) 200,00 100,00 104,52 14,00 857,03 34,76 127,60 304,23 55,00 2,44 0,46 4,21 3,25 3,00 TOTAL Coste total (e) 200,00 100,00 209,04 56,00 3.428,12 139,04 127,60 608,46 55,00 2,44 0,46 4,21 3,25 12,00 4.945,62
Componentes Plataforma recongurable Tarjeta de Control de Sensores v3.0 Servo Hitec HSR 5990TG Servo Futaba S-3001 Motor Maxon EC-powermax 30 Ruedas de 120 mm de dimetro Mdulo Wi-Fi Digi Connect Wi-ME Batera Li-Po Kokam Regulador de tensin Interruptor de 16 A Fusible de 16 A Portafusibles Cable RS-232 Cable de cobre de 4 mm2
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
3.2.
TCM Brushless DC
Cantidad 1 1 1 1 11 1 1 2 17 1 1 1 1 2 1 1 2 1 1 Precio (e/ud.) 2,11 74,30 5,79 13,49 0,085 0,051 0,0032 0,0043 0,0053 1,02 44,40 0,259 0,012 0,348 0,0107 0,062 0,092 0,0035 0,0035 Coste total (e) 2,11 74,30 5,79 13,49 0,935 0,051 0,0032 0,0086 0,0901 1,02 44,40 0,259 0,012 0,696 0,0107 0,062 0,184 0,0035 0,0035 143,43 573,71
Componentes PCB Puente de MOSFET MSK 4400U Microcontrolador dsPIC30F03010 Sensor de corriente LTSR 25-NP Terminal para PCB vertical 5 mm Conector JST B5B-EH-A Conector doble macho 2,54 mm Conector triple macho 2,54 mm Pines macho 2,54 mm Pulsador Bobina de ltrado doble 6 A 25 mH Bobina tipo BC axial 10 H 680 mA Condensador electroltico 100 F Condensador electroltico 820 F Condensador de papel 100 nF Condensador de papel 470 nF Condensador de papel 1 F Resistencia 5,6 k Resistencia 10 k
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
10
3.3.
Componentes PCB Garmin GPS 15L Microcontrolador dsPIC30F3010 Conector JST B4B-EH-A Conector triple macho 2,54 mm Pines macho 2,54 mm Pulsador Condensador de papel 100 nF Resistencia 10 k
3.4.
Equipo y herramientas
Para calcular el coste imputable del equipo y las herramientas, se ha supuesto un tiempo de amortizacin tpico de 4 aos y se ha repartido de forma alcuota en funcin del nmero de horas empleadas. Elemento Uds. Horas de Horas proyecto por ao 400 150 200 30 20 20 15 40 1.600 300 400 300 450 500 250 1.250 Precio (e/ud.) 799,00 154,60 219,90 1.580,00 45,00 35,00 35,00 80,00 Amortizacin anual 25 % 25 % 25 % 25 % 25 % 25 % 25 % 25 % TOTAL Coste (e) 49,94 38,65 27,49 39,50 0,50 0,35 0,53 0,64 157,59
Ordenador MPLAB ICD3 Fte. alimentacin Osciloscopio Polmetro Soldador Desoldador Herramientas
1 2 1 1 1 1 1 1
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
11
3.5.
Software
El software se suele amortizar en 5 aos y, dado que el nico programa con licencia es el Microsoft Visual Studio 2008 resulta: Programa Uds. Horas de Horas proyecto por ao 120 1.000 Precio (e/ud.) 275,95 Amortizacin anual 20 % TOTAL Coste (e) 6,62 6,62
3.6.
Actividad Diseo de las tarjetas Montaje de las tarjetas Programacin Implementacin del hardware Pruebas y solucin de problemas Documentacin del proyecto
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
12
Desarrollo de un robot 4x4 para la navegacin por terrenos agrestes Jaime Boal Martn-Larrauri
13