- Kas yra servovariklis?
- Servo variklių sąveika su mikrovaldikliais:
- Servo variklio su PICF877A PIC mikrovaldikliu programavimas:
- Grandinės schema:
- Modeliavimas ir aparatinės įrangos sąranka:
Tai yra mūsų 11-oji PIC mikrovaldiklių mokymosi naudojant MPLAB ir XC8 pamoka. Šioje pamokoje sužinosime, kaip valdyti servo variklį su PIC mikrovaldikliu. Jei jau dirbote su „Servo“ varikliais, galite praleisti pirmąją šios instrukcijos pusę, bet jei dar nesinaudojote pačiu servovarikliu, tęskite skaitymą.
Iki šiol mes apėmėme daugybę pagrindinių pamokų, tokių kaip LED mirksi su PIC, laikmačiai PIC, sąsaja su LCD, sąsaja su 7 segmentais, ADC, naudojant PIC ir tt pradėti mokytis.
Ankstesnėje mūsų pamokoje mes sužinojome, kaip generuoti PWM signalus naudojant PIC mikrovaldiklį, signalai buvo generuojami remiantis potenciometro nuskaityta verte. Jei tada supratote visas programas, sveikiname, kad jau užkodavote ir „Servo“ variklį. TAIP, „Servo“ varikliai reaguoja į PWM signalus (kuriuos čia sukuriame naudodami laikmačius), kodėl ir kaip sužinosime, šioje pamokoje. Mes imituosime ir sukursime šio projekto aparatinės įrangos sąranką, o išsamų vaizdo įrašą rasite šios pamokos pabaigoje.
Kas yra servovariklis?
Servovariklis yra pavaros tipas (dažniausiai apskritas), leidžiantis valdyti kampu. Yra daugybė servo variklių tipų, tačiau šioje pamokoje sutelkime dėmesį į žemiau pateiktus pomėgių servo variklius.
Hobio servo servisai yra populiarūs, nes tai yra nebrangus judesio valdymo būdas. Jie suteikia nebrangų sprendimą daugumai R / C ir robotų mėgėjų poreikių. Jie taip pat nereikalauja individualiai kurti kiekvienos programos valdymo sistemos.
Daugelio pomėgių servovariklių sukamasis angelas yra 0–180 °, tačiau jei norite, galite įsigyti ir 360 ° servovariklį. Šioje pamokoje naudojamas 0–180 ° servovariklis. Pagal pavarą yra dviejų tipų „Servo“ varikliai: vienas yra „Plastic Gear Servo“ variklis, kitas - „Metal Gear Servo“ variklis. Metalinė pavara naudojama tose vietose, kur variklis yra labiau nusidėvėjęs, tačiau jis kainuoja tik brangiai.
Servo variklių reitingas yra kg / cm (kilogramas centimetrui), daugumos pomėgių servomotorių varikliai vertinami 3 kg / cm arba 6 kg / cm arba 12 kg / cm. Šis kg / cm nurodo, kokį svorį jūsų servovariklis gali pakelti tam tikru atstumu. Pavyzdžiui: 6 kg / cm servovariklis turėtų galėti pakelti 6 kg, jei krovinys pakabinamas 1 cm atstumu nuo variklio veleno, tuo didesnis atstumas, tuo mažesnė svorio keliamoji galia. Sužinokite čia apie servo variklio pagrindus.
Servo variklių sąveika su mikrovaldikliais:
Labai lengva susieti hobio servo variklius su MCU. Servo serveryje yra trys laidai. Iš kurių du bus naudojami tiekimui (teigiamas ir neigiamas), o vienas - signalui, kurį reikia siųsti iš MCU. Šioje pamokoje naudosime „ MG995 Metal Gear Servo“ variklį, kuris dažniausiai naudojamas RC automobilių humanoidiniams robotams ir kt. Paveikslėlis MG995 parodytas žemiau:
Servo variklio spalvų kodavimas gali skirtis, todėl patikrinkite atitinkamą duomenų lapą.
Visi servovarikliai veikia tiesiogiai su jūsų + 5 V maitinimo bėgiais, tačiau mes turime būti atsargūs dėl variklio sunaudojamos srovės kiekio, jei planuojate naudoti daugiau nei du servovariklius, turėtų būti suprojektuotas tinkamas servo skydas. Šioje pamokoje mes tiesiog naudosime vieną servovariklį, kad parodytume, kaip užprogramuoti mūsų PIC MCU valdyti variklį. Patikrinkite žemiau esančias nuorodas, kaip susieti servovariklį su kitu mikrovaldikliu:
- Servo variklio sąsaja su 8051 mikrovaldikliu
- Servo variklio valdymas naudojant „Arduino“
- „Raspberry Pi“ servo variklio pamoka
- Servo variklis su AVR mikrovaldikliu
Servo variklio su PICF877A PIC mikrovaldikliu programavimas:
Prieš pradėdami programuoti servovariklį, turėtume žinoti, kokio tipo signalas turi būti siunčiamas valdant servovariklį. Turėtume užprogramuoti MCU siųsti PWM signalus į servo variklio signalo laidą. Servovariklio viduje yra valdymo grandinė, nuskaitanti PWM signalo veikimo ciklą ir padedanti servovariklio veleną atitinkamoje vietoje, kaip parodyta paveikslėlyje žemiau
Kiekvienas servovariklis veikia skirtingais PWM dažniais (dažniausiai dažnis yra 50 Hz, kuris naudojamas šioje instrukcijoje), todėl gaukite savo variklio duomenų lapą, kad patikrintumėte, kuriuo PWM laikotarpiu veikia jūsų servo variklis.
Išsami informacija apie mūsų „Tower pro MG995“ PWM signalą pateikiama žemiau.
Iš to galime daryti išvadą, kad mūsų variklis veikia esant 20ms (50Hz) PWM periodui. Taigi mūsų PWM signalo dažnis turėtų būti nustatytas į 50Hz. PWM, kurį nustatėme ankstesnėje mokymo programoje, dažnis buvo 5 KHz, to paties naudojimas čia mums nepadės.
Bet mes čia turime problemų. PIC16F877A negali generuoti žemo dažnio PWM signalus per pagrindinę sandorio šalį apie modulį. Pagal duomenų lapą mažiausia galima PWM dažnio vertė yra 1,2 KHz. Taigi turime atsisakyti idėjos naudoti CCP modulį ir rasti būdą, kaip sukurti savo PWM signalus.
Taigi šioje pamokoje mes naudosime laikmačio modulį PWM signalams generuoti 50Hz dažniu ir keisime jų darbo ciklą valdydami servovariklio angelą. Jei dar nesinaudojote laikmačiais ar ADC su PIC, grįžkite į šią pamoką, nes aš praleisiu didžiąją dalį dalykų, nes mes juos jau apžvelgėme.
Inicijuojame savo laikmačio modulį su 32 preskaleriu ir padarome jį perpildytą kiekvienam 1us. Pagal mūsų duomenų lapą PWM laikotarpis turėtų būti tik 20ms. Taigi mūsų laiko ir išjungimo laikas kartu turėtų būti lygus 20ms.
PASIRINKIMAS_REG = 0b00000100; // Laikmatis0 su išoriniu dažniu ir 32 kaip išankstinis skaleris TMR0 = 251; // Įkelkite laiko reikšmę 1us delayValue gali būti nuo 0 iki 255 tik TMR0IE = 1; // Įjungti laikmačio pertraukimo bitą PIE1 registre GIE = 1; // Įgalinti visuotinį pertraukimą PEIE = 1; // Įgalinti periferinį pertraukimą
Taigi, pertraukdami įprastinę funkciją, nurodytam laikui įjungiame kaištį RB0 ir išjungiame jį veikimo laikui (20ms - on_time). Įjungimo laiko vertę galima nurodyti naudojant potenciometrą ir ADC modulį. Pertraukimas parodytas žemiau.
oid pertraukimo laikmatis_isr () {if (TMR0IF == 1) // Laikmatis perlėkė {TMR0 = 252; / * Įkelkite laikmačio reikšmę, (Pastaba: Laiko vertė yra 101 įvedama iš 100, nes „TImer0“ reikia dviejų nurodymų ciklų, kad būtų galima didinti TMR0 * / TMR0IF = 0; // Išvalyti laikmačio pertraukimo žymos skaičių ++;} if (skaičius> = įjungimo laikas) { RB0 = 1; // papildykite šviesos diodų mirksėjimo vertę} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Viduje mūsų , o kilpa mes tiesiog skaityti potenciometru vertę naudojant ADC modulį ir atnaujinti laiku iš PWM naudojant skaitymo vertę.
o (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Tokiu būdu mes sukūrėme PWM signalą, kurio laikotarpis yra 20 ms ir turi kintamą darbo ciklą, kurį galima nustatyti naudojant potenciometrą. Pilnas kodas buvo pateiktas žemiau kodo skyriuje.
Dabar patikrinkime išvestį naudodami proteus modeliavimą ir pereikime prie mūsų aparatūros.
Grandinės schema:
Jei jau susidūrėte su PWM mokymo programa, šios pamokos schemos bus vienodos, išskyrus tai, kad vietoje LED šviesos pridėsime servovariklį.
Modeliavimas ir aparatinės įrangos sąranka:
„Proteus“ modeliavimo pagalba mes galime patikrinti PWM signalą osciloskopu, taip pat patikrinti besisukantį „Servo“ variklio angelą. Žemiau parodyta keletas modeliavimo momentinių nuotraukų, kuriose galima pastebėti, kad pagal potenciometrą keičiasi servovariklio ir PWM darbo ciklo besisukantis angelas. Pabaigoje dar patikrinkite visą vaizdo įrašą apie sukimąsi skirtingu PWM.
Kaip matome, servo sukimosi angelas pasikeičia, atsižvelgiant į potenciometro vertę. Dabar pereikime prie aparatinės įrangos sąrankos.
Aparatinės įrangos sąrankoje mes ką tik pašalinome LED plokštę ir pridėjome „Servo“ variklį, kaip parodyta aukščiau pateiktose schemose.
Aparatūra parodyta paveikslėlyje žemiau:
Žemiau pateiktame vaizdo įraše parodyta, kaip servovariklis reaguoja į įvairias potenciometro padėtis.
Viskas!! Mes sujungėme servo variklį su PIC mikrovaldikliu, dabar galite naudoti savo kūrybiškumą ir sužinoti tam pritaikytas programas. Yra daugybė projektų, kuriuose naudojamas servovariklis.