任小青+王曉娟+田芳
摘 要: 主要介紹以AT89C51單片機(jī)為核心部件的低頻信號發(fā)生器的設(shè)計方法及工作原理。系統(tǒng)采用單片機(jī)擴(kuò)展外部存儲器和DAC接口技術(shù),簡化了儀器硬件設(shè)計。通過波形選擇電路讀取波形信號經(jīng)離散化處理之后的波代碼, 并通過D/ A 轉(zhuǎn)換,還原成所需要的波形。通過改變存儲器輸出波代碼的速度來調(diào)節(jié)輸出信號的頻率,改變放大器的放大倍數(shù)來調(diào)節(jié)輸出信號的幅值。此外還討論了波形離散化處理方法及數(shù)據(jù)采樣點(diǎn)數(shù)與存儲容量的關(guān)系, 并給出了系統(tǒng)結(jié)構(gòu)圖和軟件框圖。
關(guān)鍵詞: 低頻信號; 數(shù)據(jù)離散化; 幅值; 典型信號
中圖分類號: TN710?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2014)16?0014?04
Design on low?frequency signal generator based on SCM
REN Xiao?qing1, WANG Xiao?juan1, TAN Fang2
(1. School of Mechanical Engineering, Qinghai University, Xining 810016, China;
2. Modern Education Technology Center, Qinghai University, Xining 810016, China)
Abstract: The design approach and working principle of a low?frequency signal generator based on AT89C51 are introduced. The hardware design was simplified by using external memory extended with SCM and DAC interface technology. The wave code after discretization processing of waveform signal is read out though a waveform selection circuit, and reverted to the needed waveform by the D/A converter. The output signal frequency is adjusted by changing the wave code output speed of the memory. The amplitude is adjusted by changing the magnification of the amplifier. The waveform discretization processing method, and the relation between data sampling number and storage capacity are discussed. The system structure chart and software flow chart are given.
Keywords: low?frequency signal; data discretization; amplitude; typical signal
0 引 言
在工業(yè)測量控制系統(tǒng)的開發(fā)過程中, 常需要采用信號發(fā)生器為控制系統(tǒng)提供輸入信號來模擬實際輸入,并根據(jù)輸出的頻率響應(yīng)特性來對系統(tǒng)進(jìn)行調(diào)校。該系統(tǒng)不但能提供多種波形信號,而且信號的頻率和幅值的大小也很容易控制。用它來模擬多種工況下的真實輸入信號, 以達(dá)到降低開發(fā)成本、提高項目開發(fā)效率的目的。本文介紹了以AT89C51單片機(jī)為控制核心的低頻信號發(fā)生器的硬件組成和工作原理。這里利用單片機(jī)的強(qiáng)大控制和計算能力,結(jié)合DAC接口技術(shù)產(chǎn)生頻率和幅度都可調(diào)的正弦、方波、三角波等典型的波形信號來模擬不同的工況[1]。
1 低頻信號發(fā)生器的工作過程及硬件組成
該系統(tǒng)的工作過程是通過波形選擇電路使AT89C51讀入預(yù)置的波代碼表,根據(jù)矩陣鍵盤電路輸入的頻率值結(jié)合系統(tǒng)時鐘與復(fù)位電路中的晶振頻率,計算出相應(yīng)的控制碼,用來控制將數(shù)據(jù)輸送到D/A轉(zhuǎn)換器的速度,最終實現(xiàn)控制輸出信號頻率的目的。此頻率通過LED進(jìn)行顯示。D/A轉(zhuǎn)換器將數(shù)字信號轉(zhuǎn)換成模擬量,并通過改變ADC0832的輸入基準(zhǔn)電壓,來調(diào)整輸出信號的幅值。其主要組成包括主控電路、波形選擇電路、矩陣鍵盤和數(shù)碼顯示電路、信號輸出電路。系統(tǒng)硬件組成框圖1所示。
1.1 主控電路
主控電路以AT89C51為進(jìn)程和任務(wù)的調(diào)度核心,輔以外圍電路構(gòu)成,主要完成波形數(shù)據(jù)表的讀取。其根據(jù)鍵盤輸入的頻率值,計算出相應(yīng)的控制參數(shù),來控制輸出信號的頻率,并用LED顯示頻率值。系統(tǒng)電路原理如圖2所示。 AT89C51的P0口與HD7279芯片進(jìn)行連接,使用HD7279管理LED顯示和鍵盤輸入操作。P1口和波形選擇按鈕連接,P2口用來做A/D轉(zhuǎn)換與DAC0832進(jìn)行連接。同時給出了時鐘和復(fù)位電路的連接。
圖1系統(tǒng)硬件結(jié)構(gòu)圖
1.2 波形選擇電路
波形選擇電路通過開關(guān)按鈕S1~S6對單片機(jī)發(fā)出波型選擇信號,S2選取正弦波,S3選擇三角波,以此類推。如圖2所示,當(dāng)按鈕被按下后,與地相通,這時相應(yīng)的連接線上就會出現(xiàn)一個低電位信號,中斷系統(tǒng)會向AT89C51發(fā)出指令,讓其對P1口進(jìn)行掃描,當(dāng)掃描到這個低電信號的位置后,就從EPROM調(diào)入相應(yīng)的波形數(shù)據(jù)表。
1.3 矩陣鍵盤和數(shù)碼顯示電路
鍵盤和顯示電路由HD7279芯片進(jìn)行管理,無需外圍電路,只需要外接少量的電阻,即可構(gòu)成完善的顯示、鍵盤接口電路。而與CPU的接口采用SPI串行接口方式,使用方便。
鍵盤可以輸入波的頻率值,系統(tǒng)會根據(jù)這個值計算出相應(yīng)的控制量,控制數(shù)據(jù)向ADC0832的輸出速度,達(dá)到控制頻率的目的。
1.4 信號輸出電路
AT89C51將波形數(shù)據(jù)表中的數(shù)據(jù)讀出后,根據(jù)鍵盤輸入的頻率,算出控制量,將數(shù)據(jù)按一定的速度逐一輸入到D/A轉(zhuǎn)換器中,由輸出數(shù)據(jù)的速度來調(diào)整信號的頻率。通過放大器LM082,將D/A轉(zhuǎn)換器輸出電流模擬量轉(zhuǎn)換為電壓模擬量,其幅值可通過改變輸入基準(zhǔn)電壓Vref來調(diào)整。
2 波形信號的離散化處理
工控系統(tǒng)中一般使用周期性信號,其變化規(guī)律可以用波碼表來存儲,該表記錄了信號在一個周期中幅值的變化。其通過將信號波離散、計算幅值后得到。幅值位數(shù)和1個周期內(nèi)采樣的次數(shù),共同決定了輸出波形的精度?,F(xiàn)對典型周期信號正弦波進(jìn)行離散化處理[2]如圖3所示。在其一個周期內(nèi)取N等分離散點(diǎn),計算出相對應(yīng)各個點(diǎn)的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π為中心對稱,且(0~π)區(qū)間內(nèi)又以[π2]為軸對稱。故只需計算[14] 周期內(nèi)各個點(diǎn)的正弦值,具體步驟如下:
(1) 計算(0~[π2])區(qū)間各個離散點(diǎn)的正弦值;
(2) 根據(jù)軸對稱關(guān)系,將(0~[π2])區(qū)間各個離散點(diǎn)的正弦值倒序復(fù)制到([π2]~π)區(qū)間的離散點(diǎn)上;
(3) 根據(jù)中心對稱關(guān)系,將(0~π)區(qū)間各個點(diǎn)正弦值求補(bǔ)后,依次復(fù)制到(π~2π)區(qū)間的離散點(diǎn)上,這樣就得到了整個周期的正弦值;
(4) 根據(jù)DAC的轉(zhuǎn)換位數(shù),將得到的這些數(shù)據(jù)換算后依次存入E2PROM中, 這樣就得到一個完整的正弦波碼表。
圖3 正弦波形的離散化
由圖3可見,離散處理后的正弦曲線,實際上變成了一個階梯曲線,當(dāng)N值越小這種階梯化的狀態(tài)越明顯,誤差也就越大,為了能減小這種失真,就必須在一個周期內(nèi),使N取得足夠大。 這樣可以使階梯波更好地擬合正弦曲線,有效地減少失真 。當(dāng)然這樣做會增大波碼表的大小,相應(yīng)地也就占用了更多的存儲器空間,而且用DAC 復(fù)現(xiàn)波形的速度也會相應(yīng)的降低。如果一個周期中正弦信號的離散點(diǎn)有4 096個,每點(diǎn)占用1 B,那么正弦信號的波碼表需要占4 KB;如果每個離散點(diǎn)占2 B,則容量將增加1倍[3]。
波形復(fù)現(xiàn)速度和離散點(diǎn)個數(shù)成比例關(guān)系,但減少失真度和增加離散點(diǎn)卻不是線性關(guān)系,所以合理選擇離散點(diǎn)數(shù)是十分重要的。如果一個周期曲線有其確定的函數(shù)表達(dá)式,那么就可以對其進(jìn)行離散處理,然后通過DAC轉(zhuǎn)換,復(fù)現(xiàn)這個函數(shù)。輸出信號頻率的上限受數(shù)據(jù)傳送速度、數(shù)據(jù)鎖存器及DAC 轉(zhuǎn)換時間等因素的影響[4],其頻率一定不會很高,也就是說本系統(tǒng)可以實現(xiàn)任意低頻波形的復(fù)現(xiàn)。
3 信號發(fā)生器軟件設(shè)計
該系統(tǒng)軟件由整機(jī)初始化、DAC輸出、鍵盤及顯示等三大模塊組成,由匯編語言編寫全部程序,其流程如圖4所示。
系統(tǒng)開機(jī)或復(fù)位后,首先進(jìn)行初始化,其包括對鍵盤顯示模塊初始化及開中斷設(shè)置等。完成初始工作狀態(tài)設(shè)置后,根據(jù)波形選擇開關(guān),單片機(jī)讀取存儲器中不同的波形數(shù)據(jù),然后進(jìn)入DAC 主程序模塊,鍵盤中斷服務(wù)程序根據(jù)不同按鍵的鍵值計算出相應(yīng)的控制量,控制數(shù)據(jù)輸出速度,用來實現(xiàn)對波頻率的控制。鍵盤及顯示模塊的管理可由編程芯片HD7279 完成,單片機(jī)只需要執(zhí)行按鍵中斷服務(wù)程序,由此可以騰出更多時間進(jìn)行波形數(shù)據(jù)處理,使得輸出波形更為平滑。
圖4 軟件結(jié)構(gòu)總體程序流程
其中鍵盤掃描及顯示部分程序如下:
PORT EQU 0CFA0H
CSEG AT 4000H
LJMP START
CSEG AT 4100H
START: MOV DPTR,#00CFE9H
MOV A,#0D1H ;清顯示
MOVX @DPTR,A
LOOP10: MOVX A,@DPTR
ANL A,#0FH
JZ LOOP10 ;有鍵按下?沒有則循環(huán)等待
MOV A,#0A0H ;顯示\消隱命令
MOVX @DPTR,A
MOV A,#40H ;讀FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;讀鍵值
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#0CFE9H ;寫顯示RAM命令
MOV A,#81H ;選中LED2
MOVX @DPTR,A
MOV A,R7
ANL A,#0FH ;取后半字節(jié)
MOV 30H,#01H;
MOV 31H,#01H;
JNB P1.5,TFU
MOV 30H,A ;30H存放調(diào)頻值
SJMP L1
TFU: MOV 31H,A ;31H存放調(diào)幅值
L1: MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;寫顯示RAM命令
MOV A,#80H ;選中LED1
MOVX @DPTR,A
MOV A,R7
ANL A,#0F0H
SWAP A ;取后半字節(jié)
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H
4 結(jié) 語
該系統(tǒng)具有如下特點(diǎn): 系統(tǒng)結(jié)構(gòu)簡單,采用集成化元器件,工作穩(wěn)定??梢暂敵龆喾N波形,也就是說可以對任何具有確定函數(shù)表達(dá)式的曲線進(jìn)行輸出。輸出信號容易控制,通過改變DAC輸入基準(zhǔn)電壓來改變信號幅值,通過改變發(fā)送到DAC數(shù)據(jù)的速度可以改變頻率。但該系統(tǒng)受到DAC0832轉(zhuǎn)換位數(shù)和建立時間的限制,波形的輸出信號頻率不能太高,若采用其他轉(zhuǎn)換位數(shù)更高、建立時間更短的D/A轉(zhuǎn)換芯片,如采用DAC712 來代替DAC0832,能使輸出波的頻率范圍更大。
參考文獻(xiàn)
[1] 李杏春.單片機(jī)原理及使用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1996.
[2] 李華.MCS?51系列單片機(jī)實用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1993.
[3] 于楓,王鼎.微型計算機(jī)原理及應(yīng)用[M].長春:吉林科學(xué)技術(shù)出版社,1996.
[4] 何利民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1995.
[5] 毛群.基于AD9851的受控正弦信號發(fā)生器設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(1):187?188.
[6] 李朋飛,王勇,黃秋蘭.基于DDS的任意波信號發(fā)生器設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(12):72?74.
鍵盤和顯示電路由HD7279芯片進(jìn)行管理,無需外圍電路,只需要外接少量的電阻,即可構(gòu)成完善的顯示、鍵盤接口電路。而與CPU的接口采用SPI串行接口方式,使用方便。
鍵盤可以輸入波的頻率值,系統(tǒng)會根據(jù)這個值計算出相應(yīng)的控制量,控制數(shù)據(jù)向ADC0832的輸出速度,達(dá)到控制頻率的目的。
1.4 信號輸出電路
AT89C51將波形數(shù)據(jù)表中的數(shù)據(jù)讀出后,根據(jù)鍵盤輸入的頻率,算出控制量,將數(shù)據(jù)按一定的速度逐一輸入到D/A轉(zhuǎn)換器中,由輸出數(shù)據(jù)的速度來調(diào)整信號的頻率。通過放大器LM082,將D/A轉(zhuǎn)換器輸出電流模擬量轉(zhuǎn)換為電壓模擬量,其幅值可通過改變輸入基準(zhǔn)電壓Vref來調(diào)整。
2 波形信號的離散化處理
工控系統(tǒng)中一般使用周期性信號,其變化規(guī)律可以用波碼表來存儲,該表記錄了信號在一個周期中幅值的變化。其通過將信號波離散、計算幅值后得到。幅值位數(shù)和1個周期內(nèi)采樣的次數(shù),共同決定了輸出波形的精度?,F(xiàn)對典型周期信號正弦波進(jìn)行離散化處理[2]如圖3所示。在其一個周期內(nèi)取N等分離散點(diǎn),計算出相對應(yīng)各個點(diǎn)的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π為中心對稱,且(0~π)區(qū)間內(nèi)又以[π2]為軸對稱。故只需計算[14] 周期內(nèi)各個點(diǎn)的正弦值,具體步驟如下:
(1) 計算(0~[π2])區(qū)間各個離散點(diǎn)的正弦值;
(2) 根據(jù)軸對稱關(guān)系,將(0~[π2])區(qū)間各個離散點(diǎn)的正弦值倒序復(fù)制到([π2]~π)區(qū)間的離散點(diǎn)上;
(3) 根據(jù)中心對稱關(guān)系,將(0~π)區(qū)間各個點(diǎn)正弦值求補(bǔ)后,依次復(fù)制到(π~2π)區(qū)間的離散點(diǎn)上,這樣就得到了整個周期的正弦值;
(4) 根據(jù)DAC的轉(zhuǎn)換位數(shù),將得到的這些數(shù)據(jù)換算后依次存入E2PROM中, 這樣就得到一個完整的正弦波碼表。
圖3 正弦波形的離散化
由圖3可見,離散處理后的正弦曲線,實際上變成了一個階梯曲線,當(dāng)N值越小這種階梯化的狀態(tài)越明顯,誤差也就越大,為了能減小這種失真,就必須在一個周期內(nèi),使N取得足夠大。 這樣可以使階梯波更好地擬合正弦曲線,有效地減少失真 。當(dāng)然這樣做會增大波碼表的大小,相應(yīng)地也就占用了更多的存儲器空間,而且用DAC 復(fù)現(xiàn)波形的速度也會相應(yīng)的降低。如果一個周期中正弦信號的離散點(diǎn)有4 096個,每點(diǎn)占用1 B,那么正弦信號的波碼表需要占4 KB;如果每個離散點(diǎn)占2 B,則容量將增加1倍[3]。
波形復(fù)現(xiàn)速度和離散點(diǎn)個數(shù)成比例關(guān)系,但減少失真度和增加離散點(diǎn)卻不是線性關(guān)系,所以合理選擇離散點(diǎn)數(shù)是十分重要的。如果一個周期曲線有其確定的函數(shù)表達(dá)式,那么就可以對其進(jìn)行離散處理,然后通過DAC轉(zhuǎn)換,復(fù)現(xiàn)這個函數(shù)。輸出信號頻率的上限受數(shù)據(jù)傳送速度、數(shù)據(jù)鎖存器及DAC 轉(zhuǎn)換時間等因素的影響[4],其頻率一定不會很高,也就是說本系統(tǒng)可以實現(xiàn)任意低頻波形的復(fù)現(xiàn)。
3 信號發(fā)生器軟件設(shè)計
該系統(tǒng)軟件由整機(jī)初始化、DAC輸出、鍵盤及顯示等三大模塊組成,由匯編語言編寫全部程序,其流程如圖4所示。
系統(tǒng)開機(jī)或復(fù)位后,首先進(jìn)行初始化,其包括對鍵盤顯示模塊初始化及開中斷設(shè)置等。完成初始工作狀態(tài)設(shè)置后,根據(jù)波形選擇開關(guān),單片機(jī)讀取存儲器中不同的波形數(shù)據(jù),然后進(jìn)入DAC 主程序模塊,鍵盤中斷服務(wù)程序根據(jù)不同按鍵的鍵值計算出相應(yīng)的控制量,控制數(shù)據(jù)輸出速度,用來實現(xiàn)對波頻率的控制。鍵盤及顯示模塊的管理可由編程芯片HD7279 完成,單片機(jī)只需要執(zhí)行按鍵中斷服務(wù)程序,由此可以騰出更多時間進(jìn)行波形數(shù)據(jù)處理,使得輸出波形更為平滑。
圖4 軟件結(jié)構(gòu)總體程序流程
其中鍵盤掃描及顯示部分程序如下:
PORT EQU 0CFA0H
CSEG AT 4000H
LJMP START
CSEG AT 4100H
START: MOV DPTR,#00CFE9H
MOV A,#0D1H ;清顯示
MOVX @DPTR,A
LOOP10: MOVX A,@DPTR
ANL A,#0FH
JZ LOOP10 ;有鍵按下?沒有則循環(huán)等待
MOV A,#0A0H ;顯示\消隱命令
MOVX @DPTR,A
MOV A,#40H ;讀FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;讀鍵值
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#0CFE9H ;寫顯示RAM命令
MOV A,#81H ;選中LED2
MOVX @DPTR,A
MOV A,R7
ANL A,#0FH ;取后半字節(jié)
MOV 30H,#01H;
MOV 31H,#01H;
JNB P1.5,TFU
MOV 30H,A ;30H存放調(diào)頻值
SJMP L1
TFU: MOV 31H,A ;31H存放調(diào)幅值
L1: MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;寫顯示RAM命令
MOV A,#80H ;選中LED1
MOVX @DPTR,A
MOV A,R7
ANL A,#0F0H
SWAP A ;取后半字節(jié)
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H
4 結(jié) 語
該系統(tǒng)具有如下特點(diǎn): 系統(tǒng)結(jié)構(gòu)簡單,采用集成化元器件,工作穩(wěn)定??梢暂敵龆喾N波形,也就是說可以對任何具有確定函數(shù)表達(dá)式的曲線進(jìn)行輸出。輸出信號容易控制,通過改變DAC輸入基準(zhǔn)電壓來改變信號幅值,通過改變發(fā)送到DAC數(shù)據(jù)的速度可以改變頻率。但該系統(tǒng)受到DAC0832轉(zhuǎn)換位數(shù)和建立時間的限制,波形的輸出信號頻率不能太高,若采用其他轉(zhuǎn)換位數(shù)更高、建立時間更短的D/A轉(zhuǎn)換芯片,如采用DAC712 來代替DAC0832,能使輸出波的頻率范圍更大。
參考文獻(xiàn)
[1] 李杏春.單片機(jī)原理及使用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1996.
[2] 李華.MCS?51系列單片機(jī)實用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1993.
[3] 于楓,王鼎.微型計算機(jī)原理及應(yīng)用[M].長春:吉林科學(xué)技術(shù)出版社,1996.
[4] 何利民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1995.
[5] 毛群.基于AD9851的受控正弦信號發(fā)生器設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(1):187?188.
[6] 李朋飛,王勇,黃秋蘭.基于DDS的任意波信號發(fā)生器設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(12):72?74.
鍵盤和顯示電路由HD7279芯片進(jìn)行管理,無需外圍電路,只需要外接少量的電阻,即可構(gòu)成完善的顯示、鍵盤接口電路。而與CPU的接口采用SPI串行接口方式,使用方便。
鍵盤可以輸入波的頻率值,系統(tǒng)會根據(jù)這個值計算出相應(yīng)的控制量,控制數(shù)據(jù)向ADC0832的輸出速度,達(dá)到控制頻率的目的。
1.4 信號輸出電路
AT89C51將波形數(shù)據(jù)表中的數(shù)據(jù)讀出后,根據(jù)鍵盤輸入的頻率,算出控制量,將數(shù)據(jù)按一定的速度逐一輸入到D/A轉(zhuǎn)換器中,由輸出數(shù)據(jù)的速度來調(diào)整信號的頻率。通過放大器LM082,將D/A轉(zhuǎn)換器輸出電流模擬量轉(zhuǎn)換為電壓模擬量,其幅值可通過改變輸入基準(zhǔn)電壓Vref來調(diào)整。
2 波形信號的離散化處理
工控系統(tǒng)中一般使用周期性信號,其變化規(guī)律可以用波碼表來存儲,該表記錄了信號在一個周期中幅值的變化。其通過將信號波離散、計算幅值后得到。幅值位數(shù)和1個周期內(nèi)采樣的次數(shù),共同決定了輸出波形的精度?,F(xiàn)對典型周期信號正弦波進(jìn)行離散化處理[2]如圖3所示。在其一個周期內(nèi)取N等分離散點(diǎn),計算出相對應(yīng)各個點(diǎn)的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π為中心對稱,且(0~π)區(qū)間內(nèi)又以[π2]為軸對稱。故只需計算[14] 周期內(nèi)各個點(diǎn)的正弦值,具體步驟如下:
(1) 計算(0~[π2])區(qū)間各個離散點(diǎn)的正弦值;
(2) 根據(jù)軸對稱關(guān)系,將(0~[π2])區(qū)間各個離散點(diǎn)的正弦值倒序復(fù)制到([π2]~π)區(qū)間的離散點(diǎn)上;
(3) 根據(jù)中心對稱關(guān)系,將(0~π)區(qū)間各個點(diǎn)正弦值求補(bǔ)后,依次復(fù)制到(π~2π)區(qū)間的離散點(diǎn)上,這樣就得到了整個周期的正弦值;
(4) 根據(jù)DAC的轉(zhuǎn)換位數(shù),將得到的這些數(shù)據(jù)換算后依次存入E2PROM中, 這樣就得到一個完整的正弦波碼表。
圖3 正弦波形的離散化
由圖3可見,離散處理后的正弦曲線,實際上變成了一個階梯曲線,當(dāng)N值越小這種階梯化的狀態(tài)越明顯,誤差也就越大,為了能減小這種失真,就必須在一個周期內(nèi),使N取得足夠大。 這樣可以使階梯波更好地擬合正弦曲線,有效地減少失真 。當(dāng)然這樣做會增大波碼表的大小,相應(yīng)地也就占用了更多的存儲器空間,而且用DAC 復(fù)現(xiàn)波形的速度也會相應(yīng)的降低。如果一個周期中正弦信號的離散點(diǎn)有4 096個,每點(diǎn)占用1 B,那么正弦信號的波碼表需要占4 KB;如果每個離散點(diǎn)占2 B,則容量將增加1倍[3]。
波形復(fù)現(xiàn)速度和離散點(diǎn)個數(shù)成比例關(guān)系,但減少失真度和增加離散點(diǎn)卻不是線性關(guān)系,所以合理選擇離散點(diǎn)數(shù)是十分重要的。如果一個周期曲線有其確定的函數(shù)表達(dá)式,那么就可以對其進(jìn)行離散處理,然后通過DAC轉(zhuǎn)換,復(fù)現(xiàn)這個函數(shù)。輸出信號頻率的上限受數(shù)據(jù)傳送速度、數(shù)據(jù)鎖存器及DAC 轉(zhuǎn)換時間等因素的影響[4],其頻率一定不會很高,也就是說本系統(tǒng)可以實現(xiàn)任意低頻波形的復(fù)現(xiàn)。
3 信號發(fā)生器軟件設(shè)計
該系統(tǒng)軟件由整機(jī)初始化、DAC輸出、鍵盤及顯示等三大模塊組成,由匯編語言編寫全部程序,其流程如圖4所示。
系統(tǒng)開機(jī)或復(fù)位后,首先進(jìn)行初始化,其包括對鍵盤顯示模塊初始化及開中斷設(shè)置等。完成初始工作狀態(tài)設(shè)置后,根據(jù)波形選擇開關(guān),單片機(jī)讀取存儲器中不同的波形數(shù)據(jù),然后進(jìn)入DAC 主程序模塊,鍵盤中斷服務(wù)程序根據(jù)不同按鍵的鍵值計算出相應(yīng)的控制量,控制數(shù)據(jù)輸出速度,用來實現(xiàn)對波頻率的控制。鍵盤及顯示模塊的管理可由編程芯片HD7279 完成,單片機(jī)只需要執(zhí)行按鍵中斷服務(wù)程序,由此可以騰出更多時間進(jìn)行波形數(shù)據(jù)處理,使得輸出波形更為平滑。
圖4 軟件結(jié)構(gòu)總體程序流程
其中鍵盤掃描及顯示部分程序如下:
PORT EQU 0CFA0H
CSEG AT 4000H
LJMP START
CSEG AT 4100H
START: MOV DPTR,#00CFE9H
MOV A,#0D1H ;清顯示
MOVX @DPTR,A
LOOP10: MOVX A,@DPTR
ANL A,#0FH
JZ LOOP10 ;有鍵按下?沒有則循環(huán)等待
MOV A,#0A0H ;顯示\消隱命令
MOVX @DPTR,A
MOV A,#40H ;讀FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;讀鍵值
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#0CFE9H ;寫顯示RAM命令
MOV A,#81H ;選中LED2
MOVX @DPTR,A
MOV A,R7
ANL A,#0FH ;取后半字節(jié)
MOV 30H,#01H;
MOV 31H,#01H;
JNB P1.5,TFU
MOV 30H,A ;30H存放調(diào)頻值
SJMP L1
TFU: MOV 31H,A ;31H存放調(diào)幅值
L1: MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;寫顯示RAM命令
MOV A,#80H ;選中LED1
MOVX @DPTR,A
MOV A,R7
ANL A,#0F0H
SWAP A ;取后半字節(jié)
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H
4 結(jié) 語
該系統(tǒng)具有如下特點(diǎn): 系統(tǒng)結(jié)構(gòu)簡單,采用集成化元器件,工作穩(wěn)定??梢暂敵龆喾N波形,也就是說可以對任何具有確定函數(shù)表達(dá)式的曲線進(jìn)行輸出。輸出信號容易控制,通過改變DAC輸入基準(zhǔn)電壓來改變信號幅值,通過改變發(fā)送到DAC數(shù)據(jù)的速度可以改變頻率。但該系統(tǒng)受到DAC0832轉(zhuǎn)換位數(shù)和建立時間的限制,波形的輸出信號頻率不能太高,若采用其他轉(zhuǎn)換位數(shù)更高、建立時間更短的D/A轉(zhuǎn)換芯片,如采用DAC712 來代替DAC0832,能使輸出波的頻率范圍更大。
參考文獻(xiàn)
[1] 李杏春.單片機(jī)原理及使用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1996.
[2] 李華.MCS?51系列單片機(jī)實用接口技術(shù)[M].北京:北京航空航天大學(xué)出版社,1993.
[3] 于楓,王鼎.微型計算機(jī)原理及應(yīng)用[M].長春:吉林科學(xué)技術(shù)出版社,1996.
[4] 何利民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1995.
[5] 毛群.基于AD9851的受控正弦信號發(fā)生器設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(1):187?188.
[6] 李朋飛,王勇,黃秋蘭.基于DDS的任意波信號發(fā)生器設(shè)計[J].現(xiàn)代電子技術(shù),2012,35(12):72?74.