Paso 5: Código de Arduino
-El código se está ejecutando en un mega328p y fue compilado usando Arduino 1.6.6
-El código de tiempo de ciclo es un constante ~ 250Hz
En el corazón del código es un contador que avanza cada vez TIMER1 se desborda y provoca una rutina de interrupción. Este contador desencadena otros eventos a intervalos específicos permitiendo que el código a ejecutar a un ritmo conocido y simplificar la matemática en el bucle de control.
El ángulo de inclinación del robot se calcula utilizando un filtro complementario con valores girómetro y aceleración de la IC MPU6050. Esto se alimenta en un lazo de control con tres otros valores: el derivado del tiempo de la inclinación del ángulo, robot velocidad (aceleración integral) y robot desplazamiento (velocidad integral). Todos los cuatro valores se agregan con ganancia preestablecida para obtener un término de salida proporcional a la aceleración del robot. Una buena explicación de este lazo de control por David P. Anderson e más información en su robot de equilibrio.
Para mover el robot se agrega un desplazamiento en el valor de desplazamiento en el bucle de control. Para girar a la izquierda o la derecha un desvío es agrega/resta de las velocidades de la rueda izquierda y derecha. Las velocidades de la rueda se alimentan en el la parte de control del motor del código.
Motores brushless requieren energía de 3 fases. Mira esta explicación de cómo se logra el control del ángulo de los motores sin cepillo del cardán. La parte de control del motor de mi código se basa apagado de la código de control sin cepillo de la cardán BruGi. Todos tres temporizadores están listos para la salida PWM correcta de la fase de 31,25 KHZ (6 salidas de PWM). Un útil artículo sobre el ajuste de temporizadores de Arduino.
Una tabla de búsqueda que contiene valores de space vector PWM se utiliza para tirar de tres valores con separación de fase de 120 grados. Los valores de la tabla de búsqueda avanzan a un ritmo proporcional a la velocidad de la rueda robot necesita de izquierda o derecha.
El código encarga de ajuste de la potencia del motor para corregir para la disminución de par motor a mayor velocidad y mayor par de torsión necesario durante la aceleración mayor. Se monitorea el voltaje de la batería para evitar daños a las baterías de LiPo. El código también encarga de la comunicación Bluetooth entre un teléfono inteligente.