www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 工業(yè)控制 > 電路設計項目集錦
[導讀]多年來,在超過100個Hackster項目中,我們研究了一些非常深入和復雜的解決方案,從機器人到視覺處理,創(chuàng)建自己的硬件,當然還有涵蓋數(shù)學等概念的項目,以及fpga中的濾波。

多年來,在超過100個Hackster項目中,我們研究了一些非常深入和復雜的解決方案,從機器人到視覺處理,創(chuàng)建自己的硬件,當然還有涵蓋數(shù)學等概念的項目,以及fpga中的濾波。

在這個項目中,我想回顧一下基礎知識,看看我們?nèi)绾闻c不同類型的開關、按鈕、led和顯示器進行交互,這樣我們就可以了解更多,當我們在其他應用中使用它們時,我們可以最好地解決它們。

所以在這個項目中,我們將使用Basys 3開發(fā)板以及一些Pmods來提供額外的接口。

對于這個項目,我們將使用

?Pmod ENC -正交編碼器

?按鈕

?發(fā)光二極管

我們的目標是教授以下內(nèi)容

?如何消除一個開關的彈跳

?如何閱讀正交編碼器

?如何驅(qū)動led有不同的強度使用脈寬調(diào)制

讓我們開始吧,當然,這些技術和代碼將能夠在任何具有類似開關,顯示器和led的FPGA板上使用。

消除彈跳

Basys 3有兩種開關,一個按鈕和滑塊,當開關被翻轉(zhuǎn)、滑動或按下時,我們正在斷開或建立電氣連接。開關不做一個干凈的即時連接,而是在穩(wěn)定之前,他們先斷斷續(xù)續(xù)地接觸。這種斷斷續(xù)續(xù)的初始接觸導致被稱為開關彈跳。

開關彈跳如下圖所示,在開關打開或斷開之后有許多過渡。反彈可能是全振幅或部分振幅反彈。

當我們想要在應用程序中對開關進行采樣時,我們需要考慮可能發(fā)生的任何開關反彈。如果不這樣做,就意味著我們可能會多次注冊操作,這將是困難的。

在真實的硬件世界中,開關反彈可能如下所示,這是Basys 3上的一個按鈕開關的示波器捕獲。

通常一個開關可能會反彈幾毫秒,所以我們需要在FPGA中考慮到這一點。

值得慶幸的是,在使用fpga中的開關時,我們可以使用幾種技術來消除它們的反彈。所有這些都包括使用同步設計,因此我們需要做的第一件事是將開關輸入同步到正確的時鐘域。

如果你不熟悉為什么我們需要同步到時鐘域。這是因為所有寄存器都有一個設置和保持時鐘邊緣的時間,它更新寄存器。

如果輸入在此窗口內(nèi)發(fā)生變化,則寄存器的輸出將變?yōu)閬喎€(wěn)態(tài)。這意味著在1和0之間的狀態(tài),它會隨機恢復到1或0但它與輸入電平?jīng)]有關系。

因此,我們至少使用一個兩級寄存器來同步進入FPGA的信號,該信號未與時鐘同步。這允許第一個寄存器進入亞穩(wěn)態(tài)并在下一個時鐘和更新第二個寄存器之前恢復。這確保了同步器下游的寄存器不會冒著看到亞穩(wěn)態(tài)值和在設計中傳播問題的風險。

因此,我們需要使用這樣的同步器來同步輸入的開關信號。

一旦我們同步了信號,我們就需要消除信號的反彈,因為反彈仍然會通過同步器,它們只是與時鐘同步。

我們可以使用一個簡單的同步器和計數(shù)器來消除開關輸入的反彈

為了測試這段代碼,我們可以創(chuàng)建一個針對Basys 3板的Vivado項目,創(chuàng)建一個新的VHDL文件并模擬它。

我們將看到如下波形,其中輸入開關改變狀態(tài),它使用兩個寄存器同步,然后在輸入輸出之前等待10毫秒。

