- Čo je to servomotor?
- Prepojenie servomotorov s mikrokontrolérmi:
- Programovanie servomotora s mikrokontrolérom PICF877A PIC:
- Schéma zapojenia:
- Simulácia a nastavenie hardvéru:
Toto je náš 11. tutoriál Výučba mikrokontrolérov PIC pomocou MPLAB a XC8. V tomto výučbe sa dozvieme, ako riadiť servomotor pomocou mikrokontroléra PIC. Ak ste už so servomotormi pracovali, môžete preskočiť prvú polovicu tohto tutoriálu, ale ak ste so samotným servomotorom nováčikom, pokračujte v čítaní.
Doteraz sme prebrali mnoho základných návodov, ako je blikanie LED pomocou PIC, časovače v PIC, prepojenie LCD, prepojenie 7 segmentov, ADC pomocou PIC atď. Ak ste úplným začiatočníkom, navštívte kompletný zoznam návodov PIC tu a začať sa učiť.
V našom predchádzajúcom tutoriáli sme sa naučili, ako generovať signály PWM pomocou mikrokontroléra PIC, signály sa generovali na základe hodnoty načítanej z potenciometra. Ak ste vtedy pochopili všetky programy, blahoželáme, už ste tiež kódovali servomotor. ÁNO, Servomotory reagujú na signály PWM (ktoré tu vytvárame pomocou časovačov), v tomto návode sa dozvieme, prečo a ako. Budeme simulovať a zostavovať hardvérové nastavenie pre tento projekt a podrobné video nájdete na konci tohto tutoriálu.
Čo je to servomotor?
Servomotor je typ aktuátora (väčšinou kruhového), ktorý umožňuje uhlové ovládanie. Existuje mnoho typov servomotorov, ale v tomto výučbe sa sústreďme na hobby servomotory zobrazené nižšie.
Hobby serva sú populárne, pretože sú lacnou metódou riadenia pohybu. Poskytujú hotové riešenie pre väčšinu potrieb R / C a robotických fanúšikov. Eliminujú tiež potrebu navrhnúť riadiaci systém na mieru pre každú aplikáciu.
Väčšina hobby servomotorov má rotačný anjel 0 - 180 °, ale v prípade záujmu môžete získať aj 360 ° servomotor. V tomto výučbe sa používa servomotor 0 - 180 °. Existujú dva typy servomotorov založených na prevodových stupňoch, jeden je plastový servomotor a druhý kovový servomotor. Kovové ozubené koleso sa používa na miestach, kde je motor vystavený väčšiemu opotrebovaniu, ale prichádza len za vysokú cenu.
Servomotory sú dimenzované na kg / cm (kilogram na centimeter). Väčšina hobby servomotorov je dimenzovaná na 3 kg / cm alebo 6 kg / cm alebo 12 kg / cm. Tento kg / cm udáva, akú váhu môže váš servomotor zdvihnúť v konkrétnej vzdialenosti. Napríklad: Servomotor s hmotnosťou 6 kg / cm by mal byť schopný zdvihnúť 6 kg, ak je bremeno zavesené 1 cm od hriadeľa motorov, čím väčšia je vzdialenosť, tým menšia je nosnosť. Naučte sa tu Základné informácie o servomotore.
Prepojenie servomotorov s mikrokontrolérmi:
Prepojenie hobby servomotorov s MCU je veľmi jednoduché. Z serva vychádzajú tri drôty. Z toho dva sa použijú na napájanie (kladné a záporné) a jeden sa použije na signál, ktorý sa má odoslať z MCU. V tomto výučbe budeme používať servomotor s kovovým prevodom MG995, ktorý sa najčastejšie používa pre humanoidné roboty RC automobilov atď. Obrázok MG995 je uvedený nižšie:
Farebné kódovanie vášho servomotora sa môže líšiť, preto si pozrite príslušný údajový list.
Všetky servomotory pracujú priamo s vašimi napájacími lištami + 5V, ale musíme byť opatrní, pokiaľ ide o množstvo prúdu, ktoré by motor spotreboval, ak plánujete použiť viac ako dva servomotory, je potrebné navrhnúť správny štít servomotora. V tomto výučbe jednoducho použijeme jeden servomotor na ukážku toho, ako naprogramovať náš PIC MCU na riadenie motora. Skontrolujte odkazy na prepojenie servomotora s iným mikrokontrolérom:
- Prepojenie servomotora s mikrokontrolérom 8051
- Ovládanie servomotora pomocou Arduina
- Výukový program pre servomotory Raspberry Pi
- Servomotor s mikrokontrolérom AVR
Programovanie servomotora s mikrokontrolérom PICF877A PIC:
Predtým, ako začneme programovať pre servomotor, mali by sme vedieť, aký typ signálu sa má poslať na riadenie servomotora. Mali by sme naprogramovať MCU tak, aby odosielal signály PWM na signálny vodič servomotora. Vo vnútri servomotora je riadiaci obvod, ktorý sníma pracovný cyklus signálu PWM a polohuje hriadeľ servomotorov na príslušné miesto, ako je to znázornené na obrázku nižšie.
Každý servomotor pracuje na iných frekvenciách PWM (najbežnejšia frekvencia je 50 Hz, ktorá sa používa v tomto návode), preto si vyhľadajte technický list svojho motora a skontrolujte, na ktorej PWM perióde váš servomotor pracuje.
Podrobnosti o signáli PWM pre náš Tower pro MG995 sú uvedené nižšie.
Z toho môžeme vyvodiť záver, že náš motor pracuje s periódou PWM 20ms (50Hz). Frekvencia nášho signálu PWM by mala byť nastavená na 50 Hz. Frekvencia PWM, ktorú sme nastavili v našom predchádzajúcom tutoriále, bola 5 KHz, jeho použitie nám tu však nepomôže.
Ale máme tu problém. PIC16F877A nemôže generovať nízke frekvencie PWM signálu pomocou modulu CCP. Podľa technického listu je najnižšia možná hodnota, ktorá sa dá nastaviť pre frekvenciu PWM, 1,2 KHz. Musíme teda upustiť od myšlienky používať modul CCP a nájsť spôsob, ako vytvoriť naše vlastné signály PWM.
Preto v tomto návode použijeme modul časovača na generovanie signálov PWM s frekvenciou 50 Hz a na zmenu ich pracovného cyklu na riadenie anjela servomotora. Ak ste v časovači alebo ADC s PIC nováčikom, vráťte sa prosím k tomuto výučbe, pretože väčšinu vecí budem preskakovať, pretože sme ich tam už prebrali.
Inicializujeme náš modul časovača s predvoľbou 32 a zabezpečujeme jeho pretečenie pre každé 1us. Podľa nášho údajového listu by PWM malo mať periódu iba 20ms. Takže náš spoločný čas vypnutia a vypnutia by mal byť presne 20 ms.
OPTION_REG = 0b00000100; // Timer0 s externou frekvenciou a 32 ako predvoľba TMR0 = 251; // Načítajte časovú hodnotu pre 1us delayValue môže byť iba medzi 0-256 TMR0IE = 1; // Povoliť bit prerušenia časovača v registri PIE1 GIE = 1; // Povoliť globálne prerušenie PEIE = 1; // Povoliť periférne prerušenie
Takže v rámci našej funkcie prerušovacej rutiny zapneme pin RB0 na zadaný čas a vypneme ho na dobu reaming (20ms - on_time). Hodnotu doby zapnutia je možné určiť pomocou potenciometra a modulu ADC. Prerušenie je zobrazené nižšie.
oid interrupt timer_isr () {if (TMR0IF == 1) // Časovač pretiekol {TMR0 = 252; / * Načítajte hodnotu časovača, (Poznámka: Časová hodnota je 101 na 100, pretože TImer0 potrebuje dva inštruktážne cykly, aby sa začalo zvyšovať TMR0 * / TMR0IF = 0; // Vymazať počet príznakov prerušenia časovača ++;} if (count> = on_time) { RB0 = 1; // doplňte hodnotu pre blikanie LED} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Vnútri našej while slučky sme len čítať hodnotu potenciometra pomocou modulu ADC a aktualizovať v čase PWM pomocou hodnoty čítania.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Týmto spôsobom sme vytvorili signál PWM, ktorého perióda je 20 ms a má premenlivý pracovný cyklus, ktorý je možné nastaviť pomocou potenciometra. Celý kód je uvedený nižšie v sekcii venovanej kódu.
Teraz overme výstup pomocou simulácie proteus a pokračujme k nášmu hardvéru.
Schéma zapojenia:
Ak ste sa už s tutoriálom PWM stretli, potom budú schémy tohto tutoriálu rovnaké, až na to, že namiesto LED svetla pridáme servomotor.
Simulácia a nastavenie hardvéru:
Pomocou simulácie Proteus môžeme overiť signál PWM pomocou osciloskopu a tiež skontrolovať rotujúceho anjela servomotora. Niekoľko snímok simulácie je znázornených nižšie, kde je možné zaznamenať zmenu rotačného anjela servomotora a pracovného cyklu PWM na základe potenciometra. Ďalej na konci skontrolujte celé video rotácie pri rôznych PWM.
Ako vidíme, servo rotácie sa zmení na základe hodnoty potenciometra. Teraz pokračujme k nášmu hardvérovému nastaveniu.
V nastavení hardvéru sme práve odstránili dosku LED a pridali servomotor, ako je to znázornené na schémach vyššie.
Hardvér je zobrazený na obrázku nižšie:
Video nižšie ukazuje, ako sa servo motor reaguje na rôznych polohách potenciometra.
Toto je to!! Prepojili sme servomotor s mikrokontrolérom PIC, teraz môžete použiť svoju vlastnú kreativitu a vyhľadať pre to aplikácie. Existuje veľa projektov, ktoré využívajú servomotor.