畢業設計課程設計溫度監控系統的設計42頁_第1頁
畢業設計課程設計溫度監控系統的設計42頁_第2頁
畢業設計課程設計溫度監控系統的設計42頁_第3頁
畢業設計課程設計溫度監控系統的設計42頁_第4頁
畢業設計課程設計溫度監控系統的設計42頁_第5頁
已閱讀5頁,還剩38頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、引言隨著“信息時代”的到來,作為獲取信息的手段傳感器技術得到了顯著的進步,其應用領域越來越廣泛,對其要求越來越高,需求越來越迫切。傳感器技術已成為衡量一個國家科學技術發展水平的重要標志之一。因此,了解并掌握各類傳感器的基本結構、工作原理及特性是非常重要的。由于傳感器能將各種物理量、化學量和生物量等信號轉變為電信號,使得人們可以利用計算機實現自動測量、信息處理和自動控制,但是它們都不同程度地存在溫漂和非線性等影響因素。傳感器主要用于測量和控制系統,它的性能好壞直接影響系統的性能。因此,不僅必須掌握各類傳感器的結構、原理及其性能指標,還必須懂得傳感器經過適當的接口電路調整才能滿足信號的處理、顯示和

2、控制的要求,而且只有通過對傳感器應用實例的原理和智能傳感器實例的分析了解,才能將傳感器和信息通信和信息處理結合起來,適應傳感器的生產、研制、開發和應用。另一方面,傳感器的被測信號來自于各個應用領域,每個領域都為了改革生產力、提高工效和時效,各自都在開發研制適合應用的傳感器,于是種類繁多的新型傳感器及傳感器系統不斷涌現。溫度傳感器是其中重要的一類傳感器。其發展速度之快,以及其應用之廣,并且還有很大潛力。為了提高對傳感器的認識和了解,尤其是對溫度傳感器的深入研究以及其用法與用途,基于實用、廣泛和典型的原則而設計了本系統。本文利用單片機結合傳感器技術而開發設計了這一溫度監控系統。文中傳感器理論單片機

3、實際應用有機結合,詳細地講述了利用熱敏電阻作為熱敏傳感器探測環境溫度的過程,以及實現熱電轉換的原理過程。本設計應用性比較強,設計系統可以作為生物培養液溫度監控系統,如果稍微改裝可以做熱水器溫度調節系統、實驗室溫度監控系統等等。課題主要任務是完成環境溫度檢測,利用單片機實現溫度調節并通過計算機實施溫度監控。設計后的系統具有操作方便,控制靈活等優點。本設計系統包括溫度傳感器,A/D轉換模塊,輸出控制模塊,數據傳輸模塊,溫度顯示模塊和溫度調節驅動電路六個部分。文中對每個部分功能、實現過程作了詳細介紹。整個系統的核心是進行溫度監控,完成了課題所有要求。1 設計要求1.1 控制要求(1)生物繁殖培養液的

4、溫度要保證在適于細胞繁殖的溫度內,這主要在控制程序設計中考慮。溫度控制范圍為15 25,升溫、降溫階段的溫度控制精度要求為0.5度,保溫階段溫度控制精度為 0.5度 。 圖1.1.1溫度控制曲線(2)微機自動調節 正常情況下,系統投入自動。(3)模擬手動操作 當系統發生異常,投入手動操作。(4)微機監控功能 顯示當前被控量的設定值、實際值,控制量的輸出。1.2 受控對象的數學模型生物繁殖的培養液主要用于生物的繁殖研究,而溫度是影響生物繁殖的重要因素。本系統要求長時間監視培養液的溫度,并對當前的溫度進行控制。本控制對象為生物繁殖用培養液,采用繼電器進行控制。2 系統的硬件配置2.1 單片機和系統

5、總線單片機:PIC16F877A(PIC16F877A為美國MICORCHIP公司生產的帶A/D轉換的8位單片機)。顯示系統:商用計算機。用戶內存:256M RAM。系統總線:RS-232-C接口(又稱 EIA RS-232-C)RS232 C有25條線,分為5個功能組,包括4條數據線,11條控制線,3條定時線,7條備用線和未定義線。操作系統:Windows 2000。2.2 硬件介紹 計算機工作的外圍電路設備(1)溫度傳感器溫度傳感器采用補償型NTC熱敏電阻其主要性能如下:補償型NTC熱敏電阻 B值誤差范圍小,對于阻值誤差范圍在5的產品,其一致性、互換性良好。適合于一般精

6、度的溫度測量和計量設備。外型結構和尺寸:圖2.2.1 溫度傳感器結構尺寸圖主要技術參數:時間常數30S測量功率0.1mW使用溫度范圍-55+125耗散系數6mW/額定功率0.5W降功耗曲線:圖2.2.2溫度傳感器功耗曲線圖(2)核心處理單元MicroChip PIC16F877A單片機MicroChip PCI16F877A單片機主要性能:具有高性能RISC CPU僅有35條單字指令。除程序指令為兩個周期外,其余的均為單周期指令。運行速度:DC-20M時鐘輸入。DC-200ns指令周期。8K*14個FLASH程序存儲器。368*8個數據存儲器(RAM)字節。引腳輸出和PIC16C73B/74B

7、/76/77兼容。中斷能力(達到14個中斷源)。8級深度的硬件堆棧。直接,間接和相對尋址方式。上電復位(POR)。上電定時器(PWRT)和震動啟動定時器。監視定時器(WDT),它帶有片內可靠運行的RC振蕩器。可編程的代碼保護。低功耗睡眠方式。可選擇的振蕩器。低功耗,高速CMOS FLASH/EEPROM工藝。全靜態設計。在線串行編程(ICSP)。單獨5v的內部電路串行編程(ICSP)能力。處理機讀/寫訪問程序存儲器。運行電壓范圍2.0v到5v。高輸入/輸出電流25mA。商用,工業用溫度范圍。低功耗: 在5v,4MHz時典型值小于2mA。 在3v,32KHz時典型值小于20uA。 典型的靜態電流

8、值小于1uA。外圍特征:Timer 0 :帶有預分頻的8位定時器/計數器。Timer 1 :帶有預分頻的16位定時器/計數器,在使用外部晶體時鐘時在SLEEP期間仍能工作。Timer 2 :帶有8位周期寄存器,預分頻和后分頻器的8位定時器/計數器2個捕捉器,比較器和PWM模塊。其中 :捕捉器是16位的,最大分辨率為12.5nS。比較器是16位的,最大分辨率為200nS。PWM最大分辨率為是10位。10位多通道模/數轉換器。帶有SPI(主模式)和I2C(主/從)模式的SSP。帶有9位地址探測的通用同步異步接收/發送(USART/RCI)。帶有RD,WR和CS控制(只40/44引腳)8位字寬的并行

9、從端口。帶有降壓的復位檢測電路。(3)RS-232-C接口電路計算機與計算機或計算機與終端之間的數據傳送可以采用串行通訊和并行通訊二種方式。由于串行通訊方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。 在串行通訊時,要求通訊雙方都采用一個標準接口,使不同 的設備可以方便地連接起來進行通訊。 RS-232-C接口(又稱 EIA RS-232-C)是目前最常用的一種串行通訊接口。它是在1970年由美國電子工業協會(EIA)聯合貝爾系統、 調制解調器廠家及計算機終端生產廠家共同制定的用于串行通訊的標&

10、#160;準。它的全名是“數據終端設備(DTE)和數據通訊設備(DCE)之間 串行二進制數據交換接口技術標準”該標準規定采用一個25個腳的 DB25連接器,對連接器的每個引腳的信號內容加以規定,還對各種信 號的電平加以規定。接口的信號內容 實際上RS-232-C的25條引線中有許多是很少使用的,在計算機通訊中一般只使用3-9條引線。RS-232-C最常用的9條引線的信號。接口的電氣特性 在RS-232-C中任何一條信號線的電壓均為負邏輯關系。即:邏輯?!?”,-5-15V;邏輯“0” +5 +15V 。噪聲容限為2

11、V。即 要求接收器能識別低至+3V的信號作為邏輯“0”,高到-3V的信號 作為邏輯“1” 。  接口的物理結構 RS-232-C接口連接器一般使用型號為DB-25的25芯插頭座,通常插頭在DCE端,插座在DTE端. 一些設備與PC機連接的RS-232-C接口,因為不使用對方的傳送控制信號,只需三條接口線,即“發送數據”、“接收數據”和“信號地”。所以采用DB-9的9芯插頭座,傳輸線采用屏蔽雙絞線。傳輸電纜長度 由RS-232C標準規定在碼元畸變小于4%的情況下,傳輸電纜長度應為50英尺,其實這個4%的碼元畸變是很保守的,在實際應用中,

12、約有99%的用戶是按碼元畸變1020%的范圍工作的,所以實際使用中最大距離會遠超過50英尺。圖2.3.1 Max232結構圖(4)繼電器繼電器是具有隔離功能的自動開關,廣泛用于遙控,遙測,通信,自動控制,機電一體化及電力電子設備中,是最重要的控制元件之一。繼電器是在自動控制電路中起控制與隔離作用的執行部件,它實際上是一種可以用低電壓、小電流來控制大電流、高電壓的自動開關。在本系統中,繼電器控制的自動溫度調節電路和PCI16F877A單片機中程序構成溫度自動監測電路,實現對生物培養液溫度的監測和自動控制(5)半導體降溫片及電阻加熱絲半導體制冷器是根據熱電效應技術的特點,采用特殊半導體材料熱電堆來

13、制冷,能夠將電能直接轉換為熱能,效率較高。其工作原理如圖2.5.1:圖2.5.1半導體降溫片工作原理圖半導體制冷片由許多N型和P型半導體之顆?;ハ嗯帕卸?,而N P之間以一般的導體相連接而成一完整線路,通常是銅、鋁或其他金屬導體,最後由兩片陶瓷片像夾心餅乾一樣夾起來,陶瓷片必須絕緣且導熱良好,通上電源之後,冷端的熱量被移到熱端,導致冷端溫度降低,熱端溫度升高。它的外觀如圖2.5.2所示。正視圖側視圖2)本控制系統是對生物培養液進行溫度監控,故太快的溫度變化對生物繁殖顯圖2.5.2半導體降溫片外觀圖本控制系統是對生物培養液進行溫度監控,過快的溫度變化對生物繁殖顯然是不利的,因此在本系統中采用的是

14、高阻抗小功率加熱電阻絲進行溫度的小范圍調節。3 溫度控制系統的組成框圖采用典型的反饋式溫度控制系統,組成部分見圖3.1。其中數字控制器的功能由單片機實現。圖3.1溫度控制系統的組成框圖 培養皿的傳遞函數為,其中1為電阻加熱的時間常數,為電阻加熱的純滯后時間,為采樣周期。A/D轉換器可劃歸為零階保持器內,所以廣義對象的傳遞函數為 (3-1-1) 廣義對象的Z傳遞函數為 (3-1-2) 所以系統的閉環Z傳遞函數為 (3-1-3) 系統的數字控制器為= (3-1-4) 寫成差分方程即為 (3-1-5) 令 ,得 (3-1-6)式中 第次采樣時的偏差;第次采樣時的偏差;第次采樣時的偏差;4 溫度控制系

15、統結構圖及總述PIC16f877A單片機加熱控制電路高阻抗加熱絲降溫控制電路半導體降溫片溫度傳感器培養皿TTL電平到EIA電平轉換電路商用計算機顯示終端 圖4.1溫度控制系統結構圖圖4.1中溫度傳感器和Micro Chip PIC16F877A單片機中的A/D轉換器構成輸入通道,用于采集培養皿內的溫度信號。溫度傳感器輸出電壓經過A/D轉換后的數字量與培養皿內的溫度給定值數字化后進行比較,即可得到實際溫度和給定溫度的偏差。培養皿內的溫度設定值由Micro Chip PIC16F877A單片機中程序設定。由Micro Chip PIC16F877A單片機構成的數字控制器進行比較運算,經過比較后輸出

16、控制量控制由加熱和降溫電路構成的溫度調節電路對培養皿中的培養液溫度進行調節。同時通過電平轉換電路把當前溫度傳輸到商用計算機的串口中,由計算機動態的顯示培養皿中的溫度,正常情況下溫度控制由Micro Chip PIC16F877A單片機自動控制。必要時,計算機也可以通過軟件來強制改變培養皿中溫度。5 溫度控制系統軟件設計5.1 Microchip PIC16F877A單片機溫度控制系統軟件結構圖如圖5.1.1所示。檢測與變送A/D轉換工程量變換溫度非線性轉換發送數據到串口比較判斷算法溫度預設值溫度調節 電路執行器從串口接受數據命令識別控制程序 圖5.1.1單片機溫度控制系統軟件結構圖5.2 單片

17、機控制流程圖開始初始化PIC16F877A單片機端口地址讀入預設溫度值啟動A/D轉換A/D轉換結果送入NX單元NX-FF>0F0-NX>0降溫加熱工程量變換溫度非線性溫度轉換發送數據到串口命令識別程序從串口接受數據YYYNNN 圖5.2.1單片機控制流程圖5.3 溫度變換程序模塊溫度傳感器在12到60輸出2.52V1.02V,溫度起點為12,滿量程為48。Micro Chip PIC16F877A單片機內嵌的10位A/D轉換器對應輸出的數字量為0000000000B1111111111B(05V),應用以下變換公式進行變換:AX=A0+(AM-A0)(NX-N0)/(NM-N0)式

