- Szükséges alkatrészek
- A szervomotor csapjának leírása
- Kördiagramm
- Szervomotor vezérlése AVR ATmega16-tal
- Az Atmega16 programozása USBasp használatával
A szervomotorokat széles körben használják, ahol pontos vezérlésre van szükség, például robotok, automatizált gépek, robotkarok stb. A szervomotor hatóköre azonban nem korlátozódik ennyire, és számos alkalmazásban használható. Ha többet szeretne megtudni a szervomotor alapjairól, elméletéről és működési elvéről, kövesse a linket.
Korábban számos szerverhez csatlakoztattuk a szervomotort:
- Összekötő szervomotor és ARM7-LPC2148
- Összekötő szervomotor az MSP430G2-vel
- Összekötő szervomotor és STM32F103C8
- Összekötő szervomotor PIC mikrokontrollerrel MPLAB és XC8 használatával
- Összekötő szervomotor az Arduino Unóval
- Szervomotor összekapcsolása a 8051 mikrokontrollerrel
Ebben az oktatóanyagban összekapcsoljuk a mikro szervo motort az Atmega16 AVR mikrovezérlővel az Atmel Studio 7.0 használatával. A szervomotor 4,8-6 V feszültségre működik. A forgásszögét és irányát impulzus vonat vagy PWM jelek alkalmazásával szabályozhatjuk. Vegye figyelembe, hogy a szervomotorok nem mozoghatnak teljes 360 fokos forgatáshoz, ezért ott használják őket, ahol nincs szükség folyamatos forgatásra. A forgásszög 0 -180 fok vagy (-90) - (+90) fok.
Szükséges alkatrészek
- SG90 Tower Pro mikro szervo motor
- Atmega16 mikrokontroller IC
- 16Mhz kristályoszcillátor
- Két 100nF kondenzátor
- Két 22pF kondenzátor
- Nyomógomb
- Jumper huzalok
- Kenyérlemez
- USBASP v2.0
- Led (bármilyen színű)
A szervomotor csapjának leírása
- Piros = pozitív tápegység (4,8 V-6 V)
- Barna = föld
- Narancs = Vezérlőjel (PWM tű)
Kördiagramm
A szervomotor AVR mikrokontrollerrel történő forgatásához csatlakoztassa az összes alkatrészt az alábbi ábra szerint. Négy PWM csap van, bármely Atmega16 PWM tűt használhatunk. Ebben az oktatóanyagban a PD5 PIN-t (OC1A) használjuk a PWM előállításához. A PD5 közvetlenül csatlakozik a szervomotor narancssárga vezetékéhez, amely a bemeneti jel csap. Csatlakoztasson bármilyen színű LED-et az áramjelzőhöz. Csatlakoztasson egy nyomógombot a Reset pin-be az Atmega16 alaphelyzetbe állításához, ha szükséges. Csatlakoztassa az Atmega16-ot megfelelő kristályoszcillátor áramkörrel. Az egész rendszert 5 V-os tápfeszültség táplálja.
A teljes beállítás az alábbiak szerint fog kinézni:
Szervomotor vezérlése AVR ATmega16-tal
A léptetőmotorhoz hasonlóan a szervomotorhoz sem kell külső meghajtó, pl. ULN2003 vagy L293D motormeghajtó. Csak a PWM elegendő a szervomotor meghajtásához, és nagyon könnyű PWM-et előállítani mikrovezérlőből. Ennek a szervomotornak a nyomatéka 2,5 kg / cm, tehát ha nagyobb nyomatékra van szüksége, akkor ez a szervo nem megfelelő.
Mint tudjuk, a szervomotor 20 ms-onként keres impulzust, és a pozitív impulzus hossza határozza meg a szervomotor forgási szögét.
A 20ms-os impulzus eléréséhez szükséges frekvencia 50Hz (f = 1 / T). Tehát ehhez a szervomotorhoz a specifikáció azt mondja, hogy 0 fokhoz 0,388 ms, 90 fokhoz 1,264 ms, 180 fokhoz pedig 2,14 ms impulzusra van szükségünk.
A meghatározott impulzusok előállításához az Atmega16 Timer1-ét fogjuk használni. A CPU frekvenciája 16Mz, de csak 1Mhz-t fogunk használni, mivel nincs sok perifériánk csatlakoztatva a mikrovezérlőhöz, és nincs nagy terhelés a mikrovezérlőn, ezért 1Mhz elvégzi a munkát. Az előmérő 1-re van állítva. Tehát az óra értéke 1Mhz / 1 = 1Mhz (1uS), ami nagyszerű. Timer1 fogják használni, mint gyors PWM üzemmód azaz Mode 14. Használhatja a különböző közlekedési módok időzítő generálni kívánt impulzus. A hivatkozás az alábbiakban található, és további leírást az Atmega16 hivatalos adatlapján talál.
A Timer1 gyors PWM módként való használatához szükségünk lesz az ICR1 (Input Capture Register1) TOP értékére. Az alábbi TOP képlet megtalálásához használja:
f pwm = f cpu / nx (1 + TOP)
Ez egyszerűsíthető, TOP = ( f cpu / ( f pwm xn)) - 1
Hol, N = az elővízkő beállítása
f cpu = CPU gyakorisága
f pwm = A szervomotor impulzusszélessége 50Hz
Most számítsa ki az ICR1 értéket, mivel minden szükséges érték megvan, N = 1, f cpu = 1MHz, f pwm = 50Hz
Csak tegye az értékeket a fenti képletbe, és megkapjuk
ICR1 = 1999
Ez azt jelenti, hogy elérjük a maximális fokot, azaz 180 0-ot, az ICR1-nek 1999-nek kell lennie.
A 16 MHz-es kristályok és a Prescaler 16-ra állítva meglesz
ICR1 = 4999
Most folytassuk a vázlat megbeszélését.
Az Atmega16 programozása USBasp használatával
A szervomotor vezérlésének teljes AVR kódját az alábbiakban adjuk meg. A kód egyszerű és könnyen érthető.
Itt kódoltuk az Atmega16-ot, hogy a szervomotort 0 0- ról 180 0- ra forgassuk, és ismét 180 0- ról 0 0-ra térjünk vissza. Ez az átmenet 9 lépésben fog teljesülni, azaz 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Késedelemre az Atmel Studio belső könyvtárát fogjuk használni, azaz
Csatlakoztassa az USBASP v2.0-t, és kövesse az ezen a linken található utasításokat az Atmega16 AVR mikrovezérlő programozásához az USBASP és az Atmel Studio 7.0 használatával. Csak készítse el a vázlatot és töltse fel a külső eszköztár segítségével.
Az alábbiakban bemutatjuk a teljes kódot a demonstrációs videóval. Tudjon meg többet a szervomotorokról is, ismerve a robotika fontosságát.