Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware...

35
Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 12 - 4 Plataforma y Hardware 4.1 Introducción A continuación se describen todos los componentes utilizados en el proyecto, tanto los de nueva adquisición, como de los que ya se disponía al inicio. En algunos casos se incluirán ensayos y test ad-hoc realizados para conocer características y comportamientos de algunos de ellos no incluidas en las hojas de datos. El orden escogido se debe únicamente a favorecer la comprensión de algunos conceptos que, explicándose en algún componente, vuelven a ser utilizados en la explicación de algún otro más adelante. En la tabla 4.0 se incluye un resumen de los modelos de aquellos componentes utilizados que se hayan adquirido comercialmente, ya sea para este proyecto o que se dispusiera de ellos con anterioridad. DISPOSITIVO MODELO Motores EMG-30 Unidad Microcontroladora Arduino Mega 2560 Unidad de Medidas Inerciales MPU6050 Controladoras de Motores TB6612FNG Batería Li-Po 1300mAh Módulo Bluetooth HC-06 Sensores Intensidad ACS712 Tabla 4.0: Componentes Comerciales 4.2 Chasis Se trata de la plataforma en sí, de la que en parte ya se disponía al inicio del proyecto. Es la estructura sobre la que se monta el resto de componentes y que soporta el peso de los mismos y de la carga añadida, si la hubiera. Consiste únicamente en un marco realizado mediante el plegado de una pletina de aluminio de 4 cm de anchura y 2 mm de espesor. Este marco a su vez está rigidizado por dos fragmentos de madera con forma de prisma rectangular, de 7.8x3.5 cm de superficie cada uno y 14mm de espesor. El elemento de unión de estos fragmentos con el marco consiste en 4 tornillos de rosca madera por cada fragmento.

Transcript of Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware...

Page 1: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 12 -

4 Plataforma y Hardware

4.1 Introducción

A continuación se describen todos los componentes utilizados en el proyecto, tanto los de nueva adquisición, como de los que ya se disponía al inicio. En algunos casos se incluirán ensayos y test ad-hoc realizados para conocer características y comportamientos de algunos de ellos no incluidas en las hojas de datos. El orden escogido se debe únicamente a favorecer la comprensión de algunos conceptos que, explicándose en algún componente, vuelven a ser utilizados en la explicación de algún otro más adelante.

En la tabla 4.0 se incluye un resumen de los modelos de aquellos componentes utilizados que se hayan adquirido comercialmente, ya sea para este proyecto o que se dispusiera de ellos con anterioridad.

DISPOSITIVO MODELO

Motores EMG-30

Unidad Microcontroladora Arduino Mega 2560

Unidad de Medidas Inerciales MPU6050

Controladoras de Motores TB6612FNG

Batería Li-Po 1300mAh

Módulo Bluetooth HC-06

Sensores Intensidad ACS712

Tabla 4.0: Componentes Comerciales

4.2 Chasis

Se trata de la plataforma en sí, de la que en parte ya se disponía al inicio del proyecto. Es la estructura sobre la que se monta el resto de componentes y que soporta el peso de los mismos y de la carga añadida, si la hubiera. Consiste únicamente en un marco realizado mediante el plegado de una pletina de aluminio de 4 cm de anchura y 2 mm de espesor.

Este marco a su vez está rigidizado por dos fragmentos de madera con forma de prisma rectangular, de 7.8x3.5 cm de superficie cada uno y 14mm de espesor. El elemento de unión de estos fragmentos con el marco consiste en 4 tornillos de rosca madera por cada fragmento.

Page 2: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 13 -

Asimismo existe una chapa de aluminio que sirve de “tapa”, formando un compartimento donde se aloja principalmente la placa Arduino, como ya se comentará más adelante. Esta chapa se encuentra fijada mediante cuatro tornillos a los fragmentos de madera ya comentados. En la versión inicial experimental, sobre esta chapa se atornilla, por un lado, la placa de prototipos sobre la que se sueldan las pequeñas placas “drivers” de los motores; y por el otro la placa Arduino, quedando ésta dentro del compartimento anteriormente comentado.

Los motores quedan alojados en la parte inferior de la estructura, dentro del marco y fijados a éste por un par de tornillos cada uno. Existe un par de orificios practicados en el marco para permitir que el eje de cada motor salga al exterior para poder acoplarles las ruedas.

Además de la estructura comentada que ya se tenía, se ha instalado una placa rectangular de metacrilato transparente en la parte superior de la estructura. Esta placa tiene unas dimensiones de 15.5x21 cm y 2.5 mm de espesor. La fijación de la misma se realiza mediante 4 tornillos a la madera superior. Su finalidad principal consiste en servir de “tope” y de esta forma proteger al resto de electrónica y componentes frente a las posibles caídas del vehículo. Para esta labor además se ha instalado en sus aristas correspondientes una gomaespuma que absorbe los impactos de las posibles caídas con mayor suavidad.

Esta placa superior, además de servir para protección también es el elemento que soporta la batería de polímero de litio que alimenta al conjunto. Por otra parte tiene practicados numerosos orificios con el fin de servir para la fijación de más componentes, en caso de que los hubiera, tales como contrapesos o de otro tipo. Además, su parte superior constituye una superficie lisa que sirve para depositar la carga que se desee transportar para diferentes ensayos.

Por último es necesario comentar que la IMU (unidad de medidas inerciales) se encuentra fijada a la madera inferior, sujetándose el trozo de placa sobre la que se encuentra soldada mediante un tornillo de rosca madera. Esta posición fue escogida estratégicamente, decisión que se comentará en el apartado correspondiente. Temporalmente en el montaje experimental también se encuentra fijado al mismo fragmento de madera mediante cinta adhesiva el módulo bluetooth, pero se colocará posteriormente en otro lugar en la versión final.

Figura 4.1: Imagen del vehículo en su última versión, faltando únicamente sustituir el cableado por la nueva PCB shield.

Page 3: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 14 -

4.3 Motores

Como anteriormente se ha comentado, se han utilizado 2 motores y 2 de las que ya se disponía a la fecha de inicio de este proyecto, por lo que la elección del mismo no ha correspondido a este proyecto. Una fotografía del motor puede verse en la figura 4.2.

Figura 4.2: Motor EMG-30

Se trata de dos motores de corriente continua de la marca Devantech, con denominación EMG-30, que funcionan a una tensión nominal de 12V. El motor tiene incorporada una caja reductora de velocidad con una reducción de 30:1 y unos encoders de cuadratura con sensores de tipo efecto hall que se detallarán más adelante, y que permiten conocer la velocidad de giro del motor.

Las principales características de este motor son:

Tensión nominal: 12V

Par nominal: 1.5 Kg/cm

Velocidad nominal: 170 rpm

Intensidad nominal: 530 mA

Velocidad en vacío: 216 rpm

Intensidad en vacío: 150 mA

Intensidad de frenado: 2.5 A

Potencia de salida nominal: 4.22 W

El encoder angular se encuentra situado en la salida del motor (antes de la reductora) por lo que se consigue una mejora en la resolución de pulsos por vuelta de eje de salida tras la reductora (360 pulsos por vuelta de eje de salida). El motor cuenta con un conector de tipo JST de 6 vías que incluye la alimentación del motor, de los sensores (de los encoders) y la señal de salida de éstos.

Con el fin de filtrar el ruido y los parásitos generados por el motor al girar en la señal de los encoders, el motor tiene incorporados condensadores internos de filtro. Además el fabricante hace notar que se necesitan resistencias pull-up para las salidas de los sensores hall.

Las resistencias pull-up y pull-down no son más que resistencias dispuestas en una configuración determinada que fuerzan el estado lógico a nivel alto o bajo, con el fin de evitar falsos estados producidos por ruido eléctrico si se dejara una entrada con un valor indeterminado. Por ejemplo, el nivel lógico 1 podría quedar con un valor de tensión intermedio entre cero y uno y confundirse su estado.

En este proyecto, si no se utilizaran resistencias de pull-up, el microcontrolador podría malinterpretar ruidos y confundirlos con un pulso de encoder. Aunque aquí las resistencias pull-up utilizadas se activan por código, pues se utilizan unas resistencias internas que implementa el microcontrolador, sin tener que utilizar ningunas externas. Esto se detallará más adelante.

Page 4: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 15 -

En cuanto a la característica geométrica del eje de salida, el motor tiene un eje de salida en forma de D con un diámetro de 5mm.

El fabricante también vende este motor en un kit junto con unas ruedas de 100mm y una placa controladora con designación MD23. Esta placa digital tiene capacidad para controlar los dos motores simultáneamente y cuenta con un microcontrolador que se encarga de, mediante diferentes registros de memoria, permitir conocer digitalmente la velocidad procedente de los encoders, realizar un control de la misma, leer la corriente consumida por cada motor, calcular la aceleración, etc. Pero este dispositivo no se ha considerado para este proyecto porque representa un alto coste comparado con la placa que finalmente se ha decidido utilizar.

4.3.1 Zona Muerta

Puesto que este efecto conforma una desventaja con la que hay que lidiar y que prever a la hora de utilizar y modelar sistemas de control usando motores eléctricos, en este apartado se tratará el fenómeno de la zona muerta.

En los motores hay dos tipos de fricción que deben considerarse. La fricción estática se opone al movimiento inicial desde el reposo. Si el motor proporciona suficiente par para iniciar el giro libremente, el motor comienza a girar y entra en juego la fricción cinética que ejerce un par resistente de fricción más o menos constante.

La figura 4.3 muestra un ejemplo de cómo esta fricción afecta a la relación entre la tensión aplicada a un motor y la velocidad resultante. A tensiones muy bajas el par es demasiado pequeño para superar la fricción estática. La región donde la tensión aplicada no tiene efecto sobre la velocidad (no inicia el giro) se denomina Zona Muerta. Una vez que la tensión aplicada excede los límites de la zona muerta el motor comenzará a girar. Durante el giro, el motor experimenta una fricción cinética y otros efectos. Si la tensión suministrada al motor se va disminuyendo lentamente, llegará un momento en el que el motor se detenga. Sin embargo, la fuerza de frenado será menor que la fuerza de fricción estática, puesto que la fricción estática es mayor que la cinética y al decelerar el motor todavía se encuentra en movimiento. Este camino alternativo se muestra en la figura mediante una línea de trazos.

Figura 4.3: Zona muerta

En la figura 4.3 puede apreciarse que el efecto de la zona muerta no es lineal, pues presenta caminos diferentes al acelerar y decelerar. Pero normalmente se considera la simplificación de linealidad,

Page 5: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 16 -

consistente en que el motor recorre la misma línea recta tanto en aceleración como en deceleración, aunque las rectas pueden tener diferentes características en ambos sentidos de giro.

Esta aproximación a la realidad es la que se muestra en la figura 4.4, donde puede observarse que las curvas son líneas rectas y donde además se han marcado los valores de tensión Vlimfw y Vlimrw. Estos valores representan el menor valor de tensión necesario para hacer girar el motor desde el reposo en sentido hacia adelante (sentido de giro que provoca que el robot se mueva hacia adelante) y hacia atrás respectivamente.

Figura 4.4: Aproximación de zona muerta

Para encontrar estos valores se realizaron ensayos en ambos motores y en los dos sentidos. De ahora en adelante se designará como motor derecho a aquél que se encuentra en el lado derecho cuando se mira al robot, en posición vertical, desde el lado por donde se tiene acceso a la placa Arduino. El motor izquierdo será el que se encuentre en el lado izquierdo en la misma posición.

En este y en sucesivos ensayos, no se considerará la tensión suministrada al motor sino el valor PWM. Aquellas personas que hayan trabajado con microcontroladores conocen en profundidad estas siglas. PWM significa Pulse Width Modulation y consiste en una modulación por anchura de pulso. No es más que una señal cuadrada de frecuencia constante, cuya tensión eficaz depende de la anchura de pulso de esta señal. Un microcontrolador no puede emitir una tensión variable, sino que lo único que puede hacer es emitir una señal PWM, normalmente de amplitud constante 5V, en la que regula el ancho de pulso de la señal. De esta forma, al variar la anchura de pulso de la señal se consigue que el valor eficaz de la señal sea mayor o menor y así es como se consigue “virtualmente” una salida a una u otra tensión. Esta explicación puede verse gráficamente en la figura 4.5 donde se observa cómo mayores o menores anchuras de pulso resultan en una mayor o menor tensión y por tanto la lámpara emite más o menos luz.

Esta señal PWM no alimenta directamente al motor, pues por el microcontrolador no pueden pasar las grandes corrientes eléctricas que consume el motor, sino que sirve de señal de control para que la placa controladora de motor alimente a éste, aunque finalmente la señal que aquél recibe es también de tipo PWM.

Es importante aclarar que a la hora de programar para el microcontrolador, los valores que se utilizan de la señal PWM son de 0 a 255, correlacionándose éstos con aquellos valores de anchura de pulso tales que corresponden a una señal con una tensión eficaz de 0V a 5V respectivamente.

Page 6: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 17 -

Figura 4.5: Señal PWM

En la tabla 4.6 se incluyen los resultados del ensayo de la zona muerta de ambos motores en ambos sentidos. Los ensayos se realizaron en vacío (sin aplicar carga a los motores) y en carga, para lo que se dispuso el robot en posición vertical con aproximadamente el peso final del conjunto.

Motor PWMlim fw PWMlim rw

En vacío Izquierdo 17 18

Derecho 16 17

En carga Izquierdo 21 22

Derecho 22 20

Tabla 4.6: Ensayo de zona muerta de motores

Finalmente, para compensar la zona muerta en el programa de control se decidió tomar los valores de vacío con el fin de que se ajusten más a la realidad cuando el robot presente un comportamiento dinámico, pues durante éste los motores podrían no estar sometidos a la carga total. La estrategia de compensación de la zona muerta se detallará en el apartado correspondiente al software, pero se adelantará que simplemente consiste en sumar el valor PWM correspondiente a la señal procedente del controlador, teniendo en cuenta que los posibles problemas de saturación se corrigen mediante un condicional, como ya se verá.

4.3.2 Linealidad

Con el fin de comprobar si los motores presentan el comportamiento lineal que se presupone, se realizó también un ensayo para ambos motores en ambos sentidos de funcionamiento. El ensayo consiste en medir la velocidad de giro que el motor desarrolla para ciertos valores de la señal PWM, funcionando en vacío.

En las figuras 4.7 y 4.8 se pueden observar los resultados del ensayo de linealidad en sentido hacia adelante y hacia atrás respectivamente. Se comprueba que las curvas son prácticamente líneas rectas y además aproximadamente coincidentes para ambos motores. El que ambos motores presenten aproximadamente el mismo comportamiento es una grata noticia para evitar problemas de descompensación en la dinámica lateral/direccional. Las gráficas se realizaron enviando los datos de interés por el puerto serie (vía USB) y recolectándolos del Monitor Serie del IDE de Arduino para luego graficar en Matlab.

Page 7: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 18 -

Figura 4.7: Ensayo linealidad motores hacia adelante

Figura 4.8: Ensayo linealidad motores hacia atrás

0 20 40 60 80 100 120 140 160 180 200 220 2400

20

40

60

80

100

120

140

160

180

200

220

240

Vel

ocid

ad R

PM

Señal PWM [0-255]

Evolución de la velocidad hacia adelante para diferentes PWM

Motor IzquierdoMotor Derecho

0 20 40 60 80 100 120 140 160 180 200 220 2400

20

40

60

80

100

120

140

160

180

200

220

240

Vel

ocid

ad R

PM

Señal PWM [0-255]

Evolución de la velocidad hacia atrás para diferentes PWM

Motor IzquierdoMotor Derecho

Page 8: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 19 -

4.4 Ruedas

Las ruedas utilizadas han sido las que recomienda el fabricante con la designación Wheel100. Se trata de una rueda de 100mm de diámetro y una banda de rodadura de 26mm de anchura de goma. El buje consiste en un taladro ciego para el eje con un tornillo prisionero con cabeza allen para fijar el conjunto eje-rueda. Una fotografía de una de estas ruedas puede verse en la figura 4.3.

Figura 4.9: Rueda Wheel100

4.5 Unidad Microcontroladora: Arduino Mega 2560

4.5.1 Introducción

Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.

El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación basado en Processing/Wiring y el cargador de arranque que es ejecutado en la placa.

Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software tal como Adobe Flash, Processing, Max/MSP, Pure Data. Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.

Arduino puede tomar información del entorno a través de sus entradas analógicas y digitales, puede controlar luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un computador.

4.5.2 Modelos disponibles

En la tabla 4.10 se incluyen, si no todos, la mayoría de los diferentes modelos de placas Arduino que han aparecido desde su creación. Se incluyen algunas características principales. Algunos de los modelos ya se encuentran discontinuados.

Page 9: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 20 -

Modelo Microcont. Tens.

Entrada Tens.

Sistem.

Frec. de

Reloj

Digital

I/O

Entradas

Analóg PWM UART

Memoria Flash

Cargador Interfaz de Program.

Arduino Due

AT91SAM3X8E 5-12V 3,3V 84MH

z 54* 12 12 4 512Kb Due Nativa USB

Arduino Leonardo

ATmega32U4 7-12V 5V 16MH

z 20* 12 7 1 32Kb Leonardo Nativa USB

Arduino Uno - R3

ATmega328 7-12V 5V 16MH

z 14 6 6 1 32Kb Optiboot

USB via ATMega16U

2

RedBoard ATmega328 7-15V 5V 16MH

z 14 6 6 1 32Kb Optiboot

USB via FTDI

Arduino Uno SMD

(discontinuado)

ATmega328 7-12V 5V 16MH

z 14 6 6 1 32Kb Optiboot

USB via ATMega8U2

Arduino Uno

(discontinuado)

ATmega328 7-12V 5V 16MH

z 14 6 6 1 32Kb Optiboot

USB via ATMega8U2

Arduino Duemilano

ve (discontinuado)

ATmega328 7-12V 5V 16MH

z 14 6 6 1 32Kb

AtmegaBOOT

USB via FTDI

Arduino Bluetooth (discontinuado)

ATmega328 1,2-5,5V 5V 16MH

z 14 6 6 1 32Kb

AtmegaBOOT

Serial Bluetooth

Arduino Pro

3.3V/8MHz

ATmega328 3,35 -12V 3,3V 8MHz 14 6 6 1 32Kb AtmegaBO

OT

Cabecera compatible

con FTDI

Arduino Pro

5V/16MHz

ATmega328 5 - 12V 5V 16MH

z 14 6 6 1 32Kb

AtmegaBOOT

Cabecera compatible

con FTDI

Ethernet Pro

(discontinuado)

ATmega328 7-12V 5V 16MH

z 14 6 6 1 32Kb

AtmegaBOOT

Cabecera compatible

con FTDI

