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 gemoduleert 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.

 

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

 

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

Het IC L9110 heeft 2 ingangen waarmee je 2 uitgangen schakelt (de twee draden die naar de motor gaan).Het IC schakelt volgens een waarheidstabel:

inputA  inputB  outputA  outputB    motor

  0       0        0        0        uit

  1       0        1        0       rechtsom

  0       1        0        1       linksom

  1       1        1        1        uit

 

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