最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

3.3PWM呼吸燈-明德?lián)P至簡設計法原理與應用

2022-12-29 06:49 作者:明德?lián)P易老師  | 我要投稿

本文的文檔編號:000800000015


需要看對應的視頻,請點擊視頻編號:00800000165

1.至簡原理與應用配套的案例
2.實現(xiàn)控制LED燈亮度的功能,具體為:上電后,LED燈在前10秒時間內,每隔2秒逐漸變亮。在下一個10秒時間內,每隔2秒,亮度逐漸變暗,如此循環(huán)
3. 這是ALTERA入門學習案例文檔




第四章? PWM呼吸燈


1?項目背景
隨著LED在照明領域的不斷發(fā)展,其控制方式也越來越多樣化,形成不同的視覺效果。相比較的只具備“開”“關”功能的傳統(tǒng)LED照明,能夠實現(xiàn)從0到100%光的亮度的調節(jié)的LED燈,在家裝燈飾、舞美燈光等領域的需求更為突出。

?呼吸燈是指燈光由高到暗的逐漸變化,感覺好像是人在呼吸。所謂的“呼吸燈”就是根據(jù)人的呼吸頻率通過光的強弱表現(xiàn)出來:呼吸分為兩個過程,一個是“呼”的過程,一個是“吸”的過程。其廣泛應用于手機之上,并成為各大品牌手機的賣點之一。如果你的手機里面有未處理的通知,比如說未接來電,未查收的短信等,呼吸燈就會由暗到亮的變化,像呼吸一樣那么有節(jié)奏,起到一個通知提醒的作用。

呼吸燈的設計方法有很多,有的是用單片機產生PWM(脈沖寬度調制)來驅動LED,也有采用555定時器來做。電路利用電容充放電原理,較為簡單。

脈寬調制(Pulse Width Modelation,PWM),是利用微處理器/FPGA的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在測量、通信、功率控制與變換等許多領域。PWM數(shù)字信號從處理器到被控系統(tǒng)都是數(shù)字形式,無需數(shù)模轉換。

航模中的控制信號大多是PWM信號,比如FUTABA,JR等舵機的控制都采用PWM方式。

發(fā)射機給接收機一串脈沖,比如基礎脈寬是100ms,那么發(fā)射機的脈寬變大時,比如增大為150ms,那么接收機就控制舵機正向旋轉,發(fā)射的脈寬減小時,比如減小為50ms,那么接收機就控制舵機逆向旋轉。

? PWM是一種對模擬信號電平進行數(shù)字編碼的方法。通過高分辨率計數(shù)器的使用,方波的占空比被調制用來對一個具體模擬信號的電平進行編碼。PWM信號仍然是數(shù)字的,因為在給定的任何時刻,滿幅值的直流供電要么完全有(ON),要么完全無(OFF)。電壓或電流源是以一種通(ON)或斷(OFF)的重復脈沖序列被加到模擬負載上去的。通的時候即是直流供電被加到負載上的時候,斷的時候即是供電被斷開的時候。只要帶寬足夠,任何模擬值都可以使用PWM進行編碼。

通俗來說,PWM就是連續(xù)的、一定比例占空比的脈沖信號。通過控制占空比來實現(xiàn)不同的控制。簡單地,我們可以認為PWM就是一種方波。如圖所示:

圖?176

PWM波形圖

PWM實現(xiàn)呼吸燈的原理

當輸出為低電平時控制LED燈,當輸出低電平時,燈亮,當輸出高電平時,燈滅。如果一直輸出低電平,則燈一直亮;如果一直輸出高電平,則燈一直暗;如果50%時間輸出低電平,50%時間輸出高電平,則燈會暗一些。所以占空比會影響到LED燈的明暗程度。

另一個影響LED亮度的是PWM波形的周期。試想一下,如果PWM的周期是2秒,占空比為50%,那我們看到的是將是LED暗1秒、亮1秒,而不是半亮的狀態(tài)。只是我們提高PWM的周期,才能看到半亮的狀態(tài)。根據(jù)經驗值,PWM的周期是10毫秒為宜。

