- Kas ir servomotors?
- Servomotoru un mikrokontrolleru saskarne:
- Servomotora programmēšana ar PICF877A PIC mikrokontrolleru:
- Ķēdes shēma:
- Simulācija un aparatūras iestatīšana:
Šī ir mūsu 11. apmācība par PIC mikrokontrolleru apgūšanu, izmantojot MPLAB un XC8. Šajā apmācībā mēs uzzināsim, kā vadīt servomotoru ar PIC mikrokontrolleru. Ja jūs jau esat strādājis ar servomotoriem, varat izlaist šīs apmācības pirmo pusi, bet, ja jūs pats esat jauns servomotors, turpiniet lasīt.
Līdz šim mēs esam apskatījuši daudzas pamata apmācības, piemēram, gaismas diode mirgo ar PIC, taimeri PIC, saskarnes LCD, saskarnes 7 segmenti, ADC, izmantojot PIC utt. Ja esat absolūti iesācējs, lūdzu, apmeklējiet pilnu PIC apmācību sarakstu šeit un sākt mācīties.
Mūsu iepriekšējā apmācībā mēs uzzinājām, kā ģenerēt PWM signālus, izmantojot PIC mikrokontrolleru, signāli tika ģenerēti, pamatojoties uz vērtību, kas nolasīta no potenciometra. Ja esat sapratis visas programmas, tad apsveicam, ka esat arī kodējis servomotoru. JĀ, servomotori reaģē uz PWM signāliem (kurus mēs šeit izveidojam, izmantojot taimerus), mēs uzzināsim, kāpēc un kā šajā apmācībā. Mēs imitēsim un izveidosim aparatūras iestatījumus šim projektam, un detalizētu videoklipu varat atrast šīs apmācības beigās.
Kas ir servomotors?
Servomotors ir tāda veida izpildmehānisms (galvenokārt apļveida), kas ļauj kontrolēt leņķi. Ir pieejami daudzi servomotoru veidi, taču šajā apmācībā koncentrēsimies uz hobija servomotoriem, kas parādīti zemāk.
Hobiju servo ir populāri, jo tie ir lēta kustības vadības metode. Tie nodrošina nepieejamu risinājumu lielākajai daļai R / C un robotu hobija vajadzībām. Tie arī novērš nepieciešamību pielāgot vadības sistēmu katram lietojumam.
Lielākajai daļai hobija servomotoru rotācijas eņģelis ir 0–180 °, bet, ja jūs interesē, varat arī iegūt 360 ° servomotoru. Šajā apmācībā tiek izmantots servomotors 0–180 °. Pamatojoties uz pārnesumu, ir divu veidu servomotori, no kuriem viens ir plastmasas pārnesumu servomotors un otrs ir metāla pārnesumu servomotors. Metāla zobratu izmanto vietās, kur motors ir vairāk nolietots, taču tam ir tikai augsta cena.
Servomotoru vērtējums ir kg / cm (kilograms uz centimetru). Lielākā daļa hobija servomotoru ir novērtēti ar 3kg / cm vai 6kg / cm vai 12kg / cm. Šis kg / cm norāda, cik lielu svaru jūsu servomotors var pacelt noteiktā attālumā. Piemēram: 6 kg / cm servomotoram jāspēj pacelt 6 kg, ja krava ir piekārta 1 cm attālumā no motora vārpstas, jo lielāks attālums, jo mazāka ir svara nestspēja. Uzziniet šeit Servo motora pamatus.
Servomotoru un mikrokontrolleru saskarne:
Hobiju servomotoru un MCU mijiedarbība ir ļoti vienkārša. Servos no tiem iziet trīs vadi. No kuriem divi tiks izmantoti apgādei (pozitīvs un negatīvs), un viens tiks izmantots signālam, kas jānosūta no MCU. Šajā apmācībā mēs izmantosim MG995 metāla pārnesumu servomotoru, ko visbiežāk izmanto RC automobiļu humanoīdajiem robotprogrammatūras robotiem utt. MG995 attēls ir parādīts zemāk:
Servomotora krāsu kodēšana var atšķirties, tāpēc pārbaudiet attiecīgo datu lapu.
Visi servomotori darbojas tieši ar jūsu + 5V barošanas sliedēm, taču mums jābūt piesardzīgiem attiecībā uz strāvas daudzumu, ko motors patērētu, ja plānojat izmantot vairāk nekā divus servomotorus, jāprojektē pareizs servo aizsargs. Šajā apmācībā mēs vienkārši izmantosim vienu servomotoru, lai parādītu, kā programmēt mūsu PIC MCU motora vadībai. Pārbaudiet zemāk esošās saites, vai servomotors mijiedarbojas ar citu mikrokontrolleru:
- Servomotora saskarne ar 8051 mikrokontrolleru
- Servomotora vadība, izmantojot Arduino
- Raspberry Pi servomotora apmācība
- Servomotors ar AVR mikrokontrolleru
Servomotora programmēšana ar PICF877A PIC mikrokontrolleru:
Pirms varam sākt programmēt servomotoru, mums jāzina, kāda veida signāls jāsūta servomotora vadībai. Mums vajadzētu ieprogrammēt MCU sūtīt PWM signālus uz servomotora signāla vadu. Servomotora iekšpusē ir vadības shēma, kas nolasa PWM signāla darba ciklu un pozicionē servomotora vārpstu attiecīgajā vietā, kā parādīts attēlā zemāk
Katrs servomotors darbojas ar dažādām PWM frekvencēm (visbiežāk sastopamā frekvence ir 50 Hz, kas tiek izmantota šajā apmācībā), tāpēc iegūstiet sava motora datu lapu, lai pārbaudītu, kurā PWM periodā darbojas jūsu servomotors.
Sīkāka informācija par mūsu Tower pro MG995 PWM signālu ir parādīta zemāk.
No tā mēs varam secināt, ka mūsu motors darbojas ar PWM periodu 20ms (50Hz). Tātad mūsu PWM signāla frekvencei jābūt iestatītai uz 50Hz. PWM frekvence, kuru mēs iestatījām iepriekšējā apmācībā, bija 5 KHz, tās pašas izmantošana mums šeit nepalīdzēs.
Bet mums šeit ir problēma. PIC16F877A nevar radīt zemas frekvences PWM signālus, izmantojot ĶKP moduli. Saskaņā ar datu lapu zemākā iespējamā vērtība, ko var iestatīt PWM frekvencei, ir 1,2 KHz. Tāpēc mums ir jāatsakās no domas par CCP moduļa izmantošanu un jāatrod veids, kā izveidot savus PWM signālus.
Tādējādi šajā apmācībā mēs izmantosim taimera moduli, lai ģenerētu PWM signālus ar 50Hz frekvenci un mainītu to darba ciklu, lai kontrolētu servomotora eņģeli. Ja jūs esat jauns taimeri vai ADC ar PIC, lūdzu, atgriezieties pie šīs apmācības, jo es izlaidīšu lielāko daļu lietu, jo mēs jau esam tos tur apskatījuši.
Mēs inicializējam mūsu taimera moduli ar 32 preskaleriem un padarām to pārpildītu katram 1us. Saskaņā ar mūsu datu lapu PWM periodam jābūt tikai 20 ms. Tāpēc mūsu ieslēgtajam un izslēgtajam laikam jābūt vienādam ar 20 ms.
OPTION_REG = 0b00000100; // taimeris0 ar ārējo frekvenci un 32 kā preskaleru TMR0 = 251; // Ielādēt laika vērtību 1us delayValue var būt no 0 līdz 256 tikai TMR0IE = 1; // Iespējot taimera pārtraukuma bitu PIE1 reģistrā GIE = 1; // Iespējot globālo pārtraukumu PEIE = 1; // Iespējot perifēro traucējumu
Tāpēc iekšpusē mūsu pārtraukuma rutīnas funkcija, mēs ieslēdzam tapu RB0 uz norādīto laiku un izslēdzam to reamēšanas laikam (20ms - on_time). Ieslēgšanas laika vērtību var norādīt, izmantojot potenciometru un ADC moduli. Pārtraukums ir parādīts zemāk.
oid break timer_isr () {if (TMR0IF == 1) // Taimeris ir pārlidojis {TMR0 = 252; / * Ielādējiet taimera vērtību, (Piezīme: Timervalue ir 101, ievadot 100, jo TImer0 ir nepieciešami divi instrukciju cikli, lai sāktu palielināt TMR0 * / TMR0IF = 0; // Notīrīt taimera pārtraukuma karodziņu skaitu ++;} if (count> = on_time) { RB0 = 1; // papildina LED mirgošanas vērtību}, ja (skaits> = (ieslēgšanas laiks + (200 ieslēgšanas laiks))) {RB0 = 0; skaits = 0;}}
Inside mūsu kamēr cilpas mēs vienkārši lasīt vērtību potenciometru, izmantojot ADC moduli un atjaunināt uz laiku no PWM izmantojot lasīšanas vērtību.
kamēr (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170 pot_value); }
Tādā veidā mēs esam izveidojuši PWM signālu, kura periods ir 20 ms, un tam ir mainīgs darba cikls, kuru var iestatīt, izmantojot potenciometru. Pilns kods ir norādīts zemāk koda sadaļā.
Tagad pārbaudīsim izvadi, izmantojot proteus simulāciju, un pārejiet pie mūsu aparatūras.
Ķēdes shēma:
Ja jūs jau esat saskāries ar PWM apmācību, šīs apmācības shēmas būs vienādas, izņemot to, ka LED gaismas vietā mēs pievienosim servomotoru.
Simulācija un aparatūras iestatīšana:
Ar Proteus simulācijas palīdzību mēs varam pārbaudīt PWM signālu, izmantojot osciloskopu, kā arī pārbaudīt Servo motora rotējošo eņģeli. Zemāk ir parādīti daži simulācijas momentuzņēmumi, kur servomotora un PWM darba cikla rotējošo eņģeli var pamanīt, lai mainītos, pamatojoties uz potenciometru. Turpmāk beigās pārbaudiet pilnu video ar rotāciju pie cita PWM.
Kā redzam, servo rotācijas eņģelis mainās, pamatojoties uz potenciometra vērtību. Tagad turpināsim mūsu aparatūras iestatīšanu.
Aparatūras iestatījumos mēs tikko noņemām LED dēli un pievienojām Servo motoru, kā parādīts iepriekš shēmās.
Aparatūra ir parādīta attēlā zemāk:
Zemāk esošajā video redzams, kā servomotors reaģē uz potenciometra dažādajām pozīcijām.
Tas ir viss!! Servomotoru esam sasaistījuši ar PIC mikrokontrolleru, tagad jūs varat izmantot savu radošumu un uzzināt tam lietojumprogrammas. Ir daudz projektu, kas izmanto servomotoru.