1- Giriş:

Bu örnekte 4 adet servo motoru paralel olarak FPGA ile nasıl kontrol edebileceğimizi göreceğiz.

Servo motorların nasıl çalıştığını bilmiyorsanız sorun değil. Aşağıdaki makaleyi okumanızı tavsiye ederim.

http://www.elektroboard.com/v2/modules/smartsection/item.php?itemid=2

 

2- Uygulama:

4 servo motor için 4 tane farklı konum belirlenmiştir. Düğmelere basmak servo motorun önceden tanımlı bir yöne dönmesini sağlamaktadır. Herhangi bir düğmeye basılmadığında ise orta konuma gelmektedir. Aşağıda servo motorları paralel olarak kontrol eden kodu bulabilirsiniz:

  1. module servo_denetleyici(SAAT,SERVO1,SERVO2,SERVO3,SERVO4,DUGME1,DUGME2,DUGME3);
  2. input               SAAT;
  3. output              SERVO1;
  4. output              SERVO2;
  5. output              SERVO3;
  6. output              SERVO4;
  7. input               DUGME1;
  8. input               DUGME2;
  9. input               DUGME3;
  10. reg         [30:0]  sayac1;
  11. reg         [30:0]  sayac2;
  12. reg                 servom1;
  13. always @ (posedge SAAT) begin
  14. if(DUGME1) begin
  15. if(sayac1 < 50000) begin
  16. sayac1      <= sayac1 + 1;
  17. servom1     <= 1;
  18. end
  19. else if(sayac1 == 1000000) begin
  20. sayac1      <= 0;
  21. servom1     <= 0;
  22. end
  23. else begin
  24. sayac1      <= sayac1 + 1;
  25. servom1     <= 0;
  26. end
  27. end
  28. else if(DUGME2) begin
  29. if(sayac1 < 60000) begin
  30. sayac1      <= sayac1 + 1;
  31. servom1     <= 1;
  32. end
  33. else if(sayac1 == 1000000) begin
  34. sayac1      <= 0;
  35. servom1     <= 0;
  36. end
  37. else begin
  38. sayac1      <= sayac1 + 1;
  39. servom1     <= 0;
  40. end
  41. end
  42. else if(DUGME3) begin
  43. if(sayac1 < 100000) begin
  44. sayac1      <= sayac1 + 1;
  45. servom1     <= 1;
  46. end
  47. else if(sayac1 == 1000000) begin
  48. sayac1      <= 0;
  49. servom1     <= 0;
  50. end
  51. else begin
  52. sayac1      <= sayac1 + 1;
  53. servom1     <= 0;
  54. end
  55. end
  56. else begin
  57. if(sayac1 < 75000) begin
  58. sayac1      <= sayac1 + 1;
  59. servom1     <= 1;
  60. end
  61. else if(sayac1 == 1000000) begin
  62. sayac1      <= 0;
  63. servom1     <= 0;
  64. end
  65. else begin
  66. sayac1      <= sayac1 + 1;
  67. servom1     <= 0;
  68. end
  69. end
  70. end
  71. assign      SERVO1  =   servom1;
  72. assign      SERVO2  =   servom1;
  73. assign      SERVO3  =   servom1;
  74. assign      SERVO4  =   servom1;
  75. endmodule

3- Son:

Gördüğünüz gibi 4 adet servo motoru aynı yöne aynı anda döndürmek çok işlevsel değil. Aslında bu kodun yazılma amacı ileride Haktan Canlı arkadaşım ile yapacağım robot kol için bir temel oluşturmaktı. Robot kol uygulamasında servo motorların hareketi FPGA’de tanımladığım bir bellekteki pozisyonlara göre yapılacak. Robot kolu yaptığımızda sitemden paylaşacağım tabi. Umarım işinize yarar. İyi çalışmalar.