Arduino Mega 2560

R3

ATmega2560 7-12V 5V 16MH

z 54 16 14 4 256Kb STK500v2

USB via ATMega16U

2

Arduino Mega 2560 (discontinuado)

ATmega2560 7-12V 5V 16MH

z 54 16 14 4 256Kb STK500v2

USB via ATMega8U2

Arduino Mega

(discontinuado)

ATmega1280 7-12V 5V 16MH

z 54 16 14 4 128Kb STK500v2

USB via FTDI

Mega Pro 3.3V

ATmega2560 3,3-12V 3,3V 8MHz 54 16 14 4 256Kb STK500v2 Cabecera

compatible con FTDI

Mega Pro 5V

ATmega2560 5-12V 5V 16MH

z 54 16 14 4 256Kb STK500v2

Cabecera compatible

con FTDI

Arduino Mini 04

(discontinuado)

ATmega328 7-9V 5V 16MH

z 14 6 8 1 32Kb

AtmegaBOOT

Cabecera Serial

Page 10: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 21 -

Arduino Mini 05

ATmega328 7-9V 5V 16MH

z 14 6 8 1 32Kb

AtmegaBOOT

Cabecera Serial

Arduino Pro Mini

3.3V/8MHz

ATmega328 3,35-12V 3,3V 8MHz 14 6 6 1 32Kb AtmegaBO

OT

Cabecera compatible

con FTDI

Arduino Pro Mini

5V/16MHz

ATmega328 5 - 12V 5V 16MH

z 14 6 6 1 32Kb

AtmegaBOOT

Cabecera compatible

con FTDI

Arduino Fio ATmega328P 3,35-12V 3,3V 8MHz 14 8 6 1 32Kb AtmegaBO

OT

Cabecera compatible con FTDI o

Inalámbrica via XBee1

Mega Pro Mini 3.3V

ATmega2560 3,3-12V 3,3V 8MHz 54 16 14 4 256Kb STK500v2 Cabecera

compatible con FTDI

Pro Micro 5V/16MHz

ATmega32U4 5-12V 5V 16MH

z 12 4 5 1 32Kb DiskLoader Nativa USB

Pro Micro 3.3V/8MHz

ATmega32U4 3,35-12V 3,3V 8MHz 12 4 5 1 32Kb DiskLoader Nativa USB

LilyPad Arduino

328 Main Board

ATmega328 2,7-5,5V 3,3V 8MHz 14 6 6 1 32Kb AtmegaBO

OT

Cabecera compatible

con FTDI

LilyPad Arduino Simple Board

ATmega328 2,7-5,5V 3,3V 8MHz 9 4 5 0 32Kb AtmegaBO

OT

Cabecera compatible

con FTDI

Tabla 4.10: Modelos de placas Arduino

4.5.3 Modelo utilizado

En el presente proyecto, la unidad microcontroladora será la que se encargue de, en primer lugar, recibir todos los datos disponibles de los sensores, que son quienes proporcionan el estado actual del sistema; y en segundo lugar, realizar todos los cálculos para decidir la señal de control que tiene que enviar a los motores, para así mantener el equilibrio del sistema y cumplir los requisitos de trayectoria del piloto.

El modelo de la unidad microcontroladora utilizada es el Arduino Mega 2560. La decisión de compra y utilización de este modelo en el presente proyecto no ha correspondido al autor del mismo, sino que era una unidad de la que ya se disponía previamente. Tal y como se puede consultar en la tabla 4.10, este modelo ya se ha dejado de fabricar.

En la figura 4.11 se puede ver una imagen de este dispositivo, donde se observa la numeración de las entradas y salidas, tanto digitales como analógicas, así como el resto de pines de comunicación, de alimentación auxiliar a 3V, 5V y tierra. También puede verse el conector de alimentación del dispositivo y el conector USB con el que se carga el código desde un ordenador.

Page 11: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 22 -

Figura 4.11: Arduino Mega 2560

El Arduino Mega 2560 es una unidad microcontroladora basada en el microcontrolador ATmega2560. Tiene 54 pines de entrada/salida digital (de los cuales 15 pueden utilizarse como salidas PWM), 16 entradas analógicas, 4 UARTs (puertos series hardware), un cristal oscilador de 16 MHz, una conexión USB, un conector jack de alimentación, un conector ICSP y un botón de reset. Contiene todo lo necesario para el microcontrolador; simplemente se necesita conectarlo a un ordenador con un cable USB o alimentarlo con un adaptador AC/DC o batería para empezar. El modelo Mega es compatible con la mayoría de shields diseñadas para el Arduino Duemilanove o Diecimila. Las shields son placas de circuito impreso con diferentes componentes electrónicos, tales como sensores o transmisores inalámbricos para llevar a cabo diferentes tareas. Se conectan directamente sobre la placa arduino como un “escudo”, de ahí su nombre.

El Mega 2560 es una actualización del Arduino Mega, al que reemplaza. El Mega 2560 difiere de todas las placas precedentes en que no usa el chip driver FTDI USB –to-serial. En su lugar, incorpora el ATmega8U2 programado como un convertidor USB-to-serial.

4.5.3.1 Resumen de características:

Microcontrolador: ATmega2560

Tensión operativa: 5V

Tensión de entrada (recomendada) 7-12V

Tensión de entrada (límites) 6-20V

Pines de Entrada/Salida digitales: 54 (de los que 15 proporcionan salida PWM)

Pines de Entrada Analógica: 16

Corriente continua por Pin E/S: 40 mA

Corriente continua para el Pin 3.3V: 50 mA

Memoria Flash: 256 KB de los que 8 KB son usados por el bootloader

SRAM: 8 KB

EEPROM: 4 KB

Page 12: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 23 -

Frecuencia de Reloj: 16 MHz

4.5.3.2 Alimentación

El Arduino Mega puede ser alimentado a través de la conexión USB o con una fuente externa de potencia. La fuente de potencia se selecciona automáticamente.

La fuente externa de alimentación (no USB) puede venir de un adaptador AC/DC o una batería. El adaptador puede conectarse mediante un conector jack de 2.1mm con centro positivo. Los terminales de la batería pueden insertarse en la cabeza de los pines Gnd y Vin del conector de alimentación.

La unidad puede operar con una fuente externa de 6 a 20V. Si se suministran menos de 7V, sin embargo, el pin de 5V puede suministrar menos de cinco voltios y la placa puede ser inestable. Si se usan más de 12V, el regulador de tensión puede sobrecalentarse y dañar la placa. El rango recomendado es de 7 a 12V.

Los pines de alimentación son:

-Vin. La tensión de entrada al Arduino cuando está utilizando una fuente de alimentación externa (en lugar de los 5V procedentes de la conexión USB u otra fuente de alimentación regulada). Se puede suministrar tensión mediante este pin, o, si se está suministrando tensión por el conector jack, acceder a ella desde este pin.

-5V. Este pin entrega una tensión regulada de 5V desde el regulador de la placa. La placa puede ser alimentada desde el conector jack (7-12V), desde el conector USB (5V), o desde el pin Vin de la placa (7-12V). Al suministrar tensión por los pines de 5V o 3.3V se puentea el regulador, por lo que se puede dañar la placa, así que no se recomienda.

-3V3. Es un suministro de tensión de 3.3V generada por el regulador de la placa. La máxima corriente que soporta es 50 mA.

-GND. Pines de tierra.

4.5.3.3 Memoria

El ATmega2560 tiene 256 KB de memoria flash para almacenar código (de los cuales 8KB son utilizados para el cargador bootloader), 8KB de SRAM y 4KB de EEPROM (que puede ser leída y escrita con la librería EEPROM).

4.5.3.4 Entradas y Salidas

Cada uno de los 54 pines digitales del Mega pueden utilizarse como entrada o salida, utilizando las funciones pinMode(), digitalWrite(), y digitalRead(). Operan a 5V. Cada pin puede proporcionar o recibir un máximo de 40 mA y tiene una resistencia interna pull-up (desconectada por defecto) de 20-50 KOhm. Además, algunos pines tienen funciones especializadas:

-Serial: 0 (RX) y 1 (TX); Serial 1: 19 (RX) y 18 (TX); Serial 2: 17 (RX) y 16 (TX); Serial 3: 15 (RX) y 14 (TX). Utilizados para recibir (RX) y transmitir (TX) datos serie de tipo TTL. Los pines 0 y 1 también están conectados a los correspondientes pines del ATmega16U2 USB-to-TTL chip serial.

Page 13: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 24 -

-Interrupciones externas: 2 (interrupción 0), 3 (interrupción 1), 18 (interrupción 5), 19 (interrupción 4), y 21 (interrupción 2). Estos pines pueden ser configurados para disparar una interrupción en un valor bajo, en un flanco de subida o bajada, o en un cambio de valor. En los apartados de software se explicará en detalle cómo se crearon las interrupciones para los encoders.

-PWM: del pin 2 al 13 y de 44 al 46. Proporciona una salida PWM de 8-bit con la función analogWrite().

-SPI: pin 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Estos pines soportan comunicación SPI utilizando la librería SPI. Los pines SPI también están desviados a la cabecera ICSP, que es físicamente compatible con el UNO, Duemilanove y Diecimila.

-LED 13: Hay un LED incluido en la placa, conectado al pin digital 13. Cuando el pin está en valor HIGH (alto), el LED está encendido y cuando está en valor LOW (bajo), está apagado.

-TWI: pines 20 (SDA) y 21 (SCL). Soportan comunicación TWI utilizando la librería Wire. Estos pines no están en la misma localización que los pines TWI de la Duemilanove o Diecimila.

El Mega 2560 tiene 16 entradas analógicas (incorporan convertidores ADC), proporcionando cada una de ellas 10 bits de resolución (esto es, 1024 valores diferentes). Por defecto estas entradas miden desde tierra hasta 5V, aunque es posible cambiar el límite superior de su rango utilizando el pin AREF y la función analogReference().

Hay otro par de pines en la placa:

-AREF. Tensión de referencia para las entradas analógicas. Utilizado con la función analogReference().

-Reset. Al proporcionar un valor LOW (bajo) a este pin, se resetea el microcontrolador. Se utiliza típicamente para añadir un botón reset a las placas shields que bloquean el acceso al botón que ya trae la placa Arduino.

4.5.3.5 Comunicaciones

Arduino Mega 2560 tiene un número de facilidades para comunicarse con un ordenador, otro Arduino u otros microcontroladores. El ATmega2560 proporciona cuatro UARTs hardware para comunicación serie TTL (5V). Un ATmega8U2 en la placa canaliza uno de estos por USB y proporciona un puerto virtual "com" para el software en el ordenador (las máquinas Windows necesitan un archivo “.inf”, pero las máquinas OSX y Linux reconocen la placa como un puerto COM automáticamente). El software Arduino incluye un monitor serie que permite enviar datos tipo texto simple desde y hacia la placa. Los LEDs RX y TX de la placa destellan cuando se transmiten datos por el ATmega8U2 y la conexión USB al ordenador (pero no para la comunicación serie de los pines 0 y 1).

Una librería software de Serie permite las comunicaciones serie en cualquiera de los pines digitales del Mega2560. Como ya se ha dicho, el ATmega2560 también soporta comunicación TWI y SPI

4.5.3.6 Programación

Arduino Mega puede ser programado con el software IDE de Arduino.

El ATmega2560 del Arduino Mega viene pregrabado con un bootloader que permite cargar nuevo código en la placa sin el uso de un programador hardware externo. Se comunica utilizando el protocolo original STK500.

También se puede saltar el bootloader y programar el microcontrolador a través de la cabecera ICSP (In-Circuit Serial Programming).

Page 14: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 25 -

4.5.3.7 Protección de USB Frente a Sobrecargas

Arduino Mega 2560 tiene un polifusible reseteable que protege los puertos USB de los ordenadores de cortocircuitos y sobrecargas de corriente. Aunque la mayoría de ordenadores incluyen su propia protección interna, este fusible proporciona una capa extra de protección. Si se aplican más de 500 mA al puerto USB, el fusible cortará automáticamente la conexión hasta que el cortocircuito o sobrecarga desaparezca.

4.5.4 Utilización en el proyecto

A modo de ejemplo se detalla el número de pines que han sido necesarios utilizar en este proyecto para cada tarea. Si bien el número de pines utilizados no es elevado, razón por la que se suele elegir el Arduino Mega 2560, la utilización de esta unidad ha sido beneficiosa por la necesidad de utilizar interrupciones externas para los encoders (se detallarán más adelante), no estando esta característica incluida en todos los modelos.

Pines PWM (para motores): 9 y 7.

Pines interrupciones (encoders): 2, 3, 18, 19.

Pines comunicación I2C: 20 y 21.

Pines comunicación serie (bluetooth): 1 y 0.

Pines alimentación auxiliar: 3V3, 5V, GND.

Pines salidas digitales (para motores): 40, 41, 42, 43.

A excepción de los pines de salidas digitales, el resto de numeraciones no ha sido elegido de forma arbitraria, sino que se debe a una razón concreta. Normalmente se ha debido a que la función que permite desempeñar ese pin específico es diferente a la de otros aparentemente iguales. O también porque la función que desempeña un pin específico es más configurable que otros. Todo esto se detallará en cada sección correspondiente.

4.6 Unidad de Medidas Inerciales: IMU

Con el fin de obtener la información del mundo exterior que permitirá conocer al robot su inclinación y su velocidad angular, se decidió utilizar una Unidad de Medidas Inerciales IMU, que integra tres acelerómetros y tres giróscopos.

Figura 4.12: Vista frontal MPU6050

Page 15: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 26 -

La unidad escogida es la MPU6050, del fabricante InvenSense. Concretamente se trata de una versión montada sobre una pequeña placa de circuito impreso, que integra todos los componentes electrónicos auxiliares necesarios, para únicamente tener que conectarla externamente y utilizarla directamente con Arduino. Una imagen del frontal de este módulo puede verse en la figura 4.12. La parte trasera puede verse en la figura 4.13.

Figura 4.13: Vista trasera MPU6050

En realidad, la IMU en sí es el pequeño circuito integrado que se ve en la parte central. El resto de componentes (resistencias, condensadores, reguladores…) facilitan la utilización de este módulo con un microcontrolador cualquiera que soporte comunicaciones digitales I2C.

Como ya se ha indicado implícitamente, esta IMU entrega los datos de forma digital. Se trata de una IMU que integra 3 giróscopos y 3 acelerómetros microelectromecánicos, y por tanto puede proporcionar información inercial en 6 grados de libertad.

La elección de este dispositivo se hizo principalmente por motivos económicos, pues proporciona unas capacidades muy avanzadas con un coste muy reducido, mucho más que otros dispositivos con menos prestaciones. En cualquier caso para este proyecto sólo se utilizarán dos acelerómetros y un giróscopo, pues se trata de un péndulo 2D, donde la información necesaria es el ángulo de inclinación en un solo plano del espacio y la velocidad angular del aparato.

Dos de los acelerómetros, el del eje “z” y el del eje “x”, proporcionarán la componente de aceleración correspondiente a la gravedad en cada eje. Puede parecer que las aceleraciones del aparato en su comportamiento dinámico afectarían mucho a esta medida, pero no es así, pues siempre serán menores que la gravedad. Aunque es cierto que introducirán ruidos en la medida que serán posteriormente filtrados haciendo uso de la información del giróscopo en el eje “y”, utilizando un Filtro de Kalman.

Teniendo la componente de la gravedad en cada eje se obtendrá el ángulo de inclinación del sistema mediante trigonometría. Todos estos cálculos para la obtención del ángulo, así como la utilización y fundamentos del Filtro de Kalman se detallarán en el correspondiente apartado dentro de la sección de software.

4.6.1 Descripción del Fabricante

La Unidad MPU6050 Motion Processing Unit es la primera solución de procesamiento de movimiento del mundo con un sensor integrado, de 6 ejes, utilizando el motor MotionFusion™ para dispositivos de mano, tablets, mandos de juegos, controles remotos con punteros móviles, y otros dispositivos personales. La MPU6050 tiene un giróscopo MEMS de 3 ejes, un acelerómetro MEMS de 3 ejes y un procesador digital de movimiento (DMP™) con un puerto auxiliar I2C que proporciona una interfaz para

Page 16: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 27 -

sensores digitales de terceros, tales como magnetómetros. Cuando se conecta a un magnetómetro de 3 ejes, la MPU6050 entrega una salida completa de 9 ejes hacia su puerto primario I2C. La MPU6050 combina el movimiento lineal y rotacional además de la información de dirección en un único flujo de datos para la aplicación. La tecnología de integración MotionProcessing™ proporciona un menor tamaño y tiene inherentes ventajas de coste comparado con el uso de soluciones con giróscopos y acelerómetros discretos. La MPU6050 también está diseñada para interactuar con múltiples sensores no inerciales, como sensores de presión, mediante su puerto auxiliar I2C.

La MPU6050 incluye tres convertidores analógico-digitales (ADCs) de 16-bit para digitalizar las salidas de los giróscopos y tres ADCs de 16-bit para digitalizar las salidas de los acelerómetros. Para el rastreo preciso de ambos movimientos, rápidos y lentos, se permite la programación por el usuario del rango que abarca el giróscopo con posibilidades de ±250, ±500, ±1000, y ±2000 °/s (grados por segundo), así como para el acelerómetro con rangos de ±2g, ±4g, ±8g, y ±16g.

Un búfer FIFO de 1024 Bytes integrado en el chip ayuda a reducir el consumo de potencia del sistema, permitiendo al procesador leer los datos del sensor por tandas, y posteriormente entrar en un modo de bajo consumo mientras la MPU colecta más datos.

La comunicación con todos los registros del dispositivo se lleva a cabo usando I2C a 400KHz. Otras características adicionales incluyen un sensor de temperatura integrado y un oscilador con una variación de ±1% sobre el rango de temperaturas de operación.

El dispositivo tolera robustamente impactos con aceleraciones de hasta 10000g, y unos filtros programables paso-bajo para los giróscopos, acelerómetros y el sensor de temperatura.

Para mayor flexibilidad en cuanto a la alimentación de potencia, la MPU6050 opera desde un rango de alimentación de potencia VDD de 2.375V-3.45V. Adicionalmente proporciona un pin de referencia VLOGIC (en adición a su pin de suministro analógico VDD), que configura los niveles lógicos de su interfaz I2C. La tensión VLOGIC puede ser 1.8V±5% o VDD.

Tal y como se puede leer en la anterior información del fabricante, este dispositivo incluye un procesador interno de señal, que permitiría en un principio realizar los cálculos para entregar directamente el valor de los ángulos correspondientes a su posición. Sin embargo es importante destacar que el fabricante no proporciona, ni en las datasheets, ni por ningún otro medio, el código o indicaciones para poder utilizar este procesador, al menos para usuarios que hayan adquirido este dispositivo de forma independiente. Se presupone que sí se lo facilita a aquellos grandes clientes con los que formalice algún contrato de adquisición para grandes lotes.