18、中,A0為一次測量儀表的下限。AM為一次測量儀表的上限。AX實際測量值。N0儀表下限對應的數字量。NM儀表上限對應的數字量。NX測量值對應的數字量。5.4 溫度非線性轉換程序模塊采用折線擬合法進行線性化處理如圖5.4.1所示,分為以下幾段:當1.73VAx<2.52V時,T=0.06*WN+12當1.40VWN<1.73V時,T=0.03*WN+25當1.24VWN<1.40V時,T=0.016*WN+40當1.06VWN<1.24V時,T=0.018WN+50表5.4.1 溫度曲線實際測量數據溫度()12131415161718電壓(V)2.522.482.472.4

19、42.402.392.37溫度()19202122232425電壓(V)2.322.282.222.152.091.831.73溫度()26272829303132電壓(V)1.701.661.641.611.581.561.54溫度()33343536373839電壓(V)1.531.501.481.461.451.431.41溫度()40414243444546電壓(V)1.401.381.371.351.321.301.29溫度()47484950515253電壓(V)1.271.261.251.241.221.201.19溫度()54555657585960電壓(V)1.171.161

20、.121.111.091.071.06 圖5-1圖5.4.1 溫度分段線限等效圖6 通信協議的設計由于溫度采集和實施控制是通過單片機控制系統實現,而微機完成溫度監控,所以需要采用單片機和微機之間的通信協議。本設計應用條件為傳輸距離不超過15米的短距離數據傳輸,且傳輸數據量較小,所以采用在控制領域里應用較廣泛RS232C串行通信方式。 針對近程小批量的數據通信,設計時采用3 線制(RXD ,TXD ,GND)軟握手的零MODEM方式。即:將PC機和單片機的“發送數據線(TXD)”與“接收數據(RXD)”交叉連接,二者的地線(GND)直接相連而其它信號線如握手信號線均不用,而采用軟件握手。這樣即可

21、以實現預定的任務,又可以簡化電路設計節約了成本。由于RS232C是早期為促進公用電話網絡進行數據通信而制定的標準,其邏輯電平與TTL, MOS 邏輯電平不同。邏輯0 電平規定為+5+15V之間,邏輯1是電平為-5 -15V 之間。因此在將PC機和單片機的RXD和TXD交叉連接時,必須進行電平轉換。下圖即為通信時的硬件連接圖,其中器件MAX232完成邏輯電平轉換的任務。圖6.1 電平轉換電路圖注:在PC機中9針RS232接口中:2線:RXD, 3線:TXD, 5線:GND而在25針的RS232接口中:3線:RXD, 2線:TXD, 7線:GND6.1 軟件設計在進行數據通信的軟件設計時,必須解決

22、好兩個方面的問題:一是可靠性,二是速度。而這兩方面的問題,可靠性是第一位的,速度只能是在可靠的基礎上的速度??煽靠焖俎D輸的實現,需要PC-單片機軟件以及通信協議等各個環節的可靠和其間的相互配合。6.1.1 通信協議概述在設計PC-單片機通信協議時,需說明一點:在本系統的實際通信中,PC機是主控者單片機只是被動接收者。采用這種通信協議較雙方互為主控者時簡單。本通信協議的設計思想是基于幀傳輸方式。即在向RS232串口發送命令信號,應答信號及數據信號時,是一幀一幀地發送的。為了使數據快速可靠地傳輸,將每一幀數據唯一對應一命令幀。此時傳輸數據即執行命令具體如下:(1) 在PC讀數據時,遵循“讀命令-等

23、數據-報告”,即PC下達一命令,等待接收數據,根據所接收數據的正誤向應用程序報告此命令的執行情況。(2) 在PC寫數據時,遵循“寫命令-等回應-報告”,即PC下達一寫命令(此時所要寫的數據含于此命令中),等待單片機發來的“已正確接收”的回應信號,并向應用程序報告此命令執行完畢。(3) 如果在轉輸過程中,其間PC或MCU所接收任何一幀信號出現錯誤時,均會向對方發送重發此幀信號的請求。如果連續三次轉輸失敗,則退出通信并向應用程序報告。6.2 通信協議說明6.2.1信號幀分類(1) 讀命令幀:當PC讀數據時,PC向PIC16F877A發送的命令信號。(2) 寫命令幀:當PC寫數據時,PC向PIC16

24、F877A發送的命令信號(內含所要寫的數據)。(3) 數據幀:當PC讀數據時,PIC16F877A向PC發送的內含數據信息的信號。(4) 正回應幀:當PC寫數據時,PIC16F877A向PC報告數據已正確接收的信號。(5) 重發命令幀:當PC讀/寫數據時,PIC16F877A所接收的信號幀(讀/寫命令幀)有誤時向PC發出的請求重發信號。(6) 放棄命令幀:當PC讀/寫數據時出現了使程序無法正常執行時PC或PIC16F877A向對方發出的退出通信的通知信號。6.2.2信號幀格式(1) 讀命令幀格式幀頭標志幀類型器件地址起始地址長度校驗和幀尾標志幀頭標志(1 Bit): 表示此數據包屬于本串口通信

