榮雪琴
(1.蘇州大學電子信息學院,江蘇 蘇州 215104;2.蘇州工業(yè)職業(yè)技術學院電子工程系,江蘇 蘇州 215104)
利用一些常用的儀器進行波形檢測,往往只能測量波形的幅度、頻率以及觀察兩個波形的相對位置,所測的相位差誤差大,并且需要經(jīng)過計算。本文以單片機為核心,設計了一款相位差測量系統(tǒng),其具有硬件電路簡單、測量精度高、顯示直觀等優(yōu)點,有一定的使用價值。
系統(tǒng)的總體設計框圖如圖1所示,主要由信號檢測電路、單片機AT89C51和LED數(shù)碼管顯示等3部分電路組成。信號檢測電路,完成對兩個正弦波信號的周期T和時間差Δt的檢測;單片機完成對信號檢測的控制,把檢測到的信號轉(zhuǎn)換成相位差φ,并且轉(zhuǎn)換成數(shù)碼管所能顯示的字型代碼后,從單片機的串行口送出;顯示電路,采用3片串并轉(zhuǎn)換芯片74LS164進行輸出端口的擴展,然后在74LS164的輸出端各接一個數(shù)碼管,用于顯示相位差。
圖1 系統(tǒng)框圖
信號檢測電路由1片雙電壓比較器LM393和2片雙D觸發(fā)器74LS74等組成(如圖2所示),完成兩個被測信號的時間差和周期的檢測,在AT89C51單片機的控制下,可以實現(xiàn)準確的測量。
(1)零點的檢測。由LM393等電路組成的零點檢測電路,分別用以檢測A、C兩點輸入的兩路交流信號的零點。以兩路正弦信號為例,在A、C兩點輸入兩個正弦信號,當輸入信號大于零時,分別在B、D兩點輸出高電平;當輸入信號電壓小于-5×(10K/330K)V時,分別在B、D兩點輸出低電平。因此在B、D兩點輸出兩個與輸入的正弦信號相對應的方波信號,由于方波信號的上升沿,正好對應輸入信號的由負變正的零點時刻,所以時間差信號和周期信號的檢測采用上升沿測量,可以提高測量的精度。
圖2 信號檢測電路
(2)周期信號的檢測。由圖2中下面兩個D觸發(fā)器在單片機P1.2和P1.3控制下,完成A點輸入的被測信號的周期T的檢測。P1.2接D1、D2兩個觸發(fā)器的清零端,同時也是 D2觸發(fā)器的輸入,P1.3與Q2相連接。P1.2是由軟件控制其為高電平或低電平,P1.3是軟件對其電平進行查詢的。開始進行檢測時,首先使P1.2為低電平,兩個D觸發(fā)器的清零端有效,此時輸出Q1和Q2都為低電平0;當P1.2由0轉(zhuǎn)為1并且B點信號由0變?yōu)?時,輸出Q1由0變?yōu)?,輸出Q2仍為低電平0;當B點信號第二次由0變?yōu)?時,輸出Q1又由1變?yōu)?,同時輸出Q2也由0變?yōu)?。當單片機檢測到P1.3為高電平時,意味著一次檢測完成,同時使P1.2清零,為下一次檢測做準備。輸出Q1正好對應輸入信號A的周期T,將這個周期信號接到單片機的外部中斷1引腳上。
(3)時間差信號的檢測。由圖2中上面兩個D觸發(fā)器和一個與門在單片機P1.2的控制下完成A、B兩個正弦信號的時間差Δt的檢測。當P1.2為低電平0時,兩個D觸發(fā)器的清零端有效,使得輸出 Q3和Q4都為低電平0;當P1.2為高電平1并且B點信號由0變?yōu)?時,輸出Q3由0變?yōu)?,由于此時D點信號仍為低電平0,使得觸發(fā)器D4的脈沖信號無效,所以輸出Q4仍為低電平0;當D點信號由0變?yōu)?時,輸出Q4由0變?yōu)?,從而與門的輸出由1變?yōu)?,觸發(fā)器D3的清零端有效,使輸出Q3由1變?yōu)?,這樣就完成了A、B兩個正弦信號的一次時間差的檢測,輸出Q3即為時間差信號Δt,將這個時間差信號接到單片機的外部中斷0引腳上。
顯示電路由3個單個數(shù)碼管和3片74LS164構成(如圖3所示)。所需顯示的3位數(shù)字的字型碼,由串行口的接收端P3.0輸出,串行口的發(fā)送端P3.1輸出同步移位脈沖,P1.0控制3片74LS164的清零端,單片機的串行口工作在方式0,只要將需要顯示的3位數(shù)字的字型碼從串行口輸出,就能在3個數(shù)碼管上穩(wěn)定地顯示出來。
圖3 顯示電路
(1)串行輸入并行輸出移位寄存器74LS164。74LS164為8位移位寄存器,與單片機的串行口組成擴展輸出端口的電路。當清零端(CLR)為低電平時,輸出端(D0~D7)均為低電平。串行數(shù)據(jù)輸入端(A,B)可控制數(shù)據(jù)輸入。當 A、B任意一個為低電平,則禁止新數(shù)據(jù)輸入,在時鐘端(CK)脈沖上升沿作用下D7為低電平。當A、B有一個為高電平,則另一個就允許輸入數(shù)據(jù),并在CK上升沿作用下決定D7的狀態(tài)。左邊的74LS164的輸入端A/B接單片機的P3.0用于接收串行口發(fā)送的數(shù)據(jù),中間和右邊的74LS164的輸入端分別接各自左邊的74LS164輸出的最低位D0,P3.1用于輸出同步脈沖,在P3.0每輸出一位數(shù)據(jù)時,P3.1同時輸出一個同步脈沖信號,在同步脈沖的作用下,將輸入數(shù)據(jù)從左邊的74LS164的D7輸出,原來的D7~D0的數(shù)據(jù)依次向右移一位,這樣當3個8位的字型碼發(fā)送完,先發(fā)送的在最右邊的74LS164的D7~D0輸出,后發(fā)送的在左邊的74LS164的D7~D0輸出。
(2)數(shù)碼管。數(shù)碼管內(nèi)部由7個條形發(fā)光二極管和1個小圓點發(fā)光二極管組成,根據(jù)各管的亮暗組合成字符。常見數(shù)碼管有10根管腳。其中COM為公共端,根據(jù)內(nèi)部發(fā)光二極管的接線形式,可分為共陰極和共陽極兩種。使用時,共陰極數(shù)碼管公共端接地,共陽極數(shù)碼管公共端接電源。每段發(fā)光二極管需5~10mA的驅(qū)動電流,才能正常發(fā)光,一般需加限流電阻控制電流的大小。
本系統(tǒng)采用3個單個共陰極的數(shù)碼管,工作在靜態(tài)顯示方式。將3個數(shù)碼管的公共端都接地,其余8個輸入端分別接74LS164的8個輸出端,每當串行口發(fā)送3個字型碼時,數(shù)碼管就能穩(wěn)定地顯示出兩個被測信號的相位差。
系統(tǒng)的軟件主要完成對時間差信號和周期信號的檢測的控制和采集,并通過計算轉(zhuǎn)換成兩個被測信號的相位差,再通過查表轉(zhuǎn)換成相對應的字型碼,利用串行口將其發(fā)送。
根據(jù)相位差的定義,兩個周期同為T的正弦信號,其相位差Φ與時間差Δt和周期T的關系為:Φ=(360°/T)Δt,在單片機控制下,信號檢測電路可以精確地測出T和Δt,從而可以計算出相位差Φ。
使用單片機內(nèi)部的定時器/計數(shù)器T0、T1分別測量Δt和T。將T0和T1設為內(nèi)部定時方式(C/T軈=0),工作方式選擇方式2(M1M0取10),門控位選擇軟件與硬件共同啟動(GATE=1),因此方式控制字為AAH;定時器/計數(shù)器T0、T1的初始值選擇00H;定時器/計數(shù)器T0、T1都工作在中斷方式,因此要開放定時器T0和T1的中斷(EA=1,ET0=1,ET1=1)。以Δt的檢測為例,將TR0置1后T0是否計數(shù),取決于外部中斷0引腳上的信號,當外部中斷0引腳上的信號由0變?yōu)?時,T0開始計數(shù),計數(shù)器計滿時觸發(fā)中斷,在中斷服務程序中,使用內(nèi)部寄存器R3記錄中斷次數(shù),當外部中斷0引腳上的信號由1變?yōu)?時,停止計數(shù)。因此只要將Δt信號接在外部中斷0引腳上,就可方便地求出以微秒為單位的Δt的數(shù)值,若晶振頻率為 12MHz,即 Δt=R3× 28+(TL0)。
同理,將T信號接在外部中斷1引腳上,就可方便地求出以微秒為單位的T的數(shù)值,即T=R5×28+(TL1),R5為記錄T1的中斷次數(shù)。
采用這種方法測量T和Δt的最大絕對誤差為1μs,主程序的流程圖如圖4所示。
圖4 主程序流程圖
顯示子程序完成將計算出的相位差Φ轉(zhuǎn)換成相應的字型碼,然后再將其發(fā)送,就能在數(shù)碼管上顯示出來。代碼轉(zhuǎn)換時只需要定義一個0~9的字型碼表,利用查表指令,將計算出來的相位差查出相應的字型碼,并存放在內(nèi)部RAM的3個存儲單元。在進行串行發(fā)送的時候,首先將74LS164清零,設置發(fā)送字節(jié)數(shù)R7為3,串行口工作方式為方式0,因此SCON為00H,接著就可以啟動串行口發(fā)送,等待一幀數(shù)據(jù)發(fā)送完后,清除發(fā)送中斷標志位,再取下一個發(fā)送的數(shù)據(jù),直到3個數(shù)據(jù)發(fā)送完。
相位差是交流信號的一個重要參數(shù),采用AT89C51單片機作控制器,可充分利用單片機片內(nèi)的硬件功能和CPU處理功能。此測量方法具有硬件電路簡單、測量精度高、顯示直觀等優(yōu)點,具有一定的使用價值。
[1]劉文濤.MCS-51單片機實用教程[M].北京:原子能出版社,2005.
[2]劉訓非.單片機技術及應用[M].北京:清華大學出版社,2010.
[3]任中民.數(shù)字電子技術[M].北京:清華大學出版社,2005.