Ana Sayfa FPGA FPGA ile Step Motor Kontrolü

FPGA ile Step Motor Kontrolü

4 min read
0
0
1,583

Merhaba arkadaşlar.

Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmalarımız devam ediyor.FPGA kitine buradan ulaşabilirsiniz.

Bugün sizlere FPGA bordumuz üzerinde kontrolünü sağlamış olduğumuz step motor uygulamasından bahsetmek istiyorum. Kullanmış olduğumuz unipolar step motoru board üzerindeki genel amaçlı kullanım pinlerinden (GPIO) yararlanarak ULN2003 entegresinin çıkışlarını tetikleyip  step motor kontrolünü sağlamış olduk.

(ULN2003 entegresinin çıkışlarından max 500mA akım geçebilmekte, kullandığımız step motorumuz bu değerden çok fazla akım çektiği için uygulama sırasında bir tane entegremizi deldik 🙂 Kullanılan step motorun özellikleri dikkate alınarak uygun bir anahtarlama devresi kullanılmalı.)

Motor kontrolünde her tetiklemede tek bir bobini aktif hale getirerek haraket elde ettik. (İsteğe göre motora verilen palslerin veriliş biçimi değiştirilerek motor daha hassas kontrol edilebilinir. Fakat unutmamız gereken durum sistemi daha hassas kontrol ettikçe motorun harcayacağı güç miktarı da artacaktır.)

Program kısmını anlatacak olursak entity kısmımızda çıkış olarak GPIO ve sarı ledleri, giriş olarak switch ve 50 Mhz kristali kullandık.

FPGA
FPGA

library ieee;

use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;
library altera;
use altera.altera_syn_attributes.all;

entity stepper is
port
(
clock_50:in std_logic;
switch :in std_logic_vector(3 downto 0);
ledg : out std_logic_vector(3 downto 0);
GPIO : out std_logic_vector(3 downto 0)
);
end stepper;
architecture stepper_control of stepper is
signal bekleme : integer range 0 to 3000000:=0;
signal motor : integer range 0 to 4:=0;
signal cikis : integer range 0 to 8:=0;
begin
ledg<= std_logic_vector((to_unsigned(cikis,4)));
GPIO<= std_logic_vector((to_unsigned(cikis,4)));
process (clock_50)
begin
if(clock_50'EVENT AND clock_50='1')then---
if(switch(3)='0')then
if(bekleme<3000000)then--
bekleme<=bekleme+1;
else
bekleme<=0;
end if;
else
if(bekleme<100000)then--
bekleme<=bekleme+1;
else
bekleme<=0;
end if;
end if;
if(bekleme=0)then----

if(switch="0001")then

if(motor<=4)then
motor<=motor+1;
---motor ileri
if(motor=1)then
cikis<=8;
elsif(motor=2)then
cikis<=4;
elsif(motor=3)then
cikis<=2;
elsif(motor=4)then
cikis<=1;
motor<=0;
end if;
end if;
end if;
if(switch="0011")then
if(motor=4)then
motor<=1;
end if;
motor<=motor+1;
---motor geri
if(motor=1)then
cikis<=1;
elsif(motor=2)then
cikis<=2;
elsif(motor=3)then
cikis<=4;
elsif(motor=4)then
cikis<=8;
motor<=0;
end if;

end if;

end if;
end if;---

end process;

end;

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Ahmet Memeşil
  • VHDL Nedir?

    VHDL ,FPGA entegrelerinin donanım yapısını değiştirdiğimiz donanım tanımlama dilidir. Dili…
  • FPGA ile RS232 Haberleşmesi(Receiver)

    Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
  • FPGA ile 7-Segment Sayıcı

    Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…
Daha Fazla Göster -  FPGA

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

FPGA ile RS232 Haberleşmesi(Receiver)

Merhaba arkadaşlar, Çizgi market sponsorluğunda tarafımıza gönderilen FPGA ile çalışmaları…