DC motor snelheid regelen

De rotatiesnelheid van een DC motor (aandrijfmotor of ventilator) is goed te regelen door de energietoevoer met een blokgolf aan- en uit te schakelen. Hoe langer de aan-stap is, hoe sneller de motor draait. Zo'n signaal heet een pulsbreedte gemoduleerd signaal, oftewel Pulse Width Modulation PWM.

Door de Arduino te gebruiken om de blokgolf te genereren en deze blokgolf te versterken met een externe voeding en driver (printje met L9110 chip) kun je een motor met behoorlijk vermogen gebruiken.

Wil je de motor alleen volledig aan- en uitschakelen dan hoef je niet te moduleren maar kun je de signalen continu hoog of laag maken.

 

Het driver-bordje om 2 motoren te regelen, het IC is de L9110.

 

Waarheidstabel voor de regeling van een motor

Het printje heeft per motoruitgang twee ingangen om de motor te regelen. Onderstaande waarheidstabel laat zien hoe dit werkt voor motor A:

 

A in I    A in II    Motor A

  0          0       uit

  1          0       rechtsom

  0          1       linksom

  1          1       uit

 

 

Code voorbeeld Arduino UNO

Met het commando analogWrite(naam,waarde) geef je de opdracht om het signaal aan de uitgangspoort beschikbaar te maken. naam Is de naam die je aan de poort hebt gegeven. Let er op dat niet alle uitgangen van de Arduino geschikt zijn voor een PWM signaal.

waarde Is de gemiddelde waarde die je wilt dat het signaal heeft. Deze is instelbaar tussen 0% (UIT) en 100% (AAN).

formule:  Duty cycle = (waarde / 255) [%]

Duty cycle 0% = 0

Duty cycle 50% = 127

Duty cycle 100% = 255

 

onderstaand een voorbeeldcode voor de combinatie Arduino / Chip L9110 / DC motor

 

// pwm analogWrite op pin D05 490Hz
// pwm analogWrite op pin D06 490Hz
const int LINKS = 5; // motor pwm signaal op pin D04
const int RECHTS = 6; // motor pwm signaal op pin D05

void setup()
  {
  pinMode(LINKS, OUTPUT); //
  pinMode(RECHTS, OUTPUT); //
  }

void loop()
  {
     analogWrite(LINKS,0);
     analogWrite(RECHTS,0);
     delay(500); // wacht xx ms
     
     analogWrite(RECHTS,125);
     delay(2000); // wacht xx ms
     
     analogWrite(RECHTS,200);
     delay(2000); // wacht xx ms
     
     analogWrite(RECHTS,255);
     delay(2000); // wacht xx ms
     
     analogWrite(LINKS,0);
     analogWrite(RECHTS,0);
     delay(500); // wacht xx ms
     
     analogWrite(LINKS,200);
     delay(2000); // wacht xx ms      
  }