摘 要: 基于計算機和單片機的串行通信的壓電陶瓷驅動器的設計,采用Visual Basic6.0中的MSComm通信控件,實現計算機和單片機之間的串行通信。詳細闡述了程序的設計流程,給出了部分程序代碼。
關鍵詞: 串行通信;壓電陶瓷;Visual Basic6.0
壓電陶瓷由于其奇妙的壓電效應被科學家們應用在與人們生活密切相關的領域,以實現能量轉換、傳感、驅動等功能。壓電陶瓷在電場作用下產生的形變量很小,最多不超過本身尺寸的千萬分之一。利用這微小的變化可以制作精確控制機構——壓電驅動器,對于精密儀器和機械的控制等領域作用巨大。壓電驅動器具有很高的位移分辨率以及抗干擾能力,并且控制方法簡單,非常適用于微位移驅動,目前已被廣泛應用于國防、生物醫學、光電子等諸多領域[1-2]。調節壓電陶瓷上的電壓可以采用手動和計算機控制的方式,隨著高性能D/A芯片的應用,使得計算機控制更加精確。計算機和外部電路(含單片機)的通信可以通過串口來實現。由于串行通信[3]具有高效可靠、價格便宜、遵循統一的標準等特點,使得串口通信在系統控制[4-5]的范疇中一直占據著極其重要的地位。Visual Basic 6.0提供了串行通信控件,可以輕松實現串口數據的交換。本文介紹通過PC和單片機之間的串行通信來實現壓電陶瓷驅動器的設計,其中計算機作為上位機,單片機作為下位機。
1 硬件基礎
圖1所示為系統的結構框圖。由于上下位機串行口工作電平不一致,它們之間通過MAX232芯片將TTL電平轉換為RS232電平。單片機選擇了ATMEL公司的精簡指令集單片機ATmega16,該款單片機功耗低,在正常模式下只有1.1 mA,最高工作頻率可達16 MHz,具有可擦寫的16 KB的可編程Flash,其內部的USART是一個高度靈活的串行通信設備,使用起來非常方便。D/A芯片采用ANALOG公司的12 bit分辨率的AD5344,AD5344具有并行輸入接口,需要的控制線也不多,并且具有雙緩沖輸入邏輯,一片AD5344有4路輸出。計算機通過串行口將數據發送給單片機,單片機將接收到的數據放在內部的SRAM中,接收完畢后,再將數據取出,通過數據端口輸出到D/A,D/A的模擬輸出信號(電壓)用來控制壓電陶瓷。
2 上位機程序設計
上位機程序的編寫采用Visual Basic 6.0的編程環境,使用Visual Basic6.0的MSComm通信控件,非常容易就能實現串口通信,使用時要對串行通信的信息格式和協議進行設置。每個通信控件對應一個串口,如果要訪問多個通信口,則要設計多個通信控件。
2.1 程序流程及界面設計
計算機和單片機之間的通信采用查詢的工作方法,計算機為上位機(主機),單片機為下位機(從機)。上位機主要負責發送控制命令,以及數據的發送接收、處理、計算、數據的顯示等功能。上位機程序分為四個部分:界面設計、程序初始化、數據通信、數據處理。程序流程如圖2所示。
主程序界面主要分為數據的輸入框和命令控件按鈕,輸入框用于輸入提供給壓電陶瓷電壓的數值,命令控件按鈕用于實現命令和數據的發送和接收,界面還放置一個顯示通信狀態的文本框。程序界面如圖3所示。
圖3中的“設置”按鈕用于將文本框中的電壓值(CH1~CH4)通過串口發送到單片機,單片機再把數據傳給模數轉換器。“清零”按鈕用于將輸出數據都設置為零。
2.2 程序代碼
具體的程序代碼包括串口的初始化及數據的發送與接收。串口的初始化代碼如下:
MSComm1.CommPort=1;使用COM1串口
MSComm1.Settings="9600,n,8,1";數據格式:波特率9 600 b/s,無奇偶校驗,8位數據,1位停止位
MSComm1.OutBufferCount=0;清空發送緩沖區
MSComm1.InBufferCount=0;清空接收緩沖區
MSComm1.PortOpen=Tr ue;打開串口
MSComm1.InputMode=1;以二進制形式取回數據
MSComm1.InputLen=0;一次讀取緩沖區內全部數據
由于篇幅的限制,關于數據的發送和接收部分的代碼不再給出了。
3 下位機的通信程序設計
下位機程序包括初始化部分、數據接收部分和數據輸出部分等。
Atmega16內部的USART是一個高度靈活的串行通信設備,使用起來非常方便,單片機串行通信的波特率發生器可由其片內時鐘產生,波特率寄存器UBRR用于設置所需要的波特率, 對于異步正常模式波特率的計算公式為BAUD=fosc/16(UBRR+1),對于9 600 b/s的波特率(和上位機一致),在fosc=8 MHz的情況下,UBRR的值為51。數據的傳送格式為:1個起始位,8位數據位,1位停止位。程序流程如圖4所示。
初始化部分程序代碼如下:
ldi r16,0x20
out UCSRA,r16;設置串口通信模式
ldi r17,0x00
out UBRRH,r17
ldi r16,0x33
out UBRRL,r16;設置串口通信的波特率
ldi r16,0x86
out UCSRC,r16;設置串口通信的數據格式
ldi r16,0x18
out UCSRB,r16;使能串口通信
其他部分的代碼由于比較長,在這里就不列出了。
基于串行通信設計了壓電陶瓷驅動器,使用Visual Basic 6.0提供的串行通信控件可以輕松實現串口數據的交換。系統的開發周期短、效率高,并且串行通信程序的調試可以借助很多的工具軟件(如串口調試助手),因此使用串行通信好處很多。雖然現在有的計算機的主板并不帶串行接口(如筆記本電腦),而由USB接口替代,但同樣可以使用串行通信。方法是采用USB轉串口的方法,硬件上需要一根轉接線,使用的時候要安裝驅動,其串口號由Windows自動分配,即系統虛擬了一個串行端口,這個端口和真實的串行端口使用方法完全一樣。
參考文獻
[1] 陳修濤,侯再紅,譚逢富,等.一種基于壓電陶瓷的目標精跟蹤系統[J].微計算機信息,2010,26(8-1):32-33.
[2] 朱華征,范大鵬,張智永,等.精密光路偏轉及焦距調整機構的發展[J].激光與紅外,2009,39(10):1028-1032.
[3] 李肇慶,韓濤.串行端口技術[M].北京:國防工業出版社,2004.
[4] 吳愛萍.基于VB與單片機的溫度測控系統設計[J].現代電子技術,2010(8):208-210.
[5] 王平,張新東.基于智能儀表的數據采集系統設計[J]. 自動化與儀表,2009(4):9-10.