25、協議,并為是否接收此包數據的標志。幀類型(1 Bit): 所用信號幀的識別標志,即1.2.1 信號幀分類中的各類型信號的標志字節。器件地址(1Byte): PC所要訪問的外部器件的地址即是哪一個外部器件。起始地址(2Byte): PC所要訪問的器件的存貯器起始地址。長度(1Byte): 一次命令所轉輸的數據長度。校驗和(1Byte): 此幀信號的校驗字節,為異或校驗。幀尾標志(1Byte): 此幀信號的結束標志。(2) 寫命令幀幀頭標志幀類型器件地址起始地址長度數據區校驗和幀尾標志數據區:所要寫的數據信息。其它分析同上。(3) 數據幀幀頭標志幀類型長度數據區校驗字幀尾標志長度:所轉輸數據的長度

26、。數據區:所轉輸的數據信息。其它分析同上。(4) 正響應幀幀頭標志幀類型空校驗字幀尾標志空無意義:為了PIC16F877A編程的方便而加入。其它分析同上。(5) 重發幀幀頭標志幀類型空校驗字幀尾標志其它分析同上。(6) 放棄幀幀頭標志幀類型錯誤碼校驗字幀尾標志錯誤碼:00H 執行PC命令發放棄幀回應被動退出通訊。01H PIC16F877A 單片機方寫入芯片發生錯誤主動通知PC退出通訊。6.2.3 通信協議處理流程(1) 數據分幀與數據重組圖6.2.1串口數據發送過程 圖6.2.2串口數據接受過程將應用程序發送過來的數據作為一個數據流放在發送緩沖區中,通過通信協議進行分幀切割發送。在接收端,分

27、幀的數據去掉幀頭重新組合到接收緩沖區中,交給應用程序處理,發送過程的示意如圖6.2.1,接收過程的示意圖如圖6.2.2。單片機串口通信軟件設計流程圖串口接受到一幀數據此幀是否正確連續3次不正確退出通信并報告讀命令信號退出等待下一幀重發命令幀寫命令信號分析此命令開始執行分析此命令取出數據信息發數據幀發正回應數據幀退出通信并報告退出等待下幀命令NYYNYYNN 圖6.2.3單片機串口通信軟件流程圖應用程序通知通信開始讀還是寫發送讀命令發送寫命令串口收到命令此幀是否正確?連續三次否退出通信是幀數據嗎?重發命令幀等待下幀信號處理數據是正回應幀嗎命令執行完畢是重發幀嗎退出通信并報告重發命令幀等待下幀信號

28、讀寫NPC接收數據軟件設計流程 N N Y Y Y Y Y Y N圖6.2.4 PC串口通信軟件設計流程圖 6.3 PC 上位機的軟件設計6.3.1 PC軟件設計方法的選擇在開發PC上位機的通信程序中,人們常用的編程語言可分為3類:(1) 直接面向底層硬件的匯編語言。(2) DOS環境下的高級編程語言,如: C語言等。(3) Windows環境下的高級編程語言,如:VC+等。而在這3種方式中Windows環境下的串口編程以其設備無關性,可移植性以及界面友好等特征而得到廣泛應用。同時在Windows操作系統已經占據統治地位的情況下,欲開發良好的通信程序,利用Windows環境下的高級語言已漸成為

29、必然的選擇。開發Windows環境下的串口通信程序主要有以下2種方法:(1) 利用Windows API(Application Program Interface)用戶程序接口函數;(2) 利用ActiveX控件;后者的主要特點是簡單易學,但前者的功能更為強大控制手段更為靈活。6.3.2 PC軟件通信方式的選擇在Win32環境下串行通信有兩種:主要方式即同步方式,異步方式兩種方式有各自的特點。在軟件設計時應根據實際情況選擇合適的方式。(1)同步方式在同步方式中,讀串口的函數試圖在串口的接收緩沖區中讀取規定數目的數據,直到規定數目的數據全部被讀出或設定的超時時間已到時才返回。例如:(以C+ B

30、uilder編程語言為例下同)COMMTIMEOUTS cto;int timeConstant, timeMutiplier;cto.ReadTotalTimeoutConstant = timeConstant; /設置總超時常數cto.ReadTotalTimeoutMultiplier = timeMutiplier; /設置總超時系數SetCommTimeouts(m_hFile,&cto); /超時設置ReadFile (hComport,inBuffer,nWantRead,&nRealRead,NULL);/讀串口COMMTIMEOUTS結構用于設置超時,指定讀

