1、概述
基于(yú)明(míng)德揚至(zhì)簡設計(jì)法和(hé)明(míng)德揚設計(jì)規範,設計(jì)一(yī)个(gè)基于(yú)FPGA的(de)頻率、電(diàn)壓测量(liàng)儀器,实現(xiàn)了(le)测量(liàng)AD采集後(hòu)的(de)波(bō)形頻率和(hé)電(diàn)壓(峰(fēng)峰(fēng)值),并将數值顯示在(zài)數碼管(guǎn)上(shàng)。这(zhè)个(gè)案(àn)例通(tòng)过(guò)擴展(zhǎn)還(huán)可(kě)結合明(míng)德揚的(de)波(bō)形采集顯示案(àn)例实現(xiàn)顯示波(bō)形頻率、峰(fēng)峰(fēng)值功能(néng),還(huán)可(kě)拓展(zhǎn)結合上(shàng)次(cì)DDS案(àn)例産生(shēng)的(de)已知波(bō)形的(de)頻率峰(fēng)峰(fēng)值,验(yàn)證本(běn)設計(jì)的(de)正(zhèng)确性(xìng)。
本(běn)案(àn)例的(de)擴展(zhǎn)和(hé)應(yìng)用(yòng)在(zài)現(xiàn)实生(shēng)活中(zhōng)具有(yǒu)重(zhòng)大意(yì)義。
在(zài)本(běn)案(àn)例的(de)設計(jì)过(guò)程中(zhōng),應(yìng)用(yòng)了(le)至(zhì)簡設計(jì)法、狀态機(jī)模板應(yìng)用(yòng)等,在(zài)經(jīng)过(guò)逐步改進(jìn)、調試等一(yī)系(xì)列工作之後(hòu),最(zuì)終(zhōng)达(dá)到(dào)了(le)設計(jì)目标(biāo)。
2、設計(jì)目标(biāo)
(1)将AD采集後(hòu)的(de)數據(jù)轉(zhuǎn)換成(chéng)同(tóng)頻率的(de)方(fāng)波(bō),并测量(liàng)出(chū)波(bō)形实際頻率
(2)能(néng)够实現(xiàn)测量(liàng)出(chū)波(bō)形的(de)周期(qī)
(3)能(néng)够实現(xiàn)测量(liàng)波(bō)形的(de)峰(fēng)峰(fēng)值或(huò)者(zhě)某个(gè)信(xìn)号(hào)的(de)電(diàn)壓值
(4)數碼管(guǎn)顯示頻率或(huò)電(diàn)壓值,并通(tòng)过(guò)按鍵控制切(qiè)換決定(dìng)數碼管(guǎn)顯示頻率或(huò)電(diàn)壓值
3、模块(kuài)功能(néng)
(1)頻率测量(liàng)模块(kuài)实現(xiàn)功能(néng):
将AD采集後(hòu)的(de)數據(jù)轉(zhuǎn)換成(chéng)同(tóng)頻率的(de)方(fāng)波(bō);
测量(liàng)出(chū)波(bō)形的(de)实際頻率;
测量(liàng)出(chū)波(bō)形的(de)周期(qī)
(2)電(diàn)壓测量(liàng)模块(kuài)实現(xiàn)功能(néng):
将AD采集後(hòu)的(de)數據(jù)進(jìn)行緩沖;
記(jì)录(lù)數據(jù)最(zuì)大值和(hé)最(zuì)小值;
根(gēn)據(jù)公式得出(chū)波(bō)形的(de)峰(fēng)峰(fēng)值(電(diàn)壓)
(3)數碼管(guǎn)顯示模块(kuài)实現(xiàn)功能(néng)
數碼管(guǎn)顯示頻率值或(huò)者(zhě)電(diàn)壓值
通(tòng)过(guò)按鍵1实現(xiàn)切(qiè)換決定(dìng)數碼管(guǎn)顯示頻率還(huán)是(shì)電(diàn)壓
(4)按鍵模块(kuài)实現(xiàn)功能(néng):
将外(wài)来(lái)异(yì)步信(xìn)号(hào)打(dǎ)两(liǎng)拍处理,将异(yì)步信(xìn)号(hào)同(tóng)步化(huà);
实現(xiàn)20ms按鍵消抖功能(néng),并輸出(chū)有(yǒu)效按鍵信(xìn)号(hào);
4、信(xìn)号(hào)定(dìng)義
(1)頂层模块(kuài)Freq_Volt_Top.v
|
信(xìn)号(hào) |
定(dìng)義 |
|
clk |
系(xì)統时(shí)鐘(zhōng) |
|
rst_n |
低電(diàn)平複位信(xìn)号(hào) |
|
ad_data |
AD采集輸入(rù) |
|
seg_sel |
數碼管(guǎn)位選信(xìn)号(hào) |
|
Seg_ment |
數碼管(guǎn)顯示信(xìn)号(hào) |
|
|
|
(2)頻率测量(liàng)模块(kuài)Frequency.v
|
信(xìn)号(hào) |
定(dìng)義 |
|
clk |
系(xì)統时(shí)鐘(zhōng) |
|
rst_n |
低電(diàn)平複位信(xìn)号(hào) |
|
ad_data |
AD采集輸入(rù) |
|
Freq |
頻率值 |
|
Period |
周期(qī) |
(3)電(diàn)壓测量(liàng)模块(kuài)Voltage.v
|
信(xìn)号(hào) |
定(dìng)義 |
|
clk |
系(xì)統时(shí)鐘(zhōng) |
|
rst_n |
低電(diàn)平複位信(xìn)号(hào) |
|
ad_data |
AD采集輸入(rù) |
|
Volt |
電(diàn)壓值(峰(fēng)峰(fēng)值) |
(4)數碼管(guǎn)顯示模块(kuài)sel_disp.v
|
信(xìn)号(hào) |
定(dìng)義 |
|
clk |
系(xì)統时(shí)鐘(zhōng) |
|
rst_n |
低電(diàn)平複位信(xìn)号(hào) |
|
din |
顯示數據(jù) |
|
seg_sel |
數碼管(guǎn)位選信(xìn)号(hào) |
|
Seg_ment |
數碼管(guǎn)顯示信(xìn)号(hào) |
(5)按鍵模块(kuài)key_module.v
|
信(xìn)号(hào) |
定(dìng)義 |
|
clk |
系(xì)統时(shí)鐘(zhōng) |
|
rst_n |
低電(diàn)平複位信(xìn)号(hào) |
|
key_in |
按鍵輸入(rù) |
|
key_vld |
有(yǒu)效按鍵 |
5、頻率测量(liàng)代(dài)碼
利用(yòng)明(míng)德揚的(de)四(sì)段(duàn)式狀态機(jī)模板,可(kě)以(yǐ)很熟練地(dì)写出(chū)狀态的(de)轉(zhuǎn)換,先(xiān)将ad_data取(qǔ)最(zuì)高(gāo)位,得到(dào)同(tóng)頻率的(de)方(fāng)波(bō),再分(fēn)别計(jì)算方(fāng)波(bō)高(gāo)電(diàn)平和(hé)低電(diàn)平的(de)时(shí)間(jiān),就(jiù)可(kě)以(yǐ)得出(chū)一(yī)个(gè)周期(qī)的(de)时(shí)間(jiān),從而(ér)計(jì)算出(chū)頻率值和(hé)峰(fēng)峰(fēng)值。利用(yòng)wave的(de)高(gāo)低電(diàn)平控制狀态機(jī)進(jìn)入(rù)高(gāo)電(diàn)平計(jì)數或(huò)低電(diàn)平計(jì)數狀态。
S1狀态:即wave=1时(shí)開(kāi)始進(jìn)行高(gāo)電(diàn)平計(jì)數,wave=0时(shí)證明(míng)變(biàn)为(wèi)低電(diàn)平,記(jì)录(lù)下(xià)high_cnt的(de)最(zuì)大值,代(dài)表(biǎo)高(gāo)電(diàn)平的(de)时(shí)間(jiān)。
S2狀态:即wave=0时(shí)開(kāi)始進(jìn)行低電(diàn)平計(jì)數,wave=1时(shí)證明(míng)變(biàn)为(wèi)高(gāo)電(diàn)平,記(jì)录(lù)下(xià)low_cnt的(de)最(zuì)大值,代(dài)表(biǎo)低電(diàn)平的(de)时(shí)間(jiān)。
得到(dào)高(gāo)電(diàn)平和(hé)低電(diàn)平的(de)时(shí)間(jiān),相加即得到(dào)一(yī)个(gè)周期(qī)的(de)时(shí)間(jiān),可(kě)以(yǐ)算出(chū)頻率值和(hé)周期(qī)值
FPGA原則上(shàng)不(bù)能(néng)直(zhí)接進(jìn)行除法運算,因(yīn)此(cǐ)調用(yòng)除法器IP進(jìn)行除法運算可(kě)以(yǐ)算出(chū)頻率值,取(qǔ)整數部(bù)分(fēn)。
6、電(diàn)壓测量(liàng)
将AD數據(jù)和(hé)初始的(de)最(zuì)大值最(zuì)小值相比較,如(rú)果(guǒ)AD數據(jù)大則賦值給(gěi)fengzhi_max,如(rú)果(guǒ)AD數據(jù)小則賦值給(gěi)fengzhi_min,經(jīng)过(guò)一(yī)段(duàn)时(shí)間(jiān)後(hòu)可(kě)以(yǐ)得出(chū)數據(jù)的(de)最(zuì)大值和(hé)最(zuì)小值。如(rú)果(guǒ)是(shì)8位AD9280,則255代(dài)表(biǎo)+5V,0代(dài)表(biǎo)-5V;
則可(kě)以(yǐ)得到(dào)峰(fēng)峰(fēng)值計(jì)算公式;
值得注意(yì)的(de)是(shì),記(jì)录(lù)下(xià)最(zuì)大最(zuì)小值後(hòu),fengzhi_max,fengzhi_min将不(bù)變(biàn),为(wèi)了(le)能(néng)够实时(shí)記(jì)录(lù)數據(jù)最(zuì)大最(zuì)小值,需要(yào)定(dìng)时(shí)刷新,因(yīn)此(cǐ)設置1s RST信(xìn)号(hào),定(dìng)时(shí)初始化(huà)fengzhi_max,fengzhi_min。
7、數碼管(guǎn)顯示
通(tòng)过(guò)按鍵切(qiè)換決定(dìng)數碼管(guǎn)顯示頻率值還(huán)是(shì)電(diàn)壓值。
動(dòng)态掃描數碼管(guǎn),同(tóng)时(shí)顯示多(duō)个(gè)不(bù)同(tóng)數字(zì),顯示頻率和(hé)電(diàn)壓信(xìn)息。數碼顯示原理和(hé)案(àn)例具體(tǐ)請学習明(míng)德揚論壇上(shàng)資料。
在(zài)这(zhè)个(gè)設計(jì)案(àn)例中(zhōng),至(zhì)簡設計(jì)法和(hé)明(míng)德揚計(jì)數器模板、狀态機(jī)模板發(fà)揮了(le)至(zhì)關(guān)重(zhòng)要(yào)的(de)作用(yòng),使我(wǒ)能(néng)够快(kuài)速準确完成(chéng)設計(jì)。
本(běn)設計(jì)可(kě)以(yǐ)加以(yǐ)拓展(zhǎn):
結合明(míng)德揚AD采集波(bō)形案(àn)例,将計(jì)算出(chū)的(de)頻率值、電(diàn)壓值顯示在(zài)VGA屏幕上(shàng);
对(duì)于(yú)初学者(zhě)而(ér)言,流水(shuǐ)燈(dēng)太簡單,複雜項目又太難,不(bù)如(rú)嘗試一(yī)下(xià)这(zhè)些相对(duì)簡單而(ér)又酷炫的(de)案(àn)例,并一(yī)步步拓展(zhǎn)成(chéng)大項目。趕緊動(dòng)手(shǒu)嘗試吧。