Por ello se decidió utilizar únicamente los datos que permiten obtener los registros, y algunas configuraciones sencillas. Como algo positivo cabe destacar que el fabricante sí proporciona un documento con el mapa del registro del dispositivo, de manera que si se llega a conseguir una comunicación I2C con éxito, sólo hay que acceder a las correspondientes direcciones del registro para obtener los datos de interés y configurarlo como se desee. El registro se detallará más adelante.

4.6.2 Características de los Acelerómetros

Los acelerómetros en 3 ejes de tipo MEMS de la MPU6050 incluyen un amplio rango de características:

Salida digital de acelerómetros en tres ejes con escala completa y rango programable

de ±2g, ±4g, ±8g y ±16g.

Los convertidores ADCs integrados de 16-bit permiten un muestreo simultáneo de los

acelerómetros sin requerir un multiplexor externo.

Corriente de operación normal de los acelerómetros: 500μA.

Page 17: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 28 -

Corriente del acelerómetro en modo de baja potencia: 10μA a 1.25Hz, 20μA a 5Hz,

60μA a 20Hz, 110μA a 40Hz.

Detección de orientación y señalamiento.

Detección de golpeo.

Interrupciones programables por el usuario.

Interrupción de caída libre.

Interrupción de alta aceleración.

Interrupción de reposo.

Auto test para el usuario.

En la tabla 4.14 se incluyen, en inglés, las especificaciones detalladas de los acelerómetros. Se puede observar cómo la mayor sensibilidad se consigue para el menor rango de aceleraciones medibles. En este caso, como la aceleración que se pretende medir es la de la gravedad, es suficiente con el menor de los rangos, esto es, ±2g. De esta manera se consigue la mayor sensibilidad, con un valor de 16384 bits por cada g. La forma de seleccionar estas configuraciones en las diferentes direcciones del registro y todas las que se realizan se detallará en el apartado de software.

PARAMETER CONDITIONS MIN TYP MAX UNITS

ACCELEROMETER SENSITIVITY

Full-Scale Range

ADC Word Length

Sensitivity Scale Factor

Initial Calibration Tolerance

Sensitivity Change vs. Temperature

Nonlinearity

Cross-Axis Sensitivity

AFS_SEL=0

AFS_SEL=1

AFS_SEL=2

AFS_SEL=3

Output in two’s complement format

AFS_SEL=0

AFS_SEL=1

AFS_SEL=2

AFS_SEL=3

AFS_SEL=0, -40°C to +85°C

Best Fit Straight Line

±2

±4

±8

±16g

16

16,384

8,192

4,096

2,048

±3

±0.02

0.5

±2

g

g

g

g

bits

LSB/g

LSB/g

LSB/g

LSB/g

%

%/°C

%

%

ZERO-G OUTPUT

Initial Calibration Tolerance

Zero-G Level Change vs. Temperature

X and Y axes

Z axis

X and Y axes, 0°C to +70°C

Z axis, 0°C to +70°C

±50

±80

±35

±60

mg

mg

mg

mg

SELF TEST RESPONSE 300 950 mg

NOISE PERFORMANCE

Power Spectral Density

@10Hz, AFS_SEL=0 & ODR=1kHz

400 µg/√Hz

Page 18: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 29 -

LOW PASS FILTER RESPONSE

Programmable Range

5

260

Hz

OUTPUT DATA RATE Programmable Range 4 1,000 Hz

INTELLIGENCE FUNCTION

INCREMENT

1 mg/LSB

Tabla 4.14: Especificaciones de los Acelerómetros

4.6.3 Características de los Giróscopos

Los giróscopos en 3 ejes de tipo MEMS de la MPU6050 incluyen un amplio rango de características:

Salida digital en los ejes X-, Y-, y Z- de los sensores de velocidad angular (giróscopos)

con escala completa y rango programable por el usuario de ±250, ±500, ±1000, y

±2000°/s.

Una señal externa de tipo sync conectada al pin FSYNC soporta sincronización de

imagen, video y GPS.

Los convertidores ADCs integrados de 16-bit permiten un muestreo simultáneo de los

giróscopos.

Una mejorada estabilidad con sensibilidad a la temperatura reduce la necesidad de

calibración del usuario.

Actuación mejorada frente a ruidos de baja frecuencia.

Filtro paso-bajo digitalmente programable.

Corriente de operación del giróscopo: 3.6mA.

Corriente de standby: 5μA.

Escala de factor de sensibilidad calibrada de fábrica.

Auto test para el usuario.

Del mismo modo que para los acelerómetros, en la tabla 4.15 se incluyen, en inglés, las especificaciones detalladas de los giróscopos. Se puede observar cómo la mayor sensibilidad se consigue para el menor rango de velocidades angulares medibles. Al igual que en el caso de los acelerómetros, la velocidades angulares que aparecerán en el sistema serán lo suficientemente pequeñas como para que baste con el menor de los rangos seleccionables, que es ±250

o/s. De esta manera se consigue la mayor sensibilidad,

con un valor de 131 bits por cada o/s. La forma de seleccionar estas configuraciones en las diferentes

direcciones del registro y todas las que se realizan se detallará en el apartado de software.

PARAMETER CONDITIONS MIN TYP MAX UNITS

GYROSCOPE SENSITIVITY

Full-Scale Range

Gyroscope ADC Word Length

FS_SEL=0

FS_SEL=1

FS_SEL=2

FS_SEL=3

±250

±500

±1000

±2000

16

º/s

º/s

º/s

º/s

bits

Page 19: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 30 -

Sensitivity Scale Factor

Sensitivity Scale Factor Tolerance

Sensitivity Scale Factor Variation Over

Temperature

Nonlinearity

Cross-Axis Sensitivity

FS_SEL=0

FS_SEL=1

FS_SEL=2

FS_SEL=3

25°C

Best fit straight line; 25°C

-3

131

65.5

32.8

16.4

±2

0.2

±2

+3

LSB/(º/s)

LSB/(º/s)

LSB/(º/s)

LSB/(º/s)

%

%

%

%

GYROSCOPE ZERO-RATE OUTPUT (ZRO)

Initial ZRO Tolerance

ZRO Variation Over Temperature

Power-Supply Sensitivity (1-10Hz)

Power-Supply Sensitivity (10 - 250Hz)

Power-Supply Sensitivity (250Hz - 100kHz) Linear Acceleration Sensitivity

25°C

-40°C to +85°C

Sine wave, 100mVpp; VDD=2.5V

Sine wave, 100mVpp; VDD=2.5V

Sine wave, 100mVpp; VDD=2.5V

Static

±20

±20

0.2

0.2

4

0.1

o/s

o/s

o/s

o/s

o/s

o/s/g

SELF TEST RESPONSE

X-Axis

Y-Axis

Z-Axis

10

-105

10

105

-10

105

o/s

o/s

o/s

GYROSCOPE NOISE PERFORMANCE

Total RMS Noise

Low-frequency RMS noise

Rate Noise Spectral Density

FS_SEL=0

DLPFCFG=2 (100Hz)

Bandwidth 1Hz to10Hz

At 10Hz

0.05

0.033

0.005

o/s-rms

o/s-rms

o/s/√Hz

GYROSCOPE MECHANICAL

FREQUENCIES

X-Axis

Y-Axis

Z-Axis

30

27

24

33

30

27

36

33

30

KHz

KHz

KHz

LOW PASS FILTER RESPONSE

Programmable Range

5

256

Hz

OUTPUT DATA RATE Programmable Range 4 8,000 Hz

GYROSCOPE START-UP TIME

ZRO Settling

DLPFCFG=0

to ±1º/s of Final

30 ms

Tabla 4.15: Especificaciones de los Giróscopos

4.6.4 Conexiones con Arduino

La placa utilizada de la MPU6050 tiene 8 terminales o pines de salida para las conexiones. En esta sección se describe la utilidad de cada uno de ellos y cuáles han sido las conexiones efectuadas para este proyecto. En la figura 4.12 se puede observar fácilmente cuáles son estos pines:

Page 20: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 31 -

VCC. Es la alimentación del conjunto. Es importante recordar que sólo permite una

tensión de alimentación con un rango de 2.375V-3.45V. Se conectará al pin 3V3 de

Arduino.

GND. Es la tierra o polo negativo del dispositivo. Se conecta directamente a los

terminales gnd de Arduino.

SCL y SDA. Son los terminales para la comunicación I2C. En el siguiente apartado se

explicará someramente en qué consiste esta comunicación. Se conectan directamente

a los pines SCL y SCA de Arduino, cuya numeración es 20 y 21, respectivamente.

XDA y XCL. Son pines auxiliares para comunicación I2C. Sirve para que la MPU6050

obtenga datos de otros sensores, tal y como se explicó en el apartado 4.5.1. En este

proyecto no se utilizan y se pueden dejar desconectados.

AD0. Determina el bit menos significativo de la dirección como esclavo de la

MPU6050. De fábrica la dirección de la MPU6050 es b110100X, cuya longitud es 7 bits.

La X (el bit menos significativo) será un 1 ó un 0 dependiendo del nivel lógico del pin

AD0. Esto sirve por si se quisieran tener conectadas dos unidades MPU6050, de esta

manera ambas podrían tener diferente dirección I2C. En este caso se ha decidido

