- Būtini komponentai
- Servo variklio kaištis
- Grandinės schema
- Servovariklio valdymas naudojant AVR ATmega16
- „Atmega16“ programavimas naudojant „USBasp“
Servovarikliai yra plačiai naudojami ten, kur reikalingas tikslus valdymas, pvz., Robotai, automatinės staklės, robotų rankos ir kt. Tačiau servovariklio taikymo sritis neapsiriboja tiek daug ir gali būti naudojama daugelyje programų. Norėdami sužinoti daugiau apie servo variklio pagrindus, teoriją ir veikimo principą, sekite nuorodą.
Anksčiau mes sujungėme servo variklį su daugeliu mikrovaldiklių:
- Servo variklio sąsaja su ARM7-LPC2148
- Servo variklio sąsaja su MSP430G2
- Servo variklio sąsaja su STM32F103C8
- Servo variklio sąsaja su PIC mikrovaldikliu, naudojant MPLAB ir XC8
- Servo variklio sąsaja su „Arduino Uno“
- Servo variklio sąsaja su 8051 mikrovaldikliu
Šioje pamokoje mes sujungsime „Micro Servo“ variklį su „Atmega16 AVR“ mikrovaldikliu, naudodami „Atmel Studio 7.0“. Servo variklis veikia kaip 4,8–6 V. Mes galime valdyti jo sukimosi kampą ir kryptį, taikydami impulsinius traukinio arba PWM signalus. Atkreipkite dėmesį, kad servovarikliai negali judėti, kol sukasi visas 360 laipsnių kampas, todėl jie naudojami ten, kur nereikia nuolatinio sukimosi. Sukimosi kampas yra 0 -180 laipsnių arba (-90) - (+90) laipsnių.
Būtini komponentai
- „SG90 Tower Pro“ mikro servo variklis
- „Atmega16“ mikrovaldiklio IC
- 16Mhz kristalinis osciliatorius
- Du 100nF kondensatoriai
- Du 22pF kondensatoriai
- Paspauskite mygtuką
- Šuolių laidai
- Bandomoji Lenta
- „USBASP v2.0“
- Led (bet kokios spalvos)
Servo variklio kaištis
- Raudona = teigiamas maitinimo šaltinis (nuo 4,8 V iki 6 V)
- Ruda = gruntas
- Oranžinė = valdymo signalas (PWM kaištis)
Grandinės schema
Prijunkite visus komponentus, kaip parodyta toliau pateiktoje diagramoje, kad pasuktumėte servo variklį naudodami AVR mikrovaldiklį. Yra keturi PWM kaiščiai, mes galime naudoti bet kokį „Atmega16“ PWM kaištį. Šioje pamokoje PWM generavimui naudojame „Pin PD5“ (OC1A). PD5 yra tiesiogiai prijungtas prie oranžinio servovariklio laido, kuris yra įvesties signalo kaištis. Prijunkite bet kokios spalvos maitinimo indikatoriaus lemputę. Be to, prijunkite vieną mygtuką „Reset pin“, kad atkurtumėte „Atmega16“, kai to reikia. Prijunkite „Atmega16“ su tinkama kristalinio generatoriaus grandine. Visa sistema bus maitinama iš 5 V maitinimo šaltinio.
Visa sąranka atrodys taip:
Servovariklio valdymas naudojant AVR ATmega16
Kaip ir „Stepper Motor“, servo varikliui nereikia jokių išorinių tvarkyklių, pvz., ULN2003 ar L293D variklio tvarkyklės. Servovarikliui vairuoti pakanka tik PWM ir labai lengva generuoti PWM iš mikrovaldiklio. Šio servo variklio sukimo momentas yra 2,5 kg / cm, taigi, jei jums reikia didesnio sukimo momento, šis servo serveris netinka.
Kaip žinome, kad servovariklis siekia pulso kas 20ms, o teigiamo impulso ilgis nulems servovariklio sukimosi kampą.
20ms impulsui gauti reikalingas dažnis yra 50Hz (f = 1 / T). Taigi šiam servovarikliui specifikacijoje sakoma, kad 0 laipsnių mums reikia 0,388 ms, 90 laipsnių - 1,264 ms, o 180 laipsnių - 2,14 ms pulso.
Norėdami generuoti nurodytus impulsus, naudosime „Atmega16“ laikmatį 1. Procesoriaus dažnis yra 16Mz, tačiau mes naudosime tik 1Mhz, nes neturime daug periferinių įrenginių, prijungtų prie mikrovaldiklio, ir mikrovaldikliui nėra daug apkrovos, todėl 1Mhz atliks darbą. „Prescaler“ yra nustatytas į 1. Taigi laikrodis padalijamas kaip 1Mhz / 1 = 1Mhz (1uS), kas yra puiku. „Timer1“ bus naudojamas kaip greitasis PWM režimas, ty 14 režimas. Norėdami sukurti norimą impulsinį traukinį, galite naudoti skirtingus laikmačių režimus. Nuoroda pateikiama žemiau, o daugiau aprašymo galite rasti oficialiame „Atmega16“ duomenų lape.
Norint naudoti „Timer1“ kaip greitą PWM režimą, mums reikės didžiausios ICR1 vertės („Input Capture Register1“). Norėdami rasti aukščiausią vertę, naudokite toliau pateiktą formulę:
f pwm = f cpu / nx (1 + TOP)
Tai galima supaprastinti, TOP = ( f cpu / ( f pwm xn)) - 1
Kur, N = nustatytos išankstinio skalavimo priemonės vertė
f cpu = procesoriaus dažnis
f pwm = servovariklio impulsų plotis, kuris yra 50 Hz
Dabar apskaičiuokite ICR1 vertę, nes turime visą reikiamą vertę, N = 1, f cpu = 1MHz, f pwm = 50Hz
Tiesiog įdėkite reikšmes į aukščiau pateiktą formulę ir gausime
ICR1 = 1999
Tai reiškia, kad reikia pasiekti maksimalų laipsnį, ty 180 0, ICR1 turėtų būti 1999 m.
16MHz kristalui ir „Prescaler“ nustatytam į 16 turėsime
ICR1 = 4999
Dabar pereikime aptarti eskizą.
„Atmega16“ programavimas naudojant „USBasp“
Visas AVR kodas servovarikliui valdyti pateiktas žemiau. Kodas yra paprastas ir lengvai suprantamas.
Čia mes užkodavome „Atmega16“, kad servovariklis pasuktų nuo 0 0 iki 180 0 ir vėl grįžtų nuo 180 0 iki 0 0. Šis perėjimas bus baigtas 9 žingsniais, ty 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Vėlavimui naudosime „Atmel Studio“ vidinę biblioteką, t.
Prijunkite USBASP v2.0 ir vykdykite šioje nuorodoje pateiktas instrukcijas, kad programuotumėte „Atmega16 AVR“ mikrovaldiklį naudodami USBASP ir „Atmel Studio 7.0“. Tiesiog sukurkite eskizą ir įkelkite naudodami išorinę įrankių grandinę.
Visas kodas su demonstraciniu vaizdo įrašu pateikiamas žemiau. Taip pat sužinokite daugiau apie servovariklius, žinodami jų svarbą robotikoje.