instructables VHDL 電機速度控制決定方向和速度左右速度控制器

筆記: 此頁面是更大構建的一部分。 請確保您從這裡開始,以便您了解以下內容在更大項目中的位置
超過view
電機速度和方向控制是光電探測器機器人中的兩個主要部門之一,另一個是光電探測器或光探測器部門。 光電探測器部門專注於機器人的視覺,而電機速度和方向控制部門則專注於機器人的運動。 電機速度和方向控製過程數據來自光電探測器部分,並以電機運動的形式給出物理輸出。
這個劃分的目的是控制尋光機器人左右兩個電機的速度和方向。 要確定這些值,您將需要相機捕獲並通過閾值處理的光的大小和位置。 您還需要測量每個電機的速度。 通過這些輸入,您將能夠輸出每個電機的 PWM(脈衝寬度調製)值。
為此,您需要製作這些 VHDL 模塊(也在下面鏈接):
- 控制
- 誤差計算
- 二進制轉換
- 沒有光源
您可以在此處查看該部門的 VHDL 代碼。
補給品
我們建議使用 ISE Design Suite 14.7 進行編碼,因為它也可用於測試 VHDL 中的代碼。 但是,要將代碼上傳到 BASYS 3,您需要安裝 Vivado(版本 2015.4 或 2016.4)並編寫擴展名為 .xdc 的約束。
VHDL 電機速度控制:決定方向和速度,左右速度控制器:第 1 頁
指導步驟
第 1 步:控制
為了解如何控制尋光機器人的行為,我們將解釋機器人看到光源時所需的行為。 此行為將根據光源的位置和大小進行控制。
使用的算法類似於 RC 機器人控制器,有一個可以向左或向右轉動的槓桿,另一個可以向前或向後轉動的槓桿。
為了尋找光線,如果光源的位置就在機器人的正前方,則您希望該機器人沿直線移動。 為此,您需要左右電機的速度相同。 如果燈位於機器人的左側,您希望右側電機比左側電機移動得更快,以便機器人可以向左轉向燈。 相反,如果燈位於機器人的右側,則您希望左側電機比右側電機移動得更快,以便機器人可以向右轉向燈。 這類似於 RC 控制器的左桿,您可以在其中控制是要向左、向右還是直線移動機器人。
然後,如果光源很遠(小光源),您希望機器人向前移動,或者如果檢測到的光源太近(大光源),則向後移動。 您還希望機器人離光源越遠,機器人移動得越快。 這類似於 RC 控制器的右桿,您可以在其中控制是要向前還是向後移動,以及移動的速度。
然後你可以推導出每個電機速度的數學公式,我們選擇-255到255之間的速度範圍。負值表示電機將向後轉動,而正值表示電機將向前轉動。
這就是這個機器人運動的基本算法。 要了解有關此模塊的更多信息,請單擊此處。
第二步:誤差計算
由於您已經有了電機的目標速度和方向,因此您還需要考慮電機的測量速度和方向。 如果它已達到速度目標,我們希望電機僅依靠其動量移動。 如果沒有,我們想增加電機的速度。 在控制理論中,這被稱為閉環反饋控制系統。
要了解有關此模塊的更多信息,請單擊此處。
第 3 步:二進制轉換
從之前的計算中,您已經知道每個電機所需的動作。 但是,計算是使用帶符號的二進製文件完成的。 該模塊的目的是將這些帶符號的值轉換為PWM發生器可以讀取的值,即方向(順時針或逆時針)和速度(範圍在0到255之間)。 此外,由於來自電機的反饋以無符號二進制形式測量,因此需要另一個模塊將無符號值(方向和速度)轉換為可由誤差計算模塊計算的有符號值。 要了解有關此模塊的更多信息,請單擊此處。
第 4 步:沒有光源
您製作了一個機器人,當機器人檢測到光線時,它會移動以尋找光線。 但是當機器人沒有檢測到光時會發生什麼? 該模塊的目的是指示出現這種情況時要做什麼。
尋找光源的最簡單方法是讓機器人原地旋轉。 旋轉一定秒數後,如果機器人還沒有找到光源,你想讓機器人停止移動,以節省電量。 再過設定的秒數後,機器人應再次原地旋轉以尋找光線。 要了解有關此模塊的更多信息,請單擊此處。
第 5 步:它是如何工作的
您可以參考上圖進行解釋。 如本教程開頭所述,您將需要來自閾值部門的輸入“大小”和“位置”。 為了確保這些輸入有效(例如ample,當你收到 size = 0 時,size 確實為零,因為相機沒有檢測到光線,而不是因為相機仍在初始化)你還需要某種指示器,我們稱之為“READY”。 這些數據將由控件(Ctrl.vhd)處理以確定每個電機的目標速度(9 位,有符號)。
為了獲得更穩定的電機輸出,您需要在閉環系統中使用反饋。 這需要從電機速度測量部門輸入每個電機的“方向”和“速度”。 由於您希望將這些輸入包含在您的計算中,因此您必須將這些無符號值轉換為 9 位有符號二進制數。 這是由無符號到有符號二進制轉換器 (US2S.vhd) 完成的。
誤差計算 (error.vhd) 所做的是從目標速度中減去測量速度以確定每個電機的動作。 這意味著當兩者俱有相同的值時,減法變為零並且電機將僅依靠其動量移動。 您還可以添加一個倍增因子,以便機器人可以更快地達到目標速度。
由於電機控制器需要每個電機的速度和方向,因此您必須將動作的有符號值轉換為兩個單獨的無符號值:速度(1 位)和方向(8 位)。 這是由有符號到無符號二進制轉換器 (S2US.vhd) 完成的,並將成為電機控制部門的輸入。
我們還添加了一個模塊來確定在未檢測到光時要做什麼(no light counter. Bhd)。 由於這個模塊基本上是一個計數器,它會計算機器人需要旋轉或停留在原地的時間。 這將確保機器人“看到”它的環境,而不僅僅是它前面的東西,並在沒有真正可用的光源時節省電池電量。
第 6 步:結合 Files
要結合 files,您需要連接每個模塊的信號。 為此,您必須製作一個新的頂級模塊 file. 將先前模塊的輸入和輸出作為組件插入,為連接添加信號並將每個端口分配給相應的對。 大家可以參考上圖的連線,看這裡的代碼。
第 7 步:測試
完成整個代碼後,在將代碼上傳到電路板之前,您需要知道代碼是否有效,尤其是因為部分代碼可能由不同的人編寫。 這需要一個測試台,您將在其中輸入虛擬值並查看代碼是否按照我們希望的方式運行。 您可以從測試每個模塊開始休息,如果它們都正常工作,您就可以測試頂級模塊。
第 8 步:在硬件上試用
在您的計算機上測試完您的代碼後,您可以在真實硬件上測試該代碼。 你必須做出約束 file 在 Vivado (.xdc file 對於 BASYS 3) 來控制哪些輸入和輸出進入哪些端口。
重要提示: 我們通過艱難的方式了解到電子元件可能具有電流或體積的最大值tages。 請務必參考數據表中的值。 對於 PMOD HB5,一定要設置 voltage 來自 12 伏的電源(因為這是所需的電壓tage 用於電機),以及電機移動所需的盡可能小的電流。
第 9 步:將其與其他部分組合
如果前面的步驟成功,則將代碼與其他組合併,以便將最終代碼上傳到機器人中。 然後,瞧! 你已經成功地製作了一個尋光機器人。
第 10 步:貢獻者
由左至右:
- 安東尼烏斯·格雷戈里烏斯·迪文·里瓦爾第
- 費利克斯維古納
- 尼古拉斯桑賈亞
- 理查德·梅迪安托

很不錯: VHDL 電機速度控制:決定方向和速度,左右速度控制器:第 6 頁
謝謝你再view! 這個項目實際上只是課程項目的一部分(帶有 BASYS 3 板和 OV7670 相機的尋光機器人),所以我會盡快將鏈接添加到課程的指導中!
驚人的: 我期待看到一切都放在一起。
文件/資源
![]() |
instructables VHDL 電機速度控制決定方向和速度左右速度控制器 [pdf] 指示 VHDL Motor Speed Control Decision Direction and Speed Left and Right Speed Controller, VHDL Motor Speed, Control Decision Direction and Speed 左右速度控制器 |