poner el pin AD0 a tierra (nivel lógico bajo), por lo que la dirección del dispositivo será

b1101000.

INT. Este pin sirve como disparador de las interrupciones. En el apartado 4.5.2. En este

caso no se van a utilizar interrupciones para este dispositivo, pues no son necesarias.

Por ello se deja sin conectar este pin.

En la tabla 4.16 se incluyen de forma más clara las conexiones que se realizan de cada terminal y los correspondientes pines de Arduino donde se conectan.

TERMINALES MPU6050 PINES EN ARDUINO

VCC (alimentación) 3V3 (pin de 3.3V)

GND GND

I2C SCL 21

SDA 20

I2C Aux. XCL

Desconectados XDA

AD0 GND

INT Desconectado

Tabla 4.16: Conexiones MPU6050

4.6.5 Comunicación I2C

Como se ha venido diciendo en apartados anteriores, la IMU MPU6050 proporciona los datos de forma digital, y se comunica con el microcontrolador mediante comunicación digital I2C. La MPU6050 siempre actúa como esclavo cuando se comunica con el microcontrolador.

Page 21: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 32 -

4.6.5.1 El bus físico I2C

I2C es un bus de comunicaciones en serie. Su nombre viene de Inter-Integrated Circuit (Inter-Circuitos Integrados). La velocidad es de 100 kbit/s en el modo estándar, aunque también permite velocidades de hasta 3.4 Mbit/s. Es un bus muy usado en la industria, principalmente para comunicar microcontroladores y sus periféricos en sistemas integrados (Embedded Systems) y generalizando más para comunicar circuitos integrados entre sí que normalmente residen en un mismo circuito impreso.

Figura 4.17: Ejemplo de conexiones Bus I2C

La principal característica de I2C es que utiliza dos líneas para transmitir la información: una para los datos y otra para la señal de reloj. También es necesaria una tercera línea, pero esta sólo es la referencia (masa). Como suelen comunicarse circuitos en una misma placa que comparten una misma masa esta tercera línea no suele ser necesaria.

Las líneas se llaman:

SDA: datos

SCL: reloj

GND: tierra

Las dos primeras líneas son de tipo “drenado abierto”, por lo que necesitan resistencias de pull-up. Lo que esto significa es que el chip puede cambiar su salida a nivel bajo, pero no puede cambiarla a nivel alto. Para que la línea sea capaz de tomar un nivel alto se necesita proporcionar resistencias de pull-up a la fuente de 5V. Sólo se necesita un único set de resistencias de pull-up para todo el bus I2C, no por cada dispositivo, como se puede observar en la figura 4.17. En el caso particular de este proyecto, esto lo lleva a cabo Arduino internamente. El valor de las resistencias no es crítico. Si no se utilizan estas resistencias, las líneas SCL y SDA siempre estarán a un valor bajo – cerca de 0V- y el bus I2C no funcionará.

Los dispositivos conectados al bus I2C tienen una dirección única para cada uno. También pueden ser maestros o esclavos. El dispositivo maestro inicia la transferencia de datos y además genera la señal de reloj, pero no es necesario que el maestro sea siempre el mismo dispositivo, esta característica se la pueden ir pasando los dispositivos que tengan esa capacidad. Esta característica hace que al bus I²C se le denomine bus multimaestro.

4.6.5.2 El protocolo físico I2C

Cuando el máster (el microcontrolador) desea hablar con un esclavo (la MPU6050), comienza con una secuencia de inicio en el bus I2C. Una secuencia de inicio es una de las dos secuencias especiales definidas para el bus I2C, la otra es la secuencia de parada. Las secuencias de inicio y parada son especiales en el sentido de que son los únicos casos donde se permite que la línea SDA cambie mientras la línea de reloj SCL tiene un valor alto. Cuando se están transfiriendo datos, la SDA debe permanecer estable y no cambiar mientras SCL está alto. Las secuencias de inicio y parada marcan el principio y el final de una transacción con el dispositivo esclavo.

Page 22: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 33 -

Figura 4.18: Protocolo físico I2C

Los datos se transfieren en secuencias de 8 bits. Los bits se colocan en la línea SDA comenzando con el MSB (bit más significativo). La línea SCL se cambia entonces a valor alto y después a valor bajo. Es importante recordar que el chip no puede realmente cambiar la línea a un valor alto, sino que simplemente la “deja ir” y la resistencia de pull-up es la que realmente la lleva a valor alto. Por cada 8 bits transferidos, el dispositivo que recibe los datos envía de vuelta un bit de recibido (ACK), así que realmente hay 9 pulsos de reloj SCL para transferir cada byte de datos. Si el dispositivo que está recibiendo envía de vuelta un bit ACK con valor bajo, entonces significa que ha recibido el dato y está listo para aceptar otro byte. Si envía de vuelta un valor alto, entonces indica que no puede aceptar ningún dato más y el máster debería terminar la transferencia enviando una secuencia de parada.

Figura 4.19: Transferencia de un byte por I2C

No se seguirá profundizando en el protocolo software de I2C porque se sale del alcance de este proyecto. A la hora de utilizar el bus I2C, en la práctica, para comunicar Arduino con la MPU6050 se utilizará la librería Wire, lo que facilitará bastante la tarea; y algunas funciones confeccionadas para realizar este proceso de forma más automatizada y conocer si se están recibiendo los datos con éxito. Todo esto se verá en el correspondiente apartado software.

4.7 Controladora de Motores

Tal y como se explicó en el apartado 4.2.1, los motores no pueden alimentarse directamente del microcontrolador, pues éste no puede proporcionar ni las corrientes ni las tensiones que aquellos necesitan. Por tanto, se hace necesario el uso de un dispositivo electrónico intermedio que permita alimentar al motor con su tensión y corriente adecuadas, denominándose este dispositivo Tarjeta Controladora de Motores o también Driver de Motores.

4.7.1 Introducción

Una Controladora de Motores es un dispositivo electrónico que consiste en un conjunto de transistores y diodos dispuestos de una forma tal que efectúan una tarea similar a la de amplificador y selector. En el caso más simple únicamente permiten el control, mediante combinación de valores lógicos, del funcionamiento o parada de un motor y de su sentido de giro. En la figura 4.20 puede observarse un esquema simplificado de uno de estos montajes, que reciben el nombre de Puente H por la disposición de sus componentes. Según sea la combinación de valores lógicos aplicados a la base de cada transistor A, B, C, D, así funcionará el motor en un sentido o en otro o se producirá el frenado de éste.

Page 23: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 34 -

Figura 4.20: Puente H

La adición de los diodos, además de para canalizar la corriente por el sentido deseado según la combinación, sirve de protección frente a las corrientes de retorno que se inducen en el bobinado del motor cuando gira y que pueden dañar los transistores.

Para realizar la función de amplificación de señal y por tanto permitir el control de tensión aplicada al motor que hace posible que el motor funcione a velocidad variable, la señal que se aplica a la base de los transistores no es únicamente un valor lógico alto o bajo, sino que además se le suma una señal PWM (en el rango lógico 0V-5V) proporcional a la tensión que se quiera suministrar al motor. De esta manera, si el valor PWM corresponde a una tensión eficaz de 2.5V, la tensión eficaz aplicada al motor sería de 6V.

En la figura 4.21 se presenta el diagrama de bloques de un integrado que contiene un puente H. Puede observarse cómo los terminales de entrada denominados EnA y EnB serían los correspondientes por donde se introduciría la señal PWM, pues en este caso se trata de un doble puente H, para controlar dos motores.

No todos los transistores permiten trabajar a cualquier frecuencia de señal PWM, así que esto también resulta una limitación que deberá tenerse en cuenta y consultar en la hoja de datos del fabricante.

Como se explicó en el apartado 2, al inicio del proyecto se contaba con un controlador de motores L298 de la marca STMicroelectronics. Su diagrama de bloques puede verse en la figura 4.21 y su aspecto externo y pines de conexión pueden verse en las figuras 4.22 y 4.23, respectivamente. Este integrado no dispone internamente de los diodos de protección ni de condensadores para el ruido. Por ello es necesario realizar un montaje ad-hoc que resulta más tedioso. Este montaje puede observarse en la figura 4.24 sobre una placa de prototipos.

Page 24: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 35 -

Figura 4.21: Diagrama de Bloques L298

Figura 4.22: Vista frontal L298 Figura 4.23: Pines de conexión L298

En uno de los ensayos para el control de los motores, durante la realización de este proyecto, se produjo algún cortocircuito o mal contacto de uno de los diodos, lo que provocó su perforación y daño del L298. A partir de entonces se decidió buscar una alternativa que integrara todo lo necesario para ahorrar tiempo y que a su vez fuera de bajo coste.

Figura 4.24: Montaje para el L298

Page 25: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 36 -

4.7.2 Controladora TB6612FNG

A partir del incidente comentado en el apartado anterior se buscó una solución para el control de los motores que fuera económica y tuviera las suficientes características para las funciones necesarias. Por tanto, tras examinar el mercado, se llegó a la decisión de adquirir la controladora TB6612FNG de Toshiba. Más en concreto se adquirió la distribución en circuito impreso que comercializa la empresa Pololu, que incluye todos los componentes electrónicos necesarios, para tener únicamente que conectarla a la alimentación, los motores y el microcontrolador.

Figura 4.25: Controladora TB6612FNG

La TB6612FNG es una controladora dual de motores adecuada para conducir dos motores pequeños DC mediante un microcontrolador. Los puentes H de que consta están integrados por transistores MOSFET, que son mucho más eficientes que los BJT utilizados en otros controladores como el L298, lo que permite entregar mucha más corriente a los motores y consumir menos potencia de la alimentación lógica.

