孫緒福
摘 要 本文設(shè)計(jì)的簡(jiǎn)易手持式示波器是基于FPGA應(yīng)用技術(shù),以PCF8951為數(shù)據(jù)采集前端。通過(guò)內(nèi)建RAM進(jìn)行對(duì)采集數(shù)據(jù)的存儲(chǔ)以及波形的顯示。利用有限狀態(tài)機(jī)實(shí)現(xiàn)對(duì)不同狀態(tài)之間的轉(zhuǎn)換,最后顯示在ST7735液晶顯示屏上。本設(shè)計(jì)最大的特點(diǎn)是所用器件都為低功耗、低成本、小體積的器件,能夠?qū)崿F(xiàn)手持式設(shè)計(jì)。通過(guò)在開(kāi)發(fā)板上的測(cè)試結(jié)果表明,該設(shè)計(jì)能夠?qū)崿F(xiàn)示波器的基本功能,且大大降低成本及減少體積。
【關(guān)鍵詞】FPGA 示波器 PCF8591 有限狀態(tài)機(jī)
示波器是一種應(yīng)用十分廣泛的電子測(cè)量?jī)x器,能夠方便地測(cè)量各種不同的波形。但是傳統(tǒng)的模擬示波器具有體積大、成本高、攜帶不方便等缺點(diǎn),因而使得許多電子實(shí)驗(yàn)限制在了實(shí)驗(yàn)室中進(jìn)行。由于這種局限性推動(dòng)了示波器朝著微型化、簡(jiǎn)單化、廉價(jià)化的方向發(fā)展。對(duì)于精度要求不是特別高的情況下,生產(chǎn)出一款便攜手持式的低成本數(shù)字示波器將會(huì)有很大的需求和市場(chǎng)價(jià)值。由此本文提出一種簡(jiǎn)單手持式示波器設(shè)計(jì)方案,基于FPGA應(yīng)用技術(shù),實(shí)現(xiàn)了對(duì)信號(hào)的實(shí)時(shí)顯示,以及具有調(diào)節(jié)掃描速度和垂直靈敏度的功能。本設(shè)計(jì)方案均采用體積小、成本低的元器件進(jìn)行設(shè)計(jì),在保證一定精度的前提下大大減小體積以及降低成本。在簡(jiǎn)易的電子實(shí)驗(yàn)中此設(shè)計(jì)能夠發(fā)揮重要的作用。
1 系統(tǒng)設(shè)計(jì)
數(shù)字示波器是由取樣存儲(chǔ)、系統(tǒng)控制和讀出顯示三大部分組成,它們之間通過(guò)數(shù)據(jù)總線、地址總線、和控制總線相互聯(lián)系和交換信息,以完成各種測(cè)量功本次設(shè)計(jì)采用萊迪思LCMX02-4000HC芯片,通過(guò)將外部輸入模擬信號(hào)經(jīng)過(guò)PCF8591芯片進(jìn)行A/D轉(zhuǎn)換,將轉(zhuǎn)換后的數(shù)據(jù)根據(jù)旋轉(zhuǎn)編碼器EC11設(shè)定的觸發(fā)條件以及采樣頻率,篩選出符合條件的數(shù)據(jù),之后將數(shù)據(jù)送入RAM中保存。當(dāng)RAM存滿(mǎn)后,狀態(tài)切換至讀RAM狀態(tài),通過(guò)對(duì)ST7735顯示屏的初始化以及對(duì)RAM中數(shù)據(jù)的適當(dāng)操作后,將信息呈現(xiàn)至屏幕上,以實(shí)現(xiàn)示波器的基本功能。此外,還設(shè)置了復(fù)位按鍵以實(shí)現(xiàn)示波器的復(fù)位功能。本次設(shè)計(jì)主要包括FPGA邏輯控制模塊、A\D數(shù)模轉(zhuǎn)換模塊、觸發(fā)條件及采樣頻率調(diào)節(jié)模塊、RAM的讀寫(xiě)控制模塊、液晶顯示模塊圖1所示,為本次設(shè)計(jì)的總體示意圖。
1.1 A/D轉(zhuǎn)換模塊
由于本設(shè)計(jì)旨在設(shè)計(jì)低成本、便攜式示波器,對(duì)轉(zhuǎn)換速度、轉(zhuǎn)換精度要求相對(duì)降低,故采用8位串行輸出A/D轉(zhuǎn)換芯片進(jìn)行A/D轉(zhuǎn)換模塊。綜合對(duì)各A/D轉(zhuǎn)換芯片的比較后,本設(shè)計(jì)采用恩智浦半導(dǎo)體公司生產(chǎn)的具有8位CMOS數(shù)模轉(zhuǎn)換芯片PCF8591以實(shí)現(xiàn)對(duì)輸入信號(hào)的采樣。該芯片們具有單獨(dú)供電、低功耗的特點(diǎn),在2.5V~6V的工作電壓內(nèi),采樣速率取決于I2C總線的速度,在標(biāo)準(zhǔn)速度下可達(dá)100kbps,能夠?qū)崿F(xiàn)本設(shè)計(jì)對(duì)采樣速度的要求。此外,它同時(shí)具有4路模擬輸入端及1路輸出端,可編程為單端或差分輸入,3個(gè)地址引腳A0、A1和A2用于編輯硬件的地址,允許同時(shí)將多個(gè)器件接至總線本設(shè)計(jì)中采用超小型SOP-16貼片式封裝以減少器件所用面積,有利于實(shí)現(xiàn)便攜式攜帶的要求。綜合以上特點(diǎn),該芯片適用于本次關(guān)于簡(jiǎn)易手持式示波器的設(shè)計(jì),能滿(mǎn)足各項(xiàng)指標(biāo)要求。A/D轉(zhuǎn)換模塊程序的編寫(xiě),主要采用設(shè)計(jì)有限狀態(tài)機(jī)(FSM),通過(guò)對(duì)不同狀態(tài)的計(jì)數(shù),實(shí)現(xiàn)在初始化、開(kāi)始、寫(xiě)指令、讀數(shù)據(jù)、結(jié)束狀態(tài)之間的轉(zhuǎn)換。圖2所示為A/D轉(zhuǎn)換模塊的原理圖,其中模擬信號(hào)的輸入,通過(guò)連接母座以送入芯片模擬輸入端。
1.2 觸發(fā)條件及頻率調(diào)節(jié)模塊
考慮到輸入信號(hào)頻率及幅值的不同,在本設(shè)計(jì)中可以實(shí)現(xiàn)對(duì)采樣頻率以及觸發(fā)條件的改變。鑒于旋轉(zhuǎn)操作的簡(jiǎn)易性,本設(shè)計(jì)采用ALPS常用金屬軸編碼器EC11實(shí)現(xiàn)對(duì)采集頻率以及觸發(fā)幅值的調(diào)節(jié),通過(guò)對(duì)編碼器的左右旋轉(zhuǎn)實(shí)現(xiàn)增大與縮小的功能。EC11編碼器屬于小型高精度旋轉(zhuǎn)式編碼器,15脈沖30定位,20脈沖20定位的高分辨率,適用于微小電流回路的電子設(shè)備其上還帶有0.5mm按壓開(kāi)關(guān),在本設(shè)計(jì)中用于切換采樣頻率調(diào)節(jié)模式和觸發(fā)調(diào)節(jié)模式。
頻率調(diào)節(jié)通過(guò)旋轉(zhuǎn)編碼器的左右旋轉(zhuǎn),改變采樣計(jì)數(shù)值的大小,以實(shí)現(xiàn)頻率的改變。以計(jì)數(shù)標(biāo)志cnt_sample為例,初始設(shè)定cnt_sample為5,即每5個(gè)采樣點(diǎn)放進(jìn)一次RAM當(dāng)中用以之后顯示。當(dāng)左旋一次后,設(shè)定cnt_sample自加1,則每6個(gè)采樣點(diǎn)放進(jìn)RAM當(dāng)中,右旋反之,由此實(shí)現(xiàn)了示波器采樣頻率的增大。
觸發(fā)幅值調(diào)節(jié)通過(guò)旋轉(zhuǎn)編碼器的左右旋轉(zhuǎn),改變觸發(fā)邊界條件的大小,從而實(shí)現(xiàn)對(duì)不同信號(hào)觸發(fā)條件的改變。以幅值為1.5V的正弦波為例,若觸發(fā)條件設(shè)置為2V,則始終無(wú)法達(dá)到觸發(fā)條件,可以通過(guò)旋轉(zhuǎn)編碼器改變觸發(fā)條件,以獲取完整的信號(hào)波形。同時(shí)為避免始終無(wú)波形顯示的情況,本設(shè)計(jì)中通過(guò)設(shè)定計(jì)數(shù)環(huán)節(jié),若連續(xù)16次未有滿(mǎn)足觸發(fā)條件的信號(hào),則設(shè)置為已滿(mǎn)足觸發(fā)條件,實(shí)現(xiàn)對(duì)波形的顯示。此外,觸發(fā)條件的設(shè)置,還具有穩(wěn)定波形的作用,由于A/D轉(zhuǎn)換時(shí)時(shí)進(jìn)行,若要保證波形的穩(wěn)定以及顯示時(shí)無(wú)視覺(jué)殘留,可以通過(guò)設(shè)定合適的觸發(fā)條件,當(dāng)滿(mǎn)足觸發(fā)條件后,才將采樣數(shù)據(jù)保存至對(duì)應(yīng)RAM中,以達(dá)到穩(wěn)定波形的作用。圖3所示為本次設(shè)計(jì)中旋轉(zhuǎn)編碼器的原理圖。
1.3 RAM的讀寫(xiě)控制模塊
由于A/D采集信號(hào)的保存以及LCD顯示數(shù)據(jù)的讀取共用同一個(gè)RAM,我們通過(guò)設(shè)立不同的標(biāo)志位,來(lái)確定進(jìn)行A/D轉(zhuǎn)換數(shù)據(jù)存RAM操作還是將RAM中數(shù)據(jù)輸出顯示至液晶屏操作。
當(dāng)進(jìn)行存RAM操作時(shí),信號(hào)經(jīng)過(guò)A/D轉(zhuǎn)換輸出8位二進(jìn)制數(shù)據(jù)后,由于本此設(shè)計(jì)所采用的LCD顯示為128*160RGB三色顯示,數(shù)據(jù)存儲(chǔ)深度為128,我們可以將經(jīng)A/D轉(zhuǎn)換后的8位二進(jìn)制數(shù)左移一位,使采集數(shù)據(jù)范圍為0 ~127,恰能滿(mǎn)足數(shù)據(jù)存儲(chǔ)要求。當(dāng)滿(mǎn)足觸發(fā)條件后,根據(jù)采樣條件,將符合條件的數(shù)據(jù)讀入RAM中直至存滿(mǎn)160個(gè)數(shù)據(jù)。此時(shí)RAM中儲(chǔ)存的就是采集到的信號(hào)。
當(dāng)進(jìn)行讀RAM操作時(shí),為了起到顯示波形的效果,我們將RAM中除了采集到的160個(gè)數(shù)據(jù)外全部設(shè)置為黑色顯示,將信號(hào)設(shè)置為白色顯示,由此我們可以實(shí)現(xiàn)在顯示屏上看到白色的波形。圖4所示,為本次設(shè)計(jì)中RAM中數(shù)據(jù)部分示意。
1.4 LCD顯示模塊
本次設(shè)計(jì)采用ST7735液晶屏,具有132(H)*RGB*162(V)位大小的RAM,在本次設(shè)計(jì)中,數(shù)據(jù)保存至128*160,剩余的部分作為邊緣顯示,以更好地實(shí)現(xiàn)示波器的顯示效果。該顯示屏具有紅、綠、藍(lán)三色,可以根據(jù)對(duì)這三種色彩的16位二進(jìn)制數(shù)據(jù)進(jìn)行調(diào)配實(shí)現(xiàn)其它色彩的顯示,例如本次設(shè)計(jì)中白色16hffff以及黑色16h0000為了達(dá)到更好的顯示效果,本設(shè)計(jì)采用豎屏顯示。由數(shù)據(jù)手冊(cè),我們可以得到驅(qū)動(dòng)該器件的指令,利用有限狀態(tài)機(jī)實(shí)現(xiàn)對(duì)命令的寫(xiě)入以及對(duì)RAM中數(shù)據(jù)的讀入。當(dāng)RAM中數(shù)據(jù)顯示結(jié)束后,狀態(tài)切換至存RAM操作。圖5所示為本次設(shè)計(jì)中LCD模塊顯示原理圖。
2 程序設(shè)計(jì)
本次程序采用Verilog語(yǔ)言進(jìn)行編輯使用Lattice diamond設(shè)計(jì)軟件進(jìn)行綜合與調(diào)試。頂層模塊設(shè)計(jì)主要包括A/D轉(zhuǎn)換模塊、讀寫(xiě)選擇模塊、采樣頻率調(diào)節(jié)模塊、觸發(fā)條件設(shè)置模塊、LCD顯示模塊以及LCD讀寫(xiě)RAM模塊。關(guān)于輸入輸出端口及頂層模塊和各模塊的關(guān)系描述如下:
module Oscilloscope //示波器模塊
(
input clk, //時(shí)鐘輸入
input rst, //復(fù)位按鍵
input encode_left, //旋轉(zhuǎn)編碼器左旋
input encoder_right, //旋轉(zhuǎn)編碼器右旋
input encoder_key, //按下旋轉(zhuǎn)編碼器
inout ad_sda, //PCF8591數(shù)據(jù)端
output ad_scl, //PCF8591時(shí)鐘端
output lcd_rst, //LCD復(fù)位端
output lcd_bl, //LCD背光設(shè)置端
output lcd_dc, //LCD的D/C端
output lcd_clk, // LCD顯示SPI時(shí)鐘
output lcd_data // RAM讀寫(xiě)數(shù)據(jù)端口
);
wire sample_en; //取樣使能信號(hào)
wire sample_finish; //取樣完成標(biāo)志
wire display_en; //顯示使能信號(hào)
wire display_finish; //顯示完成標(biāo)志
wire ad_finish; //ad轉(zhuǎn)換完成標(biāo)志
wire [7:0] ad_data; //8位串行數(shù)據(jù)
wire [7:0] trigger; //觸發(fā)條件
wire wr_clock; //RAM寫(xiě)時(shí)鐘
wire [7:0] wr_add; //RAM寫(xiě)地址
wire [131:0] ram_ad; //RAM中寫(xiě)對(duì)應(yīng)AD轉(zhuǎn)換數(shù)據(jù)
wire re_clock; //RAM讀時(shí)鐘
wire [7:0] re_add; //RAM讀地址
wire [131:0] ram_lcd; //RAM中LCD讀數(shù)據(jù)
Mode_choosemode_choose //選擇進(jìn)行顯示/讀數(shù)據(jù)模塊
(
.clk (clk ), //系統(tǒng)時(shí)鐘
.rst (rst ), //復(fù)位按鍵
.display_finish (display_finish ), //顯示完成標(biāo)志
.sample_finish (sample_finish ), //采樣完成標(biāo)志
.sample_en (sample_en ), //采樣使能標(biāo)志
.display_en (display_en ) //顯示使能標(biāo)志
);
AD_conversionad_conversion //A/D轉(zhuǎn)換模塊
(
.clk (clk ), //系統(tǒng)時(shí)鐘
.rst (rst ), //復(fù)位按鍵
.ad_scl (ad_scl ), //AD轉(zhuǎn)換控制時(shí)鐘
.ad_sda (ad_sda ), //AD轉(zhuǎn)換數(shù)據(jù)端
.ad_finish (ad_finish ), //AD轉(zhuǎn)換完成標(biāo)志
.ad_data (ad_data ) //數(shù)據(jù)存儲(chǔ)寄存器
);
Parameter_setparameter_set //參數(shù)設(shè)置模塊
(
.clk (clk ), // 系統(tǒng)時(shí)鐘
.rst (rst ), //復(fù)位按鍵
.encode_left (encode_left ), // 左旋標(biāo)志
.encode_right (encode_right ), // 右旋標(biāo)志
.encode_key (encode_key ), // 按鍵標(biāo)志
.trigger (trigger ), //觸發(fā)條件設(shè)置
.ad_finish (ad_finish ) //AD轉(zhuǎn)換完成標(biāo)志
);
AD_SampleAD_sample //AD存RAM模塊
(
.clk (clk ), // 系統(tǒng)時(shí)鐘
.rst (rst ), //按鍵復(fù)位
.ad_finish (ad_finish ), //AD轉(zhuǎn)換完成標(biāo)志
.ad_data (ad_data ), //AD轉(zhuǎn)換后數(shù)據(jù)
.trigger (trigger ), //觸發(fā)條件
.sample_en (sample_en ), //采樣使能標(biāo)志
.sample_finish (sample_finish ), //采樣完成標(biāo)志
.wr_clock (wr_clock ), //RAM寫(xiě)時(shí)鐘
.wr_add (wr_add ), //RAM寫(xiě)地址
.ram_data (ram_data ) //RAM中數(shù)據(jù)
);
LCD_DisplayLCD_display //LCD顯示模塊
(
.clk (clk ), //系統(tǒng)時(shí)鐘
.rst (rst ), //按鍵復(fù)位
.trigger (trigger ), //觸發(fā)條件
.display_en (display_en ), //顯示使能標(biāo)志
.display_finish (display_finish ), //顯示完成標(biāo)志
.re_clock (re_clock ), //RAM讀時(shí)鐘
.re_add (re_add ), //RAM讀地址
.ram_data (ram_data ), //RAM中數(shù)據(jù)
.lcd_rst (lcd_rst ), //LCD復(fù)位
.lcd_bl (lcd_bl ), //LCD背光控制
.lcd_dc (lcd_dc ), //LCD的DC端
.lcd_clk (lcd_clk ), // LCD傳輸SPI的時(shí)鐘
.lcd_data (lcd_data ) // LCD數(shù)據(jù)端
);
endmodule
采用Verilog語(yǔ)言進(jìn)行電路設(shè)計(jì),能夠在每個(gè)抽象層次的描述上對(duì)設(shè)計(jì)進(jìn)行仿真設(shè)計(jì),及時(shí)發(fā)現(xiàn)可能存在的設(shè)計(jì)錯(cuò)誤,能夠有效縮短設(shè)計(jì)周期,并保證設(shè)計(jì)過(guò)程中的正確性,以此實(shí)現(xiàn)我們最終的設(shè)計(jì)。
3 設(shè)計(jì)驗(yàn)證
通過(guò)在開(kāi)發(fā)板上的測(cè)試結(jié)果表明,雖然LCD液晶顯示模塊的分辨率較低,但依然可以實(shí)現(xiàn)示波器的基本功能,特別是對(duì)于頻率不太高的模擬信號(hào),能夠在屏幕上清晰地顯示波形對(duì)應(yīng)的像素點(diǎn)。此外,通過(guò)調(diào)節(jié)旋轉(zhuǎn)編碼器,也實(shí)現(xiàn)了預(yù)定的切換模式、調(diào)節(jié)采樣頻率及改變觸發(fā)條件的功能。通過(guò)Lattice diamond自帶的仿真軟件測(cè)試得出本次設(shè)計(jì)運(yùn)算速度較快,頻率顯示較為準(zhǔn)確,能夠?qū)崿F(xiàn)數(shù)據(jù)的快速讀取。本設(shè)計(jì)方案具有簡(jiǎn)單易操作的特點(diǎn),此外還具有體積小、功耗低、成本低的優(yōu)點(diǎn)。由于FPGA并行執(zhí)行的特點(diǎn),大大提高了系統(tǒng)的性能,能夠?qū)崿F(xiàn)手持式設(shè)計(jì)同時(shí)能滿(mǎn)足基礎(chǔ)電子實(shí)驗(yàn)的需求。此外,本次設(shè)計(jì)的示波器綜合成本相對(duì)于市場(chǎng)銷(xiāo)售的手持式示波器大大降低,便于推廣,有較大的市場(chǎng)價(jià)值和實(shí)用價(jià)值。
4 結(jié)論
本設(shè)計(jì)利用FPGA、A/D轉(zhuǎn)換芯片、LCD液晶顯示器、旋轉(zhuǎn)編碼器實(shí)現(xiàn)了對(duì)輸入模擬信號(hào)的采樣、存儲(chǔ)以及波形的顯示功能,并增添了調(diào)節(jié)采樣頻率及觸發(fā)條件的功能,實(shí)現(xiàn)了對(duì)簡(jiǎn)易手持式示波器的設(shè)計(jì)。通過(guò)驗(yàn)證得出本設(shè)計(jì)具有較快的數(shù)據(jù)傳輸速度及較高的精度,能夠滿(mǎn)足日常的電子相關(guān)測(cè)量需求。本設(shè)計(jì)的低成本與小型化能夠?qū)崿F(xiàn)廉價(jià)手持式示波器的廣泛化應(yīng)用。此外,也可通過(guò)使用12位、16位并行A/D轉(zhuǎn)換芯片以提高本設(shè)計(jì)的精度與速度,利用更高分辨率的LCD顯示以實(shí)現(xiàn)對(duì)本設(shè)計(jì)的更高要求。
參考文獻(xiàn)
[1]朱英明.數(shù)字示波器原理與測(cè)試分析[J].測(cè)試技術(shù),2007(Z1).
[2]雷貴,胡福云.基于FPGA的虛擬簡(jiǎn)易數(shù)字存儲(chǔ)示波器設(shè)計(jì)[J].現(xiàn)代商貿(mào)工業(yè),2011(08).
[3]CoolborXie,PCF8591芯片手冊(cè),Philips公司.
[4]ALPS公司,旋轉(zhuǎn)編碼器EC11數(shù)據(jù)手冊(cè),ALPS公司.
[5]孫盛坤,丁昊等.基于FPGA和TFT彩屏液晶的便攜示波器設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2011.
[6]夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京航天航空大學(xué)出版社,2008.