Sök…


Styr en likströmsmotor genom serieporten med PWM

I detta exempel syftar vi till att utföra en av de vanligaste uppgifterna: Jag har en liten likströmsmotor som ligger runt, hur använder jag min Arduino för att kontrollera den? Enkelt med PWM och seriell kommunikation med funktionen analogWrite() och Serial biblioteket.

Det grundläggande

Pulsbreddsmodulering eller PWM för kort är en teknik för att härma analoga signaler med digital utgång. Hur fungerar detta? Med hjälp av ett pulståg vars relation D (arbetscykel) mellan tid på hög nivå (digital 1, vanligtvis 5V) och tid på låg nivå (digital 0, 0V) i varje period kan modifieras för att producera en genomsnittlig spänning mellan dessa två nivåer:

ange bildbeskrivning här

Genom att använda Arduinos analogWrite(pin,value) funktion kan vi variera value av pulskvoten hos pin s utgång. Observera att pin måste sättas i utgångsläge och value måste vara mellan 0 (0V) och 255 (5V). Alla värden däremellan simulerar en proportionell mellanliggande analog utgång.

Syftet med analoga signaler är dock vanligtvis relaterat till styrningen av mekaniska system som kräver mer spänning och ström än Arduino-kortet bara kan. I det här exemplet kommer vi att lära dig hur man förstärker Arduinos PWM-kapacitet.

För detta används en MOSFET-diod. I huvudsak fungerar denna diod som en switch. Det tillåter eller avbryter det elektriska flödet mellan dess käll- och avtappningsterminaler . Men istället för en mekanisk omkopplare har den en tredje terminal som heter gate . En mycket liten ström (<1mA) "öppnar" denna grind och låter strömmen flöda. Detta är väldigt bekvämt eftersom vi kan skicka Arduinos PWM-utgång till denna grind och därmed skapa ytterligare ett PWM-pulståg med samma arbetscykel genom MOSFET, vilket tillåter spänningar och strömmar som skulle förstöra Arduino.

Materialräkning: vad behöver du för att bygga detta exempel

  • MOSFET-diod: till exempel den populära BUZ11
  • Skyddsdiode för motorn: Schottky SB320
  • Motstånd: allt 10K ~ 1M Ohm
  • Motor: En typisk liten motor (en typisk kan vara 12V)
  • En strömkälla som är kompatibel med den motor du har valt
  • En brödskiva
  • Färgglada kablar!
  • En Arduino, men du visste redan det.

Byggnaden

Sätt ihop allt! Ström på brädskivorna och placera MOSFET-dioden i den. Anslut motorn mellan den positiva skenan och MOSFET-avloppet. Anslut skyddsdioden på samma sätt: mellan MOSFET-avloppet och den positiva skenan. Anslut källan till MOSFET till den gemensamma markskenan. Slutligen, anslut PWM-stiftet (vi använder stift 10 i det här exemplet) till grinden till MOSFET och även till gemensam mark genom motståndet (vi behöver mycket låg ström!).

Här är ett exempel på hur denna byggnad ser ut. Om du föredrar ett schema här är det.

Fysiskt schema

Koden

Nu kan vi ansluta Arduino till en dator, ladda upp koden och kontrollera motorn genom att skicka värden via den seriella kommunikationen. Kom ihåg att dessa värden bör vara heltal mellan 0 och 255. Den faktiska koden i detta exempel är mycket enkel. En förklaring ges i varje rad.

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
  }
}

Och det är allt! Nu kan du använda Arduinos PWM-funktioner för att styra applikationer som kräver analoga signaler även om strömkraven överskrider kortets gränser.

PWM med en TLC5940

TLC5940 är ett praktiskt föremål när du har slut på PWM-portar på Arduino. Den har 16 kanaler, var och en individuellt styrbar med 12 upplösningsbitar (0-4095). Ett befintligt bibliotek finns på http://playground.arduino.cc/Learning/TLC5940 . Det är användbart för att styra flera servon eller RGB-lysdioder. Tänk bara på att lysdioderna måste vara en vanlig anod för att fungera. Dessutom är chipen daisy-chainable, vilket tillåter ännu fler PWM-portar.

Exempel:

// 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow