一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

RTL級機器人電機控制器的FPGA設計

FPGA研究院 ? 來源:OpenFPGA ? 2025-07-07 14:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

借助Verilog,在FPGA中實現(xiàn)了帶編碼器的兩臺電機電機控制系統(tǒng)的RTL級設計。

a9fc0b2c-56d4-11f0-9ca0-92fbcf53809c.jpg

介紹

借助硬件描述語言 (HDL) Verilog 和 AMD Vivado 設計套件,在 AMD Spartan-7 FPGA 中實現(xiàn)帶編碼器的兩個電機的控制器系統(tǒng)的 RTL 設計。

在這個項目中,使用了搭載 Spartan-7 FPGA開發(fā)板,將使用它作為電機控制器系統(tǒng)。

在項目開始前,肯定會有人問:“既然用MCU編程要簡單快捷得多,為什么還要用 FPGA 來做這么復雜的工作呢?” 這個問題問得好。所以,我們將簡要探討一下人們選擇 FPGA 的各種原因。

在 FPGA 與MCU的對比競爭之后,將介紹電機驅(qū)動器、H 橋、PWM、編碼器、PID 反饋控制系統(tǒng)、編碼和測試、收集日期的分析等多方面的基本概念。然后,將詳細介紹如何構建自己的 FPGAbot。

FPGA 與MCU

為特定產(chǎn)品或可交付系統(tǒng)選擇“最佳”處理技術,在許多方面對其成功至關重要。影響因素包括支持成本、供應鏈、盈利能力、壽命等等。從工程角度來看,決策中最具影響力的典型因素是時間、成本、面積和功耗。

FPGA 優(yōu)勢

FPGA 以其低延遲、固有的并行處理能力和靈活性而聞名。此外,F(xiàn)PGA還能為許多獨立的計算模塊、外部傳感器和執(zhí)行器等提供高確定性和精確的定時/延時。因此,會發(fā)現(xiàn) FPGA 被用于許多關鍵任務應用,例如:

1)軍事和航空航天系統(tǒng)

雷達系統(tǒng) - 例如實時(RT)信號處理和數(shù)據(jù)采集。 無人駕駛飛行器(UAV)——例如飛行控制、傳感器處理和安全通信。

航空電子設備、衛(wèi)星、導彈制導系統(tǒng)等

2)工業(yè)控制系統(tǒng)(ICS)

對電網(wǎng)、煉油廠等關鍵基礎設施進行實時控制和監(jiān)控。

工業(yè)自動化 - 機器控制,實現(xiàn)故障檢測、冗余和容錯控制。

功能安全——例如汽車和工業(yè)控制的容錯系統(tǒng)。

3)醫(yī)療器械

診斷成像系統(tǒng) - 快速準確的數(shù)據(jù)處理。

病人監(jiān)護——FPGA 為病人監(jiān)護設備提供高性能、RT 監(jiān)護和信號分析。

救生設備...

ETC。

4) 電信等

許多關鍵任務應用程序需要實時處理、確定性行為、低延遲、可編程性、并行處理能力、安全性和功率效率。

MCU優(yōu)勢

對于成本敏感的產(chǎn)品或普通愛好者來說,MCU 是節(jié)省成本和加快系統(tǒng)開發(fā)周轉(zhuǎn)的更好選擇。

微控制器使用標準編程語言進行軟件開發(fā),例如 Python/microPython 和 C/C++。FPGA 設計的學習曲線(架構、硬件描述語言、時序問題等)則要陡峭得多,需要投入大量時間和經(jīng)驗才能高效完成。

MCU 也更適合外設接口和執(zhí)行重復性任務。通用架構、串行執(zhí)行流程以及易于外設集成的特性,使得 MCU 在非關鍵任務系統(tǒng)中更具吸引力。

了解了這些之后,現(xiàn)在讓我們深入了解移動機器人電機控制系統(tǒng)的細節(jié)!

高級電機控制器系統(tǒng)設計

本節(jié)介紹了移動機器人電機控制器設計所需的主要外部元件和FPGA功能模塊。此外,還提供了系統(tǒng)的高層原理圖。

電機驅(qū)動器

FPGA 需要分別驅(qū)動兩個 12V 直流有刷電機。我以前用過 12V 直流電機,發(fā)現(xiàn)這個電壓水平能夠滿足我的 DIY 機器人所需的扭矩。我通常會選擇低轉(zhuǎn)速電機(例如 190 RPM),因為它們比高轉(zhuǎn)速電機提供更大的扭矩。

L298N H 橋電機驅(qū)動器是驅(qū)動 12V 電機的絕佳選擇,因為它價格低廉,業(yè)余愛好者已經(jīng)寫了很多關于其使用的文章,并且易于連接。

L298N 本質(zhì)上是一個放大器,其數(shù)字接口由較小的輸入控制電壓(例如 3.3V 或 5V)控制,并在較大的直流電壓范圍內(nèi)產(chǎn)生比例輸出。L298N 模塊可在 5 至 35V 直流電壓 (Vs) 范圍內(nèi)工作。由于我們使用的是 12V 直流電機,因此源電壓為 12V,如圖 1 所示。

注意:如果要啟用 L298N 板載的 5V 電源調(diào)節(jié)器,則最大輸入直流電源不應超過 12V。否則,5V 直流調(diào)節(jié)器會過熱并關閉。

編碼器

我總是購買配備霍爾效應傳感器的直流電機。這些傳感器可以測量每個電機的速度和旋轉(zhuǎn)方向。在本設計中,編碼器反饋用于PID算法,以保持FPGA機器人直線穩(wěn)定地移動。里程也可以根據(jù)這些信息計算出來。將在后面的技術回顧部分和FPGA電機控制器設計細節(jié)部分詳細討論編碼器的工作原理和使用方法。

因此,該系統(tǒng)至少需要以下功能元素:

頂層架構

可以選擇 (1) 在使能端使用脈沖寬度調(diào)制 (PWM),并通過 IN1、2、3 和 4 上的高低邏輯電平控制方向(圖 2a);或 (2) 在所有四個輸入端口上使用 PWM,并將使能端設置為邏輯高電平(圖 2b)。雖然已經(jīng)創(chuàng)建了這兩個版本,但在本項目描述中,將選擇選項 (1)(圖 2b)。選擇選項 (1) 的原因?qū)⒃?L298N 部分解釋。

輸入設定點(PWM 的占空比設置)和旋轉(zhuǎn)方向源信號選擇器。

編碼器計數(shù)器

PID 反饋控制系統(tǒng)/算法將電機速度同步到設定值。

數(shù)字控制器,在本例中是 Spartan-7 FPGA。

aa0ea80e-56d4-11f0-9ca0-92fbcf53809c.png

圖1:L298N和12V編碼器電機原理圖。

aa15ed26-56d4-11f0-9ca0-92fbcf53809c.png

圖 2a:帶有PWM源啟用輸入的FPGA電機控制器框圖。

aa216f66-56d4-11f0-9ca0-92fbcf53809c.png

圖2b:帶有PWM源INx輸入的FPGA電機控制器框圖。

對于上面列出的前兩點,即從設定值生成PWM信號所需的邏輯,了解L298N的工作原理非常有幫助。因此,下一節(jié)(可選閱讀)將介紹這部分內(nèi)容以及其他背景知識。

技術回顧

本節(jié)將對組件進行技術回顧,并介紹與這些組件接口所需的數(shù)字和模擬概念。本節(jié)涵蓋的信息并非執(zhí)行本項目的必要條件,但有助于理解創(chuàng)建各種模塊和邏輯的原因。

L298N電機驅(qū)動器

如圖 3 所示,L298N 可歸類為一種直流放大器,它在其輸入端轉(zhuǎn)換脈沖寬度調(diào)制 (PWM) 信號,在本例中為 0 和 3.3VDC,并將其按比例轉(zhuǎn)換為穩(wěn)定的 0V 直流電壓至 Vs,如前所述。

aa271934-56d4-11f0-9ca0-92fbcf53809c.png

圖3:L298N電機驅(qū)動器

FPGA 的較低輸出電壓 0 - 3.3V 能夠驅(qū)動 TTL 邏輯輸入 (IN1 - IN4) 并使能 A 和 B 的原因在于 [1] 中列出的規(guī)格以及圖 4b 所示的規(guī)格。其中說明如下:

控制信號輸入電壓范圍:

邏輯低電平:-0.3V≤Vin≤1.5V

邏輯高電平:2.3V ≤ Vin ≤ Vss

其中,Vss 由 L298N 模塊板載的 5V 直流穩(wěn)壓器供電。由于 FPGA 不會從 L298N 接收數(shù)字數(shù)據(jù),因此無需邏輯電平轉(zhuǎn)換器

L298N 模塊是基于 L298 集成電路 (IC) 構建的。L298 IC 是一款高電壓、高電流雙全橋驅(qū)動器。L298 IC 的額定電壓 Vs = 5V 至 46V(圖 2a 和 2b),但 L298N 模塊在 35V 以上的電壓下存在散熱和元件限制。

aa35826c-56d4-11f0-9ca0-92fbcf53809c.png

圖 4a:L298IC-雙全橋驅(qū)動器。[1]

aa3a9004-56d4-11f0-9ca0-92fbcf53809c.png

圖 4b:L298部分電氣特性列表[1]。

L298 雙 H 橋

讓我們快速看一下 H 橋電路。如果還沒有完全理解下面的信息,不用擔心,但為了完整性,我想補充一下。另外,如果愿意,可以跳過本節(jié)。

圖 5 是 [1] 中 L298 框圖的復制版。圖中展示了數(shù)字電路(與門和非門)和模擬電路(BJT 晶體管電阻)的混合。邏輯門和 BJT 晶體管構成了電流控制電路。為了更好地理解電流控制電路的整體功能,下面給出了該圖的簡化版本及其說明。

aa3e9744-56d4-11f0-9ca0-92fbcf53809c.png

圖5:L298IC框圖[1]

圖 6 用開關概念代替了電流控制電路。這展示了 H 橋電路的工作原理,我們也將用它來解釋在 IN 引腳和 EN 引腳上使用 PWM 的區(qū)別。

aa499e82-56d4-11f0-9ca0-92fbcf53809c.png

圖6:簡化的單H橋電路表示

要使電機正轉(zhuǎn),需要閉合 S1 和 S4,完成從 Vs 經(jīng)電機到地的電路(即電流路徑)。S3 和 S2 根據(jù)需要保持斷開。要使電機反轉(zhuǎn),則需要相反的情況,即閉合 S3 和 S2,斷開 S1 和 S4。圖 7a 和 b 說明了這一概念。

aa4d8f7e-56d4-11f0-9ca0-92fbcf53809c.png

圖 7a 和 b:電機正向和反向旋轉(zhuǎn)。

將此電路分析與圖6聯(lián)系起來,讓我們看看用與邏輯門和BJT實現(xiàn)的開關。下面的邏輯方程等同于與門的輸出,我們在這里將其標記為_d(代表數(shù)字)。

SW1_d = IN1 AND ENA

SW2_d = NOT IN1 AND ENA

SW3_d = IN2 AND ENA

SW4_d = NOT IN2 AND ENA

當上述任意 SWx_d 等于邏輯高電平時,相應的 BJT 導通。這是通過基極-發(fā)射極正向偏置(Vbe 超過基極輸入和發(fā)射極輸出引腳之間 +0.7V 的壓降閾值)來實現(xiàn)的。當集電極電壓分別大于基極和發(fā)射極電壓(Vc >> Vb > Ve)時,導通的晶體管就像一個閉合的開關。參見圖 8。

aa514e0c-56d4-11f0-9ca0-92fbcf53809c.png

圖8:NPN晶體管[5]。

希望開關類比能夠簡化數(shù)字晶體管的控制邏輯。如果感興趣并且具備相關背景知識,建議找一本好書或參考資料,進一步了解晶體管的工作原理以及不同類型的晶體管。

接下來,如果需要復習一下 PWM,我們來快速回顧一下。如果不需要,可以跳過此部分。

PWM

為了使連接到 L298N 電機驅(qū)動器的電機實現(xiàn)變速,我們使用了 PWM(脈沖寬度調(diào)制)。PWM 是一種獲取可變模擬電壓的數(shù)字方法。因此,方波數(shù)字信號的占空比(邏輯高電平時間與總脈沖周期的關系)可以通過增加或減少來改變模擬電路中的平均電壓(圖 9)。例如,如果 NPN 晶體管的基極-發(fā)射極結(jié)在給定的時間內(nèi)導通時間更長,則電流會更大,從而導致集電極輸出連接和發(fā)射極(在本例中為地)之間的電壓降 (Vce) 更大。圖 10 演示了這一概念 [7]。

aa55c23e-56d4-11f0-9ca0-92fbcf53809c.png

圖9:各種占空比產(chǎn)生的 PWM[6]。

ab0885d6-56d4-11f0-9ca0-92fbcf53809c.png

圖10:使用 PWM 和 NPN BJT 的直流電機電路[6]。

L298N PWM輸入響應特性

如本文開頭所述,使用 PWM 實現(xiàn)變速有兩種不同的方法。方法 1 是用 PWM 驅(qū)動輸入引腳(IN1、2、3 和 4),并將使能引腳設置為高電平,如圖 11a 所示。方法 2 是將輸入引腳對設置為高電平和低電平,以獲得正確的旋轉(zhuǎn)方向,并用 PWM 驅(qū)動使能引腳,以實現(xiàn)變速,如圖 11b 所示。

ab0c904a-56d4-11f0-9ca0-92fbcf53809c.png

圖11a:使用PWM控制電機速度的方法1[2]。

ab1629c0-56d4-11f0-9ca0-92fbcf53809c.png

圖 11b:使用 PWM 控制電機速度的方法 2 [2]。

使用方法 1 可獲得如圖 7a 和 7b 所示的電流。唯一的區(qū)別在于每個脈沖周期內(nèi)從 Vs 到 Gnd 的電流流動時間。

使用方法 2 會得到略有不同的響應。如果驅(qū)動電機正向旋轉(zhuǎn),IN1 上的 PWM 信號將處于活動狀態(tài),而 IN2 上的 PWM 信號將保持在低電平。由于 ENA 已通過跳線設置為邏輯高電平,因此開關切換完全由 IN1 上的有效 PWM 信號控制。將 IN2 和 ENA 都設置為受控的穩(wěn)定值(0 和 1)后,SW3 始終設置為“關閉”或“打開”,SW4 始終設置為“打開”或“閉合”。但是,用于 SW4(~In1 和 EnA)的非門將在 PWM 占空比的低電平期間打開 SW2。這發(fā)生在 SW1 處于“關閉”或“打開”狀態(tài)時。因此,電機的正極和負極連接到地。這會導致在 SW2 處于“打開”狀態(tài)時釋放反向的感應電動勢 (EMF)。這種配置在較低轉(zhuǎn)速下有用,但在較高轉(zhuǎn)速下,由于反向 EMF 電壓的反復損耗,會導致更高的電流消耗。

ab1a6094-56d4-11f0-9ca0-92fbcf53809c.png

圖12a和b:左圖,In1+PWM 周期的一部分。右圖,PWM周期的接地狀態(tài)。

12V直流編碼器齒輪電機

我們?yōu)橐苿訖C器人選擇的直流電機是專門配備磁編碼器的。這對于此類直流電機來說很常見。對電機控制精度要求更高的直流電機則使用光學編碼器。

旋轉(zhuǎn)磁編碼器有兩個霍爾效應傳感器。它們相對于電機軸線呈 90 度角放置。圖 13 展示了這種布置如何產(chǎn)生相位差 90 度的編碼器信號。

ab1e8c00-56d4-11f0-9ca0-92fbcf53809c.png

圖13:霍爾效應傳感器用于測量轉(zhuǎn)速和方向[8]。

此圖簡化了,因為只使用了兩個磁極。大多數(shù)帶有磁編碼器的電機都有數(shù)十到數(shù)百個這樣的磁極,從而提高了電機旋轉(zhuǎn)位置的分辨率。此外,有些系統(tǒng)會配備 4 個霍爾傳感器,以進一步提高精度。

上面顯示的霍爾效應傳感器產(chǎn)生的兩個信號被指定為通道 A 和 B。這些通道具有以下特點:

它們的相位差為 90 度(見圖 14)。

如果 A 領先于 B,那么電機就只能朝一個可能的方向轉(zhuǎn)動。

如果 B 領先于 A,那么電動機的轉(zhuǎn)動方向與前一個子彈的轉(zhuǎn)動方向相反。

方波的頻率與齒輪的旋轉(zhuǎn)速度成正比。

ab2286f2-56d4-11f0-9ca0-92fbcf53809c.png

圖14:編碼器通道A和B 波形。

通過計算電機單次旋轉(zhuǎn)產(chǎn)生的脈沖數(shù),可以推導出由所用物理極數(shù)獲得的分辨率。該信息可用于估算機器人的里程,方法是使用累積計數(shù)(我喜歡稱之為“tics”)來計數(shù)/旋轉(zhuǎn),并使用車輪的直徑(或半徑)來計算其周長。

FPGA電機控制器設計細節(jié)

本節(jié)將詳細介紹移動機器人電機驅(qū)動系統(tǒng)的關鍵 Verilog 代碼。為了方便起見,該代碼將與圖 2a 所示的系統(tǒng)框圖關聯(lián)起來,并在下面的圖 15 中復制。此外,我推導的 PID 算法可用作超前-跟隨電機速度比較系統(tǒng),并將進行詳細解釋。

Verilog 源層次結(jié)構

從圖 15 所示的初始頂層設計中,派生出 Verilog 模塊層次結(jié)構,然后在 AMD Vivado 中創(chuàng)建(圖 16)。

ab265534-56d4-11f0-9ca0-92fbcf53809c.png

圖15:電機控制系統(tǒng)的初始和最終框圖

ab2a6926-56d4-11f0-9ca0-92fbcf53809c.png

圖16:AMDVivado中的Verilog模塊層次結(jié)構

外部引腳聲明

接下來是用于 FPGA 與外部接口的輸入和輸出信號聲明的 Verilog 代碼(圖 17)。在本例中,它用于 L298N、兩個 12V 直流編碼器電機(圖 1)以及 RC 接收器單元(未顯示)。

ab2ea086-56d4-11f0-9ca0-92fbcf53809c.png

圖17:Verilog-頂層模塊I/O定義至外部引引腳

編碼器計數(shù)器模塊

編碼器計數(shù)器模塊所用的代碼源自fpga4fun.com [9](http://fpga4fun.com/)。在那里,可以找到詳細的解釋以及描述所用邏輯的波形圖。本質(zhì)上,只需使用系統(tǒng)時鐘進行過采樣、幾個邏輯門和 D 觸發(fā)器(為跨時鐘域添加了幾個額外的觸發(fā)器)即可確定自旋的計數(shù)和方向。圖 18 展示了代碼的實現(xiàn)。

ab3a70d2-56d4-11f0-9ca0-92fbcf53809c.png

圖18:編碼器計數(shù)器邏輯[9]。

我還添加了僅創(chuàng)建正計數(shù)的邏輯。這對于我們稍后介紹的PID是必需的。

RC信號選擇模塊

此模塊的名稱有點用詞不當。最初,該模塊僅用于接收來自 RC 模塊的方向信號,并將每個信號轉(zhuǎn)換為兩位值(圖 19)。一位指示左輪應該前進還是后退,另一位指示右輪。每位都位于每個設定值(左輪和右輪)的最高有效位 (MSB)。目前,來自此模塊并進入 PID 模塊的左右電機設定值是相同的值(位 [6:0])??梢栽陧敳磕K中更改用戶設定值,方法是將 curr_setpt1 和 2 初始化為新值,然后運行 Vivado 進行綜合、實現(xiàn)并生成比特流。此過程最多需要兩分鐘左右。

ab41cf4e-56d4-11f0-9ca0-92fbcf53809c.png

圖19:rc_signal_selectv 的 RC 啟用代碼部分

ab4c6328-56d4-11f0-9ca0-92fbcf53809c.png

圖 20:添加到rc_signal_select.y的非 RC 模式的附加多路復用邏輯。

PWM模塊

如上所述,用戶設定值(頂層名為 curr_setpt1 & 2)存儲在 8 位寄存器的低 7 位中。因此,設定值取值范圍為 0 至 127。該值表示饋入 L298N 的 PWM 的占空比。PWM 如何將設定值轉(zhuǎn)換為占空比時間寬度?這是通過 PWM 模塊中的 7 位計數(shù)器實現(xiàn)的。PWM 的輸出最初為邏輯高電平(計數(shù)器 = 0)。當以 256 kHz 時鐘頻率計數(shù)的計數(shù)器計數(shù)到設定值時,PWM 輸出邏輯低電平,直到計數(shù)器達到 127。結(jié)果是一個 2kHz 方波 PWM,占空比為設定值/127。

使用 Vivado 時鐘向?qū)?100 MHz 系統(tǒng)時鐘生成了一個 8.192 MHz 時鐘。這樣,256 kHz 模塊中計數(shù)器的一位只需要與邏輯“1”進行比較。最終的 PWM 頻率為 2 kHz,接近 1.5 kHz 的示例 [2],并且運行良好。

PID

PID 控制器模塊的設計并不像我想象的那么簡單。問題在于設定值(0 - 127)與每設定采樣周期 T(例如 100 毫秒)讀回的增量計數(shù)之間的轉(zhuǎn)換。圖 21 展示了討論中的 PID 反饋回路框圖。

ab5784ce-56d4-11f0-9ca0-92fbcf53809c.png

圖 21:時間采樣PID 控制反饋回路

對我來說,這里的問題是我沒有看到(也沒有產(chǎn)生)從 delta tics(計數(shù))/T 回到設定值的低錯誤轉(zhuǎn)換。

因此,決定使用設定點輸入 r[k] 作為基準值,并添加一個基于兩個電機先前計數(shù)和當前計數(shù)差異的修改值(誤差值),從而包括每個電機每個周期 T(速度)總計數(shù)差異的離散時間分析/比較。

根據(jù)使用這些小型直流編碼器電機的經(jīng)驗,注意到,在相同的PWM占空比設置下,一個電機的扭矩往往大于另一個電機。因此,在PID控制算法中,可以快速確定響應速度更快的電機,并將其用作主電機,以匹配速度和行駛距離。這樣,速度修改只會針對速度較慢的電機的設定值輸入r[k]進行。否則,電機的轉(zhuǎn)速會非??斓厣仙?/p>

讓我們看一下所提出的領先-跟隨方程,然后看一下這個離散領先-跟隨電機反饋控制回路的偽代碼。

e[k] = Feedback_1[k] - Feedback_2[k]; (1)

其中,e[k] 是在采樣周期 k 處計算出的誤差,F(xiàn)eedback_n[k] 是在采樣周期 k 處電機 n(即 n = 1 或 2)的編碼器計數(shù)器值。

Δx1[k] = Feedback_1[k] - PrevFeedback_1[k-1] (2)

Δx2[k] = Feedback_2[k] - PrevFeedback_2[k-1] (3)

Δx1x2[k] = Δx1[k] - Δx2[k] (4)

其中,PrevFeedback_n[k-1] 是電機 n 的編碼器計數(shù) Feedback[k-1] 在采樣周期 k-1 保存,Δx1x2[k] 是電機 1 和 2 的轉(zhuǎn)速差。

與圖21所示的PID控制系統(tǒng)一樣,有一些權重值(常數(shù)Ki、Ke和Kv)用于將公式(1)和公式(4)相乘,然后再相加。因此,得到的公式如下(圖22所示的部分代碼):

ab614aa4-56d4-11f0-9ca0-92fbcf53809c.png

我們將在下面討論局部放電后誤差方程的總體方程為:

u[k] = setpoint[k] + motorNSpdMod (5)

其中,N 再次表示電機數(shù)量 1 或 2。

可能注意到,公式 (5) 缺少積分元素。我將解釋如何在 u[k](公式 5)中添加積分,這是平滑 FPGA 代碼部分中誤差振蕩(反復從正到負)的關鍵,但最初并未考慮到這一點。

在 Vivado 中使用 Verilog 編寫設計代碼后,我創(chuàng)建了一個直流編碼器電機的仿真模型,并在測試臺上進行了兩次實例化。該電機模型從被測單元 (UUT) 采樣 PWM 波輸入,并將計算出的轉(zhuǎn)速轉(zhuǎn)換為相應頻率的編碼器 A/B 通道波形。編碼器波形通道被輸入到 UUT 中。此外,我添加了一個“阻力”值,使電機的轉(zhuǎn)速相對于其他電機有所降低。這使得速度較慢的電機的編碼器數(shù)量較少,從而與實際電機和系統(tǒng)響應具有一定的相似性。當然,這是一個非常簡單的模型,因為對一個電機增加的阻力是恒定的。如果在電機模型中至少創(chuàng)建一個簡單的物理慣性響應,將會非常有利。該模型還假設移動機器人使用恒定的平坦水平表面。

不幸的是,我看到機器人落地后的響應與仿真結(jié)果不同,而我之前預想的沒有物理模型會是這樣的。

FPGA 中使用的公式經(jīng)過測試,并根據(jù)需要進行了修改(例如,縮短 T 值、調(diào)整 Ke 和 Kv 值等),最初使用 Arduino Mega MCU 和 FPGAbot(不含 FPGA)在 C/C++ 中進行了驗證。這縮短了驗證和修改的周期。以下代碼片段來自 Mega 測試(函數(shù) PD_Alg(args)),代表了領先跟隨算法(圖 22)。

ab6910e0-56d4-11f0-9ca0-92fbcf53809c.png

圖 22:C/C++代碼中的領先-跟隨PD算法。

代碼的下半部分,motorNSpdMod 會根據(jù)最大設定值 (255 - C_fwdSpd - 20) 進行檢查,以防止值過高。255 是最大占空比值(0 到 255),C_fwdSpd 實際上是兩個電機的設定值(相同值),而 20 只是一個任意值,在 Arduino IDE 控制臺上查看 Serial.print() 滾動顯示的數(shù)據(jù)時,這個值似乎是合理的,如圖 23 所示。

ab744f78-56d4-11f0-9ca0-92fbcf53809c.jpg

圖 23:FPGAbot在地毯上運行的Serial.print()調(diào)試數(shù)據(jù)

從打印出來的數(shù)據(jù)來看,顯然可以通過稍微調(diào)整 Ke 和 Kv,甚至在混合中添加一個積分元素來實現(xiàn)更好的響應。

FPGA 變體的領先-跟隨 PID 方程實現(xiàn)

圖 23a 和 b 分別給出了在領先-跟隨方程 (5) 中添加積分之前和之后的仿真結(jié)果。

ab7fec7a-56d4-11f0-9ca0-92fbcf53809c.png

圖 24a:領先-跟隨PID Verilog 實現(xiàn)仿真。

ab8e8ea6-56d4-11f0-9ca0-92fbcf53809c.png

圖 24b:領先-跟隨PID Verilog 實現(xiàn)仿真。

下圖(圖 25a 和 b)分別表示 e[k](誤差)、dx1dx2(電機速度變化量)和 u[k](電機調(diào)制值)。圖 25b 還添加了 Ki*integral[k](調(diào)制值之和乘以分數(shù))的數(shù)據(jù),這些數(shù)據(jù)列于公式 (6) 中。

u[k] = setpoint[k] + motorNSpdMod + Ki ΣmotorNSpdMod (6)

ab933c62-56d4-11f0-9ca0-92fbcf53809c.png

圖 25a:領先-跟隨控制算法的Verilog 實現(xiàn)中沒有積分部分。

ab9f7fe0-56d4-11f0-9ca0-92fbcf53809c.png

圖 25b:添加了積分的領先跟隨控制算法的Verilog實現(xiàn)。

從這兩幅圖中不難看出,本例中積分非常迅速地抑制了誤差和速度增量的振蕩。這使得 u[k] 的調(diào)整非常平緩,與原始設定值吻合。

領先-跟隨FB控制算法Verilog代碼

圖 22 所示的 C/C++ 代碼在 MCU 上按順序運行。這就是它們的工作原理。為了在 Verilog 中復制順序計算,使用了一個狀態(tài)機,每 10 ns(100 MHz 系統(tǒng)時鐘)從一個計算狀態(tài)切換到另一個計算狀態(tài)。該算法的計算分布在 7 個狀態(tài)中,計算時間為 70 ns。并不擔心將計算時間縮短幾十納秒,并犧牲代碼的可讀性。與采樣周期 T 相比,節(jié)省的時間在持續(xù)時間上要小三個數(shù)量級。為了使其更具可讀性,將計算拆分成多個簡潔的階段會創(chuàng)建數(shù)據(jù)依賴關系,從而需要額外的時鐘周期。

為了避免使用浮點數(shù)表示 Ki、Ke 和 Kv,從而節(jié)省大量 FPGA 邏輯資源,通過將誤差、速度增量和積分右移(除以 2^n)來近似這些小數(shù)值。然而,在 Verilog 中使用有符號和無符號變量(寄存器)時需要謹慎。我發(fā)現(xiàn),如果使用邏輯移位“>>”,負數(shù)右移最終會得到一個很大的正數(shù)。為了避免這種情況,需要使用算術右移表示“>>>”。

圖 26a、b 和 c 中的代碼演示了目前為止在 Verilog 中實現(xiàn) PID 領先-跟隨反饋 (FB) 控制算法所涵蓋的概念,并在 Vivado 中進行了仿真(圖 24a 和 b)。

aba39422-56d4-11f0-9ca0-92fbcf53809c.png

圖 26a:Verilog 領先-跟隨算法 e[k] 和 dx1dx2 計算。

aba810e2-56d4-11f0-9ca0-92fbcf53809c.png

圖 26b:使用ke*e[K] 和Kv*dx1dx2計算motorNSpdMod

abac655c-56d4-11f0-9ca0-92fbcf53809c.png

圖 26c:Verilog 領先-跟隨算法 u[k] 計算

其他

一些其他的細節(jié),可以看一組圖片吧~

abbdd454-56d4-11f0-9ca0-92fbcf53809c.png

abc8718e-56d4-11f0-9ca0-92fbcf53809c.png

abd89122-56d4-11f0-9ca0-92fbcf53809c.png

abe7866e-56d4-11f0-9ca0-92fbcf53809c.png

abec147c-56d4-11f0-9ca0-92fbcf53809c.png

abf862ea-56d4-11f0-9ca0-92fbcf53809c.png

ac1028c6-56d4-11f0-9ca0-92fbcf53809c.jpg

項目地址

完整的項目可以在Github上找到。

來源:本文轉(zhuǎn)載自OPENFPGA公眾號

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1645

    文章

    22050

    瀏覽量

    618534
  • 機器人
    +關注

    關注

    213

    文章

    29748

    瀏覽量

    212902
  • Verilog
    +關注

    關注

    29

    文章

    1367

    瀏覽量

    112286
  • 電機控制器
    +關注

    關注

    21

    文章

    559

    瀏覽量

    32722

原文標題:RTL 級機器人電機控制器的 FPGA 設計

文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    控制器、伺服電機、減速機成機器人產(chǎn)業(yè)主要瓶頸

    我國的工業(yè)機器人三大核心零部件控制器、伺服電機、減速機是制約中國機器人產(chǎn)業(yè)的主要瓶頸,占到機器人成本的70%。
    發(fā)表于 06-27 09:39 ?3427次閱讀

    【OK210申請】機器人控制器

    申請理由:考慮使用210做控制器主芯片,需要一塊資源豐富的開發(fā)板做前期實驗項目描述:機器人控制器,用于控制伺服驅(qū)動,從而
    發(fā)表于 06-30 09:06

    【TL6748 DSP申請】工業(yè)機器人控制系統(tǒng)

    國家項目中作為計算部分,算法優(yōu)化,對軌跡與速度進行優(yōu)化,FPGA主要實現(xiàn)對機器人私服電機的驅(qū)動,STM主要用于控制。另外在項目中將加入攝像
    發(fā)表于 11-02 11:18

    選擇機器人電機的幾點思考

    結(jié)構)的組合。它在小型封裝中具有高效率,相對較高的功率,高扭矩/重量比,快速響應時間,并且相當容易控制,但成本高昂。控制需要精細機器人運動系統(tǒng)不僅僅是一個電機; 它由三個主要功能塊組成
    發(fā)表于 03-12 15:52

    如何利用ARM研究嵌入式服務機器人控制器

    其設計是機器人研究的核心。該控制系統(tǒng)通常以MCU、 DSP等為核心,采用上、下位機二分布式結(jié)構。其中上位機一般為PC機,下位機為單片機或DSP等微控制器。但隨著移動
    發(fā)表于 07-30 07:02

    如何設計智能滅火機器人控制器

    席文姣,陳帝伊,馬孝義(西北農(nóng)林科技大學 水利與建筑工程學院,陜西 西安712100)0引言如何設計智能滅火機器人控制器控制器是智能機器人處理和
    發(fā)表于 07-31 06:23

    工業(yè)機器人控制器有什么功能?

    工業(yè)機器人控制器功能多任務功能一臺機器人可進行多個任務的操作;
    發(fā)表于 09-12 09:10

    【送貨上門】SC3150三協(xié)機器人控制器

    變差,其中一個處置出毛病可能招致整個系統(tǒng)的癱瘓?! ?4)擴展性差目前。機器人控制器的研討著重于從關節(jié)這一來改善和進步系統(tǒng)的性能.由于構造的封鎖性,難以依據(jù)需求對系統(tǒng)停止擴展,如增
    發(fā)表于 03-27 15:22

    小白學機器人伺服電機模塊相關資料分享

    [本系列文章還將陸續(xù)介紹其他的傳感模塊,歡迎訂閱我的博客] 本次所介紹的是伺服電機模塊,主要參考《基于ARM Cortex-M3的STM32系列嵌入式微控制器應用實踐》內(nèi)的對機器人
    發(fā)表于 06-28 08:36

    相撲機器人控制器資料分享

    描述相撲機器人控制器我的 Sumo 機器人比賽項目,我使用了 ATmega2560 -16au 微控制器和 BTN7960B 電機驅(qū)動
    發(fā)表于 06-28 06:38

    通過多軸工業(yè)機器人來聊聊機器人控制系統(tǒng)以及控制器的實現(xiàn)

    嵌入式推薦使用FET3568J-C工業(yè)核心板作為機器人控制器的主控平臺。  01  高性能處理  飛凌嵌入式FET3568J-C核心板基于瑞芯微RK3568J工業(yè)
    發(fā)表于 02-24 17:05

    淺談兒童陪護機器人

    兒童陪護機器人中得到了廣泛應用。 在兒童陪護機器人中,步進電機芯片主要用于轉(zhuǎn)動控制。在此過程中,控制器通過對步進
    發(fā)表于 05-11 15:12

    機器人控制器有哪些類型_機器人控制器發(fā)展

    機器人控制器是根據(jù)指令以及傳感信息控制機器人完成一定的動作或作業(yè)任務的裝置,它是機器人的心臟,決定了機器
    的頭像 發(fā)表于 10-14 14:39 ?1.3w次閱讀

    常見的機器人控制器

    機器人控制器作為工業(yè)機器人最為核心的零部件之一,對機器人的性能起著決定性的影響,在一定程度上影響著機器人的發(fā)展。常用的
    發(fā)表于 08-18 16:39 ?7780次閱讀

    機器人關節(jié)伺服電機PID串控制

    通常由電機控制器、電機驅(qū)動、電機本體(多為伺服電機)組成。電機
    發(fā)表于 05-06 11:06 ?3次下載
    <b class='flag-5'>機器人</b>關節(jié)伺服<b class='flag-5'>電機</b>PID串<b class='flag-5'>級</b><b class='flag-5'>控制</b>