Self-Balancing Upside Down Pendulum

9 Schritt:Schritt 1: Sammeln Sie Parts Schritt 2: Das Chassis Schritt 3: Die Steuerung der DC-Motoren mit PWM - keine Gyro-Verbindungen Schritt 4: Die MPU6050 3 Achsen-Gyro und Beschleunigungsmesser Schritt 5: Der endgültige System Schritt 6: Die harten Summen! Schritt 7: Ein Hinweis auf die Savitsky Golay-Filter Schritt 8: Einschalten Schritt 9: Epilogue - eine Verbesserung.

Self-Balancing Upside Down Pendulum


Dies ist mein Versuch umgekehrten Pendels Balancieren auf einem Zwei-Rad-Fahrwerk Wagen. Ich hatte die andere, die hier zu sehen und wurde inspiriert, meine eigene Version zu versuchen. Das Arduino ist wunderbar einfach zu programmieren und können Sie es in ein paar Stunden abholen. Ich schaute auf die Segways sowie und verglichen ihre Vorgehensweise - die ganz ähnlich ist. Anders als die meisten anderen, die ich nicht verwenden PID-Regelung, aber staatlich Rückkopplungssteuerung. Mein Hintergrund ist in Steuersysteme, damit ich fand es sehr interessant. I Rückwinkelposition, Geschwindigkeit und Beschleunigung und fügen Nachstellzeit. Die integrale Maßnahmen erforderlich, um die bleibende Regelabweichung auf Null zu halten. Ohne sie das Pendel Flops hin und her und nicht so gerade bleiben. Das Pendel selbst ist nur eine Länge von Aluminium (etwa 500 mm lang) mit einer Aluminium-bob aufgeschraubt. Ich habe diesen Teil selbst zu machen, aber es hatte herumliegen aus einer früheren invertierte Pendel Projekt auf einem alten XY-Plotter, die an sich war recht interessant. Sie könnten ein Stück Bambus statt o, was Sie herumliegen haben zu verwenden. Sich herausstellen, dass je länger ist die Pendelwelle desto leichter ist es zu kontrollieren. Versuchen Ausgleich einen Bleistift auf der Hand - jetzt versuchen, einen langen Besenstiel und sehen, wie viel einfacher es ist. Sie mögen denken, dass Sie Ihre Zeit experimentieren mit solchen Dingen, aber nicht vergessen, dass das Steuersystem, das eine Rakete in der Luft oder ein Laufroboter alle Arbeiten auf ähnlichen Prinzipien (aber viel schwieriger!) Natürlich ist der Segway funktioniert auch nach ähnlichen hält Zeilen außer Sie darauf stehen und Sie Teil der Steuerung werden loop.Here ist ein Video von einem gewissen Auckland University of Technology (AUT) Studenten mit dem Original-Pendel (ein größeres) auf einem xy-Plotter. ganz analog. Dies inspirierte mich, den einen auf Rädern während der Weihnachtsfeiertage zu tun! Beachten strukturelle Resonanz der Welle. Alle mechanischen Systeme haben Strukturresonanzen, und sie sind ein Kopfschmerz beim Anlegen Feedback um sie herum, wenn bei hoher Bandbreite. Sie erfordern in der Regel eine so hohe Bandbreite wie möglich für die Geschwindigkeit der response.Step 1: Sammeln Parts



Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Alle 9 Artikel anzeigen

