- Požadované komponenty
- Pin Popis servomotoru
- Kruhový diagram
- Ovládání servomotoru pomocí AVR ATmega16
- Programování Atmega16 pomocí USBasp
Servomotory jsou široce používány tam, kde je požadováno přesné ovládání, jako jsou roboty, automatizované stroje, robotické rameno atd. Rozsah servomotoru však není omezen na tolik a lze jej použít v mnoha aplikacích. Chcete-li se dozvědět více o základech, teorii a principu fungování servomotoru, přejděte na odkaz.
Dříve jsme servomotor propojili s mnoha mikrokontroléry:
- Propojovací servomotor s ARM7-LPC2148
- Propojení servomotoru s MSP430G2
- Propojovací servomotor s STM32F103C8
- Propojení servomotoru s mikrokontrolérem PIC pomocí MPLAB a XC8
- Propojení servomotoru s Arduino Uno
- Propojování servomotorů s mikrokontrolérem 8051
V tomto tutoriálu budeme propojovat Micro Servo Motor s mikrokontrolérem Atmega16 AVR pomocí Atmel Studio 7.0. Servomotor je dimenzován tak, aby pracoval při 4,8-6V. Můžeme řídit jeho úhel otáčení a směr pomocí pulzního sledu nebo PWM signálů. Pamatujte, že servomotory se nemohou pohybovat pro plné otáčení o 360 stupňů, proto se používají tam, kde není vyžadováno nepřetržité otáčení. Úhel otočení je 0 - 180 stupňů nebo (-90) - (+90) stupňů.
Požadované komponenty
- Mikro servomotor SG90 Tower Pro
- IC mikrokontroléru Atmega16
- 16MHz krystalový oscilátor
- Dva 100nF kondenzátory
- Dva kondenzátory 22pF
- Stiskněte tlačítko
- Propojovací dráty
- Nepájivá deska
- USBASP v2.0
- LED (libovolná barva)
Pin Popis servomotoru
- Červená = pozitivní napájecí zdroj (4,8 V až 6 V)
- Brown = Ground
- Oranžová = řídicí signál (PWM Pin)
Kruhový diagram
Připojte všechny komponenty, jak je znázorněno na obrázku níže, aby bylo možné otáčet servomotorem pomocí mikrokontroléru AVR. Existují čtyři PWM piny, můžeme použít jakýkoli PWM pin Atmega16. V tomto kurzu používáme Pin PD5 (OC1A) pro generování PWM. PD5 je přímo připojen k oranžovému vodiči servomotoru, který je vstupním signálním kolíkem. Připojte libovolnou barevnou LED pro indikátor napájení. Připojte také jedno tlačítko do kolíku Reset pro resetování Atmega16, kdykoli je to potřeba. Připojte Atmega16 se správným obvodem krystalového oscilátoru. Celý systém bude napájen napájením 5 V.
Kompletní nastavení bude vypadat níže:
Ovládání servomotoru pomocí AVR ATmega16
Stejně jako krokový motor nepotřebuje servomotor žádný externí ovladač, např. Ovladač motoru ULN2003 nebo L293D. Jen PWM stačí k pohonu servomotoru a je velmi snadné generovat PWM z mikrokontroléru. Točivý moment tohoto servomotoru je 2,5 kg / cm, takže pokud požadujete větší točivý moment, toto servo není vhodné.
Jak víme, že servomotor hledá pulz každých 20 ms a délka pozitivního pulzu určí úhel rotace servomotoru.
Frekvence potřebná k získání 20ms pulzu je 50Hz (f = 1 / T). Takže pro tento servomotor specifikace říká, že pro 0 stupňů potřebujeme 0,388 ms, pro 90 stupňů potřebujeme 1,264 ms a pro 180 stupňů potřebujeme 2,14 ms puls.
Ke generování specifikovaných pulzů použijeme Timer1 z Atmega16. Frekvence CPU je 16Mz, ale budeme využívat pouze 1Mhz, protože nemáme moc periferií připojených k mikrokontroléru a na mikrokontroléru není příliš velké zatížení, takže 1Mhz to udělá. Prescaler je nastaven na 1. Takže hodiny jsou rozděleny na 1Mhz / 1 = 1Mhz (1uS), což je skvělé. Timer1 bude použit jako rychlý režim PWM, tj. Režim 14. K vygenerování požadovaného sledu pulzů můžete použít různé režimy časovačů. Odkaz je uveden níže a další popis najdete v oficiálním datovém listu Atmega16.
Chcete-li použít Timer1 jako rychlý režim PWM, budeme potřebovat TOP hodnotu ICR1 (Input Capture Register1). Chcete-li najít nejvyšší hodnotu, použijte vzorec uvedený níže:
f pwm = f cpu / nx (1 + TOP)
To lze zjednodušit na, TOP = ( f cpu / ( f pwm xn)) - 1
Kde, N = nastavená hodnota prescaleru
f cpu = frekvence CPU
f pwm = šířka impulsu servomotoru, která je 50 Hz
Nyní vypočítáme hodnotu ICR1, protože máme všechny požadované hodnoty, N = 1, f cpu = 1MHz, f pwm = 50Hz
Stačí zadat hodnoty do výše uvedeného vzorce a dostaneme
ICR1 = 1999
To znamená dosáhnout maximálního stupně, tj. 180 0, ICR1 by měl být 1999.
Pro 16MHz krystal a Prescaler nastavený na 16 budeme mít
ICR1 = 4 999
Nyní pojďme diskutovat o náčrtu.
Programování Atmega16 pomocí USBasp
Kompletní AVR kód pro ovládání servomotoru je uveden níže. Kód je jednoduchý a lze mu snadno porozumět.
Zde jsme kódovali Atmega16 pro otáčení servomotoru z 0 0 na 180 0 a návrat zpět z 180 0 na 0 0. Tento přechod bude dokončen v 9 krocích, tj. 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Pro zpoždění použijeme interní knihovnu Atmel Studio tj.
Připojte svůj USBASP v2.0 a podle pokynů v tomto odkazu naprogramujte mikrokontrolér Atmega16 AVR pomocí USBASP a Atmel Studio 7.0. Stačí vytvořit náčrt a nahrát pomocí externího řetězce nástrojů.
Kompletní kód s ukázkovým videem je uveden níže. Dozvíte se také více o servomotorech tím, že znáte jejich význam v robotice.