Theoretische Konzepte
Theoretische Konzepte
In diesem Kapitel werden Sie eine detaillierte Erläuterung der wichtigsten technischen Konzepte und Komponenten wie Motoren, Encoder, Ultraschallsensoren, I2C-Kommunikation, PWM-Signale und LiPo-Akkus erhalten.
3.1 DC-Motoren
Beschreibung
Ein DC-Motor (Gleichstrom) ist ein Motortyp, der bewirkt, dass sich die Motorwelle um ihre Längsachse dreht, wenn ein elektrischer Strom zwischen ihren Anschlusspins angelegt wird. Somit ist der Gleichstrommotor eine Art Aktuator, der elektrischen Strom in Drehbewegung umwandelt.
Dies ist ein Gleichstrommotor. Oben im linken Bild sehen Sie die Welle, das sichtbare Ende des drehenden Teils des Motors. In der Abbildung rechts sehen Sie, wo die Spannung an den beiden Klemmen angelegt werden soll.
Es gibt zwei Teile innerhalb eines Motors: den Rotor (die Welle ist Teil davon) und den Stator. Betrachtet man den Querschnitt eines Motors, so sieht man, dass der Rotor das bewegliche Teil und der Stator das statische Teil ist. Der Stator und der Rotor verwenden sowohl Permanentmagnete als auch Elektromagnete. Je nach Motortyp kann der Stator ein Permanentmagnet sein, während der Rotor ein Elektromagnet ist, oder umgekehrt. Das Einschalten des Elektromagneten erzeugt Anziehungs- und Abstoßungskräfte, die den Motor zum Drehen bringen.
Der Gleichstrommotor dreht sich, wenn wir Gleichspannung über seine beiden Anschlusspins anlegen. Wir können die Drehzahl des Motors variieren, indem wir den Spannungspegel ändern. Außerdem können Motoren in beide Richtungen frei laufen, nur durch Umkehrung der Stromrichtung.
Gleichstrommotoren allein sind nicht sehr gut für eine präzise Bewegung, können aber sehr hohe Drehzahlen liefern.
Wie man Motoren antreibt
Die meisten Elektromotoren benötigen eine höhere Spannung, als von einem Mikrocontroller bereitgestellt werden kann. Um einen Gleichstrommotor von einem Mikrocontroller aus zu steuern, müssen Sie einen Treiber verwenden. Dies kann ein Transistor, ein Relais oder eine H-Brücke sein. Der Arduino Motor Carrier verwendet H-Brücken zum Antreiben der DC-Motoren.
Die H-Brücke ist eine elektronische Schaltung, die vier Transistoren enthält, die so angeordnet sind, dass der Strom zum Steuern der Drehrichtung und der Winkelgeschwindigkeit angesteuert werden kann. Eine ausführlichere Erläuterung der H-Brücke finden Sie in Abschnitt 3.1.4. Es ist üblich, PWM-Signale (Pulse Width Modulation) zu verwenden, um die Drehzahl eines Motors zu steuern, anstatt analoge Spannungen bereitzustellen.
Wenn Sie mit der Arduino IDE einen Gleichstrommotor ein- und ausschalten möchten, können Sie einen digitalWrite Befehl mit HIGH für ON und LOW für OFF verwenden. Wenn Sie stattdessen die Drehzahl des Motors ändern möchten, können Sie den Befehl analogWrite und einen der PWM Pins verwenden.
Hauptmerkmale von Motoren
Bei der Suche nach einem Motor gibt es einige Parameter, die Sie im Datenblatt des Motors finden sollten:
- Geschwindigkeit: Dies wird üblicherweise in U/min (Umdrehungen pro Minute) angegeben und gibt Ihnen eine Referenz darüber, wie schnell sich der Motor drehen kann. Beachten Sie, dass einige Parameter unter bestimmten Bedingungen gemessen werden. Wenn Sie dem Motor eine Last hinzufügen, wird der Motor langsamer, so dass Sie möglicherweise Ihre Motordrehzahl an Ihr spezielles Projekt anpassen müssen. In den Datenblättern wird dieser Parameter üblicherweise als no load(ohne Last) gemessen. Dies gibt die maximale Drehzahl an, die der Motor erreichen kann. In Kapitel 2 haben wir Ihnen gezeigt, wie man einen Motor charakterisiert. Dies ist etwas, das für jedes der Projekte auf unterschiedliche Weise wiederholt wird, da alle Motoren unterschiedliche Konfigurationen verwenden.
- Stillstandsdrehmoment: Dies wird üblicherweise in kg-cm und manchmal auch in Newton-Metern dargestellt und gibt Ihnen einen Anhaltspunkt für die maximale Festigkeit des Motors (d.h. wenn sich der Motor aufgrund von Überlastung nicht mehr drehen kann).
- Stillstandsstrom: Die Menge an elektrischem Strom in Ampere, die vom Motor unter maximaler Last verbraucht wird.
- Betriebsspannung: Der Spannungsbereich, für den der Motor ausgelegt ist.
Getriebe
Für einige Projekte benötigen Sie vielleicht mehr Drehmoment oder die Möglichkeit, die Drehzahl Ihres Motors zu verlangsamen. Um dies zu erreichen, können Sie ein Getriebe hinzufügen (oder einen Motor mit einem mitgelieferten Getriebe kaufen). Getriebe gibt es in verschiedenen Untersetzungen (z.B. 1:100, 1:1000, etc.). Die Faustregel lautet: Je höher die Reduktionsrate, desto mehr Drehmoment erhalten Sie und desto langsamer die maximale resultierende Geschwindigkeit.
DC-Motor (Gleichstrom) in diesem Kit
In diesem Kit werden wir zwei Mikro-Gleichstrommotoren mit einem Getriebe (100:1), einem Encoder und einem größeren Gleichstrommotor verwenden. Die kleinen Getriebemotoren werden verwendet, um die Räder des Rovers zu bewegen, den Zugroboter anzuheben und das Motorrad vorwärts und rückwärts zu fahren. Der größere Gleichstrommotor (ohne Getriebe) wird verwendet, um das Trägheitsrad im Motorradprojekt zu bewegen.
Die Spezifikationen der Mikromotoren mit dem Encoder sind nachfolgend dargestellt:
- Drehzahl (ohne Last): 320 U/min
- Stillstandsdrehmoment: 2,2 Kg-cm
Die Spezifikationen des größeren Motors sind unten dargestellt:
- Drehzahl (ohne Last): 7500 U/min
- Stillstandsdrehmoment: 150g-cm
Hardwaretest
Nun, da wir detailliertere Informationen über die Motoren haben, die wir in den Projekten verwenden werden, lernen wir, wie man mit Arduino damit arbeitet.
Im Folgenden werden wir lernen, wie man die Geschwindigkeit und Richtung des Motors ändert, danach werden wir sehen, wie man von einem Encoder liest und die Informationen dazu an die serielle Schnittstelle sendet.
Um die Motoren und die Encoder zu testen, benötigen wir:
- Arduino MKR1000
- MKRMotorMotor Carrier
- DC-Getriebemotoren
- Encoder
- LiPo-Akku
Der MKRMotorMotor Carrier hat vier Halterungen zum Anschluss von Motoren (M1, M2, M3 und M4) und zwei zum Anschluss von Encodern (HA1/HB1 und HA2/HB2).
Beginnen wir damit, den Motor mit dem Halter M1 und den Encoder mit dem HA1/HB1 zu verbinden. Wir zeigen Ihnen im Codebeispiel, wie es geht.
Zuerst werden wir den Motor bewegen, um diesen Code auf Ihren MKR1000 hochzuladen:
Sobald wir wissen, wie man einen Motor bewegt, wird der nächste Schritt von den Encodern gelesen, dafür laden Sie bitte den nächsten Code auf Ihren MKR1000.
Erwartetes Ergebnis
Nachdem Sie die erste Skizze ausgeführt haben, sollten Sie wissen, dass sich die Motoren seit der Stoppposition bis zur höchsten Geschwindigkeit in beide Richtungen drehen. Sie können den Motor an jeden der Motorstecker anschließen, das Verhalten sollte das gleiche sein.
In der zweiten Skizze sollten Sie den Motor und den Encoder auswählen, den Sie verwenden werden. Sobald Sie dies getan haben, können Sie in der seriellen Schnittstelle die Encoderzählungen und die Motordrehzahl in Zählungen pro Sekunde sehen, sowie die Einschaltdauer des Motors. In Abhängigkeit von den Motoranschlüssen und der Motordrehrichtung können die Drehzahl und die Encoderzahlen positiv und negativ sein.
Fehlerbehebung
Wenn der Motor nach dem Ausführen der ersten Skizze nicht wie erwartet verhält:
- Stellen Sie sicher, dass der MKRMotorMotor Carrier auf ON Motor steht
- Vergewissern Sie sich, dass die Motoren an die Motorsteckverbinder angeschlossen sind.
- Überprüfen Sie den hinteren Teil der Motoren, stellen Sie sicher, dass die schwarze Scheibe die PCB-Komponenten nicht berührt.
- Versuchen Sie, die Motorachse von Hand zu bewegen
Wenn sie sich nach dem Ausführen der zweiten Skizze nicht wie erwartet verhält:
- Vergewissern Sie sich, dass der MKRMotorMotor Carrier eingeschaltet ist
- Überprüfen Sie die Encoderanschlüsse
- Vergewissern Sie sich, dass die Batterie geladen ist
- Aktualisieren Sie die MKRMotorMotor Carrier-Firmware, indem Sie das Beispiel hochladen: File -> Examples -> MKRMotorCarrier -> Flasher
Erfahren Sie mehr
Sie können detailliertere Spezifikationen der Motoren auf den folgenden Bildern (unten) sehen:
3.2 Encoder
Beschreibung
Magnetische Encoder sind Sensoren, die bei Montage an einem Motor Informationen über die Drehzahl und die Drehrichtung des Motors melden können. Eine gängige Art der Verwendung von magnetischen Encodern ist die Befestigung an den Motoren, die die Räder eines Roboters antreiben. Dabei kann der Sensor die Geschwindigkeit des Roboters, die Richtung (Drehrichtung) und die zurückgelegte Wegstrecke (bei Kenntnis des Radius des Roboterrads) erfassen.
Hall-sensorbasierte Encoder
Die magnetischen Encoder bestehen aus einem Modul mit zwei Halleffekt-Sensoren und Magnetscheiben.
Ein Halleffekt-Sensor ist in der Lage, den Halleffekt zu erkennen (nicht überraschend). Der Hall-Effekt beschreibt die Erzeugung einer Spannungsdifferenz in einem elektrischen Leiter, wenn ein Magnetfeld angelegt wird. Während sich der Motor dreht, dreht sich die Scheibe an den Sensoren vorbei. Jedes Mal, wenn ein Magnetpol einen Sensor passiert, gibt der Encoder einen digitalen Impuls aus, der auch als "Tick" bezeichnet wird. Durch Zählen dieser Impulse kann die Drehzahl des Motors bestimmt werden.
Encoder Ausgangssignale
Der Encoder verfügt über zwei Ausgänge, einen für jeden Hall-Effekt-Sensor. Die Sensoren sind so positioniert, dass sie um 90 Grad versetzt sind. Das bedeutet, dass die Rechteckwellenausgänge der beiden Hall-Effekt-Sensoren an einem Encoder um 90 Grad phasenverschoben sind. Dies wird als Quadraturausgang bezeichnet.
Das obige Bild zeigt die typische Ausgabe eines Encoders. Wenn der Ausgang um 90 Grad phasenverschoben pulsiert, kann die Drehrichtung des Motors bestimmt werden. Wenn Ausgang A vor Ausgang B liegt, dann dreht der Motor nach vorne. Wenn Ausgang A hinter Ausgang B liegt, dreht der Motor rückwärts.
Wie bereits erwähnt, erhalten wir durch die Messung der Frequenz des Impulssignals in A oder B (in diesem Fall ist es nicht wichtig, von welchem) die Drehzahl, mit der sich der Motor dreht. Diese Informationen können dann verwendet werden, um die lineare Geschwindigkeit (z.B. die Geschwindigkeit eines Fahrzeugs) zu erhalten.
Encoder im Kit
In diesem Kit werden wir mit den magnetischen Encodern die Position des Zeichenroboters im Whiteboard und die Position des Rovers in der Gelande berechnen. Der Encoder wird an einen Getriebemotor angeschlossen, und die Encoderausgänge werden mit dem Motor Carrier verbunden.
Erfahren Sie mehr
Mehr Informationen über Encoder finden Sie hier.
3.3 Servomotoren
Beschreibung
Servomotoren sind Aktuatoren, die eine präzise Steuerung von Position (Winkel) oder Winkelgeschwindigkeit von einem Mikrocontroller aus ermöglichen. Servomotoren haben eine integrierte Steuerschaltung im Inneren des Gehäuses. Diese Schaltung kann analog oder digital sein, und dies wird durch die Art der Funktionen bestimmt, für die der Motor ausgelegt ist. Aus funktionaler Sicht gibt es zwei Arten von Servomotoren: den Standardservo und den kontinuierlichen Rotationsservo.
Servomotoren haben drei Klemmen, eine für Masse (GND), eine für Leistung (5V) und eine für das Steuersignal. Es ist wichtig, die Belegung Ihres Servomotors zu überprüfen, da sie von Hersteller zu Hersteller variieren kann.
Standardservo
Ein Standardservo hat eine Positionssteuerung und kann sich bis zu einem bestimmten Grad präzise drehen. Der Bereich liegt in der Regel zwischen 0° und 180°, obwohl es einige Servos mit höherer oder niedrigerer Reichweite gibt.
Ein Standardservo kann sich nicht kontinuierlich wie ein Gleichstrommotor drehen, daher kann er nicht zum Antrieb eines Rades verwendet werden. Er kann jedoch verwendet werden, um Dinge in bestimmten Winkeln mit hoher Genauigkeit hin und her zu bewegen. Wenn er beispielsweise auf dem Deckel einer Schachtel verwendet wird, kann er den Deckel durch Drehen in die 90°-Position öffnen. Er kann dann den Deckel schließen, indem er in die 0°-Position zurückkehrt.
Ein Standardservo verwendet tatsächlich einen Gleichstrommotor, hat aber auch ein Getriebe, einen Positionssensor und eine Steuerschaltung. Diese Komponenten arbeiten zusammen, damit sich der Servo präzise von einer Position zur anderen bewegen kann.
Kontinuierlicher Rotationsservo
Der kontinuierliche Rotationsservo ist konstruktiv gesehen einem Standardservo ähnlich, da er einen Gleichstrommotor, ein Getriebe und eine Motorsteuerschaltung verwendet.
Bei Auslösung mit dem richtigen Signal dreht er sich ähnlich wie ein einfacher Gleichstrommotor, aber nicht so schnell. Beide Servos können sich drehen und Richtung und Geschwindigkeit ändern, aber kontinuierliche Servos bieten eine präzisere Steuerung und benötigen keinen externen Treiber oder eine H-Brücke, um zu funktionieren. Sie können direkt an das Mikrocontroller-Board angeschlossen werden.
Puls-Positionsmodulation
Zur Steuerung von Servomotoren verwenden wir Puls-Positionsmodulationssignale (PPM). Es handelt sich um eine bestimmte Art von gepulstem Signal, das mit einer festen Frequenz arbeitet. Der PPM-Wert wird bei Standardservos in einen Drehwinkel und bei kontinuierlichen Servos in Richtung und Geschwindigkeit übersetzt.
PPM-Signale können aus dem PWM Pin auf einer Mikrocontrollerplatine erzeugt werden. In der Arduino IDE steht Ihnen eine Servobibliothek zur Verfügung. Diese Bibliothek ermöglicht es Ihnen, im Hintergrund in den richtigen Abständen Impulse an den Servo zu senden, so dass Arduino den restlichen Code weiter ausführen kann.
Servomotoren im Kit
Das Arduino Engineering Kit wird mit einem Servomotor geliefert, der in allen drei folgenden Projekten eingesetzt wird.
- Motorrad: Der Servomotor wird vorne zum Steuern des Motorrads verwendet.
- Rover: Der Servomotor wird für den Hubmechanismus in der Vorderseite des Rovers verwendet.
- Zeichenroboter: Der Servomotor wird im Mechanismus verwendet, um die Stiftfarbe zu ändern.
Hardware-Test
Jetzt ist es Zeit, die Servos zu testen. Der MKRMotorMotor Carrier gibt uns die Möglichkeit, vier Servos anzuschließen und gleichzeitig zu steuern. In diesem Kit ist einer enthalten und wir werden lernen, wie man ihn kontrolliert. Dazu müssen wir die Servostecker in der Platine finden.
Stellen Sie dann sicher, dass Sie den Servo in der richtigen Position anschließen, wir zeigen Ihnen im Codebeispiel, wie es geht.
Diese Materialien werden zur Steuerung des Servos benötigt:
- Arduino MKR1000
- MKRMotorMotor Carrier
- Servo
- LiPo-Akku
Laden Sie diese Skizze auf Ihren MKR1000, um zu sehen, wie man die Servobewegungen steuert:
Erwartetes Ergebnis
Sobald die Skizze auf Ihrem MKR1000 läuft, sollten Sie im Fenster Serial Port die Position des Servos sehen und Ihr Servo sollte von 0 auf 180 schwenken.
Fehlerbehebung
Sollten Sie dies nicht sehen, überprüfen Sie Folgendes:
- Der Servostecker ist in der richtigen Position und nicht vertauscht
- Der MKRMotorMotor Carrier ist ON
- Trennen Sie den Servo und versuchen Sie, die Achse von Hand zu bewegen
- Aktualisieren Sie die Firmware des MKRMotorMotor Carrier, indem Sie das Beispiel hochladen: File -> Examples -> MKRMotorCarrier -> Flasher
Erfahren Sie mehr
Mehr Informationen über Servos finden Sie unten.
- Datenblatt des Servomotors
- Die Arduino-Servobibliothek finden Sie hier und hier
3.4 H-Bridge
Beschreibung
Eine H-Bridge ist eine elektronische Schaltung, die es uns ermöglicht, die Spannungsrichtung einer Last zu ändern. Sie wird häufig verwendet, um die Richtung und die Drehzahl eines Gleichstrommotors zu ändern. Darüber hinaus werden H-Brücken auch als Motortreiber eingesetzt, da Mikrocontroller in der Regel nicht genügend Strom zur Verfügung stellen, um einen Elektromotor zu betreiben.
Eine H-Bridge enthält vier Schalter, die paarweise gesteuert werden. Je nachdem, welche Schalter aktiviert sind, fließt der Strom in eine andere Richtung. Dadurch kann die Richtung des Motors selbst gesteuert werden.
Das obige Bild zeigt eine vereinfachte Version der internen Struktur einer H-Brücke und wie die Schalter gesteuert werden können, um die Richtung des Motors zu ändern.
Wenn wir einen logischen HIGH-Pegel beim Schließen des Schalters und einen LOW-Pegel beim Öffnen des Schalters berücksichtigen, haben wir folgendes Verhalten.
Arten von Schaltern
Wie oben erläutert, verfügt eine H-Brücke über vier Schalter, die es ermöglichen, den Motor zu steuern. Diese Schalter sind in der Regel Transistoren. Je nach Modell der Transistoren hat die Brücke unterschiedliche Eigenschaften.
- BJT (Bipolar Junction Transistor) Transistoren als Schalter. Diese Brücken können Motoren mit geringer Leistung steuern. Die BJT's sind einfach zu bedienende Transistoren, aber sie haben einen niedrigen Wirkungsgrad und können keinen hohen Strom in die Motoren einspeisen.
- MOSFET (Metalloxid-Halbleiter-Feldeffekttransistor) Transistorschalter Diese Brücken können Motoren mit niedriger bis mittlerer Leistung steuern. Sie sind die häufigsten Brücken in der Robotik. Die MOSFET-Transistoren können höhere Leistungsstufen als die BJT-Schalter verwalten. Sie sind einfach zu bedienen und sie können schneller schalten als die BJT-Schalter. Dies ermöglicht eine bessere Motorsteuerung.
Die H-Bridge kann andere Komponenten haben, die als Schalter verwendet werden, wie z.B. IGBT (Insulated Gate Bipolar Transistor) oder andere Hochleistungskomponenten. Diese Art von H-Brücken wird zur Steuerung von Hochleistungsmotoren in industriellen Anwendungen eingesetzt.
Verbindung zu Mikrocontrollern herstellen
Wenn Sie Motoren von einem Mikrocontroller aus steuern, wird nicht empfohlen, die Ausgangspins des Mikrocontrollers direkt mit den Motorklemmen zu verbinden. Der Strom zum Betrieb des Motors kann den Chip beschädigen. Normalerweise ist die Spannung, die für die Versorgung der H-Brücke (und damit der Motoren) benötigt wird, höher als die Spannung, die den Mikrocontroller versorgt. H-Brücken werden auch als Motortreiber verwendet, da sie den Motor mit dem notwendigen Strom- und Spannungswert versorgen und ihn gleichzeitig mit 5/3,3V-Signalen vom Mikrocontroller sicher steuern.
Der Strom, den ein Motor verbraucht, ist proportional zu seinem Drehmoment. Normalerweise zeigen die Motoren den maximalen Verbrauch für das maximale Drehmoment an (z.B. 1,5A für 19,61Nm). Bei der Auswahl einer H-Bridge ist es wichtig, eine mit einer Stromaufnahme zu wählen, die höher ist als die Ihres Motors. Wenn der Motor mehr Strom verbraucht, als die H-Brücke liefern kann, kann dies zu Überstromschäden führen.
Steuerung der Geschwindigkeit
Wir können die Drehzahl eines Motors ändern, indem wir den Strom steuern, der durch ihn fließt. Ein ähnlicher Effekt kann erreicht werden, indem man den Status der Schalter, aus denen sich die H-Bridge zusammensetzt, ändert. H-Bridges mit Drehzahlregelung verwenden typischerweise Transistoren als Schalter. Es ist wichtig zu beachten, dass die Schaltgeschwindigkeit der Transistoren in der H-Brücke entscheidend ist. Die Frequenz des PWM kann nur so hoch sein, wie es die Schaltgeschwindigkeiten der Transistoren zulassen.
Je nach Richtung des Motors werden zwei Schalter ausgelöst, während die beiden anderen offen gehalten werden. Hier werden die ersten beiden Schalter mit einer bestimmten Frequenz geöffnet und geschlossen, die die Drehzahl des Motors bestimmt.
Je schneller die Schalter, desto besser die Kontrolle über den Motor. Um die Transistoren zu steuern, benötigen wir ein Steuersignal namens Pulsweitenmodulation (PWM). Dies wird im nächsten Abschnitt dieses Kapitels näher erläutert.
H-Bridge Architekturen
Es gibt zwei verschiedene Arten von H-Bridges, abhängig von der Architektur.
- Half Bridge: Dieses Modell wird in Anwendungen eingesetzt, bei denen nur die Drehzahl und keine richtungsabhängige Motorsteuerung erforderlich ist.
Die Drehzahl des Motors kann mit nur einem Transistor gesteuert werden. Die meisten Halbbrücken haben jedoch zwei. Dadurch kann ein größerer Strom durch den Motor fließen und somit eine höhere Drehzahl erreicht werden.
- Komplette Brücke: Dieses Brückenmodell ermöglicht die volle Kontrolle über die Motorbewegungen, wie oben beschrieben.
Ein häufiger Fehler bei den H-Bridges ist, mit diesen einen Schrittmotor zu steuern. Dies ist nicht möglich, da der interne Aufbau der Motoren unterschiedlich ist.
H-Brücken im Kit
In diesem Kit werden wir zwei verschiedene Motor-Treiber-ICs (H-Brücken) verwenden: die DVR8871 und die MC33926. Der DRV8871 ist ein kleinerer Chip und wird für die Standardleistung verwendet. Die Chips werden über I2C über den im Motor Carrier befindlichen SAMD11-Mikrocontroller gesteuert. Dieser Treiber verfügt über einen Stromabtastwiderstand, der die Strommenge begrenzt, mit der der der Chip betreiben wird. ImMotor Carrier ist der Strom auf 3A begrenzt.
Der MC33926 Motortreiber kann verwendet werden, wenn eine höhere Leistung erforderlich ist. Der Treiber ist direkt mit dem MKR Mikrocontrollerboard verbunden und liefert eine Stromrückführung über einen der Analog-Digital-Wandler. Darüber hinaus steigt die Strommenge, mit der der Fahrer umgehen kann, auf 5A (absolute Höchstleistung). Dieser Treiber ist beispielsweise erforderlich, um das Trägheitsrad des Motorrads zu bewegen, da eine höhere Strommenge benötigt wird, um die gewünschte Reaktion zu erhalten.
Erfahren Sie mehr
Um mehr zu erfahren, finden Sie unten weitere Informationen über die Treiber.
3.5 PWM
Beschreibung
Pulsweitenmodulation oder PWM ist eine digitale Modulationstechnik, die häufig verwendet wird, um die Leistung elektrischer Geräte wie Motoren zu steuern. Die Modulationstechnik besteht darin, die Breite des Impulses eines periodischen Signals zu verändern. Die Breite des Impulses wird als Arbeitszyklus (duty cycle )bezeichnet und reicht von 0% (minimale Breite) bis 100% (maximale Breite).
Steuerung von LEDs und Motoren
Einige elektrische Geräte, wie LEDs oder Motoren, können über ein analoges Signal gesteuert werden. Je höher die angelegte Spannung desto heller die LED oder desto schneller dreht sich der Motor. Aufgrund der intrinsischen Tiefpassfiltercharakteristik dieser Geräte können sie jedoch auch über ein PWM-Signal gesteuert werden.
Um zu veranschaulichen, wie PWM funktioniert, schauen wir uns eine LED an. Wenn eine LED leuchtet, geht sie nicht sofort von OFF auf ON. Stattdessen beginnt sie als OFF und leuchtet heller. Es ist mit bloßem Auge nicht sichtbar. Aber wenn Sie die LED ausschalten könnten, bevor sie 100% Helligkeit erreicht hat, und sie dann weiter ein- und ausschalten, ohne die LED jemals ihre maximale Leistung erreichen zu lassen, dann leuchtet die LED weniger. Wenn Sie dies wiederholt und schnell genug tun, sieht die LED so aus, als würde sie nur mit 25% ihrer vollen Helligkeit leuchten. Diese Schaltung ist der "Impuls"-Teil des PWM-Impulses ON und OFF. Es sei auch darauf hingewiesen, dass das menschliche Auge ebenfalls Tiefpasscharakter hat, was zur Verstärkung dieses Effekts beiträgt.
Die gleiche Prämisse gilt für einen Gleichstrommotor. Um die Drehzahl des Motors zu reduzieren, können Sie die Einschaltdauer des PWM-Signals, das an den Motortreiber geht, verringern. Die Trägheit des Motors (seine Unfähigkeit, sofort anzuhalten, wenn keine Energie mehr bereitgestellt wird) in Kombination mit den Eigenschaften der Spulen (die keine plötzlichen Stromänderungen innerhalb der Spulen zulassen) trägt dazu bei, dass Sie mit PWM die Geschwindigkeit kontrollieren können.
PWM in Mikrocontrollern
Die meisten Mikrocontroller haben die Fähigkeit, dedizierte PWM-Signale zu erzeugen. Normalerweise haben nicht alle digitalen Pins diese sekundäre Option, daher müssen Sie das Datenblatt überprüfen, wenn Sie ein PWM-Signal benötigen, um zu sehen, welche Pins diese Fähigkeit haben. Es gibt auch Bibliotheken, mit denen Sie "Software" PWM-Signale in jedem GPIO Pin (General Purpose Input/Output) erzeugen können.
In den Arduino-Boards sind PWM Pins mit einem "Tilde"-Symbol ~ neben der Pin-Nummer gekennzeichnet. Bei einem Arduino MKR1000 sind es die Pins 2, 3, 4 und 5.
In diesem Kit werden wir PWM-Signale verwenden, um die Drehzahl aller Gleichstrommotoren in den drei Projekten zu steuern.
Erfahren Sie mehr
Um mehr zu erfahren, lesen Sie mehr über PWM und wie man PWM-Signale von einem Arduino-Board unten erzeugt.
- Arduinos Referenz: analogWrite
- Arduinos Referenz: description of PWM
- Arduinos Referenz: the secrets of Arduino’s PWM
3.6 Ultraschallsensoren
Beschreibung
Ultraschallsensoren erfassen den Abstand zum nächsten Objekt vor dem Sensor (manchmal für mehr als ein Objekt). Sie messen die Entfernung, indem sie einen hochfrequenten Schallimpuls aussenden und Reflektion auswerten. Beachten Sie, dass dieses Geräusch typischerweise außerhalb des Hörbereichs für Menschen und Haustiere liegt. Durch die Messung der verstrichenen Zeit zwischen dem ausgesendeten Schallimpuls und dem empfangenen Schallimpuls ist es möglich, den Abstand zum Objekt vor dem Sensor annähernd zu ermitteln.
Preiswerte Ultraschallsensoren haben in der Regel zwei Wandler und sehen aus wie kleine Zylinder. Einer sendet den hochfrequenten Impuls, der andere empfängt die zurückkommende Welle. In der obigen Abbildung sind die Sensoren mit "T" für den Sender auf der linken Seite und "R" für den Empfänger auf der rechten Seite gekennzeichnet. Es gibt jedoch High-End-Ultraschallsensoren, die einen einzigen Wandler verwenden, der bei Bedarf in einen Sende- oder Empfangsmodus geschaltet werden kann.
Die Eigenschaften von Schallwellen
Unter normalen Umgebungsbedingungen bewegt sich der Schall mit etwa 332 Metern pro Sekunde (1.087 ft/s). Sie nehmen die verstrichene Zeit zwischen dem gesendeten Impuls und dem reflektierten empfangenen Impuls (auch bekannt als Flugzeit. Multiplizieren diese mit der Schallgeschwindigkeit und teilen den Wert durch zwei. (das Signal zum Objekt gesandt und vom Objekt zurückreflektiert durchläuft zweimal die Strecke). Dies führt so zu einer ziemlich genauen Messung der Entfernung zu dem Objekt.
$distance=\frac{(time\;of\;flight\times speed\;of\;sound)}2$
Beachten Sie, dass sich die Genauigkeit des Ultraschallsensors mit den Umgebungsbedingungen ändert, da sich die Schallgeschwindigkeit aufgrund von Temperatur- oder Feuchtigkeitsschwankungen ändert. Wenn Sie mehrere Ultraschallsensoren in unmittelbarer Nähe zueinander verwenden, kann die Schallwelle eines Sensors auch von einem der anderen Sensoren aufgenommen werden. Dies wirkt sich auch auf die Genauigkeit aus.
Ultraschallsensor im Kit
Der Sensor hat vier Anschlusspins: PWR, GND, Trigg (Trigger) und Ech (Echo). Die Messung wird durchgeführt, indem der Mikrocontroller einen Impuls von einigen Mikrosekunden Dauer über den Trigg Pin an den Sensor sendet. Von diesem Moment an aktiviert der Sensor den Ech Pin. Dies signalisiert, dass ein Schallimpuls ausgesendet wird, der auf ein Objekt zu fliegt und zurückprallt. Der Ech Pin wird auf HIGH gehalten, bis die Vorderseite des Schallimpulss wieder in den Empfängerwandler zurückgeworfen wird. Mit anderen Worten, der Mikrocontroller kann die Flugzeit ermitteln, indem er die Zeitspanne misst, in der sich der Ech Pin im Zustand HIGH befindet.
Es gibt auch 3-polige Ultraschallsensoren. Sie funktionieren wie die 4-poligen, aber die Echo und Trigger Pins sind zu einem Signal Pin zusammengefasst. Dieser Pin dient dann sowohl als Auslöser für den Ultraschall als auch als Empfänger, wenn der Schall zurückkommt. In diesem Fall muss die Mikrocontrollerplatine während der Programmausführung interaktiv den Modus des Pins von INPUT auf OUTPUT ändern. Arduino trägt sowohl Software- als auch Hardwareseitig dem Rechnung.
Im Kit wird der Ultraschallsensor im Motorradprojekt und im Roverprojekt als Hindernisvermeidungssystem eingesetzt. Das Erkennen eines Objekts vor dem Fahrzeug stoppt die Motoren oder bewirkt eine Richtungsänderung.
Hardware-Test
Um den Ultraschallsensor zu testen, verwenden wir einen Sketch, mit welchem der Sensor ausgelesen wird und die Entfernung zum nächsten Objekt in Reichweite zurückgegeben wird. Dazu sendet der Arduino einen Impuls an den Sensor, um eine Messung einzuleiten, und wartet dann auf einen Rückimpuls. Die Verzögerung des zurückkehrenden Impulses ist proportional zur Entfernung vom Objekt. Verbinden Sie die Teile wie in der Registerkarte wiring tab im Create window gezeigt.
Materialien
- MKR Motor Carrier
- Modulkabel
- Ultraschallsensor
- MKR1000
- Batterie
- USB-Kabel
Um diese Komponente zu testen, folgen Sie den untenstehenden Verkabelungen und laden Sie den Code auf Ihr MKR1000 hoch:
Erwartete Ergebnisse
Der Sketch zeigt im seriellen Monitor die vom Sensor abgelesene Entfernung in Zoll, cm und mm.
Fehlerbehebung
- Stellen Sie sicher, dass der Sensor mit dem entsprechenden Eingang in Ihrem Code verbunden ist: IN1, IN2, IN3 oder IN4.
- Achten Sie darauf, dass das Kabel in die richtige Richtung mit dem Ultraschallsensor verbunden ist: Das schwarze Kabel muss mit der Masse (GND Pin) am Sensor verbunden werden. Der Sensor bricht ab, wenn er beim Einschalten des Boards auf andere Weise angeschlossen wird.
- Achten Sie darauf, dass das Kabel wie hier gezeigt korrekt modifiziert wird (eines der Kabel im Kabelkonfektionsset muss von der zweiten in die vierte Position bewegt werden).
- Stellen Sie den Netzschalter am Motor Carrier auf "on".
- Vergewissern Sie sich, dass die Batterie korrekt angeschlossen ist und der schwarze Draht mit der Masse (GND) verbunden ist.
Die Orientierung der Dähte des Modulkabels spielt eine wichtige Rolle für die einwandfreie Funktion des Ultraschallsensors. Beachten Sie, dass auf der 4-poligen Steckerleiste des Modulkabels neben der roten Leitung eine weiße Leitung liegen sollte. Wenn es sich an der falschen Stelle auf Ihrem Modulkabel befindet, können Sie sich das folgende Video ansehen, um es zu verschieben.
Erfahren Sie mehr
Weitere Informationen zum Ultraschallsensor HC-SR04 finden Sie weiter unten.
3.7 Hall-Sensormodul
Beschreibung
Wie im Abschnitt Encoder beschrieben, ist ein Hall-Sensor ein Wandler, der seine Ausgangsspannung in Abhängigkeit von der Magnetfelddichte um das Gerät herum variiert. Es gibt viele Anwendungen für diese Art von Sensoren wie Näherungsschalter, Drehzahlerkennung, Strommessung usw. In diesem Kit werden wir ein Hall-Sensormodul verwenden, um die Geschwindigkeit des Trägheitsrades im Motorradprojekt zu messen. Wir werden zwei kleine Magnete in das Trägheitsrad eingebettet haben und wir werden das Modul so nah an ihm platzieren, dass wir die Magnete erkennen können, die bei jeder Drehung durchlaufen.
Das im Kit enthaltene Modul enthält den Hall-Sensor SL353HT von Honeywell. Dieses spezielle Gerät zeichnet sich durch hohe Schaltgeschwindigkeit und geringe Stromaufnahme aus.
Hardware test
Um das Hall-Sensormodul zu testen, verwenden wir einen Sketch in der Arduino IDE, der bei jeder Annäherung eines Magneten an das Modul einen Zähler um eins erhöht. Sie können den im Kit enthaltenen Magneten verwenden, der auf dem Trägheitsrad im Motorradprojekt verwendet wird. Nachdem Sie die Materialien bereit haben, verbinden Sie die Teile wie auf der Registerkarte Verdrahtung (wiring_hall-sensor.png) im Create Window gezeigt.
Materialien
- MKR Motor Carrier
- 3-Draht-Sensorkabel (kurz)
- Hall-Sensormodul
- MKR1000
- Batterie
- USB-Kabel
- Magnet
Um diese Komponente zu testen, folgen Sie den untenstehenden Anweisungen und laden Sie den Code auf Ihr MKR1000 Board hoch:
Erwartete Ergebnisse
Nach dem Laden des Codes sollten Sie in der Konsole sehen können, wie der Zählerstand ansteigt, wenn sich der Magnet in der Nähe des Hall-Sensormoduls befindet.
Fehlerbehebung
Werfen Sie einen Blick auf die folgenden Tipps, bevor Sie den Sketch ausführen:
- Achten Sie darauf, dass das Sensorkabel korrekt an den entsprechenden Eingang im Code ( IN1, IN2, IN3 oder IN4) angeschlossen ist.
- Schalten Sie den Netzschalter am Motor Carrier ein.
- Vergewissern Sie sich, dass die Batterie korrekt angeschlossen ist und der schwarze Draht mit Masse (GND) verbunden ist
Erfahren Sie mehr
Mehr Informationen über den Ultraschallsensor HC-SR04 finden Sie unten: SL353HT Datasheet
3.8 IMU (Inertial Measurement Unit)
Beschreibung
Eine IMU (Inertial Measurement Unit) ist ein elektronisches Modul, das das Verhalten des Moduls bei Änderungen der linearen Beschleunigung, der Winkelrotation und in einigen Fällen des Magnetfeldes um das Modul herum misst. So beinhalten IMU-Module verschiedene Sensoren wie Beschleunigungssensoren, Gyroskope und Magnetometer in einem einzigen Gehäuse.
Die Rohdaten der Sensoren auf der IMU werden dann verarbeitet und zu anderen Informationen kombiniert, die in unseren Projekten einfacher zu verwenden sind. Die Informationen, die wir extrahieren, werden als: Neigung, Drehung und Gieren bezeichnet. Jede dieser Messungen korreliert mit einer der Achsen X, Y oder Z.
Beschleunigungssensor
Der Beschleunigungssensor kann die Geschwindigkeit (Lineargeschwindigkeit) und die Beschleunigung des Objekts, an dem er befestigt ist, messen. Bei Belastung oder durch starke Vibrationen durch Bewegung erzeugt das Sensorelement unterschiedliche Spannungswerte. Die Bewegungsdaten werden dann als x-, y- und z-Wertesatz bereitgestellt.
Gyroskop
Das Gyroskop erkennt die Orientierung. Unter Verwendung der Schwerkraft als Grundlage für die Messung verwendet es X-, Y- und Z-Werte, um Rotationsdaten bereitzustellen. Gyroskope können zur Messung der Drehrate (Winkelgeschwindigkeit) verwendet werden.
Magnetometer
Das Magnetometer misst den Magnetismus. In IMU-Modulen werden sie im Allgemeinen verwendet, um die relative Änderung in einem Magnetfeld in einer bestimmten Richtung zu erfassen. Magnetometer werden typischerweise verwendet, um eine Heading Referenz für unsere elektronische Vorrichtung zu liefern. Trotz seiner Nützlichkeit verfügen nicht alle IMU-Module über ein Magnetometer. Die Verwendung von einem Magnetometer verbessert die Messgenauigkeit. Das Hinzufügen eines Magnetometers zum IMU Modul ergibt einen Nordmagnetpol-Bezugspunkt.
Die IMU im Kit
In diesem Kit werden wir eine IMU verwenden, um die vertikale Position des selbstbalancierenden Motorrads zu messen und zu erkennen, wann es umkippt. Konkret werden wir das Arduino IMU Shield verwenden, das auf dem MKR1000 aufgesteckt wird. Der Austausch von Informationen erfolgt zwischen beiden Boards über den I2C. Dieses Shield verfügt über den BN0055 und einen 9-achsigen (acc+gyro+magnetometer) Orientierungssensor.
Um mit dem Sensor zu kommunizieren, nutzt das MKR1000 die BNO055 IMU library. Sie können die Bibliothek herunterladen und über den library manager installieren.
Hardware-Test
Um das IMU-Schild für den MKR1000 zu testen, verwenden wir einen Sketch, der die Gier-, Roll- und Neigungswerte anhand der Euler-Daten aus dem IMU-Schild berechnet. Das IMU-Schild kommuniziert mit dem MKR1000 über das I2C-Protokoll, so dass wir das Shield auf den MKR1000 stecken müssen. Achten Sie darauf, dass das Shield in die richtige Richtung gesteckt ist! Zur Verdeutlichung siehe Abbildung.
Materialien
- MKR1000
- IMUShield
- USB-Kabel
Um diese Komponente zu testen, folgen Sie der Anweisung in der zweiten Seite des untenstehenden Create-Fensters und laden Sie den Code in Ihr MKR1000.
Erwartete Ergebnisse
Sie sollten sehen können, wie sich die 3 Werte ändern, wenn Sie den MKR1000 zusammen mit dem IMU-Schild bewegen. Der Winkelbereich für jeden Parameter ist:
- Neigung: 0 bis 360 Grad
- Gieren: -180 bis 180 Grad
- Rolle: -90 bis 90 Grad
Fehlerbehebung
- Achten Sie darauf, dass Sie das Board in die richtige Richtung auf den MKR1000 aufstecken (die aufgedruckten Beschriftungen müssen übereinstimmen)
Erfahren Sie mehr
Mehr Informationen über die von uns verwendete IMU finden Sie hier:
- Die Filterprozesse, die erforderlich sind, um die Rohdaten der Sensoren zu verstehen, finden Sie unter: IMU Data Fusing: Complementary, Kalman, and Mahony Filter
- Zum Vergleichen des Datenblattes mit dem Sensor auf dem IMU-Shield: BNO055 Orientation Sensor Datasheet.
3.9 I2C Kommunikation
Beschreibung
I2C (Inter-Integrated-Circuit) ist ein busbasiertes serielles Kommunikationsprotokoll, das einem Gerät (Master) ermöglicht, eine Kommunikation mit verschiedenen Peripheriegeräten (Slaves) über nur zwei Signalpins aufzubauen: SDA (Datensignal) und SCL (Taktsignal). Sowohl Master- als auch Slave-Geräte benötigen eine Art Mikrocontroller, der für die Verarbeitung des I2C-Kommunikationsprotokolls an Bord ist. Jeder Slave muss mit beiden Signalen verbunden sein und benötigt jeweils eine eindeutige Adresskennung. Normalerweise werden Adressen zum Zeitpunkt der Herstellung eingerichtet, und viele Geräte erlauben keine Adressänderungen. Der Master kann individuell mit den Slaves über deren eindeutige Adressen kommunizieren.
Der Schaltplan einer I2C-Protokoll-Hardwareverbindung ist unten dargestellt.
SDA- und SCL-Busleitungen erfordern einen Pull-up-Widerstand, der typischerweise 10 KOhm beträgt. Viele Mikrocontroller, die als Master in I2C-Implementierungen eingesetzt werden, verfügen über eigene interne Pull-up-Widerstände.
Das Protokoll
I2C ist ein synchrones Kommunikationsprotokoll. Das SCL-Signal ist dafür verantwortlich, dass bei jedem Datentransfer eine Synchronisation zwischen Master und Slaves stattfindet. Der SDA-Signal Pin übernimmt die bidirektionale Datenübertragung. Das heißt, die Pins der Mikrocontroller auf den Master- und Slave-Geräten müssen während des Betriebs von INPUT auf OUTPUT umschalten.
Das Schritt-für-Schritt Kommunikationsprotokoll wird in der folgenden Reihenfolge beschrieben.
- Startbedingung
- Slave-Adresse + Write/Read flag (Schreib-/Leseflag)
- Bestätigung
- Datentransfer
- Bestätigung
- Stoppbedingung
Jede Datenübertragung wird initialisiert und durch eine "Start-" oder "Stoppbedingung" abgeschlossen. Diese Bedingung stellt eine bestimmte Position für die Leitungen SDA und SCL für eine bestimmte Zeit dar.
Das erste Bild zeigt die Signalzustände SDA und SCL für eine START-Übertragungsbedingung. Das zweite Bild zeigt die Signalzustände SDA und SCL für eine STOP-Übertragungsbedingung.
Sobald die Startbedingung eintritt, startet die SCL ein Taktsignal, das bis zum Ende der Datenübertragung anhält. Gleichzeitig muss der Master einen Frame durch das SDA-Signal mit der Adresse des Slaves senden, mit dem er kommunizieren möchte.
Jeder zu sendende Frame ist 8 Bit lang und folgt der folgenden Struktur.
- Die Slave-Adresse beträgt 7 Bit. Dies bedeutet, dass sich bis zu 127 verschiedene Geräte auf dem Bus befinden können.
- Das 8. Bit soll dem Slave mitteilen, ob der nächste Schritt das Senden von Daten an den Master (Lesefunktion) oder das Empfangen von Daten vom Master (Schreibfunktion) ist.
Das obige Bild zeigt die Struktur der ersten Hälfte der Kommunikation zwischen dem Master und einem Slave.
- Startbedingung (S)
- Slave-Adresse mit dem Read/Write-Bit
- Bestätigung (A)
Die Bestätigung wird von dem Slave gesendet, der den Frame empfangen hat, und sie zeigt an, dass die Daten empfangen und verarbeitet wurden. Das bedeutet, dass das Gerät für den nächsten Schritt bereit ist. Nachdem der erste Frame vom Slave gesendet und verarbeitet wurde und die Bestätigung beim Master angekommen ist, beginnt der eigentliche Datentransfer. Diese letzte Datenübertragung erfolgt über Frames, die 8 Bit lang sind, gefolgt von einer Bestätigung des Gerätes, was die Daten von dem Gerät empfängt, das sie sendet. Die Struktur dieser Mitteilung ist unten aufgeführt.
Der letzte Schritt in der Kommunikation ist die Stoppbedingung, die auftritt, wenn alle Daten gesendet wurden. Sobald die Stoppbedingung eintritt, ist die Kommunikation beendet. Wenn der Master mehr Informationen vom Peripheriegerät benötigt, muss er nach allen oben genannten Schritten einen neuen Kommunikationsprozess starten.
Nachfolgend ist die Reihenfolge einer vollständigen Datenübertragung zwischen Master und Slave dargestellt.
Begrenzungen von I2C
Wie viele Peripheriegeräte können an den I2C-Bus angeschlossen werden?
Auch wenn der Adressraum für I2C 127 ist (wie bereits beschrieben), gibt es eine weitere Einschränkung, die es nicht zulässt, dass I2C-Ketten zu lang werden. Die Spezifikationen von I2C erlauben 400pF als maximale kapazitive Last im Bus. Jede Peripherie hat eine Kapazität (angegeben im Gerätedatenblatt), die zur Gesamtlast addiert wird (da alle Slaves parallel geschaltet sind). Daher ändert sich je nach verwendeter Komponente die Anzahl der Peripheriegeräte, die gleichzeitig angeschlossen werden können.
Datenübertragungsgeschwindigkeit
Es gibt verschiedene Implementierungsoptionen für dieses Protokoll, und jede davon ermöglicht eine andere Datenübertragungsgeschwindigkeit.
I2C im Kit
In den Projekten innerhalb dieses Programms wird das MKR1000 die I2C-Kommunikation nutzen, um Daten vom IMU-Shield zu erhalten und Befehle an den SAMD11-Mikrocontroller im Motor Carrier zu senden.
Erfahren Sie mehr
Um mehr zu erfahren, finden Sie unten weitere Informationen über das I2C-Protokoll.
3.10 Interrupts
Beschreibung
Um zu verstehen, wie Interrupts funktionieren, benötigen wir zunächst eine kurze Erklärung, wie die Mikrocontroller Programme ausführen.
Wenn wir ein Programm schreiben, schreiben wir eine Reihe von Anweisungen, die der CPU und den Peripheriegeräten im Mikrocontroller sagen, was sie tun müssen. Sobald das Programm auf den Mikrocontroller hochgeladen wurde, wird jeder Befehl nacheinander ausgeführt. Das bedeutet, dass die Ausführung der nächsten Anweisung erst dann beginnt, wenn die vorherige abgeschlossen ist.
Ein Interrupt ist ein Signal in einem Mikrocontroller, das die CPU über ein Ereignis informiert, das sofortige Aufmerksamkeit erfordert. Wenn ein Interrupt auftritt, setzt die Steuerung ihre Hauptausführungssequenz auf Halten und springt zu einem anderen Codeabschnitt, der als Interrupt-Service-Routine (ISR) oder interrupt handler bezeichnet wird. Ein interrupt handler wird nur ausgeführt, wenn ein Interrupt stattfindet. Nach Beendigung des interrupt handler wird die Ausführung des Hauptprogramms genau an der Stelle fortgesetzt, an der es unterbrochen wurde.
Wir können Interupts verwenden, um den genauen Moment zu erfahren, wenn etwas passiert. Beispielsweise können wir Interrupts verwenden, um zu wissen, wann ein Encoder einen Tick erzeugt.
Typen von Interrupts
Interrupts sind mit Statusänderungen verbunden. Wir haben verschiedene Arten von Interrupts, interne und externe, abhängig von der Quelle des Interruptsignals.
- Die internen Interrupts werden ausgelöst, wenn die Änderung in einem der internen Register des Mikrocontrollers erfolgt. Es könnte ein Fehler innerhalb des Mikrocontrollers, ein Timer, eine Änderung in einem bestimmten Register und so weiter sein.
- Die externen Interrupts werden ausgelöst, wenn die Zustandsänderung in einem Peripheriegerät ausgelöst wird. Interrupts können durch die Änderung an einem bestimmten Pin ausgelöst werden. Wir können das Verhalten des Systems programmieren, wenn diese Art von Interrupt auftritt, indem wir eine Interrupt Handler-Funktion programmieren.
Maskable versus non-maskable
Wir können die Interrupts auch als maskierbar (sperrbar) und nichtmaskierbar unterscheiden:
- Maskable Interrupts: Diese Interrupts können maskiert werden. Das bedeutet, dass der Mikrocontroller bei seiner Auslösung nicht an der Handler-Routine für den Interrupt teilnimmt.
- Non-maskable Interrupts: Jedes Mal, wenn diese Interrupts ausgelöst werden, wird die Handler-Routine ausgeführt. Diese Interrupts haben die höchste Prioritätsstufe. Innerhalb dieser Gruppe befindet sich das RESET-Signal an die CPU.
Interrupt Routine
Innerhalb jeder Art von Interrupt gibt es ein Prioritätssystem, das die Reihenfolge behandelt, falls zwei oder mehr gleichzeitig ausgelöst werden. In diesem Fall wird zuerst der Interrupt mit der höchsten Priorität ausgeführt und die anderen gehen in einen Schwebestatus über, bis das System für die Ausführung verfügbar ist.
Es gibt drei verschiedene Status für einen Interrupt.
- Inaktiv: Die Interruptbedingung tritt nicht auf.
- Ausstehend: Die Interruptbedingung ist eingetreten, aber die Handler-Routine ist noch nicht ausgeführt.
- Laufen: Die Handler-Routine wird ausgeführt.
Jeder Status wird mit einem Flag in einem internen Register des Mikrocontrollers gesteuert. Auf diese Weise können Benutzer den Status des Interrupt Handlers kennen und ändern.
Der Interrupt Handler
Der Interrupt Handler ist eine Funktion, die eine bestimmte Aufgabe ausführt. Wir müssen es dementsprechend programmieren, was wir brauchen, wenn die Interruptbedingung eintritt.
Wenn wir einen Interrupt Handler programmieren, müssen wir die folgenden Richtlinien befolgen.
- Zwischen zwei Interruptbedingungen muss genügend Zeit vorhanden sein, um die Interrupthandlerfunktion auszuführen. Daher muss die Ausführung des Interrupthandlers kurz genug sein, damit das Hauptprogramm zwischen zwei Interruptbedingungen ausgeführt werden kann.
- Schleifen sollten nicht im Interrupt Handler Programm verwendet werden, da sie manchmal keine Rückkehr zur Ausführung des Hauptprogramms erlauben.
- Bevor wir die Interrupt Handler Funktion verlassen, müssen wir das "Status-Flag" zurücksetzen. In einigen Mikrocontrollern geschieht dies automatisch, aber wir müssen einige Register manuell ändern in andere.
Interrupts im Kit
In diesem Kit verwenden wir Interrupts, um die Anzahl der Encoder-Ticks zu zählen. Dieser Vorgang wird innerhalb des SAMD11-Reglers im Motor Carrier durchgeführt, um dem MKR1000 bezüglich der Rechenleistung zu entlasten.
3.11 LiPo-Akkus
Beschreibung
Lithium-Polymer-Akkus (LiPo) sind eine neuere Art von Akkus für Anwendungen, bei denen Gewicht und Form entscheidend sind, wie z.B. in Tablets und Telefonen. Diese Batterien basieren auf der Lithium-Ionen-Technologie, die anstelle eines flüssigen einen halbfesten Polymerelektrolyten verwendet. Dadurch können LiPo-Akkus in jeder Größe und Form hergestellt werden und sind viel leichter als andere Lithium-Akkus. Die empfindliche Chemie im Inneren der LiPo-Akkus macht sie jedoch empfindlicher und einer mechanischen Beeinträchtigung des Akkus zu einem Brand führen.
Batterien werden über ihre Eigenschaften beschrieben. Es gibt drei Haupteigenschaften von LiPo-Akkus: Spannung, Kapazität und Entladung.
Spannung
Spannung (in diesem Fall 3,7 V) ist die erste Eigenschaft. Batterien werden in Zellen oder Standardeinheiten von Energiespeichern quantifiziert. Jede LiPo-Zelle hat eine Nennspannung von 3,7 V. In vielen Batterien werden mehrere Zellen in Reihe geschaltet. Das bedeutet, dass die Spannung addiert wird. Daher sind Batterien mit 2 Zellen 7,4 V, Batterien mit 3 Zellen 11,1 V und so weiter.
Beachten Sie, dass die Nennspannung die voreingestellte Ruhespannung eines Akkupacks ist. Auf diese Weise standardisiert und vergleicht die Batterieindustrie Batterien. Dies entspricht jedoch nicht der vollen Ladespannung der Zelle. LiPo-Akkus sind voll geladen, wenn sie 4,2 V/Zelle erreichen, und ihre minimale sichere Ladung beträgt 3,0 V/Zelle. 3,7v ist ein Mittelwert. Das ist die Nennladung der Zelle.
Kapazität (1000 mAh)
Die Kapazität einer Batterie ist das Maß dafür, wie viel Leistung die Batterie aufnehmen kann, ähnlich der Größe des Kraftstofftanks in einem Auto. Die Maßeinheit für die Kapazität ist in Milliampere Stunden (mAh). Der Wert beschreibt, wie viel Strom aus dem Akku entnommen werden muss, um ihn in einer Stunde zu entladen.
Die Kapazität bestimmt also, wie lange ein Akku laufen kann, bevor er wieder aufgeladen werden muss. Mit zunehmender Kapazität der neueren Batterien nimmt auch die Länge der Laufzeit zu. Aber auch Größe, Gewicht und Ladezeit werden größer.
Entladungsrate
Die Entladungsrate (in diesem Fall 65C), C, ist ein Maß dafür, wie schnell die Batterie sicher entladen werden kann, ohne sie zu beschädigen. Es handelt sich nicht um einen eigenständigen Wert. Die Entladungsrate zusammen mit der Kapazität betrachtet werden, um die entsprechende Eigenschaft zu beschreiben.
$capacity\;\times\;discharge\;rating\;=\;safe\;amp\;draw$
Hier das obige Beispiel:
1800 x 65 = 117000 mA
Batterielebensdauer und potentielle Risiken
Wie der Name schon sagt, enthalten Lithium-Polymer-Batterien Lithium. Lithium ist ein Alkalimetall, d.h. es reagiert mit Wasser und verbrennt. Lithium verbrennt auch, wenn es mit Sauerstoff reagiert, aber nur, wenn Wärme zugeführt wird. Der Prozess der Verwendung der Batterie bewirkt, dass sich überschüssige Sauerstoff- und Lithiumatome an beiden Elektroden (Kathode oder Anode) der Batterie ansammeln. Dies kann dazu führen, dass sich Lithiumoxid (Li2O) auf der Anode oder Kathode bilden. Das Li2O bewirkt, dass der Innenwiderstand des Akkus steigt. Das Ergebnis eines höheren Innenwiderstands ist, dass sich die Batterie während der Verwendung stärker erwärmt.
Es sei angemerkt, dass der Innenwiderstand sich am besten als das Maß für die Gegenkraft beschreiben, die eine Schaltung dem Durchgang des Stroms entgegensetzt.
Die Bildung von Lithiumoxid dauert in der Regel etwa 300-400 Lade-/Entladezyklen, bevor ein Kipppunkt erreicht wird. Das ist also die typische Lebensdauer eines LiPo-Akkus. Wenn wir die Batterien jedoch während eines Betriebs erwärmen, sie mit weniger als 3,0 Volt pro Zelle entladen, sie in irgendeiner Weise physisch beschädigen oder Wasser in die Batterien eindringen lassen, wird die Lebensdauer der Batterie verkürzt. All das beschleunigt die Bildung von Li2O.
Lipos müssen mit Vorsicht behandelt werden. Das Entladen des Akkus unter der minimalen sicheren Ladung kann zu irreparablen Schäden am Akku führen. Achten Sie daher bei Ihren Projekten auf den Spannungszustand der Batterie (z.B. durch Hinzufügen von Sicherheitsmaßnahmen in Ihrem Code oder Ihrer Schaltung), um eine Beschädigung der Batterie zu vermeiden. Darüber hinaus kann eine Überladung dazu führen, dass sich der Akku entzündet. Aus diesem Grund sollten Lipo-Akkus immer mit einem speziellen Ladegerät geladen werden. Sie dürfen Ihre Lipos während des Ladevorgangs niemals unbeaufsichtigt lassen.
LiPo-Akku im Kit
Das obige Bild zeigt den Akku, der für dieses Projekt verwendet wird.
- 800 mAh ist die Kapazität. Sie beschreibt, wie viel Strom dem Akku entzogen werden kann, um ihn in einer Stunde zu entladen.
- 11,1 V ist die Spannung. Das bedeutet, dass der Akku aus drei LiPo-Zellen besteht.
- 40C ist die Entladekapazität, die angibt, wie schnell der Akku entladen werden kann, ohne ihn zu beschädigen. Dieser Wert, multipliziert mit der Kapazität, ergibt den maximal zulässigen Lade-/Entladestrom.
800 x 40=32000 mA
In den meisten Fällen verfügen LiPo-Akkus über zwei Anschlüsse, einen zum Entladen des Akkus (oberer Anschluss im Bild) und einen zum Aufladen (unten). Es ist wichtig, sie nicht zu verwechseln. Das kann zur Schädigung der Batterie führen.
Der Stecker zum Aufladen der Batterie hat drei verschiedene Erdungsleitungen, eine für jede Zelle, um sie einzeln aufzuladen. Das Laden des Akkus mit dem falschen Stecker kann zu einer Überladung der Zelle führen.