Étape 3: Démo le contrôleur PID
Eflite Outrunner moteur
35 amp ESC
11.1 accu LiPo V
1/2 PO EN PVC
Une vieille scie cheval pour un stand
Le contrôleur se penche sur l’angle du bras est suspendu à l’aide de notre accéléromètre et gyroscope et utilise ces données pour déterminer combien de courant pour jeter le moteur afin de faire au niveau du bras.
Parce que l’ESC sert à brancher votre moteur dans un bus de récepteur radio conçu pour les servos, il est relativement facile de contrôler un moteur AC brushless avec une ESC sur un Arduino grâce à la Servo.h + Servo.cpp dans votre dossier de bibliothèques. Je crois que le protocole servo utilise pulse position modulation (PPM) qui peut être réalisée à l’aide d’un PWM épingler sur votre arduino avec la fonction servo.write().
http://www.Hooked-on-RC-Airplanes.com/servo-Tutorial.html
Il est important d’être conscient de sécurité lors de l’exécution de ces moteurs, car ils vont très vite. * TOUJOURS porter des lunettes de sécurité * * omets l’hélice jusqu'à ce que vous devez absolument TI *
Vous devez écrire une fonction pour arm() ; votre ESC afin que vous pouvez régler sa vitesse. Fondamentalement, vous devrez écrire l’ESC, bas, haut et puis faible encore.
http://www.Arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1226292633 Ce forum va plus comment contrôler un moteur brushless et est où j’ai obtenu cadre pour mon arm() ; fonction et setSpeed () ; fonction.
Vous pouvez simplement utiliser un servo.write(0-180) pour régler votre vitesse sur votre esc, mais vous pouvez aussi les mapper sur une échelle de 0 à 100. Vous pouvez télécharger les motor_functions au bas de l’étape. Si cela ne fonctionne pas s’il vous plaît me dire!! Je peux simplement ajouter dans les instructions!
En utilisant ces fonctions vous donne le contrôle complet de moteur. Vous devrez bouger avec votre propre code pour votre ESC particulière. En déclarant nos fonctions capteur indépendamment de la boucle, nous pouvons maintenant courir le moteur et les capteurs en même temps. C’est où j’ai touché mon premier revers majeur. Parce que le moteur tire tellement actuel de la batterie, c’est induire courants dans mon bus I2C. Mon capteur va fonctionner très bien quand le moteur a été éteint, mais quand le moteur était en marche que les valeurs étaient quasiment vides de sens.
J’ai pris les mesures suivantes pour nettoyer le bruit :
J’ai ajouté un anneau de ferrite à l’esc (rétrospectivement, cela probablement juste protège l’ESC de bruit-appris à utiliser ceux-ci après mon Zagi s’est écrasé à http://www.hobbyking.com/hobbyking/store/__23206__Clip_On_Soft_Ferrite_Rings_5pc_.html)
J’ai monté les capteurs aussi loin que possible du moteur
Tous mes fils pour essayer de minimiser l’induction actuelle torsadés
J’ai trouvé ces sites Web pour aider à résoudre mon problème :
//this http://DIYDrones.com/Forum/topics/PID-Controller-I2C-bus-Noise-from-ESC?xg_source=Activity est un fil que j’ai commencé sur DIY drones
http://forum.allaboutcircuits.com/showthread.php?t=41916
Cela a semblé minimiser l’erreur de capteur, mais encore environ 5 sur chaque 20 valeurs étaient hors de +-10 degrés. Pour cela nettoyer j’ai véhiculée par les valeurs de capteur de :
Construction d’un maton pour contenir 20 valeurs tels qu’ils apparaissent par ordre chronologique
Construction d’un tableau qui a tenu les 20 dernières valeurs triées (ordre croissant ou décroissant ; peu importe car nous recherchons la médiane)
J’ai utilisé une sorte de bulle pour aider à trier mes valeurs
J’ai trouvé ce site pour aider à expliquer comment trier le tableau efficacement :
http://mathbits.com/mathbits/CompSci/Arrays/Sorting.htm
Vous devrez construire des multiples de ces fonctions pour plusieurs valeurs de tri (x, y, z; dx, dy, dz)
Mes fonctions de tri et de la médiane de bulle peuvent être téléchargées en bas de l’étape !
Maintenant que vos valeurs de capteurs sont congrus et vous pouvez contrôler votre moteur à courant alternatif, nous pouvons commencer le contrôle PID réel !
La page wikipedia fait un bon travail expliquant comment votre programme doit être structuré à l’aide de psuedocode. Il y a beaucoup, beaucoup de moyens à mettre en œuvre cette. Cela dépend de combien de temps vous voulez utiliser vos commentaires pour vous integral et derrivative les termes.
vous pouvez trouver mon PID_sample au bas de cette étape!!
Réglage du PID: il existe plusieurs façons de régler un PID. Vous pouvez en logiciel, guess et cocher, je vais essayer à l’aide de la méthode Zieger Nichols.
Quelque sorte, vous démarrez en exécutant uniquement votre sortie avec l’erreur proportionnelle. alors que le terme proportionnel ne dépasse jamais le débit la valeur KP. Fondamentalement, le système oscillera, vous souhaitez amortir autour de votre point de consigne (ou à tout le moins pas augmenter au fil du temps!). Une fois que vous avez trouvé un KP appropriée vous pouvez affecter KD ou KI. Différentes personnes disent des choses différentes quand il s’agit de que l'on faire en premier, mais terme intégral va accélérer une souscorrection vers le point de consigne alors que le terme de derrivative va ralentir une sur-correction.
http://www.youtube.com/watch?v=_qlgWSP-KFK&feature=g-UPL
Après avoir joué avec le code pendant un certain temps il devrait devenir évident comment adaptatif ce type de contrôleur est votre utilisation du système. N’oubliez pas, essayez et feedforward autant que vous savez comment ! Une fois que vous êtes à l’aise n’hésitez plus et installez le contrôleur!!