版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 引言</b></p><p> 隨著“信息時代”的到來,作為獲取信息的手段——傳感器技術得到了顯著的進步,其應用領域越來越廣泛,對其要求越來越高,需求越來越迫切。傳感器技術已成為衡量一個國家科學技術發(fā)展水平的重要標志之一。因此,了解并掌握各類傳感器的基本結構、工作原理及特性是非常重要的。</p><p> 由于傳感器能將各種物理量、化
2、學量和生物量等信號轉變?yōu)殡娦盘枺沟萌藗兛梢岳糜嬎銠C實現自動測量、信息處理和自動控制,但是它們都不同程度地存在溫漂和非線性等影響因素。傳感器主要用于測量和控制系統(tǒng),它的性能好壞直接影響系統(tǒng)的性能。因此,不僅必須掌握各類傳感器的結構、原理及其性能指標,還必須懂得傳感器經過適當的接口電路調整才能滿足信號的處理、顯示和控制的要求,而且只有通過對傳感器應用實例的原理和智能傳感器實例的分析了解,才能將傳感器和信息通信和信息處理結合起來,適應傳感
3、器的生產、研制、開發(fā)和應用。另一方面,傳感器的被測信號來自于各個應用領域,每個領域都為了改革生產力、提高工效和時效,各自都在開發(fā)研制適合應用的傳感器,于是種類繁多的新型傳感器及傳感器系統(tǒng)不斷涌現。溫度傳感器是其中重要的一類傳感器。其發(fā)展速度之快,以及其應用之廣,并且還有很大潛力。</p><p> 為了提高對傳感器的認識和了解,尤其是對溫度傳感器的深入研究以及其用法與用途,基于實用、廣泛和典型的原則而設計了本系
4、統(tǒng)。本文利用單片機結合傳感器技術而開發(fā)設計了這一溫度監(jiān)控系統(tǒng)。文中傳感器理論單片機實際應用有機結合,詳細地講述了利用熱敏電阻作為熱敏傳感器探測環(huán)境溫度的過程,以及實現熱電轉換的原理過程。</p><p> 本設計應用性比較強,設計系統(tǒng)可以作為生物培養(yǎng)液溫度監(jiān)控系統(tǒng),如果稍微改裝可以做熱水器溫度調節(jié)系統(tǒng)、實驗室溫度監(jiān)控系統(tǒng)等等。課題主要任務是完成環(huán)境溫度檢測,利用單片機實現溫度調節(jié)并通過計算機實施溫度監(jiān)控。設計后
5、的系統(tǒng)具有操作方便,控制靈活等優(yōu)點。</p><p> 本設計系統(tǒng)包括溫度傳感器,A/D轉換模塊,輸出控制模塊,數據傳輸模塊,溫度顯示模塊和溫度調節(jié)驅動電路六個部分。文中對每個部分功能、實現過程作了詳細介紹。整個系統(tǒng)的核心是進行溫度監(jiān)控,完成了課題所有要求。</p><p><b> 1 設計要求</b></p><p><b>
6、; 1.1 控制要求</b></p><p> (1)生物繁殖培養(yǎng)液的溫度要保證在適于細胞繁殖的溫度內,這主要在控制程序設計中考慮。溫度控制范圍為15 ~25,升溫、降溫階段的溫度控制精度要求為0.5度,保溫階段溫度控制精度為 0.5度 。</p><p> 圖1.1.1溫度控制曲線</p><p> ?。?)微機自動調節(jié) 正常情況下,系統(tǒng)投入自
7、動。</p><p> ?。?)模擬手動操作 當系統(tǒng)發(fā)生異常,投入手動操作。</p><p> ?。?)微機監(jiān)控功能 顯示當前被控量的設定值、實際值,控制量的輸出。</p><p> 1.2 受控對象的數學模型</p><p> 生物繁殖的培養(yǎng)液主要用于生物的繁殖研究,而溫度是影響生物繁殖的重要因素。本系統(tǒng)要求長時間監(jiān)視培養(yǎng)液的溫度,
8、并對當前的溫度進行控制。本控制對象為生物繁殖用培養(yǎng)液,采用繼電器進行控制。</p><p> 2 系統(tǒng)的硬件配置</p><p> 2.1 單片機和系統(tǒng)總線</p><p> 單片機:PIC16F877A(PIC16F877A為美國MICORCHIP公司生產的帶A/D轉換的8位單片機)。</p><p> 顯示系統(tǒng):商用計算機。&l
9、t;/p><p> 用戶內存:256M RAM。</p><p> 系統(tǒng)總線:RS-232-C接口(又稱 EIA RS-232-C)RS232 C有25條線,,分為5個功能組,包括4條數據線,11條控制線,3條定時線,7條備用線和未定義線。</p><p> 操作系統(tǒng):Windows 2000。</p><p> 2.
10、2 硬件介紹 </p><p> 計算機工作的外圍電路設備</p><p><b> ?。?)溫度傳感器</b></p><p> 溫度傳感器采用補償型NTC熱敏電阻其主要性能如下:</p><p> ①補償型NTC熱敏電阻 B值誤差范圍小,對于阻值誤差范圍在5%的產品,其一致性、互換性良好。適合于一般精度的溫
11、度測量和計量設備。</p><p><b> ②外型結構和尺寸:</b></p><p> 圖2.2.1 溫度傳感器結構尺寸圖</p><p><b> ?、壑饕夹g參數:</b></p><p> 時間常數≤30S </p><p> 測量功率≤0.1mW<
12、/p><p> 使用溫度范圍-55~+125℃</p><p> 耗散系數≥6mW/℃</p><p> 額定功率0.5W </p><p><b> ④降功耗曲線:</b></p><p> 圖2.2.2溫度傳感器功耗曲線圖</p><p> ?。?)核心處理單元
13、MicroChip PIC16F877A單片機</p><p> MicroChip PCI16F877A單片機主要性能:</p><p> 具有高性能RISC CPU</p><p> 僅有35條單字指令。</p><p> 除程序指令為兩個周期外,其余的均為單周期指令。</p><p> 運行速度:DC-
14、20M時鐘輸入。</p><p> DC-200ns指令周期。</p><p> 8K*14個FLASH程序存儲器。</p><p> 368*8個數據存儲器(RAM)字節(jié)。</p><p> 引腳輸出和PIC16C73B/74B/76/77兼容。</p><p> 中斷能力(達到14個中斷源)。</p
15、><p> 8級深度的硬件堆棧。</p><p> 直接,間接和相對尋址方式。</p><p> 上電復位(POR)。</p><p> 上電定時器(PWRT)和震動啟動定時器。</p><p> 監(jiān)視定時器(WDT),它帶有片內可靠運行的RC振蕩器。</p><p><b>
16、 可編程的代碼保護。</b></p><p><b> 低功耗睡眠方式。</b></p><p><b> 可選擇的振蕩器。</b></p><p> 低功耗,高速CMOS FLASH/EEPROM工藝。</p><p><b> 全靜態(tài)設計。</b><
17、;/p><p> 在線串行編程(ICSP)。</p><p> 單獨5v的內部電路串行編程(ICSP)能力。</p><p> 處理機讀/寫訪問程序存儲器。</p><p> 運行電壓范圍2.0v到5v。</p><p> 高輸入/輸出電流25mA。</p><p> 商用,工業(yè)用溫度范
18、圍。</p><p><b> 低功耗:</b></p><p> 在5v,4MHz時典型值小于2mA。</p><p> 在3v,32KHz時典型值小于20uA。</p><p> 典型的靜態(tài)電流值小于1uA。</p><p><b> 外圍特征:</b><
19、/p><p> Timer 0 :帶有預分頻的8位定時器/計數器。</p><p> Timer 1 :帶有預分頻的16位定時器/計數器,在使用外部晶體時鐘時在</p><p> SLEEP期間仍能工作。</p><p> Timer 2 :帶有8位周期寄存器,預分頻和后分頻器的8位定時器/計數器</p><p>
20、 2個捕捉器,比較器和PWM模塊。</p><p> 其中 :捕捉器是16位的,最大分辨率為12.5nS。</p><p> 比較器是16位的,最大分辨率為200nS。</p><p> PWM最大分辨率為是10位。</p><p> 10位多通道模/數轉換器。</p><p> 帶有SPI(主模式)和I2
21、C(主/從)模式的SSP。</p><p> 帶有9位地址探測的通用同步異步接收/發(fā)送(USART/RCI)。</p><p> 帶有RD,WR和CS控制(只40/44引腳)8位字寬的并行從端口。</p><p> 帶有降壓的復位檢測電路。</p><p> ?。?)RS-232-C接口電路</p><p>
22、計算機與計算機或計算機與終端之間的數據傳送可以采用串行通訊和并行通訊二種方式。由于串行通訊方式具有使用線路少、成本低,特別是在遠程傳輸時,避免了多條線路特性的不一致而被廣泛采用。 在串行通訊時,要求通訊雙方都采用一個標準接口,使不同 的設備可以方便地連接起來進行通訊。 RS-232-C接口(又稱 EIA RS-232-C)是目前最常用的一種串行通訊接口。它是在1970年由美國電子工業(yè)協(xié)會
23、(EIA)聯(lián)合貝爾系統(tǒng)、 調制解調器廠家及計算機終端生產廠家共同制定的用于串行通訊的標 準。它的全名是“數據終端設備(DTE)和數據通訊設備(DCE)之間 串行二進制數據交換接口技術標準”該標準規(guī)定采用一個25個腳的 DB25連接器,對連接器的每個引腳的信號內容加以規(guī)定,還對各種信 號的電平加以規(guī)定。</p><p> ?、俳涌诘男盘杻热?#160;實際上RS-2
24、32-C的25條引線中有許多是很少使用的,在計算機通訊中一般只使用3-9條引線。RS-232-C最常用的9條引線的信號。</p><p> ?、诮涌诘碾姎馓匦?#160;在RS-232-C中任何一條信號線的電壓均為負邏輯關系。即:邏輯。“1”,-5~-15V;邏輯“0” +5~ +15V 。噪聲容限為2V。即 要求接收器能識別低至+3V的信號作為邏輯“0”,高到-3V的信號
25、 作為邏輯“1” 。 ③ 接口的物理結構 RS-232-C接口連接器一般使用型號為DB-25的25芯插頭座,通常插頭在DCE端,插座在DTE端. 一些設備與PC機連接的RS-232-C接口,因為不使用對方的傳送控制信號,只需三條接口線,即“發(fā)送數據”、“接收數據”和“信號地”。所以采用DB-9的9芯插頭座,傳輸線采用屏蔽雙絞線。</p><p> ?、軅鬏旊娎|長度&
26、#160;由RS-232C標準規(guī)定在碼元畸變小于4%的情況下,傳輸電纜長度應為50英尺,其實這個4%的碼元畸變是很保守的,在實際應用中,約有99%的用戶是按碼元畸變10~20%的范圍工作的,所以實際使用中最大距離會遠超過50英尺。</p><p> 圖2.3.1 Max232結構圖</p><p><b> (4)繼電器</b></p><p&
27、gt; 繼電器是具有隔離功能的自動開關,廣泛用于遙控,遙測,通信,自動控制,機電一體化及電力電子設備中,是最重要的控制元件之一。</p><p> 繼電器是在自動控制電路中起控制與隔離作用的執(zhí)行部件,它實際上是一種可以用低電壓、小電流來控制大電流、高電壓的自動開關。在本系統(tǒng)中,繼電器控制的自動溫度調節(jié)電路和PCI16F877A單片機中程序構成溫度自動監(jiān)測電路,實現對生物培養(yǎng)液溫度的監(jiān)測和自動控制</p&
28、gt;<p> ?。?)半導體降溫片及電阻加熱絲</p><p> ?、侔雽w制冷器是根據熱電效應技術的特點,采用特殊半導體材料熱電堆來制冷,能夠將電能直接轉換為熱能,效率較高。其工作原理如圖2.5.1:</p><p> 圖2.5.1半導體降溫片工作原理圖</p><p> 半導體制冷片由許多N型和P型半導體之顆粒互相排列而成,而N P之間以一般
29、的導體相連接而成一完整線路,通常是銅、鋁或其他金屬導體,最後由兩片陶瓷片像夾心餅乾一樣夾起來,陶瓷片必須絕緣且導熱良好,通上電源之後,冷端的熱量被移到熱端,導致冷端溫度降低,熱端溫度升高。它的外觀如圖2.5.2所示。</p><p> 2)本控制系統(tǒng)是對生物培養(yǎng)液進行溫度監(jiān)控,故太快的溫度變化對生物繁殖顯</p><p> 圖2.5.2半導體降溫片外觀圖</p><
30、p> ②本控制系統(tǒng)是對生物培養(yǎng)液進行溫度監(jiān)控,過快的溫度變化對生物繁殖顯然是不利的,因此在本系統(tǒng)中采用的是高阻抗小功率加熱電阻絲進行溫度的小范圍調節(jié)。</p><p> 3 溫度控制系統(tǒng)的組成框圖</p><p> 采用典型的反饋式溫度控制系統(tǒng),組成部分見圖3.1。其中數字控制器的功能由單片機實現。</p><p> 圖3.1溫度控制系統(tǒng)的組成框圖&
31、lt;/p><p> 培養(yǎng)皿的傳遞函數為,其中τ1為電阻加熱的時間常數,為電阻加熱的純滯后時間,為采樣周期。</p><p> A/D轉換器可劃歸為零階保持器內,所以廣義對象的傳遞函數為</p><p><b> ?。?-1-1)</b></p><p> 廣義對象的Z傳遞函數為 </p><p&g
32、t; (3-1-2) </p><p> 所以系統(tǒng)的閉環(huán)Z傳遞函數為</p><p><b> (3-1-3)</b></p><p><b> 系統(tǒng)的數字控制器為</b></p><p> = (3-1-4)
33、 </p><p> 寫成差分方程即為 </p><p> ?。?-1-5) </p><p><b> 令 </b>&l
34、t;/p><p><b> ,</b></p><p><b> ,</b></p><p> 得 (3-1-6)</p><p> 式中 ——第次采樣時的偏差;</p><p> ——第次采樣時的偏差;</p>&l
35、t;p> ——第次采樣時的偏差;</p><p> 4 溫度控制系統(tǒng)結構圖及總述</p><p> 圖4.1溫度控制系統(tǒng)結構圖</p><p> 圖4.1中溫度傳感器和Micro Chip PIC16F877A單片機中的A/D轉換器構成輸入通道,用于采集培養(yǎng)皿內的溫度信號。溫度傳感器輸出電壓經過A/D轉換后的數字量與培養(yǎng)皿內的溫度給定值數字化后進行比
36、較,即可得到實際溫度和給定溫度的偏差。培養(yǎng)皿內的溫度設定值由Micro Chip PIC16F877A單片機中程序設定。由Micro Chip PIC16F877A單片機構成的數字控制器進行比較運算,經過比較后輸出控制量控制由加熱和降溫電路構成的溫度調節(jié)電路對培養(yǎng)皿中的培養(yǎng)液溫度進行調節(jié)。同時通過電平轉換電路把當前溫度傳輸到商用計算機的串口中,由計算機動態(tài)的顯示培養(yǎng)皿中的溫度,正常情況下溫度控制由Micro Chip PIC16F877
37、A單片機自動控制。必要時,計算機也可以通過軟件來強制改變培養(yǎng)皿中溫度。</p><p> 5 溫度控制系統(tǒng)軟件設計</p><p> 5.1 Microchip PIC16F877A單片機溫度控制系統(tǒng)軟件結構圖如圖5.1.1所示。</p><p> 圖5.1.1單片機溫度控制系統(tǒng)軟件結構圖</p><p> 5.2 單片機控制流程圖
38、</p><p> 圖5.2.1單片機控制流程圖</p><p> 5.3 溫度變換程序模塊</p><p> 溫度傳感器在12℃到60℃輸出2.52V—1.02V,溫度起點為12℃,滿量程為48℃。Micro Chip PIC16F877A單片機內嵌的10位A/D轉換器對應輸出的數字量為0000000000B~1111111111B(0~5V),應用以下變換
39、公式進行變換:</p><p> AX=A0+(AM-A0)(NX-N0)/(NM-N0)</p><p> 式中,A0為一次測量儀表的下限。</p><p> AM為一次測量儀表的上限。</p><p><b> AX實際測量值。</b></p><p> N0儀表下限對應的數字量。&
40、lt;/p><p> NM儀表上限對應的數字量。</p><p> NX測量值對應的數字量。</p><p> 5.4 溫度非線性轉換程序模塊</p><p> 采用折線擬合法進行線性化處理</p><p> 如圖5.4.1所示,分為以下幾段:</p><p> 當1.73V≤Ax<
41、;2.52V時,T℃=0.06*WN+12</p><p> 當1.40V≤WN<1.73V時,T℃=0.03*WN+25</p><p> 當1.24V≤WN<1.40V時,T℃=0.016*WN+40</p><p> 當1.06V≤WN<1.24V時,T℃=0.018WN+50</p><p> 表5.4.1
42、溫度曲線實際測量數據</p><p><b> 圖5-1</b></p><p> 圖5.4.1 溫度分段線限等效圖</p><p> 6 通信協(xié)議的設計</p><p> 由于溫度采集和實施控制是通過單片機控制系統(tǒng)實現,而微機完成溫度監(jiān)控,所以需要采用單片機和微機之間的通信協(xié)議。本設計應用條件為傳輸距離不超過
43、15米的短距離數據傳輸,且傳輸數據量較小,所以采用在控制領域里應用較廣泛RS232C串行通信方式。</p><p> 針對近程小批量的數據通信,設計時采用3 線制(RXD ,TXD ,GND)軟握手的零MODEM方式。即:將PC機和單片機的“發(fā)送數據線(TXD)”與“接收數據(RXD)”交叉連接,二者的地線(GND)直接相連而其它信號線如握手信號線均不用,而采用軟件握手。這樣即可以實現預定的任務,又可以簡化電路
44、設計節(jié)約了成本。</p><p> 由于RS232C是早期為促進公用電話網絡進行數據通信而制定的標準,其邏輯電平與TTL, MOS 邏輯電平不同。邏輯0 電平規(guī)定為+5~+15V之間,邏輯1是電平為-5 ~-15V 之間。因此在將PC機和單片機的RXD和TXD交叉連接時,必須進行電平轉換。</p><p> 下圖即為通信時的硬件連接圖,其中器件MAX232完成邏輯電平轉換的任務。<
45、;/p><p> 圖6.1 電平轉換電路圖</p><p> 注:在PC機中9針RS232接口中:2線:RXD, 3線:TXD, 5線:GND</p><p> 而在25針的RS232接口中:3線:RXD, 2線:TXD, 7線:GND</p><p><b> 6.1 軟件設計</b></p><
46、;p> 在進行數據通信的軟件設計時,必須解決好兩個方面的問題:一是可靠性,二是速度。而這兩方面的問題,可靠性是第一位的,速度只能是在可靠的基礎上的速度??煽靠焖俎D輸的實現,需要PC-單片機軟件以及通信協(xié)議等各個環(huán)節(jié)的可靠和其間的相互配合。</p><p> 6.1.1 通信協(xié)議概述</p><p> 在設計PC-單片機通信協(xié)議時,需說明一點:在本系統(tǒng)的實際通信中,PC機是主控者
47、單片機只是被動接收者。采用這種通信協(xié)議較雙方互為主控者時簡單。</p><p> 本通信協(xié)議的設計思想是基于幀傳輸方式。即在向RS232串口發(fā)送命令信號,應答信號及數據信號時,是一幀一幀地發(fā)送的。為了使數據快速可靠地傳輸,將每一幀數據唯一對應一命令幀。此時傳輸數據即執(zhí)行命令具體如下:</p><p> (1) 在PC讀數據時,遵循“讀命令-等數據-報告”,即PC下達一命令,等待接收數據
48、,根據所接收數據的正誤向應用程序報告此命令的執(zhí)行情況。</p><p> (2) 在PC寫數據時,遵循“寫命令-等回應-報告”,即PC下達一寫命令(此時所要寫的數據含于此命令中),等待單片機發(fā)來的“已正確接收”的回應信號,并向應用程序報告此命令執(zhí)行完畢。</p><p> (3) 如果在轉輸過程中,其間PC或MCU所接收任何一幀信號出現錯誤時,均會向對方發(fā)送重發(fā)此幀信號的請求。如果連續(xù)
49、三次轉輸失敗,則退出通信并向應用程序報告。</p><p> 6.2 通信協(xié)議說明</p><p> 6.2.1信號幀分類</p><p> (1) 讀命令幀:當PC讀數據時,PC向PIC16F877A發(fā)送的命令信號。</p><p> (2) 寫命令幀:當PC寫數據時,PC向PIC16F877A發(fā)送的命令信號(內含所要寫的數據)。&
50、lt;/p><p> (3) 數據幀:當PC讀數據時,PIC16F877A向PC發(fā)送的內含數據信息的信號。</p><p> (4) 正回應幀:當PC寫數據時,PIC16F877A向PC報告數據已正確接收的信號。</p><p> (5) 重發(fā)命令幀:當PC讀/寫數據時,PIC16F877A所接收的信號幀(讀/寫命令幀)有誤時向PC發(fā)出的請求重發(fā)信號。</p
51、><p> (6) 放棄命令幀:當PC讀/寫數據時出現了使程序無法正常執(zhí)行時PC或PIC16F877A向對方發(fā)出的退出通信的通知信號。</p><p> 6.2.2信號幀格式</p><p> (1) 讀命令幀格式</p><p> 幀頭標志(1 Bit): 表示此數據包屬于本串口通信協(xié)議,并為是否接收此包數據的標志。</p>
52、<p> 幀類型(1 Bit): 所用信號幀的識別標志,即1.2.1 信號幀分類中的各類型信號的標志字節(jié)。</p><p> 器件地址(1Byte): PC所要訪問的外部器件的地址即是哪一個外部器件。</p><p> 起始地址(2Byte): PC所要訪問的器件的存貯器起始地址。</p><p> 長度(1Byte): 一次命令所轉輸的數據長
53、度。</p><p> 校驗和(1Byte): 此幀信號的校驗字節(jié),為異或校驗。</p><p> 幀尾標志(1Byte): 此幀信號的結束標志。</p><p><b> (2) 寫命令幀</b></p><p> 數據區(qū):所要寫的數據信息。其它分析同上。</p><p><b&g
54、t; (3) 數據幀</b></p><p> 長度:所轉輸數據的長度。</p><p> 數據區(qū):所轉輸的數據信息。其它分析同上。</p><p><b> (4) 正響應幀</b></p><p> 空無意義:為了PIC16F877A編程的方便而加入。其它分析同上。</p><
55、;p><b> (5) 重發(fā)幀</b></p><p><b> 其它分析同上。</b></p><p><b> (6) 放棄幀</b></p><p><b> 錯誤碼:</b></p><p> 00H 執(zhí)行PC命令發(fā)放棄幀回應被
56、動退出通訊。</p><p> 01H PIC16F877A 單片機方寫入芯片發(fā)生錯誤主動通知PC退出通訊。</p><p> 6.2.3 通信協(xié)議處理流程</p><p> (1) 數據分幀與數據重組</p><p> 圖6.2.1串口數據發(fā)送過程</p><p> 圖6.2.2串口數據接受過程<
57、/p><p> 將應用程序發(fā)送過來的數據作為一個數據流放在發(fā)送緩沖區(qū)中,通過通信協(xié)議進行分幀──切割──發(fā)送。在接收端,分幀的數據去掉幀頭重新組合到接收緩沖區(qū)中,交給應用程序處理,發(fā)送過程的示意如圖6.2.1,接收過程的示意圖如圖6.2.2。</p><p> 單片機串口通信軟件設計流程圖</p><p> 圖6.2.3單片機串口通信軟件流程圖</p>
58、<p> PC接收數據軟件設計流程</p><p> N N</p><p> Y Y</p><p><b> Y</b></p><p><b> Y</b&
59、gt;</p><p><b> Y</b></p><p><b> Y</b></p><p><b> N</b></p><p> 圖6.2.4 PC串口通信軟件設計流程圖 </p><p> 6.3 PC 上位機的軟件設計</p
60、><p> 6.3.1 PC軟件設計方法的選擇</p><p> 在開發(fā)PC上位機的通信程序中,人們常用的編程語言可分為3類:(1) 直接面向底層硬件的匯編語言。(2) DOS環(huán)境下的高級編程語言,如: C語言等。(3) Windows環(huán)境下的高級編程語言,如:VC++等。而在這3種方式中Windows環(huán)境下的串口編程以其設備無關性,可移植性以及界面友好等特征而得到廣泛應用。同時在Wind
61、ows操作系統(tǒng)已經占據統(tǒng)治地位的情況下,欲開發(fā)良好的通信程序,利用Windows環(huán)境下的高級語言已漸成為必然的選擇。</p><p> 開發(fā)Windows環(huán)境下的串口通信程序主要有以下2種方法:</p><p> (1) 利用Windows API(Application Program Interface)用戶程序接口函數;</p><p> (2) 利用A
62、ctiveX控件;</p><p> 后者的主要特點是簡單易學,但前者的功能更為強大控制手段更為靈活。</p><p> 6.3.2 PC軟件通信方式的選擇</p><p> 在Win32環(huán)境下串行通信有兩種:主要方式即同步方式,異步方式兩種方式有各自的特點。在軟件設計時應根據實際情況選擇合適的方式。</p><p><b>
63、 ?。?)同步方式</b></p><p> 在同步方式中,讀串口的函數試圖在串口的接收緩沖區(qū)中讀取規(guī)定數目的數據,直到規(guī)定數目的數據全部被讀出或設定的超時時間已到時才返回。例如:(以C++ Builder編程語言為例下同)</p><p><b> ……………………</b></p><p><b> …………………
64、…</b></p><p> COMMTIMEOUTS cto;</p><p> int timeConstant, timeMutiplier;</p><p> cto.ReadTotalTimeoutConstant = timeConstant; //設置總超時常數</p><p> cto.ReadTotalT
65、imeoutMultiplier = timeMutiplier; //設置總超時系數</p><p> SetCommTimeouts(m_hFile,&cto); //超時設置</p><p> …………………………</p><p> …………………………</p><p> ReadFile (hComport,inBuf
66、fer,nWantRead,&nRealRead,NULL);//讀串口</p><p> …………………………</p><p> …………………………</p><p> COMMTIMEOUTS結構用于設置超時,指定讀寫函數的等待時間</p><p> 在ReadFile 函數中hComport 為待讀串口句柄;inBuff
67、er 為輸入緩沖區(qū)大小;nWantRead 為每次調用ReadFile 時,函數試圖讀出的字節(jié)數;nRealRead 為實際讀出的字節(jié)數;最后一個參數值NULL 代表ReadFile將采用同步文件讀寫方式。</p><p><b> ?。?)異步方式</b></p><p> 異步方式中,利用Win32 的多線程結構,可以讓串口的讀寫操作在后臺進行,而應用程序的其它
68、部分在前臺執(zhí)行例如:</p><p><b> ……………………</b></p><p><b> ……………………</b></p><p><b> ……………………</b></p><p> CreateFile(lpszPort, //打開串口</p>
69、<p> GENERIC_READ|GENERIC_WRITE,</p><p><b> 0,</b></p><p><b> 0,</b></p><p><b> ……………………</b></p><p><b> ……………………&l
70、t;/b></p><p> OPEN_EXISTING,</p><p> FILE_FLAG_OVERLAPPED, //允許異步操作</p><p><b> 0);</b></p><p> OVERLAPPED lpOverlapped;</p><p> COMMTIM
71、EOUTS cto;</p><p> int timeConstant, timeMutiplier;</p><p> cto.ReadTotalTimeoutConstant = timeConstant; //設置總超時常數</p><p> cto.ReadTotalTimeoutMultiplier = timeMutiplier; //設置總超時
72、系數</p><p> SetCommTimeouts(m_hFile,&cto); //超時設置</p><p> lpOverlapped.hEvent=CreateEvent (NULL.TRUE,FALSE,NULL);</p><p><b> ……………………</b></p><p><b
73、> ……………………</b></p><p><b> ……………………</b></p><p> ReadFile (hComport,inBuffer,nWantRead,&nRealRead,&lp Overlapped); //讀串口</p><p><b> ……………………<
74、/b></p><p> lpOverlapped 是1個OVERLAPPED 結構變量,OVERLAPPED 結構用于指出讀寫操作與其它操作的重疊為了實現線程間同步與通信,上面的代碼中用CreateEvent 函數產生1 個人工復位事件,并將其句柄賦予lpOverlapped的hEvent成員這樣,在異步讀寫完成時,Windows95發(fā)送該事件信號。</p><p> ?。?)兩
75、種方式的比較</p><p> 異步方式利用多線程結構來監(jiān)視通信設備,其最大優(yōu)點是程序對接收數據具有自主覺察能力。一旦通信線程查詢到數據已發(fā)送到串口上,線程自動向應用程序發(fā)送一個數據接收到的消息,應用程序可用該消息來讀取通信設備傳來的數據。并且使用通信線程還不占用CPU時間,這樣系統(tǒng)實際上具有了同時控制多個通信設備(如MODEM)的能力。因此在對系統(tǒng)強壯性要求較高的場合下應采用異步方式。</p>
76、<p> 異步方式的優(yōu)點也恰是同步方式的缺點。使用同步方式時容易發(fā)生線程阻塞,從而使系統(tǒng)性能下降。但在某些場合下,該缺點可以通過一些措施盡可能地減小,而其簡單易用的優(yōu)點卻是很好地體現出來。如果不考慮Win95的進程和線程的問題,僅在串口有數據時,去讀串口緩沖區(qū)就可以了。此時確定串口讀取的時機,握手協(xié)議及軟件糾錯的實現是程序員應考慮的主要問題,也是減小線程阻塞所帶來的負面影響的主要措施。</p><p>
77、; 可以采用同步轉輸方式的場合有如下一些特點:</p><p> ① 何時轉輸數據由PC機來決定,下位機只是被動接收并執(zhí)行命令。</p><p> ② 有限時間內,PC機命令可以執(zhí)行完畢并返回結果。而不會使PC機處于長時間等待。</p><p> ?、?每次所轉輸的數據的長度是已知的,所轉輸的數據量是有限且比較小。</p><p>
78、我們在開發(fā)串行通信程序時,分別應用這兩種方式開發(fā)都獲得了成功。鑒于應用異步方式的安全性和普遍性</p><p> 6.3.3具體實現方法</p><p> 下面以C++ Builder為例,敘述PC機通信軟件的實現過程:</p><p><b> (1)打開串口</b></p><p> 在Win32中,串口和其
79、他通信設備是作為文件處理的。串口的打開并閉讀取以及寫入所用的函數與操作文件的函數相同。</p><p> 通信會話由調用CreateFile 函數打開串口開始,CreateFile 以讀訪問權限,寫訪問權限或讀寫訪問權限“打開串口”并設定了對其是異步操作方式。還是同步操作方式調用該函數打開串口進行讀寫操作的例子如下:</p><p> mHandle = CreateFile(lpsz
80、Port, //串口名</p><p> GENERIC_READ|GENERIC_WRITE, //允許讀/寫</p><p> 0, //獨占方式串口不能共享</p><p> NULL, //安全性屬性一般設為0</p><p> OPEN_EXISTING, //串口是已存在的不能建新端口</p><p&g
81、t; lpOverlapped, //異步方式</p><p> 0 //串口無模板文件應設為0</p><p><b> );</b></p><p> 如果調用成功函數返回串口的句柄賦給Handle,如果調用失敗則函數返回INVALID_HANDLE_VALUE。</p><p><b> (2)
82、初始化串口</b></p><p> 對串口的初始化工作包括對波特率,數據位,停止位,奇偶校驗位I/O 緩沖大小以及超時等參數的設置。在調用API 函數進行串口初始化時,波特率,數據位,奇偶校驗停止位的信息包含于一個DCB結構中,而超時方面的信息則包含于COMMTIMEOUTS結構中,</p><p> 一般在用CreateFile 打開串行口后,可以調用GetCommSt
83、ate 函數來獲取串行口的初始配置。要修改串行口的配置應該先修改DCB結構,然后再調用SetCommState函數用指定的DCB結構來設置串行口。例如:</p><p><b> DCB dcb;</b></p><p> GetCommState(mHandle, &dcb) //讀取DCB結構</p><p><b>
84、 ……………………</b></p><p><b> ……………………</b></p><p> dcb.BaudRate=9600 // 設置波特率為9600b/s</p><p> dcb.ByteSize=8; // 每個字符有8位</p><p> dcb.Parity=NOPARITY;
85、// 無校驗</p><p> dcb.StopBits=ONESTOPBIT; // 一個停止位</p><p> SetCommState(hCom, &dcb) // 保存至DCB結構使設置值生效</p><p> 調用SetupComm 函數可以設置串行口的輸入和輸出緩沖區(qū)的大小。如果通信的速率較高則應該設置較大的緩沖區(qū)。例如:</p&g
86、t;<p> …………………………</p><p> …………………………</p><p> SetupComm( mHandle , 1024*2, 1024*2 ) //輸入輸出緩沖區(qū)的大小均為2K</p><p> …………………………</p><p> …………………………</p><p&g
87、t; 在用ReadFile 和WriteFile 讀寫串行口時,需要考慮超時問題。如果在指定的時間內沒有讀出或寫入指定數量的字符,那么ReadFile 或WriteFile 的操作就會結束。要查詢當前的超時設置應調用GetCommTimeouts 函數。該函數會填充一個COMMTIMEOUTS 結構調用SetCommTimeouts 可以用某一個COMMTIMEOUTS結構的內容來設置超時。</p><p>
88、 …………………………</p><p> …………………………</p><p> TimeOuts. ReadIntervalTimeout=0 //讀間隔超時</p><p> TimeOuts.ReadTotalTimeoutMultiplier=10 //讀時間系數</p><p> TimeOuts.ReadTotalTime
89、outConstant=100 //讀時間常量</p><p> TimeOuts.WriteTotalTimeoutMultiplier=10 //寫時間系數</p><p> TimeOuts.WriteTotalTimeoutConstant=100 //寫時間常數</p><p> SetCommTimeouts(hCom, &TimeOuts
90、); // 保存設置值生效</p><p> ………………………………</p><p> ………………………………</p><p> ………………………………</p><p> COMMTIMEOUTS結構的成員都以毫秒為單位。總超時的計算公式是:</p><p> 總超時=時間系數×要求讀/寫的字
91、符數+ 時間常數</p><p> 異步方式讀寫串行口時雖然ReadFile()和WriteFile() 在完成操作以前就可能返回但超時仍然是起作用的。這種情況下,超時規(guī)定的是操作的完成時間而不是ReadFile()和WriteFile()的返回時間。</p><p><b> (3)讀寫串口</b></p><p> 初始化工作完成以后
92、便可以根據通信協(xié)議合理安排讀/寫函數ReadFile()和WriteFile()以讀寫各種握手信息和數據信息等。其中何時讀取單片機發(fā)送過來的數據信息及應答信息是重要的。此時采取的是事件驅動法,即:設置通信資源上的事件掩碼為EV_RXCHAR 。當接收到一個字符并放入緩沖區(qū)后即通知應用程序例。</p><p> //PC發(fā)送一組命令至單片機</p><p> WriteFile(mHan
93、dle, //串口句柄</p><p> pDataBuff, //存放數據緩種區(qū)</p><p> iLen, //所寫數據的長度</p><p> pdwWritten, //已寫長度操作前應置為0</p><p> lpOverlapped) //異步方式</p><p> //設置通信事件掩碼<
94、/p><p> DWORD dwMask=EV_RXCHAR;</p><p> SetCommMask(m_hFile,dwMask)) //設置通信事件掩碼</p><p> //等待通信事件的發(fā)生</p><p> OVERLAPPED os ;</p><p> memset( &os, 0, s
95、izeof( OVERLAPPED ) ) ;</p><p> os.hEvent=CreateEvent(NULL TRUE FALSE NULL)</p><p> if(!WaitCommEvent(m_hFile, &dwEvtMask, &os)) // 重疊操作</p><p> if(GetLastError()==ERROR_
96、IO_PENDING)</p><p><b> {</b></p><p> // 無限等待重疊操作結果</p><p> GetOverlappedResult(mHandle, &os, &dwTrans, true);</p><p> //事件已發(fā)生安排讀操作</p>&l
97、t;p> ReadFile(mHandle, //串口句柄</p><p> pDataBuff, //存放數據緩種區(qū)</p><p> iLen, //所讀數據的長度</p><p> pdwRead, //實際所讀長度</p><p> lpOverlapped) //異步方式</p><p>&l
98、t;b> }</b></p><p> 在上例中,我們無限等待通信事件的發(fā)生。如果通信事件一直沒有發(fā)生則系統(tǒng)將不會繼續(xù)執(zhí)行。在實際程序設計中我們可以設置一時限,超過此時限通信事件未到則執(zhí)行相應錯誤處理此時,只需將GetOverlappedResult函數替換為WaitForSingleObject函數此函數的聲明形式如下:</p><p> WaitForSingl
99、eObject(</p><p> HANDLE hEvent, //事件句柄</p><p> unsigned long mTimeOuts //超時設置</p><p><b> )</b></p><p><b> (4) 關閉串口</b></p><p>
100、 通信完畢調用CloseHandle() 函數關閉串口例如</p><p> CloseHandle(mHandle); //關閉mHandle為打開串口時返回的句柄</p><p> 6.4 單片機軟件設計</p><p> 我們知道影響數據轉輸產生錯誤的因素有:轉輸線分布參數上下位機間的波特率誤差現場干擾等。而針對近程小批量數據的通信,下位機的波特率誤差性
101、是影響可靠通信的最主要因素。所以在單片機軟件的設計時應重點考慮并設置好波特率。</p><p><b> 6.4.1波特率</b></p><p> ?。?)波特率誤差來源分析</p><p> ①單片機的振蕩電路是由晶體及電容C1 和C2 構成。晶振頻率主要由晶體的因有頻率決定,同時也與電容C1、C2及外界溫度有一定的關系。另外,晶體頻率
102、的標稱值與實際值也不可能完全一致。</p><p> ?、诓ㄌ芈首畲笤试S誤差分析</p><p> 在異步串行通信方式1中單片機以16倍波特率的采樣速率對接收數據(RXD)不斷采樣,一旦檢測到由1到0的負跳變,16分頻計數器立刻復位,使之滿度翻轉的時刻恰好與輸入位的邊沿對準。16分頻計數器把每個接收位的時間分為16 份,在中間三位即7 ,8 ,9 ,狀態(tài)時位檢測器對RXD 端的值采樣,并
103、以3取2的表決方式確定所接收的數據位。由此可見,當波特率的誤差使得在接收某位數據位時,采樣點離該位的中點半位間隔時將會對該位采樣兩次。即:欲使接收的第N位為正確位時,須滿足下式成立:</p><p> 所允許的波特率誤差N > 0.54</p><p> 故當所傳輸的一幀數據為10 位時,所允許的最大的波特率允許誤差為5 %對于其它常用的8位,9位,11位,一幀的串行傳輸,其最大
104、的波特率允許誤差分別為6.25%,5.56%, 和4.5%。</p><p> ③減小波特率誤差的措施</p><p> 我們知道使用離散度小的晶振是減小波特率誤差的關鍵。如果,晶振的離散度已超過所允許的范圍,此時不宜用其標稱值,可以采用測量其波特率的方法來得出實際的晶振波特率值。</p><p> ?。?)單片機軟件的實現</p><p&g
105、t; ?、僭O置通信方式和波特率的值例</p><p><b> ……………………</b></p><p><b> ……………………</b></p><p><b> ……………………</b></p><p> MOV SCON,#50H 初始化串口設為方式1</
106、p><p> MOV TMOD,#20H 利用定時器1為波特率發(fā)生器并設為模式2</p><p> MOV PCON,#XXH 設置SMOD值</p><p> MOV TH1,#XXH 設置定時器初始值</p><p> SETB TR1 啟動定時器1</p><p> …………………………</p>
107、<p> …………………………</p><p> …………………………</p><p> ?、诘却邮誔C機發(fā)來的信號幀并按通信協(xié)議作出相應響應。</p><p> 6.5 通信協(xié)議設計結論</p><p> 6.5.1通信可靠性分析</p><p> 通信的可靠性主要體現在所使用通信協(xié)議的可靠
108、性上,本通信協(xié)議的可靠性主要有兩點理論基礎:</p><p> (1)通過判斷幀頭起始字符來決定一幀的開始,這樣就避免了部分數據進入到內部數據處理之中。這個可能性在1/256, 通過停止位的判斷可將這個可能性再降低1/256。 另外通過幀類型字節(jié)的判斷可使之進一步降低。</p><p> (2)校驗字將整幀信號進行異或校驗則使誤收的可能很小。如果將此異或校驗改為CRC校驗則出錯的可能性
109、更是微乎其微了。本通信所用協(xié)議具有糾錯功能,這體現在當PC 發(fā)送或接收數據時,當所接收的應答信號出現失誤時,將重新發(fā)送或接收此幀數據,直至接收到了正確的應答,具體在程序中最多允許連續(xù)出錯三次,超過后則放棄通信。在實際應用中,應用本通信時傳輸距離只有幾米以內而且環(huán)境干擾比較小,從而從外部因素上進一步保證了通信的可靠性。</p><p> 6.5.2通信速度分析</p><p> 如果在不
110、考慮錯誤發(fā)生的情況下,PC 機每發(fā)送一幀數據時需要附加12 個字節(jié),其中8 個字節(jié)用于發(fā)送4 個字節(jié)用于應答PC 機。每接收一幀數據時,需要附加13 個字節(jié)其中5 個字節(jié)用于接收8 個字節(jié)用于應答。如:按每幀傳送32個字節(jié)計算的話,其發(fā)送和接收的效率為為忽略PC和PIC16F877A單片機的處理時間計算。發(fā)送數據速率、接收數據速率計算公式如下:</p><p> 發(fā)送數據速率:9600*32/44=6981bi
111、t/s</p><p> 接收數據速率:9600*32/45=6826bit/s</p><p> 這是理論上的速率,實際中還應包含PC和PIC16F877A單片機的處理信號幀,等待信號幀的時間。在本通信協(xié)議中,不會出現某信號幀已到達但PC或PIC16F877A單片機還未開始準備接收的現象。在實際應用中,因具體應用環(huán)境不同PC和PIC16F877A單片機處理信號幀的時間會有不同,所以具
112、體速率值依具體應用而變化。</p><p> 7 Protel99設計原理圖</p><p> ?。?)使用Protel進行電路板設計的第一步便是設計原理圖,原理圖決定了整個電路的基本功能,也是接下來生成網絡表和設計印刷電路板的基礎。</p><p> ?、?在Protel 99的初始界面下新建一個設計庫,該數據庫用來管理項目。 </p&g
113、t;<p> File-New-改文件名-改保存路徑-OK </p><p> ?、?進入設計庫文件中的文件夾Document。</p><p> ?、?在Document 文件夾中新建原理圖文件和印制板文件。</p><p> File-New-Schematic Document-Ok-改文件名</p><p>
114、File-New-PCB Document-Ok-改文件名</p><p> ?、?打開原理圖文件。</p><p> ?、?添加原理圖文件庫。</p><p> Design-Add/Remove Library- 瀏覽所需零件庫-Add-Ok</p><p> ?、?放置電路所需的各種元件,圖件,網絡標號等元器件。</p>
115、;<p> Design-Add/Remove Library- 瀏覽所需零件庫-Add-Ok</p><p> 從零件庫中調出元件 Place-part</p><p> ?、?對原圖元件進行布局,布線,構成一個完整的原理圖。</p><p> Place-part</p><p> ?、?編輯和調整。然后進
116、行輸出存檔。</p><p> 右鍵-Properies….Designation-Part-Footrint Save</p><p> ?、?打印或建立報表。</p><p> 圖7.1.1 protel設計的流程圖</p><p> ?。?)用PCB系統(tǒng)設計PCB板分以下7個步驟:</p><p> ?、?有
117、關參數的設置。這一步主要設定自動布參數、自動布線參數、板面參數等。</p><p> ?、?PCB板尺寸設計。在禁止布線層上,沿設計的PCB邊畫邊框線,即指定自動布局的范圍。這一步為自動布局打基礎。同時,在上層板面(即元器件面)沿禁止布線層的邊框圖線放置銅線,這是PCB板最后成型所必須的。</p><p> ?、?布局就是根據原理圖上元器件之間的連接關系,并考慮電磁兼容性以及元器件的安裝空
118、間和散熱等,總是將元器件放置在PCB電路板上適當的位置。布局的好壞直接影響PCB板的電氣性能和布局的功能,是PCB板設計過程中最費時、最繁瑣的。布局工作需要耐心、細致。盡管系統(tǒng)提供了自動布局的功能,但是一般而言都需要手工調整。</p><p> 手工布局,首先載入SCH生成的網絡表,通過手工移動元器件PCB板上的排列位置實現布局。移動元器件是最好打開網絡連接顯示,這樣就能觀察到相鄰元器件連線的疏 密。&
119、lt;/p><p> 自動布局,PCB系統(tǒng)環(huán)境提供自動布局功能完成元器件放置,但在細節(jié)處最好使用手工調整。布局時要求相互間連線多的元器件應該就近放置;相互間可能造成干擾的元器件應遠離:功率器件應考慮散熱空間。</p><p> ?、?自動布線。布線就是在元器件引腳之間放置覆銅連線的過程,這一過程可以通過手工完成,也可以自動進行。但是Protel99的PCB系統(tǒng)提供了強大的自動布線功能,建議使
120、用該功能自動布線。在進行自動布線之前,設計人員必須先設計好布線參數,定義布線規(guī)則。如果不適當,可能會導致自動布線失敗,即布線的成功率不高,所以這一 步要特別注意</p><p> ?、?啟動設計規(guī)則檢查DRC,這一步利用PCB提供的DRC功能對完成布線的PCB板進行檢查,這一步由軟件自動完成。檢查的結果輸出在報告文件*.rep中,PCB軟件將出錯處在PCB圖上顯示出來,為檢查、修改提供方便。</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)設計-----溫度監(jiān)控系統(tǒng)的設計
- 畢業(yè)設計----溫度監(jiān)控系統(tǒng)的設計
- 畢業(yè)設計---溫度監(jiān)控系統(tǒng)的設計
- 畢業(yè)設計--溫度監(jiān)控系統(tǒng)的設計
- 溫度監(jiān)控系統(tǒng)的設計畢業(yè)設計論文
- 畢業(yè)設計---電爐溫度微機監(jiān)控系統(tǒng)
- 基于zigbee的溫度監(jiān)控系統(tǒng)畢業(yè)設計
- 畢業(yè)設計--單片機溫度監(jiān)控系統(tǒng)設計報告
- 畢業(yè)設計----單片機溫度監(jiān)控系統(tǒng)設計報告
- 基于單片機的溫度監(jiān)控系統(tǒng)(畢業(yè)設計)
- 畢業(yè)設計--基于無線傳感網絡的溫度監(jiān)控系統(tǒng)設計
- 電力載波多點溫度監(jiān)控畢業(yè)設計
- 基于單片機的溫度監(jiān)控系統(tǒng)畢業(yè)設計
- 畢業(yè)設計---基于單片機的實時溫度監(jiān)控系統(tǒng)設計
- 基于組態(tài)的試驗機溫度監(jiān)控系統(tǒng)畢業(yè)設計
- 溫度測量系統(tǒng)畢業(yè)設計
- 畢業(yè)論文——溫度監(jiān)控系統(tǒng)的設計
- 畢業(yè)論文---溫度監(jiān)控系統(tǒng)的設計
- 基于單片機的多點無線溫度監(jiān)控系統(tǒng)設計-畢業(yè)設計
- 視頻監(jiān)控系統(tǒng)畢業(yè)設計
評論
0/150
提交評論