摘 要:本文以AT89C51單片機為核心,設計一個基于單片機的數(shù)據(jù)采集系統(tǒng)。系統(tǒng)可以采集16路模擬量,精度為12位,16路開關(guān)量和2路脈沖量,并將采集到的數(shù)據(jù)每隔一分鐘通過串口發(fā)送到PC機。
關(guān)鍵字:AT89C51;數(shù)據(jù)采集;串口通訊
1 概述
在工業(yè)控制系統(tǒng)中,除了控制單元和執(zhí)行單元外,還必須有反饋環(huán)節(jié)。在反饋環(huán)節(jié)中,最重要的就是對數(shù)據(jù)的采集。一般的工業(yè)控制中,數(shù)據(jù)有很多種形式,最常見的有電流電壓的模擬量、以二進制形式輸入的開關(guān)量以及以脈沖形式輸入的脈沖信號。
本文設計一數(shù)據(jù)采集系統(tǒng)系統(tǒng),系統(tǒng)以AT89C51單片機為核心,AT89C51是一個低電壓,高性能CMOS 8位單片機,片內(nèi)含4k bytes的可反復擦寫的Flash只讀程序存儲器和128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元。AT89C51是一個低功耗高性能單片機,40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,1個全雙工串行通信口[1],AT89C51可以按照常規(guī)方法進行編程,也可以在線編程,這給開發(fā)帶來方便。
如圖1所示為設計的系統(tǒng)原理框圖。系統(tǒng)選擇一個串行的A/D轉(zhuǎn)換芯片,用模擬開關(guān)作擴展,兩個模擬開關(guān)即可擴展成16路的模擬量輸入。開關(guān)量的采集可以直接用單片機的I/O,用兩個并口即可完成16路的開關(guān)量采集。如圖所示,AT89C51單片機還有兩個外部中斷接口,即可用來測量脈沖量的輸入,采集其輸入頻率。單片機可以通過串口與上位PC機進行通訊,把采集到的數(shù)據(jù)發(fā)送到上位機上。
圖1 系統(tǒng)原理圖
2 硬件電路設計
系統(tǒng)硬件可以分成四個部分,分別為模擬量采集電路、開關(guān)量采集電路、脈沖量采集電路以及單片機與PC的串口通訊電路。下面分別作簡單的介紹。
2.1 模擬量采集電路
模擬量的采集要用到A/D轉(zhuǎn)換芯片,而且精度為12位,這里選擇MAX1241 A/D轉(zhuǎn)換器。MAX1241是一種低功耗、低電壓的12位逐次逼近型ADC,最大非線性誤差小于1LSB,轉(zhuǎn)換時間9ms,內(nèi)置快速采樣/保持電路。MAX1241采用三線式串行接口,與單片機的接線簡單,如圖2所示[3]。圖中兩個電容是去藕電容,用以對電源進行濾波。Vi是采集電壓的輸入端,Vref是A/D轉(zhuǎn)換器的參考電壓。一般情況下可以接單片機的電源。
圖2 MAX1241與單片機的接線圖
系統(tǒng)要求對16路的模擬量進行采集,因此,只有一個A/D轉(zhuǎn)換器就不夠的,但如果用多個A/D轉(zhuǎn)換器一方面會造成資源浪費,成本加大,另一方面單片機的I/O也不夠,因此這里用兩個8路模擬開關(guān)進行擴展,擴展成16路。如圖1的原理圖所示,系統(tǒng)選用兩個CD4051模擬開關(guān)[3],并用單片機的四個I/O口控制兩個模擬開關(guān)的通道選擇端,在采集過程中,選擇不同的通道進行數(shù)據(jù)采集。
2.2 開關(guān)量采集電路
對開關(guān)量的采集電路相對比較簡單,因為開關(guān)量的狀態(tài)只有0和1兩種,所以只要用兩個單片機的并口就可以了,這里用的是P0口和P2口。但是有一點需要說明的是: 由于AT89C51單片機的P0口內(nèi)部沒有上拉電阻,所以在電路中必須加入外部上拉電阻,阻值可以是4.7K~10K。而P2口內(nèi)部自帶上拉電阻,所以不需外加上拉電阻。采集輸入電路如圖1系統(tǒng)原理圖所示。
2.3 脈沖量采集電路
脈沖量信號是周期變化的信號,AT89C51單片機有兩個外部中斷INT0和INT1接口,利用這兩個外部中斷輸入接口,可以對脈沖量信號進行測量,脈沖信號可以直接送到單片機的外部中斷接口,也可以進行適當?shù)恼魏笤偎偷絾纹瑱C的外部中斷接口,如加入帶施密特功能的反向器74LS14。也可以用比較器進行整形,這樣使單片機的采集測量更加可靠,更加精確。
2.4 通訊電路
該系統(tǒng)沒有設計數(shù)據(jù)的顯示系統(tǒng),所以把采集到的數(shù)據(jù)發(fā)送到上位PC機上,與PC進行通訊。因為單片機與PC機的電平是不一樣的,因此兩者要進行數(shù)據(jù)交換,必須采用相應的電平轉(zhuǎn)換電路。用得最多的就是RS232通訊方式,采用MAX232芯片即可完成。簡單的電路如圖3所示。
圖3 通訊電路
3 軟件設計
根據(jù)設計要求,按照實現(xiàn)功能的分類,軟件部分主要完成四項任務:系統(tǒng)初始化、數(shù)據(jù)采集、數(shù)據(jù)處理、向PC機發(fā)送數(shù)據(jù)。在數(shù)據(jù)處理中,需要進行大量浮點數(shù)的乘除法和正弦、余弦運算,因此數(shù)據(jù)處理部分采用C語言編寫,在Keil環(huán)境中模塊化編程,充分利用C語言強大的計算能力。在數(shù)據(jù)采集部分中,MAX1241對時序要求比較嚴格,采用匯編語言實現(xiàn),所有功能模塊均為獨立的C文件或ASM文件。而實現(xiàn)C語言和匯編語言的混合編程[2]是軟件設計中的難點和關(guān)鍵之一。在設計中,匯編語言采用單獨的文件,通過寄存器傳遞函數(shù)參數(shù)。程序流程圖如圖4所示。
這里給出MAX1214的控制程序,是用匯編語言編寫,控制子程序完成一次A/D轉(zhuǎn)換和輸入,輸入數(shù)據(jù)存放于R0,R1寄存器。
;寄存器及端口定義:
CS: BIT P1.0 ;片選信號位
DOUT: BIT P1.2 ;串行數(shù)據(jù)輸入位
SCLK: BIT P1.1 ;驅(qū)動時鐘位
DATA_BH: EQU R0 ;高字節(jié)數(shù)據(jù)存儲單元
DATA_BL: EQU R1 ;低字節(jié)數(shù)據(jù)存儲單元
CONT_H: EQU R0 ;高位取數(shù)計數(shù)器
CONT_L: EQU R1 ;低8位取數(shù)計數(shù)器
SADC_R: XRL A,A ;清A
MOV CONT_H,#04H ;高8位計數(shù)
MOV CONT_L,#08H ;低8位計數(shù)
CLR SCLK ;SCLK置“0”
CLR CS ;選中1241,啟動轉(zhuǎn)換
SADC END:JNB DOUT,SADC_ END ;檢測A/D轉(zhuǎn)換結(jié)束
READ_H: SETB SCLK ;
CLR SCLK ;產(chǎn)生一個驅(qū)動時鐘
MOV C,DOUT ;輸入一位數(shù)據(jù)
RLC A ;數(shù)據(jù)移位至ACC.0
DJNZ CONT_H,READ_H ;高 4位輸入結(jié)束判別
MOV DATA_BH,A ;高 4位數(shù)據(jù)送寄存器
READ_L: SETB SCLK
CLR SCLK ;產(chǎn)生一個驅(qū)動時鐘
MOV C,DOUT ;輸入一位數(shù)據(jù)
RLC A ;數(shù)據(jù)移位置ACC.0
DJNZ CONT_L,READ_L ;低8位輸入結(jié)束判別
MOV DATA_BL,A ;低8位數(shù)據(jù)送寄存器
SETB SCLK
CLR SCLK ;清 DOUT輸出
SETB CS ;撤消片選
RET
圖4 軟件程序流程圖
4 結(jié)束語
該系統(tǒng)以AT89C51單片機為核心,可以對16路模擬量、16路數(shù)字開關(guān)量和兩路脈沖量進行采集,模擬量采集精度達到12位,在實際應用中,可以對電壓信號進行直接采集,如果要對傳感器的標準電流量進行采集時,還需加入采樣電阻,把電流轉(zhuǎn)換成電壓后進行采集。對采集的脈沖量的頻率取決于單片機的時鐘頻率,一般不能高于單片機的運行時鐘,如單片機用12MHz的晶振,則采集的脈沖頻率只能低于12MHz。本系統(tǒng)在實際應用中已調(diào)試通過,采集的數(shù)據(jù)精度高,速度快。
參考文獻
[1]孫涵芳.單片機原理及應用(修訂版)北.京航空航天大學出版社,1996年.
[2]馬忠梅.單片的C語言應用程序設計(第三版).北京航空航天大學出版社,2003年.文章來源:http://www.zghlxwxcb.cn/news/detail-495705.html
[3]于海生.微型計算機控制技術(shù).北京:清華大學出版社,1999年.文章來源地址http://www.zghlxwxcb.cn/news/detail-495705.html
到了這里,關(guān)于基于單片機的數(shù)據(jù)采集系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!