任小青+王曉娟+田芳
摘 要: 主要介紹以AT89C51單片機為核心部件的低頻信號發生器的設計方法及工作原理。系統采用單片機擴展外部存儲器和DAC接口技術,簡化了儀器硬件設計。通過波形選擇電路讀取波形信號經離散化處理之后的波代碼, 并通過D/ A 轉換,還原成所需要的波形。通過改變存儲器輸出波代碼的速度來調節輸出信號的頻率,改變放大器的放大倍數來調節輸出信號的幅值。此外還討論了波形離散化處理方法及數據采樣點數與存儲容量的關系, 并給出了系統結構圖和軟件框圖。
關鍵詞: 低頻信號; 數據離散化; 幅值; 典型信號
中圖分類號: TN710?34 文獻標識碼: 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 引 言
在工業測量控制系統的開發過程中, 常需要采用信號發生器為控制系統提供輸入信號來模擬實際輸入,并根據輸出的頻率響應特性來對系統進行調校。該系統不但能提供多種波形信號,而且信號的頻率和幅值的大小也很容易控制。用它來模擬多種工況下的真實輸入信號, 以達到降低開發成本、提高項目開發效率的目的。本文介紹了以AT89C51單片機為控制核心的低頻信號發生器的硬件組成和工作原理。這里利用單片機的強大控制和計算能力,結合DAC接口技術產生頻率和幅度都可調的正弦、方波、三角波等典型的波形信號來模擬不同的工況[1]。
1 低頻信號發生器的工作過程及硬件組成
該系統的工作過程是通過波形選擇電路使AT89C51讀入預置的波代碼表,根據矩陣鍵盤電路輸入的頻率值結合系統時鐘與復位電路中的晶振頻率,計算出相應的控制碼,用來控制將數據輸送到D/A轉換器的速度,最終實現控制輸出信號頻率的目的。此頻率通過LED進行顯示。D/A轉換器將數字信號轉換成模擬量,并通過改變ADC0832的輸入基準電壓,來調整輸出信號的幅值。其主要組成包括主控電路、波形選擇電路、矩陣鍵盤和數碼顯示電路、信號輸出電路。系統硬件組成框圖1所示。
1.1 主控電路
主控電路以AT89C51為進程和任務的調度核心,輔以外圍電路構成,主要完成波形數據表的讀取。其根據鍵盤輸入的頻率值,計算出相應的控制參數,來控制輸出信號的頻率,并用LED顯示頻率值。系統電路原理如圖2所示。 AT89C51的P0口與HD7279芯片進行連接,使用HD7279管理LED顯示和鍵盤輸入操作。P1口和波形選擇按鈕連接,P2口用來做A/D轉換與DAC0832進行連接。同時給出了時鐘和復位電路的連接。
圖1系統硬件結構圖
1.2 波形選擇電路
波形選擇電路通過開關按鈕S1~S6對單片機發出波型選擇信號,S2選取正弦波,S3選擇三角波,以此類推。如圖2所示,當按鈕被按下后,與地相通,這時相應的連接線上就會出現一個低電位信號,中斷系統會向AT89C51發出指令,讓其對P1口進行掃描,當掃描到這個低電信號的位置后,就從EPROM調入相應的波形數據表。
1.3 矩陣鍵盤和數碼顯示電路
鍵盤和顯示電路由HD7279芯片進行管理,無需外圍電路,只需要外接少量的電阻,即可構成完善的顯示、鍵盤接口電路。而與CPU的接口采用SPI串行接口方式,使用方便。
鍵盤可以輸入波的頻率值,系統會根據這個值計算出相應的控制量,控制數據向ADC0832的輸出速度,達到控制頻率的目的。
1.4 信號輸出電路
AT89C51將波形數據表中的數據讀出后,根據鍵盤輸入的頻率,算出控制量,將數據按一定的速度逐一輸入到D/A轉換器中,由輸出數據的速度來調整信號的頻率。通過放大器LM082,將D/A轉換器輸出電流模擬量轉換為電壓模擬量,其幅值可通過改變輸入基準電壓Vref來調整。
2 波形信號的離散化處理
工控系統中一般使用周期性信號,其變化規律可以用波碼表來存儲,該表記錄了信號在一個周期中幅值的變化。其通過將信號波離散、計算幅值后得到。幅值位數和1個周期內采樣的次數,共同決定了輸出波形的精度。現對典型周期信號正弦波進行離散化處理[2]如圖3所示。在其一個周期內取N等分離散點,計算出相對應各個點的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π為中心對稱,且(0~π)區間內又以[π2]為軸對稱。故只需計算[14] 周期內各個點的正弦值,具體步驟如下:
(1) 計算(0~[π2])區間各個離散點的正弦值;
(2) 根據軸對稱關系,將(0~[π2])區間各個離散點的正弦值倒序復制到([π2]~π)區間的離散點上;
(3) 根據中心對稱關系,將(0~π)區間各個點正弦值求補后,依次復制到(π~2π)區間的離散點上,這樣就得到了整個周期的正弦值;
(4) 根據DAC的轉換位數,將得到的這些數據換算后依次存入E2PROM中, 這樣就得到一個完整的正弦波碼表。
圖3 正弦波形的離散化
由圖3可見,離散處理后的正弦曲線,實際上變成了一個階梯曲線,當N值越小這種階梯化的狀態越明顯,誤差也就越大,為了能減小這種失真,就必須在一個周期內,使N取得足夠大。 這樣可以使階梯波更好地擬合正弦曲線,有效地減少失真 。當然這樣做會增大波碼表的大小,相應地也就占用了更多的存儲器空間,而且用DAC 復現波形的速度也會相應的降低。如果一個周期中正弦信號的離散點有4 096個,每點占用1 B,那么正弦信號的波碼表需要占4 KB;如果每個離散點占2 B,則容量將增加1倍[3]。
波形復現速度和離散點個數成比例關系,但減少失真度和增加離散點卻不是線性關系,所以合理選擇離散點數是十分重要的。如果一個周期曲線有其確定的函數表達式,那么就可以對其進行離散處理,然后通過DAC轉換,復現這個函數。輸出信號頻率的上限受數據傳送速度、數據鎖存器及DAC 轉換時間等因素的影響[4],其頻率一定不會很高,也就是說本系統可以實現任意低頻波形的復現。
3 信號發生器軟件設計
該系統軟件由整機初始化、DAC輸出、鍵盤及顯示等三大模塊組成,由匯編語言編寫全部程序,其流程如圖4所示。
系統開機或復位后,首先進行初始化,其包括對鍵盤顯示模塊初始化及開中斷設置等。完成初始工作狀態設置后,根據波形選擇開關,單片機讀取存儲器中不同的波形數據,然后進入DAC 主程序模塊,鍵盤中斷服務程序根據不同按鍵的鍵值計算出相應的控制量,控制數據輸出速度,用來實現對波頻率的控制。鍵盤及顯示模塊的管理可由編程芯片HD7279 完成,單片機只需要執行按鍵中斷服務程序,由此可以騰出更多時間進行波形數據處理,使得輸出波形更為平滑。
圖4 軟件結構總體程序流程
其中鍵盤掃描及顯示部分程序如下:
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 ;有鍵按下?沒有則循環等待
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 ;取后半字節
MOV 30H,#01H;
MOV 31H,#01H;
JNB P1.5,TFU
MOV 30H,A ;30H存放調頻值
SJMP L1
TFU: MOV 31H,A ;31H存放調幅值
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 ;取后半字節
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H
4 結 語
該系統具有如下特點: 系統結構簡單,采用集成化元器件,工作穩定。可以輸出多種波形,也就是說可以對任何具有確定函數表達式的曲線進行輸出。輸出信號容易控制,通過改變DAC輸入基準電壓來改變信號幅值,通過改變發送到DAC數據的速度可以改變頻率。但該系統受到DAC0832轉換位數和建立時間的限制,波形的輸出信號頻率不能太高,若采用其他轉換位數更高、建立時間更短的D/A轉換芯片,如采用DAC712 來代替DAC0832,能使輸出波的頻率范圍更大。
參考文獻
[1] 李杏春.單片機原理及使用接口技術[M].北京:北京航空航天大學出版社,1996.
[2] 李華.MCS?51系列單片機實用接口技術[M].北京:北京航空航天大學出版社,1993.
[3] 于楓,王鼎.微型計算機原理及應用[M].長春:吉林科學技術出版社,1996.
[4] 何利民.單片機應用系統設計[M].北京:北京航空航天大學出版社,1995.
[5] 毛群.基于AD9851的受控正弦信號發生器設計[J].現代電子技術,2012,35(1):187?188.
[6] 李朋飛,王勇,黃秋蘭.基于DDS的任意波信號發生器設計[J].現代電子技術,2012,35(12):72?74.
鍵盤和顯示電路由HD7279芯片進行管理,無需外圍電路,只需要外接少量的電阻,即可構成完善的顯示、鍵盤接口電路。而與CPU的接口采用SPI串行接口方式,使用方便。
鍵盤可以輸入波的頻率值,系統會根據這個值計算出相應的控制量,控制數據向ADC0832的輸出速度,達到控制頻率的目的。
1.4 信號輸出電路
AT89C51將波形數據表中的數據讀出后,根據鍵盤輸入的頻率,算出控制量,將數據按一定的速度逐一輸入到D/A轉換器中,由輸出數據的速度來調整信號的頻率。通過放大器LM082,將D/A轉換器輸出電流模擬量轉換為電壓模擬量,其幅值可通過改變輸入基準電壓Vref來調整。
2 波形信號的離散化處理
工控系統中一般使用周期性信號,其變化規律可以用波碼表來存儲,該表記錄了信號在一個周期中幅值的變化。其通過將信號波離散、計算幅值后得到。幅值位數和1個周期內采樣的次數,共同決定了輸出波形的精度。現對典型周期信號正弦波進行離散化處理[2]如圖3所示。在其一個周期內取N等分離散點,計算出相對應各個點的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π為中心對稱,且(0~π)區間內又以[π2]為軸對稱。故只需計算[14] 周期內各個點的正弦值,具體步驟如下:
(1) 計算(0~[π2])區間各個離散點的正弦值;
(2) 根據軸對稱關系,將(0~[π2])區間各個離散點的正弦值倒序復制到([π2]~π)區間的離散點上;
(3) 根據中心對稱關系,將(0~π)區間各個點正弦值求補后,依次復制到(π~2π)區間的離散點上,這樣就得到了整個周期的正弦值;
(4) 根據DAC的轉換位數,將得到的這些數據換算后依次存入E2PROM中, 這樣就得到一個完整的正弦波碼表。
圖3 正弦波形的離散化
由圖3可見,離散處理后的正弦曲線,實際上變成了一個階梯曲線,當N值越小這種階梯化的狀態越明顯,誤差也就越大,為了能減小這種失真,就必須在一個周期內,使N取得足夠大。 這樣可以使階梯波更好地擬合正弦曲線,有效地減少失真 。當然這樣做會增大波碼表的大小,相應地也就占用了更多的存儲器空間,而且用DAC 復現波形的速度也會相應的降低。如果一個周期中正弦信號的離散點有4 096個,每點占用1 B,那么正弦信號的波碼表需要占4 KB;如果每個離散點占2 B,則容量將增加1倍[3]。
波形復現速度和離散點個數成比例關系,但減少失真度和增加離散點卻不是線性關系,所以合理選擇離散點數是十分重要的。如果一個周期曲線有其確定的函數表達式,那么就可以對其進行離散處理,然后通過DAC轉換,復現這個函數。輸出信號頻率的上限受數據傳送速度、數據鎖存器及DAC 轉換時間等因素的影響[4],其頻率一定不會很高,也就是說本系統可以實現任意低頻波形的復現。
3 信號發生器軟件設計
該系統軟件由整機初始化、DAC輸出、鍵盤及顯示等三大模塊組成,由匯編語言編寫全部程序,其流程如圖4所示。
系統開機或復位后,首先進行初始化,其包括對鍵盤顯示模塊初始化及開中斷設置等。完成初始工作狀態設置后,根據波形選擇開關,單片機讀取存儲器中不同的波形數據,然后進入DAC 主程序模塊,鍵盤中斷服務程序根據不同按鍵的鍵值計算出相應的控制量,控制數據輸出速度,用來實現對波頻率的控制。鍵盤及顯示模塊的管理可由編程芯片HD7279 完成,單片機只需要執行按鍵中斷服務程序,由此可以騰出更多時間進行波形數據處理,使得輸出波形更為平滑。
圖4 軟件結構總體程序流程
其中鍵盤掃描及顯示部分程序如下:
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 ;有鍵按下?沒有則循環等待
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 ;取后半字節
MOV 30H,#01H;
MOV 31H,#01H;
JNB P1.5,TFU
MOV 30H,A ;30H存放調頻值
SJMP L1
TFU: MOV 31H,A ;31H存放調幅值
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 ;取后半字節
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H
4 結 語
該系統具有如下特點: 系統結構簡單,采用集成化元器件,工作穩定。可以輸出多種波形,也就是說可以對任何具有確定函數表達式的曲線進行輸出。輸出信號容易控制,通過改變DAC輸入基準電壓來改變信號幅值,通過改變發送到DAC數據的速度可以改變頻率。但該系統受到DAC0832轉換位數和建立時間的限制,波形的輸出信號頻率不能太高,若采用其他轉換位數更高、建立時間更短的D/A轉換芯片,如采用DAC712 來代替DAC0832,能使輸出波的頻率范圍更大。
參考文獻
[1] 李杏春.單片機原理及使用接口技術[M].北京:北京航空航天大學出版社,1996.
[2] 李華.MCS?51系列單片機實用接口技術[M].北京:北京航空航天大學出版社,1993.
[3] 于楓,王鼎.微型計算機原理及應用[M].長春:吉林科學技術出版社,1996.
[4] 何利民.單片機應用系統設計[M].北京:北京航空航天大學出版社,1995.
[5] 毛群.基于AD9851的受控正弦信號發生器設計[J].現代電子技術,2012,35(1):187?188.
[6] 李朋飛,王勇,黃秋蘭.基于DDS的任意波信號發生器設計[J].現代電子技術,2012,35(12):72?74.
鍵盤和顯示電路由HD7279芯片進行管理,無需外圍電路,只需要外接少量的電阻,即可構成完善的顯示、鍵盤接口電路。而與CPU的接口采用SPI串行接口方式,使用方便。
鍵盤可以輸入波的頻率值,系統會根據這個值計算出相應的控制量,控制數據向ADC0832的輸出速度,達到控制頻率的目的。
1.4 信號輸出電路
AT89C51將波形數據表中的數據讀出后,根據鍵盤輸入的頻率,算出控制量,將數據按一定的速度逐一輸入到D/A轉換器中,由輸出數據的速度來調整信號的頻率。通過放大器LM082,將D/A轉換器輸出電流模擬量轉換為電壓模擬量,其幅值可通過改變輸入基準電壓Vref來調整。
2 波形信號的離散化處理
工控系統中一般使用周期性信號,其變化規律可以用波碼表來存儲,該表記錄了信號在一個周期中幅值的變化。其通過將信號波離散、計算幅值后得到。幅值位數和1個周期內采樣的次數,共同決定了輸出波形的精度。現對典型周期信號正弦波進行離散化處理[2]如圖3所示。在其一個周期內取N等分離散點,計算出相對應各個點的正弦值d1,d2,…,dn。因正弦波在(0~π)和(π~2π)以π為中心對稱,且(0~π)區間內又以[π2]為軸對稱。故只需計算[14] 周期內各個點的正弦值,具體步驟如下:
(1) 計算(0~[π2])區間各個離散點的正弦值;
(2) 根據軸對稱關系,將(0~[π2])區間各個離散點的正弦值倒序復制到([π2]~π)區間的離散點上;
(3) 根據中心對稱關系,將(0~π)區間各個點正弦值求補后,依次復制到(π~2π)區間的離散點上,這樣就得到了整個周期的正弦值;
(4) 根據DAC的轉換位數,將得到的這些數據換算后依次存入E2PROM中, 這樣就得到一個完整的正弦波碼表。
圖3 正弦波形的離散化
由圖3可見,離散處理后的正弦曲線,實際上變成了一個階梯曲線,當N值越小這種階梯化的狀態越明顯,誤差也就越大,為了能減小這種失真,就必須在一個周期內,使N取得足夠大。 這樣可以使階梯波更好地擬合正弦曲線,有效地減少失真 。當然這樣做會增大波碼表的大小,相應地也就占用了更多的存儲器空間,而且用DAC 復現波形的速度也會相應的降低。如果一個周期中正弦信號的離散點有4 096個,每點占用1 B,那么正弦信號的波碼表需要占4 KB;如果每個離散點占2 B,則容量將增加1倍[3]。
波形復現速度和離散點個數成比例關系,但減少失真度和增加離散點卻不是線性關系,所以合理選擇離散點數是十分重要的。如果一個周期曲線有其確定的函數表達式,那么就可以對其進行離散處理,然后通過DAC轉換,復現這個函數。輸出信號頻率的上限受數據傳送速度、數據鎖存器及DAC 轉換時間等因素的影響[4],其頻率一定不會很高,也就是說本系統可以實現任意低頻波形的復現。
3 信號發生器軟件設計
該系統軟件由整機初始化、DAC輸出、鍵盤及顯示等三大模塊組成,由匯編語言編寫全部程序,其流程如圖4所示。
系統開機或復位后,首先進行初始化,其包括對鍵盤顯示模塊初始化及開中斷設置等。完成初始工作狀態設置后,根據波形選擇開關,單片機讀取存儲器中不同的波形數據,然后進入DAC 主程序模塊,鍵盤中斷服務程序根據不同按鍵的鍵值計算出相應的控制量,控制數據輸出速度,用來實現對波頻率的控制。鍵盤及顯示模塊的管理可由編程芯片HD7279 完成,單片機只需要執行按鍵中斷服務程序,由此可以騰出更多時間進行波形數據處理,使得輸出波形更為平滑。
圖4 軟件結構總體程序流程
其中鍵盤掃描及顯示部分程序如下:
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 ;有鍵按下?沒有則循環等待
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 ;取后半字節
MOV 30H,#01H;
MOV 31H,#01H;
JNB P1.5,TFU
MOV 30H,A ;30H存放調頻值
SJMP L1
TFU: MOV 31H,A ;31H存放調幅值
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 ;取后半字節
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段顯碼
MOV DPTR,#0CFE8H ;寫顯示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H
4 結 語
該系統具有如下特點: 系統結構簡單,采用集成化元器件,工作穩定。可以輸出多種波形,也就是說可以對任何具有確定函數表達式的曲線進行輸出。輸出信號容易控制,通過改變DAC輸入基準電壓來改變信號幅值,通過改變發送到DAC數據的速度可以改變頻率。但該系統受到DAC0832轉換位數和建立時間的限制,波形的輸出信號頻率不能太高,若采用其他轉換位數更高、建立時間更短的D/A轉換芯片,如采用DAC712 來代替DAC0832,能使輸出波的頻率范圍更大。
參考文獻
[1] 李杏春.單片機原理及使用接口技術[M].北京:北京航空航天大學出版社,1996.
[2] 李華.MCS?51系列單片機實用接口技術[M].北京:北京航空航天大學出版社,1993.
[3] 于楓,王鼎.微型計算機原理及應用[M].長春:吉林科學技術出版社,1996.
[4] 何利民.單片機應用系統設計[M].北京:北京航空航天大學出版社,1995.
[5] 毛群.基于AD9851的受控正弦信號發生器設計[J].現代電子技術,2012,35(1):187?188.
[6] 李朋飛,王勇,黃秋蘭.基于DDS的任意波信號發生器設計[J].現代電子技術,2012,35(12):72?74.