PCB cuadrotor (sin cepillo) (16 / 20 paso)

Paso 16: Poner juntos: el código

El código para mi quad de PCB está escrito en estilo Arduino C y C++ en el IDE de Arduino. Si nunca has usado un Arduino antes, usted puede ponerse al día rápidamente utilizando los recursos en la hopepage de Arduino. El proyecto de Arduino está incluido en la documentación (paso 1). En total, el código es aproximadamente de 500 líneas, incluyendo no incluye. Incluso en el archivo principal, mucho del código ejecuta setup o fondo cosas como funciones para leer los datos en serie IMU. (Pelado abajo de las librerías de Pololu de aquí y aquí para incluir sólo las funciones que necesitaba).

La parte más interesante del código que implementa los conceptos de los cuatro pasos anteriores, cabe en una sola página (o las dos imágenes en este paso). Aquí está, con breves descripciones de lo que hace cada parte:

readGyro();
readAcc();

// START OF + MODE ----------------------------------------------------------------------
a_pitch = (accel_x_zero - accel_x);
a_roll = (accel_y - accel_y_zero);
a_z = (int firmado) analogRead(A_Z) - a_z_z;
g_pitch = (gyro_y - gyro_y_zero);
g_roll = (gyro_x - gyro_x_zero);
g_yaw = (gyro_z - gyro_z_zero);

Esta parte toma las señales crudas de acelerómetro y giroscopio. También lo hace la reducción a cero, aunque tengo todos mis ceros establecer... cero... ya que el mínimo de Pololu-9 hace un buen trabajo de puesta a cero de sus resultados ya. Si es necesario, se podían cambiar los valores de cero para recortar la cuadrotor. Nota: se invierte a_pitch. Este es un tema físico. En tono positivo, el vector de la gravedad apunta hacia el eje X de la IMU. Esto se registra como aceleración negativa en X, puesto que el accelrometer no puede distinguir entre la que se inclina hacia adelante y acelerar hacia atrás. a_roll no tiene esta inversión.

rate_pitch = (float) g_pitch * G_GAIN;
rate_roll = (float) g_roll * G_GAIN;
rate_yaw = (float) g_yaw * G_GAIN;

Convertir las señales del girocompás crudo en unidades físicas de º / s.

angle_pitch = AA * (angle_pitch + rate_pitch * DT);
angle_pitch += (1,0 - AA) * (float) a_pitch * A_GAIN;
pitch_error = (float) (pitch_command - 127) / 127.0 * MAX_ANGLE - angle_pitch;
pitch_error_integral += pitch_error * DT;
Si (pitch_error_integral > = INT_SAT) {pitch_error_integral = INT_SAT;}
Si (pitch_error_integral < = - INT_SAT) {pitch_error_integral = - INT_SAT;}

angle_roll = AA * (angle_roll + rate_roll * DT);
angle_roll += (1,0 - AA) * (float) a_roll * A_GAIN;
roll_error = (float) (roll_command - 127) / 127.0 * MAX_ANGLE - angle_roll;
roll_error_integral += roll_error * DT;
Si (roll_error_integral > = INT_SAT) {roll_error_integral = INT_SAT;}
Si (roll_error_inttegral < = - INT_SAT) {roll_error_integral = - INT_SAT;}

Echada y rodillo Filtros complementarios, así como cálculo de error del ángulo. pitch_command y roll_command provienen de la radio y se transmiten desde la estación de tierra basada en entradas del usuario. MAX_ANGLE es una constante que define el ángulo de la echada y del rodillo de ordenada máximo en grados de definir usuario. Los términos control integral son todos comentados, pero no dudes en jugar con ellos.

Control
front_command_f = pitch_error * KP;
front_command_f = pitch_error_integral * KI;
front_command_f += rate_pitch * KD;
front_command_f-= ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;

rear_command_f += pitch_error * KP;
rear_command_f += pitch_error_integral * KI;
rear_command_f = rate_pitch * KD;
rear_command_f-= ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;

right_command_f = roll_error * KP;
right_command_f = roll_error_integral * KI;
right_command_f += 1.3 * rate_roll * KD;
right_command_f += ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;

left_command_f += roll_error * KP;
left_command_f += roll_error_integral * KI;
left_command_f = rate_roll * KD;
left_command_f += ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;
// END OF + MODE ------------------------------------------------------------------------

Esta es la matriz de comandos del paso 12. El mando de guiñada es en-alineado, que clase de tonto. yaw_command viene de la radio y se transmite por la estación de tierra. MAX_RATE es una constante definida por el usuario que establece la máxima al mando de guiñada tarifa de la rotación en grados por segundo.

Artículos Relacionados

El nuevo y mejorado sin cepillo eléctrico Scooter sistema Guía de alimentación

El nuevo y mejorado sin cepillo eléctrico Scooter sistema Guía de alimentación

en 2008, armé una guía en Instructables acerca de cómo actualizar el sistema de alimentación de su pequeño vehículo eléctrico personal. Fue una cartilla sobre los fundamentos de un sistema eléctrico de vehículo eléctrico y ofrece recursos y consejos
Como hacer un kart eléctrico Custom y Motor sin cepillo de la C.C.

