王靖
(東南大學(xué) 電子科學(xué)與工程學(xué)院,江蘇 南京 210096)
隨著電子設(shè)備及電子產(chǎn)品逐漸向低功耗、小體積、多功能和快速更新的方向發(fā)展,使得電子設(shè)計(jì)自動(dòng)化(EDA)技術(shù)快速發(fā)展。由于成本和功耗的進(jìn)一步降低,在許多的領(lǐng)域運(yùn)用到了可編程門陣列即FPGA,它在通信、儀器、網(wǎng)絡(luò)、數(shù)據(jù)處理、工業(yè)控制、軍事和航空航天等眾多領(lǐng)域有著廣泛的應(yīng)用[1]。
現(xiàn)場可編程門陣列即FPGA(Field Programmable Gate Array),是從EPLD、PAL、GAL 等這些可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展起來的。作為專業(yè)集成電路領(lǐng)域中的半定制電路而出現(xiàn)的FPGA,不但解決了定制電路的不足,而且克服了原有可編程器件因門電路數(shù)有限的而產(chǎn)生的缺點(diǎn)。FPGA 的使用十分的靈活,同一片F(xiàn)PGA 只要使用不同的程序就能夠達(dá)到不同的電路功能。現(xiàn)在FPGA 在通信、儀器、網(wǎng)絡(luò)、數(shù)據(jù)處理、工業(yè)控制、軍事和航空航天等眾多領(lǐng)域有著廣泛的應(yīng)用。隨著成本和功耗的進(jìn)一步降低,將在更多的領(lǐng)域運(yùn)用FPGA。
基于FPGA 的電機(jī)測速系統(tǒng)設(shè)計(jì),以Quartus II為設(shè)計(jì)平臺,采用硬件描述語言VHDL 和模塊化設(shè)計(jì)的方式,并通過數(shù)碼管驅(qū)動(dòng)電路動(dòng)態(tài)顯示測量的結(jié)果。本設(shè)計(jì)具有外圍電路少,集成度高,可靠性強(qiáng)等特點(diǎn),可以用來測量電機(jī)的轉(zhuǎn)速值。
傳感器將電機(jī)轉(zhuǎn)速的模擬信號轉(zhuǎn)換成數(shù)字脈沖信號送入FPGA 模塊。同時(shí)由基準(zhǔn)時(shí)鐘電路產(chǎn)生準(zhǔn)確的時(shí)鐘信號和復(fù)位電路產(chǎn)生的復(fù)位信號送入FPGA 模塊。再由FPGA 模塊產(chǎn)生分頻電路、十進(jìn)制計(jì)數(shù)器電路、數(shù)據(jù)處理電路和顯示譯碼電路。由分頻電路將送入的基準(zhǔn)時(shí)鐘信號進(jìn)行分頻,得到一個(gè)閘門信號,作為十進(jìn)制計(jì)數(shù)器的使能信號。數(shù)據(jù)處理電路的作用是將十進(jìn)制計(jì)數(shù)器得到的數(shù)據(jù)進(jìn)行相應(yīng)的處理后,再送入顯示譯碼電路進(jìn)行轉(zhuǎn)換譯碼[2]。電機(jī)測速系統(tǒng)的總體框圖如圖1 所示。外圍電路分為:基準(zhǔn)時(shí)基電路,復(fù)位電路,傳感器測量電路和顯示電路。
基準(zhǔn)時(shí)基電路采用50 MHz 的有源晶振,3.3 V 電源通過FB5 接入有源晶振的VCC 端口,同時(shí)通過C10 和C11 濾去高頻干擾信號[3]。從OUT 端口輸出50 MHz 的時(shí)鐘信號。晶振電路如圖2 所示。

圖1 電機(jī)測速系統(tǒng)的總體框圖Fig.1 Chart of the motor speed measurement system

圖2 有源晶振電路圖Fig.2 Circuit of the active crystal oscillator
按鍵作為嵌入式智能控制系統(tǒng)中人機(jī)交互的常用接口,我們通常會通過按鍵向系統(tǒng)輸入各種信息,調(diào)整各種參數(shù)或者發(fā)出控制指令,按鍵的處理是一個(gè)很重要的功能模塊,它關(guān)系到整個(gè)系統(tǒng)的交互性能,同時(shí)也影響系統(tǒng)的穩(wěn)定性。在本次設(shè)計(jì)中,通過按鍵實(shí)現(xiàn)了FPGA 模塊的手動(dòng)復(fù)位。復(fù)位按鍵如圖3 所示。