Además esta pequeña placa adaptadora proporciona un acceso directo a todas las características de la TB6612FNG y añade condensadores para la alimentación y protección de reversa para la batería en la parte de alimentación del motor.

Como puede observarse en la figura 4.26, en las aplicaciones típicas las conexiones de potencia se hacen en un lado de la placa, mientras que las conexiones para el control se llevan a cabo en el otro lado. Todas las entradas de control están internamente llevadas a un nivel bajo (resistencias pull-down), lo que permite dejar desconectadas aquellas entradas que se pretendan tener siempre a nivel bajo. Cada uno de los canales tiene dos pines de control de dirección y un pin de control de velocidad que acepta entrada PWM con una frecuencia de hasta 100 kHz. El pin STBY debe llevarse a nivel alto para sacar al controlador del modo standby.

Figura 4.26: Terminales TB6612FNG

Page 26: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 37 -

En la tabla 4.27 se incluyen las especificaciones de esta controladora. Como ya se ha dicho se trata de una controladora de dos canales, esto es, puede alimentar a dos motores con control independiente. Cabe destacar que la corriente máxima mantenida por canal es de 1A y la corriente pico de salida por canal es 3A.

Driver de Motores TB6612FNG

Canales de motores: 2

Mínima tensión operativa: 4.5 V

Máxima tensión operativa: 13.5 V

Corriente continuada de salida por canal: 1 A

Corriente pico de salida por canal: 3 A

Corriente continuada de salida en paralelo: 2 A

Frecuencia máxima PWM: 100 kHz

Mínima tensión lógica: 2.7 V

Máxima tensión lógica: 5.5 V

Protección frente a tensión reversa: Sí

Tabla 4.27: Características TB6612FNG

Si se consultan las especificaciones de los motores incluidas en el apartado 4.2 se observa que la intensidad nominal consumida por cada motor es de 530mA, pero la intensidad de parada es de 2.5A. Por esta razón y teniendo en cuenta que la intensidad pico sólo puede mantenerse durante algunos milisegundos, se decidió utilizar una placa para cada motor, haciendo un montaje paralelo de los dos canales de cada placa. De esta forma, aunque se produzca el bloqueo de uno de los motores, la placa funcionando en paralelo permite una corriente mantenida de 2A, más cercana al máximo consumo de los motores.

4.7.3 Conexiones TB6612FNG y Montaje provisional

Análogamente al caso de la IMU, en la tabla 4.28 se incluyen las conexiones realizadas para cada una de las placas controladoras, así como los correspondientes pines de Arduino utilizados para cada terminal. Algunos de los terminales de la controladora estarán interconectados para conseguir el montaje paralelo anteriormente comentado.

PINES TB6612FNG CONECTADO CON PINES ARDUINO

PWMA Interconectados Arduino 7/9 (“/” indica para cada placa

respect.) PWMB

AIN2 Interconectados Arduino 43/40

BIN2

AIN1 Interconectados 42/41

BIN1

GND Todas las tierras interconectadas

--

Page 27: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 38 -

VCC +5V – Arduino +5V

A01 Interconectados Motor terminal 1 No

B01

A02 Interconectados Motor terminal 2 No

B02

VMOT +12V No

Tabla 4.28: Conexiones TB6612FNG

Como se ha detallado anteriormente, esta controladora permite seleccionar diferentes modos de funcionamiento dependiendo de la combinación de entradas que se aplique. Estos modos de funcionamiento únicamente consisten en funcionamiento en un sentido, en el contrario, parada y frenado. En la tabla 4.29 se incluyen estas combinaciones y el modo de funcionamiento resultante.

Entrada Salida

IN1 IN2 PWM STBY OUT1 OUT2 Modo

H H H/L H L L Frenado

L H H H L H Sentido anti horario

L H L L Frenado

H L H H H L Sentido horario

L H L L Frenado

L L H H OFF (alta impedancia) Parada

H/L H/L H/L L OFF (alta impedancia) Standby

Tabla 4.29: Modos de funcionamiento TB6612FNG

Para finalizar este apartado se incluye una fotografía en la figura 4.30 que muestra la placa de prototipos donde se soldaron las dos controladoras (una para cada motor) y que serviría provisionalmente durante la etapa de desarrollo del proyecto. Puede observarse el cableado necesario para realizar la configuración en paralelo de ambos canales de cada controladora. Además se observa los terminales para el suministro a 12V de los motores. Esta placa se colocó mediante unos separadores atornillados a la parte trasera del robot.

Figura 4.30: Placa provisional para las controladoras

Page 28: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 39 -

4.8 Encoders de motores

Tal y como se indicó en el apartado 4.2, los motores disponen de Encoders o codificadores de ángulo. Se trata de codificadores incrementales, esto es, no proporcionan el ángulo exacto en el que se encuentra el motor con una señal única para cada ángulo (los que hacen esto se llaman codificadores absolutos), sino que proporcionan un tren de pulsos que al contarlos se puede deducir el ángulo que ha girado.

Figura 4.31: Encoder incremental motor EMG-30

En la figura 4.31 puede observarse el codificador incremental que incluyen los motores utilizados en este proyecto. Se encuentra debajo de una tapa de plástico negra en el extremo del eje opuesto a donde se une el eje con la rueda.

Si se observa en detalle, en la parte inferior de la imagen pueden verse dos sensores dispuestos a 90o

uno del otro con respecto del eje. Los sensores además están fijados por un soporte de plástico blanco. Se trata de sensores Hall, es decir magnéticos. A diferencia de los encoders ópticos, los sensores Hall al ser magnéticos pueden trabajar en entornos extremos (temperatura) y polvorientos, sin necesitar mantenimiento de limpieza.

Los sensores que incorpora este motor además son digitales, de forma que cuando detectan un campo magnético emiten un valor lógico 1. Mirando de nuevo la figura 4.31 pueden observarse cuatro siluetas circulares en el disco de plástico que está sujeto al eje, dispuestas a 90

o una de otra. Esto no son más

que imanes que servirán para disparar los sensores.

4.8.1 Funcionamiento de los Encoders

El hecho de que existan 2 sensores Hall dispuestos a 90o uno del otro, los convierte en encoders de

cuadratura y los habilita para poder detectar el sentido en el que el eje está girando.

En la figura 4.31 se puede observar un ejemplo de dos señales que emitirían los dos canales del encoder del motor cuando éste gira a velocidad constante, es decir, la señal de cada sensor Hall. Se observa, cuando se va en sentido horario, cómo tras pasar el flanco de subida de la señal del sensor A, 90

o más

tarde aparece el flanco de subida de la señal del sensor B. Esto concuerda físicamente con la disposición a 90

o que tienen ambos sensores.

Page 29: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 40 -

Figura 4.31: Señales de los dos sensores Hall

Como anteriormente se ha comentado, estos sensores son digitales, por lo que un pulso de señal es un valor alto lógico. Si se recorren ambas señales siguiendo un mismo sentido puede obtenerse la lógica necesaria para implementar las funciones de las interrupciones que proporcionen el ángulo girado. De esta manera, se observa que si se produce un cambio en el canal A de bajo a alto y el canal B está en valor bajo, esta combinación es única para el sentido horario; y si el canal B está en valor alto el sentido sería anti horario. Si por el contrario se produce un cambio en el canal A de alto a bajo y el canal B está bajo el sentido sería anti horario; pero si el canal B está alto el sentido sería horario.

Si en lugar de establecer la condición sobre el canal A, se establece sobre el canal B, sería: cuando se produce un cambio de bajo a alto en el canal B y el canal A está alto, el sentido sería horario; mientras que si el canal B está bajo, el sentido sería anti horario. Si por el contrario se produce un cambio en el canal B de alto a bajo y el canal A está bajo, el sentido sería horario, y si el canal A está alto el sentido sería anti horario.

Este razonamiento confuso puede resumirse en la tabla 4.32, donde la expresión A:B representa los valores lógicos de A y de B. Se trata de una tabla de doble entrada, donde la cabecera de cada columna indica el valor actual de cada canal, mientras que la de cada fila indica el valor en el estado anterior. Las iniciales H indican sentido horario de giro, y las iniciales AH indican sentido anti horario.

Valor actual

A:B 0:0 0:1 1:0 1:1

Val

or

ante

rio

r 0:0 -- AH H --

0:1 H -- -- AH

1:0 AH -- -- H

1:1 -- AH H --

Figura 4.32: Tabla lógica encoder

Esta tabla se tendrá en cuenta cuando se implementen las funciones para las interrupciones que modificarán la variable de ángulo girado. Estas funciones se detallarán en el apartado de software cuando se explique el código. Cabe destacar que si sólo se utiliza una interrupción se consiguen 180 pulsos por vuelta de rueda, pero si se utilizan dos interrupciones (una para cada canal) se consigue una resolución de 360 pulsos por vuelta de rueda, es decir, un pulso por grado. Esta última configuración es la que se ha utilizado, necesitando dos interrupciones hardware en Arduino por cada motor, como ya se verá en el apartado correspondiente.

Cada motor tiene un conector que incluye, además de los cables de alimentación del motor, los cables de alimentación de los encoders (necesitan alimentación a 5V) y la salida de cada canal. Esto puede verse en la figura 4.33. Los cables marrón y verde corresponden a la alimentación 5V y tierra respectivamente; y los cables púrpura y azul son las salidas de los sensores Hall A y B respectivamente.

