کنترل موتور steper با استفاده از FPGA

توصیف کنترل موتور steper با استفاده از زبان VHDL

دراین پروژه به  راه اندازی کنترل موتور steper با استفاده از VHDL پرداخته می شود. موتور استپر استفاده شده یک موتور استپر ساده دارای مشخصات زیل می باشد

Specifications

  • Rated Voltage: DC 5V
  • Number of Pole: 4
  • Speed Variation Ratio: 1/64
  • Stride Angle: 5.625°/64
  • DC Resistance: 200Ω ± 7%(25°C)
  • Idle In-traction Frequency: > 600Hz
  • Idle Out-traction Frequency: > 1000Hz
  • In-traction Torque: > 34.3mN.m(120Hz)
  • Self-positioning Tor: > 34.3mN.m
  • Insulated Resistance: > 10MΩ(500V)
  • Insulated Electricity Power: 600VAC/1mA/1s
  • Insulation Grade: A
  • Rise in Temperature: < 40K(120Hz)
  • Noise: < 40dB(120Hz, No load, 10cm)

 

c3ce5ac0079a449b99543bf2d5f41c63.image.530x397

این پروژه با استفاده از زبان VHDL نوشته شده است و برای سرعت 125 استپ و 500 استپ در ثانیه طراحی گردیده است.

 

——————————————————-

 stepper_test.vhd – Driving a low cost stepper motor–

                  using a low cost driver board–

               Uses ‘Full Step Drive’ – see–

——————————————————-

;library IEEE

;use IEEE.STD_LOGIC_1164.ALL

;use IEEE.NUMERIC_STD.ALL

entity stepper_test is

  ;  Port ( clk32M   : in   STD_LOGIC

           — Control signals

          ; sw_dir      : in   STD_LOGIC

         ;  sw_enable   : in   STD_LOGIC

         ;  sw_speed    : in   STD_LOGIC

           — Outputs

        ; (position : out  STD_LOGIC_VECTOR(15 downto 0

           — Signals to the drivers

        ;   phase_a  : out  STD_LOGIC

         ;  phase_b  : out  STD_LOGIC

        ;   phase_c  : out  STD_LOGIC

         ; ( phase_d  : out  STD_LOGIC

;end stepper_test

architecture Behavioral of stepper_test is

  ; “signal coils      : std_logic_vector(3 downto 0) := “0011

 ; ( ‘signal count      : unsigned(17 downto 0) := (others => ‘0

 ; ( ‘signal step_count : unsigned(15 downto 0) := (others => ‘0

begin

;   (phase_a <= coils(0

   ;   (phase_b <= coils(1

;   (phase_c <= coils(2

   ;   (phase_d <= coils(3

   ;   (position <= std_logic_vector(step_count

 

 

همانطور که در زیل مشاهده می شود،در فرایند برنامه به ازای هر لبه بالا رونده کلاک در شرایطی که  sw_enable برابر با یک است با یک،صفر شدن  sw_dir موتور به راست و چپ می چرخد.

(p: process(clk32M

   begin

      if rising_edge(clk32M) then

         if count = 0 then

            if sw_enable = ‘1’ then

               if sw_dir = ‘1’ then

                  ;   (coils <= coils(0) & coils(coils’high downto 1

                  ;step_count <= step_count + 1

               else

              ;  (  coils <= coils(coils’high-1 downto 0) & coils(coils’high

                  ;    step_count <= step_count – 1

                ;   end if

             ;   end if

          ;  end if

 

سرعت موتور در دو وضعیت 125 استپ در ثانیه و 500 استپ در ثانیه با سیگنال sw_speed تعیین می شود.

 Control the speed —

if sw_speed = ‘1’ and count =  64000-1 then

 500 steps every second – fast —

  ;  (‘count <= (others => ‘0

elsif count = 256000-1 then

 125 steps every second – slow  —

;(‘count <= (others => ‘0

else

;count <= count + 1

;end if

;end if

;end process

;end Behavioral

 

در برنامه ی فوق در شرایطی که count = 0 نمی باشد مطابف شرط  sw_speed به count    به ازای هر سیگنال کلاک اضافه شده ودر شرایطی که count = 0 است شرایط برای حرکت موتور مهیا می شود بنابر این هر زمان sw_speed  تغییر کند سرعت چرخش موتور تغییر می کند.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *