Inhaltsverzeichnis:
- Schritt 1: Technische Überlegungen
- Schritt 2: Erforderliche Komponenten
- Schritt 3: Konstruktion
- Schritt 4: Der Code
- Schritt 5: Verwendung
Video: Arduino Wellenformgenerator - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
Update Feb. 2021: Testen Sie die neue Version mit 300-facher Abtastrate, basierend auf dem Raspberry Pi Pico
Im Labor benötigt man oft ein sich wiederholendes Signal einer bestimmten Frequenz, Form und Amplitude. Es kann sein, einen Verstärker zu testen, eine Schaltung, ein Bauteil oder einen Aktor zu überprüfen. Leistungsstarke Wellenformgeneratoren sind im Handel erhältlich, aber es ist relativ einfach, mit einem Arduino Uno oder Arduino Nano selbst einen nützlichen zu erstellen, siehe zum Beispiel:
www.instructables.com/id/Arduino-Waveform-…
www.instructables.com/id/10-Resister-Ardui…
Hier ist die Beschreibung eines anderen mit den folgenden Funktionen:
* Präzise Wellenformen: 8-Bit-Ausgabe mit R2R-DAC, 256-Sample-Form
* Schnell: 381 kHz Abtastrate
* Präzise: Frequenzbereich in 1-mHz-Schritten. So genau wie der Arduino-Kristall.
* Einfache Bedienung: Wellenform und Frequenz einstellbar mit einem einzigen Drehgeber
* Breiter Amplitudenbereich: Millivolt bis 20V
* 20 vordefinierte Wellenformen. Einfach mehr hinzufügen.
* Einfach zu machen: Arduino Uno oder Nano plus Standardkomponenten
Schritt 1: Technische Überlegungen
Ein analoges Signal erzeugen
Ein Manko des Arduino Uno und Nano besteht darin, dass es keinen Digital-Analog (DAC)-Wandler hat, so dass es nicht möglich ist, eine analoge Spannung direkt an den Pins auszugeben. Eine Lösung ist die R2R-Leiter: 8 digitale Pins werden mit einem Widerstandsnetzwerk verbunden, sodass 256 Ausgangspegel erreicht werden können. Durch direkten Portzugriff kann der Arduino mit einem einzigen Befehl 8 Pins gleichzeitig setzen. Für das Widerstandsnetzwerk werden 9 Widerstände mit dem Wert R und 8 mit dem Wert 2R benötigt. Ich habe 10kOhm als Wert für R verwendet, der den Strom von den Pins auf 0,5mA oder weniger hält. Ich denke, R = 1 kOhm könnte auch funktionieren, da der Arduino problemlos 5 mA pro Pin und 40 mA pro Port liefern kann. Es ist wichtig, dass das Verhältnis zwischen den Widerständen R und 2R wirklich 2 beträgt. Dies wird am einfachsten erreicht, indem 2 Widerstände mit dem Wert R in Reihe geschaltet werden, also insgesamt 25 Widerstände.
Phasenakkumulator
Das Generieren einer Wellenform läuft dann darauf hinaus, wiederholt eine Folge von 8-Bit-Zahlen an die Arduino-Pins zu senden. Die Wellenform wird in einem Array von 256 Byte gespeichert und dieses Array wird abgetastet und an die Pins gesendet. Die Frequenz des Ausgangssignals wird dadurch bestimmt, wie schnell man durch das Array geht. Ein robuster, präziser und eleganter Weg, dies zu tun, ist ein Phasenakkumulator: Eine 32-Bit-Zahl wird in regelmäßigen Abständen inkrementiert, und wir verwenden die 8 höchstwertigen Bits als Index des Arrays.
Schnelle Probenahme
Interrupts ermöglichen das Abtasten zu genau definierten Zeiten, aber der Overhead von Interrupts begrenzt die Abtastfrequenz auf ~100 kHz. Eine Endlosschleife zum Aktualisieren der Phase, Abtasten der Wellenform und Setzen der Pins benötigt 42 Taktzyklen, wodurch eine Abtastrate von 16MHz/42=381kHz erreicht wird. Das Drehen oder Drücken des Drehgebers bewirkt eine Pinänderung und einen Interrupt, der aus der Schleife herauskommt, um die Einstellung (Wellenform oder Frequenz) zu ändern. In diesem Stadium werden die 256 Zahlen im Array neu berechnet, sodass keine tatsächlichen Berechnungen der Wellenform in der Hauptschleife durchgeführt werden müssen. Die absolute maximale Frequenz, die erzeugt werden kann, beträgt 190 kHz (die Hälfte der Abtastrate), aber dann gibt es nur zwei Abtastungen pro Periode, also nicht viel Kontrolle über die Form. Die Schnittstelle erlaubt somit keine Frequenzeinstellung über 100kHz. Bei 50 kHz gibt es 7-8 Abtastungen pro Periode und bei 1,5 kHz und darunter werden alle 256 im Array gespeicherten Zahlen pro Periode abgetastet. Bei Wellenformen, bei denen sich das Signal sanft ändert, zum Beispiel bei der Sinuswelle, ist das Überspringen von Samples kein Problem. Bei Wellenformen mit schmalen Spitzen, beispielsweise einer Rechteckwelle mit kleinem Tastverhältnis, besteht jedoch die Gefahr, dass bei Frequenzen über 1,5 kHz das Fehlen eines einzelnen Abtastwertes dazu führen kann, dass sich die Wellenform nicht wie erwartet verhält
Genauigkeit der Frequenz
Die Zahl, um die die Phase bei jedem Abtastwert erhöht wird, ist proportional zur Frequenz. Die Frequenz kann somit auf eine Genauigkeit von 381kHz/2^32=0,089mHz eingestellt werden. In der Praxis wird eine solche Genauigkeit kaum benötigt, daher beschränkt sich die Schnittstelle darauf, die Frequenz in Schritten von 1 MHz einzustellen. Die absolute Genauigkeit der Frequenz wird durch die Genauigkeit der Arduino-Taktfrequenz bestimmt. Dies hängt vom Arduino-Typ ab, aber die meisten geben eine Frequenz von 16.000MHz an, also eine Genauigkeit von ~10^-4. Der Code ermöglicht es, das Verhältnis der Frequenz und des Phaseninkrements zu modifizieren, um kleine Abweichungen von der 16-MHz-Annahme zu korrigieren.
Pufferung und Verstärkung
Das Widerstandsnetzwerk hat eine hohe Ausgangsimpedanz, sodass seine Ausgangsspannung schnell abfällt, wenn eine Last angeschlossen wird. Das kann durch Puffern oder Verstärken der Ausgabe gelöst werden. Hier erfolgt die Pufferung und Verstärkung mit einem Operationsverstärker. Ich habe den LM358 verwendet, weil ich welche hatte. Es handelt sich um einen langsamen Operationsverstärker (Slew-Rate 0,5 V pro Mikrosekunde), sodass das Signal bei hoher Frequenz und hoher Amplitude verzerrt wird. Eine gute Sache ist, dass es Spannungen nahe 0V verarbeiten kann. Die Ausgangsspannung ist jedoch auf ~ 2 V unterhalb der Schiene begrenzt, so dass die Verwendung von + 5 V Leistung die Ausgangsspannung auf 3 V begrenzt. Step-up-Module sind kompakt und günstig. Er speist den Operationsverstärker mit +20 V und kann Signale mit einer Spannung von bis zu 18 V erzeugen. (NB, der Schaltplan sagt LTC3105, weil das die einzige Verbesserung war, die ich in Fritzing gefunden habe. In Wirklichkeit habe ich ein MT3608-Modul verwendet, siehe Bilder in den nächsten Schritten). Ich entscheide mich für eine variable Dämpfung am Ausgang des R2R DAC und verwende dann einen der Operationsverstärker, um das Signal ohne Verstärkung zu puffern und den anderen um 5,7 zu verstärken, so dass das Signal eine maximale Ausgabe von etwa 20 V erreichen kann. Der Ausgangsstrom ist ziemlich begrenzt, ~10mA, daher kann ein stärkerer Verstärker erforderlich sein, wenn das Signal einen großen Lautsprecher oder einen Elektromagneten antreiben soll.
Schritt 2: Erforderliche Komponenten
Für den Kernwellenformgenerator
Arduino Uno oder Nano
16x2 LCD-Display + 20kOhm Trimmer und 100Ohm Vorwiderstand für Hintergrundbeleuchtung
5-poliger Drehgeber (mit integriertem Taster)
25 Widerstände von 10kOhm
Für den Puffer/Verstärker
LM358 oder ein anderer Dual-Opamp
Step-Up-Modul auf Basis des MT3608
50kOhm variabler Widerstand
10kOhm Widerstand
47kOhm Widerstand
1muF Kondensator
Schritt 3: Konstruktion
Ich habe alles auf eine 7x9cm Prototypenplatine gelötet, wie im Bild gezeigt. Da es mit all den Drähten etwas unordentlich wurde, habe ich versucht, die Leitungen mit positiver Spannung rot und diejenigen mit Masse schwarz zu färben.
Der von mir verwendete Encoder hat 5 Pins, 3 auf der einen Seite, 2 auf der anderen Seite. Die Seite mit 3 Pins ist der eigentliche Encoder, die Seite mit 2 Pins ist der integrierte Taster. Auf der 3-Pin-Seite sollte der mittlere Pin mit Masse verbunden werden, die anderen beiden Pins mit D10 und D11. Auf der 2-Pin-Seite sollte ein Pin mit Masse und der andere mit D12 verbunden werden.
Es ist das hässlichste, was ich je gemacht habe, aber es funktioniert. Es wäre schön, ein Gehäuse einzubauen, aber im Moment rechtfertigen der zusätzliche Aufwand und die Kosten dies nicht wirklich. Der Nano und das Display sind mit Stiftleisten befestigt. Ich würde das nicht mehr machen, wenn ich ein neues bauen würde. Ich habe keine Anschlüsse auf die Platine gelegt, um die Signale aufzunehmen. Stattdessen hebe ich sie mit Krokodilkabeln aus hervorstehenden Kupferdrahtstücken auf, die wie folgt beschriftet sind:
R - Rohsignal vom R2R DAC
B - gepuffertes Signal
A - verstärktes Signal
T - Timersignal von Pin 9
G - Masse
+ - positive 'hohe' Spannung vom Aufwärtsmodul
Schritt 4: Der Code
Der Code, eine Arduino-Skizze, ist beigefügt und sollte auf den Arduino hochgeladen werden.
20 Wellenformen sind vordefiniert. Es sollte einfach sein, jede andere Welle hinzuzufügen. Beachten Sie, dass die Zufallswellen das 256-Werte-Array mit Zufallswerten füllen, aber das gleiche Muster wird jede Periode wiederholt. Echte Zufallssignale klingen wie Rauschen, aber diese Wellenform klingt viel mehr wie eine Pfeife.
Der Code setzt ein 1-kHz-Signal an Pin D9 mit TIMER1. Dies ist nützlich, um das Timing des analogen Signals zu überprüfen. So habe ich herausgefunden, dass die Anzahl der Taktzyklen 42 beträgt: Wenn ich entweder 41 oder 43 annehme und ein 1-kHz-Signal erzeuge, hat es eindeutig eine andere Frequenz als das Signal an Pin D9. Mit dem Wert 42 passen sie perfekt zusammen.
Normalerweise unterbricht das Arduino jede Millisekunde, um die Zeit mit der Funktion millis () zu verfolgen. Dies würde die genaue Signalerzeugung stören, so dass der jeweilige Interrupt deaktiviert wird.
Der Compiler sagt: "Sketch verwendet 7254 Byte (23%) des Programmspeicherplatzes. Das Maximum beträgt 30720 Byte. Globale Variablen verwenden 483 Byte (23%) des dynamischen Speichers, so dass 1565 Byte für lokale Variablen übrig bleiben. Das Maximum sind 2048 Byte." Es gibt also genügend Platz für komplexeren Code. Beachten Sie, dass Sie möglicherweise "ATmega328P (alter Bootloader)" auswählen müssen, um erfolgreich auf den Nano hochzuladen.
Schritt 5: Verwendung
Der Signalgenerator kann einfach über das Mini-USB-Kabel des Arduino Nano mit Strom versorgt werden. Dies geschieht am besten mit einer Powerbank, damit keine versehentliche Erdschleife mit dem Gerät entsteht, an das es angeschlossen werden kann.
Beim Einschalten wird eine 100Hz Sinuswelle erzeugt. Durch Drehen des Knopfes kann einer der anderen 20 Wellentypen ausgewählt werden. Durch Drehen bei gedrückter Taste kann der Cursor auf eine beliebige Stelle der Frequenz gesetzt werden, die dann auf den gewünschten Wert geändert werden kann.
Mit dem Potentiometer lässt sich die Amplitude regulieren und entweder das gepufferte oder das verstärkte Signal verwenden.
Es ist sehr hilfreich, ein Oszilloskop zu verwenden, um die Signalamplitude zu überprüfen, insbesondere wenn das Signal ein anderes Gerät mit Strom versorgt. Wenn zu viel Strom gezogen wird, wird das Signal abgeschnitten und das Signal ist stark verzerrt
Bei sehr niedrigen Frequenzen kann der Ausgang mit einer LED in Reihe mit einem 10kOhm-Widerstand visualisiert werden. Audiofrequenzen können mit einem Lautsprecher gehört werden. Stellen Sie sicher, dass das Signal sehr klein ~ 0,5 V eingestellt wird, da sonst der Strom zu hoch wird und das Signal abschneidet.
Empfohlen:
Einen Arduino-Gitarren-Tuner herstellen – wikiHow
So bauen Sie einen Arduino-Gitarren-Tuner: Dies sind die Anweisungen, um einen Gitarren-Tuner aus einem Arduino und mehreren anderen Komponenten zu machen. Mit Grundkenntnissen in Elektronik und Codierung können Sie dieses Gitarrenstimmgerät herstellen. Zuerst müssen Sie wissen, was die Materialien sind. Ma
ALARMA ARDUINO CON SENSOR DE MOVIMIENTO, SIRENA Y AVISO AL TLF. MÓVIL: 9 Schritte
ALARMA ARDUINO CON SENSOR DE MOVIMIENTO, SIRENA Y AVISO AL TLF. MÓVIL: Este proyecto consiste en a alarma básica que Detecta presencia, activa una sirena de 108dB y visa al usuario mediante un SMS (opcional). Permite también el control remoto básico por parte del usuario a través de SMS (encendido, apagado, reinicio
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Einfaches BLE mit sehr geringem Stromverbrauch in Arduino Teil 2 - Temperatur- / Feuchtigkeitsmonitor - Rev 3: 7 Schritte
Easy Very Low Power BLE in Arduino Teil 2 – Temperatur-/Feuchtigkeitsmonitor – Rev 3: Update: 23. November 2020 – Erster Austausch von 2 x AAA-Batterien seit 15. Januar 2019 dh 22 Monate für 2x AAA AlkalineUpdate: 7. April 2019 – Rev 3 of lp_BLE_TempHumidity, fügt Datum/Uhrzeit-Plots hinzu, verwendet pfodApp V3.0.362+ und automatische Drosselung, wenn
Arduino-Programmierung über das Handy -- Arduinodroid -- Arduino-Ide für Android -- Blinzeln: 4 Schritte
Arduino-Programmierung über das Handy || Arduinodroid || Arduino-Ide für Android || Blink: Bitte abonnieren Sie meinen Youtube-Kanal für weitere Videos…… Arduino ist ein Board, das direkt über USB programmiert werden kann. Es ist sehr einfach und günstig für College- und Schulprojekte oder sogar für Produktprototypen. Viele Produkte bauen zunächst darauf für i