ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
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
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
ÖZET
Ödevin Amacı
Bu projemizde, FPGA kiti ile 1 adet PWM modul tasarlayaca˘gız. PWM modülümüzü, RC
Servo motor sürmek için kullanaca˘gız. RC Servo motorlar model hobide kullanılan mo-
torlardır.RC (radio Control) Hobi 2 yıldır ilgilendi˘gim birçok model kullandı˘gım tavsiye
edebilece˘gim çok güzel bir u˘gra¸stır.
Ödevin Kapsamı
Projem FPGA kitinde pwm modülü olu¸sumunu, 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˘glı 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
¸SEK˙IL L˙ISTES˙I 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 ˘GLANTILARIM 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 Ba˘glantıları . . . . . . . . . . . . . . . . . . . . . . . . . . 6
9 Vcc , GND ve PWM ba˘glantısı . . . . . . . . . . . . . . . . . . . . . . . 6
v
1 RC SERVO MOTOR
R/C Servo Motor dedi˘gimiz ¸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 kar¸sın elektronik pozisyon kontrol devresi ve elektronik ¸saft
gibi ekstra bile¸senleri vardır. Servo motor ¸saftın kaç derece ve hangi hızda döndü˘günü al-
gılar ve giri¸se bunu geri besleme olarak verir. Motorun pozisyonunu algılamak için rotora
takılı bir potansiyometre bulunur. Bu potansiyometreden gelen analog de˘ger ile inputtaki
sinyal kar¸sıla¸stı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 de˘gi¸s-
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˘gi dereceyi hesaplar. PWM
sinyalinin çevrim süresi aynı kaldı˘gı müddetçe motor pozisyon de˘gi¸stirmez.
¸Sekil 2: PWM Modülü
1
Yalnız önemli olan nokta ¸sudur ki; servo motorda dönmenin gerçekle¸sebilmesi 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¸sir. 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 de˘gi¸sir.
Servo motorların supply voltajı 4.5 volt ile 6 volt arasında de˘gi¸sir. Bu voltaj de˘gerleri
motorun tork’una göre de˘gi¸skenlik 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
- Di˘ger 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 olu¸san 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¸sıma sistemlerini örnek verebiliriz. Servo motorlar da çıkı¸s; mekaniksel konum, hız veya
ivme gibi parametrelerin kontrol edildi˘gi bir düzenektir.
2 VHDL ile SERVO MOTOR KONTROLÜ
Quartus2 11.0 programını kullanarak Vhdl programlama dilince kodlamalarımızı gerçekle¸stirdik.[?]
¸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 ça˘gı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 Geli¸stirme bourdumuzda 50 MHz’lik (20 ns) bir clk sinyali kullanaca˘gımız. 20 ms pe-
riodunda bir sinyal üretmek için, programımızda 1 adet counter de˘gi¸skeni tanımlayaca˘gız
4
ve Counter’ın üst sınırını ise (20ms/20ns) 1000 000 olarak belirleyece˘giz.
¸Sekil 7: Pin Planer
burada ise kitimizde ki giri¸s ve çıkı¸slarımızı ilgili pinlere atama i¸slemi gerçekle¸stiriliyor.
Kodlama ve pin atama i¸slemimizi bu ¸sekilde gerçekle¸stirdiktan sonra programımızın ça-
lı¸smasını test edelim.
5
3 ALTERA ile RC SERVO BA ˘GLANTILARIM
¸Sekil 8: Servo Motor Ba˘glantıları
¸Sekil 9: Vcc , GND ve PWM ba˘glantı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

More Related Content

FPGA ile RC Servo Kontrolü

  • 1. 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
  • 2. 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
  • 3. ÖZET Ödevin Amacı Bu projemizde, FPGA kiti ile 1 adet PWM modul tasarlayaca˘gız. PWM modülümüzü, RC Servo motor sürmek için kullanaca˘gız. RC Servo motorlar model hobide kullanılan mo- torlardır.RC (radio Control) Hobi 2 yıldır ilgilendi˘gim birçok model kullandı˘gım tavsiye edebilece˘gim çok güzel bir u˘gra¸stır. Ödevin Kapsamı Projem FPGA kitinde pwm modülü olu¸sumunu, 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˘glı olan servo motorlarımız belirli bir açı süpürmektedir. ii
  • 4. 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
  • 5. Ë™Içindekiler ÖZET ii ABSTRACT iii ¸SEKË™IL LË™ISTESË™I 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 ˘GLANTILARIM 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
  • 6. ¸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 Ba˘glantıları . . . . . . . . . . . . . . . . . . . . . . . . . . 6 9 Vcc , GND ve PWM ba˘glantısı . . . . . . . . . . . . . . . . . . . . . . . 6 v
  • 7. 1 RC SERVO MOTOR R/C Servo Motor dedi˘gimiz ¸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 kar¸sın elektronik pozisyon kontrol devresi ve elektronik ¸saft gibi ekstra bile¸senleri vardır. Servo motor ¸saftın kaç derece ve hangi hızda döndü˘günü al- gılar ve giri¸se bunu geri besleme olarak verir. Motorun pozisyonunu algılamak için rotora takılı bir potansiyometre bulunur. Bu potansiyometreden gelen analog de˘ger ile inputtaki sinyal kar¸sıla¸stı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 de˘gi¸s- 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˘gi dereceyi hesaplar. PWM sinyalinin çevrim süresi aynı kaldı˘gı müddetçe motor pozisyon de˘gi¸stirmez. ¸Sekil 2: PWM Modülü 1
  • 8. Yalnız önemli olan nokta ¸sudur ki; servo motorda dönmenin gerçekle¸sebilmesi 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¸sir. 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 de˘gi¸sir. Servo motorların supply voltajı 4.5 volt ile 6 volt arasında de˘gi¸sir. Bu voltaj de˘gerleri motorun tork’una göre de˘gi¸skenlik 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 - Di˘ger 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 olu¸san hata sadece adım hatasıdır. 2
  • 9. - Hızı programlama yoluyla ayarlanabilir. Uygulama alanlarına örnek verecek olursak CNC makineler, robot kolları, endüstriyel ta¸sıma sistemlerini örnek verebiliriz. Servo motorlar da çıkı¸s; mekaniksel konum, hız veya ivme gibi parametrelerin kontrol edildi˘gi bir düzenektir. 2 VHDL ile SERVO MOTOR KONTROLÃœ Quartus2 11.0 programını kullanarak Vhdl programlama dilince kodlamalarımızı gerçekle¸stirdik.[?] ¸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 ça˘gırıyoruz. 3
  • 10. ¸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 Geli¸stirme bourdumuzda 50 MHz’lik (20 ns) bir clk sinyali kullanaca˘gımız. 20 ms pe- riodunda bir sinyal üretmek için, programımızda 1 adet counter de˘gi¸skeni tanımlayaca˘gız 4
  • 11. ve Counter’ın üst sınırını ise (20ms/20ns) 1000 000 olarak belirleyece˘giz. ¸Sekil 7: Pin Planer burada ise kitimizde ki giri¸s ve çıkı¸slarımızı ilgili pinlere atama i¸slemi gerçekle¸stiriliyor. Kodlama ve pin atama i¸slemimizi bu ¸sekilde gerçekle¸stirdiktan sonra programımızın ça- lı¸smasını test edelim. 5
  • 12. 3 ALTERA ile RC SERVO BA ˘GLANTILARIM ¸Sekil 8: Servo Motor Ba˘glantıları ¸Sekil 9: Vcc , GND ve PWM ba˘glantısı 6
  • 13. 4 DENEYSEL SONUÇLAR Çalı¸smamın uygulamasını https://www.youtube.com/watch?v=CqO3goueqEI linkindeki kanalımdan izleyebilirsiniz. 7
  • 14. 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
  • 15. 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
  • 16. pwm <= ’1’; else pwm <= ’0’; end if; end process pwmout; end pwm; 10