Arduino Rechteckwellengenerator
In diesem Tutorial wird die Erzeugung einer Rechteckwelle mit der Funktion digitalWrite()
in Arduino besprochen.
Arduino Rechteckwellengenerator
Eine Rechteckwelle besteht aus einem Maximal- und einem Minimalwert, und der Übergang zwischen diesen Werten ist augenblicklich. Die Maximal- und Minimalwertdauer ist bei einer Rechteckwelle gleich.
Beispielsweise kann eine Rechteckwelle einen Minimalwert von 0 und einen Maximalwert von 1 mit einer Zeitdauer von 1 Sekunde für jeden Wert haben. Im folgenden Diagramm ist eine Rechteckwelle dargestellt.
Eine Rechteckwelle hat auch eine bestimmte Frequenz, die die Anzahl der Zyklen angibt, die eine Rechteckwelle in einer Dauer von einer Sekunde hat. Ein Frequenzwert von 60 Hz bedeutet, dass die Welle 60 Zyklen in einer Sekunde durchläuft.
Mit der Funktion digitalWrite()
können wir in Arduino eine Rechteckwelle erzeugen.
Syntax:
digitalWrite(pin_num, value)
Die obige Syntax setzt die durch die Variable pin_num
angegebene PIN auf HIGH
oder LOW
, angegeben durch die Variable value
. In Arduino bedeutet der Pin-Status LOW
0 Volt und der Pin-Status HIGH
5 Volt oder 3,3 Volt, je nach Arduino-Board.
Um eine Rechteckwelle zu erzeugen, müssen wir den Wert eines digitalen Pins auf LOW
setzen, und nach einer gewissen Verzögerung müssen wir den Wert des digitalen Pins auf HIGH
setzen. Bevor wir den Wert eines digitalen Pins einstellen, müssen wir den Modus für den Pin-ähnlichen INPUT
oder OUTPUT
einstellen, da bei jedem digitalen Pin ein Pull-up-Widerstand vorhanden ist, der den Spannungswert verringert, wenn wir dies nicht tun. t den Modus eines digitalen Pins einstellen.
Wir können die Funktion pinMode()
verwenden, um den Modus für einen Pin einzustellen. Wir müssen die PIN als erstes Argument und den Pin-Modus wie OUTPUT
oder INPUT
als zweites Argument innerhalb der pinMode()
-Funktion übergeben, um den Modus eines digitalen Pins einzustellen.
Wir müssen auch eine Verzögerung hinzufügen, nachdem wir den Wert eines digitalen Pins eingestellt haben, und wir können die Funktion delay()
oder delayMicroseconds()
verwenden, um eine Verzögerung im Arduino-Code hinzuzufügen. Die Funktion delay()
setzt die angegebene Verzögerung in Millisekunden, und die Funktion delayMicroseconds()
setzt die angegebene Verzögerung in Mikrosekunden.
Lassen Sie uns in Arduino eine Rechteckwelle mit einer Frequenz von 10 Hz erzeugen.
Code:
int f_hz = 10;
double delay_time = 1000 / (f_hz * 2);
void setup() { pinMode(11, OUTPUT); }
void loop() {
digitalWrite(11, LOW);
delay(delay_time);
digitalWrite(11, HIGH);
delay(delay_time);
}
Wir haben die Verzögerungszeit im obigen Code mit der Formel 1/f
berechnet, wobei f
die Rechteckwellenfrequenz ist. Wir haben die Zeitspanne mit 1000 multipliziert, weil wir die Funktion delay()
verwendet haben, die die Verzögerung in Millisekunden einstellt, und um die Zeit von Sekunden in Millisekunden umzurechnen, haben wir die Zeitspanne mit 1000 multipliziert.
Um die Ausgangswellenform und -frequenz zu überprüfen, müssen wir ein Oszilloskop verwenden, oder wir können eine LED mit Pin 11 verwenden, die blinkt, wenn die Frequenz niedrig ist. Um das Oszilloskop zu verwenden, müssen wir den Pluspol des Oszilloskops mit Pin 11 und den Minuspol mit der Masse des Arduino verbinden.
Wir haben auch die Zeitspanne durch 2 geteilt, weil wir zwei Impulse in einem einzigen Zyklus haben, und wir werden den Verzögerungswert gleich der Hälfte der gesamten Zeitspanne setzen, nachdem wir den digitalen Pin auf LOW
gesetzt haben, und die andere Hälfte der Zeitspanne wird es tun verwendet werden, um die Verzögerung einzustellen, nachdem der digitale Pin auf HIGH
gesetzt wurde. Wir können im obigen Code sehen, dass wir die Funktion delay()
zweimal verwendet haben.
Der Datentyp des Eingangswerts der Funktion delay()
ist unsigned
long
, und wenn wir eine Verzögerung von weniger als 1 Millisekunde hinzufügen möchten, müssen wir die Funktion delayMicroseconds()
verwenden, die kann eine Verzögerung in Mikrosekunden hinzufügen. Mit der Funktion delayMicroseconds()
können wir hochfrequente Rechteckwellen erzeugen.
Beachten Sie, dass die Funktionen delay()
und delayMicroseconds()
keine Gleitkommazahlen unterstützen, also müssen wir einen Frequenzwert setzen, der den Zeitraum nicht als Gleitkommazahl generieren soll. Durch Hinzufügen einer Verzögerung im Arduino-Code wird auch der andere Betrieb von Arduino angehalten, da Arduino nicht zur nächsten Codezeile wechselt, bis die Verzögerungszeit abgelaufen ist, PWM und Interrupts jedoch weiterhin funktionieren.
Wenn wir die Rechteckwelle erzeugen und gleichzeitig eine andere Aufgabe ausführen möchten, können wir die Funktion millis()
verwenden, die die Zeit in Millisekunden zurückgibt, seit das Programm gestartet wurde. Wir können die Funktion millis()
und die Anweisung if
verwenden, um die verstrichene Zeit zu überprüfen, und wenn die verstrichene Zeit gleich oder größer als die Zeitspanne ist, ändern wir den Status des digitalen Pins.
Auf dieser Seite finden Sie weitere Einzelheiten über die Funktion millis()
, und auf dieser Seite über die Funktion delayMicroseconds()
. Klicken Sie auf diesen Link für Details über die Funktion delay()
, und diesen Link für die Funktion digitalWrite()
.
Wir können auch die Funktion analogWrite()
verwenden, um eine Rechteckwelle zu erzeugen, aber wir können ihre Frequenz nicht definieren. Die Frequenz ist bereits definiert, meistens 499 Hz, oder bei einigen Pins beträgt die Frequenz 1000 Hz.
Wir müssen die PIN als erstes Argument und das Tastverhältnis der Welle, das 127 sein sollte, als zweites Argument innerhalb der Funktion analogWrite()
übergeben, um eine Rechteckwelle zu erzeugen. Wir müssen 127 als zweites Argument übergeben, weil es das Tastverhältnis auf die Hälfte setzt, was notwendig ist, um eine Rechteckwelle zu erzeugen.
Klicken Sie auf diesen Link für Frequenzdetails von PWM-Pins und für weitere Informationen über die Funktion analogWrite()
.