اطلاعیه

Collapse
No announcement yet.

pwm with cpld xc9572xl

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

    pwm with cpld xc9572xl

    سلام
    خسته نباشید
    من میخوام با cpld یه موج pwm بسازم که بتونم یه سروو موتور رو کنترل کنم
    میشه راهنمایی کنید
    ممنون

    #2
    پاسخ : pwm with cpld xc9572xl

    با VHDL راحت با چند خط میشه درستش کرد، کلاک اوسیلاتور رو میدی به یه GCLOCK و میاریش تو یه Process وروی rising_edge اون کلاک شروع به شمردن میکنی و هر موقع شمارنده به عدد دلخواهت رسید اون I/O که برای PWM استفاده کردی رو صفر و یک میکنی. DCO خیلی از PWM بهتر ودقیق تره ولی تو CPLD جا نمیگیره، اما اگه دقت بالا نمیخوای همون کافیه که بتونی چند بار ازش Instance بگیری و چند خروجی PWM روی CPLD بگیری.
    اسمایل، تومورو ویل بی وُرس

    دیدگاه


      #3
      پاسخ : pwm with cpld xc9572xl

      اقا خیلی ممنون
      ولی راستش من مثل شما خیلی حرفه ای نیستم
      میشه یه کد vhdl نمونه برام معرفی کنی؟
      من توی سایت ها گشتم و sampel code پیدا نکردم
      ممنون میشم

      دیدگاه


        #4
        پاسخ : pwm with cpld xc9572xl

        نوشته اصلی توسط saeidkosha
        اقا خیلی ممنون
        ولی راستش من مثل شما خیلی حرفه ای نیستم
        میشه یه کد vhdl نمونه برام معرفی کنی؟
        من توی سایت ها گشتم و sampel code پیدا نکردم
        ممنون میشم
        library ieee;
        use ieee.std_logic_1164.all;
        use ieee.numeric_std.all;

        entity PWM_Generator is
        port (
        CLOCK_IN : IN STD_LOGIC;--Input Clock Pin
        PWM_OUT : OUT STD_LOGIC;--Output PWM Pin
        DIVISION_FACTOR_IN : IN STD_LOGIC_VECTOR (7 downto 0)--8-bit Division factor x2 Zero means PWM = 1/2*Clock
        );
        end PWM_Generator;


        architecture PWM_Generator_Function of PWM_Generator is
        signal PWM : STD_LOGIC := '0';
        signla Division :Unsigned (7 downto 0);
        begin
        PWM_OUT <= PWM;

        Division(0) <= DIVISION_FACTOR_IN(0);
        Division(1) <= DIVISION_FACTOR_IN(1);
        Division(2) <= DIVISION_FACTOR_IN(2);
        Division(3) <= DIVISION_FACTOR_IN(3);
        Division(4) <= DIVISION_FACTOR_IN(4);
        Division(5) <= DIVISION_FACTOR_IN(5);
        Division(6) <= DIVISION_FACTOR_IN(6);
        Division(7) <= DIVISION_FACTOR_IN(7);

        process(CLOCK_IN)
        variable Timeout : unsigned(7 downto 0) := x"00";
        begin
        if rising_edge(CLOCK_IN) then

        if(Timeout < Division)then
        Timeout := Timeout + 1;
        else
        PWM <= not PWM;
        Timeout := x"00";
        end if;
        end if;
        end process;
        end PWM_Generator_Function;
        اسمایل، تومورو ویل بی وُرس

        دیدگاه

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