Altera De0 Nano ile Servo Motor Sürme

Servo motorlarda,PWM adı verilen Darbe Genişlik Modülasyonu tekniği sayesinde noktadan noktaya konum-hız-ivme kontrolü yapılabilmektedir.

Uygulamada kullanacağımız servo motor piyasada rahatlıkla bulunabilen ve oldukça ucuz olan Tower Pro adlı üreticinim Sg90 modelli ürünüdür.

Servo motorun datasheetini incelediğimizde PWM aralığının 20 ms, maksimum duty cycle değerinin 2 ms, minimum duty cycle değerinin ise 1 ms olduğunu görmekteyiz.

pwm

Uygulamada kullanacağımız kartın (Altera De0 Nano) clock hızı 50 Mhz e göre PWM hesabı yapacak olursak;
50 MHz = 20 ns , Servo motorumuz için PWM periyodu 20 ms,
Tanımlayacağımız counter değişkenimizin üst limiti 20 ms / 20 ns = 1*10^6 olur.
Duty cycle max değeri 2 ms / 20 ns = 1* 10^5
Duty cycle min değeri 1 ms / 20 ns = 5* 10^4 olur.
Bu değerlere göre kodumuzu yazacak olursak;

 

  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. entity pwm_servo is
  4. Generic(
  5. count_max : integer := 1000000;
  6. duty_max : integer := 100000;
  7. duty_min : integer := 50000;
  8. duty_delta : integer := 200
  9. );
  10. Port( CLK : in STD_LOGIC;
  11. PWM : out std_logic
  12. );
  13. end pwm_servo;
  14.  
  15. architecture Behavioral of pwm_servo is
  16.  
  17. signal counter: integer range 0 to count_max := 0;
  18. signal duty : integer range duty_min to duty_max := duty_min;
  19. begin
  20. prescaler: process(all)
  21. variable direction_up : boolean := true;
  22. begin
  23. if rising_edge(clk) then
  24. if counter < count_max then
  25. counter <= counter + 1;
  26. else
  27. if direction_up then
  28. if duty < duty_max then
  29. duty <= duty + duty_delta;
  30. else
  31. direction_up := false;
  32. end if;
  33. else
  34. if duty > duty_min then
  35. duty <= duty - duty_delta;
  36. else
  37. direction_up := true;
  38. end if;
  39. end if;
  40. counter <= 0;
  41. end if;
  42. end if;
  43. end process;
  44. pwm_s: process(all)
  45. begin
  46. if counter < duty then
  47. pwm <= '1';
  48. else
  49. pwm <= '0';
  50. end if;
  51. end process;
  52. end Behavioral;

 

Yorum

  1. By Furkan

    Cevapla

    • By Oğuzhan Gültekin

      Cevapla

  2. By Serkan Öztürk

    Cevapla

    • By Oğuzhan Gültekin

      Cevapla

      • By Oğuz ŞANLI

        Cevapla

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir