欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 23997|回復: 3
收起左側

基于單片機的空調溫度控制設計論文

[復制鏈接]
ID:320011 發表于 2018-5-1 18:56 | 顯示全部樓層 |閱讀模式
基于單片機的空調溫度控制
摘  要
              隨著國民經濟的發展和人民生活水平的提高,空調已被廣泛應用于社會的各種場合。空調因具有節能、低噪、恒溫控制、全天候運轉、啟動低頻補償、快速達到設定溫度等性能,大大提高了其舒適性,得到越來越多的人們的喜愛。單片機和數字溫度傳感器技術的發展成熟,為空調控制提供了有效的技術保障,顯著提高了空調的智能化控制水平和安全性能。
空調系統的主要作用是維持室內的恒溫、恒濕。對于潔凈空調還要擔負起區域內空氣凈化的重任。空調系統主要是控制對制冷、預熱、加熱、加濕閥門的開度來調節溫度和濕度。因為空氣的升溫和降溫過程緩慢,要注意不能出現超調。另外對溫度、濕度、壓力等數值要進行監視和記錄,便于通過對長期曲線的分析,找到最佳運行方式。單片機的優越性能,用其設計空調控制系統,容易實現產品模塊化、智能化特點,控制參數采用開放式結構,便于與各種壓縮機聯結,從而能夠在最短的時間內根據不同廠家的要求進行產品的升級換代。可以這種方式,產品可以更快地推向市場,獲得時間上的競爭優勢。數字式溫度傳感器測量范圍廣、精度高、可靠性強、占用微處理器的端口少、實現多點組網測量功能,這為準確測量空調系統的多點溫度并傳值給單片機處理提供了可靠的保障。
本文介紹了以凌陽的SPCE061A單片機為控制核心的空調溫度控制系統的原理和設計方案。先經過手動設定需要的溫度值, 通過數字式溫度傳感器DS18B20采集溫度送到單片機,再通過單片機對壓縮機的運行和停止工作狀態的控制來實現空調對室內溫度的調節。
本文著重敘述了空調溫度控制系統的結構和原理。設計了空調溫度控制系統的硬件,軟件和各種邏輯電路。而且還介紹了系統的干擾源及抗干擾對策,使空調控制系統更加穩定。

目錄
摘  要
Abstract
第1章  緒論
1.1空調的發展過程和現狀
1.2空調發展的趨勢
1.3空調控制系統的特點
1.4空調控制系統概述
第2章  方案選擇及論證
2.1設計要求
2.2方案選擇
2.2.1單片機的選擇機論證
2.2.2溫度傳感器的選擇及論證
2.2.3顯示電路的的選擇及論證
2.2.4 數據的斷電保護方案的選擇及論證
2.2.5壓縮機的的選擇及論證
第3章  系統硬件設計
3.1系統硬件總體邏輯設計
3.2 SPCE061A單片機的介紹
3.2.1 SPCE061A單片機的內部結構
3.2.2 SPCE061A單片機的外部引腳及功能
3.2.3 IOA與IOB口的使用特點
3.2.4 SPCE061A單片機的最小系統
3.3 DS18B20數字溫度傳感器
3.3.1 DS18B20簡介
3.3.2 DS18B20 的內部結構
3.3.3 DS18B20 與單片機的接口設計
3.4 壓縮機控制電路設計
3.5 按鍵接口設計
3.6 LED顯示器的驅動
3.7單片機模塊的電源設計
3.8 空調電源
3.9 系統設計電路圖
第4章 軟件設計
4.1 軟件整體設計
4.2 主程序的設計
4.2.1主程序流程圖
4.2.2主程序
4.3溫度檢測子程序
4.3.1 DS18B20的操作時序
4.3.2 單片機對DS18B20的操作流程
4.3.3 溫度檢測程序
4.4 溫度設定子程序
4.4.1 按鍵消抖
4.4.2 按鍵的設置和顯示方法
4.4.3 溫度設置子程序
4.5 數據的斷電保護子程序
4.5.1讀存儲單元操作
4.5.2擦除操作
4.5.3寫入操作
4.5.4數據的斷電保護程序
4.6 系統的干擾源及抗干擾對策
第5章 結論
參考文獻
謝  辭


第1章  緒論
1.1空調的發展過程和現狀
空氣調節對人們生活起著重要的作用。傳統空調器具有“開一關”調節模式。不僅噪音和溫度波動大,而且開關時對空調壓縮機有很大的損害。隨著計算機技術、變頻技術、智能控制技術的發展。人們擺脫了傳統定頻定速空調器的調節模式。開發出性能更為優良的變頻變速空調器。
世界空調的發展可分為四個階段。首先是后風扇時代。典型特征是,功能僅限制于制冷制熱,技術含量低;接下來是純空調時代。這個時代的最顯著標志是空調成為真正意義的空氣調節器。不光調節空氣的溫度,對空氣的舒適度也進行調節;隨著各國政府對空調的能耗標準提出要求。空調進入了超空調時代,其顯著特點是空調不僅僅是空調。還能滿足節能環保的要求;在以網絡信息代表的2l世紀。作為家電產品的空調器也必將隨之步入網絡信息時代。
1.2空調發展的趨勢
通過對空調發展的后風扇時代、純空調時代、超空調時代和即將來到的網絡信息時代回顧。以及幾種典型的主流空調技術和產品的分析,可以看出科技創新勢不可擋。高科技含量的空調產品必將取代市場上僅僅具備了制冷制熱功能的低技術含量空調。未來空調將要朝著“四化”.即健康化、節能環保化、人性化、網絡化邁進。
健康化:健康的空氣舒適指數主要從空氣潔凈度、空調氣流的舒適度、空氣溫濕度控制技術三方面來衡量。各空調廠家針對這一需求,推出了多重空氣過濾技術、等離子技術、負離子技術、多元光觸煤技術、環繞立體送風技術、自動除濕加濕等技術。并運用到產品上。目前,日本的一些空調企業以及中國的海爾在這方面都處于世界領先水平。
節能環保化:從世界發展趨勢看,節能是環保的第一重要因素。環保始終是各國所關注的問題。歐盟頒布了相關法規,限制非環保產品進入,日本政府公布<節能法>,美國環保署公布了美國國家政府強行執行的能耗標準。把無環保產品拒之門外也是遵循這一節能環保的大趨勢。中國國家技術監督局節能認證委員會在2000年也首次頒布了中國節能認證。從空調產品節能技術的演變上,已經實現了從最初的定頻空調到變頻空調的節能30%。隨著先進技術的不斷創新運用。2001年海爾又推出了具有高效數字直流變頻壓縮機、數字傳感器、數字直流電機的空調器世紀超人。將節能水平提升至5l%。創造了目前國內外節能產品之最。
人性化:使用方便,人機互動是更高層次要求。由于傳統空調的功能簡單,各國空調廠商運用了多項人性化空調設計技術.推出了具有多種視窗顯示(VFD點陣液晶、LED顯示)的空調,使空調運行狀態一目了然。同時。為了滿足夜間使用空調,在多個系列產品中具有夜光顯示功能的遙控器,背光功能,讓消費者在黑暗中能夠清晰可見地進行空調操作。具有語音聲控功能的空調等。具有人性化設計功能的空調必將成為未來空調的發展方向之一。
網絡化:網絡信息空調時代。網絡技術的發展必將為空調帶來一場全新的技術革命。傳統空調的概念將發生質的改變。誰先掌握網絡技術在空調上的應用,誰就會成為未來空調市場的引領者,空調網絡信息時代的到來成為不可逆轉的潮流。一些新型空調產品開始預留網絡接口,實現網絡開放。通過選配的網絡控制器可實現千里之外的網絡遙控。集中控制器可實現同時控制128臺空調,為智能化小區物業管理提供便利。高技術、高附加值的特點把空調這種最初簡單的舒適品推向了一個全新的概念。成為人們在工作和生活中必不可少的人性化智能家電。
1.3空調控制系統的特點
空調控制器的任務是通過遙控器接收入的指令并根據房間的溫度、室內熱交換器溫度、室外熱交換器溫度、壓縮機的狀態等來控制空調器的運行過程。具體地說,就是控制壓縮機、室外風扇、換向閥、室內風扇、室內風向電機,  并將設定溫度和房間實際溫度用發光二極管指示出來。另外,系統軟件中有過流檢測以保護壓縮機,其狀態也可通過發光二極管指示。
空調系統中的控制對象多屬于熱工對象, 從控制的角度分析具有以下特點:
(1)多干擾性
例如:通過窗戶進入的太陽輻射熱是時間的函數,也受氣象條件的影響;室外空氣溫度通過圍護結構對室溫產生的影響;為了換氣所采用的新風,其溫度變化對室溫有直接的影響;此外室內人員的變動, 照明、機電設備的啟停, 電加熱器電源電壓的波動以及熱水加熱器熱水壓力、溫度的變化, 均隨著建筑的構造、用途的不同而異, 更與空調本身有關。如果不采用變頻調速技術,那唯一的方法就是利用最大的耗能來換取理想的控制狀態,這就會帶來干擾變動時控制的不理想以及能源浪費的問題。
(2)多工況性
空調系統中對空氣的處理過程具有很強的季節性,一年中,至少要分為冬季,過渡季和夏季。另外在同一天中, 夜晚和白天的空氣工況也不完全相同, 因此空調對空氣的處理過程也具有多變性。多工況性的特點就決定了空調的運行不能設定在某一不變的參數,而這就要求空調的控制系統必須要靈活的動作來適應變化的工況。
1.4空調控制系統概述
空調技術發展的歷史就是由如何滿足社會經濟和人民生活對室內環境不斷提高的要求。以及如何最大限度地節約能耗,開辟新能源利用的歷史。此外。空調技術的發展和各種相關科學技術的發展息息相關,冶金、化工和各種材料工業提供的材料日新月異。機械工業制造出各式各樣的新型冷、熱源設備和五花八門的末端裝置.自動控制理論和技術的進步也改變著空調系統工作過程的控制與調節的方式與方法。深入開拓電子計算機在空調技術中的應用。自覺地理解和運用系統思想和系統方法。不僅可以加速空調技術革新的進程。并能更有效地移植和利用其他學科和專業的新的研究成果。近年來,特別是計算機技術和數據通訊與網絡技術的結合開辟了一個信息化社會的新時代。信息技術快速的發展對科學技術及社會生活方式的巨大影響對空調技術不但是機遇。更是一種挑戰。


第2章  方案選擇及論證
2.1設計要求
控制系統要控制的是空氣溫度,是通過壓縮機的運行、停止控制的,實際上單片機直接控制的是壓縮機的工作狀態。該系統要實現以下功能:
(1)根據環境溫度控制壓縮機工作:控制參數是溫度,被控參數是壓縮機電路通、斷的工作狀態。
(2)設置希望的環境溫度值:由人手動按鍵控制。
(3)顯示設定的溫度值,顯示的精度為1°C。
(4)顯示傳感器檢測到的實際溫度值,顯示的精度為1°C。
(5)系統帶數據的斷電保護功能。
2.2方案選擇
2.2.1單片機的選擇機論證
單片機是整個系統的核心,單片機具有體積小、重量輕、價格便宜、功耗低、控制功能強及運算速度快等特點。按處理的字長分,現在的單片機主要分為8位與16位兩種類型,型號的選擇有兩種方案:
方案一:選擇Intel 的8位單片機80C51【6】
特點:工作電壓為5V;8位的CPU;CPU時鐘:小于24MHz,一般為6或12 MHz;4KB程序存儲器;128Bytes數據存儲器 ;最大可接64KB的外部程序存儲器;最大可接64KB的外部數據存儲器;21個專用寄存器;4組I/O口(P0、P1、P2、P3);2個16位的可編程定時/計數器(T0、T1);5個中斷源(INT0、INT1、T0、T1、RXD、TXD),2個優先級;1組全雙工的串行通信口;具有邏輯操作位尋址功能。
方案二:選擇凌陽的16位單片機SPCE061A【7】
特點:16位μ’nSP 微處理器;工作電壓(CPU)VDD為3.0~3.6V,(I/O)VDDH為3.0~5.5V;CPU時鐘:0.32~49.152MHz;內置2K字SRAM ;內置32K字FLASH ;可編程音頻處理 ;內置晶體振蕩器;系統處于備用狀態下(時鐘處于停止狀態),耗電僅為2uA/3.6V;2個16位可編程定時器/計數器(可自動預置初始計數值);2個10位DAC(數/模轉換)輸出通道;32位通用可編程輸入/輸出通道;14個中斷源可來自定時器A/B、時基、2個外部時鐘源輸入和鍵喚醒;具備觸鍵喚醒的功能;使用凌陽音頻編碼SACM_S480可以播放壓縮的語音資源;鎖相環PLL振蕩器提供系統時鐘信號;32768Hz實時時鐘;7通道10位電壓模/數轉換器(ADC)和單通道聲音模/數轉換器;聲音模/數轉換器輸入通道內置麥克風放大器,并具有自動增益控制(AGC)功能;具備串行設備接口;具備低電壓復位功能和低電壓檢測功能;內置在線仿真電路接口;具有WatchDog功能。
通過對兩種單片機的多方面比較,決定選用凌陽的16位單片機SPCE061A,因為SPCE061A單片機支持ISP下載,無需昂貴的編程器,只需要一根并口線,在幾秒鐘的時間就能完成程序的燒寫,而且單片機無需從電路板上取下,在線調試非常方面。并且SPCE061A單片機的處理速度快,支持用標準C語言編程,減少編寫代碼的難度,同時還具有強大處理的語音處理功能,為對空調進行語音控制做了保留。
2.2.2溫度傳感器的選擇及論證
方案一:熱敏電阻AD590
AD590是美國Analog Devices 公司生產的二端式集成溫度-電流傳感器,測溫范圍為-50到+150攝氏度,作為溫度傳感器,精度可達±0.5攝氏度。
由其測出的是電流,經過AD芯片轉換成對應的數字量,再計算出溫度,這需要比較多的外部元件支持,且硬件電路復雜,制作成本相對較高。
方案二:智能溫度傳感器DS18B20
DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。
DS18B20的性能特點如下:
一線制數字溫度傳感器;溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉換精度,測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數字量方式串行輸出;電壓范圍為3.0~5.5V,其工作電源既可在遠端引入,也可采用寄生電源方式產生;多個DS18B20可以并聯到一起,CPU只需一根數據線就能與諸多DS18B20通信,占用微處理器的端口較少,可節省大量的引線和邏輯電路;無須外部器件;零待機功耗;負電壓特性,電源極性接反時,溫度計不會因發熱而燒毀,但不能正常工作;用戶可定義的非易失性溫度報警設置;報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)。
通過對兩種溫度傳感器的比較,決定選用DS18B20作為本設計系統的溫度傳感器【8】【9】【10】。
2.2.3顯示電路的的選擇及論證
顯示電路的選擇方案主要有兩種:
方案一:LCD顯示
LCD顯示具有以下的特點:低壓微功耗、平板型結構、被動顯示(無眩光,不刺激人眼,不會引起眼睛疲勞)、顯示信息量大、易于彩色化、壽命長等優點,但是電路結構比較復雜,成本較高。
方案二:LED顯示
LED顯示是由發光二極管排列組成的一顯示器件。它采用低電壓掃描驅動,具有:耗電少、使用壽命長、成本低、結構和電路簡單、亮度高、故障少、視角大、可視距離遠等特點。
綜上所述,由于本設計中只需顯示四位的數字值,所以顯示電路可采用兩片的LED共陰極數碼顯示管LG5621AH 和LG5641AH 動態掃描的方式實現顯示。數碼管的驅動采用7硅NPN型達林頓管ULN2003A驅動芯片。
2.2.4 數據的斷電保護方案的選擇及論證
本設計要求單片機斷電后再次恢復工作時能夠記住上次用戶設定的溫度值,所以選擇斷電保護的方案就顯得比較重要了。該功能的實現可分別通過硬件和軟件的方法來實現。
方案一:附加外部的硬件電路
此方案又有兩種方案:一、加接不間斷電源,讓整個系統在掉電時繼續工作;二是采用備份電源,掉電后保護系統中全部或部分數據存儲單元的內容。不管采用此方案中的哪種,都會帶來新的成本、額外的電路結構,同時也加大了整個系統的體積。
方案二:軟件編程實現
由于FLASH ROM既具有ROM掉電不丟失數據的特點,又有RAM隨機讀寫的特點。所以此方案是通過往單片機的FLASH ROM芯片中寫入必要保護的數據,每次開機時再把該數據讀出,這樣即可實現斷電數據保護功能。該方案不需外加什么電路,僅需通過軟件編程的方法和SPCE061A單片機內部自帶的flash存儲器即可實現,而且該存儲器可擦寫數十萬次,性能可靠。
綜上所述,決定選用軟件編程的方案。
2.2.5壓縮機的的選擇及論證
壓縮機為制冷系統中的核心設備,只有通過它將電能轉換為機械功,把低溫低壓氣態制冷劑壓縮為高溫高壓氣體,才能保證制冷的循環進行【4】。
方案一:選擇活塞式壓縮機
活塞式壓縮機的工作是靠氣缸、氣閥和在氣缸中作往復運動的活塞所構成的工作容積不斷變化來完成。活塞式壓縮機每個周期的工作即曲軸每旋轉一周所完成的工作,可分為吸氣、壓縮和排氣三個階段。曲軸旋轉一周,活塞往復一次,氣缸內相繼實現進氣、壓縮、排氣的過程,即完成一個工作循環。
方案二:選擇離心式制冷壓縮機
離心式制冷壓縮機的工作原理與活塞式壓縮機有根本的區別,它不是利用汽缸容積減小的方式來提高汽體的壓力,而是依靠動能的變化來提高汽體的壓力。
離心式制冷壓縮機與活塞式制冷壓縮機相比較,具有下列優點:
(1)單機制冷量大,在制冷量相同時它的體積小,占地面積少,重量較活塞式輕5~8倍。
(2)由于它沒有汽閥活塞環等易損部件,又沒有曲柄連桿機構,因而工作可靠、運轉平穩、噪音小、操作簡單、維護費用低。
(3)工作輪和機殼之間沒有摩擦,無需潤滑。故制冷劑蒸汽與潤滑油不接觸,從而提高了蒸發器和冷凝器的傳熱性能。
(4)能經濟方便的調節制冷量且調節的范圍較大。
綜上所述,決定選用離心式制冷壓縮機。

第3章  系統硬件設計
3.1系統硬件總體邏輯設計

根據上一章控制器所設計的功能,我們可以選擇經典的計算機控制系統,即由傳感器得到外界數據,計算機根據此數據判斷系統的控制模式及其他參數。由此得出系統的總體邏輯設計圖。如圖所示3-1所示。
       圖3-1 系統的總體邏輯設計圖
系統總體設計方案
(1)該制冷系統由SPCE061A單片機系統即可實現。電源由5v的干電池提供,采用內部時鐘電路。
(2)選用DS18B20數字式溫度傳感器。
(3)溫度設置信號由升溫和降溫兩個按鈕產生,以中斷方式工作。
(4)利用交流固態繼電器控制制冷壓縮機工作狀態。繼電器由IOA7驅動。
(5)四位顯示器溫度的共陰LED八段碼分別由IOB8、IOB9、IOB12、IOB13驅動。
3.2 SPCE061A單片機的介紹
3.2.1 SPCE061A單片機的內部結構
SPCE061A單片機的內部結構如圖3-2所示

                                                                                    圖3-2 SPCE061A的結構
時鐘電路

μ’nSP™的時鐘電路是采用晶體振蕩器電路。圖3-3為SPCE061A時鐘電路的接線圖。外接晶振采用32768Hz。推薦使用外接32768Hz晶振,因RC阻容振蕩的電路時鐘不如外接晶振準確。
圖3-3時鐘電路
鎖相環振蕩器

PLL鎖相環的作用是將系統提供的實時時鐘基頻(32768Hz)進行倍頻,調整至49.152MHz、40.96MHz、32.768MHz、24.576MHz或20.480MHz。系統預設的PLL振蕩頻率為24.576MHz。PLL的作用原理如圖3-4所示:
3-4 PLL鎖相環電路圖
              低電壓監測LVD (Low Voltage Detect)

              低電壓監測功能可以提供系統內電源電壓的使用情況。如果系統電壓Vcc低于用戶設定的低限電壓VLVD,P_LVD_Ctrl單元的第15位(LVD監測標志位)將被置為“1”;反之,當Vcc > VLVD時,該位被置為“0”。SPCE061A具有3級可編程低限電壓:2.4V、2.8V、和3.2V,通過對P_LVD_Ctrl單元編程來進行控制,參見圖3-5。假定VLVD=3.2V,當系統電壓Vcc低于3.2V時,P_LVD_Ctrl單元的第15位會被置為“1”。系統預設的低限電壓為2.4V。            
圖3-5低電壓監測電路
低電壓復位LVR (Low Voltage Reset)
通過某種方式,使單片機內存各寄存器的值變為初始的操作稱為復位(reset)。SPCE061A復位電路如圖3-6所示,在RESB端加上一個低電平就可令其復位。該電路具有手動和上電復位兩種功能。


