lunes, 18 de abril de 2016

Segway Artesanal

Introducción

La elaboración de este proyecto consiste en construir un vehículo eléctrico de desplazamiento personal el cual se basa en las lecturas obtenidas de un acelerómetro y giroscopio para mantener el equilibro y su correcto funcionamiento, en este blog solo se va a contemplar el diseño y elaboración de las placas de control y no la del chasis.



Componentes necesarios

Para elaborar este proyecto necesitaremos:

- Un chasis equilibrado 
- Arduino uno (atmega328p)
- PIC 16f877a
-  Ir2184
- Mosfet irf 1404 o irf 2804
- BC547
- MPU 6050
- Reguladores tension 12, 5, 3.3 V (LM2576)
- Baterias 12v 
- LCD 16x2 
- I2C para LCD
- Potenciometro 10k
- Motores MY1016
- Condensadores
- Resistencias
- leds 

Comenzemos... .

La elaboración del chasis ha sido completamente artesanal, el diseño ha sido sacado en la mayor parte de fotografías y de algunos planos y adaptado a los materiales que ya tenía disponibles.

PCB


Las PCB han sido realizadas de forma modular con el fin de si surgían fallos fueran más fáciles de localizar, las placas realizadas son: una para arduino con el módulo IMU incorporado, una para el PIC, un regulador de tensión y la placa de control del motor. 

PCB arduino: 


La placa de arduino consiste en un atmega 328P con encapsulado DIP y todo lo necesario para funcionar (cristal de cuarzo, botón reset, filtros en la alimentación, pines de programación...) se le han incorporado dos leds uno para saber que la alimentación es correcta y otro en el pin 13 para usarlo con un blink y saber si está funcionando correctamente.

El funcionamieno que realiza esta placa es la de control de los motores mediante un enable y dos señales PWM una para cada motor y lectura de los valores del acelerometro, giroscopio y el potenciometro.

PCB pic 16f877a:

 


Esta palca a sido realizada a simple cara, incorporando todo lo necesario para que funcione al igual que en la de arduino, la función del PIC es la de controlar la pantalla lcd mostrando cuando el aparato está listo para su funcionamiento y los valores de carga de la batería.

 PCB alimentación:




 Esta placa ha sido diseñada con el fin de funcionar tanto para el regulador de 12, 5, 3.3 V, se le ha incorporado un led con su resistencia en seria y un zenner para saber si el regulador está funcionando además de un divisor resistivo para poder adaptar 24V a valores admisibles por el AD de arduino o PIC los cuales son de 0V a 5V.


PCB Driver motor:

Top                                                                                   Bottom



Finalmente la placa a quedado así:



Esta placa es el driver de un motor, necesitaríamos una por cada motor, su funcionamiento se basa en un puente en H con sus diodos de protección y un driver de medio puente IR2184S, el transistor bc547 se utiliza para invertir la señal PWM que llega del arduino permitiendo invertir el giro del motor con una sola señal PWM.

Funcionamiento



Para el funcionamiento correcto de segway se ha utilizado el chip MPU-9150, este integrado incorpora acelerómetro, giroscopio y magnetómetro de los cuales solo san sido usados el acelerómetro y giroscopio, la comunicación con este integrado es realizada mediante I2C por el cual se leen los valores obtenidos por el acelerómetro y el giroscopio y se combinan mediante un filtro complementario el cual consiste en un filtro paso bajo para la lectura del acelerómetro y posteriormente se combina con la lectura del giroscopio pasando por un filtro paso alto, este filtro se implementa en el código de arduino, se ha optado por implementar este por lo liviano que resulta de procesar y proporciona buenos resultados.


 

Para los motores se ha usado el método Lock Anti-Phase Drive el cual consiste en que a cada borne del motor llegue la mitad del voltaje total de esta manera no hay ddp y el motor estaría parado, este caso se daría cuando segway se encontrase en estado completamente vertical, en caso de que se esté inclinando segway el voltaje en uno de los bornes se aumentaría y reduciría proporcionalmente en el contrario, haciendo así girar el motor en un sentido o en otro progresivamente.




El voltaje que debe de llegar a cada borne del motor viene determinado por la lectura de la inclinacion realizada por la IMU  y el resultado del filtro complementario implementado, el cual determina en que direccion y a que velocidad se esta inclinando para hacer guirar los motores en el sentido correcto y conseguir equilibrar segway manteniendolo de esta manera en estado vertical.
















Para saber en qué sentido se inclina el manillar, el cual sirve para controlar en qué sentido se desea girar, se ha utilizado un potenciómetro alimentado a 3.3v para tener una mayor resolución.



















Software

En la programación de arduino se a implementado la lectura de la imu con su filtro complementario, un PID y la actuación de los motores por PWM mediante la configuración del TIMER1.

Para la lectura de los valores de la imu, se realiza por comunicación I2C, solicitando los valores de los registros que corresponde a cada uno de ellos y se calculan los ángulos
















Después de la lectura es necesario aplicar el filtro complementario
 



Este valor del angulo debe de estar comprendido entre+-30º si el angulo superase ese valor los motores se desactivarían poniendo en bajo el pin enable de arduino, esto es una protección contra caídas.


Para aplicar el PID se ha utilizado la libreria <PID_V1.h>  la cual podeis descargar desde aqui

Esta librería ha sido necesario modificarla puesto que por defecto no proporciona valores menores que 0 puesto que la salida que proporciona es un valor PWM. 

Para el funcionamiento del motor se ha configurado el TIMER 1 en el modo, Phase and Frequency correct PWM y a una frecuencia de 16KHz con el fin de evitar lo máximo posible los pitidos audibles producidos por el motor además de calentamientos innecesarios del mismo. 



Para parar el motor el valor seria la mitad del máximo del valor TOP en la configuración del TIMER1, en este caso son 250, a este valor se le suma o resta el valor proporcionado por el PID dependiendo de en qué sentido se esté inclinando (este es el motivo por el cual se necesitan valores negativos de la librería pid_v1.h) además se incorpora la lectura del potenciómetro, la cual también es necesaria que tenga valores positivos y negativos, para sumarla a uno de los motores y restarla al contrario y conseguir así un giro sobre sí mismo, el valor del PWM máximo y mínimo admisible viene dado por el integrado IR2184S el cual admite valores de mínimo un 5% y máximo un 95% de PWM.


Es necesario tener un arranque y parado progresivo de los motores, esto sirve para evitar picos de tensión innecesarios y que pueden ocasionar problemas en las pcb de control e incluso llegar a bloquearlas, este fenómeno de los motores se denomina FEM (fuerza electromotriz),
Por si se diera este caso se ha incorporado una protección con un relé y un interruptor magnético el cual se acciona mediante un imán (debidamente agarrado a la muñeca del conductor)  y si es retirado corta la corriente de los motores de segway.
 

 Resultado final





Información adicional

No hay comentarios:

Publicar un comentario