Arduino – Lektion 8: PWM och små DC motorer

OBS: Denna lektion har uppdaterats den 31 januari 2014 med att inkludera inkoppling med motor och drivkrets som finns med i vårt Add On for Arduino Starterkit. Programmet är det samma, men det kommer att finnas 2 skilda inkopplingar. Den översta avser originalet med en mer intelligent motordrivkrets från Pololu, men sist i denna lektion finns en uppkoppling med den motor och drivkrets som finns i vårt “Add On Kit”.

En liten enkel lektion om PWM (pulsbreddsmodulering) och i vårt Arduino starterkit finns inte någon DC motor med eller en drivkrets till detta, men man kan köra denna lektion utan dessa, då vi kopplat in lysdioder som visar PWM signalerna till motordrivkretsen (motorn visar mer än vad en dimmad LED gör därav har vi en motor). Koden för detta demo hittar ni här. Vi har valt att använda ett mycket litet, enkelt och billigt styrkort från Pololu som innehåller en H-brygga och lite “klisterlogik” runt om, du hittar det här samt en liten DC motor (även den från Pololu) med inbyggd växellåda, dessa finns här i vår webshop och det finns många varianter med olika utväxlingar, men det går även bra med en enkel och billig leksaksmotor. Sedan finns det även mer avancerade motorstyrkort som sköter hela PWM regleringen och man styr dem seriellt osv. men det skall vi inte ta upp här.

Med hjälp utav funktionen analogWrite() kan vi skapa en enkel PWM signal (för även om funktionen indikerar att vi skall sätta ett analogt värde på en utgång är det igentligen en PWM signal, då Arduino inte har några riktiga analoga utgångar i chippet. Men med PWM kan man skapa en “fattigmans” analog utgång utan en riktigt DAC). Men denna funktion kan vi styra alla I/O pinnar som har tilde-tecknet (~) framför sig, dvs. 3, 5, 6, 9, 10 och 11. Använd i första hand inte 5 och 6 av dessa då de har inte helt 100% “duty cycle” då de använder inte samma timer. På Arduino’s hemsida finns en lite lektion om PWM, värd att läsa.

Vår inkoppling är enkel, vi använder den potentiometer som kommer med vårt starterkit för att koppla in denna till 5V, GND samt A0 (analog in 0). Sedan kopplas motordrivkretsen in enligt ovan. Kretsen från Pololu klarar 2 motorer och 1.2A per motor (eller sammankoppla dem och kör dubbel ström), men den kan bli varm, så vid högre strömmar kan det krävas en kylfläns. Vi kopplar in IO-11 till AIN2 och IO-10 till AIN1 på POL-2130 och i vårt fall så kör vi med samma matningsspänning (5V) som finns på Arduino Uno kortet och det matar vi in på VIN uppe till höger på POL-2130 och ansluter samma GND (OBS: använder ni en större motor så anslut detta till extern matning!). Anslut sedan en DC motor på AOUT1 och AOUT2 (spelar ingen roll på vilket håll du ansluter denna). För att indikera PWM har vi även anslutet 2 lysdioder till IO-10 och IO-11 till 330ohms motstånd och ner till GND. Så har ni inte en motor och drivkrets kan ni bara ansluta lysdioderna.

Programmet läser av potentiometern och när den befinner sig i mittenläget (40 analogenheter i mitten) så är motorn avslagen, sedan rör man den utanför detta område så snurrar motorn på ena eller andra hållet och ökar hastigheten ju längre ut från centrum du kommer på potentiometern. PWM frekvensen kanske inte är den bästa för att styra en motor, dessa frekvenser skall oftast vara lite högre, men det går att skapa egna rutiner i Arduino för detta.

Här följer inkoppling och information med den motor och drivkrets som finns med i vårt Add On for Arduino Starterkit och läser man databladet för motorn så är den avsedd för 1-3V, dock är det inget problem att köra den på 4.5-5V eftersom drivkretsen vi använder har min drivspänning på 4.5V. Eftersom vi kör PWM och med detta program blir motorn aldrig överbelastad. Vill man gå ner något i motorspänning man t.ex. koppla in 3st 1.5V AA batterier och koppla in detta på pin 8 (4.5V) och på någon GND anslutning. Fördelen då är att vi inte heller får in störningarna från DC motorn på matningen till Arduino. Motorn drar under 100mA i frigång så belasta inte den för mycket i testen om matningen kommer från 5V från Arduinokortet!

Motor-Potentiometer

På inkopplingen ovan finns potentiometern för att variera PWM signalen ut till motorn samt kretsen SN754410 (en L293N klon som annars är en vanlig drivkrets). Då denna kan hantera 2 motorer använder vi endast ena sidan av kretsen. Pin 1 på kretsen kopplas in till VCC (5VDC) så att drivkretsen/motorerna är aktiverade, annars kan denna även gå till en I/O på Arduino och stänga av drivkretsen (t.ex. nödstopp eller för att spara ström). De 4 GND pinnarna i mitten på varje sida skall kopplas till ett jordplan för kylning om man använder större strömmar, men i vårt fall blir inte kretsen varm av 100-200mA, så de är bara kopplade till GND. Programmet för testen är det samma som tidigare och det hittar ni här.

Föregående Sida    –    Nästa Sida