T.C. BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ RC SERVO MOTOR KONTROLÜ İBRAHİM ALİ METİN BİLECİK 30 Mart 2015
T.C. BİLECİK ŞEYH EDEBALİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ RC SERVO MOTOR KONTROLÜ İBRAHİM ALİ METİN BİLECİK 30 Mart 2015
ÖZET Ödevin Amacı Bu projemizde, FPGA kiti ile 1 adet PWM modul tasarlayacağız. PWM modülümüzü, RC Servo motor sürmek için kullanacağız. RC Servo motorlar model hobide kullanılan motorlardır.rc (radio Control) Hobi 2 yıldır ilgilendiğim birçok model kullandığım tavsiye edebileceğim çok güzel bir uğraştır. Ödevin Kapsamı Projem FPGA kitinde pwm modülü oluşumunu, kendi içinde üretilen clock sinyalinin motorun hareketinde kullanımı hakkında ki genel yapıyı içermektedir. Sonuçlar Sonuç olarak FPGA kitimize bağlı olan servo motorlarımız belirli bir açı süpürmektedir. ii
ABSTRACT Homework Objective In this project, one with FPGA device we designed PWM module. Our PWM module, we will use the RC servo motor to drive. Scope of Homework My project FPGA device formation PWM module contains general structure on the use of clock signals generated by the movement of the engine itself. Results In conclusion, our servo motor connected to the FPGA device sweeps a certain angle. iii
İçindekiler ÖZET ABSTRACT ŞEKİL LİSTESİ ii iii v 1 RC SERVO MOTOR 1 1.1 Servo Motorun Özellikleri......................... 2 2 VHDL ile SERVO MOTOR KONTROLÜ 3 3 ALTERA ile RC SERVO BAĞLANTILARIM 6 4 DENEYSEL SONUÇLAR 7 5 EKLER 8 5.1 RC Servo Motor Kontrol Kodlarım..................... 8 5.1.1 pwmtop.vhd............................. 8 5.1.2 clk64khz.vhd............................ 8 5.1.3 pwm.vhd.............................. 9 6 KAYNAKLAR 11 iv
Şekil Listesi 1 Servo Motor................................. 1 2 PWM Modülü................................ 1 3 Servo Motor Açısal Pozisyonu....................... 2 4 Vhdl Ana Ekranımız............................ 3 5 Vhdl Clock Sinyali............................. 4 6 Vhdl Pwm Üretici.............................. 4 7 Pin Planer.................................. 5 8 Servo Motor Bağlantıları.......................... 6 9 Vcc, GND ve PWM bağlantısı....................... 6 v
1 RC SERVO MOTOR R/C Servo Motor dediğimiz şey dc akımla çalışan ve istenilen açı aralığında dönen motorardır. R/C, Radio Controlled anlamına gelir. Servco motorlar DC Motorların temel mantığını kullanırlar. Fakat buna karşın elektronik pozisyon kontrol devresi ve elektronik şaft gibi ekstra bileşenleri vardır. Servo motor şaftın kaç derece ve hangi hızda döndüğünü algılar ve girişe bunu geri besleme olarak verir. Motorun pozisyonunu algılamak için rotora takılı bir potansiyometre bulunur. Bu potansiyometreden gelen analog değer ile inputtaki sinyal karşılaştırılır ve output olarak motorun yeni pozisyonu kontrol edilir.[1] Şekil 1: Servo Motor R/C servo motorun pozisyonunu kontrol etmek için PWM sinyali kullanılır. Motoru un inputuna gelen PWM sinyalinin görev çevrimine(duty cycle) göre motor, pozisyon değiştirir. R/C Servo Motorlarda pozisyon açısal derece esasına göre kontrol edilir. Pozisyon kontrol devresi PWM sinyalinin görev çevrimine göre döneceği dereceyi hesaplar. PWM sinyalinin çevrim süresi aynı kaldığı müddetçe motor pozisyon değiştirmez. Şekil 2: PWM Modülü 1
Yalnız önemli olan nokta şudur ki; servo motorda dönmenin gerçekleşebilmesi için PWM siyalinin frekansı 50 Hz olmalıdır. Yani kontrol sinyalinin periodu 20 ms olmalıdır. 0 ve 180 derece arasındaki pozisyonlar PWM sinyalinin görev çevrimi süresinin 1 ms ile 2 ms arasında gerçekleşir. PWM sinyalinin 1 ms görev çevrim süresi için servo motor 0 derecelik pozisyondadır. Şemadan da görüldüğü gibi 0.5 ms lik ve 2 ms lik çevrim sürelerinde servo motorun pozisyonu 90 derece değişir. Servo motorların supply voltajı 4.5 volt ile 6 volt arasında değişir. Bu voltaj değerleri motorun tork una göre değişkenlik gösterir. R/C servo motorların digital olanlarıda vardır. Bu motorlar normale göre daha hassas açı ile dönerler. Şekil 3: Servo Motor Açısal Pozisyonu 1.1 Servo Motorun Özellikleri - Diğer motor türlerine göre daha hassastır. - Açısal dönme yöntemi (yani encoder) ile çalışmaktadır. - Bir sürücü ile kontrol edilirler. - Endüstride çok yaygın bir şekilde kullanılmaktadır. - Mikrobilgisayarlar tarafından kolayca kontrol edilebilirler. - Dönme esnasında oluşan hata sadece adım hatasıdır. 2
- Hızı programlama yoluyla ayarlanabilir. Uygulama alanlarına örnek verecek olursak CNC makineler, robot kolları, endüstriyel taşıma sistemlerini örnek verebiliriz. Servo motorlar da çıkış; mekaniksel konum, hız veya ivme gibi parametrelerin kontrol edildiği bir düzenektir. 2 VHDL ile SERVO MOTOR KONTROLÜ Quartus2 11.0 programını kullanarak Vhdl programlama dilince kodlamalarımızı gerçekleştirdik.[?] Şekil 4: Vhdl Ana Ekranımız burada diger vhdl sayfalarında kodladıgımız clock sinyalini ve pwm modül kodlamalarımız çağırıyoruz. 3
Şekil 5: Vhdl Clock Sinyali Bu vhdl kodlarımızda devremizin çalışması için kendi içinde gerekli olan 50Mhz lik clock sinyalinin çalışması için gereli kodlar yazılıyor. Şekil 6: Vhdl Pwm Üretici Programımızda, peryodu 20 ms olan bir adet PWM sinyali üretmemiz gerekecek. Biz Geliştirme bourdumuzda 50 MHz lik (20 ns) bir clk sinyali kullanacağımız. 20 ms periodunda bir sinyal üretmek için, programımızda 1 adet counter değişkeni tanımlayacağız 4
ve Counter ın üst sınırını ise (20ms/20ns) 1000 000 olarak belirleyeceğiz. Şekil 7: Pin Planer burada ise kitimizde ki giriş ve çıkışlarımızı ilgili pinlere atama işlemi gerçekleştiriliyor. Kodlama ve pin atama işlemimizi bu şekilde gerçekleştirdiktan sonra programımızın çalışmasını test edelim. 5
3 ALTERA ile RC SERVO BAG LANTILARIM S ekil 8: Servo Motor Bag lantıları S ekil 9: Vcc, GND ve PWM bag lantısı 6
4 DENEYSEL SONUÇLAR Çalışmamın uygulamasını https://www.youtube.com/watch?v=cqo3goueqei linkindeki kanalımdan izleyebilirsiniz. 7
5 EKLER 5.1 RC Servo Motor Kontrol Kodlarım 5.1.1 pwmtop.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_unsigned.all; ----------------------------------------------------- entity pwm_top is port( clr : in std_logic; clk : in std_logic; duty : in std_logic_vector (7 downto 0); pwm : out std_logic ); end pwm_top; ----------------------------------------------------- architecture pwm_top of pwm_top is signal new_clock : std_logic; begin clk_div: entity work.clk64khz port map( clk => clk, reset => 0, clk_out => new_clock); Pulse: entity work.pwm port map( clr => clr, clk => new_clock, duty => duty, period => "11001000", pwm => pwm); end pwm_top; 5.1.2 clk64khz.vhd library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity clk64khz is Port ( clk : in STD_LOGIC; reset : in STD_LOGIC; clk_out: out STD_LOGIC ); end clk64khz; architecture Behavioral of clk64khz is signal temporal: STD_LOGIC; signal counter : integer range 0 to 4999 := 0; 8
begin freq_divider: process (reset, clk) begin if (reset = 1 ) then temporal <= 0 ; counter <= 0; elsif rising_edge(clk) then if (counter = 4999) then temporal <= NOT(temporal); counter <= 0; else counter <= counter + 1; end if; end if; end process; clk_out <= temporal; end Behavioral; 5.1.3 pwm.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_unsigned.all; ----------------------------------------------------- entity pwm is port( clr : in std_logic; clk : in std_logic; duty : in std_logic_vector (7 downto 0); period : in std_logic_vector (7 downto 0); pwm : out std_logic ); end pwm; ----------------------------------------------------- architecture pwm of pwm is signal count : std_logic_vector(7 downto 0); begin cnt: process(clk, clr) -- 4 bit counter begin if clr = 1 then count <= "00000000"; elsif clk event and clk = 1 then if count = period -1 then count <= "00000000"; else count <= count +1; end if; end if; end process cnt; pwmout: process(count, duty) begin if count < duty then 9
pwm <= 1 ; else pwm <= 0 ; end if; end process pwmout; end pwm; 10
6 KAYNAKLAR Kaynaklar [1] http://elektroprog.org/?p=5638 11