Étape 5: Arduino Code
-Le code est exécuté sur un mega328p et a été compilé en utilisant Arduino 1.6.6
-Le code de temps de cycle est une constante ~ 250Hz
Au coeur du code est un compteur qui est avancé chaque fois TIMER1 déborde et déclenche une routine d’interruption. Ce compteur déclenche des autres événements à des intervalles spécifiques permettant le code à exécuter à une vitesse connue et simplifier les mathématiques dans la boucle de régulation.
L’angle d’inclinaison du robot est calculé en utilisant un filtre complémentaire avec valeurs gyromètre et l’accélération de l’IC MPU6050. Il est introduit dans une boucle de contrôle avec trois autres valeurs : la dérivée temporelle de l’inclinaison d’angle, vitesse de robot (accélération intégrale) et déplacement de robot (vitesse intégrale). Les quatre valeurs sont ajoutées avec gain préréglée pour obtenir une condition de sortie proportionnelle à l’accélération du robot. Une bonne explication de cette boucle de contrôle de David P. Anderson et plus d’informations sur son robot d’équilibrage.
Pour déplacer le robot un offset est ajouté à la valeur de déplacement dans la boucle de régulation. Pour tourner à gauche ou à droite un décalage est ajouté/soustrait les vitesses roue gauche et droite. Les vitesses de roue sont introduits dans la la partie contrôle moteur du code.
Moteurs brushless nécessitent 3-phase de puissance. Regardez cette explication de comment le contrôle de l’angle des moteurs brushless cardan est atteint. La partie de commande du moteur de mon code est basée hors de la code de contrôle pour le cardan brushless BruGi. Tous trois minuteries sont définies à la sortie de 31,25 KHZ phase PWM correcte (6 sorties PWM). Un article utile sur le réglage des temporisations Arduino.
Une table de recherche qui contiennent des valeurs de l’espace vectoriel PWM est utilisée pour tirer trois valeurs avec séparation de phase de 120 degrés. Les valeurs extraites de la table de recherche progressent à une vitesse proportionnelle à la vitesse de roue du robot nécessaires de gauche ou de droite.
Le code gère le réglage de la puissance moteur pour corriger pour atténuation du couple à des vitesses plus élevées et un couple plus élevé nécessaire pendant l’accélération plus élevée. La tension de la batterie est contrôlée afin d’éviter d’endommager les batteries LiPo. Le code gère également la communication Bluetooth entre un smartphone.