也就是說,控制高低電平的時間,也就是占空比(高電平占周期的百分比,例如上面是60%),以及控制PWM的周期,就可以控制燈的亮暗程度。


2?設計目標

本工程實現(xiàn)一個控制LED燈亮度的功能,具體要求:上電后,LED燈顯示接近于滅,然后在10秒內,每隔2秒,亮度變化一次,逐漸變亮。在下一個10秒內,每隔2秒,亮度變化一次,逐漸變暗。總而言之,就是20秒一次循環(huán),每隔2秒變化一次,前10秒亮度增大,后10秒,亮度減小。

開發(fā)板的硬件原理圖

圖?177

上板效果圖如下圖所示。


圖?178


3?設計實現(xiàn)

3.1?頂層信號

新建目錄:D:mdy_bookpwmled。在該目錄中,新建一個名為pwmled.v的文件,并用GVIM打開,開始編寫代碼。

我們先分析一下板子上的LED燈。板子上的每個LED燈,都有一個信號與之相連,這個信號一端連著LED,另一端連著FPGA。FPGA控制這根線,就可以控制LED燈的亮、滅以及亮度。當FPGA將這根線輸出為0時,LED要亮;當FPGA將這根線輸出為1時,這個LED燈就滅;FPGA通過輸出一個PWM波形,并且控制占空比,就可以實現(xiàn)LED的亮度控制。

下面表格表示了硬件電路圖的連接關系。


綜上所述,我們這個工程需要三個信號,時鐘clk,復位rst_n和輸出信號led。將module的名稱定義為pwmled。為此,代碼如下:


其中clk、rst_n是輸入信號,led是輸出信號,并且三個信號都是1比特的,根據(jù)這些信息,我們補充輸入輸出端口定義。代碼如下:



3.2?信號設計

我們首先分析一下需求:上電后,LED燈顯示接近于滅,然后在10秒內,每隔2秒,亮度變化一次,逐漸變亮。在下一個10秒內,每隔2秒,亮度變化一次,逐漸變暗。總而言之,就是20秒一次循環(huán),每隔2秒變化一次,前10秒亮度增大,后10秒,亮度減小。

另外,根據(jù)PWM的原理,通過控制PWM的占空比就可以實現(xiàn)亮度控制。占空比越大(高電平時間越長,低電平時間越低),燈的亮度越暗。

根據(jù)這個原理,可以翻譯成:FPGA控制led信號,輸出PWM波形,并調整占空比。調整方法:20秒一次循環(huán),每隔2秒變化led的占空比一次,前10秒占空比變大,后10秒,占空比變小。

由于需求沒有說明具體的占空比是多少,那我們就自行制定一下占空比,讀者可以在上板時,根據(jù)視覺效果,調整占空比的大小。自行制定的占空比如下:

第1個2秒內,占空比為95%;

第2個2秒內,占空比為85%;

第3個2秒內,占空比為70%;

第4個2秒內,占空比為50%;

第5個2秒內,占空比為20%;

第6個2秒內,占空比為20%;

第7個2秒內,占空比為50%;

第8個2秒內,占空比為70%;

第9個2秒內,占空比為85%;

第10個2秒內,占空比為95%。

然后按上面的過程循環(huán)。

PWM的波的周期,根據(jù)經驗值可以設為10毫秒。

根據(jù)上述分析,這個led信號的變化情況如下:

圖?179

第1次持續(xù)時間2秒,每10毫秒輸出一個PWM波(9.5毫秒時變低);

第2次持續(xù)時間2秒,每10毫秒輸出一個PWM波(8.5毫秒時變低);

第3次持續(xù)時間2秒,每10毫秒輸出一個PWM波(7.0毫秒時變低);

第4次持續(xù)時間2秒,每10毫秒輸出一個PWM波(5.0毫秒時變低);

第5次持續(xù)時間2秒,每10毫秒輸出一個PWM波(2.0毫秒時變低);