31、寫函數的等待時間在ReadFile 函數中hComport 為待讀串口句柄;inBuffer 為輸入緩沖區大小;nWantRead 為每次調用ReadFile 時,函數試圖讀出的字節數;nRealRead 為實際讀出的字節數;最后一個參數值NULL 代表ReadFile將采用同步文件讀寫方式。(2)異步方式異步方式中,利用Win32 的多線程結構,可以讓串口的讀寫操作在后臺進行,而應用程序的其它部分在前臺執行例如:CreateFile(lpszPort, /打開串口GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED

32、, /允許異步操作0);OVERLAPPED lpOverlapped;COMMTIMEOUTS cto;int timeConstant, timeMutiplier;cto.ReadTotalTimeoutConstant = timeConstant; /設置總超時常數cto.ReadTotalTimeoutMultiplier = timeMutiplier; /設置總超時系數SetCommTimeouts(m_hFile,&cto); /超時設置lpOverlapped.hEvent=CreateEvent (NULL.TRUE,FALSE,NULL);ReadFile (h

33、Comport,inBuffer,nWantRead,&nRealRead,&lp Overlapped); /讀串口lpOverlapped 是1個OVERLAPPED 結構變量,OVERLAPPED 結構用于指出讀寫操作與其它操作的重疊為了實現線程間同步與通信,上面的代碼中用CreateEvent 函數產生1 個人工復位事件,并將其句柄賦予lpOverlapped的hEvent成員這樣,在異步讀寫完成時,Windows95發送該事件信號。(3)兩種方式的比較異步方式利用多線程結構來監視通信設備,其最大優點是程序對接收數據具有自主覺察能力。一旦通信線程查詢到數據已發送到串口上

34、,線程自動向應用程序發送一個數據接收到的消息,應用程序可用該消息來讀取通信設備傳來的數據。并且使用通信線程還不占用CPU時間,這樣系統實際上具有了同時控制多個通信設備(如MODEM)的能力。因此在對系統強壯性要求較高的場合下應采用異步方式。異步方式的優點也恰是同步方式的缺點。使用同步方式時容易發生線程阻塞,從而使系統性能下降。但在某些場合下,該缺點可以通過一些措施盡可能地減小,而其簡單易用的優點卻是很好地體現出來。如果不考慮Win95的進程和線程的問題,僅在串口有數據時,去讀串口緩沖區就可以了。此時確定串口讀取的時機,握手協議及軟件糾錯的實現是程序員應考慮的主要問題,也是減小線程阻塞所帶來的負

35、面影響的主要措施??梢圆捎猛睫D輸方式的場合有如下一些特點: 何時轉輸數據由PC機來決定,下位機只是被動接收并執行命令。 有限時間內,PC機命令可以執行完畢并返回結果。而不會使PC機處于長時間等待。 每次所轉輸的數據的長度是已知的,所轉輸的數據量是有限且比較小。我們在開發串行通信程序時,分別應用這兩種方式開發都獲得了成功。鑒于應用異步方式的安全性和普遍性6.3.3具體實現方法下面以C+ Builder為例,敘述PC機通信軟件的實現過程:(1)打開串口在Win32中,串口和其他通信設備是作為文件處理的。串口的打開并閉讀取以及寫入所用的函數與操作文件的函數相同。通信會話由調用CreateFile

36、函數打開串口開始,CreateFile 以讀訪問權限,寫訪問權限或讀寫訪問權限“打開串口”并設定了對其是異步操作方式。還是同步操作方式調用該函數打開串口進行讀寫操作的例子如下:mHandle = CreateFile(lpszPort, /串口名GENERIC_READ|GENERIC_WRITE, /允許讀/寫0, /獨占方式串口不能共享NULL, /安全性屬性一般設為0OPEN_EXISTING, /串口是已存在的不能建新端口lpOverlapped, /異步方式0 /串口無模板文件應設為0);如果調用成功函數返回串口的句柄賦給Handle,如果調用失敗則函數返回INVALID_HANDL

37、E_VALUE。(2)初始化串口對串口的初始化工作包括對波特率,數據位,停止位,奇偶校驗位I/O 緩沖大小以及超時等參數的設置。在調用API 函數進行串口初始化時,波特率,數據位,奇偶校驗停止位的信息包含于一個DCB結構中,而超時方面的信息則包含于COMMTIMEOUTS結構中,一般在用CreateFile 打開串行口后,可以調用GetCommState 函數來獲取串行口的初始配置。要修改串行口的配置應該先修改DCB結構,然后再調用SetCommState函數用指定的DCB結構來設置串行口。例如:DCB dcb;GetCommState(mHandle, &dcb) /讀取DCB結構d

