Difference between revisions of "Arduino - Motor met Power"
(→MOSFET driver) |
(→Draairichting omkeren) |
||
| Line 22: | Line 22: | ||
===Draairichting omkeren=== | ===Draairichting omkeren=== | ||
| − | De schakeling uit de vorige paragraaf voldoet als je de motor alleen aan en uit wilt zetten, of alleen de motorsnelheid wilt besturen. In veel gevallen wil je echter ook dat de motor achteruit kan draaien. Voor het veranderen van de draairichting moet je de motor in een brug-schakeling opnemen. Deze is eerder | + | De schakeling uit de vorige paragraaf voldoet als je de motor alleen aan en uit wilt zetten, of alleen de motorsnelheid wilt besturen. In veel gevallen wil je echter ook dat de motor achteruit kan draaien. Voor het veranderen van de draairichting moet je de motor in een brug-schakeling opnemen. Deze is eerder besproken bij het [[Arduino_-_De_stappenmotor#Werking|stappenmotor-project]]. |
{|class="wikitable" | {|class="wikitable" | ||
| Line 31: | Line 31: | ||
|} | |} | ||
| − | Onthoud altijd goed dat je bij een brug-schakeling <u>nooit</u> de twee boven elkaar staande schakelaars sluit, want dan krijg je kortsluiting en gaan er dingen kapot. Natuurlijk gebruiken we ook hier MOSFETs in plaats van schakelaars. De MOSFET die we hierboven hebben gebruikt is een zogenaamde '''N-channel MOSFET'''. Dit type schakelt op basis van een positief spanningsverschil tussen Gate en Source. De Source is verbonden met aarde (nul) en de Gate met het input signaal. Als de Gate dan 5 Volt krijgt is de MOSFET open en anders zit hij dicht. De essentie is nu: de Gate voert 5 Volt meer dan op de Source. Omdat de Source aan de nul hangt is dat normaal een onbeduidend detail. Maar als je nu nog eens goed naar de burgschakeling kijkt, dan zie je dat het hier wat anders ligt. De bovenste MOSFET's hangen met de ene kant aan de plus, | + | Onthoud altijd goed dat je bij een brug-schakeling <u>nooit</u> de twee boven elkaar staande schakelaars sluit, want dan krijg je kortsluiting en gaan er dingen kapot. Natuurlijk gebruiken we ook hier MOSFETs in plaats van schakelaars. De MOSFET die we hierboven hebben gebruikt is een zogenaamde '''N-channel MOSFET'''. Dit type schakelt op basis van een positief spanningsverschil tussen Gate en Source. De Source is verbonden met aarde (nul) en de Gate met het input signaal. Als de Gate dan 5 Volt krijgt is de MOSFET open en anders zit hij dicht. De essentie is nu: de Gate voert 5 Volt meer dan op de Source. Omdat de Source aan de nul hangt is dat normaal een onbeduidend detail. Maar als je nu nog eens goed naar de burgschakeling kijkt, dan zie je dat het hier wat anders ligt. De bovenste MOSFET's hangen met de ene kant aan de plus, terwijl de spanning op de andere kant (voorheen de Source) ervan afhangt of de MOSFET blokkeert of doorlaat. Als hij doorlaat wordt die spanning ook hoog, blokkeert hij, dan wordt die spanning laag. Stel nu dat we hier ook een N-channel MOSFET zouden gebruiken. Dan moet de Gate, om hem volledig op doorlaten te zetten, een hogere spanning krijgen dan de Source (bijvoorbeeld 5 Volt hoger, de exacte spanning hangt af van het precieze type MOSFET). Maar zodra hij stroom gaat doorlaten, neemt de spanning op de Source toe en komt die zo'n beetje aan de plus te hangen. Dan zou hij dus weer meteen sluiten. Dat gaat dus niet goed. Daarbij wil je soms dat de motor op een veel hogere spanning draait dan de 5 Volt van je Arduino. Dat lukt natuurlijk nooit met alleen je Arduino. |
Gelukkig is er nog en ander type MOSFET: de zogenaamde '''P-channel MOSFET'''. Deze wordt iets anders getekend (het pijltje van de Gate loopt andersom) en het schakelgedrag is net andersom en ook iets lastiger te begrijpen. Daarbij wordt hier de Source aan de plus gehangen terwijl de Drain naar de motor loopt. De spanning op de Source zit dus hoger dan die op de Drain. Zo werkt ook het schakelgedrag: de MOSFET opent als de Gate een spanning voert die (bijvoorbeeld 5 Volt) '''lager''' is dan de Source en hij sluit als de Gate een spanning krijgt die gelijk is aan die van de Source (of daar voldoende dichtbij komt). | Gelukkig is er nog en ander type MOSFET: de zogenaamde '''P-channel MOSFET'''. Deze wordt iets anders getekend (het pijltje van de Gate loopt andersom) en het schakelgedrag is net andersom en ook iets lastiger te begrijpen. Daarbij wordt hier de Source aan de plus gehangen terwijl de Drain naar de motor loopt. De spanning op de Source zit dus hoger dan die op de Drain. Zo werkt ook het schakelgedrag: de MOSFET opent als de Gate een spanning voert die (bijvoorbeeld 5 Volt) '''lager''' is dan de Source en hij sluit als de Gate een spanning krijgt die gelijk is aan die van de Source (of daar voldoende dichtbij komt). | ||
| − | Hieronder laten we nu het principe zien van de brugschakeling met vier MOSFET's voor de schakelaars. De dikke lijnen geven aan waar veel stroom kan lopen. De dunne lijnen zijn voor zwakke stuursignalen. De bovenste twee MOSFET's zijn van het P-type en de onderste twee van het N-type. De schakeling heeft twee PWM signalen nodig; beide richtingen worden afzonderlijk aangestuurd. Daar komt bij dat je ervoor moet zorgen dat als je '''PWM A''' wilt gebruiken (de ene draairichting) '''ON A''' hoog is (en '''ON B''' laag) en als je PWM B wilt gebruiken (de andere draairichting) '''ON B''' hoog moet zijn en ('''ON A''' laag). Als zowel '''ON A''' als '''ON B''' laag zijn draait de motor sowieso niet omdat dan beide P-channel MOSFET's zullen blokkeren. Ze beide hoog maken is een slecht idee omdat er dan kortsluiting ontstaat zodra een van de PWM ingangen even hoog wordt. De motor zal dan ook niet lopen, maar in plaats daarvan gaan je FET's eraan. | + | Hieronder laten we nu het principe zien van de brugschakeling met vier MOSFET's voor de schakelaars. De dikke lijnen geven weer aan waar veel stroom kan lopen. De dunne lijnen zijn voor zwakke stuursignalen. De bovenste twee MOSFET's zijn van het P-type en de onderste twee van het N-type. De schakeling heeft twee PWM signalen nodig; beide richtingen worden afzonderlijk aangestuurd. Daar komt bij dat je ervoor moet zorgen dat als je '''PWM A''' wilt gebruiken (de ene draairichting) '''ON A''' hoog is (en '''ON B''' laag) en als je PWM B wilt gebruiken (de andere draairichting) '''ON B''' hoog moet zijn en ('''ON A''' laag). Als zowel '''ON A''' als '''ON B''' laag zijn draait de motor sowieso niet omdat dan beide P-channel MOSFET's zullen blokkeren. Ze beide hoog maken is een slecht idee omdat er dan kortsluiting ontstaat zodra een van de PWM ingangen even hoog wordt. De motor zal dan ook niet lopen, maar in plaats daarvan gaan je FET's eraan. |
{|class="wikitable" | {|class="wikitable" | ||
Latest revision as of 14:15, 7 December 2020
Een Arduino is prima om een paar LEDjes aan te sturen en eventueel een klein servo-motortje. Maar als je wat meer wilt, zoals veel LEDjes aansturen, of een behoorlijke elektrische motor, volstaat een Arduino niet meer. Toch kun je kunt zo'n motor wel aansluiten met een Arduino, en dan bijvoorbeeld de PWM mogelijkheden ervan gebruiken, maar dan kan het vermogen niet van de Arduino zelf komen; alleen het stuursignaal. Dit kan heel goed met een MOSFET driver. Zo'n MOSFET werkt als een heel snelle, elektronisch aanstuurbare schakelaar, die gemakkelijk mee kan doen met het signaal van de PWM. Daar komt als voordeel bij dat je een andere spanningsbron kunt gebruiken voor de motor. De motor kan bijvoorbeeld op een dikke acuu van 24 Volt werken, terwijl de Arduino het doet met een batterijtje van 5 Volt.
Contents
MOSFET driver
Bij de stappenmotor hebben we die drivers al voorbij zien komen, maar er niet veel aandacht aan besteed. Nu gaan we iets dieper in op dergelijke drivers. Zoals gezegd werkt een MOSFET als een elektronisch bestuurbare schakelaar. Preciezer: het werkt als een spanninggestuurde schakelaar. Het gaat dan om de spanning aan de Gate ten opzichte van die aan de Source terwijl de Gate een vrijwel geen stroom opneemt. Nog preciezer: de MOSFET blokkeert de stroom als de spanning tussen Gate en Source onder een drempelwaarde ligt en laat maximaal door boven de verzadigingsspanning. Bij gate-spanningen daartussen is de stroom door de MOSFET ongeveer evenredig met de spanning. Dit is nu echter ongunstig omdat de MOSFET dan (veel) vermogen opneemt en heet kan worden. We gebruiken hem dus alleen in volledig geblokkeerde toestand en volledig verzadigde toestand. Een MOSFET kan echt ontzettend snel schakelen zodat de frequentie van het PWM signaal geen enkel probleem vormt.
|
| Arduino stuurt motor aan via (N-channel) MOSFET |
De Gate van de MOSFET krijgt het PWM signaal van de Arduino. Als het PWM signaal laag is, blokkeert de MOSET en kan er geen stroom door de motor lopen, maar als het signaal hoog is, wordt de weerstand van de MOSFET tussen Drain en Source (bijna) nul en krijgt de motor de volle lading van de Vdd. Daarbij kan een MOSFET heel snel schakelen en verbruikt die zelf dus maar heel weinig vermogen. Vdd is de voedingsspanning waar de motor op loopt. Deze mag gekoppeld zijn aan de +5 Volt die ook de Arduino voedt, maar dat hoeft niet en mag ook uit een andere bron komen (zoals in bovenstaand schema). Je kunt dan motoren gebruiken die op een heel andere spanning draaien dan de Arduino. Het is wel belangrijk dat de nul van de voeding van de Arduino gekoppeld wordt aan de nul van de motorvoeding.
De dikke lijnen door de motor en MOSFET geven aan dat hier veel stroom mag lopen. De maximale stroom door de MOSFET hangt af van het type dat wordt gekozen en ook of die wel of niet gekoeld wordt. Er zijn MOSFET's die wel 100 ampere kunnen schakelen!
Dan zien we nog een klein detail: de diode over de motor. Een diode is een elementje waar de stroom maar in één richting doorheen kan: de richting van het pijltje. Zoals je ziet zit de diode verkeerd om, waardoor er geen stroom doorheen kan lopen. Het lijkt er daarom voor niets in te zitten. Dat is echter niet helemaal waar. De motor bevat spoelen en spoelen hebben de neiging om de stroom constant te houden. Als er dus een stroom van Vdd naar nul loopt (als het PWM signaal hoog is), en de MOSFET gaat blokkeren op het moment dat PWM laag wordt, zorgen de spoelen in de motor ervoor dat er toch nog even een stroom blijft lopen. Het gevolg is dat er op de Drain een spanning kan ontstaan die zo hoog kan zijn dat hij schadelijk is voor de Arduino en/of de MOSFET. Deze spanning wordt ook wel aangeduidt als de back EMF. De diode is hiervoor bedoeld: het kortsluiten en dus onschadelijk maken van de back-EMF. Als je in plaats van een motor een lamp wilt aansturen, kun je deze diode weglaten. Lampen geven namelijk geen back-EMF. Overigens hebben veel MOSFET's ook een ingebouwde diode (omgekeerd: van Source naar Drain) die ze beschermd tegen dit soort spanningen.
Het bovenstaande schema zal zeker wel werken, maar het is altijd beter om een weerstand op te nemen in de lijn met het PWM signaal. Dit is ook om de Arduino te beschermen. Een weerstand van 10kΩ is meestal een goede waarde. Daarnaast kan de output van de Arduino naar nul worden getrokken met een weerstand zodat het signaal sneller naar nul kan gaan. Beide extra weerstanden zijn opties en worden ook vaak weggelaten.
Draairichting omkeren
De schakeling uit de vorige paragraaf voldoet als je de motor alleen aan en uit wilt zetten, of alleen de motorsnelheid wilt besturen. In veel gevallen wil je echter ook dat de motor achteruit kan draaien. Voor het veranderen van de draairichting moet je de motor in een brug-schakeling opnemen. Deze is eerder besproken bij het stappenmotor-project.
|
| Motorspoel in brugschakeling |
Onthoud altijd goed dat je bij een brug-schakeling nooit de twee boven elkaar staande schakelaars sluit, want dan krijg je kortsluiting en gaan er dingen kapot. Natuurlijk gebruiken we ook hier MOSFETs in plaats van schakelaars. De MOSFET die we hierboven hebben gebruikt is een zogenaamde N-channel MOSFET. Dit type schakelt op basis van een positief spanningsverschil tussen Gate en Source. De Source is verbonden met aarde (nul) en de Gate met het input signaal. Als de Gate dan 5 Volt krijgt is de MOSFET open en anders zit hij dicht. De essentie is nu: de Gate voert 5 Volt meer dan op de Source. Omdat de Source aan de nul hangt is dat normaal een onbeduidend detail. Maar als je nu nog eens goed naar de burgschakeling kijkt, dan zie je dat het hier wat anders ligt. De bovenste MOSFET's hangen met de ene kant aan de plus, terwijl de spanning op de andere kant (voorheen de Source) ervan afhangt of de MOSFET blokkeert of doorlaat. Als hij doorlaat wordt die spanning ook hoog, blokkeert hij, dan wordt die spanning laag. Stel nu dat we hier ook een N-channel MOSFET zouden gebruiken. Dan moet de Gate, om hem volledig op doorlaten te zetten, een hogere spanning krijgen dan de Source (bijvoorbeeld 5 Volt hoger, de exacte spanning hangt af van het precieze type MOSFET). Maar zodra hij stroom gaat doorlaten, neemt de spanning op de Source toe en komt die zo'n beetje aan de plus te hangen. Dan zou hij dus weer meteen sluiten. Dat gaat dus niet goed. Daarbij wil je soms dat de motor op een veel hogere spanning draait dan de 5 Volt van je Arduino. Dat lukt natuurlijk nooit met alleen je Arduino.
Gelukkig is er nog en ander type MOSFET: de zogenaamde P-channel MOSFET. Deze wordt iets anders getekend (het pijltje van de Gate loopt andersom) en het schakelgedrag is net andersom en ook iets lastiger te begrijpen. Daarbij wordt hier de Source aan de plus gehangen terwijl de Drain naar de motor loopt. De spanning op de Source zit dus hoger dan die op de Drain. Zo werkt ook het schakelgedrag: de MOSFET opent als de Gate een spanning voert die (bijvoorbeeld 5 Volt) lager is dan de Source en hij sluit als de Gate een spanning krijgt die gelijk is aan die van de Source (of daar voldoende dichtbij komt).
Hieronder laten we nu het principe zien van de brugschakeling met vier MOSFET's voor de schakelaars. De dikke lijnen geven weer aan waar veel stroom kan lopen. De dunne lijnen zijn voor zwakke stuursignalen. De bovenste twee MOSFET's zijn van het P-type en de onderste twee van het N-type. De schakeling heeft twee PWM signalen nodig; beide richtingen worden afzonderlijk aangestuurd. Daar komt bij dat je ervoor moet zorgen dat als je PWM A wilt gebruiken (de ene draairichting) ON A hoog is (en ON B laag) en als je PWM B wilt gebruiken (de andere draairichting) ON B hoog moet zijn en (ON A laag). Als zowel ON A als ON B laag zijn draait de motor sowieso niet omdat dan beide P-channel MOSFET's zullen blokkeren. Ze beide hoog maken is een slecht idee omdat er dan kortsluiting ontstaat zodra een van de PWM ingangen even hoog wordt. De motor zal dan ook niet lopen, maar in plaats daarvan gaan je FET's eraan.
|
| Brugschakeling met P-channel en N-channel MOSFET's |
Naast de vier MOSFET's gebruikt bovenstaande schakeling nog twee andere (gewone) NPN transistors. Deze worden hier alsvolgt gebruikt. Een spanning op ON A komt via de weerstand bij de basis (b) van de transistor terecht. Als die spanning voert, laat de NPN transistor stroom door van c (collector) naar e (emitter). Het gevolg is dat de gate van de P-channel MOSFET via de weerstanden voldoende laag gemaakt wordt om de P-channel MOSFET in geleiding te brengen. Als de spanning op ON A wegvalt, wordt de Gate gelijk aan de voedingsspanning en dus aan de spanning op de Source, waardoor de MOSFET gaat blokkeren. Hetzelfde geldt voor ON B. De bovenste MOSFET's staan dus continu aan of uit, terwijl het PWM signaal alleen op de onderste MOSFET's wordt gebruikt. Dit is des te meer een prima idee omdat de N-channel MOSFET's in het algemeen wat sneller schakelen dan de P-channel MOSFET's.
Hier zijn overigens meer details te vinden voor als je zelf een MOSFET brugschakeling zou willen ontwerpen. Er is ook een goed werkend voorbeeld tot wel 20 Ampere bij 30 Volt.
Al met al heb je nu een aardig idee hoe het werkt, maar echt gemakkelijk is het natuurlijk niet; het is een heel klusje om alle benodigde onderdelen goed aan te sluiten. Gelukkig zijn er voldoende alternatieven. Zo zijn er voor relatief weinig geld kant-en-klare driver boards te koop. Meestal gaat het dan om bordjes die gemaakt zijn voor het aansturen van bipolaire stappenmotoren, maar die zijn ook heel bruikbaar voor gewone gelijkstroommotoren. Voor de werking daarvan moet namelijk ook de stroomrichting worden omgekeerd zodat die ook gebasseerd zijn op de H-brug schakeling. Dergelijke bordjes zijn vaak gebasseerd op een chip met twee of soms zelfs vier ingebouwde H-brug schakelingen aan boord. Iets minder krachtig dan met losse MOSFET's maar veel gemakkelijke in gebruik. Een veelgebruikt voorbeeld is de L298N chip, inderdaad bedoeld voor bipolaire stappenmotoren. Een dergelijk bordje gaat tot zo'n 35 Volt en 2 Ampere, terwijl de logica op 5 Volt mag draaien (max 7 Volt). Prima geschikt dus voor onze Arduino. Voor deze specs moet het bordje wel uitgevoerd worden met een geschikte koeler, maar gekochte bordjes hebben vrijwel altijd een koeler. Omdat deze modules geschikt zijn voor bipolaire stappenmoteren, zijn ze gemaakt voor 2 sets van spoelen en hebben ze twee volledige H-brug schakelingen aan boord. In ondertsaand project sturen we maar een DC motor aan, maar je kunt dus ook twee motoren tegelijk mee aansturen. Of één zwaardere motor, door de beide H-bruggen parallel te gebruiken. Dan gaat hij tot 4 Ampere.
De schakeling
Extra benodigdheden:
- 1 L298N MOSFET driver module
- 1 DC motor (bijv. 12 Volt)
- 1 Bijpassende batterij (dan ook 12 Volt)
| File:Naam bestand.png |
| Beschrijving bovenstaande figuur |
Het programma
int motor=10;
int wait=10;
void setup()
{
pinMode(motor,OUTPUT);
}
void loop()
{
for (int i=0; i<256; i++) {
analogWrite(motor,i);
delay(wait);
}
for (int i=254; i>=0; i--) {
analogWrite(motor,i);
delay(wait);
}
}
Uitleg
Het programma is uiterst simpel. De loop heeft twee delen waarin de motor eerst steeds meer vermogen krijgt en daarna steeds minder. Als het programma draait zul je zien dat de motor steeds sneller gaat draaien en dan weer afremt om meteen daarna weer te versnellen. En zo voort. Uiteraard kun je de motorsnelheid programmatisch aan bepaalde inputs koppelen en de snelheid regelen met bijvoorbeeld een potmeter. In dit project willen we alleen laten zien hoe je een zwaardere motor aan kunt sturen met een Arduino.
Beetje spelen
Leuk om zo'n motor aan te sturen, maar wat nu als de motor ook achteruit moet kunnen draaien?


