- Co je to servomotor?
- Propojení servomotorů s mikrokontroléry:
- Programování servomotoru s mikrokontrolérem PICF877A PIC:
- Kruhový diagram:
- Simulace a nastavení hardwaru:
Toto je náš 11. tutoriál o učení mikrokontrolérů PIC pomocí MPLAB a XC8. V tomto tutoriálu se naučíme, jak ovládat servomotor pomocí mikrokontroléru PIC. Pokud jste již pracovali se servomotory, můžete přeskočit první polovinu tohoto tutoriálu, ale pokud jste se samotným servomotorem noví, pokračujte ve čtení.
Dosud jsme prozkoumali mnoho základních tutoriálů, jako je blikání LED s PIC, časovače v PIC, propojení LCD, propojení 7 segmentů, ADC pomocí PIC atd. Pokud jste úplným začátečníkem, navštivte úplný seznam PIC tutoriálů zde a začít se učit.
V našem předchozím tutoriálu jsme se naučili, jak generovat signály PWM pomocí mikrokontroléru PIC, signály byly generovány na základě hodnoty načtené z potenciometru. Pokud jste tehdy porozuměli všem programům, blahopřejeme, že jste již kódovali také servomotor. ANO, Servomotory reagují na signály PWM (které zde vytváříme pomocí časovačů), v tomto tutoriálu se naučíme proč a jak. Budeme simulovat a sestavovat nastavení hardwaru pro tento projekt a podrobné video najdete na konci tohoto výukového programu.
Co je to servomotor?
Servomotor je typ aktuátoru (většinou kruhového), který umožňuje úhlové ovládání. Existuje mnoho typů servomotorů, ale v tomto tutoriálu se zaměřme na hobby servomotory zobrazené níže.
Hobby serva jsou populární, protože se jedná o levnou metodu řízení pohybu. Poskytují běžná řešení pro většinu potřeb R / C a robotických fandů. Rovněž eliminují potřebu vlastního návrhu řídicího systému pro každou aplikaci.
Většina hobby servomotorů má rotační anděl 0-180 °, ale pokud máte zájem, můžete také získat 360 ° servomotor. Tento výukový program používá servomotor 0- 180 °. Existují dva typy servomotorů na základě převodovky, jeden je plastový servomotor a druhý kovový servomotor. Kovová převodovka se používá v místech, kde je motor vystaven většímu opotřebení, ale přichází pouze za vysokou cenu.
Servomotory jsou dimenzovány na kg / cm (kilogram na centimetr), většina hobby servomotorů je dimenzována na 3kg / cm nebo 6kg / cm nebo 12kg / cm. Tento kg / cm vám říká, jakou váhu může váš servomotor zvednout v určité vzdálenosti. Například: Servomotor o hmotnosti 6 kg / cm by měl být schopen zvednout 6 kg, pokud je náklad zavěšen 1 cm od hřídele motoru, čím větší je vzdálenost, tím menší je nosnost. Naučte se zde Základy servomotoru.
Propojení servomotorů s mikrokontroléry:
Propojení hobby servomotorů s MCU je velmi snadné. U serva vycházejí tři dráty. Z toho dva budou použity pro napájení (pozitivní a negativní) a jeden bude použit pro signál, který má být odeslán z MCU. V tomto tutoriálu budeme používat servomotor MG995 Metal Gear, který se nejčastěji používá pro humanoidní roboty RC automobilů atd. Obrázek MG995 je uveden níže:
Barevné kódování vašeho servomotoru se může lišit, proto zkontrolujte příslušný datový list.
Všechny servomotory pracují přímo s napájecími lištami + 5V, ale musíme dávat pozor na množství proudu, které by motor spotřeboval, pokud plánujete použít více než dva servomotory, měl by být navržen vhodný štít servomotoru. V tomto tutoriálu jednoduše použijeme jeden servomotor, abychom ukázali, jak naprogramovat náš PIC MCU na ovládání motoru. Níže zkontrolujte odkazy na propojení servomotoru s jiným mikrokontrolérem:
- Propojení servomotoru s mikrokontrolérem 8051
- Ovládání servomotoru pomocí Arduina
- Výukový program pro servomotory Raspberry Pi
- Servomotor s mikrokontrolérem AVR
Programování servomotoru s mikrokontrolérem PICF877A PIC:
Než začneme programovat servomotor, měli bychom vědět, jaký typ signálu má být odeslán pro ovládání servomotoru. Měli bychom naprogramovat MCU tak, aby odesílal signály PWM na signální vodič servomotoru. Uvnitř servomotoru je řídicí obvod, který čte pracovní cyklus signálu PWM a polohuje hřídel servomotoru na příslušné místo, jak je znázorněno na obrázku níže
Každý servomotor pracuje na různých frekvencích PWM (nejběžnější frekvence je 50 Hz, která se používá v tomto výukovém programu), proto si pořiďte datový list svého motoru a zkontrolujte, na které PWM období váš servomotor pracuje.
Podrobnosti o signálu PWM pro náš Tower pro MG995 jsou uvedeny níže.
Z toho můžeme usoudit, že náš motor pracuje s PWM periodou 20ms (50Hz). Frekvence našeho signálu PWM by tedy měla být nastavena na 50 Hz. Frekvence PWM, kterou jsme nastavili v našem předchozím tutoriálu, byla 5 KHz, použití stejného nám zde nepomůže.
Ale tady máme problém. PIC16F877A nemůže generovat nízké frekvence PWM signálu pomocí modulu CCP. Podle datového listu je nejnižší možná hodnota, kterou lze nastavit pro frekvenci PWM, 1,2 KHz. Musíme tedy upustit od myšlenky používat modul CCP a najít způsob, jak vytvářet naše vlastní PWM signály.
V tomto výukovém programu tedy použijeme modul časovače ke generování signálů PWM s frekvencí 50 Hz a ke změně jejich pracovního cyklu k ovládání anděla servomotoru. Pokud jste v časovači nebo ADC s PIC nováčkem, vraťte se prosím k tomuto tutoriálu, protože většinu věcí budu přeskakovat, protože jsme je tam již pokryli.
Inicializujeme náš modul časovače s předvolbou 32 a necháme ho přetéct za každé 1us. Podle našeho datového listu by PWM mělo mít období pouze 20ms. Naše doba zapnutí a vypnutí by se tedy měla přesně rovnat 20 ms.
OPTION_REG = 0b00000100; // Timer0 s externím kmitočtem a 32 jako předvolba TMR0 = 251; // Načíst časovou hodnotu pro 1us delayValue může být pouze mezi 0-256 TMR0IE = 1; // Povolit bit přerušení časovače v registru PIE1 GIE = 1; // Povolit globální přerušení PEIE = 1; // Povolení periferního přerušení
Takže uvnitř naší funkce přerušení rutiny zapneme pin RB0 na zadanou dobu a vypneme ji na dobu vystružování (20ms - on_time). Hodnotu doby zapnutí lze určit pomocí potenciometru a modulu ADC. Přerušení je zobrazeno níže.
oid interrupt timer_isr () {if (TMR0IF == 1) // Časovač přetekl {TMR0 = 252; / * Načtěte hodnotu časovače, (Poznámka: Časová hodnota je 101 instancí 100, protože TImer0 potřebuje dva instrukční cykly, aby mohl začít zvyšovat TMR0 * / TMR0IF = 0; // Vymazat počet příznaků přerušení časovače ++;} if (count> = on_time) { RB0 = 1; // doplní hodnotu pro blikání LED} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
V naší smyčce while jsme právě načetli hodnotu potenciometru pomocí modulu ADC a aktualizovali čas PWM pomocí načtené hodnoty.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Tímto způsobem jsme vytvořili signál PWM, jehož doba je 20 ms a má proměnný pracovní cyklus, který lze nastavit pomocí potenciometru. Kompletní kód byl uveden níže v sekci kódu.
Nyní ověřme výstup pomocí simulace proteus a pokračujme k našemu hardwaru.
Kruhový diagram:
Pokud jste již narazili na výukový program PWM, budou schémata tohoto tutoriálu stejná, kromě toho, že místo LED světla přidáme servomotor.
Simulace a nastavení hardwaru:
Pomocí simulace Proteus můžeme ověřit signál PWM pomocí osciloskopu a také zkontrolovat rotující anděl servomotoru. Níže je zobrazeno několik snímků simulace, kde lze zaznamenat změnu rotujícího anděla servomotoru a pracovního cyklu PWM na základě potenciometru. Na konci dále zkontrolujte celé video rotace na různých PWM.
Jak vidíme, anděl rotace serva se změní na základě hodnoty potenciometru. Nyní přejdeme k nastavení hardwaru.
V nastavení hardwaru jsme právě odstranili desku LED a přidali servomotor, jak je znázorněno na schématech výše.
Hardware je zobrazen na obrázku níže:
Video níže ukazuje, jak se servo motor reaguje na různých polohách potenciometru.
To je ono !! Propojili jsme servomotor s mikrokontrolérem PIC, nyní můžete použít svou vlastní kreativitu a najít pro to aplikace. Existuje spousta projektů, které používají servomotor.