一(yī)、總(zǒng)體(tǐ)設計(jì)
1.概述
本(běn)文(wén)基于(yú)明(míng)德揚至(zhì)簡設計(jì)法和(hé)明(míng)德揚設計(jì)規範,設計(jì)了(le)一(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)值) |
5)數碼管(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) |
信(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ǐ)設置1sRST信(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):
1)結合明(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)嘗試吧。








