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