- Kinakailangan ang Mga Bahagi
- Paglalarawan ng Pin ng Servo Motor
- Diagram ng Circuit
- Pagkontrol sa Servo Motor na may AVR ATmega16
- Programming Atmega16 Paggamit ng USBasp
Ang Servo Motors ay malawakang ginagamit kung saan ang tumpak na kontrol ay kinakailangan tulad ng mga robot, Automated Machineries, robotic arm atbp Gayunpaman, ang saklaw ng motor na servo ay hindi limitado sa gaanong ito at maaaring magamit sa maraming mga application. Upang malaman ang higit pa tungkol sa mga pangunahing kaalaman, teorya at prinsipyo ng pagtatrabaho ng servo motor sundin ang link.
Dati ay nakipag-ugnay kami sa Servo Motor sa maraming mga Microcontroller:
- Pag-interface ng Servo Motor na may ARM7-LPC2148
- Pag-interface ng Servo Motor sa MSP430G2
- Pag-interface ng Servo Motor na may STM32F103C8
- Ang interface ng Servo Motor na may PIC Microcontroller gamit ang MPLAB at XC8
- Ang interfacing Servo Motor kay Arduino Uno
- Servo Motor Interfacing kasama ang 8051 Microcontroller
Sa tutorial na ito, makikipag-ugnay kami sa Micro Servo Motor sa Atmega16 AVR Microcontroller gamit ang Atmel Studio 7.0. Ang servo motor ay na-rate upang gumana sa 4.8-6V. Maaari naming makontrol ang anggulo ng pag-ikot at direksyon nito sa pamamagitan ng paglalapat ng pulse train o mga signal ng PWM. Tandaan na ang mga motor na servo ay hindi maaaring ilipat para sa buong pag-ikot ng 360 degree, kaya ginagamit ang mga ito kung saan hindi kinakailangan ang patuloy na pag-ikot. Ang anggulo ng pag-ikot ay 0 -180 degree o (-90) - (+90) degree.
Kinakailangan ang Mga Bahagi
- SG90 Tower Pro Micro Servo Motor
- Atmega16 Microcontroller IC
- 16Mhz Crystal Oscillator
- Dalawang 100nF Capacitor
- Dalawang 22pF Capacitor
- Push Button
- Jumper Wires
- Breadboard
- USBASP v2.0
- Led (Anumang Kulay)
Paglalarawan ng Pin ng Servo Motor
- Pula = Positive Power Supply (4.8V hanggang 6V)
- Kayumanggi = Lupa
- Orange = Control Signal (PWM Pin)
Diagram ng Circuit
Ikonekta ang lahat ng mga sangkap tulad ng ipinakita sa diagram sa ibaba upang paikutin ang Servo motor gamit ang AVR Microcontroller. Mayroong apat na PWM Pins, maaari naming gamitin ang anumang PWM na pin ng Atmega16. Sa tutorial na ito ginagamit namin ang Pin PD5 (OC1A) para sa pagbuo ng PWM. Ang PD5 ay direktang konektado sa orange wire ng servo motor na kung saan ay input signal pin. Ikonekta ang anumang kulay na humantong para sa tagapagpahiwatig ng kuryente. Gayundin, ikonekta ang isang pindutan ng push sa I-reset ang pin para sa pag-reset ng Atmega16 kahit kailan kinakailangan. Ikonekta ang Atmega16 na may wastong kristal oscillator circuit. Ang lahat ng mga sistema ay pinalakas ng 5V supply.
Ang kumpletong pag-setup ay magiging hitsura sa ibaba:
Pagkontrol sa Servo Motor na may AVR ATmega16
Tulad ng Stepper Motor, ang Servo motor ay hindi nangangailangan ng anumang panlabas na driver hal. ULN2003 o L293D motor driver. Ang PWM lamang ay sapat na upang himukin ang servo motor at napakadali upang makabuo ng PWM mula sa isang microcontroller. Ang metalikang kuwintas ng servo motor na ito ay 2.5kg / cm, kaya kung mangangailangan ka ng mas malaking metalikang kuwintas pagkatapos ay hindi angkop ang servo na ito.
Tulad ng alam namin na ang servo motor ay naghahanap ng isang pulso bawat 20ms at ang haba ng positibong pulso ay matutukoy ang anggulo ng pag-ikot ng motor na servo.
Ang dalas na kinakailangan upang makuha ang pulso na 20ms ay 50Hz (f = 1 / T). Kaya para sa servo motor na ito, sinasabi ng detalye na para sa 0 degree kailangan namin ng 0.388ms, para sa 90 degree na kailangan namin ng 1.264ms at para sa 180 degree na kailangan namin ng 2.14ms pulse.
Upang makabuo ng tinukoy na mga pulso gagamitin namin ang Timer1 ng Atmega16. Ang dalas ng CPU ay 16Mz ngunit gagamitin lamang namin ang 1Mhz dahil wala kaming maraming mga peripheral na nakakonekta sa microcontroller at walang gaanong pagkarga sa microcontroller, kaya't gagawin ng 1Mhz ang trabaho. Ang Prescaler ay nakatakda sa 1. Kaya't ang orasan ay nahahati sa bilang 1Mhz / 1 = 1Mhz (1uS) na mahusay. Gagamitin ang Timer1 bilang Mabilis na PWM Mode ie Mode 14. Maaari kang gumamit ng iba't ibang mga mode ng timer upang makabuo ng nais na tren ng pulso. Ang sanggunian ay ibinigay sa ibaba at makakahanap ka ng higit pang paglalarawan sa Opisyal na Datasheet ng Atmega16.
Upang magamit ang Timer1 bilang mabilis na mode ng PWM kakailanganin namin ang TOP na halaga ng ICR1 (Input Capture Register1). Upang hanapin ang TOP na paggamit ng formula na ibinigay sa ibaba:
f pwm = f cpu / nx (1 + TOP)
Maaari itong gawing simple
TOP = ( f cpu / ( f pwm xn)) - 1
Kung saan, N = Halaga ng itinakdang Prescaler
f cpu = CPU Frequencey
f pwm = Servo motor pulse width na 50Hz
Kalkulahin ngayon ang halaga ng ICR1 dahil kailangan namin ang lahat ng halaga, N = 1, f cpu = 1MHz, f pwm = 50Hz
Ilagay lamang ang mga halaga sa pormula sa itaas at makukuha namin
ICR1 = 1999
Nangangahulugan ito upang makamit ang maximum na degree ie 180 0 ang ICR1 ay dapat na 1999.
Para sa 16MHz na kristal at Prescaler na nakatakda sa 16, magkakaroon kami
ICR1 = 4999
Ngayon magpatuloy tayo upang talakayin ang sketch.
Programming Atmega16 Paggamit ng USBasp
Ang kumpletong AVR code para sa pagkontrol sa Servo Motor ay ibinibigay sa ibaba. Ang code ay simple at madaling maunawaan.
Narito na naka-code ang Atmega16 upang paikutin ang servo motor mula 0 0 hanggang 180 0 at babalik muli mula 180 0 hanggang 0 0. Ang paglipat na ito ay makukumpleto Sa 9 na hakbang ie 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Para sa pagkaantala, gagamitin namin ang panloob na silid-aklatan ng Atmel Studio ie
Ikonekta ang iyong USBASP v2.0 at sundin ang mga tagubilin sa link na ito sa programa ng Atmega16 AVR Microcontroller gamit ang USBASP at Atmel Studio 7.0. Buuin lamang ang sketch at i-upload gamit ang panlabas na toolchain.
Ang kumpletong code na may Demonstration Video ay ibinibigay sa ibaba. Alamin din ang tungkol sa servo motors sa pamamagitan ng pag-alam sa kanilang kahalagahan sa Robotics.