Zoeken…


Bedien een DC-motor via de seriële poort met behulp van PWM

In dit voorbeeld willen we een van de meest voorkomende taken uitvoeren: ik heb een kleine DC-motor liggen, hoe gebruik ik mijn Arduino om deze te besturen? Eenvoudig, met PWM en seriële communicatie, met behulp van de functie analogWrite() en de Serial bibliotheek.

De basis

Pulsbreedtemodulatie of kortweg PWM is een techniek voor het nabootsen van analoge signalen met behulp van digitale uitvoer. Hoe werkt dit? Met behulp van een pulstrein waarvan de relatie D (duty cycle) tussen tijd op hoog niveau (digitaal 1, meestal 5 V) en tijd op laag niveau (digitaal 0, 0 V) in elke periode kan worden gewijzigd om een gemiddelde spanning tussen deze twee niveaus te produceren:

voer hier de afbeeldingsbeschrijving in

Via Arduino analogWrite(pin,value) functie kunnen we variëren value van de werkcyclus van pin output 's. Merk op dat de pin in de uitvoermodus moet worden geplaatst en dat de value tussen 0 (0V) en 255 (5V) moet liggen. Elke waarde daartussenin simuleert een proportionele tussenliggende analoge uitgang.

Het doel van analoge signalen is echter meestal gerelateerd aan de besturing van mechanische systemen die meer spanning en stroom vereisen dan alleen het Arduino-bord. In dit voorbeeld leren we hoe we de PWM-mogelijkheden van Arduino kunnen versterken.

Hiervoor wordt een MOSFET-diode gebruikt. In wezen fungeert deze diode als een schakelaar. Het laat toe of onderbreekt de elektrische stroom tussen zijn bron- en afvoeraansluitingen . Maar in plaats van een mechanische schakelaar, beschikt deze over een derde aansluiting die gate wordt genoemd . Een zeer kleine stroom (<1 mA) zal deze poort "openen" en de stroom laten stromen. Dit is erg handig, omdat we de PWM-uitvoer van Arduino naar deze poort kunnen sturen, waardoor een andere PWM-pulstrein met dezelfde duty-cycle door de MOSFET wordt gecreëerd, die spanningen en stromen mogelijk maakt die de Arduino zouden vernietigen.

Stuklijst: wat heb je nodig om dit voorbeeld te bouwen

  • MOSFET-diode: bijvoorbeeld de populaire BUZ11
  • Beschermingsdiode voor de motor: Schottky SB320
  • Weerstand: alles 10K ~ 1M Ohm
  • Motor: een typische kleine motor (een typische kan 12V zijn)
  • Een stroombron die compatibel is met de motor die u hebt geselecteerd
  • Een broodplank
  • Kleurrijke kabels!
  • Een Arduino, maar dat wist je al.

De build

Zet alles samen! Voed de rails van het breadboard en plaats de MOSFET-diode erin. Verbind de motor tussen de positieve rail en de MOSFET-afvoer. Verbind de beveiligingsdiode op dezelfde manier: tussen de MOSFET-afvoer en de positieve rail. Sluit de bron van de MOSFET aan op de gemeenschappelijke grondrail. Sluit ten slotte de PWM-pin (we gebruiken pin 10 in dit voorbeeld) aan op de poort van de MOSFET en ook op de gemeenschappelijke aarde via de weerstand (we hebben zeer lage stroom nodig!).

Hier is een voorbeeld van hoe deze build eruit ziet. Als u de voorkeur geeft aan een schema , is dit er een.

Fysiek schema

De code

Nu kunnen we de Arduino op een computer aansluiten, de code uploaden en de motor besturen, door waarden te verzenden via de seriële communicatie. Bedenk dat deze waarden gehele getallen tussen 0 en 255 moeten zijn. De eigenlijke code van dit voorbeeld is heel eenvoudig. Een uitleg wordt gegeven in elke regel.

int in = 0;                   // Variable to store the desired value
byte pinOut = 10;             // PWM output pin

void setup() {                // This executes once
  Serial.begin(9600);             // Initialize serial port
  pinMode(pinOut, OUTPUT);        // Prepare output pin
}

void loop() {                 // This loops continuously
  if(Serial.available()){         // Check if there's data
    in = Serial.read();           // Read said data into the variable "in"
    analogWrite(pinOut, in);      // Pass the value of "in" to the pin
  }
}

En dat is het! Nu kunt u de PWM-mogelijkheden van Arduino gebruiken om toepassingen te besturen die analoge signalen vereisen, zelfs wanneer de stroomvereisten de limieten van het bord overschrijden.

PWM met een TLC5940

De TLC5940 is een handig item om te hebben als je geen PWM-poorten meer hebt op de Arduino. Het heeft 16 kanalen, elk afzonderlijk regelbaar met 12 bits resolutie (0-4095). Een bestaande bibliotheek is beschikbaar op http://playground.arduino.cc/Learning/TLC5940 . Het is handig voor het besturen van meerdere servo's of RGB-LED's. Houd er rekening mee dat de LED's een gemeenschappelijke anode moeten zijn om te werken. Bovendien zijn de chips in serie te schakelen, waardoor nog meer PWM-poorten mogelijk zijn.

Voorbeeld:

// Include the library
#include <Tlc5940.h>

void setup() {
    // Initialize
    Tlc.init();
    Tlc.clear(); 
}

unsigned int level = 0;
void loop() {
    // Set all 16 outputs to same value
    for (int i = 0; i < 16; i++) {
        Tlc.set(i, level);
    }
    level = (level + 1) % 4096;
    // Tell the library to send the values to the chip
    Tlc.update();
    delay(10);
}


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow