- Komponente potrebne
- Opis servo motora
- Kružni dijagram
- Upravljanje servo motorom pomoću AVR ATmega16
- Programiranje Atmega16 pomoću USBasp-a
Servo motori se široko koriste tamo gdje je potrebna precizna kontrola, poput robota, automatiziranih strojeva, robotske ruke itd. Međutim, opseg servo motora nije ograničen na ovoliko i može se koristiti u mnogim aplikacijama. Da biste saznali više o osnovama, teoriji i principu rada servo motora, slijedite vezu.
Prethodno smo povezali servo motor s mnogim mikrokontrolerima:
- Povezivanje servo motora s ARM7-LPC2148
- Povezivanje servo motora s MSP430G2
- Povezivanje servo motora sa STM32F103C8
- Povezivanje servo motora s PIC mikrokontrolerom pomoću MPLAB-a i XC8
- Povezivanje servo motora s Arduino Uno
- Povezivanje servo motora s mikrokontrolerom 8051
U ovom uputstvu spojit ćemo Micro Servo Motor s Atmega16 AVR mikrokontrolerom koristeći Atmel Studio 7.0. Servo motor je predviđen za rad u naponu od 4,8-6V. Njegov kut rotacije i smjera možemo kontrolirati primjenom impulsnih sklopova ili PWM signala. Imajte na umu da se servo motori ne mogu pomicati za punih 360 okretaja, pa se koriste tamo gdje nije potrebno kontinuirano okretanje. Kut rotacije je 0 -180 stupnjeva ili (-90) - (+90) stupnjeva.
Komponente potrebne
- Mikro servo motor SG90 Tower Pro
- Atmega16 mikrokontroler IC
- Kristalni oscilator od 16 MHz
- Dva kondenzatora od 100 nF
- Dva kondenzatora od 22pF
- Pritisnite tipku
- Jumper žice
- Breadboard
- USBASP v2.0
- Led (bilo koja boja)
Opis servo motora

- Crvena = pozitivno napajanje (4,8 V do 6 V)
- Smeđa = Prizemlje
- Narančasta = upravljački signal (PWM pin)
Kružni dijagram
Spojite sve komponente kako je prikazano na donjem dijagramu da biste okretali servo motor pomoću AVR mikrokontrolera. Postoje četiri PWM pina, možemo koristiti bilo koji PWM pin Atmega16. U ovom uputstvu koristimo pin PD5 (OC1A) za generiranje PWM-a. PD5 je izravno povezan s narančastom žicom servo motora koja je ulazni signalni klin. Spojite bilo koju LED vodilicu za indikator napajanja. Također, spojite jedan gumb u Resetiraj pin za resetiranje Atmega16 kad god je to potrebno. Spojite Atmega16 s odgovarajućim krugom oscilator kristala. Sav sustav napajat će se napajanjem od 5V.


Kompletna postavka izgledat će dolje:

Upravljanje servo motorom pomoću AVR ATmega16
Poput koračnog motora, servo motoru nije potreban nijedan vanjski pokretač, npr. ULN2003 ili L293D motorni pokretač. Samo je PWM dovoljan za pogon servo motora i vrlo je jednostavno generirati PWM iz mikrokontrolera. Moment ovog servo motora je 2,5 kg / cm, pa ako vam je potreban veći okretni moment, ovaj servo motor nije prikladan.
Kao što znamo da servo motor traži puls svakih 20 ms, a duljina pozitivnog impulsa odredit će kut rotacije servo motora.

Frekvencija potrebna za dobivanje impulsa od 20 ms je 50Hz (f = 1 / T). Dakle, za ovaj servo motor, specifikacija kaže da za 0 stupnjeva trebamo 0,388 ms, za 90 stupnjeva trebamo 1,264 ms, a za 180 stupnjeva treba impuls od 2,14 ms.
Za generiranje specificiranih impulsa koristit ćemo Timer1 od Atmega16. Frekvencija procesora je 16Mz, ali koristit ćemo samo 1Mhz jer nemamo puno perifernih uređaja povezanih s mikrokontrolerom i nema puno opterećenja na mikrokontroleru, pa će 1Mhz odraditi posao. Preskaler je postavljen na 1. Dakle, sat je podijeljen na 1Mhz / 1 = 1Mhz (1uS), što je sjajno. Timer1 koristit će se kao brzi PWM način, odnosno način 14. Možete koristiti različite načine tajmera da biste generirali željeni impulsni vlak. Referenca je dana u nastavku, a više opisa možete pronaći u službenom listu podataka Atmega16.

Da bismo koristili Timer1 kao brzi PWM način trebat će nam TOP vrijednost ICR1 (Input Capture Register1). Da biste pronašli gornju vrijednost, koristite formulu navedenu u nastavku:
f pwm = f cpu / nx (1 + VRH)
To se može pojednostaviti na, VRH = ( f cpu / ( f pwm xn)) - 1
Gdje je N = Vrijednost postavljenog predcjeljivača
f cpu = CPU učestao
f pwm = širina impulsa servo motora koja je 50Hz
Sada izračunajte vrijednost ICR1 jer imamo svu potrebnu vrijednost, N = 1, f cpu = 1MHz, f pwm = 50Hz
Samo stavite vrijednosti u gornju formulu i dobit ćemo
ICR1 = 1999
To znači postizanje maksimalnog stupnja, tj. 180 0 ICR1 bi trebao biti 1999. godina.
Za kristal od 16 MHz i Prescaler postavljeni na 16, imat ćemo
ICR1 = 4999
Krenimo sada na raspravu o skici.
Programiranje Atmega16 pomoću USBasp-a
Kompletni AVR kod za upravljanje servo motorom dat je u nastavku. Kôd je jednostavan i lako ga je razumjeti.
Ovdje smo kodirali Atmega16 za okretanje servo motora od 0 0 do 180 0 i povratak iz 180 0 do 0 0. Ovaj prijelaz završit će se u 9 koraka, tj. 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Zbog odgode ćemo koristiti internu knjižnicu Atmel Studija, tj.
Spojite svoj USBASP v2.0 i slijedite upute na ovoj poveznici za programiranje Atmega16 AVR mikrokontrolera pomoću USBASP-a i Atmel Studio 7.0. Samo izradite skicu i prenesite je pomoću vanjskog alata.
Kompletni kod s demonstracijskim videom dan je u nastavku. Također saznajte više o servo motorima znajući njihovu važnost u robotici.