圖3 復(fù)位按鍵電路圖Fig.3 Circuit of the reset button
若要測量轉(zhuǎn)速信號,需要先將其轉(zhuǎn)換為電信號,所以就需要用到光電脈沖傳感器。本次設(shè)計(jì)所選用的光電編碼器為歐姆龍編碼器E6B2-CWZ6C360P/R。
在本次設(shè)計(jì)中我們用到的顯示電路如圖4 所示。
由數(shù)碼管顯示電路可以知道,這是共陽極數(shù)碼管。當(dāng)在位選端SE1~SE4 輸入低電平時(shí),三極管導(dǎo)通,從而D1~D4 接入高電平。由a 到DP 端輸入數(shù)碼管顯示碼,就可以得到我們所需要的數(shù)字,由位選端讓數(shù)碼管選擇導(dǎo)通。
FPGA 模塊的設(shè)計(jì)主要是實(shí)現(xiàn)將由光電編碼器轉(zhuǎn)換得到的電信號轉(zhuǎn)換成轉(zhuǎn)速值,通過數(shù)碼管顯示。因此本次設(shè)計(jì)的模塊主要有分頻模塊、計(jì)數(shù)模塊、鎖存模塊、數(shù)據(jù)處理模塊和動(dòng)態(tài)顯示模塊等組成。

圖4 數(shù)碼管顯示電路Fig.4 Circuit of the digitron display
在本次設(shè)計(jì)中我們需要得到的是轉(zhuǎn)速值,而測量的根本原理就是將轉(zhuǎn)速信號轉(zhuǎn)換為頻率信號,同過測量頻率信號從而算出轉(zhuǎn)速值。由于外部時(shí)鐘提供的是50 MHz 的時(shí)鐘信號,此信號送入FPGA 模塊,通過程序?qū)⑵溥M(jìn)行分頻,設(shè)計(jì)需要的是1 s 的閘門脈沖,來統(tǒng)計(jì)被測信號的個(gè)數(shù),從而計(jì)算出被測信號的頻率[4]。
分頻模塊的設(shè)計(jì)流程圖如圖5 所示。

圖5 分頻程序流程圖Fig.5 Chart of the frequency division
四位十進(jìn)制計(jì)數(shù)模塊是通過復(fù)位信號和閘門信號來控制模塊對外部被測信號的十進(jìn)制計(jì)數(shù)。當(dāng)復(fù)位信號為高電平時(shí),b1、b2、b3、b4 四位計(jì)數(shù)信號都為0。當(dāng)復(fù)位信號為低電平,并且閘門信號為高電平時(shí),計(jì)數(shù)模塊開始統(tǒng)計(jì)外部信號clk1 的個(gè)數(shù),b4為最高位,b1為最低位[5]。
計(jì)數(shù)模塊流程圖如圖6 所示。

圖6 計(jì)數(shù)程序流程圖Fig.6 Chart of the count program
start為復(fù)位信號,當(dāng)為0 時(shí)系統(tǒng)復(fù)位。
b4、b3、b2、b1為計(jì)數(shù)信號,依次代表千位到個(gè)位,每一位最大計(jì)數(shù)
鎖存模塊具有存儲1 s 計(jì)數(shù)完時(shí),所計(jì)數(shù)的數(shù)據(jù)和提供自動(dòng)復(fù)位信號的功能。而且,在按下復(fù)位信號時(shí),清除計(jì)數(shù)數(shù)據(jù)。當(dāng)閘門信號en為下降沿時(shí),就將計(jì)數(shù)模塊所得到的數(shù)值存入鎖存模塊。當(dāng)閘門信號en為‘0’時(shí),程序就輸出一個(gè)低電平的復(fù)位信號,反之則輸出高電平的信號。
動(dòng)態(tài)顯示譯碼是所有數(shù)碼管共用數(shù)據(jù)通道,由位選端選通,每位依次導(dǎo)通。由于人眼具有視覺延遲性,所以觀察到的數(shù)碼管為每一位顯示不同的數(shù)據(jù),同時(shí)顯示[6]。
設(shè)計(jì)利用外部時(shí)鐘50 MHz 分頻來實(shí)現(xiàn)延遲,延遲系數(shù)為62 499。則clock 上升沿個(gè)數(shù)為62 499個(gè)時(shí),位選信號加1,下一位導(dǎo)通顯示數(shù)據(jù)。數(shù)碼管的顯示需要將0 到9 的BCD碼轉(zhuǎn)換為七段數(shù)碼管顯示。與分頻模塊類似,由于時(shí)間較長,設(shè)計(jì)將延遲系數(shù)62 499 改為8,則clock 每8個(gè)上升沿則數(shù)碼管顯示下一位。
動(dòng)態(tài)顯示模塊仿真如圖7 所示。

