اطلاعیه

Collapse
No announcement yet.

درخواست کمک fpga

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    درخواست کمک fpga

    سلام دوستان. بچا ها من این ترم پروژه برداشتم با این عنوان
    پیاده سازی کنترلر pid دیجیتال با fpga جهت کنترل دور موتور
    ولی با استاد که تماس گرفتم گفتند که باید برد اموزشی اول بخری و ما با سیگنال ژنراتور یه سیگنال به پروسسور میدیم و مقادیر رو روی اسیلسکوپ نگاه میکنیم. منتها مشکلی که من دارم اینه که من قدرت هستم و کلا از الکترونیک سر در نمیارم. از شما درخواست دارم راهنمایی کنین که چه کاری باید انجام بدم. اول برد رو بگیرم و بعد فقط دنبال حل برنامه باشم درسته؟ برد که بگیرم چیزه دیگه ای نیاز نداره و فقط برنامه روش ریخته میشه و اجرا میشه ؟ برنامش سخته؟ چطور تو یک ماه یاد بگیرم؟ :cry: اگر کسی بتونه کمکم کنه تو حل مشکلات و نوشتن برنامه واقعا ممنون میشم. : :cry2:

    #2
    پاسخ : درخواست کمک fpga

    شما که قدرتی چرا رفتی دنبال fpga ؟
    ^^^^^^^^^^^^^
    خواستن توانستن است

    ^^^^^^^^^^^^^

    دیدگاه


      #3
      پاسخ : درخواست کمک fpga

      سلام
      والا منم نمیخواستم بردارم چون دانشکاه یکم سخت گیره این موضوع از همه راحت تر بود و زمان اعلام موضوع هم داشت تمام میشد. خلاصه بیشتر جنبه کنترلیش مهمه تا الکترونیکیش. بچه ها کسی نبود به داده ما برسه؟ :sad:

      دیدگاه


        #4
        پاسخ : درخواست کمک fpga

        یه برد fpga بخر
        اگه پورت پارالل داری نیازی به پروگرمر usb نیست. با پورت پارالل مستقیم پروگرم میشه.
        core آماده pid هم تو سایت opencores.org هست. می تونی دانلود کنی.

        https://www.linkedin.com/in/mohammadhosseini69

        http://zakhar.blog.ir

        دیدگاه


          #5
          پاسخ : درخواست کمک fpga

          سلام محمد جان
          اقا برد رو بگیریم و برنامش به زبون وی اچ دی ال تو اینترنت پیدا کنم و بریزم روش حله؟ مقاله راجع بهش زیاد هست اما کد برنامه رو اصلا گیر نیاوردم. زمانم کنه وگرنه میشستم خودم انجام میدادم. اگه کد برنامه رو برام پیدا کردی ممنون میشم بهم بدی. خلاصه ما هم یه چیزایی بلدیم که شاید به کاره دیگران بیاد دست درد نکنه عزیزم

          دیدگاه


            #6
            پاسخ : درخواست کمک fpga

            نوشته اصلی توسط r.m.d
            اقا برد رو بگیریم و برنامش به زبون وی اچ دی ال تو اینترنت پیدا کنم و بریزم روش حله؟
            نه در این حد دیگه!
            نمی خوای 2 خط کد در راستای پروژه (اگه نگیم بخاطر رضای خدا) تغییر بدی؟!
            https://www.linkedin.com/in/mohammadhosseini69

            http://zakhar.blog.ir

            دیدگاه


              #7
              پاسخ : درخواست کمک fpga

              شما اول برد و پروگرمر رو تهیه کن بعدش راه میوفته! خود ISE (اگر FPGA کمپانی xilinx رو بگیری) هم IP core های PID داره هم قالب دستورات VHDL و... آماده برای PID! کل چیزی که داری پیاده می کنی یه انتگراله! چیز خیلی ساده ایه! جای سختش داشتن یه برد و پروگرمره
              Gracias A La Vida
              [glow=red,2,300]ساخت فرز CNC[/glow]
              http://www.eca.ir/forum2/index.php?topic=56308.0
              http://up9.iranblog.com/images/4xd21f8vemt8g46011fx.jpg
              زمین سفت است و آب شلست و هوا نرم است و همه چیز عالیست در این حوالی...

              دیدگاه


                #8
                پاسخ : درخواست کمک fpga

                با تشکر از محمد و پژوهان عزیز
                نه خداییش اینطور فکر نکن باور کن نمیخوام سمبل کنم اما مشکل من اینه که کار نکردم و الا یکم اطلاعات داشتم مشکلی نبود برای همین شماهارو انداختم تو زحمت که کمکم بدین. دستتون درد نکنه. من سعی میکنم تو هفته دیگه برد رو بگیرم و ببینم چی به چیه. یکم زیرو روش کنم ببینم چی نیاز دارم بعد از شما اگه زحمتی نباشه سوالامو میپرسم. اقا برد همون زاینیکس میگیرم و اسپارتان 3 خوبه دیگه درسته؟ شرمندم کردین با تشکر از راهنماییهاتون

                دیدگاه


                  #9
                  پاسخ : درخواست کمک fpga

                  دوستان من یه سری کد پیدا کردم اما ازش سر در نیاوردم. خیلی با زبانی که من کار کردم فرق داره بیشتر شبیه بیسیک هست اما به مراتب گنگتر. اینجا میزارم اگه کسی فهمید چیه به منم بگه. ایا برنامه که باید بنویسم تو همین مایه هاست یا که نه ممنون
                  library IEEE;
                  use IEEE.STD_LOGIC_1164.ALL;
                  use IEEE.STD_LOGIC_ARITH.ALL;
                  use IEEE.STD_LOGIC_UNSIGNED.ALL;

                  entity pid_controller is

                  generic
                  (
                  -- size of input and output data --
                  iDataWidith : integer range 8 to 32 := 8;
                  -- proportionally gain --
                  iKP : integer range 0 to 7 := 3; -- 0 - /2, 1 - /4, 2 - /8, 3 - /16, 4 - /32, 5 - /64, 6 - /128, 7 - /256
                  -- integral gain --
                  iKI : integer range 0 to 7 := 2; -- 0 - /2, 1 - /4, 2 - /8, 3 - /16, 4 - /32, 5 - /64, 6 - /128, 7 - /256
                  -- differential gain --
                  iKD : integer range 0 to 7 := 2; -- 0 - /2, 1 - /4, 2 - /8, 3 - /16, 4 - /32, 5 - /64, 6 - /128, 7 - /256
                  -- master gain --
                  iKM : integer range 0 to 7 := 1; -- 0 - /1, 1 - /2, 2 - /4, 3 - /8 , 4 - /16, 5 - /32, 6 - /64 , 7 - /128
                  -- delay between samples of error --
                  iDelayD : integer range 1 to 16 := 10;
                  -- 0 - controller use derivative of PATERN_I and PATERN_ESTIMATION_I, 1 - controller use error to work --
                  iWork : integer range 0 to 1 := 1
                  );

                  port
                  (
                  CLK_I : in std_logic;
                  RESET_I : in std_logic;
                  -- error --
                  ERROR_I : in std_logic_vector(iDataWidith - 1 downto 0);
                  -- threshold --
                  PATERN_I : in std_logic_vector(iDataWidith - 1 downto 0);
                  -- current sample --
                  PATERN_ESTIMATION_I : in std_logic_vector(iDataWidith - 1 downto 0);
                  -- correction --
                  CORRECT_O : out std_logic_vector(iDataWidith - 1 downto 0)
                  );

                  end entity pid_controller;

                  architecture rtl of pid_controller is
                  -------------------------------------------------------------------------------
                  -- functions --
                  -------------------------------------------------------------------------------
                  -- purpose: make a std_logic_vector of size c_size and build from c_value --
                  function f_something ( constant c_size : integer; signal c_value : std_logic) return std_logic_vector is

                  variable var_temp : std_logic_vector(c_size - 1 downto 0);

                  begin -- function f_something --

                  var_temp := (others => c_value);

                  return var_temp;

                  end function f_something;
                  -- examples:
                  -- f_something(c_size => 3 , c_value => 'Z&#039 == "ZZZ"
                  -- f_something(c_size => 3 , c_value => '1&#039 == "111"
                  -- ...
                  -------------------------------------------------------------------------------
                  -- types --
                  -------------------------------------------------------------------------------
                  -- delay register --
                  type type_sr is array (0 to iDelayD - 1) of std_logic_vector(iDataWidith - 1 downto 0);

                  -------------------------------------------------------------------------------
                  -- signals --
                  -------------------------------------------------------------------------------
                  signal v_error : std_logic_vector(iDataWidith - 1 downto 0);
                  signal v_error_KM : std_logic_vector(iDataWidith - 1 downto 0);
                  signal v_error_KP : std_logic_vector(iDataWidith - 1 downto 0);
                  signal v_error_KD : std_logic_vector(iDataWidith - 1 downto 0);
                  signal v_error_KI : std_logic_vector(iDataWidith - 1 downto 0);
                  signal t_div_late : type_sr;
                  signal v_div : std_logic_vector(iDataWidith - 1 downto 0);
                  signal v_acu_earl : std_logic_vector(iDataWidith - 1 downto 0);
                  signal v_acu : std_logic_vector(iDataWidith - 1 downto 0);
                  signal v_sum : std_logic_vector(iDataWidith - 1 downto 0);

                  begin -- architecture rtl --

                  -- choice source of input data --
                  v_error <= ERROR_I when iWork = 1 else
                  conv_std_logic_vector(signed(PATERN_I) - signed(PATERN_ESTIMATION_I) , iDataWidith) when iWork = 0 else
                  (others => '0'
                  -- master gain execute by shift of iKM bits to the right --
                  v_error_KM <= v_error when iKM = 0 else
                  f_something(c_size => iKM , c_value => v_error(iDataWidith - 1)) & v_error(iDataWidith - 1 downto iKM) when iKM > 0 else
                  (others => '0'

                  -- proportionally gain execute by shift of (iKP - 1) bits to the right --
                  v_error_KP <= f_something(c_size => iKP + 1 , c_value => v_error_KM(iDataWidith - 1)) & v_error_KM(iDataWidith - 1 downto iKP + 1);

                  -- derivative gain execute by shift of (iKD - 1) bits to the right --
                  v_error_KD <= f_something(c_size => iKD + 1 , c_value => v_error_KM(iDataWidith - 1)) & v_error_KM(iDataWidith - 1 downto iKD + 1);

                  -- integral gain execute by shift of (iKI + 1) bits to the right --
                  v_error_KI <= f_something(c_size => iKI + 1 , c_value => v_error_KM(iDataWidith - 1)) & v_error_KM(iDataWidith - 1 downto iKI + 1);

                  DI00: process (CLK_I) is
                  begin -- process DI00

                  if rising_edge(CLK_I) then

                  -- synchronous reset --
                  if RESET_I = '1' then

                  t_div_late <= (others => (others => '0&#039);
                  v_div <= (others => '0'
                  v_acu <= (others => '0'
                  v_acu_earl <= (others => '0'

                  else

                  -- delay register --
                  t_div_late <= v_error_KD & t_div_late(0 to iDelayD - 2);

                  -- difference between samples --
                  v_div <= conv_std_logic_vector(signed(v_error_KD) - signed(t_div_late(iDelayD - 1)) , iDataWidith);

                  -- integration of error --
                  v_acu <= conv_std_logic_vector(signed(v_error_KI) + signed(v_acu_earl) , iDataWidith);
                  -- sum of N - 1 samples of error --
                  v_acu_earl <= v_acu;


                  end if;

                  end if;

                  end process DI00;

                  -- first stage of adder --
                  v_sum <= conv_std_logic_vector(signed(v_acu) + signed(v_div) , iDataWidith);
                  -- correction and second stage of adder --
                  CORRECT_O <= conv_std_logic_vector(signed(v_error_KP) + signed(v_sum) , iDataWidith) when RESET_I = '0' else
                  (others => '0'

                  end architecture rtl;

                  دیدگاه


                    #10
                    پاسخ : درخواست کمک fpga

                    سلام. دوستان من برد گرفتم برنامه رو هم نصب کردم حالا میشه راهنمایی کنین از کجا شروع کنم؟ و یه سوال دیگه این بردش ماژولهای d/a a/d نداره!!!! برای این کار لازم میشه؟ من باید یه پی ایدی تو ایسیم پیاده کنم درسته. بعد خروجیه موتورم باید فیدبک بشه و میشه از یه انکدر استفاده کرد. حالا من میخوام خروجی انکدر رو بدم داخل باید ای تو دی داشته باشم؟ اگه اشتباه نکنم خروجی انکدر پالسه که به ازای هر دور یه پالس میده اگه اینطور باشه میتونم همین پالسو استفاده کنم؟ بعد اینکه مدار قدرتم چی باید باشه؟ :cry2: و اینکه غیر از پی ایدی یه تفریق کننده هم میخواد دیگه که ورودیو با مقدار فیدبک مقایسه کنه بده به پی ایدی درسته؟ بچه ها اگه اطلاعاتی دارین بهم بدین ممنون میشم من هیچی حالیم نیست شاغلم هستم وقت اصلا ندارم کمکم کنین ممنون میشم. :cry2:

                    دیدگاه


                      #11
                      پاسخ : درخواست کمک fpga

                      این تا اون جایی که من میدونم
                      vhdl
                      هست
                      اگه به زبان
                      c
                      اشنایی شاید کار کذدن با
                      verilog
                      واست اسون تر باشه.
                      برد
                      spartan 3 هم خوبه

                      دیدگاه


                        #12
                        پاسخ : درخواست کمک fpga

                        سلام. دوستان یکم کم لطفیند ها. اما بهرحال من ممنونم. اقایون من به این نتیجه رسیدم که چون سوالام کلی هست یکم پاسخ دادن بهشون سخته. سوالام رو کوچیک میکنم. اقا من یه عدد میخوام به عنوان ورودی بدم که بین 0 تا 99 باشه. بزارین بهتر بگم. یه عدد به صورت رشته اعداد به 8 تا پایه میدم که این عدد متغیره و تعداد دور موتور ما هستش. حالا متناسب با این عدد میخوام موتورم به همون اندازه دور داشته باشه. مثلا 00001111 میدم میخوام 16 دور گردش داشته باشم. تا اینجا درست؟ خوب دادن این عدد به ورودی کاری نداره اما من چطور باید اونو به موتور بدم؟ یکم گیجم. :angry: مثلا این رشته به ورودی دادم تو ایسی باید بفهمه 16 دادم که بعدا مقدار عددی که از انکدر میاد رو باید ازش کم کنم. اولین سوال اینکه این عدد رو چطور به ایسی بفهمونم که چنده؟ مثلا اگه انتجر ورودیم رو تعریف کنم خود ایسی میفهمه یا یه طور دیگه که شما به من بگین. سوال دومم اینه که حالا چطور این عدد رو به موتور بدم که با همون دور گردش کنه. اگه این 2 سوالم حل بشه 90 درصد کارو حله. راستش در مورد مدار قدرتم گیجم اگه کمکم کنین واقعا ممنون میشم. اما بچه ها وی هچ دی ال راحته من 3 روزه گرفتم چیه داستانش اما دیکه کارائی که باش انجام میشه مثلا پردازش تصویر دیگه اون تخصصه و قطعا به تمرین بیشتر نیاز داره. بچه ها ممنون میشم جواب بدین

                        دیدگاه

                        لطفا صبر کنید...
                        X