現(xiàn)在我們已經(jīng)消除了一個開關輸入,我們可以看看如何使用一個更復雜的開關,如旋轉(zhuǎn)編碼器

旋轉(zhuǎn)編碼器

旋轉(zhuǎn)編碼器是一種快速切換不同選項的方法,一個常見的例子是使用它的旋轉(zhuǎn)來控制LED或顯示屏的亮度。

它通常也被稱為正交編碼器,因為兩個輸出a和B彼此位于90度,例如在正交中。

當開關按時鐘或反時鐘方向旋轉(zhuǎn)時,你會看到A和B的變化,當然你會得到反彈。

根據(jù)兩個輸出A或B中哪一個有第一條邊,我們可以確定旋轉(zhuǎn)的方向。

通常旋轉(zhuǎn)編碼器也有一個按鈕,可用于確認選擇等。

當我們旋轉(zhuǎn)旋轉(zhuǎn)編碼器,我們會得到小故障,可以看到下面,但這些是較短的持續(xù)時間,因為車輪旋轉(zhuǎn)。

注意,使用的編碼器通常是高的,因為它被拉起來。

為了讀取編碼器并確定旋轉(zhuǎn)方向,我們可以使用邊緣檢測。

下面的代碼示例允許我們根據(jù)表盤的旋轉(zhuǎn)方向增加或減少向量值。

我們可以將其添加到我們的Vivado項目中,并使用下面的測試臺模擬其行為

運行模擬,您可以看到計數(shù)隨著編碼器旋轉(zhuǎn)的變化而增加,然后減少。

通過切換設置的斜坡值模擬,我們可以看到計數(shù)增加,然后減少。

現(xiàn)在我們有兩個元素,我們需要我們的LED調(diào)光電路。下一個要素是創(chuàng)建驅(qū)動電路。

脈寬調(diào)制

脈寬調(diào)制是偉大的提供可變功率負載和重建模擬信號與簡單的后處理與R和C。

PWM信號有兩個關鍵元素

?周期-信號的重復周期

?占空比-多少周期的信號是高的

對于本應用程序,我們將使用50Hz PWM周期,并使用旋轉(zhuǎn)編碼器使PWM周期可控。

PWM的代碼是

而試驗臺將設置幾個不同的PWM輸出

在我們的Vivado項目中運行這個程序顯示如下,我們可以看到脈沖寬度隨著輸入需求的改變而改變。

現(xiàn)在,我們準備將所有這些整合到Vivado設計中,并在硬件上進行測試。

整合設計

為了開始這個,我們將在Vivado創(chuàng)建一個新的框圖項目。在此基礎上,我們將添加剛剛創(chuàng)建的RTL課程代碼。

通過將IP核添加到框圖中,我們能夠創(chuàng)建頂層包裝器并綜合設計。

我已經(jīng)將旋轉(zhuǎn)編碼器連接到A和B輸入,旋轉(zhuǎn)編碼器還包括1毫秒的彈跳鎖定。我還稍微更改了代碼,每次旋轉(zhuǎn)增加/減少8,以停止需要256次調(diào)整。

我還增加了第二個LED連接到按鈕開關時,旋轉(zhuǎn)開關被推動。這是連接到消跳電路。

讓Vivado管理包裝器

一旦合成完成,我們就可以在XDC文件中分配IO

一旦比特流完成,我們就可以下載并在硬件上進行測試。

旋轉(zhuǎn)編碼器改變時,我們可以看到ILA上的LED值發(fā)生變化。

總結(jié)

雖然是一個簡單的項目,但我希望這個項目已經(jīng)提供了信息和有用的,特別是如果你剛剛開始你的FPGA之旅。在更復雜的解決方案中,與交換機接口和處理反彈可能會導致意外命令的問題。

本文編譯自hackster.io

本站聲明: 本文章由作者或相關機構(gòu)授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀
關閉