圖7 動(dòng)態(tài)顯示模塊仿真Fig.7 Simulation of the module of dynamic display
本次實(shí)驗(yàn)是為了完成電機(jī)轉(zhuǎn)速的測量,而測量的原理是利用傳感器將轉(zhuǎn)速信號變?yōu)殡娒}沖信號,通過測量脈沖信號的頻率值,帶入公式從而計(jì)算出轉(zhuǎn)速值。數(shù)據(jù)處理模塊就是利用VHDL 語言編寫程序進(jìn)行數(shù)據(jù)的運(yùn)算,將會運(yùn)用到加減乘除這4 種運(yùn)算。
通過推理可以得出電脈沖的個(gè)數(shù)N 與電機(jī)的轉(zhuǎn)速n 的關(guān)系式如式(1)所示。

N—電脈沖個(gè)數(shù)
n—電機(jī)轉(zhuǎn)速(單位為:轉(zhuǎn)每分鐘)
Z—光電編碼器倍增數(shù)(此設(shè)計(jì)中為360)
t—測量時(shí)間(單位為:秒)
通過式(1)可以推出電機(jī)轉(zhuǎn)速值n 的計(jì)算公式如式(2)所示。

而電脈沖個(gè)數(shù)N 與測量時(shí)間t 的比值等于測量頻率,所以式(2)可以轉(zhuǎn)換為式(3)所示。

f—測量頻率
由式(3),程序在運(yùn)算模塊中將會編寫的模塊有數(shù)據(jù)相加模塊、乘60 模塊、除360 模塊和數(shù)據(jù)分解模塊。運(yùn)算模塊流程圖如圖8 所示。

圖8 運(yùn)算模塊流程圖Fig.8 Chart of the calculate module
數(shù)據(jù)相加模塊是為了將頻率計(jì)所得到的四位數(shù)值乘以相應(yīng)的倍數(shù),再將其相加后得到一個(gè)整體的二進(jìn)制數(shù),以便于進(jìn)行下面的運(yùn)算。又因?yàn)殡娒}沖的個(gè)數(shù)單位為個(gè)每秒,而電機(jī)轉(zhuǎn)速的單位為轉(zhuǎn)每分鐘,所以存在60 s 的轉(zhuǎn)換值。利用程序?qū)⒅暗玫降臄?shù)據(jù)乘以60。使用的傳感器是歐姆龍編碼器E6B2-CWZ6C360P/R,所以倍增數(shù)是360,所以在運(yùn)算模塊中我們要除去360。在運(yùn)算得出轉(zhuǎn)速值后,還需要一個(gè)將這個(gè)二進(jìn)制數(shù)值分解的模塊,因?yàn)閿?shù)碼管顯示模塊是將個(gè)十百千位單獨(dú)顯示的[7],所以要先將每一位分解出來,再送入數(shù)碼管顯示。
本次設(shè)計(jì)是基于FPGA 的電機(jī)測速系統(tǒng)設(shè)計(jì),利用的是Altera 公司開發(fā)的Quartus II 軟件作為設(shè)計(jì)平臺,可以在FPGA 開發(fā)板上實(shí)現(xiàn)測量由傳感器轉(zhuǎn)換得到的脈沖信號,并且通過計(jì)算得到電機(jī)轉(zhuǎn)速值。
在本次設(shè)計(jì)中,還可以進(jìn)行一些擴(kuò)展,可以添加報(bào)警電路,設(shè)定一個(gè)報(bào)警值,當(dāng)測量的轉(zhuǎn)速值大于這個(gè)報(bào)警值時(shí),就可以讓蜂鳴器報(bào)警或數(shù)碼管點(diǎn)亮。
[1]潘松.EDA技術(shù)實(shí)用教程[M].4版.北京:科學(xué)出版社,2010(6):1-2.
[2]黃智偉.FPGA系統(tǒng)設(shè)計(jì)與實(shí)踐[M].北京:電子工業(yè)出版社,2005(1):336-341.
[3]趙艷華.基于Quartus II的FPGA/CPLD設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2009.
[4]周夢然.CPLD/FPGA的開發(fā)與應(yīng)用[M].北京:中國礦業(yè)大學(xué)出版社,2007.
[5]黃智宇,李彥,等.基于Verilog HDL的FPGA設(shè)計(jì)與工程應(yīng)用[M].北京:人民郵電出版社,2009.
[6]張洪潤,張亞凡.FPGA/CPLD應(yīng)用設(shè)計(jì)200例(上冊)[M].北京:北京航空航天大學(xué)出版社,2009.
[7]周維國.汽輪發(fā)電機(jī)組振動(dòng)在線監(jiān)測系統(tǒng)失真原因分析及處理[J].陜西電力,2011(9):78-82.ZHOU Wei-guo.Cause analysis and treatment of distortion in turbine vibration online monitoring system[J].Shaanxi Electric Power,2011(9):78-82.