- Potrebne komponente
- Pin opis servo motorja
- Shema vezja
- Krmiljenje servo motorja z AVR ATmega16
- Programiranje Atmega16 z uporabo USBasp
Servo motorji se pogosto uporabljajo tam, kjer je potreben natančen nadzor, kot so roboti, avtomatizirani stroji, robotska roka itd. Vendar obseg servo motorja ni omejen na to in ga je mogoče uporabiti v številnih aplikacijah. Če želite izvedeti več o osnovah, teoriji in principu delovanja servo motorja, sledite povezavi.
Pred tem smo Servo Motor povezali z mnogimi mikrokrmilniki:
- Povezava servo motorja z ARM7-LPC2148
- Povezava servo motorja z MSP430G2
- Povezava servo motorja s STM32F103C8
- Povezava servo motorja z mikrokrmilnikom PIC z uporabo MPLAB in XC8
- Povezava servo motorja z Arduino Uno
- Vmesnik servo motorja z mikrokrmilnikom 8051
V tej vadnici bomo povezali Micro Servo Motor z mikrokrmilnikom Atmega16 AVR z uporabo Atmel Studio 7.0. Servo motor je ocenjen na 4,8-6V. Njegov kot vrtenja in smer lahko nadzorujemo z uporabo impulznega vlaka ali PWM signalov. Upoštevajte, da se servo motorji ne morejo premikati s polnim vrtenjem za 360 stopinj, zato se uporabljajo tam, kjer ni potrebno neprekinjeno vrtenje. Kot vrtenja je 0 -180 stopinj ali (-90) - (+90) stopinj.
Potrebne komponente
- Mikro servo motor SG90 Tower Pro
- IC mikrokrmilnik Atmega16
- Kristalni oscilator 16 MHz
- Dva kondenzatorja 100nF
- Dva kondenzatorja 22pF
- Pritisni gumb
- Jumper žice
- Breadboard
- USBASP v2.0
- Led (poljubne barve)
Pin opis servo motorja
- Rdeča = pozitivno napajanje (4,8 V do 6 V)
- Rjava = Tla
- Oranžna = krmilni signal (PWM pin)
Shema vezja
Povežite vse komponente, kot je prikazano na spodnjem diagramu, da zavrtite servo motor z uporabo mikrokrmilnika AVR. Obstajajo štirje PWM zatiči, lahko uporabimo kateri koli PWM zatič Atmega16. V tej vadnici za generiranje PWM uporabljamo pin PD5 (OC1A). PD5 je neposredno povezan z oranžno žico servo motorja, ki je vhodni signalni zatič. Priključite katero koli barvno lučko za indikator napajanja. Po potrebi priključite tudi en gumb v Ponastavi pin za ponastavitev Atmega16. Atmega16 povežite z ustreznim kristalnim oscilatorjem. Ves sistem bo napajal 5V napajalnik.
Popolna nastavitev bo videti spodaj:
Krmiljenje servo motorja z AVR ATmega16
Tako kot koračni motor tudi servo motor ne potrebuje nobenega zunanjega gonilnika, npr. Gonilnika motorja ULN2003 ali L293D. Samo PWM je dovolj za pogon servo motorja in zelo enostavno je generirati PWM iz mikrokrmilnika. Navor tega servo motorja znaša 2,5 kg / cm, zato če potrebujete večji navor, ta servo motor ni primeren.
Kot vemo, da servo motor išče impulz vsakih 20 ms, dolžina pozitivnega impulza pa bo določala kot vrtenja servo motorja.
Frekvenca, potrebna za 20-minutni impulz, je 50 Hz (f = 1 / T). Za ta servo motor torej specifikacija pravi, da za 0 stopinj potrebujemo 0,388 ms, za 90 stopinj pa 1,264 ms, za 180 stopinj pa 2,14 ms impulz.
Za generiranje določenih impulzov bomo uporabili Timer1 od Atmega16. Frekvenca CPU je 16Mz, vendar bomo uporabljali le 1Mhz, saj na mikrokrmilnik nimamo veliko zunanjih naprav in na mikrokrmilnik ni veliko obremenitve, zato bo 1Mhz opravil svoje delo. Predkaler je nastavljen na 1. Torej je ura razdeljena na 1Mhz / 1 = 1Mhz (1uS), kar je super. Timer1 se bo uporabljal kot način hitrega PWM, tj. Način 14. Za ustvarjanje želenega impulznega vlaka lahko uporabite različne načine časovnikov. Sklic je naveden spodaj, več opisov pa lahko najdete v uradnem listu Atmega16.
Za uporabo Timer1 kot hitrega načina PWM potrebujemo TOP vrednost ICR1 (Input Capture Register1). Če želite poiskati spodnjo formulo VRHUNSKE vrednosti:
f pwm = f cpu / nx (1 + TOP)
To je mogoče poenostaviti, NA VRH = ( f cpu / ( f pwm xn)) - 1
Kje, N = vrednost prednapetostnega sklopa
f CPU = CPU pogosto
f pwm = širina impulza servo motorja 50Hz
Zdaj izračunajte vrednost ICR1, saj imamo vse zahtevane vrednosti, N = 1, f cpu = 1MHz, f pwm = 50Hz
Samo vnesite vrednosti v zgornjo formulo in dobili bomo
ICR1 = 1999
To pomeni, da je treba doseči najvišjo stopnjo, tj. 180 0 bi moral biti ICR1 1999.
Za kristal 16MHz in prescaler, nastavljen na 16, bomo imeli
ICR1 = 4999
Zdaj pa se pogovorimo o skici.
Programiranje Atmega16 z uporabo USBasp
Popolna AVR koda za nadzor servo motorja je navedena spodaj. Koda je preprosta in jo je mogoče enostavno razumeti.
Tu smo kodirali Atmega16, da je servo motor zavrtel od 0 0 do 180 0 in se spet vrnil od 180 0 do 0 0. Ta prehod se bo zaključil v 9 korakih, tj. 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Za zamudo bomo uporabili interno knjižnico Atmel Studio, tj.
Povežite svoj USBASP v2.0 in sledite navodilom na tej povezavi za programiranje mikrokrmilnika Atmega16 AVR z uporabo USBASP in Atmel Studio 7.0. Samo zgradite skico in jo naložite z uporabo zunanje orodjarne.
Popolna koda z demonstracijskim videom je navedena spodaj. Izvedite tudi več o servo motorjih, tako da poznate njihov pomen v robotiki.