Áttekintés
A Motorshield kit egyike a legkedveltebb Adafruit készleteknek, így a cégnél az eredeti verzió fejlesztése mellett döntöttek. A javított panel (v2) a DC és a léptető motorok még könnyebb, még egyszerűbb működtetését teszi lehetővé, kiváló alap bármilyen robotikai projekthez. A panel alaptulajdonsága, a 4 db. DC illetve a 2 db. léptetőmotor vezérlési lehetősége megmaradt, de történt több fejlesztés is:
- az eredeti L293 darlington meghajtót a TB6612 mosfet vezérlő váltotta fel, ami 1,2A-t, (csúcsban, rövid időre, kb. 20ms-ig 3A-t) szolgáltat alacsony feszültségesés mellett, így a motorok nagyobb nyomatékot szolgáltatnak.
- beépített védődiódák
- az Arduino PWM kimenete helyett dedikált PWM áramkör a panelen
- a motorok sebesség és egyéb paramétereinek vezérlése I2C buszon keresztül
- kompatibilitás különböző Arduino típusokkal, pl. Uno, Leonardo, Due, Mega R3
- moduláris felépítés, a választható címzésnek köszönhetően (5bit) akár 32db. motorvezérlő panel használható egyszerre, így maximálisan 64 léptető vagy 128 DC motor vezérlése oldható meg
- polaritás védelem, fejlesztett prototípus építő terület a panelen
A panel főbb paraméterei:
- két csatlakozó 5V-os „hobby” szervomotorok számára (vezérlés az Arduino precíziós nagyfelbontású időzítőjéről)
- 4db H-híd: TB6612-es lapkakészlet, 1,2A állandósult, 3A (20ms) csúcsterhelhetőség mellett, beépített hővédelem, illetve önindukciós hatást védő diódák. Működési feszültség: 4,5V – 13,5V
- 4db kétirányú DC motor, 8-bites sebesség beállítási lehetőség motoronként. (0,5%-os felbontás)
- 2db léptetőmotor (unipoláris vagy bipoláris) single coil, double coil illetve interleaved vagy micro-step üzemmód)
- a motorok alaphelyzetben tiltva a táp bekapcsolásakor
- csavaros sorkapcsok a motorok illetve a tápfeszültség egyszerű csatlakoztathatóságának érdekében (18-26AWG)
- Arduino reset gomb a panelon
- Polaritás védett sorkapocs és beállító-jumper a független külső tápfeszültség bekötéséhez
- kompatibilitás: Arduino UNO, Leonardo, ADK/Mega R3, Diecimila és Duemilanove. Due 3.3v-ra jumperelve. Mega/ADK R2 és a korábbi változatok, 2 vezetékes jumpereléssel.
- Arduino szoftverkönyvtár példaprogramokkal
Összeszerelés – csatlakozók és sorkapcsok beforrasztása
A panelhez a szokásos tüskesort adja a gyártó, ezzel megoldható az arduino-hoz történő csatlakoztatás, de amennyiben több motorvezérlőt szeretnénk használni, akkor ne ezt a fajta csatlakozósávot forrasszuk be!
Tüskesor beforrasztása
Az első lépés a tüskesor előkészítése, ehhez használhatunk pl. egy Arduino Uno-t a kép alapján:
A tüskesorra helyezzük rá a motorvezérlő panelt:
Majd forrasszuk be a kiálló tüskéket:
Az elkészült motorvezérlő panel:
A külön vásárolható, speciális Arduino csatlakozósávval megoldható több motorvezérlő alkalmazása:
Adafruit Motor Shield V2 library telepítése
Ahhoz, hogy az eszközt használni tudjuk, telepítenünk kell a szükséges library-t. A telepítést az Arduino IDE programban tudjuk elvégezni.
Az első lépés a Vázlat menüpont Könyvtár tartalmazása menüpontjának Könyvtárak kezelése pontját kiválasztani:
A felugró panelon gépeljük be az Arduino motor shield megnevezést, majd a betöltődő eredmények közül válasszuk az Arduino Motor Shield V2 library-t!
Miután az elem mellett megjeleneik az INSTALLED felirat, a Fájl – Példák menüpont alatt elérhetővé válnak a motorvezérlő panel mintaprogramjai:
Tápfeszültség ellátás:
A motorok nagy áramfelvételű fogyasztók, így csatlakoztatásuk előtt fontos, hogy tisztában legyünk áramfelvétel/tápfeszültség paramétereikkel!
Fontos adat, hogy a motorvezérlő panel 5V-12V közötti tápfeszültséggel működő motorokhoz készült. A panel vezérlő chip-jei motoronként 1,2A-t szolgáltatnak, rövid időre, csúcsértékben (20msec) 3A leadására képesek. Ha az üzemeltetendő motor áramfelvétele pl. tartósan 2A, a vezérlő áramkörök melegedni fognak, megfelelő hűtés nélkül tönkremehetnek!
A motorok nem működtethetőek 9V-os elemről!
Szervók:
A szervók tápellátása megoldható az Arduino stabilizált 5V-os tápellátásáról, így működtethetőek akár a panel USB, akár a beépített hengeres tápcsatlakozójáról!
DC és léptetőmotor:
Ezek a motorok nagy áramfelvétellel és általában 5V-nál nagyobb tápfeszültséggel működnek, így működtetésük nem ajánlott az Arduino stabilizált 5V-os tápjáról!
Két megoldás is kínálkozik a motorok megfelelő tápellátására:
A DC barrel jack csatlakozó védő-diódával, a sorkapocs FET védelemmel van ellátva, így fordított polaritás esetén sem az Arduino, sem a vezérlőpanel nem sérül.
Egyszeres tápellátás:
Ha a tápellátást egy 6-12V DC kimenetű fali adapterrel vagy elem-csomaggal (battery pack) akarjuk megoldani, akkor egyszerűen csatlakoztassuk az adaptert az Arduino táp-csatlakozójába, vagy a táp-sorkapocsba és használjuk a jumper rövidzárat. Elem esetén ne a kis teljesítményű 9V-os elemet, hanem 4 – 8 AA elemet használjunk.
Megjegyzés: amennyiben a tápellátás nem stabilizált, az Arduino panelnél reset problémák léphetnek fel a tápfeszültség ingadozása miatt.
Független tápellátás:
Az Arduino az USB csatlakozóján, a motorok a sorkapcson keresztül kapnak tápellátást. Ebben az esetben ne alkalmazzuk a jumper rövidzárat! Ilyenkor a szétválasztott táplálás következtében a motor és a vezérlő logika táplálása független egymástól.
A másik függetlenített tápellátási megoldás, ha az Arduino az un. DC barrel jack-en (a hengeres tápcsatlakozó) keresztül, a motorok pedig a sorkapcson keresztül kapnak ellátást. Ebben az esetben se alkalmazzuk a jumper rövidzárat!
Függetlenül a tápellátás módjától elmondható, hogy megfelelő bekötés esetén a panel zöld színű táp LED-je világítani fog!
Szervó motorok használata:
A kis méretű, un. hobby szervók használata nagyon egyszerű, kössük őket a panel háromtűs csatlakozójának valamelyikére és már indítható is a program. A panel az Arduino 9-es illetve 10-es kimenetét használja a szervók működtetésére, programunkban ezekre a lábakra hivatkozzunk! A tápellátás az USB portról, vagy a DC jack csatlakozóról történhet.
Amennyiben külső tápellátás szükséges, vágjuk át a tápvonalat a panel hátoldalán, és a szervókat az Opt Servo feliratú jumperen keresztül lássuk el tápfeszültséggel. Ezt a megoldást azonban csak megfelelő ismeretek birtokában lévők válasszák!
Példaprogram:
/* This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2 */ #include <servo.h> Servo myservo; // servo objektum létrehozása int pos = 0; // változó létrehozása a servo pozíció tárolásához void setup() { myservo.attach(9); // vezérlő kimenet (pin) beállítása } void loop() { for (pos = 0; pos <= 180; pos += 1) { // 0 fok- tól 180 fok-ig // in steps of 1 degree myservo.write(pos); // servo 'pos' fok-ba állítása delay(15); // 15 ms várakozás } for (pos = 180; pos >= 0; pos -= 1) { // 180 fok- tól 0 fok-ig myservo.write(pos); // servo 'pos' fok-ba állítása delay(15); // 15 ms várakozás } }
DC motorok használata:
A DC motorok talán a legelterjedtebben alkalmazott eszközök a különböző robotikai projektekben. A vezérlő panel maximálisan négy darab DC motor vezérlésére alkalmas, mindkét forgási irányban. A motorok sebessége 0,5% pontossággal szabályozható, ez nagyon finom és pontos beállítást tesz lehetővé!
Motorok csatlakoztatása:
A motorok csatlakoztatása nagyon egyszerű, vezetékeiket kössük a panel M1, M2, M3, illetve M4 jelzésű sorkapcsaihoz.
Példaprogram:
/* This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2 */ #include <Wire.h> #include <Adafruit_MotorShield.h> // motor shield objektum létrehozása az alap I2C címen Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // egyéb I2C cím beállítása: // Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61); // DC motor 'port' kiválasztása: M1, M2, M3 or M4. A mintaprogramban: M1 Adafruit_DCMotor *myMotor = AFMS.getMotor(1); // egyéb motor'port' beállítása: //Adafruit_DCMotor *myOtherMotor = AFMS.getMotor(2); void setup() { Serial.begin(9600); // soros port beállítása Serial.println("Adafruit Motorshield v2 - DC Motor test!"); AFMS.begin(); // frekvencia beállítás: 1.6KHz //AFMS.begin(1000); // eltérő frekvencia megadása, pl.: 1KHz // sebesség beállítás 0 (min) és 255 (max) között: myMotor->setSpeed(150); myMotor->run(FORWARD); // myMotor->run(RELEASE); } void loop() { uint8_t i; Serial.print("tick"); myMotor->run(FORWARD); for (i=0; i<255; i++) { myMotor->setSpeed(i); delay(10); } for (i=255; i!=0; i--) { myMotor->setSpeed(i); delay(10); } Serial.print("tock"); myMotor->run(BACKWARD); for (i=0; i<255; i++) { myMotor->setSpeed(i); delay(10); } for (i=255; i!=0; i--) { myMotor->setSpeed(i); delay(10); } Serial.print("tech"); myMotor->run(RELEASE); delay(1000); }
Léptető motorok használata:
A léptető motorok gyakori alkatrészei a különböző robotikai illetve CNC projekteknek. A vezérlő panel két motor vezérlésére alkalmas. A telepített programkönyvtár egyaránt használható unipoláris illetve bipoláris motorok esetében is.
Ötvezetékes unipoláris motorok esetén a középső tekercs kivezetést a sorkapocs GND pontjához kell kötni, míg a négyvezetékes bipoláris motoroknál a középső kivezetés elmarad. A vezérlésre használandó kód azonos lehet.
Az alábbi mintaprogram a léptető motor négy lehetséges üzemmódját teszteli:
single coil: lépésenként egy tekercs aktív
double coil: egyszerre két tekercs aktív, nagyobb a nyomaték
interleave coil: felváltva használja a fenti üzemmódokat, dupla felbontás, fél sebesség
microstep: a vezérlés PWM-el történik a lépések közötti lágy átmenet elérése érdekében
Példaprogram:
/* This is a test sketch for the Adafruit assembled Motor Shield for Arduino v2 */ #include <Wire.h> #include <Adafruit_MotorShield.h> Adafruit_MotorShield AFMS = Adafruit_MotorShield(); // csatlakoztatás az alapértelmezett I2C címre, eltérő esetben adjuk meg a címet: // Adafruit_MotorShield AFMS = Adafruit_MotorShield(0x61); // léptető motor csatlakoztatás 200 lépés per fordulat (1.8 fok) // portcím: #2 (M3 és M4) Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2); void setup() { Serial.begin(9600); Serial.println("Stepper test!"); AFMS.begin(); myMotor->setSpeed(10); // 10 rpm } void loop() { Serial.println("Single coil steps"); myMotor->step(100, FORWARD, SINGLE); myMotor->step(100, BACKWARD, SINGLE); Serial.println("Double coil steps"); myMotor->step(100, FORWARD, DOUBLE); myMotor->step(100, BACKWARD, DOUBLE); Serial.println("Interleave coil steps"); myMotor->step(100, FORWARD, INTERLEAVE); myMotor->step(100, BACKWARD, INTERLEAVE); Serial.println("Microstep steps"); myMotor->step(50, FORWARD, MICROSTEP); myMotor->step(50, BACKWARD, MICROSTEP); }
A forráskódok letölthetőek:
A cikkben használt A1438 Motor/Stepper/Servo Shield for Arduino v2 Kit, megvásárolható a MálnaPC Webshopjában a Léptetőmotorral, a DC motorral és a szervomotorral együtt!