- Ano ang Servo Motor?
- Ang interfacing Servo Motors ay may Microcontrollers:
- Programming Servo Motor na may PICF877A PIC Microcontroller:
- Diagram ng Circuit:
- Pag-setup ng Simulation at Hardware:
Ito ang aming ika-11 tutorial ng Pag- aaral ng mga microcontroller ng PIC gamit ang MPLAB at XC8. Sa tutorial na ito matututunan natin Kung paano makontrol ang Servo Motor sa PIC Microcontroller. Kung nagtrabaho ka na sa mga motor ng Servo maaari mong laktawan ang unang kalahati ng tutorial na ito ngunit kung bago ka sa servo motor mismo pagkatapos ay ipagpatuloy ang pagbabasa.
Hanggang ngayon, natakpan namin ang maraming pangunahing mga tutorial tulad ng LED na kumikislap sa PIC, timer sa PIC, interfacing LCD, interfacing 7-segment, ADC gamit ang PIC atbp Kung ikaw ay isang ganap na nagsisimula, pagkatapos ay mangyaring bisitahin ang kumpletong listahan ng mga tutorial sa PIC dito at simulang matuto.
Sa aming nakaraang tutorial natutunan namin kung paano bumuo ng mga signal ng PWM gamit ang PIC Microcontroller, ang mga signal ay nabuo batay sa halagang binasa mula sa potensyomiter. Kung naintindihan mo ang lahat ng mga programa pagkatapos, Binabati kita na naka-code din para sa isang Servo motor din. Oo, ang mga motor ng Servo ay tumutugon sa mga signal ng PWM (na nilikha namin gamit ang mga timer dito) matututunan namin kung bakit at paano sa tutorial na ito. Kami ay gayahin at itatayo ang pag-setup ng hardware para sa proyektong ito at mahahanap mo ang detalyadong Video sa pagtatapos ng Tutorial na ito.
Ano ang Servo Motor?
Ang Servo Motor ay isang uri ng actuator (karamihan ay pabilog) na nagbibigay-daan sa control ng angular. Maraming uri ng mga motor na Servo ang magagamit ngunit sa tutorial na ito ipaalam sa amin na tumutok sa mga libangan na servo motor na ipinakita sa ibaba.
Ang mga libangan na servo ay isang tanyag dahil ang mga ito ay hindi magastos na pamamaraan ng paggalaw ng paggalaw. Nagbibigay ang mga ito ng isang solusyon sa labas ng istante para sa karamihan ng mga R / C at mga pangangailangan ng robotic hobbyist. Tinatanggal din nila ang pangangailangan sa pasadyang disenyo ng isang control system para sa bawat aplikasyon.
Karamihan sa mga hobby servo motor ay mayroong isang paikot na anghel na 0- 180 ° ngunit maaari ka ring makakuha ng 360 ° servo motor kung interesado ka. Ang tutorial na ito ay gumagamit ng isang 0- 180 ° servo motor. Mayroong dalawang uri ng mga motor ng Servo batay sa gear, ang isa ay ang Plastic Gear Servo Motor at ang isa ay Metal Gear Servo Motor. Ginagamit ang metal gear sa mga lugar kung saan ang motor ay napapailalim sa higit na pagkasira, ngunit ito ay nagmumula lamang sa isang mataas na presyo.
Ang mga motor ng servo ay na-rate sa kg / cm (kilo bawat sentimeter) ang karamihan sa mga libangan na servo motor ay na-rate sa 3kg / cm o 6kg / cm o 12kg / cm. Sinasabi sa iyo ng kg / cm na ito kung magkano ang timbang na maaaring maiangat ng iyong servo motor sa isang partikular na distansya. Halimbawa: Ang isang 6kg / cm na Servo motor ay dapat na mag-angat ng 6kg kung ang pagkarga ay nasuspinde ng 1cm ang layo mula sa motor shaft, mas malaki ang distansya mas mababa ang kapasidad sa pagdadala ng timbang. Alamin dito ang Mga Pangunahing Kaalaman ng motor ng Servo.
Ang interfacing Servo Motors ay may Microcontrollers:
Ang interfacing hobby na Servo motors na may MCU ay napakadali. Ang mga servos ay may tatlong mga wire na lumalabas sa kanila. Sa kung aling dalawa ang gagamitin para sa Supply (positibo at negatibo) at isa ang gagamitin para sa signal na ipapadala mula sa MCU. Sa tutorial na ito gagamit kami ng isang MG995 Metal Gear Servo Motor na karaniwang ginagamit para sa mga RC car humanoid bots atbp Ang larawan ng MG995 ay ipinapakita sa ibaba:
Ang pag-coding ng kulay ng iyong servo motor ay maaaring magkakaiba kaya suriin para sa iyong kani-kanilang datasheet.
Ang lahat ng mga motor na servo ay gumagana nang direkta sa iyong mga riles ng supply ng + 5V ngunit kailangan naming mag-ingat sa dami ng kasalukuyang gugugol ng motor, kung nagpaplano kang gumamit ng higit sa dalawang servo motor na dapat idisenyo ng wastong servo Shield. Sa tutorial na ito gagamitin lamang namin ang isang servo motor upang maipakita kung paano iprogram ang aming PIC MCU upang makontrol ang motor. Suriin sa ibaba ang mga link para sa interfacing Servo Motor sa iba pang Microcontroller:
- Ang pagsalakay ng motor na Servo sa 8051 microcontroller
- Pagkontrol ng motor ng Servo gamit ang Arduino
- Tutorial sa Raspberry Pi Servo Motor
- Servo Motor na may AVR Microcontroller
Programming Servo Motor na may PICF877A PIC Microcontroller:
Bago namin masimulan ang pag-program para sa motor ng Servo dapat nating malaman kung anong uri ng signal ang ipapadala para sa pagkontrol sa motor ng Servo. Dapat nating iprogram ang MCU upang magpadala ng mga signal ng PWM sa signal wire ng motor ng Servo. Mayroong isang control circuitry sa loob ng servo motor na binabasa ang cycle ng tungkulin ng signal ng PWM at pinoposisyon ang servo motors shaft sa kani-kanilang lugar tulad ng ipinakita sa larawan sa ibaba
Ang bawat servo motor ay nagpapatakbo ng iba't ibang mga frequency ng PWM (ang pinakakaraniwang dalas ay 50HZ na ginagamit sa tutorial na ito) kaya kunin ang datasheet ng iyong motor upang suriin kung aling PWM na panahon ang gumagana ng iyong Servo motor.
Ang mga detalye sa signal ng PWM para sa aming Tower pro MG995 ay ipinapakita sa ibaba.
Mula dito maaari nating tapusin na ang aming motor ay gumagana sa isang PWM na Panahon ng 20ms (50Hz). Kaya't ang dalas ng aming PWM signal ay dapat itakda sa 50Hz. Ang dalas ng PWM na itinakda namin sa aming nakaraang tutorial ay 5 KHz, ang paggamit ng pareho ay hindi makakatulong sa amin dito.
Ngunit, mayroon kaming problema dito. Ang PIC16F877A ay hindi maaaring makabuo ng mababang dalas ng mga signal ng PWM gamit ang module ng CCP. Ayon sa datasheet ang pinakamababang posibleng halaga na maitatakda para sa dalas ng PWM ay 1.2 KHz. Kaya kailangan nating i-drop ang ideya ng paggamit ng module ng CCP at maghanap ng isang paraan upang makagawa ng aming sariling mga signal ng PWM.
Samakatuwid, sa tutorial na ito gagamitin namin ang module ng timer upang makabuo ng mga signal ng PWM na may 50Hz dalas at iiba-iba ang kanilang cycle ng tungkulin upang makontrol ang anghel ng servo motor. Kung bago ka sa mga timer o ADC na may PIC mangyaring bumalik sa tutorial na ito, dahil lalaktawan ko ang karamihan sa mga bagay dahil nasakop na namin ang mga ito doon.
Pinasimulan namin ang aming module ng Timer na may prescaler na 32 at ginagawa itong overflow para sa bawat 1us. Ayon sa aming sheet ng data ang PWM ay dapat magkaroon ng isang panahon ng 20ms lamang. Kaya't ang aming oras at oras ng pag-off ay magkakasama dapat na eksaktong katumbas ng 20ms.
OPTION_REG = 0b00000100; // Timer0 na may panlabas na freq at 32 bilang prescaler TMR0 = 251; // Load ang halaga ng oras para sa 1us pagkaantalaValue ay maaaring nasa pagitan ng 0-256 lamang TMR0IE = 1; // Paganahin ang timer makagambala nang kaunti sa PIE1 rehistro GIE = 1; // Enable Global Interrupt PEIE = 1; // Paganahin ang Peripheral Interrupt
Kaya sa loob ng aming nakakagambalang pagpapaandar na gawain, binuksan namin ang pin RB0 para sa tinukoy na oras at patayin ito para sa reaming oras (20ms - on_time). Ang halaga ng on time ay maaaring tukuyin sa pamamagitan ng paggamit ng Potentiometer at ADC module. Ang pagkagambala ay ipinapakita sa ibaba.
oid makagambala timer_isr () {kung (TMR0IF == 1) // Umapaw ang timer {TMR0 = 252; / * I-load ang timer na Halaga, (Tandaan: Ang Timervalue ay 101 na instaed ng 100 habang ang TImer0 ay nangangailangan ng dalawang mga cycle ng tagubilin upang simulang dagdagan ang TMR0 * / TMR0IF = 0; // I-clear ang timer na makagambala sa bilang ng watawat ++;} kung (count> = on_time) { RB0 = 1; // umakma sa halaga para sa pagpikit ng mga LED} kung (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Sa loob ng aming habang loop binasa lamang namin ang halaga ng potentiometer sa pamamagitan ng paggamit ng module ng ADC at i-update ang oras ng PWM gamit ang binasang halaga.
habang (1) {pot_value = (ADC_Read (4)) * 0.039; on_time = (170-pot_value); }
Sa ganitong paraan lumikha kami ng isang senyas ng PWM kung sino ang Panahon na 20ms at may isang variable na cycle ng tungkulin na maaaring maitakda gamit ang isang Potentiometer. Ang kumpletong Code ay ibinigay sa ibaba sa seksyon ng code.
Ngayon, i-verify natin ang output gamit ang proteus simulation at magpatuloy sa aming hardware.
Diagram ng Circuit:
Kung naranasan mo na ang tutorial na PWM pagkatapos ay ang mga iskema ng tutorial na ito ay magiging pareho maliban kung saan kami ay magdaragdag ng isang motor na servo kapalit ng ilaw na LED.
Pag-setup ng Simulation at Hardware:
Sa tulong ng Proteus simulation maaari naming mapatunayan ang signal ng PWM gamit ang isang oscilloscope at suriin din ang umiikot na anghel ng motor ng Servo. Ilang snapshot ng simulation ang ipinakita sa ibaba, kung saan mapapansin ang umiikot na anghel ng servo motor at PWM duty cycle na mabago batay sa potensyomiter. Karagdagang suriin ang Buong Video, ng pag-ikot sa iba't ibang PWM, sa dulo.
Tulad ng nakikita natin ang servo rotation angel ay nabago batay sa halaga ng potensyomiter. Ngayon ay magpatuloy tayo sa aming pag-setup ng hardware.
Sa pag-setup ng hardware natanggal lamang namin ang LED board at idinagdag ang Servo motor tulad ng ipinakita sa mga eskematiko sa itaas.
Ang hardware ay ipinapakita sa larawan sa ibaba:
Ipinapakita ng video sa ibaba kung paano tumugon ang servo motor sa iba't ibang mga posisyon ng potensyomiter.
Iyan na iyon!! Nag- interfaced kami ng isang servo motor na may isang PIC Microcontroller, maaari mo nang magamit ang iyong sariling pagkamalikhain at alamin ang mga application para dito. Maraming mga proyekto doon na gumagamit ng isang motor na pang-motor.