Sie benötigen die Gleichstrommotoren chassis.2 Autochassis DC-Getriebemotor, Antriebsdrehzahl 150 6V / 12V optional Räder 65mm. Erhältlich aus
taobao.com
http: //item.taobao.com/item.htm spm = a1z10.5-c.w400 ...
oder in Englisch von den aliexpress
http: //www.aliexpress.com/store/product/2-wheel-dr ...
Sie sind hochwertige Räder aber nicht können cheap.You natürlich verwenden billigeren. Ich bevorzuge die teuren, seit ich werde tun, eine Menge grobe Arbeit auf sie!
Sie müssen auch ein L298 H-Brücke - sehen diese instructable
http: //www.instructables.com/id/Arduino-Modules-L2 ...
Hier kaufen
https://www.sparkfun.com/products/9670
Sie müssen auch ein Arduino Uno
http://arduino.cc/en/main/arduinoBoardUno
Sie müssen auch Anschlussdrähte für die Arduino so dass Sie nicht zu löten - sie nur in die Stifte stecken. Weibliche an beiden Enden. Kaufen Sie von Sparkfun oder Hobbytronics
http://www.hobbytronics.co.uk/cables-connectors
Um die männliche Endung für die Arduino Pin-Buchse I nur Kopfstifte ich herumliegen hatte gewöhnen. Brechen sie können je nach Bedarf und biegen sie in rechten Winkeln.
http: //www.hobbytronics.co.uk/cables-connectors/pc ...
1 LiPo Akku 11,1V tun - weil sie leistungsfähig und leicht. Schlagen Sie eine eigene Ladegerät mit es zu kaufen. Am besten, sicher und nicht in Brand gesetzt, um Ihr Haus zu sein! Kann eine anständige Batterie + Ladegerät von Hobbyking kaufen
http: //www.hobbyking.com/hobbyking/store / __ 8934__T ...
http: //www.hobbyking.com/hobbyking/store / __ 43038 __...
Ich habe Over-Engineering diese ein wenig, aber zumindest die Batterien zuletzt eine lange Zeit zwischen den Ladevorgängen.
Schließlich benötigen Sie den Gyro-Beschleunigungsmesser - eventuell das billigste aller Teile, die MPU6050. Ich kaufte etwa 4 nur für den Fall für andere Projekte. Suchen Sie einfach nach auf Bay.About 2 € US jeweils für die Breakout-Board! Sie müssen die Kopfstifte auf sie zu löten. Es läuft ab 3,3 V, die Ihre Arduino Uno hat als Ausgang.
Misc Dinge, die Sie brauchen, sind ein paar 10k Töpfe und eine Batterie-Stecker für Ihren Arduino. Sie müssen auch ein Blatt in geeigneter Weise geschnitten Plexiglas oder ein Stück Plastik. Ich lebe in Neuseeland und wir können diesen Eintrag von Jaycar erhalten
http://www.jaycar.com.au/productView.asp?ID=HM9509
Sie können auch größere Platten zu kaufen von Baumärkten.
Empfehle ich den Kauf Kabelbinder um die Kabel zu bündeln, so dass die ganze Sache ist robust. Es wird über viele Male während der Tests fallen so muss robust sein.
Ein Kippschalter mit Ein-und Ausschalten der unit.Step 2 benötigt: Das Chassis

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Wie Sie aus dem Bild sehen kann, hat das Chassis die Plexiglasscheibe auf sie angeschraubt. Um dies zu tun, müssen Sie die Plexiglas im rechten Winkel zu biegen. Zum Glück habe ich einen Hot-Wire-System, dies zu tun bei der Arbeit, aber es ist möglich, eine Heißluftpistole verwenden, wie zum Abisolieren Farbe von Wänden! Sie müssen schnell sein und üben aber sonst wirst du die falsche Form. Dann einfach einige Löcher bohren und befestigen Sie an den Motor-Chassis. Wenn Sie nicht, diesen Ansatz verwenden wollen, dann können Sie alles, was auf der jeweils anderen zu stapeln, wie andere getan haben. Was immer Sie tun, halten Sie den Gyro so nah an der Mitte der Achse wie möglich und legen Sie sie flach mit die Stifte ragte. nicht die Gyro halber Höhe zu montieren oder Sie eine Fehler mit Ihren Messwerte zu erhalten. Ich habe nicht das Aluminium Pendelstab auf den ersten - es wird nur auf durch das Bohren ein paar Löcher und umklammerte sie mit Kabelbindern (Kabelbinder) gehalten .Instead der Plexiglasscheibe könnten Sie eine Kunststoff-Box vielleicht, wenn Sie verwenden, kann man finden Sie den richtigen width.Here ist ein Lehr-Video, wie man Plexiglas biegen.

Sobald das Chassis gebaut nicht nur Draht alles bis temped werden und versuchen das komplette System. müssen Sie zuerst zu testen, die Motorsteuerung über die H-Brücke für sich - ohne Gyro (mit dem Arduino), und testen Sie dann die Gyro mit der Arduino Beobachtung der Neigungswinkel in Echtzeit - und keine Motoren. Die Verdrahtung wird das gleiche auf den Arduino sein, wenn wir die komplette Pendel so keine Notwendigkeit, erneut wire.Step 3: Steuerung der DC-Motoren mit PWM - keine Gyro-Verbindungen

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