圖3-6復位電路

當電源電壓低于2.2V時,系統會變得不穩定且容易出錯。導致電源電壓過低的原因很多,如電壓的反跳、負載過重、電池電量不足⋯⋯。如果電源電壓低于2.2V時,會在4個時鐘周期之后產生一個復位信號,使系統復位。LVR時序如圖3-7所示。
圖3-7復位示意圖
3.2.2 SPCE061A單片機的外部引腳及功能
SPCE061A有兩種封裝片,一種為84個引腳,PLCC84封裝形式,另一種為80個引腳,LQFP80封裝。本文用的是PLCC84封裝。在PLCC84封裝中,有15個空余引腳,用戶使用時這15個空余腳懸浮。如圖3-8所示。

圖3-8 SPCE061A引腳圖
SPCE061A的引腳功能如表3-1。
表3-1 SPCE061A的引腳功能
引腳名稱
引腳編號
類     型
描       述
IOA[15:8]
60--53
輸入輸出
IOA[15:8]雙向IO端口
IOA[7:0]
48--41
輸入輸出
IOA[7:0]:通過編程,可設置成喚醒管腳
IOA[6:0]:與ADC Line_In輸入共用
IOB[15:11]
64--68
輸入輸出
IOB[15:11] :雙向IO端口。
IOB10
76
輸入輸出
IOB10:通用異步串行數據發送管腳Tx
IOB9
77
輸入輸出
IOB9:TimerB PWD輸出BPWMO
I0B8
78
輸入輸出
I0B8:TimerA PWD輸出APWMO
IOB7
79
輸入輸出
IOB7:UART接收端 Rx
IOB6
80
輸入輸出
IOB6:雙向IO口
IOB5
81
輸入輸出
IOB5:外部中斷源EXT2的反饋
IOB4
1
輸入輸出
IOB4:外部中斷源EXT1的反饋
IOB3
2
輸入輸出
IOB3:外部中斷源EXT2
IOB2
3
輸入輸出
IOB2:外部中斷源EXT1
IOB1
4
輸入輸出
IOB1:串行接口數據信號SDA
IOB0
5
輸入輸出
IOB0:串行接口時鐘信號SDA
DAC1
21
輸出
DAC1:音頻輸出
DAC2
22
輸出
DAC2:音頻輸出
OSC32O
13
輸入
OSC32O:32768Hz晶體振蕩輸入
0SC32I
12
輸出
0SC32I:32768Hz晶體振蕩輸出
VCOIN
8
輸入
VCOIN:PLL的RC濾波器引腳
AGC
25
輸入
AGC的控制端
MICN
28
輸入
麥克風差動輸入(負極)
MICP
33
輸入
麥克風差動輸入(正極)
VREFZ
23
輸出
2.0V電壓輸出
MICOUT
27
輸出
麥克風第一級放大器輸出端
OPI
26
輸出
麥克風第一級放大器輸入端
VEXTREF
35
輸入
ADC Line_In 通道的最高參考電壓
VMIC
37
輸出
麥克風的電源供應端
VCM
34
輸出
AD參考電壓
VDD
7,15
輸入
邏輯電路的VDD參考電壓
VSS
9,19,38
輸入
邏輯電路與IO端口的GND參考電壓
VDDIO
51,52,75
輸入
IO端口的VDD參考電壓
VSSIO
49,50,62
輸入
IO端口的GND參考電壓
AVDD
36
輸入
模擬電路(A/D,D/A和2V穩壓源)VDD參考電壓
AVSS
24
輸入
模擬電路(A/D,D/A和2V穩壓源)GND參考電壓
RESET
6
輸入
系統復位
XSLEEP
63
輸出
睡眠狀態指示,進入睡眠時輸出高電平
XICE
16
輸入
激活ICE
XICECLK
17
輸入
ICE串行接口時鐘信號
XICESDA
18
輸入輸出
ICE串行接口數據信號
XTEST
14
輸入
測試時接高電平,正常使用時接地
PFUSE,PVIN
29,20
輸入
程序保密設定引腳
3.2.3 IOA與IOB口的使用特點
SPCE061A有兩個16位的通用并行I/O口:A口和B口。這兩個端口的每一位都可通過編程單獨定義成輸入或輸出口。A口和B口均是位控制結構的I/O端口,每一位都可以單獨用于數據輸入或輸出。每個獨立的位可通過以下3種控制向量來作設定:數據向量Data;屬性向量Attribution;方向控制向量Direction,每3個對應的控制向量組合在一起,形成一個控制字,用來定義相對應I/O端口位的輸入輸出狀態和方式。
A口的IOA0~IOA7作為輸入端口時,具有喚醒功能,即當輸入電平發生變化時,會觸發CPU中斷。B口除了具有常規的輸入/輸出端口功能外,還有一些特殊的功能。
3.2.4 SPCE061A單片機的最小系統
最小系統接線如圖3-9所示,在OSC0、OSC1端接上晶振及諧振電容,在鎖相環壓控振蕩器的阻容輸入VCP端接上相應的電容電阻后即可工作。其它不用的電源端和地端接上0.1μF的去藕電容提高抗干擾能力。

圖3-9 SPCE061A的最小系統圖
3.3 DS18B20數字溫度傳感器
3.3.1 DS18B20簡介
DS18B20是DALLAS公司生產的一線制數字溫度傳感器;溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉換精度,測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數字量方式串行輸出;其工作電源既可在遠端引入,也可采用寄生電源方式產生;多個DS18B20可以并聯到一起,CPU只需一根數據線就能與諸多DS18B20通信,占用微處理器的端口較少,可節省大量的引線和邏輯電路。以上特點使DS18B20非常適用于遠距離多點溫度檢測系統。
3.3.2 DS18B20 的內部結構
DS18B20內部結構主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發的溫度報警觸發器TH和TL、配置寄存器。DS18B20的外形及管腳排列如圖3-10。

圖3-10 DS18B20的外形及管腳排列
DS18B20引腳定義:
1 GND為電源地;
2 DQ為數字信號輸入/輸出端;
3 VDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
DS18B20的內部結構如圖3-11

圖3-11 DS18B20內部結構圖
64位光刻ROM:
每只18B20都有一個唯一的長達64位的的編碼。其前8位是單線系列編碼(DS18B20的編碼是19H),后面48位是芯片唯一的序列號,最后8位是以上56位的CRC碼(冗余校驗)。數據在出產時設置不由用戶更改。
8位CRC碼
48位產品序列號
8位系列碼
RAM數據暫存器
DS18B20的存儲器結構如表3-2。RAM 數據暫存器,用于內部計算和數據存取,數據在掉電后丟失,DS18B20共9個字節RAM,每個字節為8位。第一和第二個字節包含測得的溫度信息,第三和第四個字節是TH和TL的拷貝,是易失性的,每次上電復位時被刷新。下面兩個字節沒有使用,但是在讀回數據時,它們全部表現為邏輯1。第七和第八字節是計數寄存器,它們可以被用來獲得更高的溫度分辨力。還有一個第九字節,可以用讀暫存器命令讀出,這個字節是以上8個字節的CRC碼。

