Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

DIY 1-MHz-Rechteckgenerator mit Arduino Nano – Einfache PWM-Schaltung

Komponenten und Materialien

Bauteil Menge Hinweise
Arduino Nano R3 1
LCD-Display 16×2 (weiß auf blau) 1 Adafruit Standard
Taster (Momentan) 3
Potentiometer 10 kΩ (Einmal-Drehung) 1

Software und Online-Dienste

Projektbeschreibung

Dies ist ein einfacher Rechteckwellengenerator, der die TimerOne-Bibliothek nutzt, um an Pin 9 ein PWM-Signal im Bereich von ca. 5 Hz bis 1 MHz zu erzeugen. Der Duty-Cycle lässt sich von 0 bis 100 % einstellen.

Der Aufbau ist sehr simpel und besteht nur aus wenigen Bauteilen:

DIY 1-MHz-Rechteckgenerator mit Arduino Nano – Einfache PWM-Schaltung

Bedienung und Funktionsweise

Die Anzeige auf dem LCD (16×2) zeigt:

Der minimalste Schritt bei der Periodendauer beträgt 1 µs. Dadurch ändert sich die Frequenz diskret: 1 µs = 1 MHz, 2 µs = 500 kHz, 3 µs = 333,333 kHz usw. Bei niedrigeren Frequenzen wird die Einstellung feiner. Dies ist bei hohen Frequenzen etwas unpraktisch, aber der Preis für die Einfachheit.

In einem früheren Projekt habe ich einen ähnlichen Generator mit einem spezialisierten DDS-Chip gebaut, der diese Nachteile nicht hat und einen größeren Bereich bietet, aber komplexer aufzubauen ist.

Zur Visualisierung des Ausgangssignals nutze ich ein kleines einkanaliges Oszilloskop. Schließlich wird das Gerät in ein passendes Gehäuse eingebaut und ist ein weiteres nützliches Werkzeug in der Elektronik-Werkstatt.

Code

#include <TimerOne.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, E, D4, D5, D6, D7

unsigned long t = 1000; // Periodendauer in µs (Default 1000 µs = 1 kHz)
unsigned long f;        // Frequenz
unsigned long k = 512;  // Duty-Cycle (0-1023), Default 50%

byte kn, kn1, kn2;      // Tasterzustände
int drive = 0, drive0 = 0; // Zähler für langes Drücken

void setup() {
  lcd.begin(16, 2);
  pinMode(9, OUTPUT);      // PWM-Ausgang
  pinMode(6, INPUT);       // Taster - Periode
  pinMode(7, INPUT);       // Taster + Periode
  pinMode(13, INPUT);      // Taster Duty-Cycle
}

void loop() {
  Timer1.initialize(t);    // Periode setzen
  Timer1.pwm(9, k);        // PWM mit Duty-Cycle k

  kn  = digitalRead(6);    // Taster Pin 6
  kn1 = digitalRead(7);    // Taster Pin 7
  kn2 = digitalRead(13);   // Taster Pin 13

  // --- Periode verringern (Frequenz erhöhen) ---
  if (kn == HIGH) {
    drive++;
    if (drive < 30)        t -= 1;
    else if (drive < 60)   t -= 10;
    else if (drive < 100)  t -= 100;
    else                   t -= 1000;
  } else {
    drive = 0;
  }

  // --- Periode erhöhen (Frequenz verringern) ---
  if (kn1 == HIGH) {
    drive0++;
    if (drive0 < 30)       t += 1;
    else if (drive0 < 60)  t += 10;
    else if (drive0 < 100) t += 100;
    else                   t += 1000;
  } else {
    drive0 = 0;
  }

  // Begrenzung der Periodendauer
  if (t == 0 || t > 300000) t = 1;
  if (t > 200000 && t < 300000) t = 200000;

  f = 1000000 / t;              // Frequenz in Hz berechnen
  int k1 = k * 100 / 1024;      // Duty-Cycle in %

  // --- Duty-Cycle ändern ---
  if (kn2 == HIGH) {
    k += 16;                    // Schrittweite 16/1024 (für feiner: 8)
    if (k == 1024) k = 0;       // Überlauf
  }

  // --- LCD-Anzeige aktualisieren ---
  lcd.setCursor(0, 0);
  lcd.print("T=");
  lcd.print(t);
  lcd.print(" us");
  lcd.setCursor(12, 0);
  lcd.print(k1);
  lcd.print(" %");

  lcd.setCursor(0, 1);
  lcd.print("F=");
  lcd.print(f);
  lcd.print(" Hz");

  delay(300);

  // Anzeige kurz löschen (Flackern vermeiden)
  lcd.setCursor(0, 0);
  lcd.print(" ");
  lcd.setCursor(0, 1);
  lcd.print(" ");
}

Schaltplan

DIY 1-MHz-Rechteckgenerator mit Arduino Nano – Einfache PWM-Schaltung

Herstellungsprozess

  1. Rechteckwellensignale verstehen: Grundlagen und Anwendungen
  2. Eigenen LUMAZOID bauen: DIY Arduino Musik-Visualisierer
  3. DIY Arduino Word Clock – Elegante Wortuhr mit RTC & Schieberegistern
  4. 20-kHz-Arduino-Oszilloskop mit Nokia 5110 LCD – Einfacher DIY-Bau
  5. Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
  6. JX Wave Generator – Arduino-kompatibler DDS-Oszillator mit OLED-Display
  7. Einfachen Hindernissensor mit Arduino bauen – IR-LED & Photodiode Tutorial
  8. DIY VR-Skateboard mit Arduino, Google Cardboard und Bluetooth bauen
  9. Einfacher Taschenrechner mit Arduino UNO – Einsteigerprojekt
  10. Präzises DIY-Messrad mit Arduino Nano und Drehgeber