You are on page 1of 7

VIIO Tongeren geautomatiseerde EM-processen

Naam: Klas: 6 EM Nr.:

Vak: Geautomatiseerde EM- Leraar: G Derison


processen
Datum: Cijfer:

ZELFEVALUATIE
Notities: in orde/niet in orde Leerstof begrepen: wel/niet
Planning: goed/niet goed Vragen begrepen: wel/niet
Studietijd: voldoende/te weinig Verwacht cijfer: ...../.....

Programmeren met Arduino – aansturen van een DC-motor


mbv een H-brug

Een gelijkstroom (DC) elektromotor is in staat om elektrische energie


om te zetten in mechanische energie (draaibeweging).

Bij een DC-motor komt de elektrische energie van een batterij. (De spanning
en de stroom die het Arduinobordje zelf levert is vaak niet hoog genoeg om de
motor te doen draaien. Een mosfet kan ons hierbij helpen zoals in de vorige
opdrachten reeds is aangetoond. Willen we ook nog de draairinchting van de
motor kunnen omkeren hebben we echter nog een bijkomend probleem.

Er is dus een extra schakeling nodig, die de sturing vanwege de microcontroller


op de Arduino en de externe voedingspanning van de batterij combineert en
tegelijk de motor van draairichting kan doen veranderen. Hiervoor gebruiken
we een microchip of IC dat verantwoordelijk is voor de motorsturing, en
noemen we een H-brug. Schematisch stellen we de schakeling van een H-brug
als volgt voor. Centraal zetten we de DC motor (M).

digitale uitgang digitale uitgang


van de Arduino van de Arduino

G. Derison
VIIO Tongeren geautomatiseerde EM-processen

De DC spanning komt van de De motor staat in een H-vorm geschakeld,


externe batterij of de adapter. vandaar de naam H-brug.

Open
Gesloten schakelaar schakelaar

digitale uitgang A digitale uitgang B


van de Arduino van de Arduino

Hier komt een 1 of een 0 toe Hier komt een 1 of een 0 toe
vanuit het programma op vanuit het programma op
de microcontroller. de microcontroller.

Bolletje staat voor ‘NIET’:


het keert een 1 om in een 0
en een 0 in een 1.

Zoals op de figuur te zien is, heeft de H-brug twee signalen nodig, die
afkomstig zijn van twee uitgangspinnen op de Arduino.

Om de motor te laten draaien, moet er een elektrische stroom van de DC


spanningsbron naar de aarding / grond (GND) lopen. Een schakelaar die een 1-
signaal krijgt, zal sluiten en de elektrische stroom doorlaten. Een schakelaar
die een 0-signaal krijgt, opent en zal geen stroom geleiden. Afhankelijk van
het signaal dat de 4 schakelaars krijgen via de twee digitale uitgangen van de
Arduino, zal de motor in voorwaartse zin, in achterwaartse zin, of niet draaien:

G. Derison
VIIO Tongeren geautomatiseerde EM-processen

Wanneer
- digitale uitgang A = 0 (of LOW) EN digitale uitgang B = 1 (of
HIGH),
- digitale uitgang A = 1 (of HIGH) EN digitale uitgang B = 0 (of LOW)
gaat de motor oftewel in de ene oftewel in de andere zin draaien.

In de andere 2 gevallen, vloeit er geen elektrische stroom naar de motor,


omdat de motor met beide contacten oftewel met de DC spanningsbron oftewel
met de grond (GND) verbonden is, en de elektrische stroom kan maar lopen
alts er een pad is van de DC voedingsspanning naar de grond.
De digitale uitgangen A en B van de Arduino worden verbonden met twee
digitale ingangspinnen van de H-brug. Hieronder zie je het aansluitschema van
de H-brug (L293D) afgebeeld:

Op de H-brug zijn er echter 2x twee digitale ingangspinnen voor de aansluiting


met digitale uitgangen (A en B, en A’ en B’) van de Arduino, nl. pinnen 2 en 7
en pinnen 10 en 15. Dat betekent dat er twee motoren op kunnen aangesloten
worden. Stel dat je het wagentje bochten wil laten nemen en je hebt geen
gesofisticeerde overbrengingsmechaniek voorhande, dan kom je namelijk met
één motor niet toe.

De contacten van de motor(en) verbind je met uitgangspinnen 3 en 6 (en 14


en 11) van de H-brug.

Op pin 8 wordt de DC batterijvoeding aangesloten om de motor(en) van


voldoende stroom te voorzien. Op pin 16 wordt met de 5 V-pin van de Arduino
geconnecteerd om de H-brug van voldoende stroom te voorzien.
De volledige schakeling van de H-brug met twee motoren met de Arduino, kan
er dan bv. als volgt uit zien:
3

G. Derison
VIIO Tongeren geautomatiseerde EM-processen

Voor de Arduino kan om het even welke digitale uitgangspin gebruikt worden
om dienst te doen als digitale uitgang A of B van de Arduino.

Pinnen 1 en 9 van de H-brug moeten echter verbonden worden met


uitgangspinnen van de Arduino die met PWM-mogelijkheid zijn uitgerust! (zie
verder)

Pinnen 4 en 5 en pinnen 13 en 12 moeten aan de grond (GND) verbonden


worden.

We weten nu hoe de motor


- in de ene zin kan draaien:
digitalWrite(digitale uitgangspin A, HIGH);
digitalWrite(digitale uitgangspin B, LOW);

- in de andere zin kan draaien:


digitalWrite(digitale uitgangspin A, LOW);
digitalWrite(digitale uitgangspin B, HIGH);

De draaizin van de motor hangt af van de ‘+’ en ‘-‘aansluiting van de motor.


Die moet je experimenteel vaststellen.

Maar hoe kunnen we nu de snelheid van de motor regelen?


Pin 1 van de H-brug verwacht ook nog een signaal, zou dat er iets mee te
maken hebben? Hieronder zie je een voorbeeldprogramma:

G. Derison
VIIO Tongeren geautomatiseerde EM-processen

Opgelet: met bovenstaand programma begint de motor onmiddellijk te draaien zodra het
programma op de microcontroller geüpload is, en stopt hij pas wanneer de DC
voedingsspanning gedeconnecteerd wordt.

Als je voor de variabele PB een bepaalde waarde instelt, zal het wagentje een
bepaalde snelheid rijden.
Het aanpassen van deze variabele, heet ‘pulsbreedtemodulatie’ of ‘PWM’ (=
pulse width modulation). Je ziet deze afkorting ook terugkomen in het
programma en op enkele pinnen van de Arduino.

De variabele ‘PB’ waar het hem in dit programma om te doen is, noemen we
ook wel ‘de motorwaarde’.

De snelheid van de motor hangt af van de grootte van de aangelegde


spanning (eigen aan de batterij).
Nu hebben we nog een probleem: de batterij geeft namelijk een constante
spanning en de microcontroller kan enkel maar spanningen 0 V of 5 V
uitsturen, en niets daartussen:
- 0 V staat voor ‘0’, of ‘geen spanning’ (motor werkt niet),
- 5 V staat voor ‘1’, of ‘maximale spanning’ (motor werkt)
Het ziet er dus naar uit dat de motor ofwel niet (0), ofwel op één bepaalde
maximale snelheid (1) zal werken.

Maar...

G. Derison
VIIO Tongeren geautomatiseerde EM-processen

Wat als we de snelheid van onze motor (en dus de spanning) willen regelen
naar waarden tussen ‘uit’ en ‘maximaal’?

Hiertoe zullen we de motor voortdurend AAN (1) en UIT (0) schakelen


via de PWM-pinnen van de Arduino. Dit doen we aan zo’n hoge frequentie (=
zo snel, typisch 10000 keer/s), dat zelfs de motor zelf niet snel genoeg kan
reageren. Op deze manier zal niemand iets merken van dit schakelen, maar
kunnen we toch het signaal zo manipuleren dat we het gemiddelde vermogen
van de motor kunnen regelen:

Je kan zo voor een hogere snelheid de ‘AAN’-tijd (tijd dat 1 wordt


uitgestuurd) langer laten duren dan de ‘UIT’-tijd (tijd dat 0 wordt
uitgestuurd).

Voorbeeld: de motor 4 s vooruit laten draaien


Om de motor te doen stoppen, moet de enablePWMPin signaal 0 krijgen.
Let op, het wagentje rijdt van zodra het programma op de microcontroller
geüpload is!

G. Derison
VIIO Tongeren geautomatiseerde EM-processen

Wat de motor ook doet stoppen, is beide digitale uitgangen, ‘controlPinA’ en


‘controlPinB’ beiden op HIGH, of beiden op LOW zetten. Kijk maar terug naar
de eerdere tabel met H-bruggen voor het effect daarvan.

De while(1)-lus is een oneindige lus. Waarom is die ingevoerd?

Oefening: de motor vooruit en achteruit laten draaien


Programmeer je motortje zo dat het 3 s rechtsom draait aan maximale
snelheid, en daarna 2 s linksom aan 40% van het maximale toerental, en dit in
een oneindige lus.
Let op, het wagentje rijdt van zodra het programma op de microcontroller
geüpload is!

Hoe kan je de draaizin van de motor omkeren ?

G. Derison

You might also like