摘要:本文介紹的波形發生器是基于PC機與單片機共同實現的,用戶用鼠標拖動繪制任意波形,就可以實現輸出端相應波形的輸出。
關鍵詞:波形發生器;任意波形
中圖分類號:TP271文獻標識碼:A文章編號:1009-3044(2008)05-10ppp-0c
1 引言
各種電子系統都離不開波形發生器,但常見的波形發生器一般是輸出固定的幾種波形如方波、鋸齒波、函數波等,對于一些不規則的波形就不能發生。
生產實踐和實驗模擬中,對不規則波的需求是很多的。如為了測試汽車的參數,需要模擬道路不規則的(或無序的)起伏、摩擦系數等情況,這就要求信號發生器能產生任意的波形。本文介紹的任意波形生器就是由PC機和單片機共同構成一個發生系統,通過鼠標給出任意波形,再將波形在輸出端輸出的一種信號發生器。
2 系統簡介
圖1是該系統原理圖,我們用PC機做為人機交互的設備,將波形的設置做到計算機的桌面上,用戶只要有桌面上用鼠標做出波形,就可以在呼出端輸出。

圖1 系統原理圖
8951單片機是波形輸出的另一個核心,它要將PC機傳送來的關鍵參數進行產生,并通過D/A轉換來進行輸出。
本系統實現的最初思路是將波形的產生參數推遲到了波形產生的時候,在用戶做出波形的同時,系統也獲得了波形的關鍵參數,針對該波形來進行合成。
3 系統結構
系統分為PC 機和單片機系統兩部分。從系統圖上可見,本系統的硬件部分比較簡單,在其它系統中常見。因此,我們選用0832做轉換器 , 用62256做存儲器,實現雙極性電壓輸出,在后面由跟隨器改善帶負載能力,再作MAX232 實現電平轉換。
本系統的關鍵部分是軟件,特別是通訊部分。現分別介紹如下:
3.1 PC 機部分
作為面向對象的程序設計語言,VB具有事件驅動編程模式并可以使用添加的控件,能夠十分方便地作出良好的人機界面。所以我們在PC 機采用VB 編程,用VB 作出直觀的人機界面,使用戶可以在圖片框中方便地繪制波形。
在通信模塊設計上,MSComm 控件的直接引用使通訊設計變得更加便捷。該控件是一個標準的十位串行通信接口,可通過設置串行通信的串口狀態及串口通信格式和協議,提供事件驅動和查詢兩種處理方法。事件驅動法是當串口處于以下三種狀態:A接收到數據、B發送完數據、C當狀態發生改變時,MSComm控件將觸發OnComm事件,應用程序可通過檢查Com2 mEvent 屬性的值來獲知所發生的事件情況,從而進入子程序進行相應的處理。查詢法則是在每個重要的程序后進行查詢MSComm控件的屬性值來檢測事件和通訊錯誤。
本設計采用的是查詢法。我們進行如下設置:通信模塊內設置了MSComm控件的Inputmode 屬性為1 ,則收發的是二進制數據,如為0.則收發字符。需要強調的是,由于用鼠標繪圖形的隨意性很強,我們需要編程來均勻插點值,以使曲線平滑。同時,為了保證數據通信的正確,我們采用了應答和累加和的兩種檢驗方法。
本設計選用“00H、FFH、00H、FFH”作握手信號。PC 機與89C51 之間的通信程序用VB 編寫,程序段如下:
Private Sub Command1 Click()
.′定義數組變量
Command1. Enabled = False
MSComm1. CommPort = 1 ′設置端口號
MSComm1. Settings =“9600 ,n ,8 ,1” ′設置波特率等通訊協議
MSComm1. InputLen = 1′一次讀一個字節
MSComm1. PortOpen = True ′打開串口
MSComm1. InputMode = 1′接收二進制數
outbuf (0) = 0
outbuf (1) = 255
outbuf (2) = 0
outbuf (3) = 255
MSComm1. Output = outbuf ′發握手信號
Do
DoEvents
Loop Until MSComm1. InBufferCount > = 1
inbyte =MSComm1. Input
If inbyte (0)〈〉5 Then′MCU 準備好嗎?
MsgBox″通訊錯誤05 ,重發!″,vbExclamation
Exit Sub
End If
.
sum= 0
ReDim bytebuf (0 To n)
For i = 0 To n
bytebuf (i) = c (i)
If sum+ c (i) > = 256 Then
sum= sum+ c (i) - 256
Else
sum= sum+ c (i)
End If′計算累加和
Next i
MSComm1. Output = bytebuf ′發波形各點值
.
Command5. Enabled = True
End Sub
3.2 用戶界面部分:
在用戶界面設計了三個命令按鈕,分別用于波形輸出、重新繪制和退出。界面如圖2所示。用戶拖動鼠標左鍵在圖片框繪制波形時,同時將各點值存儲下來,按波形產生的鍵值傳送給單片機系統。

圖2 用戶界面
3.3 單片機系統
單片機系統主要完成正確接收數據和產生波形的任務。主要由一個單片機8951和一片整形芯片7852以及放大電路組成。為確保隨時響應主程序產生的波形,使用串行口中斷進行通訊,通訊實現的編程在第2部分中已經介紹。本處介紹的重點是單片機與PC機的通訊部分。

圖3 通訊流程圖
因為本系統是單純用于學生實驗的,同時在本系統中,PC機和單片機是一對一的關系,沒有和其他設備相連,相對關系比較簡單,不會出現多余中斷,所以我們在程序中沒有設計更多的容錯子程序。同時在整形合成部分、放大輸出部分也力求簡單,沒有設計過多的濾波、過壓等線路,以達到廉價、可靠、穩定的目的。
4 應用情況與不足
用此方法設計的任意波形發生器在實際中進行了應用實驗。我們分別在汽車專業和電子專業的學生在實驗課程中進行了信號模擬,對于電子人為信號的變化和洗車方向轉動的模擬都實現了較好的信號發生實際情況達到了設計要求,輔助學生們在實驗中做出了各種計劃數據的效果。
本系統的不足之處在于只是一個低頻的信號發生器,信號范圍有限,不能適應高頻率的要求。如果是高頻和其它要求較嚴格的波形還需要專門的發生器。
參考文獻:
[1] 陳蔚.低頻任意波形發生器的設計與實現[J].儀表技術,2004,(5):34-35.
[2] 從宏壽.任意波形發生器的設計與實現[J].電子技術,2004,(10):59-63.
[3] 姚小朋,張捷.基于DDS的多波形信號發生器設計[J].研制與開發,2007,(2):41-43.
收稿日期:2008-01-20
作者簡介:謝曉廣(1971-),男,河南鄭州人,在讀碩士,高級講師,研究方向:計算機硬件應用。