Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Zelfbouw 1 MHz blokgolfgenerator met Arduino Nano – Eenvoudig PWM-circuit

Onderdelen en benodigdheden

OnderdeelAantal
Arduino Nano R31
Adafruit Standard LCD - 16x2 Wit op Blauw1
Drukknoppen (momentary)3
Enkelvoudige potentiometer - 10k ohm1

Apps en online diensten

  • Arduino IDE

Over dit project

Dit is een eenvoudige blokgolfgenerator die de TimerOne-bibliotheek gebruikt om een PWM-signaal te genereren op pin 9 in het bereik van ongeveer 5 Hz tot 1 MHz, met een instelbare duty cycle van 0 tot 100%.

Het apparaat is heel simpel te bouwen en bestaat uit slechts een paar componenten:

  • Arduino Nano microcontroller
  • LCD-display
  • Drie pull-up weerstanden
  • Drie drukknoppen
Zelfbouw 1 MHz blokgolfgenerator met Arduino Nano – Eenvoudig PWM-circuit

De pulsengenerator kan de pulsherhalingsperiode instellen met de knoppen aangesloten op digitale ingangen 6 en 7 van de Arduino. Ingang 13 stelt de duty cycle in. De duur en duty cycle worden op de eerste rij van de 16x2 LCD weergegeven, de frequentie op de tweede rij. De minimale stap voor het aanpassen van de pulsherhalingsperiode is 1 μs, waardoor de frequentie discret verandert: 1 μs = 1 MHz, 2 μs = 500 kHz, 3 μs = 333,333 Hz, enzovoort. Naarmate de frequentie daalt, neemt de gladheid van de instelling toe. Dit is bij hogere frequenties wat minder praktisch, maar dat is de prijs van eenvoudigheid. In een eerdere video beschreef ik een vergelijkbaar apparaat met een gespecialiseerde DDS-chip die deze tekortkomingen niet heeft en een veel groter bereik bezit, maar complexer te bouwen is.

Om het uitgangssignaal te visualiseren gebruik ik een kleine einkanaals oscilloscoop. Uiteindelijk is het apparaat in een geschikte behuizing gemonteerd en is het een nuttig hulpmiddel in de elektronicalaboratorium.

Code

Arduino code

#include 
#include 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS,E,D4,D5,D6,D7
unsigned long t = 1000, f, k = 512; // standaard 1000 μs (1000 Hz), blokgolf, puls
byte k1, kn, kn1, kn2;
int drive, drive0;

void setup() {
  lcd.begin(16, 2); // LCD 16x2
  pinMode(9, OUTPUT);
  pinMode(6, INPUT); // knop op ingang 6 (- pulsperiode)
  pinMode(7, INPUT); // knop op ingang 7 (+ pulsperiode)
  pinMode(13, INPUT); // knop op ingang 13 (+ duty cycle)
}

void loop() {
  Timer1.initialize(t); // periode
  Timer1.pwm(9, k); // k - vulfactor 0-1023
  
  kn = digitalRead(6);  // knop ingang 6 (- pulsperiode)
  kn1 = digitalRead(7); // knop ingang 7 (+ pulsperiode)
  kn2 = digitalRead(13); // knop ingang 13 (+ duty cycle)
  
  if (kn == HIGH) { // periode verkleinen
    drive++;
    if (drive < 30) t = t - 1;
    else if (drive > 30 && drive < 60) t = t - 10;
    else if (drive >= 60 && drive < 100) t = t - 100;
    else if (drive >= 100) t = t - 1000;
  } else {
    drive = 0;
  }
  
  if (kn1 == HIGH) { // periode vergroten
    drive0++;
    if (drive0 < 30) t = t + 1;
    else if (drive0 > 30 && drive0 < 60) t = t + 10;
    else if (drive0 >= 60 && drive0 < 100) t = t + 100;
    else if (drive0 >= 100) t = t + 1000;
  } else {
    drive0 = 0;
  }
  
  if (t == 0 || t > 300000) t = 1; // limiet minimum pulsduur
  if (t > 200000 && t < 300000) t = 200000; // limiet maximum pulsduur
  
  f = 1000000 / t; // frequentie berekenen
  k1 = k * 100 / 1024; // duty cycle percentage berekenen
  
  if (kn2 == HIGH) { // knop voor duty cycle aanpassen (cirkel)
    k = k + 16; // stap 16 uit 1024 (kunt 8 maken voor gladder)
  }
  if (k == 1024) k = 0;
  
  // Informatie tonen op display
  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);
  lcd.setCursor(0, 0);
  lcd.print(" ");
  lcd.setCursor(0, 1);
  lcd.print(" ");
}

Schema's

Zelfbouw 1 MHz blokgolfgenerator met Arduino Nano – Eenvoudig PWM-circuit

Productieproces

  1. Bouw Je Eigen LUMAZOID: Een DIY Arduino Muziek Visualizer
  2. DIY Arduino Woordklok – Bouw een Elegant Real-Time Display
  3. Bouw een 20 kHz Arduino Oscilloscoop op een Nokia 5110 LCD – Eenvoudige DIY Handleiding
  4. Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
  5. JX Wave Generator – Arduino-compatibele DDS-oscillator met OLED-display
  6. Een eenvoudige obstakelsensor bouwen met Arduino – IR LED & Fotodiodo Tutorial
  7. Bouw een DIY VR-skateboard met Arduino, Google Cardboard en Bluetooth
  8. Bouw een eenvoudige rekenmachine met Arduino UNO – Makkelijk project
  9. Een nauwkeurig meetwieltje bouwen met Arduino Nano en draaiencoder
  10. Eenvoudige Arduino Stopwatch: Knop-geactiveerde Chronometer
  11. Blokgolf Signalen Begrijpen: Fundamenten en Toepassingen