38、cb.BaudRate=9600 / 設置波特率為9600b/sdcb.ByteSize=8; / 每個字符有8位dcb.Parity=NOPARITY; / 無校驗dcb.StopBits=ONESTOPBIT; / 一個停止位SetCommState(hCom, &dcb) / 保存至DCB結構使設置值生效調用SetupComm 函數可以設置串行口的輸入和輸出緩沖區的大小。如果通信的速率較高則應該設置較大的緩沖區。例如:SetupComm( mHandle , 1024*2, 1024*2 ) /輸入輸出緩沖區的大小均為2K在用ReadFile 和WriteFile 讀寫串行口時,

39、需要考慮超時問題。如果在指定的時間內沒有讀出或寫入指定數量的字符,那么ReadFile 或WriteFile 的操作就會結束。要查詢當前的超時設置應調用GetCommTimeouts 函數。該函數會填充一個COMMTIMEOUTS 結構調用SetCommTimeouts 可以用某一個COMMTIMEOUTS結構的內容來設置超時。TimeOuts. ReadIntervalTimeout=0 /讀間隔超時TimeOuts.ReadTotalTimeoutMultiplier=10 /讀時間系數TimeOuts.ReadTotalTimeoutConstant=100 /讀時間常量TimeOuts

40、.WriteTotalTimeoutMultiplier=10 /寫時間系數TimeOuts.WriteTotalTimeoutConstant=100 /寫時間常數SetCommTimeouts(hCom, &TimeOuts); / 保存設置值生效COMMTIMEOUTS結構的成員都以毫秒為單位??偝瑫r的計算公式是:總超時=時間系數×要求讀/寫的字符數+ 時間常數異步方式讀寫串行口時雖然ReadFile()和WriteFile() 在完成操作以前就可能返回但超時仍然是起作用的。這種情況下,超時規定的是操作的完成時間而不是ReadFile()和WriteFile()的返回時

41、間。(3)讀寫串口初始化工作完成以后便可以根據通信協議合理安排讀/寫函數ReadFile()和WriteFile()以讀寫各種握手信息和數據信息等。其中何時讀取單片機發送過來的數據信息及應答信息是重要的。此時采取的是事件驅動法,即:設置通信資源上的事件掩碼為EV_RXCHAR 。當接收到一個字符并放入緩沖區后即通知應用程序例。/PC發送一組命令至單片機WriteFile(mHandle, /串口句柄pDataBuff, /存放數據緩種區iLen, /所寫數據的長度pdwWritten, /已寫長度操作前應置為0lpOverlapped) /異步方式/設置通信事件掩碼DWORD dwMask=E

