Difference between revisions of "Arduino - Motor met Power"
(→MOSFET driver) |
|||
| Line 3: | Line 3: | ||
===MOSFET driver=== | ===MOSFET driver=== | ||
| − | Bij de [[Arduino - De stappenmotor|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. | + | Bij de [[Arduino - De stappenmotor|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 . 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 gebruiklen hem dus alleen in volledig geblokkeerde toestand en volledig verzadigde toestand. |
{|class="wikitable" | {|class="wikitable" | ||
| Line 9: | Line 9: | ||
|[[File:MOSFET_aansturing.png]] | |[[File:MOSFET_aansturing.png]] | ||
|- | |- | ||
| − | |Arduino stuurt motor aan via MOSFET | + | |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 '''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! | 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. 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 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 | + | 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. 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. | ||
| − | + | De MOSFET die hier wordt gebruikt is een zogenaamde '''N-channel MOSFET'''. Dit type schakelt op basis van het verschil in spanning tussen Gate en Source. Als er op de Gate 5 Volt staat is de MOSFET open en anders zit hij dicht. Met 5 volt bedoelen we: 5 Volt meer dan op de Source. Omdat de Source aan de nul hangt is dat echter een onbeduidend detail. Een ander type MOSFET is de zogenaamde '''P-channel MOSFET'''. Deze wordt iets anders getekend (het pijltje van de Gate loopt andersom) en het schakelgedrag is net andersom en iets lastiger te begrijpen. | |
| + | Met bovenstaande schakling kun je de motor harder en zachter laten lopen, maar je kunt de draairichting er niet mee omkeren. Om dat te doen heb je een brug-schakeling nodig die de stroomrichting en dus de draairichting wel kan omkeren. Deze schakeling hebben we al besproken bij de [[Arduino_-_De_stappenmotor#Werking|stappenmotor]]. Zo'n brugschakeling heeft vier MOSFET's nodig, terwijl je voor een snelheidsregeling in één richting met een enkele MOSFET kunt volstaan. Daarbij moet je met de aansturing heel goed opletten dat je <u>nooit</u> de twee boven elkaar staande MOSFET's tegelijk open zet, want dan krijg je kortsluiting en gaan er dingen kapot. Dat kan zelfs al als het maar heel kort is. | ||
===De schakeling=== | ===De schakeling=== | ||
Revision as of 21:30, 18 February 2018
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.
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 . 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 gebruiklen hem dus alleen in volledig geblokkeerde toestand en volledig verzadigde toestand.
|
| 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. 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.
De MOSFET die hier wordt gebruikt is een zogenaamde N-channel MOSFET. Dit type schakelt op basis van het verschil in spanning tussen Gate en Source. Als er op de Gate 5 Volt staat is de MOSFET open en anders zit hij dicht. Met 5 volt bedoelen we: 5 Volt meer dan op de Source. Omdat de Source aan de nul hangt is dat echter een onbeduidend detail. Een ander type MOSFET is de zogenaamde P-channel MOSFET. Deze wordt iets anders getekend (het pijltje van de Gate loopt andersom) en het schakelgedrag is net andersom en iets lastiger te begrijpen.
Met bovenstaande schakling kun je de motor harder en zachter laten lopen, maar je kunt de draairichting er niet mee omkeren. Om dat te doen heb je een brug-schakeling nodig die de stroomrichting en dus de draairichting wel kan omkeren. Deze schakeling hebben we al besproken bij de stappenmotor. Zo'n brugschakeling heeft vier MOSFET's nodig, terwijl je voor een snelheidsregeling in één richting met een enkele MOSFET kunt volstaan. Daarbij moet je met de aansturing heel goed opletten dat je nooit de twee boven elkaar staande MOSFET's tegelijk open zet, want dan krijg je kortsluiting en gaan er dingen kapot. Dat kan zelfs al als het maar heel kort is.
De schakeling
Extra benodigdheden:
- 1 MOSFET driver module
- 1 DC motor
- 1 Bijpassende batterij
| 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?