表3-2 DS18B20存儲器結構
序號
暫存器名稱
序號
暫存器名稱
0
溫度低字節
4、5
保留字節1、2
1
溫度高字節
6
計數器余值
2
TH/用戶字節1
7
計數器/℃
3
TL/用戶字節2
8
CRC


3.3.3 DS18B20 與單片機的接口設計
DS18B20與單片機的接口如圖3-12所示
圖3-12 DS18B20與單片機的接口
引腳說明:
   1 電源地,接GND
   2 數字信號輸入輸出,接單片機IOB0口,同時接一個4.7K電阻接VCC
   3 電源輸入,接VCC
   單總線接法:單總線即只有一根數據總線,系統中的數據交換、控制都由這根線完成。主機或從機通過一個漏極開路或三態端口連至數據線,以允許設備在不發送數據時能夠釋放總線,而讓其它設備使用總線。單總線通常要求外接一個約為4.7K的上拉電阻,這樣,當溫度傳感器開路或沒接(總線空閑)時,起到上拉作用,使之為高電平,使后續電路保護。
3.4 壓縮機控制電路設計

壓縮機控制電路比較簡單。由I/O口輸出信號,通過8050和8550組成反相驅動電路去控制繼電器,再由繼電器控制壓縮機的開停。壓縮機的開停由相關室內的溫度決定,每次開機之前必須檢測延時保護條件是否滿足,才能作出開機決策。如圖3-13所示。
圖3-13壓縮機控制電路
3.5 按鍵接口設計
按鍵與單片機的接口如圖3-14所示,由兩個按鍵構成獨立鍵盤,按鍵的一端接高電平,另一端分別接IOA0、IOA1、IOA2。當沒有按鍵按下時,IOA0口輸入為低電平,當有按鍵按下時,相應的端口輸入為高電平。利用中斷的方式,判斷
是否有鍵按下。
圖3-14按鍵與單片機的接口
3.6 LED顯示器的驅動

顯示采用2位共陰極數碼管LG5621AH 和四位的共陰極數碼管LG5641AH進行動態顯示。LG5621AH顯示管如圖3-16所示,在使用時,將a~dp接IOA8~IOA15,DIG0和DIG1分別接IOB12、IOB13。顯示出的溫度是DS18B20溫度傳感器檢測到的溫度值。
圖3-15 LG5621AH元件圖
圖中:a~dp為數碼管的段信號,G1、G2為2位數碼管的位信號。段信號高有效,位信號低有效。
LG5641AH顯示管如圖3-16所示,在使用時,將a~dp接IOA8~IOA15,DIG5
和DIG6分別接IOB8、IOB9。顯示出的溫度是用戶設定的空調工作溫度值。
圖3-16 LG5621AH 元件圖
圖中:a~dp為數碼管的段信號,d1、d2為時鐘冒號的段信號;G1~G4為4位數碼管的位信號,G5為時鐘冒號的位信號。段信號高有效,位信號低有效。

LED顯示器的驅動采用ULN2003A ,其內部為三極管陣列,其IN腳相當于三極管的B極,OUT腳相當于三極管的C極。若IN腳輸入高電平,對應的OUT腳接地;IN腳輸入低電平,對應的OUT腳截止輸出。ULN2003A元件圖如圖3-17所示。
圖3-17 ULN2003A元件圖
圖中:IN1~IN7為輸入信號,OUT1~OUT7為輸出信號。輸入信號高有效。
3.7單片機模塊的電源設計

由于本設計的所有小模塊都采用直流+5V供電,所以直接用5V直流電源供電,省去了復雜的電源變壓電路。單片機模塊的電源電路如圖3-18所示。
圖3-18單片機電源電路
S1是電源的開關,D1是電源指示燈,在開關按下時指示燈亮。P3是變壓器的插座,可直接接5V直流電。VD1是一個防反接的穩壓二極管,起到保護電路的作用。
3.8 空調電源
本系統采用空調變頻電源。該產品主要應用于家用空調系統。其基本原理如下:
1 低轉速起動。普通空調直接用于50Hz交流電源,因此起動電壓要求高(198V),當電壓偏低時無法工作。該變頻空調電源(下簡稱電源)可以自適應外界電壓,按照恒V/f原則,當V降低時,f亦降低,從而使起動轉矩基本不變,使其在轉速較低時亦可啟動、運轉,克服了低電壓情況下不能運轉的問題。
2 根據環境溫度,自適應調節轉速,節約電能效果明顯,有該電源的空調運行情況:開機時,根據電源電壓,選定起動頻率f0,逐步增頻,到fmax時,高速運轉一段時間,當房間溫度下降到設定溫度℃s時電源自動選擇最佳工作頻率fs維持房間溫度為℃s。而普通空調是通過通斷間隔來調整房間溫度,因此使房間溫度波動范圍大;由于頻繁的通斷,使能耗增加,空調壽命減少。
3 最新的“穩壓”概念。普通穩壓器通過調整電網電壓來滿足用戶要求,但對于線路較長的供電系統,升壓勢必增加線路電流,使輸入電壓進一步下降,從而影響該線路正常工作。本電源針對電網電壓的高低,自適應地選擇f0、fmax,使空調適應于電網電壓,同樣達到使空調正常運轉的目的,卻不增大線路的負載,不影響其它用戶的工作。當電網電壓太高時,該電源的SPWM算法自動降低電壓,維持正常工作。
4 該電源獨立成設備,既可滿足已安裝了空調的用戶,也可以和新空調配套銷售。性能指標:
1.工作電壓范圍:165VAC~300VAC;
2.節能效果:和同類無變頻電源的空調相比,節能達30~40%;3.噪聲:由于沒有頻繁起動的缺點,噪聲可比同類空調低15~25dB。
特點:1.適應電壓范圍寬;2.節能效果明顯;3.獨立分體結構,可獨立銷售,市場應用前景廣闊;4.可以降低原空調的噪聲,延長壓縮機的壽命。
3.9 系統設計電路圖
系統設計總電路圖如圖3-19所示。

3-19系統設計總電路
第4章 軟件設計
4.1 軟件整體設計
本系統的軟件設計主要包括以下部分:
主程序:把溫度檢測程序、溫度設定程序、啟動/停止壓縮機、斷電數據保護等子程序有機結合起來。
溫度檢測程序:單片機不斷地掃描DS18B20取得的溫度值,并轉換成相應的十進制值,并在兩位的數碼管上顯示。
溫度設定程序:單片機不斷地掃描按鍵,把用戶設定的預期溫度值讀出來,在數碼管上顯示。用戶可通過兩個按鍵設置預期溫度,并在兩位數碼管上顯示。

斷電保護程序:當單片機突然斷電時,把用戶設定的空調工作溫度值保存到單片機中的FLASH ROM存儲器中;再次上電時,把保存的空調工作溫度值讀出到RAM中。以文件名的形式細化表示各程序間的調用關系如圖4-1所示。
圖4-1軟件結構圖
各個程序文件的功能如下【11】【12】:
main.c 主程序文件,實現系統的初始化,整個系統的運行控制,鍵值的處理和壓縮機處理,斷電保護等。
Dig.asm 數碼管顯示文件,包含顯示的端口初始化,顯存的刷新,數碼管的閃爍等。
Key.asm 按鍵函數文件,按鍵的初始化、掃描及獲取鍵值。
flash.asm 斷電保護函數文件,內含對flash芯片進行讀、寫、擦除的用戶接口函數 。
ISR.asm 中斷服務函數文件,系統的顯示刷新、按鍵掃描、通道的選擇及壓縮機的啟動和關閉均通過中斷完成。
Ds18b20_driver.c DS18B20處理文件,DS18B20溫度傳感器的初始化、讀、寫操作。
4.2 主程序的設計
4.2.1主程序流程圖
主程序流程圖如圖4-2所示。


4.2.2主程序
主程序的代碼:
int main()
{
              unsigned int key;
              unsigned int uiChannel = 0;                            // 選中模組中的0通道,1通道不用
              float fTemp;                                                                                    // DS18B20讀出的溫度
              V_Alarm[0] = 30;                                                                      // 上限溫度30
              V_Alarm[1] = 10;                                                                      // 下限溫度10

              Key_Init();                                                                                    // 始化按鍵掃描程序
              DIG_Init();                                                                                    // 數碼管顯示初始化
              Sys_Initial();                                                                      // 初始化TimerB及IRQ2_TMB中斷
              while(DS18B20_Initial(0) == 0);                            // 初始化DS18B20
              LoadSD();                                                                                                               // 讀出預設的空調工作溫度
              Tep[0] = g_Data[Temp_Alarm % 10];                            // 個位數值,不帶小數點
              Tep[1] = g_Data[Temp_Alarm / 10];                            // 十位數值
              DIG_Set(1,Tep[0]);                                                                                   // 顯示空調的工作溫度值
              DIG_Set(2,Tep[1]);

              while(1)
              {
                            // 進行一次測溫并讀取測量溫度值
fTemp = DS18B20_ReadTemp(uiChannel);               
                            fTemp += 0.5;                                                                                                    // 對十分位四舍五入            
                            DIG_Set(3,g_Data[(int) fTemp%10]);                            //顯示實際的溫度
                            DIG_Set(4,g_Data[(int) fTemp/10]);

                            if(fTemp >=  Temp_Alarm)
                            {
                                          StartCompressor();                                                       // 溫度過高,啟動壓縮機
                            }
                            else
                            {
                                          StopCompressor();                                                                     // 溫度過低,停止壓縮機
                            }

                            key = Key_Get();                                                                                   //按鍵掃描
                            if (key != 0)
                                          Key_Process(key);                                                                     //按鍵處理函數

                            *P_Watchdog_Clear = 0x0001;                                                        //喂狗
              }
}
4.3溫度檢測子程序
4.3.1 DS18B20的操作時序
初始化
首先我們必須對DS18B20芯片進行復位,復位就是由控制器(單片機)給DS18B20單總線至少480uS的低電平信號。當18B20接到此復位信號后則會在15~60uS后回發一個芯片的存在脈沖。在復位電平結束之后,控制器應該將數據單總線拉高,以便于在15~60uS后接收存在脈沖,存在脈沖為一個60~240uS的低電平信號。至此,通信雙方已經達成了基本的協議,接下來將會是控制器與DS18B20間的數據通信【13】【14】。時序如圖4-3所示。

圖4-3 DS18B20初始化時序圖
寫時序
寫時間隙分為寫“0”和寫“1”,時序如圖4-4所示。在寫數據時間隙的前15uS總線需要是被控制器拉置低電平,而后則將是芯片對總線數據的采樣時間,采樣時間在15~60uS,采樣時間內如果控制器將總線拉高則表示寫“1”,如果控制器將總線拉低則表示寫“0”。每一位的發送都應該有一個至少15uS的低電平起始位,隨后的數據“0”或“1”應該在45uS內完成。整個位的發送時間應該保持在60~120uS,
否則不能保證通信的正常。
寫0時序                                寫1時序      
圖4-4 DS18B20寫時序圖
讀時序
讀時間隙時控制時的采樣時間應該更加的精確才行,讀時間隙時也是必須先由主機產生至少1uS的低電平,表示讀時間的起始。隨后在總線被釋放后的15uS中DS18B20會發送內部數據位,這時控制如果發現總線為高電平表示讀出“1”,如果總線為低電平則表示讀出數據“0”。每一位的讀取之前都由控制器加一個起始信號。如圖4-5所示。

圖4-5 DS18B20 讀時序圖
4.3.2 單片機對DS18B20的操作流程
1.初始化:單總線上的所有處理均從初始化開始
2.控制器發送ROM指令:總線主機檢測到DS18B20的存在便可以發出ROM操作指令。其主要目的是為了分辨一條總線上掛接的多個器件并作處理。ROM指令如表4-1。
3.控制器發送存儲器操作指令:在ROM指令發送給18B20之后,緊接著(不間斷)就是發送存儲器操作指令了。存儲器操作指令的功能是命令18B20做什么樣的工作,是芯片控制的關鍵。存儲器操作指令如表4-2。
4.執行或數據讀寫:一個存儲器操作指令結束后則將進行指令執行或數據的讀寫,這個操作要視存儲器操作指令而定。
表4-1 ROM 指令
33H
讀ROM
55H
匹配ROM
CCH
跳過ROM
F0H
搜索ROM
ECH
告警搜索

表4-2 存儲器操作指令
4EH
寫內部數據存儲器
BEH
讀內部數據存儲器
48H
復制內部數據存儲器
44H
溫度轉換指令

跳過ROM指令[CCH]
這條指令使芯片不對ROM編碼做出反應,在單總線的情況之下,為了節省時間則可以選用此指令。
溫度轉換指令[44H]
收到此指令后芯片將進行一次溫度轉換,將轉換的溫度值放入RAM的第1、2地址。此后由于芯片忙于溫度轉換處理,當控制器發一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。在寄生工作方式時必須在發出此指令后立刻超用強上拉并至少保持500MS,來維持芯片工作。
讀內部數據存儲器指令[BEH]
此指令將從RAM中讀數據,讀地址從地址0開始,一直可以讀到地址9,完成整個RAM數據的讀出。芯片允許在讀過程中用復位信號中止讀取,即可以不讀后面不需要的字節以減少讀取時間。
5.把溫度值轉換成十進制:讀出當前的溫度數據需要執行兩次工作周期,第一個周期為復位、跳過ROM指令、執行溫度轉換存儲器操作指令、等待500uS溫度轉換時間。緊接著執行第二個周期為復位、跳過ROM指令、執行讀RAM的存儲器操作指令、讀數據(最多為9個字節,中途可停止,只讀簡單溫度值則讀前2個字節即可)。溫度字節代表的十進制溫度值如表4-3所示,當控制器讀取了某個溫度值后可以根據表4-3算出十進制溫度值。
表4-3字節位與測量溫度值的關系
溫度測量值高字節
溫度測量值低字節
7-3位為符號位
64
32
16
8
4
2
1
0.5
0.25
0.125
0.0625
4.3.3 溫度檢測程序
溫度檢測程序的流程圖如圖4-6所示

