歡迎您光臨本站 登入註冊首頁

FPGA控制遠程控制伺服馬達

admin @ 2014-03-26 , reply:0

概述

遠程控制伺服馬達FPGA也適合用來控制“遠程控制伺服馬達”(R/CServos)什麼是遠程伺服馬達?“遠程控制伺服馬達”由有電動機和一系列安裝在盒子里的……

遠程控制伺服馬達
FPGA也適合用來控制“遠程控制伺服馬達”( R/C Servos)

什麼是遠程伺服馬達?
“遠程控制伺服馬達”由有電動機和一系列安裝在盒子里的齒輪組成。此設備有一根轉動軸,你可以通過使用PWM(脈寬調製)脈衝來精確控制它的轉向。下面是一副它的圖片(雖然又舊又破,但是完成了我們的設計目的)。
 (圖中句子的意思:你可以通過發送脈衝信號到白線上來控制這個輪子的轉角)
從下面的連接,可以找到一些有用的參考資料:

  • 遠程控制伺服馬達的控制
  • 遠程控制飛機伺服馬達使用指南(A Guide to Using RC Airplane Servos)
  • 遠程控制伺服馬達 101(R/C Servos 101)
  • 遠程控制伺服馬達脈衝的PPM,PCM編碼(R/C Servo Pulse, PPM and PCM coding )

他們用在哪裡?

  • 遠程控制模塊中 (汽車, 飛機等...).
  • 機器人技術.

伺服系統的連接
伺服馬達有三根線,它們是:

  • 紅色:電源線(+5V)
  • 黑色:地
  • 白色:轉動控制(PWM)

PWM脈衝
    控制脈衝的寬度需要調整在1-2毫秒之間。1.5毫秒寬度的脈衝使得轉軸轉到其轉動範圍的中間位置。脈衝信號需要以固定時間間隔(10-20毫秒)發送,即使不需要調整轉軸的轉向,否則的話,伺服馬達將不會再維持轉軸原有的轉向。

FPGA產生PWM脈衝
讓我們以8位(0-255)的精度來控制這個伺服馬達。 這意味著我們需要以3.9微秒(1mS/256)的精度控制產生寬度在1-2毫秒之間的PWM脈衝.

時鐘分頻
考慮使用25MHz的時鐘信號(每周期40nS),首先要做的就是將時鐘分頻產生周期為3.9uS的時鐘信號。

parameter ClkDiv = 98; // 25000000/1000/256 = 97.56
reg [6:0] ClkCount;
reg ClkTick;
always @(posedge clk) ClkTick <= (ClkCount==ClkDiv-2);
always @(posedge clk) if(ClkTick) ClkCount <= 0; else ClkCount <= ClkCount + 1;

我們引入一個12位的計數器,用“ClkTick”作為其技術節拍。

reg [11:0] PulseCount;
always @(posedge clk) if(ClkTick) PulseCount <= PulseCount + 1;

    每拍的時間間隔為3.9uS,所以 256 拍一共持續1mS的時間,並且12位的“PulseCount”計數器每16mS會回到初值。正好是我們需要產生新的PWM信號的時間間隔。

產生PWM脈衝
我們在"PulseCount"等於0的時候開始發出脈衝信號,在其等於256到511之間的某個值時停止該脈衝,這樣就可以產生寬度在1到2mS之間的脈衝信號。假設"RCServo_position"是一個8位的位置值(0到255),我們在其前補上"0001"得到一個12位的值在256到511之間的新變數。最後,我們將這個12位的變數與“PulseCount”比較來產生脈衝信號。

reg RCServo_pulse;
always @(posedge clk) RCServo_pulse = (PulseCount < {4'b0001, RCServo_position});
完整的代碼在

這裡

可以看到,僅需要很少的硬體資源就可以控制“遠程控制伺服馬達”,所以FPGA可以同時控制多個這樣的“遠程控制伺服馬達”。
下面該你們去實踐了:)


[admin via 研發互助社區 ] FPGA控制遠程控制伺服馬達已經有5342次圍觀

http://cocdig.com/docs/show-post-43145.html