FPGA FPGA ile Step Motor Kontrolü By Ahmet Memeşil Posted on 19 Aralık 2015 4 min read 1 2 4,136 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr 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 [php] 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; [/php]