Page 30: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 41 -

Figura 4.33: Conector del motor EMG30

Las salidas de los sensores A y B de cada motor se conectan a los pines de Arduino 2, 3 los de un motor; 18, 19 los del otro. Estos pines son 4 de los 6 que aceptan interrupciones externas, aunque en realidad sólo hay 5 disponibles porque uno de ellos ya está utilizándose para las comunicaciones I2C con la IMU.

4.9 Alimentación del conjunto

Para la alimentación del sistema, tanto de los motores como de los dispositivos electrónicos, se decidió utilizar una batería Li-Po (polímero de litio) de la que ya se disponía con anterioridad, habiéndose utilizado previamente para otros proyectos.

Se trata de una batería de la marca AH1-Tech de tres celdas, de capacidad 1300 mAh y tensión 12V. En la figura 4.34 puede verse una imagen de la misma.

Figura 4.34: Batería Li-Po

La batería alimenta directamente a Arduino y es éste el que, tras sus reguladores, suministra la tensión a los diferentes dispositivos electrónicos a 5V y a 3.3V. También alimenta la batería directamente a las controladoras de motores para darle potencia a éstos.

Para recargar la batería se dispone de un cargador convertidor AC/DC.

Page 31: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 42 -

4.10 Sensores de Intensidad

Al inicio del proyecto, se pensó realizar un control en par. Esto es, dada la inclinación del robot, su velocidad angular de inclinación y su velocidad de avance, se calcula el par necesario que hay que aplicar a los motores para volver al equilibrio.

Figura 4.35: Sensor de intensidad ACS712

Es conocido que en los motores de corriente continua el par es directamente proporcional a la intensidad consumida por éstos, pero la tensión aplicada sigue otro comportamiento, aunque a veces se puede suponer también proporcional. De esta manera, si se conociese la intensidad que está consumiendo el motor, se conocería el par ejercido en ese momento por el motor, y sólo habría que realizar un controlador para que, seleccionando un par deseado, ese controlador calculara la intensidad necesaria para entregar ese par y aplicara más o menos tensión a los motores para llegar a esa intensidad.

Por ello se decidió adquirir un par de sensores de intensidad que fueran de coste reducido, y tras hacer un análisis del mercado se encontró el modelo ACS712, más concretamente la distribución comercial de Sparkfun SEN-08883. Una imagen de este sensor puede verse en la figura 4.35.

Se trata de un sensor de efecto Hall. Esta placa, además de incluir este sensor incluye un amplificador operacional con ganancia configurable, para poder medir pequeñas corrientes, algo imprescindible en este caso. Este sensor entrega una tensión analógica que varía con la intensidad medida.

Para calibrarlo se deben seguir los pasos:

1.-Regular el offset al nivel deseado cuando está midiendo 0A.

2.-Midiendo una corriente conocida (por ejemplo 100mA), regular la deflexión de salida con el potenciómetro de ganancia.

3.-La sensibilidad se calcula entonces como

corriente de entrada

ref deflectV V

Además este sensor incorpora un condensador que limita el ancho de banda de 34Hz para reducir el ruido cuando se utilizan altas ganancias.

Ya se temía desde un principio que los ruidos que aparecerían al medir las intensidades que circulaban por el motor dificultarían la tarea, así que el hecho de que incluyera un filtro para reducir el ruido era algo muy beneficioso.

Para observar el comportamiento de la intensidad medida durante el funcionamiento de un motor se decidió llevar a cabo un ensayo de tipo escalón, con el motor funcionando en vacío. Tras calibrar el sensor, se puso en marcha el motor a una tensión baja y en un determinado momento se le aplicó, en forma de escalón, una subida súbita de la tensión. El resultado de este ensayo se incluye en la figura 4.36.

Page 32: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 43 -

Figura 4.36: Ensayo intensidad

En esa figura se puede observar una señal ruidosa que corresponde a la propia del sensor. En este ensayo se representan tensiones de salida del sensor medidas por Arduino, pues todavía no se ha hecho la conversión de correlación a intensidad, pero para observar el comportamiento cualitativo no es necesario, pues serían proporcionales. Además se incluye la señal filtrada con un filtro de primer orden y factores de filtrado 0.02 y 0.08 (a menor factor, mayor filtrado). No se puede incrementar el filtrado porque retrasaría demasiado la señal y no sería útil.

Se observa cómo cuando se produce el escalón en la tensión existe un salto muy grande en la intensidad que ni el filtro puede salvar. Además, a pesar de estar funcionando el motor en vacío y a una velocidad constante, se observan oscilaciones a parte del ruido. Cabe destacar que tal y como está calibrado el sensor, con 0A se obtienen 2.5V de salida del sensor.

Todos estos inconvenientes propiciaron que se desestimara la idea de utilizar los sensores de intensidad para calcular el par aplicado, y finalmente se realizó un control en aceleraciones que se detallará en posteriores apartados.

4.11 Módulo Bluetooth

Como se ha indicado anteriormente, Arduino permite las comunicaciones serie sin necesitar más que un cable USB conectado al ordenador. Pero esto supone una barrera para recibir datos de funcionamiento o para ajustar diferentes parámetros en tiempo real.

Con el fin de poder implementar un control remoto de trayectoria del robot, así como poder ajustar los diferentes parámetros y ganancias en tiempo real, de manera que no se necesite cargar todo el programa, con la consiguiente pérdida de tiempo que ello conlleva (la carga de un programa en Arduino

4500 5000 5500 6000 6500 7000 7500

2500

2600

2700

2800

2900

3000

3100

3200

Ten

sión

mV

Tiempo ms

Tensión del Sensor de Intensidad Con un escalón de PWM=40 a PWM=200 en t=5s

Tensión sin filtrar

Tensión filtrada =0.02

Tensión filtrada =0.08

Page 33: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 44 -

puede llevar hasta un par de minutos), se decidió incorporar un módulo Bluetooth que permitiera la comunicación inalámbrica con Arduino.

Figura 4.37: Módulo Bluetooth HC-06

El módulo elegido fue el Bluetooth HC-06, que puede verse en la figura 4.37. Se trata de un dispositivo que se comunica mediante el puerto serie con Arduino, y permite un amplio rango de velocidades de transferencias, desde 1200 baudios hasta 1382400 baudios.

El módulo incluye una memoria interna, de manera que puede configurarse su nombre, la contraseña de acceso y la velocidad de transferencia. Esta configuración se realiza mediante comandos AT. En la Figura 4.38 se incluye el código escrito en Arduino para la configuración del módulo. Aunque no se detallará el código, puede observarse que el nombre escogido para el dispositivo es MINISEGWAY, la contraseña es “0000” y la tasa de transferencia es de 115000 baudios. Esta configuración quedará almacenada en el dispositivo indefinidamente aunque se corte el suministro eléctrico.

Archivo: Setupbluetooth.ino

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

27

28

29

30

char NOMBRE[11] = "MINISEGWAY";

char BPS = '8'; 4=9600, 5=19200, 6=38400, 7=57600, 8=115200

char PASS[10] = "0000";

void setup(){

Serial.begin(115200);

pinMode(13,OUTPUT);

digitalWrite(13,HIGH);

delay(10000);

digitalWrite(13,LOW);

Serial.print("AT");

delay(1000);

Serial.print("AT+NAME");

Serial.print(NOMBRE);

delay(1000);

Serial.print("AT+BAUD");

Serial.print(BPS);

delay(1000);

Serial.print("AT+PIN");

Serial.print(PASS);

delay(1000);}

void loop(){

digitalWrite(13, !digitalRead(13));

delay(500);}

Figura 4.38: Configuración Bluetooth HC-06

Page 34: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 45 -

En la tabla 4.39 se incluye el esquema de conexionado para el este módulo. Es importante recordar que la tensión de alimentación es a 3V, como en el caso de la IMU.

TERMINALES HC-06 PINES EN ARDUINO

VCC (alimentación) 3V3 (pin de 3.3V)

GND GND

TXD RX0 PIN 0

RXD TX0 PIN 1

Tabla 4.39: Conexiones Bluetooth HC-06

4.12 Placa de Circuito Impreso de Tipo Shield

Como parte del proceso final del proyecto, se decidió reducir todo el cableado al mínimo. Esto es posible diseñando y fabricando una placa de circuito impreso que incluya las controladoras de los motores, conexiones para la IMU y un zócalo para conectar el módulo bluetooth. Por otra parte así se consiguen conexiones con mejores contactos y más fiables, pues no existe el riesgo de que un cable se salga de los zócalos de Arduino.

Esta placa es de tipo shield, esto es, va “enchufada” directamente sobre la unidad Arduino. En ella además se ha decidido incluir un interruptor para cortar la corriente de suministro al módulo bluetooth para permitir la carga de programas vía USB. Por otra parte se han incluido conectores para enchufar directamente los cables que vienen desde los motores y de la IMU.

Page 35: Plataforma y Hardwarebibing.us.es/proyectos/abreproy/60238/descargar_fichero...Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste - 13 - Asimismo

Plataforma y Hardware Vehículo Autoequilibrado de Tipo Péndulo Invertido de Bajo Coste

- 46 -

4.13 Esquema general de conexiones

A continuación, en la figura 4.40 se incluye un esquema general de conexiones con fotografías de todos los dispositivos montados en el robot. Los polos negativos o tierra no se han conectado en ningún caso para mayor claridad del esquema, sólo hay que considerar que van interconectados.

Figura 4.40: Esquema General de Conexiones