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.
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