Gönderen Konu: Basys3 ve Step motor.  (Okunma sayısı 2233 defa)

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Basys3 ve Step motor.
« : 31 Ekim 2015, 10:44:23 »
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.

Kod: [Seç]
----------------------------------------------------------------------------------
-- 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;


Çevrimdışı alicavuslu

  • Kıdemli
  • ****
  • İleti: 245
    • Kişisel Site
Ynt: Basys3 ve Step motor.
« Yanıtla #1 : 31 Ekim 2015, 10:57:44 »
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?

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #2 : 31 Ekim 2015, 11:31:23 »
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://pdf1.alldatasheet.com/datasheet-pdf/view/55137/ALLEGRO/5804.html
« Son Düzenleme: 31 Ekim 2015, 11:48:08 Gönderen: MC_Skywalker »

Çevrimdışı alicavuslu

  • Kıdemli
  • ****
  • İleti: 245
    • Kişisel Site
Ynt: Basys3 ve Step motor.
« Yanıtla #3 : 03 Kasım 2015, 11:00:10 »
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.

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #4 : 03 Kasım 2015, 11:27:09 »
evet orayı çözem lazım.  hızlanma ve yavaşlama konusuna baktım kafam iyice karıştı. birde şu anahtarlar için sorgulama

Çevrimdışı alicavuslu

  • Kıdemli
  • ****
  • İleti: 245
    • Kişisel Site
Ynt: Basys3 ve Step motor.
« Yanıtla #5 : 03 Kasım 2015, 11:30:31 »
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
);

« Son Düzenleme: 03 Kasım 2015, 11:32:59 Gönderen: alicavuslu »

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #6 : 03 Kasım 2015, 11:46:19 »
şu dökümanı anlamaya çalışıyorum


https://eewiki.net/pages/viewpage.action?pageId=4096117
« Son Düzenleme: 03 Kasım 2015, 12:05:07 Gönderen: MC_Skywalker »

Çevrimdışı alicavuslu

  • Kıdemli
  • ****
  • İleti: 245
    • Kişisel Site
Ynt: Basys3 ve Step motor.
« Yanıtla #7 : 03 Kasım 2015, 11:51:43 »
Bence kendi kodumuzu yazmaya çalışırsak daha anlaşılır olur.

mesaj birleştirme:: [time]03 Kasım 2015, 19:55:03[/time]
Soru : Hızlanma PWM doluluğuna göre mi ayarlanıyor yoksa frekansına göre mi?

mesaj birleştirme:: 03 Kasım 2015, 12:01:52
Soru : Sekilde 1-100 Hz yazan kısım sabit mi olacak yada bu aralıkta değişecek mi?
« Son Düzenleme: 03 Kasım 2015, 12:01:52 Gönderen: alicavuslu »

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #8 : 03 Kasım 2015, 13:15:57 »
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

Çevrimdışı alicavuslu

  • Kıdemli
  • ****
  • İleti: 245
    • Kişisel Site
Ynt: Basys3 ve Step motor.
« Yanıtla #9 : 03 Kasım 2015, 13:17:18 »
O zaman bu değer bizim için sabit olacak. Sisteme constant olarak girebiliriz. Peki PWM doluluğu değişken mi olacak?

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #10 : 03 Kasım 2015, 13:30:59 »
IC datasını okuyurum. çözünce yazarım
http://www.seas.upenn.edu/~robo2008/labs/StepperDriver.pdf
« Son Düzenleme: 04 Kasım 2015, 10:43:06 Gönderen: MC_Skywalker »

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #11 : 04 Kasım 2015, 10:42:23 »
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.


Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #12 : 18 Nisan 2017, 12:08:00 »
Step motor döndürmeden önce bir DC motoru PWM benzeri sinyal elde ederek döndürmek.

Kod: [Seç]
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;





https://youtu.be/fDac7tS8UAA
« Son Düzenleme: 19 Nisan 2017, 03:40:48 Gönderen: MC_Skywalker »

Çevrimiçi MC_Skywalker

  • Profesyonel Üye
  • *****
  • İleti: 2405
  • e=m.c^2
Ynt: Basys3 ve Step motor.
« Yanıtla #13 : 23 Nisan 2017, 05:57:44 »
işin içine duty kontrolu katarsak




https://youtu.be/41wp0sONiIY
« Son Düzenleme: 23 Nisan 2017, 06:03:35 Gönderen: MC_Skywalker »