PCB Quadrotor (Brushless) (16 / 20 étapes)

Étape 16 : Mettre ensemble : le Code

Le code pour mon quad PCB est écrit dans l’Arduino-style C/C++ dans l’IDE Arduino. Si vous n’avez jamais utilisé un Arduino avant, vous pouvez obtenir au courant assez rapidement en utilisant les ressources sur l' Arduino hopepage. Le projet Arduino est inclus dans la documentation (étape 1). Au total, le code est environ 500 lignes, non compris les comprennent. Même dans le fichier principal, beaucoup de code s’exécute des trucs d’installation ou d’arrière-plan comme fonctions pour lire les données sérielles IMU. (J’ai démonté les bibliothèques Pololu d’ici et ici pour inclure des fonctions seulement que j’avais besoin.)

La partie la plus intéressante du code, qui met en œuvre les concepts depuis les quatre dernières étapes, s’adapte sur une seule page (ou les deux images dans cette étape). C’est ici, avec de brèves descriptions de ce que fait chaque partie :

readGyro() ;
readAcc() ;

// START OF + MODE ----------------------------------------------------------------------
a_pitch = (accel_x_zero - accel_x) ;
a_roll = (accel_y - accel_y_zero) ;
a_z = (int signé) 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) ;

Cette partie s’empare des signaux bruts d’accéléromètre et gyroscope. Il fait aussi la réduction à zéro, même si j’ai tous mes zéros... la valeur zéro... puisque le minIMU Pololu-9 fait un bon travail de remise à zéro de ses sorties déjà. Si nécessaire, les valeurs zéro pourraient être modifiées pour couper la quadrotor. Remarque : a_pitch est contrepassée. Il s’agit d’un problème physique. Sous des pas positifs, le vecteur de la gravité soit du côté de l’axe X de l’IMU. Cela enregistre comme accélération négative en X, étant donné que l’accelrometer ne peut pas distinguer entre se pencher vers l’avant et l’accélération vers l’arrière. a_roll n’a pas ce revirement.

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

Convertissent les signaux de gyro brutes en unités physiques 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;}

Pitch et rouler les filtres complémentaires, ainsi que calcul de l’erreur d’angle. pitch_command et roll_command viennent de la radio et sont transmises par la station au sol issue des entrées d’utilisateur. MAX_ANGLE est une constante qui définit l’angle de tangage et de roulis commandée maximale exprimée en degrés défini par l’utilisateur. Les modalités de commande incorporé sont toutes commentées, mais n’hésitez pas à jouer avec eux.

Contrôle
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 ------------------------------------------------------------------------

Il s’agit de la matrice de commande de l’étape 12. Le contrôleur de mouvement de lacet est en doublé, ce qui est peu ridicule. yaw_command vient de la radio et est transmise par la station au sol. MAX_RATE est une constante définie par l’utilisateur qui définit la valeur maximale commanda la vitesse de rotation de lacet en degrés par seconde.

Articles Liés

Le nouveau et amélioré Brushless Electric Scooter Power System Guide

Le nouveau et amélioré Brushless Electric Scooter Power System Guide

en 2008, j'ai mis en place un guide sur Instructables de moderniser le système d'alimentation de votre petit véhicule électrique personnel. C'était une introduction sur les bases d'un système de puissance du véhicule électrique et offre des ressource
Hélicoptère RC de Quadrotor

Hélicoptère RC de Quadrotor

ce projet est un hélicoptère RC quadrotor (quadrocopter, quadcopter, quadricopter, etc.). C'est un hélicoptère RC qui utilise 4 hérissons.Regarder en 720pVous avez besoin de quelques Prérequis :Comment utiliser Arduino, assez pour commencerLe brasage
Un gros-porteur Quadrotor - conceptions et idées pour construire votre propre.

Un gros-porteur Quadrotor - conceptions et idées pour construire votre propre.