第6次持續(xù)時間2秒,每10毫秒輸出一個PWM波(2.0毫秒時變低);

第7次持續(xù)時間2秒,每10毫秒輸出一個PWM波(5.0毫秒時變低);

第8次持續(xù)時間2秒,每10毫秒輸出一個PWM波(7.0毫秒時變低);

第9次持續(xù)時間2秒,每10毫秒輸出一個PWM波(8.5毫秒時變低);

第10次持續(xù)時間2秒,每10毫秒輸出一個PWM波(9.5毫秒時變低);

從中我們可以得到有以下幾個計數(shù)器:計數(shù)10毫秒時間的計數(shù)器;計數(shù)2秒時間的計數(shù)器以及計數(shù)第1~10次的計數(shù)器。

計數(shù)10毫秒的計數(shù)器的設計思路。本工程的工作時鐘是50MHz,即周期為20ns,計數(shù)器計數(shù)到10_000_000/20=500_000個,我們就能知道10毫秒時間到了。另外,由于該計數(shù)器是不停地計數(shù),永遠不停止的,可以認為加1條件一直有效,可寫成:assign add_cnt==1。該計數(shù)器一共要數(shù)500_000個。綜上所述,該計數(shù)器的代碼如下。


2秒時間計數(shù)器的設計思路。本工程的工作時鐘是50MHz,即周期為20ns,計數(shù)器計數(shù)到2_000_000_000/20=100_000_000個,我們就能知道2秒時間到了。這是一種設計思路。但我們也可以以10毫秒為基礎,通過數(shù)有2_000_000_000/10_000_000=200個10毫秒時間,就能知道2秒時間到了。所以該計數(shù)器的加1條件是end_cnt0,一共有數(shù)200個。綜上所述,該計數(shù)器的代碼如下。


第1~第10次計數(shù)器的設計思路。該計數(shù)器是每隔2秒就會加1,也就是end_cnt1的時候,就會加1;該計數(shù)器一共要數(shù)10個。綜上所述,該計數(shù)器的代碼如下。


有了這三個計數(shù)器,我們來思考輸出信號led的變化。概括起來,led有兩個變化點:變0和變1。變0的原因都是在10毫秒計數(shù)器數(shù)到一定個數(shù)時變0,但這個計數(shù)是會變的,那么我們可以假設為x,也就是數(shù)到x個時,led變0。變1則是由于10毫秒計數(shù)時間到了,也就是end_cnt0時,led變1?。綜上所述,led信號的代碼如下:


最后我們再來思考變量x。x是led變0的時間。這個時間在不同的次數(shù)時,值會不相同。例如第1次是數(shù)到9.5毫秒(cnt0數(shù)到475_000個),第2次則是在8.5毫秒(cnt0數(shù)到425_000個)。也就是說x的值與第幾次有關,即與cnt2有關。根據(jù)題意,可知x的代碼如下:


此次,主體程序已經完成。接下來是將module補充完整。


3.3?信號定義

接下來定義信號類型。

cnt0是用always產生的信號,因此類型為reg。cnt0計數(shù)的最大值為500_000,需要用19根線表示,即位寬是19位。因此代碼如下:


add_cnt0和end_cnt0都是用assign方式設計的,因此類型為wire。并且其值是0或者1,1個線表示即可。因此代碼如下:


cnt1是用always產生的信號,因此類型為reg。cnt1計數(shù)的最大值為200,需要用8根線表示,即位寬是8位。因此代碼如下:


add_cnt1和end_cnt1都是用assign方式設計的,因此類型為wire。并且其值是0或者1,1根線表示即可。因此代碼如下:


cnt2是用always產生的信號,因此類型為reg。cnt2計數(shù)的最大值為9,需要用4根線表示,即位寬是4位。因此代碼如下:


add_cnt2和end_cnt2都是用assign方式設計的,因此類型為wire。并且其值是0或者1,1根線表示即可。因此代碼如下:


led是用always方式設計的,因此類型為reg。并且其值是0或者1,1根線表示即可。因此代碼如下:


x是用always方式設計的,因此類型為reg。并且其值是最大是475_000,需要19根線表示即可。因此代碼如下:


至此,整個代碼的設計工作已經完成。下一步是新建工程和上板查看現(xiàn)象。


4?綜合與上板

4.1?新建工程

首先在d盤中創(chuàng)建名為“pwmled”的工程文件夾,將寫的代碼命名為“pwmled.v”,頂層模塊名為“pwmled”。

圖?180

圖?181

然后打開Quartus?Ⅱ,點擊File下拉列表中的New Project Wzard...新建工程選項。

圖?182

3.在出現(xiàn)的界面中直接點擊最下方的“Next”。

圖?183

4.之后出現(xiàn)的是工程文件夾、工程名、頂層模塊名設置界面。按照之前的命名進行填寫,第一欄選擇工程文件夾“pwmled”,第二欄選擇工程文件“pwmled.v”,最后一欄選擇頂層模塊名“pwmled”,然后點擊”Next”,再出現(xiàn)的界面選擇empty?project。

圖?184

圖?185

5.之后是文件添加界面。在上方一欄中添加之前寫的”pwmled.v”文件,點擊右側的“Add”按鈕,之后文件還會出現(xiàn)在大方框中,之后點擊“Next”。

圖?186

器件型號選擇界面。在“Device family”處選擇Cyclone?ⅣE,在“Available devices”處選擇EP4CE15F23C8,然后點擊“Next”。

圖?187

EDA工具界面。該頁面用默認的就行,直接點擊最下方“Next”。

圖?188

8.之后出現(xiàn)的界面是我們前面的設置的總結,確認沒有錯誤后點擊“Finish”。

圖?189


4.2?綜合

1.新建工程步驟完成后,就會出現(xiàn)以下界面。在“Project Navigator”下選中要編譯的文件,點擊上方工具欄中“Start Compilation”編譯按鈕(藍色三角形)。

圖?190

2.編譯成功后會出現(xiàn)以下界面。

圖?191


4.3?配置管腳

圖?192

菜單欄中,選中Assignments,然后選擇Pin Planner,就會彈出配置管腳的窗口。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??193


在配置窗口最下方中的location一列,參考下表中最右兩列配置好FPGA管腳。

配置完成后,關閉Pin Planner,軟件自動會保存管腳配置信息。


4.4?再次綜合

?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖194


在菜單欄中,選中Processing,然后選擇Start Compilation,再次對整個工程進行編譯和綜合。

圖?195

出現(xiàn)上面的界面,就說明編譯綜合成功。


4.5?連接開發(fā)板

圖中,下載器接入電腦USB接口,電源接入電源,然后摁下下方藍色開關,看到開發(fā)板燈亮。

圖?196


4.6?上板

  1. 雙擊Tasks一欄中”Program Device”。

圖?197

2.會出現(xiàn)如下界面,點擊add file添加.sof文件,在左側點擊“Start”,會在上方的“Progress”處顯示進度。

圖?198

3.進度條中提示成功后,即可在開發(fā)板上觀察到相應的現(xiàn)象。


明德?lián)P科技教育


3.3PWM呼吸燈-明德?lián)P至簡設計法原理與應用的評論 (共 條)

分享到微博請遵守國家法律
来安县| 荣成市| 莱西市| 尚义县| 含山县| 尚志市| 桦甸市| 邢台县| 秦安县| 昆明市| 赫章县| 龙门县| 平度市| 噶尔县| 义马市| 扶余县| 东丽区| 会东县| 凤台县| 花莲县| 揭东县| 浦江县| 朝阳县| 瓮安县| 五河县| 沈丘县| 乌拉特中旗| 青州市| 观塘区| 安丘市| 葵青区| 屏边| 宜昌市| 维西| 保亭| 资溪县| 安龙县| 隆尧县| 定远县| 宝山区| 临澧县|