圖4-6溫度檢測程序的流程圖
溫度檢測程序如下:
float DS18B20_ReadTemp(unsigned int uiChannel)
{
              int uiTemp=0;
              float fTemp=0.0;
              unsigned int Data[2];
              __asm("int off");
              F_18B20_SetSystemCLK();

              F_18B20_Reset(uiChannel);
              DS18B20_WriteByte(uiChannel,0xcc);                            // 不進行ROM匹配
              DS18B20_WriteByte(uiChannel,0x44);                            // 啟動一次溫度采樣
              while(F_18B20_Read_DQ(uiChannel)==0)              // 等待轉換結束
              {
                            *P_Watchdog_Clear = 0x0001;
              }
              F_18B20_Reset(uiChannel);
              DS18B20_WriteByte(uiChannel,0xcc);       // 不進行ROM匹配
              DS18B20_WriteByte(uiChannel,0xbe);       // 讀取ROM命令
              for(uiTemp=0;uiTemp<2;uiTemp++)
              {
                            Data[uiTemp] = DS18B20_ReadByte(uiChannel);
              }
              F_18B20_Reset(uiChannel);

              uiTemp = (Data[1]<<8)|Data[0];                                          // 取得溫度部分
              fTemp = (float)uiTemp;
              fTemp = fTemp/16;                                                                                    // 轉換為實際溫度
              F_18B20_RsuSystemCLK();
              __asm("irq on");
              return fTemp;
}
4.4 溫度設定子程序
4.4.1 按鍵消抖

通常的按鍵所用開關為機械彈性開關,由于機械觸點的彈性作用,一個按鍵開關在閉合時不會馬上穩定地接通,在斷開時也不會一下子斷開。因而在閉合及斷開的瞬間均伴隨有一連串的抖動,如圖4-7所示。抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms。這是一個很重要的時間參數,在很多場合都要用到。
圖4-7按鍵抖動示意圖
按鍵抖動會引起一次按鍵被誤讀多次,為確保CPU對鍵的一次閉合僅作一次處理,必須去除鍵抖動。在鍵閉合穩定時讀取鍵的狀態,并且必須判別到鍵釋放穩定后再作處理。
軟件消抖:如果按鍵較多,常用軟件方法去抖,即檢測出鍵閉合后執行一個延時程序,產生5ms~10ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態,如果仍保持閉合狀態電平,則確認為真正有鍵按下。當檢測到按鍵釋放后,也要給5ms~10ms的延時,待后沿抖動消失后才能轉入該鍵的處理程序。
4.4.2 按鍵的設置和顯示方法
設置兩個按鍵:key1、key2。key3保留。其中:
Key1:設置升溫,每按下一次key1,設置溫度的值增1,設置的上限值為30;
Key2:設置降溫,每按下一次key2,設置溫度的值減1,設置的下限值為10。
當有按鍵(key1或key2)按下時,只要設定的溫度值控制在10—30的范圍內,LED數碼管的最低兩位顯示出當前設置的溫度值。
4.4.3 溫度設置子程序
溫度設定的流程如圖4-8所示

圖4-8溫度設定的流程圖
溫度設定子程序:
void Key_Process(unsigned int key)
{
              key &= 0x0007;              //共3個按鍵,key1升溫,key2降溫,key3保留
              switch(key)
              {
                            case 1:                                                                                                                                           // 升溫
                                          Temp_Alarm++;
                                          if(Temp_Alarm <= 30)
                                          {            
                                                        Tep[0] = g_Data[Temp_Alarm % 10];                           // 個位
                                                        Tep[1] = g_Data[Temp_Alarm / 10];                           // 十位
                                                        DIG_Set(1,Tep[0]);                            //顯示個位
                                                        DIG_Set(2,Tep[1]);                            //顯示十位
                                                        SaveSD();                                                                     // 保存設定的溫度值到flash中
                                          }
                                          else
                                          {
                                                        Temp_Alarm--;
                                          }
                                          break;
                            case 2:                                                                                                                                           //降溫
                                          Temp_Alarm--;
                                          if(Temp_Alarm >= 10)
                                          {            
                                                        Tep[0] = g_Data[Temp_Alarm % 10];                           // 個位
                                                        Tep[1] = g_Data[Temp_Alarm / 10];                           // 十位
                                                        DIG_Set(1,Tep[0]);
                                                        DIG_Set(2,Tep[1]);
                                                        SaveSD();
                                          }
                                          else
                                          {
                                                        Temp_Alarm++;
                                          }                                                      
                                          break;
                            default :
                                          break;
              }
}
4.5 數據的斷電保護子程序
斷電的數據保護就是確保當單片機突然斷電時,能把用戶斷電前設定的空調工作溫度值保存到單片機中的FLASH ROM存儲器中;而在再次上電后,能把斷電前單片機保存的空調工作溫度值讀出到RAM中,空調繼續按上次設定的溫度工作,直到用戶再次設定工作溫度。由此可看出,斷電保護主要的工作就是對SPCE061A單片機的FLASH ROM進行擦除、寫和讀的操作。
SPCE061A具有32K字(32K×16位)閃存容量,這32K字的內嵌閃存被劃分為128個頁,每個頁存儲容量為256個字。它們在CPU正常運行狀態下均可通過程序擦除或寫入。全部32K字閃存均可在ICE工作方式下被寫入或被擦除。為了安全起見,該單片機不對用戶開放整體擦除功能。
用戶必須通過向P_Flash_Ctrl (寫) ($7555H)單元寫入0xAAAA,來啟用閃存的存取功能。然后,向P_Flash_Ctrl (寫) ($7555H)單元寫入0x5511,來擦除頁的內容。寫入0x5533,對閃存寫入。這些指令不能被任何其它的操作打斷,包括中斷、ICE的單步跟蹤動作。這是因為閃存控制器必須保證閃存處于寫入狀態。如果其它的操作打亂了這個順序,閃存的狀態將發生改變,擦除頁和寫入的操作不能再繼續進行。
此外,為保證數據的正確寫入,用戶必須在寫入之前擦除頁的內容。頁大小為0x100。第一頁地址范圍:0x8000~0x80FF,最后一頁的地址范圍:0xFF00~0xFFFF。0xFC00~0xFFFF范圍內的地址由系統保留,用戶最好不要用本范圍內的地址。
4.5.1讀存儲單元操作
在芯片上電后,閃存就處于讀取狀態,讀取的操作與SRAM相同。
4.5.2擦除操作
在對閃存寫入數據前,必須對閃存進行擦除操作。由于閃存采用分頁的數組結構,使得各個存儲頁可以被獨立地擦除。當用戶向閃存控制接口發出頁擦除命令以后,只要向某個地址寫入任意的數據,對應到這個地址的的記憶頁就被擦除。要保證擦除操作的正確完成,必須考慮以下幾個參數:
1. 該閃存的內部分頁結構。
2. 每個頁分區的擦除時間。
4.5.3寫入操作
閃存芯片的寫入操作是自動字節寫入, 既可以循序寫入,也可指定地址寫入。閃存的地址空間為0x8000—0xFFFF,閃存控制接口的地址為0x7555 。第一頁范圍是[0x8000—0x80FF],最后一頁范圍是[0xFF00—0xFFFF]。
1. 擦除一頁的流程是:先對命令用戶接口地址0x7555送出0xAAAA,然后再對命令用戶接口地址0x7555送出0x5511,再來對要擦除的記憶頁地址寫入任意數據,約20ms即可完成擦除操作,之后就可以再進行其它操作。例如擦除第6頁[0x8500—0x85FF]流程如下:(1)0x7555 ←0xAAAA (2) 0x7555 ←0x5511(3) 0x85XX←0xXXXX (其中X為任意值)。
2. 寫入一個字的流程是:先對命令用戶接口地址0x7555送出0xAAAA,然后再對命令用戶接口地址0x7555送出0x5533,再來對要寫入字的地址寫入數據,約40us即可完成寫入操作,之后就可以再進行其它操作。例如向0x8000記憶地址寫入0xffff流程如下:(1)0x7555←0xAAAA (2) 0x7555 ←0x5533 (3) 0x8000←0xFFFF 。
3. 連續寫入多個字的流程是:先對命令用戶接口地址0x7555送出0xAAAA,然后再對命令用戶接口地址0x7555送出0x5544,再給要連續寫入字的起始地址寫入字數據,約40us即可完成1個字的寫入操作。再對命令用戶接口地址0x7555送出0x5544,再對后續要寫入的字地址寫入字數據,等待40us,循環操作即可完成連續字的寫入。

