鄭太恒,孫鳳乾,劉海英,劉大鵬
齊魯工業(yè)大學(xué)( 山東省科學(xué)院) 電氣工程與自動(dòng)化學(xué)院,濟(jì)南 250353
數(shù)字頻率計(jì)與傳統(tǒng)純硬件電路的測(cè)量方式相比,有著成本低,速度快,空間占用率低等優(yōu)點(diǎn)。可以實(shí)現(xiàn)量程的自動(dòng)切換,對(duì)脈沖寬度等其他參數(shù)進(jìn)行測(cè)量的功能[1]。
目前主流的數(shù)字頻率計(jì)設(shè)計(jì)方案有采用小規(guī)模數(shù)字集成電路制作,采用FPGA芯片作為控制核心,采用單片機(jī)為主控制芯片等方案[2]。小規(guī)模數(shù)字集成電路設(shè)計(jì)可以長(zhǎng)期儲(chǔ)存且穩(wěn)定性較高[3],但電路結(jié)構(gòu)較為復(fù)雜且無(wú)法通過(guò)編程實(shí)現(xiàn)功能。FPGA 的出現(xiàn)突破了硬件設(shè)計(jì)方面的體積大、難于集成、設(shè)計(jì)完后不容易更改的瓶頸[4],但是價(jià)格昂貴且編程復(fù)雜。隨著單片機(jī)技術(shù)的發(fā)展,單片機(jī)已經(jīng)可以完美彌補(bǔ)以上缺點(diǎn),實(shí)現(xiàn)高精度,快速度,小體積的頻率計(jì)設(shè)計(jì)[5]?;趩纹瑱C(jī)的數(shù)字頻率計(jì)利用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器直接計(jì)算頻率[6],選用MAX232芯片進(jìn)行單片機(jī)與PC機(jī)的電平轉(zhuǎn)換[7],以此進(jìn)行測(cè)量參數(shù)如波形、量程等選擇,這樣可以實(shí)現(xiàn)多波形、大量程測(cè)量,但操作復(fù)雜需要人工干預(yù),不夠方便,且由于計(jì)算方式問(wèn)題會(huì)出現(xiàn)誤差[8]。
本設(shè)計(jì)的大體流程為通過(guò)單片機(jī)內(nèi)自帶的定時(shí)/計(jì)數(shù)器,將經(jīng)過(guò)整流、分選頻電路[9]后的輸入信號(hào)在多個(gè)不同周期中分別進(jìn)行測(cè)量[10],從而達(dá)到高頻率、高精度、低誤差的性能指標(biāo),最后將測(cè)量頻率值輸出至LCD1602液晶屏顯展示結(jié)果,可以實(shí)現(xiàn)多波形測(cè)量及量程的智能切換。
本課題介紹的以單片機(jī)為核心設(shè)計(jì)的智能數(shù)字頻率計(jì),可以測(cè)量10 Hz~1 MHz的頻率,測(cè)量波形為三角波、矩形波、正弦波。
本次設(shè)計(jì)選擇了多周期同步測(cè)頻法。多周期同步測(cè)頻法是基于傳統(tǒng)直接測(cè)頻法改進(jìn)而來(lái)的。傳統(tǒng)的直接測(cè)頻法是將待測(cè)信號(hào)輸入到單片機(jī)計(jì)數(shù)器的計(jì)數(shù)輸入端,使計(jì)數(shù)器在標(biāo)準(zhǔn)時(shí)間T內(nèi)進(jìn)行計(jì)數(shù),但是由于計(jì)數(shù)器只能進(jìn)行整數(shù)計(jì)數(shù),所以會(huì)有誤差。多周期同步測(cè)頻法是指在閘門時(shí)間內(nèi)分別記錄待測(cè)信號(hào)F和基頻信號(hào)Fx的下降沿個(gè)數(shù)N1,N2,計(jì)算方法為:F=Fx·(N1/N2)。
由于基頻信號(hào)在規(guī)定時(shí)間內(nèi)的下降沿個(gè)數(shù)是一定的,所以在設(shè)計(jì)中可以不設(shè)計(jì)基頻電路而在程序中改用事先測(cè)量好的固定基頻數(shù),從而簡(jiǎn)化硬件電路。
本設(shè)計(jì)主要由信號(hào)整形模塊,分頻模塊,選頻模塊,顯示模塊組成。硬件系統(tǒng)框圖如圖1所示。
圖1 硬件系統(tǒng)框圖
本次設(shè)計(jì)所涉及到的三種波形中,只有矩形波能直接被單片機(jī)的輸入引腳所識(shí)別,所以如果想測(cè)量三角波、正弦波和矩形波,必須在信號(hào)輸入端設(shè)計(jì)一個(gè)信號(hào)整形模塊以實(shí)現(xiàn)在信號(hào)輸入到單片機(jī)前,將除矩形波外其他波形整形成矩形波的功能。要實(shí)現(xiàn)將輸入信號(hào)都轉(zhuǎn)換為可以為單片機(jī)識(shí)別的方波并進(jìn)行信號(hào)整形、增強(qiáng)其抗干擾能力這個(gè)目的,采用施密特觸發(fā)器是最常用且簡(jiǎn)單有效的。
555定時(shí)器本身引腳通過(guò)一些特殊連接方式加之以簡(jiǎn)單輔助電路就可以構(gòu)成一個(gè)施密特觸發(fā)器,只需將555定時(shí)器的閾值輸入端與觸發(fā)輸入端共同作為總輸入端,再加以周圍一些簡(jiǎn)單電路就形成了一個(gè)施密特觸發(fā)器。在新構(gòu)成的施密特觸發(fā)器中,1、8管腳分別接地和電源;2、6管腳分別為低觸發(fā)端TR和高觸發(fā)端TH,二者相連后共同連接信號(hào)輸入端作為信號(hào)總輸入端;3管腳輸出信號(hào)的高低電平是由6和2管腳共同接收的電壓決定的,施密特觸發(fā)器的正負(fù)閾值電壓分別為2VCC/3和VCC/3。當(dāng)輸入信號(hào)一直減小到低于負(fù)向閾值時(shí),3口輸出的電壓變?yōu)楦唠娖剑划?dāng)輸入信號(hào)增大到高于正向閾值時(shí),3口輸出電壓變?yōu)榈碗娖?。從而?shí)現(xiàn)了將模擬信號(hào)波形轉(zhuǎn)變?yōu)榫匦尾ǖ哪康摹?管腳是一個(gè)用來(lái)做信號(hào)整形防止外部干擾擾亂波形的接口,本設(shè)計(jì)中接一個(gè)0.01 μF的電容。
以施密特觸發(fā)器為主體的信號(hào)整形模塊的硬件電路設(shè)計(jì)如圖2所示。
圖2 信號(hào)整形電路
本設(shè)計(jì)決定用CD4040作為分頻模塊的分頻芯片,其最大的分頻倍數(shù)為4 096倍,足以保證本次設(shè)計(jì)的要求。經(jīng)過(guò)分頻后的信號(hào)還需要一個(gè)數(shù)據(jù)選擇器來(lái)選擇具體分頻倍數(shù),最后決定用數(shù)據(jù)選擇器74LS151作為數(shù)據(jù)選擇器,它可以對(duì)數(shù)據(jù)進(jìn)行八選一操作。當(dāng)CD4040的CLK口接收到來(lái)自施密特觸發(fā)器送出的下降沿后開始計(jì)時(shí),信號(hào)經(jīng)過(guò)計(jì)數(shù)器經(jīng)分頻送至計(jì)數(shù)器脈沖輸出端。計(jì)數(shù)器脈沖輸出端與數(shù)據(jù)選擇器的8 個(gè)輸入數(shù)據(jù)端D0至D7相連接。單片機(jī)控制數(shù)據(jù)選擇器根據(jù)D0至D7端口上接收到的信號(hào)確定一個(gè)分頻倍數(shù)。單片機(jī)的P3.2、3.3、3.4接口各自接CD4040中的地址端口A、B、C,然后通過(guò)編寫的軟件的功能來(lái)實(shí)現(xiàn)數(shù)據(jù)的合理化選擇,軟件根據(jù)分頻倍數(shù)和計(jì)數(shù)器計(jì)數(shù)N1的結(jié)合選擇一個(gè)端口的數(shù)據(jù)寫入單片機(jī)。(此處舉例74LS151經(jīng)過(guò)地址譯碼選擇數(shù)據(jù)端時(shí)的情況:若ABC=000,則向輸出端寫入D0口的數(shù)據(jù);若ABC=111,則向輸出端寫入D7口的數(shù)據(jù))
分頻控制模塊電路圖如圖3所示。
圖3 分頻選頻控制模塊
本次設(shè)計(jì)的完成就是依賴于單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器。在智能頻率計(jì)中首先將單片機(jī)中工作方式寄存器的M1口置0,M0口置1,讓內(nèi)部定時(shí)/計(jì)數(shù)器作為16位定時(shí)/計(jì)數(shù)器工作,即工作方式1。然后設(shè)置T0為定時(shí)器,T1為計(jì)數(shù)器,即令控制T0的C/T口置0,T1的口置1。
安排好他們兩個(gè)的工作方式和功能后,通過(guò)軟件給與定時(shí)器T0賦予600 ms閘門時(shí)間并通過(guò)TR0、TR1啟動(dòng)定時(shí)器計(jì)數(shù)器,由于本次設(shè)計(jì)采用的是多周期同步測(cè)頻法,所以除被測(cè)信號(hào)外還要知道基頻信號(hào),但是由于基頻信號(hào)頻率一定,本著簡(jiǎn)化電路的原則就不在此設(shè)計(jì)中使用定時(shí)器T2測(cè)量基頻信號(hào)而是由程序中直接給出。這樣只需讓T1計(jì)數(shù)得出被測(cè)信號(hào)N1,N1是由單片機(jī)的P3.5引腳上的高低電平信號(hào)中下降沿個(gè)數(shù)決定的。在此時(shí),分頻倍數(shù)也通過(guò)程序輔助選好,即當(dāng)單片機(jī)P3.5口從選頻模塊選擇時(shí),先從數(shù)據(jù)選擇器的D7口進(jìn)行選擇,在數(shù)據(jù)選擇器上的每個(gè)口都有對(duì)應(yīng)的N1的范圍,當(dāng)N1范圍不在D7口時(shí),地址自動(dòng)加1,從D6口進(jìn)行選擇,以此類推直到選擇到合適的分頻倍數(shù)。一切確定后將N1、N2送入單片機(jī)中的運(yùn)算處理單元進(jìn)行計(jì)算。
此過(guò)程大體流程圖如圖4所示:
圖4 定時(shí)/計(jì)數(shù)器工作流程
LCD1602的1腳2腳分別接地和電源,3腳為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)通過(guò)一個(gè)10 K的滑動(dòng)變阻器調(diào)節(jié)電壓從而調(diào)節(jié)對(duì)比度。在整個(gè)芯片中控制該模塊執(zhí)行指令的引腳為6引腳,當(dāng)該引腳上電平發(fā)生由高到低的跳變時(shí),該模塊開始工作。顯示模塊電路原理如圖5所示。
圖5 顯示電路
一個(gè)設(shè)計(jì)如果想實(shí)現(xiàn)其目標(biāo)功能,只靠硬件電路是不夠的,還需要軟件電路的“驅(qū)動(dòng)”。
當(dāng)程序開始運(yùn)行后,首先打開定時(shí)器中斷,然后通過(guò)編程實(shí)現(xiàn)對(duì)定時(shí)/計(jì)數(shù)器T0、T1的工作模式進(jìn)行定義。令T0用于定時(shí),周期為600 ms,T1用于記數(shù),對(duì)LCD1602進(jìn)行初始化,并寫入初始顯示內(nèi)容,將分頻倍數(shù)與頻率拆分后,逐個(gè)寫入顯示屏進(jìn)行顯示。主程序流程圖如圖6所示。
圖6 主程序流程圖
中斷開始后,先對(duì)原程序進(jìn)行入棧/壓棧處理,然后用N1記錄定時(shí)器T1的值(定義一個(gè)16位的變量,先接受高8位數(shù)據(jù),左移8位后再接受低8位數(shù)據(jù)),用N1計(jì)算出計(jì)數(shù)頻率,再根據(jù)N1選擇分頻倍數(shù),之后計(jì)算出測(cè)量頻率,將定時(shí)器T0,計(jì)數(shù)器T1重置后,對(duì)原程序進(jìn)行出棧,中斷結(jié)束。
LCD顯示時(shí),首先將LCD初始化。在程序中0代表第一行,1代表第二行,向0寫入“fenpin:”,向1寫入“Fre:Hz”。然后讀LCD忙狀態(tài)子程序,先將數(shù)據(jù)口P0全部設(shè)置為高電平,通過(guò)為引腳賦不同值進(jìn)行讀命令,LCD1602忙信號(hào)在D7口,檢測(cè)D7口狀態(tài)若為1則忙碌,此時(shí)輸入信號(hào)會(huì)被無(wú)視,需要等待,當(dāng)其不忙后向LCD寫命令或數(shù)據(jù)。
本設(shè)計(jì)可以檢測(cè)8位數(shù)值,首先顯示第8位上的數(shù)字,測(cè)量的頻率對(duì)10 000 000取整后再對(duì)10取余即為最后顯示數(shù)值第八位上的數(shù)字,同理第7位上的數(shù)字是測(cè)量的頻率對(duì)1 000 000取整后再對(duì)10取余,以此類推顯示出8位頻率。然后對(duì)分頻倍數(shù)進(jìn)行顯示,方法與頻率顯示一樣只不過(guò)分頻倍數(shù)只有4位。
仿真前,因?yàn)橐?yàn)證該設(shè)計(jì)是否能測(cè)量多種波形所以要先在本次設(shè)計(jì)的信號(hào)輸入端加一個(gè)Proteus函數(shù)發(fā)生器,正極接頻率計(jì)的信號(hào)輸入端,負(fù)極接地。進(jìn)行仿真,隨后彈出函數(shù)發(fā)生器設(shè)置面板,其中Frequency的作用是調(diào)節(jié)頻率、Amplitude的作用是調(diào)節(jié)幅度、Waveform的作用是波形切換、Polarity的作用是單雙極性切換、Range為選擇量程。如圖7所示提供正弦波、三角波以及方波的波形選擇。
圖7 函數(shù)發(fā)生器控制面板
隨便輸入頻率值與波形后,頻率計(jì)顯示出數(shù)字,直接與信號(hào)輸入端口連接的數(shù)碼管所顯示數(shù)字為實(shí)際輸入信號(hào)的頻率值,而LCD液晶顯示屏顯示的則是本次仿真通過(guò)整形、計(jì)算、LCD計(jì)算后的測(cè)量頻率。LCD屏第一行為分頻倍數(shù),從2 048開始向下減直到選擇到合適的分頻倍數(shù),第二行是測(cè)量值它隨著分頻倍數(shù)的變化發(fā)生變化,當(dāng)分頻倍數(shù)確定后,測(cè)量值也隨之確定。
本小節(jié)以正弦波為例進(jìn)行仿真驗(yàn)證,當(dāng)選擇輸入頻率為低頻1 kHz時(shí),LCD顯示結(jié)果如圖8所示,此時(shí)分頻倍數(shù)為1。
圖8 低頻信號(hào)測(cè)量
為了證明可以測(cè)頻率非常高,隨機(jī)輸入一個(gè)很大的數(shù),此時(shí)由于LCD計(jì)算和單片機(jī)內(nèi)部定時(shí)計(jì)數(shù)器的計(jì)算,顯示時(shí)間可能會(huì)長(zhǎng)一點(diǎn),高頻段測(cè)量結(jié)果如圖9所示,此時(shí)分頻倍數(shù)為2 048,可以看出此時(shí)測(cè)量頻率和實(shí)際頻率還是有一定誤差的,造成誤差的原因有很多,下面將會(huì)進(jìn)行討論。
圖9 高頻信號(hào)測(cè)量
出現(xiàn)誤差的原因有兩個(gè),第一測(cè)量待測(cè)信號(hào)的周期個(gè)數(shù)時(shí)由于計(jì)算閘門時(shí)間的不穩(wěn)定性導(dǎo)致;第二是由于該設(shè)計(jì)中存在分頻電路,當(dāng)分頻倍數(shù)達(dá)到2 048時(shí),送給單片機(jī)T1口計(jì)數(shù)的下降沿個(gè)數(shù)會(huì)增加一個(gè),從而導(dǎo)致測(cè)量頻率誤差就會(huì)增加2 048。
本設(shè)計(jì)采用了當(dāng)下最為常用的單片機(jī)作為硬件核心,彌補(bǔ)了傳統(tǒng)硬件電路造價(jià)高,電路復(fù)雜的缺點(diǎn),以最小的空間、最簡(jiǎn)單的電路和最低的造價(jià)對(duì)各種波形信號(hào)的頻率進(jìn)行測(cè)量,采用了多周期同步測(cè)頻法,只要周期足夠大,不存在測(cè)量死區(qū)問(wèn)題,測(cè)量的準(zhǔn)確度得到提升。
采用的12 MHz晶振的單片機(jī)理論上存在500 KHz的計(jì)數(shù)頻率上限值,本設(shè)計(jì)采用分頻模塊將高頻信號(hào)分頻,大大提高數(shù)字頻率計(jì)的量程。分頻后采用數(shù)據(jù)選擇器與單片機(jī)相連,通過(guò)軟硬件結(jié)合的方式實(shí)現(xiàn)量程的自動(dòng)切換,改善了傳統(tǒng)頻率計(jì)需要手動(dòng)切換量程的特點(diǎn)。
實(shí)驗(yàn)證明仿真器件數(shù)學(xué)模型因?yàn)榭紤]了芯片處理延時(shí),所以在測(cè)高頻信號(hào)時(shí)等待結(jié)果的周期比較長(zhǎng)。