So können Sie zunächst müssen die Uno und die L298 H-Brücken-Berg. Nur ein paar Löcher zu bohren und befestigen über kleine Schrauben und Abstandshalter, wenn Sie mögen. Weil es ein Kunststoffträger Sie brauchen sich nicht um Isolation zu kümmern. Ich bestieg die Uno an der Spitze und der H-Brücken darunter. Die Batterie wird durch Kabelbinder gehalten. Ursprünglich habe ich eine externe Stromversorgung, um die ersten Tests zu tun. Ich schlage vor, Sie verdrahten den L298-Brücke an die Gleichstrommotoren und einige Test ersten. Die Motoren werden von PWM-Wellenformen angetrieben. Die Wellenformen, die aus der Arduino kommen, sind in der obigen Abbildung. Das Arduino kann einen Motor nicht fahren direkt so diese PWM treibt eine H-Brückensteuerung auf, die Spannung zu erhöhen und den Antriebsstrom. Einige H-Brücken zwei Logikeingänge - einer hielt hoch ist und der andere für Low nach vorn, und das Gegenteil für die Rückseite. Dies ist der Fall für die, die wir hier verwenden. Andere haben interne Logik und benutzen Sie einfach High / Low für vorwärts und rückwärts. Die analogWrite (Pin, Zahl von 0 bis 255) Befehl gibt die Stärke des PWM, die im wesentlichen, wenn ausgemittelt gibt uns eine DC-Komponente, die von 0 bis maximal 255 für volle Geschwindigkeit variiert !! Zum Beispiel mit analogWrite (10.255) schreibt max PWM an Pin 10 (die nur ist DC 5V), analogWrite (10.128) ergibt 50% Geschwindigkeit an Pin 10 und analogWrite (10,64) ergibt Quartal Geschwindigkeit. Stift 10 wäre dann an die PWM-Eingang des H-Brücke verbunden sein. Siehe Wellenform-Diagramme.
Bitte zuerst lesen
http: //www.instructables.com/id/Arduino-Modules-L2 ...
Wir werden die 5V geregelten Spannungsausgang für die Potentiometer höher verwenden.
Dann folgen Sie der Anleitung, Gleichstrommotoren von John Boxall
http: //tronixlabs.com/news/tutorial-l298n-dual-mot ...
folgen seine Verbindungen, wie wir sie in unserem Programm verwenden.
Führen Sie dann seinem Beispiel und prüfen, ob beide Motoren drehen in die gleiche Richtung !! Wenn nicht, dann umpolen auf einem der säumige Motoren. Ich lehnte mich eine Menge von seinem Arduino Tutorial.
Verbindungen sind wie folgt:
Arduino ------> L298 H-Brücke
D10 -------------> 7
D5 ---------------> 12
D9 ---------------> IN1
D8 ---------------> IN2
D7 ---------------> IN3
D6 ----------------> IN4
Plus die Motoranschlüsse.
Vergessen Sie nicht, null Volt aus dem Arduino zu den null Volt auf der H-Brücke zu verbinden. In der Tat die null Volt-Anschluss auf der H-Brückenplatte wurde ziemlich überfüllt und ich landete Löten alle zusammen sie robuster zu machen.
Seine Demo-Programm ist wie folgt. Stellen Sie sicher, es funktioniert erste, bevor Sie zum Gyro Teil.
  // Motorsteuerung Stifte verbinden / Digital-Pins Arduino 
  // Motor einem 
  int enA = 10; 
  int in1 = 9; 
  int in2 = 8; 
  // Motor zwei 
  int ENB = 5; 
  int in3 = 7; 
  int in4 = 6; 
  Leere setup () 
  { 
  // Stellen Sie alle
 Motorsteuerstifte mit den Ausgängen 
  pinMode (ENA, OUTPUT); 
  pinMode (ENB, OUTPUT); 
  pinMode (in1, OUTPUT); 
  pinMode (in2, OUTPUT); 
  pinMode (in3, OUTPUT); 
  pinMode (in4, OUTPUT); 
  } 
  Leere demoOne () 
  { 
  // Diese Funktion werden die Motoren in beide Richtungen mit einer festen Geschwindigkeit laufen 
  // Am Motor A schalten 
  digital (in1, HIGH); 
  digital (in2, LOW); 
  // Solldrehzahl auf 200 von möglichen Bereich 0 ~ 255 
  analogWrite (ENA, 200); 
  // Am Motor B drehen 
  digital (in3, HIGH); 
  digital (in4, LOW); 
  // Solldrehzahl auf 200 von möglichen Bereich 0 ~ 255 
  analogWrite (ENB, 200); 
  Verzögerung (2000); 
  // Jetzt Motor Richtungen ändern 
  digital (in1, LOW); 
  digital (in2, HOCH); 
  digital (in3, LOW); 
  digital (in4, HIGH); 
  Verzögerung (2000); 
  // Jetzt schalten Sie Motoren 
  digital (in1, LOW); 
  digital (in2, LOW); 
  digital (in3, LOW); 
  digital (in4, LOW); 
  } 
  nichtig demoTwo () 
  { 
  // Diese Funktion werden die Motoren über die Bandbreite der möglichen Geschwindigkeiten 
  // Beachten Sie, dass maximale Geschwindigkeit durch den Motor selbst und die Betriebsspannung ermittelt 
  // Die PWM-Werte von analogWrite () gesendet werden, sind Bruchteile der Geschwindigkeit von Ihrer Hardware möglich 
  // Auf Motoren schalten 
  digital (in1, LOW); 
  digital (in2, HOCH); 
  digital (in3, LOW); 
  digital (in4, HIGH); 
  // Von Null auf Höchstgeschwindigkeit beschleunigen 
  for (int i = 0; i <256; i ++) 
  { 
  analogWrite (ENA, i); 
  analogWrite (ENB, i); 
  Verzögerung (20); 
  } 
  // Abzubremsen von Maximaldrehzahl auf Null 
  for (int i = 255; i> = 0; -I) 
  { 
  analogWrite (ENA, i); 
  analogWrite (ENB, i); 
  Verzögerung (20); 
  } 
  // Jetzt schalten Sie Motoren 
  digital (in1, LOW); 
  digital (in2, LOW); 
  digital (in3, LOW); 
  digital (in4, LOW); 
  } 
  Leere Schleife () 
  { 
  demoOne (); 
  Verzögerung (1000); 
  demoTwo (); 
  Verzögerung (1000); 
  } 