42、V_RXCHAR;SetCommMask(m_hFile,dwMask) /設置通信事件掩碼/等待通信事件的發生OVERLAPPED os ;memset( &os, 0, sizeof( OVERLAPPED ) ) ;os.hEvent=CreateEvent(NULL TRUE FALSE NULL)if(!WaitCommEvent(m_hFile, &dwEvtMask, &os) / 重疊操作if(GetLastError()=ERROR_IO_PENDING)/ 無限等待重疊操作結果GetOverlappedResult(mHandle, &os,

43、 &dwTrans, true);/事件已發生安排讀操作ReadFile(mHandle, /串口句柄pDataBuff, /存放數據緩種區iLen, /所讀數據的長度pdwRead, /實際所讀長度lpOverlapped) /異步方式在上例中,我們無限等待通信事件的發生。如果通信事件一直沒有發生則系統將不會繼續執行。在實際程序設計中我們可以設置一時限,超過此時限通信事件未到則執行相應錯誤處理此時,只需將GetOverlappedResult函數替換為WaitForSingleObject函數此函數的聲明形式如下:WaitForSingleObject(HANDLE hEvent,

44、/事件句柄unsigned long mTimeOuts /超時設置)(4) 關閉串口通信完畢調用CloseHandle() 函數關閉串口例如CloseHandle(mHandle); /關閉mHandle為打開串口時返回的句柄6.4 單片機軟件設計我們知道影響數據轉輸產生錯誤的因素有:轉輸線分布參數上下位機間的波特率誤差現場干擾等。而針對近程小批量數據的通信,下位機的波特率誤差性是影響可靠通信的最主要因素。所以在單片機軟件的設計時應重點考慮并設置好波特率。6.4.1波特率(1)波特率誤差來源分析單片機的振蕩電路是由晶體及電容C1 和C2 構成。晶振頻率主要由晶體的因有頻率決定,同時也與電容C

45、1、C2及外界溫度有一定的關系。另外,晶體頻率的標稱值與實際值也不可能完全一致。波特率最大允許誤差分析在異步串行通信方式1中單片機以16倍波特率的采樣速率對接收數據(RXD)不斷采樣,一旦檢測到由1到0的負跳變,16分頻計數器立刻復位,使之滿度翻轉的時刻恰好與輸入位的邊沿對準。16分頻計數器把每個接收位的時間分為16 份,在中間三位即7 ,8 ,9 ,狀態時位檢測器對RXD 端的值采樣,并以3取2的表決方式確定所接收的數據位。由此可見,當波特率的誤差使得在接收某位數據位時,采樣點離該位的中點半位間隔時將會對該位采樣兩次。即:欲使接收的第N位為正確位時,須滿足下式成立:所允許的波特率誤差N &g

46、t; 0.54故當所傳輸的一幀數據為10 位時,所允許的最大的波特率允許誤差為5 %對于其它常用的8位,9位,11位,一幀的串行傳輸,其最大的波特率允許誤差分別為6.25%,5.56%, 和4.5%。減小波特率誤差的措施我們知道使用離散度小的晶振是減小波特率誤差的關鍵。如果,晶振的離散度已超過所允許的范圍,此時不宜用其標稱值,可以采用測量其波特率的方法來得出實際的晶振波特率值。(2)單片機軟件的實現設置通信方式和波特率的值例MOV SCON,#50H 初始化串口設為方式1MOV TMOD,#20H 利用定時器1為波特率發生器并設為模式2MOV PCON,#XXH 設置SMOD值MOV TH1,

47、#XXH 設置定時器初始值SETB TR1 啟動定時器1等待接收PC機發來的信號幀并按通信協議作出相應響應。6.5 通信協議設計結論6.5.1通信可靠性分析通信的可靠性主要體現在所使用通信協議的可靠性上,本通信協議的可靠性主要有兩點理論基礎:(1)通過判斷幀頭起始字符來決定一幀的開始,這樣就避免了部分數據進入到內部數據處理之中。這個可能性在1/256, 通過停止位的判斷可將這個可能性再降低1/256。 另外通過幀類型字節的判斷可使之進一步降低。(2)校驗字將整幀信號進行異或校驗則使誤收的可能很小。如果將此異或校驗改為CRC校驗則出錯的可能性更是微乎其微了。本通信所用協議具有糾錯功能,這體現在當

48、PC 發送或接收數據時,當所接收的應答信號出現失誤時,將重新發送或接收此幀數據,直至接收到了正確的應答,具體在程序中最多允許連續出錯三次,超過后則放棄通信。在實際應用中,應用本通信時傳輸距離只有幾米以內而且環境干擾比較小,從而從外部因素上進一步保證了通信的可靠性。6.5.2通信速度分析如果在不考慮錯誤發生的情況下,PC 機每發送一幀數據時需要附加12 個字節,其中8 個字節用于發送4 個字節用于應答PC 機。每接收一幀數據時,需要附加13 個字節其中5 個字節用于接收8 個字節用于應答。如:按每幀傳送32個字節計算的話,其發送和接收的效率為為忽略PC和PIC16F877A單片機的處理時間計算。

49、發送數據速率、接收數據速率計算公式如下:發送數據速率:9600*32/44=6981bit/s接收數據速率:9600*32/45=6826bit/s這是理論上的速率,實際中還應包含PC和PIC16F877A單片機的處理信號幀,等待信號幀的時間。在本通信協議中,不會出現某信號幀已到達但PC或PIC16F877A單片機還未開始準備接收的現象。在實際應用中,因具體應用環境不同PC和PIC16F877A單片機處理信號幀的時間會有不同,所以具體速率值依具體應用而變化。7 Protel99設計原理圖(1)使用Protel進行電路板設計的第一步便是設計原理圖,原理圖決定了整個電路的基本功能,也是接下來生成網

50、絡表和設計印刷電路板的基礎。 在Protel 99的初始界面下新建一個設計庫,該數據庫用來管理項目。 File-New-改文件名改保存路徑OK 進入設計庫文件中的文件夾Document。 在Document 文件夾中新建原理圖文件和印制板文件。File-New-Schematic Document-Ok-改文件名File-New-PCB Document-Ok-改文件名 打開原理圖文件。 添加原理圖文件庫。Design-Add/Remove Library- 瀏覽所需零件庫Add-Ok 放置電路所需的各種元件,圖件,網絡標號等元器件。Design-Add/Remove Library- 瀏覽所需零件庫Add-Ok從零件庫中調出元件 P

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論