整個擦寫的過程如圖4-9所示。            
圖4-9 FLASH ROM的擦寫流程
4.5.4數據的斷電保護程序
讀FLASH ROM的數據的程序如下:
void LoadSD()
{
              unsigned int BS_Flag;

              BS_Flag=*(unsigned int *)0xe000;                                          //讀存儲單元0xe000
              if(BS_Flag==0xffff)                            //沒有預設的溫度值(0xe000內容為0xffff)
              {
                            Temp_Alarm = 25;                            //首次預設的溫度是25°C
                            F_FlashErase(0xe000);              //擦除0xe000開始的flash整頁
                            F_FlashWrite1Word((int) 0xe000,Temp_Alarm);              //寫入數據25
              }
              else                                                                       //存在預設的溫度值(0xe000內容不為0xffff)
              {
                            Temp_Alarm = BS_Flag;                            //讀出數據                                       
              }            
}
寫數據到FLASH ROM的程序如下:
void SaveSD()
{
              F_FlashErase(0xe000);              //擦除0xe000開始的flash整頁
              F_FlashWrite1Word((int) 0xe000,Temp_Alarm);              //寫入數據
}
4.6 系統的干擾源及抗干擾對策
控制器的電氣干擾主要來自以下幾個方面:
1 電網的干擾:來自電網的干擾包括電網電壓波動持續噪聲及諧波的各種噪聲干擾。
2 電源的干擾:電源的干擾包含尖峰脈沖在電源設計中、元件選用不當或器件的不穩定都將出現電源干擾而使單片機的工作電壓不穩。
3 繼電器動作引起的干擾:繼電器動作尤其是多個繼電器同時開源的輸出產生一定的尖峰干擾。
各方面的干擾最終都可能引起控制器單片機的誤動作、程序彈飛或者進入非正常死循環,影響按制器的優良性能:為提高控制器的抗干擾能力和單片機的可靠性,采取了以下幾點措施:
1 硬件抗干擾方法:G采用電源線濾波器:由共模電感、電容和電阻構成的大源濾波器如圖4-10所示。Cxl、CX2用來衰減差模干擾.CYl.CY2用來衰減共模干擾:這種電源綏濾波器對以很好地濾除來自交流電源線的干擾,同時還可以防止開關電源的干擾傳人電網干擾其它設備。

圖4-10 電源線濾波器原理圖
(1)供電電源采用升關電源。采用開關電源可以最大程度地抗干擾.保證輸出電壓的穩定。目前普遍采用的是RCC或者LC3844、ToP9wUcL等專用芯片的開關電源。為保證電源輸出級電壓的可靠.可以再加“Π”型等濾波電路
(2)采用電壓監測電路。SPCE061A單片機本身帶有低電壓復位功能,可充分利用這一特性以達到抗干擾的目的。
2 軟件抗干擾方法
(1)采用Watchdog方法。在進入非正常循環時Watchdog就會出為溢出而對單片機復位,使系統恢復到正常狀態,從而起到了抗干擾的作用。
(2)加入冗余指令。在繼電器操作指令后加入若干條NOP指令以躲避電源尖峰干擾對單片機的影響。
(3)軟件濾波方法。也電源產生波動時,單片機內部集成的ADC對傳感器的采樣誤差也會較大,從而可能影響控制的正確性,因此需要對AD輸入進行濾波:可以采用簡單的多次采樣后求平均值的算法以得到正確的傳感器輸入值。
(4)軟件陷阱。在未用的中斷向量區和未使用的程序存儲區加入語句:UHF RESET.把彈飛程序重新引入正常程序,這也是一種有效辦法。

第5章 結論
本文設計并實現了用凌陽SPCE061單片機對空調控制系統中制冷壓縮機的控制。基于SPCE061A的16位特性、DSP功能以及快速的處理能力,使得該系統的數據采集和運算處理十分的方便簡單,同時因為SPCE061A內置看門狗和低電壓檢測/復位功能,使得該系統具有一定的穩定性和抗干擾能力,另外由于IDE支持標準的C語言函數庫,使得復雜的數學運算變得輕而易舉,大大減小了編程的難度。文中著重講解了空調的溫度控制系統中各部分硬件的結構、工作原理以及它們與單片機的接口方法,同時編寫程序以軟件的方法達到控制的目的,同時還設計了穩壓電源濾波電路,有效抑制在電源線上的傳導高頻干擾,電源濾波不僅能有效地防止環境地電磁干擾,而且能有效地抑制系統本身產生的干擾向外界傳遞,造成電磁環境污染,因此所以本系統的抗干擾性較好。該系統操作簡單,使用維護方便,通用性好,便于擴充。控制裝置體積小,性價比高。
在本次畢業設計中,我不但了解并掌握了單片機控制系統的理論知識,而且很好的把理論聯系了實際。期間也遇到了許多問題和困難,不過,在老師的悉心指導和同學的熱心幫助下慢慢解決了這些問題。通過本次畢業設計,不僅學習到新知識,而且培養了綜合運用專業知識進行分析和設計的能力。這為以后的工作積累下一筆寶貴的財富。

完整的Word格式文檔51黑下載地址:
基于單片機的空調溫度控制(無附錄版).doc (722.42 KB, 下載次數: 94)


回復

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
ID:434742 發表于 2018-12-23 20:22 | 顯示全部樓層
請問有仿真嗎?謝謝
回復

使用道具 舉報

ID:461297 發表于 2019-1-3 20:29 | 顯示全部樓層
附件有嗎
回復

使用道具 舉報

ID:357412 發表于 2019-5-23 21:21 | 顯示全部樓層
投幣看文件 樓主給力
回復

使用道具 舉報

7#
無效樓層,該帖已經被刪除
8#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表