- Súčasti sú povinné
- Kolík Popis servomotora
- Schéma zapojenia
- Ovládanie servomotora pomocou AVR ATmega16
- Programovanie Atmega16 pomocou USBasp
Servomotory sa často používajú tam, kde je potrebné presné riadenie, ako sú roboty, automatizované stroje, robotické rameno atď. Rozsah servomotora však nie je obmedzený iba na tento rozsah a je možné ho použiť v mnohých aplikáciách. Ak sa chcete dozvedieť viac informácií o základoch, teórii a princípe fungovania servomotora, kliknite na odkaz.
Predtým sme prepojili servomotor s mnohými mikrokontrolérmi:
- Prepojovací servomotor s ARM7-LPC2148
- Prepojenie servomotora s MSP430G2
- Prepojovací servomotor s STM32F103C8
- Prepojenie servomotora s mikrokontrolérom PIC pomocou MPLAB a XC8
- Prepojenie servomotora s Arduino Uno
- Prepojenie servomotorov s mikrokontrolérom 8051
V tomto tutoriáli prepojíme mikro servomotor s mikrokontrolérom Atmega16 AVR pomocou programu Atmel Studio 7.0. Servomotor je dimenzovaný na prácu s napätím 4,8-6V. Jeho uhol natočenia a smer môžeme riadiť aplikáciou impulzného sledu alebo PWM signálov. Upozorňujeme, že servomotory sa nemôžu pohybovať v plnom rozsahu 360 stupňov, takže sa používajú tam, kde nie je potrebné nepretržité otáčanie. Uhol natočenia je 0 - 180 stupňov alebo (-90) - (+90) stupňov.
Súčasti sú povinné
- Mikro servomotor SG90 Tower Pro
- Integrovaný obvod mikrokontroléra Atmega16
- Krištáľový oscilátor 16 MHz
- Dva kondenzátory 100nF
- Dva kondenzátory 22pF
- Tlačidlo
- Prepojovacie drôty
- Nepál
- USBASP v2.0
- LED (ľubovoľná farba)
Kolík Popis servomotora
- Červená = kladný napájací zdroj (4,8 V až 6 V)
- Hnedá = zem
- Oranžová = riadiaci signál (pin PWM)
Schéma zapojenia
Pripojte všetky komponenty tak, ako je to znázornené na obrázku nižšie, aby ste pomocou mikrokontroléra AVR natáčali servomotor. Existujú štyri PWM piny, môžeme použiť akýkoľvek PWM pin Atmega16. V tomto tutoriále používame Pin PD5 (OC1A) na generovanie PWM. PD5 je priamo pripojený k oranžovému vodiču servomotora, ktorý je vstupným signálnym pinom. Pripojte ľubovoľnú farebnú LED pre indikátor napájania. Pripojte tiež jedno tlačidlo do kolíka Reset na resetovanie Atmega16, kedykoľvek je to potrebné. Pripojte Atmega16 k správnemu obvodu kryštálového oscilátora. Celý systém bude napájaný zdrojom 5 V.
Kompletné nastavenie bude vyzerať takto:
Ovládanie servomotora pomocou AVR ATmega16
Rovnako ako krokový motor, ani servomotor nepotrebuje žiadny externý ovládač, napr. Ovládač motora ULN2003 alebo L293D. Na pohon servomotora stačí iba PWM a je veľmi ľahké generovať PWM z mikrokontroléra. Krútiaci moment tohto servomotora je 2,5 kg / cm, takže ak požadujete väčší krútiaci moment, toto servo nie je vhodné.
Ako vieme, servomotor vyhľadáva impulz každých 20 ms a dĺžka kladného impulzu určí uhol natočenia servomotora.
Frekvencia potrebná na získanie 20 ms impulzu je 50 Hz (f = 1 / T). Takže pre tento servomotor špecifikácia hovorí, že pre 0 stupňov potrebujeme 0,388 ms, pre 90 stupňov potrebujeme 1 264 ms a pre 180 stupňov potrebujeme impulz 2,14 ms.
Na generovanie určených impulzov použijeme Timer1 z Atmega16. Frekvencia CPU je 16Mz, ale budeme využívať iba 1Mhz, pretože k mikrokontroléru nemáme pripojených veľa periférií a mikrokontrolér nie je veľmi zaťažený, takže 1Mhz to urobí. Prescaler je nastavený na 1. Takže hodiny sú rozdelené ako 1Mhz / 1 = 1Mhz (1uS), čo je skvelé. Timer1 sa použije ako rýchly režim PWM, tj. Režim 14. Na generovanie požadovaného sledu impulzov môžete použiť rôzne režimy časovačov. Odkaz je uvedený nižšie a ďalší popis nájdete v oficiálnom údajovom liste Atmega16.
Aby sme mohli použiť Timer1 ako rýchly PWM režim, budeme potrebovať TOP hodnotu ICR1 (Input Capture Register1). Najvyššiu hodnotu nájdete pomocou nižšie uvedeného vzorca:
f pwm = f cpu / nx (1 + TOP)
To sa dá zjednodušiť na, TOP = ( f cpu / ( f pwm xn)) - 1
Kde, N = hodnota nastavenej stupnice
f cpu = Frekvencia CPU
f pwm = šírka impulzu servomotora, ktorá je 50 Hz
Teraz vypočítajte hodnotu ICR1, pretože máme všetky požadované hodnoty, N = 1, f CPU = 1 MHz, f pwm = 50 Hz
Stačí vložiť hodnoty do vyššie uvedeného vzorca a dostaneme
ICR1 = 1999
To znamená dosiahnuť maximálny stupeň, tj. 180 0, ICR1 by mal byť 1999.
Pre 16MHz kryštál a Prescaler nastavený na 16 budeme mať
ICR1 = 4 999
Teraz poďme diskutovať o náčrte.
Programovanie Atmega16 pomocou USBasp
Kompletný AVR kód na ovládanie servomotora je uvedený nižšie. Kód je jednoduchý a dá sa ľahko pochopiť.
Tu sme kódované ATmega16 otáčať servo motor z 0 0 180 0 a vracia znova od 180 0 až 0 ° C 0. Tento prechod bude dokončený v 9 krokoch, tj. 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Na oneskorenie použijeme internú knižnicu Atmel Studio tj.
Pripojte svoj USBASP v2.0 a podľa pokynov v tomto odkaze naprogramujte mikrokontrolér Atmega16 AVR pomocou USBASP a Atmel Studio 7.0. Stačí zostaviť náčrt a nahrať pomocou externého reťazca nástrojov.
Kompletný kód s demonštračným videom je uvedený nižšie. Dozviete sa tiež viac o servomotoroch spoznaním ich dôležitosti v robotike.