- Nepieciešamās sastāvdaļas
- Servomotora tapas apraksts
- Ķēdes shēma
- Servomotora vadība ar AVR ATmega16
- Atmega16 programmēšana, izmantojot USBasp
Servomotori tiek plaši izmantoti gadījumos, kad nepieciešama precīza vadība, piemēram, roboti, automatizētas apstrādes iekārtas, robotizētas rokas utt. Lai uzzinātu vairāk par servomotora pamatiem, teoriju un darbības principu, sekojiet saitei.
Servo motoru mēs iepriekš sasaistījām ar daudziem mikrokontrolleriem:
- Saskarne servomotoram ar ARM7-LPC2148
- Saskarne servomotoram ar MSP430G2
- Saskarne servomotoram ar STM32F103C8
- Servomotora saskarne ar PIC mikrokontrolleru, izmantojot MPLAB un XC8
- Saskarne servomotoram ar Arduino Uno
- Servomotora mijiedarbība ar 8051 mikrokontrolleru
Šajā apmācībā mēs sadarbosimies ar mikro servo motoru ar Atmega16 AVR mikrokontrolleru, izmantojot Atmel Studio 7.0. Servomotors darbojas kā 4,8–6 V. Mēs varam kontrolēt tā rotācijas leņķi un virzienu, izmantojot impulsu vilciena vai PWM signālus. Ņemiet vērā, ka servomotori nevar pārvietoties, lai pilnībā pagrieztu 360 grādus, tāpēc tos izmanto, ja nepārtraukta rotācija nav nepieciešama. Rotācijas leņķis ir 0 -180 grādi vai (-90) - (+90) grādi.
Nepieciešamās sastāvdaļas
- SG90 Tower Pro mikro servo motors
- Atmega16 mikrokontrolleru IC
- 16Mhz kristāla oscilators
- Divi 100nF kondensatori
- Divi 22pF kondensatori
- Uzspied pogu
- Džemperu vadi
- Maizes dēlis
- USBASP v2.0
- Led (jebkura krāsa)
Servomotora tapas apraksts
- Sarkans = pozitīvs barošanas avots (no 4,8 V līdz 6 V)
- Brūns = Zeme
- Oranžs = vadības signāls (PWM tapa)
Ķēdes shēma
Pievienojiet visus komponentus, kā parādīts zemāk redzamajā diagrammā, lai pagrieztu servomotoru, izmantojot AVR mikrokontrolleru. Ir četras PWM tapas, mēs varam izmantot jebkuru Atmega16 PWM tapu. Šajā apmācībā PWM ģenerēšanai mēs izmantojam Pin PD5 (OC1A). PD5 ir tieši savienots ar servomotora oranžo vadu, kas ir ieejas signāla tapa. Pievienojiet jebkuras krāsas indikatoru strāvas indikatoram. Pievienojiet arī vienu spiedpogu atiestatīšanas tapā, lai atiestatītu Atmega16, kad vien nepieciešams. Savienojiet Atmega16 ar pareizu kristāla oscilatora shēmu. Visa sistēma darbosies ar 5 V barošanu.
Pilnīga iestatīšana izskatīsies šādi:
Servomotora vadība ar AVR ATmega16
Tāpat kā Stepper Motor, arī servomotoram nav nepieciešams ārējs draiveris, piemēram, ULN2003 vai L293D motora draiveris. Servo motora vadīšanai pietiek ar PWM, un no mikrokontrollera ir ļoti viegli ģenerēt PWM. Šī servomotora griezes moments ir 2,5 kg / cm, tādēļ, ja jums ir nepieciešams lielāks griezes moments, šis servo nav piemērots.
Tā kā mēs zinām, ka servomotors meklē impulsu ik pēc 20ms, un pozitīvā impulsa garums noteiks servomotora rotācijas leņķi.
20ms impulsa iegūšanai nepieciešamā frekvence ir 50Hz (f = 1 / T). Tātad šim servomotoram specifikācijā teikts, ka 0 grādiem mums vajag 0,388 ms, 90 grādiem - 1,264 ms un 180 grādiem - 2,14 ms impulsu.
Lai ģenerētu noteiktus impulsus, mēs izmantosim Atmega16 taimeri1. Centrālā procesora frekvence ir 16Mz, bet mēs izmantosim tikai 1Mhz, jo mums nav daudz perifērijas ierīču, kas savienotas ar mikrokontrolleru, un mikrokontrollerim nav lielas slodzes, tāpēc 1Mhz darīs darbu. Prescaler ir iestatīts uz 1. Tātad pulkstenis tiek sadalīts kā 1Mhz / 1 = 1Mhz (1uS), kas ir lieliski. Taimeris1 tiks izmantots kā ātrs PWM režīms, ti, 14. režīms. Lai izveidotu vēlamo impulsa vilcienu, varat izmantot dažādus taimeru režīmus. Atsauce ir sniegta zemāk, un plašāku aprakstu varat atrast oficiālajā Atmega16 datu lapā.
Lai Timer1 izmantotu kā ātru PWM režīmu, mums būs nepieciešama ICR1 (Input Capture Register1) TOP vērtība. Lai atrastu zemāk sniegto formulas TOP vērtību, rīkojieties šādi:
f pwm = f cpu / nx (1 + TOP)
To var vienkāršot, TOP = ( f cpu / ( f pwm xn)) - 1
Kur, N = Preskalera iestatītā vērtība
f cpu = CPU biežums
f pwm = servomotora impulsa platums, kas ir 50Hz
Tagad aprēķiniet ICR1 vērtību, jo mums ir nepieciešama visa vērtība, N = 1, f cpu = 1MHz, f pwm = 50Hz
Vienkārši ievietojiet vērtības iepriekš formulā, un mēs to iegūsim
ICR1 = 1999
Tas nozīmē sasniegt maksimālo pakāpi, ti, 180 0, ICR1 jābūt 1999. gadam.
Attiecībā uz 16MHz kristālu un Prescaler iestatīts uz 16, mums būs
ICR1 = 4999
Tagad turpināsim apspriest skici.
Atmega16 programmēšana, izmantojot USBasp
Pilns AVR kods servomotora kontrolei ir norādīts zemāk. Kods ir vienkāršs un to var viegli saprast.
Šeit mēs esam kodējuši Atmega16, lai servomotoru pagrieztu no 0 0 līdz 180 0 un atkal atgrieztos no 180 0 līdz 0 0. Šī pāreja tiks pabeigta 9 soļos, ti, 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Kavēšanās nolūkā mēs izmantosim Atmel Studio iekšējo bibliotēku, ti,
Pievienojiet USBASP v2.0 un izpildiet šajā saitē sniegtos norādījumus, lai programmētu Atmega16 AVR mikrokontrolleru, izmantojot USBASP un Atmel Studio 7.0. Vienkārši izveidojiet skici un augšupielādējiet, izmantojot ārējo rīku ķēdi.
Pilns kods ar demonstrācijas video ir norādīts zemāk. Uzziniet arī vairāk par servomotoriem, zinot to nozīmi robotikā.