Schritt 4: Die MPU6050 3 Achsen-Gyro und Beschleunigungsmesser

Self-Balancing Upside Down Pendulum

Was wir brauchen, ist ein Signal proportional zum Neigungswinkel -, die die Y-Achse in der Software und dieser Gyro ist, wenn sie sitzt flach. Wieder einmal ist nicht empfehlenswert nur Springen auf die endgültige Lösung habe ich, testen Sie die Gyro auf eigene erste und beobachten Sie an der seriellen Schnittstelle, was der Winkel ist, wie Sie es hin und her (ohne Motorantrieb) zu kippen. so dass Sie, um das Programm von dieser Verbindung von Jeff Rowberg, die die Treibersoftware schrieb verwenden müssen
https: //github.com/jrowberg/i2cdevlib/blob/master / ...
Sie müssen auch zu seiner Bibliothek (gleicher Link) zu verwenden. Wenn sein Programm nicht kompilieren Sie seine Bibliothek nicht haben
auf der Arduino installiert i2cdevlib. Sie können es von dieser unverwüstlichen downloaden
http: //www.instructables.com/id/Balancing-Instruct ...
Wenn Sie das Testprogramm Sie sind berechtigt, auch se, dass, wenn das Pendel bei 90 Grad vertikal, dass der Winkel wird durch nichts sagen bis zu 10 Grad +/- Offset !! Dies variiert von Gerät zu Gerät (Ich bin zu glauben), und deshalb habe ich ein Trimmpoti auf das endgültige Design.
Die Verdrahtung der MPU6050 Gyro ist unkompliziert
Verbinden Sie VCC und GND zu 3,3 V und Masse des Arduino (NOT 5V!)
Int verbinden (die Interrupt) Pin auf Arduino Pin 2
verbinden SCL und XDA zu den entsprechenden gleichen Buchstaben gekennzeichneten Pins auf der Arduino. Dies ist für den I2C-Bus.
Die anderen Stifte werden nicht verwendet.
Ich bestieg das Gyro auf einem kleinen Stück Plastik über zwei kleinen Schrauben (Löcher sind bereits auf dem Gerät natürlich gebohrt). Ich habe dann eine Klebepistole, um die Montage am Rad Chassis kleben. Hier ist das Testprogramm für den Gyro. Dabei spielt es keine Macht der Motoren, einfach verwenden, um zu testen. Verwenden Sie den seriellen Monitor auf dem Arduino zu Gyro-Ausgänge angezeigt.
------------------------------------------------------------------------------------------------------------------
// I2C-Geräteklasse (I2Cdev) Demonstration Arduino Sketch für MPU6050 Klasse mit DMP (Motion v2.0)
// 2012.06.21 von Jeff Rowberg
// Updates sollte (hoffentlich) immer zur Verfügung stehen an https://github.com/jrowberg/i2cdevlib
Änderungsprotokoll:
// 2013.05.08 - hinzugefügt nahtlose Fastwire-Unterstützung
// - Hinzugefügt Notiz Kreiselkalibrierung
// 2012-06-21 - hinzugefügt Notiz Arduino 1.0.1 + Leonardo Kompatibilitätsfehler
// 2012-06-20 - verbesserte FIFO Überlauf Handling und vereinfachte Lesevorgang
// 2012-06-19 - komplett neu angeordneten DMP Initialisierungscode und Vereinfachung
// 2012-06-13 - Kreisel und Beschleunigungsdaten vom FIFO-Paket statt Lesen ziehen direkt
// 2012-06-09 - Fix Broken FIFO-Lesefolge und ändern Unterbrechungserkennung auf steigende
// 2012-06-05 - fügen Schwerkraft kompensiert anfänglichen Referenzrahmen Beschleunigungsausgangs
// - Fügen Sie 3D-Mathematik-Helfer-Datei auf DMP6 Beispiel Skizze
// - Fügen Euler Ausgang und Yaw / Pitch / Roll-Ausgabeformate
// 2012-06-04 - entfernen accel Offset Clearing für bessere Ergebnisse (dank Sungon Lee)
// 2012-06-01 - Festkreiselempfindlichkeit zu 2000 Grad / s statt 250 sein
// 2012-05-30 - Grund DMP Initialisierung Arbeits
/ * ============================================
I2Cdev Gerätebibliothek Code ist unter der MIT-Lizenz gestellt
Copyright (c) 2012 Jeff Rowberg
Hiermit wird unentgeltlich, jeder Person, die eine Kopie
der Software und der zugehörigen Dokumentationsdateien (die "Software"), zu umgehen
in der Software ohne Einschränkung, einschließlich und ohne Einschränkung der Rechte
zum Verwenden, Kopieren, Ändern, Zusammenführen, zu veröffentlichen, zu verbreiten, weiter lizenzieren und / oder zu verkaufen,
Kopien der Software und den Personen, denen die Software ermöglichen
eingerichtet, so zu tun, unterliegt den folgenden Bedingungen:
Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in enthalten sein
Alle Kopien oder wesentlichen Teilen der Software.
DIE SOFTWARE WIRD "WIE SIE IST", OHNE JEGLICHE GARANTIE, AUSDRÜCKLICH ODER
EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTGÄNGIGKEIT,
EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE
AUTOREN ODER COPYRIGHTINHABER HAFTBAR FÜR ANSPRÜCHE, SCHÄDEN ODER ANDERE
HAFTUNG, SEI ES IN EINEM VERTRAG, Schadensersatz oder anderen, DIE SICH AUS,
AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDLUNGEN MIT
Der Software.
===============================================
*
/ I2Cdev und MPU6050 müssen Bibliotheken installiert werden, oder aber die CPP / h-Dateien
// Für beide Klassen müssen in der Include-Pfad zu Ihrem Projekt
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
// # Include "MPU6050.h" // nicht nötig, wenn mit Motion Include-Datei
// Arduino Draht-Bibliothek ist erforderlich, wenn I2Cdev I2CDEV_ARDUINO_WIRE Umsetzung
// Wird in verwendet I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
// Class Standard I2C-Adresse 0x68
// Spezifische I2C-Adressen können als Parameter hier übergeben werden
// AD0 low = 0x68 (Standard für SparkFun Breakout und InvenSense Evaluation Board)
// AD0 hoch = 0x69
MPU6050 mpu;
// MPU6050 mpu (0x69); // <- Einsatz für AD0 Hoch
/ * ================================================ =========================
HINWEIS: Zusätzlich zu den Verbindungs ​​3,3 V, GND, SDA und SCL, diese Skizze
hängt von der MPU-6050 INT Pin mit dem Arduino verbunden
externen Interrupt # 0 Stift. Auf der Arduino Uno und Mega 2560 ist dies
Digital-I / O-Pin 2.
* ================================================= ======================== *
* ================================================= ========================
HINWEIS: Arduino v1.0.1 mit dem Leonardo Bord erzeugt einen Compiler-Fehler
bei Verwendung Serial.write (buf, len). Die Teekanne Ausgang benutzt diese Methode.
Die Lösung erfordert eine Modifikation des Arduino USBAPI.h-Datei, die
ist zum Glück einfach, aber ärgerlich. Dies wird im nächsten IDE festgesetzt
Freisetzung. Für mehr Informationen, siehe diese Links:
http: //arduino.cc/forum/index.php/topic,109987.0.h ...
http: //code.google.com/p/arduino/issues/detail id = ...
* ================================================= ======================== * /
// Auskommentieren "OUTPUT_READABLE_QUATERNION", wenn Sie die tatsächliche sehen wollen
// Quaternion-Komponenten in ein [w, x, y, z] Format (nicht am besten für die Analyse
// Auf einem entfernten Host, wie Verarbeitung oder etwas obwohl)
// # Definieren OUTPUT_READABLE_QUATERNION
// Auskommentieren "OUTPUT_READABLE_EULER", wenn Sie sehen wollen, Euler-Winkel
// (In Grad) von Quaternionen aus dem FIFO berechnet.
// Beachten Sie, dass Euler-Winkel leiden Gimbal Lock (für weitere Informationen siehe
// Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Wie funktioniert das Gleichgewicht? Negative Rückkopplung wird durch die Erstellung eines Fehlers zwischen dem gewünschten Neigungswinkel und dem gemessenen Wert von dem Kreisel verwendet. Wenn die beiden unterscheiden, dann wird eine Steuerspannung an beide Motoren angewendet gleichzeitig den Wagen vorwärts oder rückwärts zu fahren, diesen Winkel zu korrigieren. Ein solcher Ansatz ist als Proportionalregelung bekannt und leidet an der Tatsache, daß dies eine ziemlich große Fehler, der erzeugt wird, sein. Theorie sagt uns, dass durch die Erhöhung der Menge der Verstärkung auf den Fehlerpfad, dass dieser Fehler reduziert. Leider, um die Fehler klein genug, erfordert einen so großen Gewinn, dass die Schleife instabil wird und der Wagen umfällt. Wir können Sachen durch Hinzufügen einer zweiten Amtszeit, die proportional zur Ableitung des Fehlersignals, wenn eine zweite Verstärkungsausdruck ist zu verbessern. Dies wird als Differenzregelung bekannt und wann der Proportionalterm hinzugefügt wird als PD oder PD-Steuerung bekannt. Die D-Term stabilisiert das System und verringert die Instabilität. Dass die Antwort wäre, außer dass der Fehler nicht immer auf Null zu gehen, und es gibt eine endliche Differenz übrig. Der Wagen wird wieder Flop und nach vorn und nicht aufbleiben gerade. Wir können einen Begriff, der ein Integrator, der den Fehler wegnimmt ist hinzuzufügen. Leider ist diese dritte sogenannte I tigen, wenn in zu groß bei einer Menge führt zu einer Instabilität fördern. Daher muss ein Kompromiss zwischen den drei Bedingungen, was als PID-Regler bekannt erfüllt werden. Tuning PID-Regler ist ein bisschen wie eine Kunst, und es gibt Stimmen Regeln, aber sie sind nicht ganz so gut, wenn Sie eine von Natur aus instabil System wie wir. Allerdings PID funktioniert und anderen instructibles haben es verwendet.
Der Ansatz, den wir hier verwenden, ist die Vorgehensweise, die viele nutzen für die Segway und nicht PID-Regelung. PID wird oft als klassische Regelungstechnik bekannt während das, was wir hier verwenden, wird als Modern Control Theorie bekannt. In der Tat der klassische Ansatz ist nicht, dass alte und das moderne Ansatz ist nicht so modern! Der moderne Ansatz verwenden wir als Pole-Placement-Staat erteilt bekannt. Darin wir Feedback Anteile der Winkelposition, Geschwindigkeit und Beschleunigung. Die Segway indestructibles verwenden nur Positions- und Geschwindigkeitsrückkopplung zu dem besten Wissen. Ich fügte einen dritten Zustand der Beschleunigung und eine vierte Staat, der Integration oder Integral ist. So etwas ist in Text Bücher in der Tat festgestellt, aber selten in Demonstrationen gesehen. Wir würde normalerweise ein mathematisches Modell, dh der Differentialgleichungen beschreiben die komplette dynamisches System. Hier verwende ich einen einfacheren Ansatz und stimmen Sie es wie ein PID. Es besteht eine Ähnlichkeit zwischen PD-Steuerung und Zustandsrückführung, die nur verwendet Positions- und Geschwindigkeitsrückkopplung. Die Geschwindigkeitsrückkopplung wird als Rate Feedback bekannt und liegt nur einen Differentialausdruck, die von einem Sensor, anstatt explizit berechnet gelesen wird. Der Unterschied hier ist, dass die Differenzierung in den Rückkopplungsweg anstelle des Vorwärtspfades wie in dem Fall mit der PID. Dies gibt ein wenig mehr Dämpfung auf Kosten eines etwas langsameren System - kann aber leicht durch eine Erhöhung der Gesamtverstärkung ausgeglichen werden. So, hier messen wir direkt Winkelfehler mit dem Gyro und Winkelgeschwindigkeit von dem Beschleunigungsmesser.
Der dritte Zustand ist die Beschleunigung, die wir berechnen (es gibt bessere Möglichkeiten, aber für jetzt Ich benutze diese Methode) direkt durch Differenzierung Geschwindigkeit. Durch Steuern der Beschleunigung kann man den Strom von den Motoren gezogen kontrollieren und zu verbessern Störunterdrückung. Wenn Sie nicht die Beschleunigung messen mit einem Wandler (was der Normalfall ist), dann müssen Sie es durch Differenzierung oder mit Hilfe eines Zustandsbeobachter oder Kalman-Filter zu erstellen.
So ist das Steuersignal
u (k) = - K * [Kp * y (k) + Kd * y (k) _dot + Ka · y (k) _double_dot]
wobei K Gesamtverstärkung von dem Potentiometer und Kp eingestellt, Kd und Ka gibt die proportionale Verstärkung, derivative Verstärkung und Beschleunigung Zunahme auf. Hier y (k) stellt den aktuellen Wert aus dem Gyro-Sensor (Winkel), y (k) _dot vorhanden Lesen der Winkelgeschwindigkeit und y (k) _double_dot ist der aktuelle Messwert der Beschleunigung aller im Zeitpunkt k. In dem Diagramm ist Integralverstärkung Ki.
Digital zu differenzieren können wir eine einfache Euler-Ansatz verwenden. Für eine Stichprobenintervalls dT Sekunden (hier ist es dT = 0,01 für einen 100 Hz Abtastrate) können wir Geschwindigkeit omega differenzieren, um die Beschleunigung Accel als geben
// Berechnung Winkelbeschleunigung von Winkelgeschwindigkeit
omega_old = omega; // Store letzten Wert der Beschleunigung
omega = ... Lesen Sie Geschwindigkeit von Beschleunigungs hier
// Unterscheiden
accel = (omega-omega_old) / dt;
Normalerweise lassen wir dT out (dh Satz dT = 1), wie es zu einem Verstärkungsausdruck, die wir separat einzustellen.
Dies ist eine recht grobe Unterscheidungsmerkmal und in der Tat jede Art von reinen Unterscheidungsmerkmal ist eine schlechte Idee für einen Regelkreis, da sie verstärkt Hochfrequenzrauschen und regt strukturelle Resonanz. Deshalb haben wir Tiefpassfilter die differenzierte Ausgabe. verwenden wir ein erster Ordnung Tiefpassfilter - würde eine Weile dauern, bis alle der Theorie hier zu erklären. Dieser Filter ist nicht auf den obigen Diagramm dargestellt. (Nur die idealen Fall).
Integrieren wir eine einfache Euler-Integration. zB um einen Fehler zu integrieren
// Integration der Fehler
// Sollwert = 0 für null Grad vertikal
error = Sollwert-output_value;
y_out_past = y_out; / store / letzten Wert des Integrator-Ausgangs
y-out = y_out_past + dT * Fehler;
// Ja, Sie können die y + = Typ Notation im Code verwenden, aber es verbirgt, was geschieht, und das Verständnis
wobei y_out ist der integrierte Ausgang. normalerweise wir weglassen dT und skalieren später dh dT = 1. Sie könnten im Prinzip mit einem Summen die Integration zu tun, aber die obige Methode ist eine bessere - rekursive Methode abtastwertweise und erfordert nur minimalen Stauraum. Summierung, müssten wir eine Reihe von vergangenen Werten zu speichern. Sie können auch die Integration über z-Transformationen durchführen und eine etwas genauer Version genannt Trapez Integrator. Keine Notwendigkeit für diese Komplikation hier, obwohl ich verwenden z-Transformationen für unsere einfachen Tiefpassfilter.
Die Abtastfrequenz: Ich habe vorherige Segway-Code, um die Sampling-Frequenz auf 100 Hz eingestellt und konnte es nicht schneller gehen. Ich überprüfte mit einem Oszilloskop, dass dies die wahre Abtastfrequenz durch Werfen einer Logik-Flag auf und ab - wahr und falsch ganz Ausführung der Schleife. I E-Mail einen Digitalausgang und bekam einen Platz Weg. Ich maß die Halbperiode und es war genau richtig 0.01secs = dT. Das Blockschaltbild ist mit voller modern Feedback und Integralwirkung gezeigt.
Ich habe auch die speziellen sogenannten komplementären Filter verwendet, um die Beschleunigungsmesser und Kreisel-Messwerte zu kombinieren. Dies ist, weil der Beschleunigungsmesser ist gut bei niedrigen Frequenzen, während der Kreisel ist gut bei hohen Frequenzen, während das Gegenteil der Fall ist für die schlechte Leistung. Diese versucht, die Wirkung von Kreiseldrift zu verringern. Ein weiterer Ansatz ist, ein Kalmanfilter zu verwenden, aber dies ist hier nicht dargestellt. Details von komplementären Filtermethode wird in den untenstehenden Link dargestellt.
http: //www.chrismarion.net/index.php option = com_co ...
Ein Hinweis auf die Savitsky Golay-Filter: Die Grundidee ist in dem Diagramm (unter dem Staat-Feedback Diagramm dargestellt) von diesem link.Step 7 genommen gezeigt

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Viele Segway Projekte scheinen zu verwenden, was bekannt ist als Savitsky Golay-Filter, um zu versuchen und herausmitteln die Gyro Lesungen und entfernen Sie fehlerhafte Messwerte. Diese spezielle Filter ist, was als ein endlicher Impulsfilter (FIR) bekannt und leider ihre Phasenverschiebung ist nicht so gut. Ein negativer Phasenverschiebung hat eine destabilisierende Wirkung auf einen Regelkreis. so, wenn Sie normale Filterung sagen, Musik oder Sprache, vielleicht ist Phase nicht so wichtig, aber wenn Sie sind in einem Regelkreis arbeiten Sie müssen vorsichtig sein und nicht verschwenderisch auf Phasenverzögerung sein. Während ich damit einverstanden, dass wir brauchen einen Filter, weiß ich nicht damit einverstanden, dass dieser Filter ist geeignet. Ich versuchte es und es verursacht weniger Stabilität als ohne. Sie können dies ausschalten, indem Sie auf einem noch niedrigeren Bandbreite Ich nehme an, zu handeln, aber ich beschlossen, nur ein einfaches Tiefpassfilter verwenden, statt. (1 / (1 + Stau), wenn Sie solche Dinge zu verstehen. Stellen Sie sicher, die cut-off war weit genug weg (14 Hz) von der Unity-Gain-Übergangsfrequenz der Schleife (die ich ergreifen, um ca. 1 Hz). Eine Regel häufig in Steuertechnik eingesetzt wird, um mindestens das 10-fache höher als die höchste Frequenz von Interesse abzutasten. Die übliche Nyquist-Abtastrate in der Signalverarbeitung wird genommen, um nur doppelt so hoch ist, aber in der Steuerung braucht es viel höher sein, da digitale Steuerung hat eine inhärente Ein-Schritt-Zeitverzögerung vom Eingang zum Ausgang durch den Computer! Jede Verzögerung in einem Regelkreis verursacht negativ verlaufende Phase, die wiederum destabilisiert die Schleife. Die Savitsky Golay-Filter Frequenz- und Phasengang (obere Linie) wurde am MATLAB aufgetragen und obwohl es einen schönen Amplitudengang hat seine Phase dreht sich schwer negativ mit einem steilen Hang. Im Gegensatz dazu die einfache Filter erster Ordnung I benutzen (unteres Diagramm) hat eine kleinere Phasenverschiebung nur bei niedrigen Frequenzen Hauptzweck meines Filters ist es, dämpfen Strukturresonanzen bei hohen Frequenzen. Ohne sie der gesamte Mechanismus schüttelt! Ein weiteres Problem mit einigen FIR-Filter ist, dass sie oft nicht minimale Phasen sein - und dieses ist nur, dass. Das heißt, es gibt viel höheres Phasenverschiebung als eine entsprechende Filter, der Mindest phase.Step 8: Einschalten

Self-Balancing Upside Down Pendulum

Self-Balancing Upside Down Pendulum

Am besten ist es, um die Verstärkung auf Null auf Ihrem Gewinn Potentiometer Tun und den Phasenwinkel aus dem Gyro überwachen. Dann stellen Sie den Offset-Topf, so dass die Ausgabe auf der seriellen Schnittstelle angesehen nahe null, wenn vertikale.
Sie können dann erhöhen Sie die Verstärkung langsam, bis er ausgleicht. Ich habe ein Video davon arbeiten

Selbstverständlich können Sie haben, um die verschiedenen staatlichen Rückkopplungsfaktoren für Ihr System zu ändern. Die eine Menge Töpfe natürlich ist - Sie können diese am schnellsten, indem Töpfe für jeden Gewinn machen! Ich tat es auf die harte Tour in Software. Jetzt eine Demonstration dessen, was ich durch strukturelle Resonanz bedeuten. Ich habe bewusst setzen die Verstärkung zu hoch und der gesamte Aufbau-Shakes.

Ich habe auch eine Demo-Version des PID. Ähnlich wie bei anderen Projekten hier aber dieses hat einen Filter auf der Vorhaltezeit.

Ich habe dann tauschten die kleinere Hälfte Meter Pendel mit dem einem Meter ein. Ich hatte, um die Parameter des Programms zu ändern. I reduziert die Filter 3dB Frequenzen 7 Hz (14 Hz aus). Diese abgeschwächte Strukturresonanzen. Ich hatte auch ein paar mehr von den staatlichen Rückkopplungsfaktoren optimieren und fügen Sie ein wenig mehr Nachstellzeit auf den Fehler.

Das Arduino-Datei für das größere Pendel als BFP1_infStep 9 angebracht: Epilogue - eine Verbesserung.

Self-Balancing Upside Down Pendulum
Ich fand, dass, obwohl das System funktionierte, dauerte es nicht lange genug für nahezu ausgeglichen zu bleiben -, die es getan haben sollte. Die Lösung war, verschiedene Motoren mit einer Untersetzung von etwa 30 zu verwenden: 1 http: //www.aliexpress.com/store/product/Two-self-b ... Diese Motoren haben auch Drehgeber, in dem gebaut wird nützlich sein, zukünftige Änderungen. Das System funktionierte nahezu perfekt und sehr robust. Sie können es klopfen und es bleibt immer noch und auch die Dinge auf die Spitze auszugleichen, wie im Video unten gezeigt. Die ursprüngliche Plexiglaschassis für das Projekt brach, als ich fiel auf den Boden und damit die, die Sie in dem Video zu sehen ist ein smarter einem knocked up in wenigen Stunden von einem unserer besten Techniker mit Hilfe eines Laser-Cutter.

Ich fand, dass alle der elektronischen Leiterplatten abgehoben auf einmal zusammen mit der Verdrahtung verbunden und ich es geschafft, sie in eine exakte Kopie von der ursprünglichen template- machte nur besser aus Schlitz. Der Job dauerte etwa 15 Minuten.