Como hacer un kart eléctrico Custom y Motor sin cepillo de la C.C.

este instructivo detalla el diseño y la fabricación de mi Go-Kart eléctrico. Sin embargo, los principios y métodos pueden aplicarse a vehículos similares.Eli-Kart surgió de un interés mío para crear un simple, confiable, vehículo eléctrico personal q
Cómo comprar y controlar el motor sin cepillo

Cómo comprar y controlar el motor sin cepillo

Si quieres hacer tu propio rc avión o helicóptero tienes que aprender a controlar el motor sin cepillo. Más de la voluntad de trabajo ESC (Control electrónico de velocidad) no para nosotros, pero no todos. Alguien tiene que control ESC (utilizo Ardui
DSLR de cardán sin cepillo

DSLR de cardán sin cepillo

Con el mercado en auge de cardanes sin cepillo, intenté crear mi propio.Tuve una idea para un estabilizador de cámara en el 2013 como un proyecto de estudiante de segundo año de secundaria. He seguido la comunidad RC por un tiempo y durante este tiem
Convertir un viejo coche RC sin cepillo

Convertir un viejo coche RC sin cepillo

bien primero de im no está seguro de cómo para empezar de que sea im ningún experto en esto es solo un intento de hacer algo o que este es mi primer instructable supongo que sería muy obvio si ves mi perfil o que mi puntuación es terrible sí sé bien
La realización de un cardán sin cepillo bricolaje con Arduino

La realización de un cardán sin cepillo bricolaje con Arduino

Esta es una historia de mi tercer proyecto con gyro barato y Arduino.Después de los anteriores dos proyectos, Péndulo invertido fácil y caligrafía 3D, he pensado de hacer Cámara de cardán con Arduino. Luego tenía las tres políticas para el proyecto.E
K'nex montaje del Motor sin cepillo y adaptador

K'nex montaje del Motor sin cepillo y adaptador

¡ Bienvenido a mi instructable sobre cómo hacer un montaje de motor sin escobillas y adaptador para k'nex! Usando esto, podemos usar motores brushless para conducir nuestras creaciones k'nex!Construí este porque estaba buscando métodos alternativos d
Limpiar una botella sin cepillo

Limpiar una botella sin cepillo

puede limpiar botellas de cuello estrecho, incluso los que son un raro la forma - como mi alimentador de Colibrí - gratis, sin cepillo.Paso 1: herramientas Una botella que necesita limpieza.Una cuchara.Agua.Jabón de plato.Arroz.Paso 2: Una cucharada
Ejecutar un CDROM sin cepillo Motor con Arduino

Ejecutar un CDROM sin cepillo Motor con Arduino

un motor de corriente continua brushless o BLDC es un tipo de motor sin cepillo de cualquier. Significa que no hay ninguna conexión directa (cepillo) entre la rotación del husillo y otras partes fijas como como bobina. Así es la producción de cambios
Motor segadora hierba substituido con el motor sin cepillo de RC camiones y utiliza una placa de control Arduino

Motor segadora hierba substituido con el motor sin cepillo de RC camiones y utiliza una placa de control Arduino

Durante años he estado usando mi podadora con baterías LiPo actualizadas, como tipo de los utilizados en un coche de RC. Baterías LiPo han trabajado bien y siempre mucho más tiempo de uso trimmer en bastante un poco de menos peso. El problema era que
GENERADOR eléctrico CON MOTORES sin cepillo

GENERADOR eléctrico CON MOTORES sin cepillo

"El mundo ha maquillado. Lo siento en el agua. Lo siento en la tierra. Lo huelo en el aire. Mucho de lo fue se ha perdido... "-el Señor de los anillos.Ciertamente... hablando del Petróleo y de las Energías No Renovables, mucho de lo fue se ha pe
Motor sin cepillo de piezas de computadoras

Motor sin cepillo de piezas de computadoras

mi objetivo es un hubmotor sin cepillo completamente DIY para asistencia eléctrica basado en piezas recicladas de bicicletas.Se trata de prototype 2. Prototipo 1 fue sólo un rápido echar y 3 será escala de prueba.
Cómo envolver o actualizar un Motor sin cepillo del Outrunner

Cómo envolver o actualizar un Motor sin cepillo del Outrunner

un motor sin escobillas utiliza una corriente pulsada que alterna entre tres cables. Este hecho acerca de ellos puede hacer que parezcan confusas acerca de cómo hacer uno. Hay algunas maneras diferentes para envolver un outrunner sin escobillas, pero
Avanzados sistemas eléctricos sin cepillo para pequeños Scooters eléctricos

Avanzados sistemas eléctricos sin cepillo para pequeños Scooters eléctricos

tesis: es factible construir un dispositivo de movilidad personal muy potente, eficiente y ligero utilizando equipo de hobby-grado para menos de $400. Esta cantidad puede ser considerablemente menos dependiendo de las necesidades individuales del con