Elimde bir gün denerim diye almış olduğum UDN5804 entegresi ve dağtığım bir printerden kalma 5V lik step motor var.
bu üçlüyü kullanıp bir yeşler yapayım dedim. lakın kafam karıştı kaldı. kod yapısını kuaramadım gitti.
----------------------------------------------------------------------------------
-- Company: MC_Skywalker
-- Engineer: MC_Skywalker
-- Create Date: 26.10.2015 20:56:55
-- Module Name: stepmotor - Behavioral
-- Project Name: Step Motor Driver Demo
-- Target Devices: XC7A35T
-- Tool Versions: Vivado 2015.3
-- Description: UDN 5804 ile step motor kontrol
-- Revision:
-- Revision 0.01 - File Created
-- Additional Comments:
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity stepmotor is
Port ( clk : in STD_LOGIC; --FPGA clock girişi 100MHz
yon : out STD_LOGIC; --Dönüş yönü çıkışı(14)
pulse : out STD_LOGIC); --UDN 5804 OE pini(15) girişine
end stepmotor;
-- Davarnışla Step motor sürme XC7A35T nin (W15) clock girşinde alınan 100Mhz bölnüp 1Hz elde edilecek
-- Yetkiseç 1 ise işlem yalıpacak
architecture Behavioral of stepmotor is
constant SYS_CLK_PERIOD : integer := 10; -- ns cinsinden
constant NEW_CLK_PERIOD : integer := 100_000_000; -- ns cinsinden
constant CLK_COUNT : integer := NEW_CLK_PERIOD / (2 * SYS_CLK_PERIOD);
signal counter: std_logic_vector(3 downto 0):= "0000";
signal clk_new : std_logic := '0';
signal count : integer range 0 to 99999999 := 0;
begin
process(clk)
begin
if clk= '1' and clk'event then
if count = CLK_COUNT - 1 then
count <= 0;
clk_new <= not clk_new;
else
count <= count + 1;
end if;
end if;
end process;
process(clk_new)
begin
if rising_edge(clk_new) then
if (yetkisec = '1') then
end process;
end Behavioral;
Hocam öncelikle tasarımından bahsedebilir misiniz? Daha önce step motor ile alakalı çalışmadım. FPGA entegreyi mi sürecek? Yoksa direk motora mı bağlanacak? Entegreyi sürecekse protokol ne olacak?
Bu konularda bilgi verebilir misiniz?
Entegeyi sürecek. Protokol yok.
3 anahtarı kullanamyı düşündüm. Yön seçimi, Adım seçimi ve enable. bu anahtarlala ilgili kara verme mantığını kuramadım.
EN anattarı 1 ken işlemler yapılmasını düşündüm. diğer anahtarları nasıl sorgulayacağım. şimdilik amaçsız sağa sola döndürüsem yeter sonrasın zamanla.
(http://i.imgur.com/lvykrCO.jpg)
http://pdf1.alldatasheet.com/datasheet-pdf/view/55137/ALLEGRO/5804.html (http://pdf1.alldatasheet.com/datasheet-pdf/view/55137/ALLEGRO/5804.html)
Hocam çok zaman ayıramadım kusura bakmayın. O zaman sizinle öncelikli olarak PWM kodu oluşturmaya çalışalım. İşin ana kısmı o gibi duruyor.
evet orayı çözem lazım. hızlanma ve yavaşlama konusuna baktım kafam iyice karıştı. birde şu anahtarlar için sorgulama
Aslında güzel bir çalışma olacak. Hemde port map kavramını uygulamış oluruz. Bende step motor konusunda tecrübe kazanırım :)
Port yapımız aşağıdaki gibi uygun olur mu? Hızlanma işlemini nasıl yapacağız bu konuda bilgi verirseniz sevinirim.
port(
in_clk : in std_logic;
in_rst : in std_logic;
in_en : in std_logic;
in_sw_yon : in std_logic;
in_sw1 : in std_logic;
out_en : out std_logic;
out_yon : out std_logic;
out_sw1 : out std_logic;
out_pwm : out std_logic
);
şu dökümanı anlamaya çalışıyorum
(http://s22.postimg.cc/5hhxhka6l/image.jpg) (http://postimg.cc/image/5hhxhka6l/)
https://eewiki.net/pages/viewpage.action?pageId=4096117 (https://eewiki.net/pages/viewpage.action?pageId=4096117)
Bence kendi kodumuzu yazmaya çalışırsak daha anlaşılır olur.
mesaj birleştirme:: 03 Kasım 2015, 19:55:03
Soru : Hızlanma PWM doluluğuna göre mi ayarlanıyor yoksa frekansına göre mi?
mesaj birleştirme:: 02 Kasım 2015, 21:01:52
Soru : Sekilde 1-100 Hz yazan kısım sabit mi olacak yada bu aralıkta değişecek mi?
1-100hz motorun adım açısına göre sanırım hesaplayacağız
maksimum devir * puls/ hız çözünürlüğü-1 * hızlanma diye anladım
O zaman bu değer bizim için sabit olacak. Sisteme constant olarak girebiliriz. Peki PWM doluluğu değişken mi olacak?
IC datasını okuyurum. çözünce yazarım
http://www.seas.upenn.edu/~robo2008/labs/StepperDriver.pdf (http://www.seas.upenn.edu/~robo2008/labs/StepperDriver.pdf)
Motor hakkında doğru bilgi bulamadım. 30 RPM gibi değerler var internette
18 derce açısı olduğunu varsayrak her adım arası 0,1ms çıkıyor. 360 derece dönmek için 20 adım atması gerekiyor.
Step motor döndürmeden önce bir DC motoru PWM benzeri sinyal elde ederek döndürmek.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity PWMsi is
port(clk : in std_logic;
en : in std_logic;
output : out std_logic);
end PWMsi;
architecture Behavioral of PWMsi is
begin
process(en,clk)
variable i : integer :=0;
begin
if en ='1' then
if clk'event and clk ='1' then
if i <= 2010000 then
i := i + 1;
output <= '0';
elsif i > 2000000 and i < 3000000 then
i := i + 1;
output <= '1';
elsif i = 3000000 then
i := 0;
end if;
end if;
end if;
end process;
end Behavioral;
(http://i.hizliresim.com/X08Okk.jpg)
(http://i.hizliresim.com/R08dDn.jpg)
https://youtu.be/fDac7tS8UAA
https://www.youtube.com/watch?v=fDac7tS8UAA
işin içine duty kontrolu katarsak
(http://i.hizliresim.com/1L0APA.jpg)
(http://i.hizliresim.com/01A5DR.jpg)
https://youtu.be/41wp0sONiIY