Multirotors--ils sont cool!Un quadrotor est un type d'aéronef multirotor. Ces avions sont plus faciles que jamais à construire. Vous pouvez commencer avec cette machine et augmenter ses capacités (et la complexité) comme vous en apprendre davantage.
Un autre bon marché Quadrotor - présenté par BayLab pour le programme de commandites de Instructables

Un autre bon marché Quadrotor - présenté par BayLab pour le programme de commandites de Instructables

comme fondamentalement tous ces jours-ci, je voulais construire un quadrotor. Voici comment j'ai construit mine pour assez bon marché.Étape 1: Conception mécanique j'ai construit mon quadrotor avec un ami. J'ai utilisé quelques équerre aluminium minc
Quadrotor

Quadrotor

cet été Edgerton Center Engineering Design class produit quatre projets génial dans quatre semaines. Un des projets a été un quadrotor RC fonctionnel construit avec équipement RC couramment disponible et une carte de microcontrôleur Arduino. Voici le
Mur de PCB Circuit

Mur de PCB Circuit

Vous avez beaucoup d'électronique de vieux trucs et ne sais pas quoi faire ? Faire un mur de Circuit.Il s'agit de mon premier espoir instructable, vous l'aimez.J'ai eu une chambre de stockage presque complet avec non fonctionnel de vieux ordinateurs,
PCB fraise lit Modela MDX-20

PCB fraise lit Modela MDX-20

Le modela MDX-20 est très largement répandu dans les fablabs beaucoup plus grand nombre et compact CNC pour des utilisations différentes...Cette machine est utilisée pour faire des PCB de fabrication numérique. Le problème est que la plupart des gens
Unité d’exposition aux UV de PCB

Unité d’exposition aux UV de PCB

Une boîte d'exposition UV est une pièce extrêmement utile pour faire des BPC.J'ai cherché et trouvé qu'ils sont trop gros et trop cher pour mon utilisation. En outre, tous les périphériques nécessitent une sorce de puissance externe.Alors j'ai décidé
Concevoir un PCB romantique à l’aide d’un outil de conception de PCB gratuit - EasyEDA

Concevoir un PCB romantique à l’aide d’un outil de conception de PCB gratuit - EasyEDA

Avez-vous déjà essayé de concevoir un PCB pour votre amant ou des enfants ou des amis sur une journée spéciale ? Pourquoi pas?PCB pourrait aussi être un cadeau incroyable qui révèle que votre créativité aussi aiguise vos compétences de PCB. Ici, je v
Upcycle DC Brushless moteurs auprès d’imprimeurs

Upcycle DC Brushless moteurs auprès d’imprimeurs

Si vous êtes à tous les intéressés de la robotique et l'électronique vous sera probablement ont démonté une vieille imprimante ou deux (si vous n'avez pas, je le recommande fortement, il y a toujours intéressant les parties et vous pouvez en apprendr
Réutilisation du chlorure ferrique pour PCB gravure à la maison

Réutilisation du chlorure ferrique pour PCB gravure à la maison

Je me sens PCB gravure est une des compétences plus requis pour un amateur de bricolage électronique. Au cours de la procédure de gravure, vous avez pu évidemment entendre d'une substance utile appelée chlorure ferrique. Vous pourriez ont même essayé
Réutilisation du vieux PCB

Réutilisation du vieux PCB

Que sont les PCB ?PCB est l'abréviation de circuits imprimés. Un PCB supporte mécaniquement et connecte électriquement composants électroniques à l'aide de pistes conductrices, coussins et autres fonctionnalités gravées de feuilles de cuivre laminées
Prototype de maquette de PCB en carton

Prototype de maquette de PCB en carton

Créateur et développeur de systèmes embarqués dans un pays du tiers-monde, je suis toujours confronté à longs délais lors de l'achat (importation essentiellement) quoi que ce soit liés aux composants électroniques de l'étranger. Un paquet de livraiso
Brasage des PCB simple

Brasage des PCB simple

Soudure est une des compétences plus fondamentaux nécessaires pour tremper dans le monde de l'électronique. Les deux vont de pair comme les pois et les carottes. Et, bien qu'il soit possible de connaître et de construire l'électronique sans avoir bes