17
T.C. B ˙ ILEC ˙ IK ¸ SEYH EDEBAL ˙ I ÜN ˙ IVERS ˙ ITES ˙ I MÜHEND ˙ ISL ˙ IK FAKÜLTES ˙ I B ˙ ILG ˙ ISAYAR MÜHEND ˙ ISL ˙ I ˘ G ˙ I BÖLÜMÜ RC SERVO MOTOR KONTROLÜ ˙ IBRAH ˙ IM AL ˙ I MET ˙ IN B ˙ ILEC ˙ IK 30 Mart 2015

FPGA ile RC Servo Kontrolü

  • Upload
    alimetn

  • View
    147

  • Download
    4

Embed Size (px)

Citation preview

T.C.

BILECIK SEYH EDEBALI ÜNIVERSITESI

MÜHENDISLIK FAKÜLTESI

BILGISAYAR MÜHENDISLIGI BÖLÜMÜ

RC SERVO MOTOR KONTROLÜ

IBRAHIM ALI METIN

BILECIK

30 Mart 2015

T.C.

BILECIK SEYH EDEBALI ÜNIVERSITESI

MÜHENDISLIK FAKÜLTESI

BILGISAYAR MÜHENDISLIGI BÖLÜMÜ

RC SERVO MOTOR KONTROLÜ

IBRAHIM ALI METIN

BILECIK

30 Mart 2015

ÖZET

Ödevin Amacı

Bu projemizde, FPGA kiti ile 1 adet PWM modul tasarlayacagız. PWM modülümüzü, RC

Servo motor sürmek için kullanacagız. RC Servo motorlar model hobide kullanılan mo-

torlardır.RC (radio Control) Hobi 2 yıldır ilgilendigim birçok model kullandıgım tavsiye

edebilecegim çok güzel bir ugrastır.

Ödevin Kapsamı

Projem FPGA kitinde pwm modülü olusumunu, kendi içinde üretilen clock sinyalinin

motorun hareketinde kullanımı hakkında ki genel yapıyı içermektedir.

Sonuçlar

Sonuç olarak FPGA kitimize baglı 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

Içindekiler

ÖZET ii

ABSTRACT iii

SEKIL LISTESI v

1 RC SERVO MOTOR 1

1.1 Servo Motorun Özellikleri . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 VHDL ile SERVO MOTOR KONTROLÜ 3

3 ALTERA ile RC SERVO BAGLANTILARIM 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

Sekil 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 Baglantıları . . . . . . . . . . . . . . . . . . . . . . . . . . 6

9 Vcc , GND ve PWM baglantısı . . . . . . . . . . . . . . . . . . . . . . . 6

v

1 RC SERVO MOTOR

R/C Servo Motor dedigimiz sey dc akımla çalısan ve istenilen açı aralıgında dönen moto-

rardır. R/C , Radio Controlled anlamına gelir. Servco motorlar DC Motorların temel man-

tıgını kullanırlar. Fakat buna karsın elektronik pozisyon kontrol devresi ve elektronik saft

gibi ekstra bilesenleri vardır. Servo motor saftın kaç derece ve hangi hızda döndügünü al-

gılar ve girise bunu geri besleme olarak verir. Motorun pozisyonunu algılamak için rotora

takılı bir potansiyometre bulunur. Bu potansiyometreden gelen analog deger ile inputtaki

sinyal karsılastırılır ve output olarak motorun yeni pozisyonu kontrol edilir.[1]

Sekil 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 degis-

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önecegi dereceyi hesaplar. PWM

sinyalinin çevrim süresi aynı kaldıgı müddetçe motor pozisyon degistirmez.

Sekil 2: PWM Modülü

1

Yalnız önemli olan nokta sudur ki; servo motorda dönmenin gerçeklesebilmesi 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çeklesir. PWM sinyalinin 1 ms görev çevrim süresi için servo motor

0 derecelik pozisyondadır. Semadan da görüldügü gibi 0.5 ms lik ve 2 ms lik çevrim

sürelerinde servo motorun pozisyonu 90 derece degisir.

Servo motorların supply voltajı 4.5 volt ile 6 volt arasında degisir. Bu voltaj degerleri

motorun tork’una göre degiskenlik gösterir. R/C servo motorların digital olanlarıda vardır.

Bu motorlar normale göre daha hassas açı ile dönerler.

Sekil 3: Servo Motor Açısal Pozisyonu

1.1 Servo Motorun Özellikleri

- Diger motor türlerine göre daha hassastır.

- Açısal dönme yöntemi (yani encoder) ile çalısmaktadır.

- Bir sürücü ile kontrol edilirler.

- Endüstride çok yaygın bir sekilde kullanılmaktadır.

- Mikrobilgisayarlar tarafından kolayca kontrol edilebilirler.

- Dönme esnasında olusan 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

tasıma sistemlerini örnek verebiliriz. Servo motorlar da çıkıs; mekaniksel konum, hız veya

ivme gibi parametrelerin kontrol edildigi bir düzenektir.

2 VHDL ile SERVO MOTOR KONTROLÜ

Quartus2 11.0 programını kullanarak Vhdl programlama dilince kodlamalarımızı gerçeklestirdik.[?]

Sekil 4: Vhdl Ana Ekranımız

burada diger vhdl sayfalarında kodladıgımız clock sinyalini ve pwm modül kodlamaları-

mız çagırıyoruz.

3

Sekil 5: Vhdl Clock Sinyali

Bu vhdl kodlarımızda devremizin çalısması için kendi içinde gerekli olan 50Mhz’lik clock

sinyalinin çalısması için gereli kodlar yazılıyor.

Sekil 6: Vhdl Pwm Üretici

Programımızda, peryodu 20 ms olan bir adet PWM sinyali üretmemiz gerekecek.

Biz Gelistirme bourdumuzda 50 MHz’lik (20 ns) bir clk sinyali kullanacagımız. 20 ms pe-

riodunda bir sinyal üretmek için, programımızda 1 adet counter degiskeni tanımlayacagız

4

ve Counter’ın üst sınırını ise (20ms/20ns) 1000 000 olarak belirleyecegiz.

Sekil 7: Pin Planer

burada ise kitimizde ki giris ve çıkıslarımızı ilgili pinlere atama islemi gerçeklestiriliyor.

Kodlama ve pin atama islemimizi bu sekilde gerçeklestirdiktan sonra programımızın ça-

lısmasını test edelim.

5

3 ALTERA ile RC SERVO BAGLANTILARIM

Sekil 8: Servo Motor Baglantıları

Sekil 9: Vcc , GND ve PWM baglantısı

6

4 DENEYSEL SONUÇLAR

Çalısmamı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