第1章 緒論
1.1空調(diào)的發(fā)展過程和現(xiàn)狀
空氣調(diào)節(jié)對人們生活起著重要的作用。傳統(tǒng)空調(diào)器具有“開一關(guān)”調(diào)節(jié)模式。不僅噪音和溫度波動大,而且開關(guān)時對空調(diào)壓縮機有很大的損害。隨著計算機技術(shù)、變頻技術(shù)、智能控制技術(shù)的發(fā)展。人們擺脫了傳統(tǒng)定頻定速空調(diào)器的調(diào)節(jié)模式。開發(fā)出性能更為優(yōu)良的變頻變速空調(diào)器。
世界空調(diào)的發(fā)展可分為四個階段。首先是后風扇時代。典型特征是,功能僅限制于制冷制熱,技術(shù)含量低;接下來是純空調(diào)時代。這個時代的最顯著標志是空調(diào)成為真正意義的空氣調(diào)節(jié)器。不光調(diào)節(jié)空氣的溫度,對空氣的舒適度也進行調(diào)節(jié);隨著各國政府對空調(diào)的能耗標準提出要求?照{(diào)進入了超空調(diào)時代,其顯著特點是空調(diào)不僅僅是空調(diào)。還能滿足節(jié)能環(huán)保的要求;在以網(wǎng)絡(luò)信息代表的2l世紀。作為家電產(chǎn)品的空調(diào)器也必將隨之步入網(wǎng)絡(luò)信息時代。
1.2空調(diào)發(fā)展的趨勢
通過對空調(diào)發(fā)展的后風扇時代、純空調(diào)時代、超空調(diào)時代和即將來到的網(wǎng)絡(luò)信息時代回顧。以及幾種典型的主流空調(diào)技術(shù)和產(chǎn)品的分析,可以看出科技創(chuàng)新勢不可擋。高科技含量的空調(diào)產(chǎn)品必將取代市場上僅僅具備了制冷制熱功能的低技術(shù)含量空調(diào)。未來空調(diào)將要朝著“四化”.即健康化、節(jié)能環(huán);⑷诵曰、網(wǎng)絡(luò)化邁進。
健康化:健康的空氣舒適指數(shù)主要從空氣潔凈度、空調(diào)氣流的舒適度、空氣溫濕度控制技術(shù)三方面來衡量。各空調(diào)廠家針對這一需求,推出了多重空氣過濾技術(shù)、等離子技術(shù)、負離子技術(shù)、多元光觸煤技術(shù)、環(huán)繞立體送風技術(shù)、自動除濕加濕等技術(shù)。并運用到產(chǎn)品上。目前,日本的一些空調(diào)企業(yè)以及中國的海爾在這方面都處于世界領(lǐng)先水平。
節(jié)能環(huán);簭氖澜绨l(fā)展趨勢看,節(jié)能是環(huán)保的第一重要因素。環(huán)保始終是各國所關(guān)注的問題。歐盟頒布了相關(guān)法規(guī),限制非環(huán)保產(chǎn)品進入,日本政府公布<節(jié)能法>,美國環(huán)保署公布了美國國家政府強行執(zhí)行的能耗標準。把無環(huán)保產(chǎn)品拒之門外也是遵循這一節(jié)能環(huán)保的大趨勢。中國國家技術(shù)監(jiān)督局節(jié)能認證委員會在2000年也首次頒布了中國節(jié)能認證。從空調(diào)產(chǎn)品節(jié)能技術(shù)的演變上,已經(jīng)實現(xiàn)了從最初的定頻空調(diào)到變頻空調(diào)的節(jié)能30%。隨著先進技術(shù)的不斷創(chuàng)新運用。2001年海爾又推出了具有高效數(shù)字直流變頻壓縮機、數(shù)字傳感器、數(shù)字直流電機的空調(diào)器世紀超人。將節(jié)能水平提升至5l%。創(chuàng)造了目前國內(nèi)外節(jié)能產(chǎn)品之最。
人性化:使用方便,人機互動是更高層次要求。由于傳統(tǒng)空調(diào)的功能簡單,各國空調(diào)廠商運用了多項人性化空調(diào)設(shè)計技術(shù).推出了具有多種視窗顯示(VFD點陣液晶、LED顯示)的空調(diào),使空調(diào)運行狀態(tài)一目了然。同時。為了滿足夜間使用空調(diào),在多個系列產(chǎn)品中具有夜光顯示功能的遙控器,背光功能,讓消費者在黑暗中能夠清晰可見地進行空調(diào)操作。具有語音聲控功能的空調(diào)等。具有人性化設(shè)計功能的空調(diào)必將成為未來空調(diào)的發(fā)展方向之一。
網(wǎng)絡(luò)化:網(wǎng)絡(luò)信息空調(diào)時代。網(wǎng)絡(luò)技術(shù)的發(fā)展必將為空調(diào)帶來一場全新的技術(shù)革命。傳統(tǒng)空調(diào)的概念將發(fā)生質(zhì)的改變。誰先掌握網(wǎng)絡(luò)技術(shù)在空調(diào)上的應(yīng)用,誰就會成為未來空調(diào)市場的引領(lǐng)者,空調(diào)網(wǎng)絡(luò)信息時代的到來成為不可逆轉(zhuǎn)的潮流。一些新型空調(diào)產(chǎn)品開始預(yù)留網(wǎng)絡(luò)接口,實現(xiàn)網(wǎng)絡(luò)開放。通過選配的網(wǎng)絡(luò)控制器可實現(xiàn)千里之外的網(wǎng)絡(luò)遙控。集中控制器可實現(xiàn)同時控制128臺空調(diào),為智能化小區(qū)物業(yè)管理提供便利。高技術(shù)、高附加值的特點把空調(diào)這種最初簡單的舒適品推向了一個全新的概念。成為人們在工作和生活中必不可少的人性化智能家電。
1.3空調(diào)控制系統(tǒng)的特點
空調(diào)控制器的任務(wù)是通過遙控器接收入的指令并根據(jù)房間的溫度、室內(nèi)熱交換器溫度、室外熱交換器溫度、壓縮機的狀態(tài)等來控制空調(diào)器的運行過程。具體地說,就是控制壓縮機、室外風扇、換向閥、室內(nèi)風扇、室內(nèi)風向電機, 并將設(shè)定溫度和房間實際溫度用發(fā)光二極管指示出來。另外,系統(tǒng)軟件中有過流檢測以保護壓縮機,其狀態(tài)也可通過發(fā)光二極管指示。
空調(diào)系統(tǒng)中的控制對象多屬于熱工對象, 從控制的角度分析具有以下特點:
(1)多干擾性
例如:通過窗戶進入的太陽輻射熱是時間的函數(shù),也受氣象條件的影響;室外空氣溫度通過圍護結(jié)構(gòu)對室溫產(chǎn)生的影響;為了換氣所采用的新風,其溫度變化對室溫有直接的影響;此外室內(nèi)人員的變動, 照明、機電設(shè)備的啟停, 電加熱器電源電壓的波動以及熱水加熱器熱水壓力、溫度的變化, 均隨著建筑的構(gòu)造、用途的不同而異, 更與空調(diào)本身有關(guān)。如果不采用變頻調(diào)速技術(shù),那唯一的方法就是利用最大的耗能來換取理想的控制狀態(tài),這就會帶來干擾變動時控制的不理想以及能源浪費的問題。
(2)多工況性
空調(diào)系統(tǒng)中對空氣的處理過程具有很強的季節(jié)性,一年中,至少要分為冬季,過渡季和夏季。另外在同一天中, 夜晚和白天的空氣工況也不完全相同, 因此空調(diào)對空氣的處理過程也具有多變性。多工況性的特點就決定了空調(diào)的運行不能設(shè)定在某一不變的參數(shù),而這就要求空調(diào)的控制系統(tǒng)必須要靈活的動作來適應(yīng)變化的工況。
1.4空調(diào)控制系統(tǒng)概述
空調(diào)技術(shù)發(fā)展的歷史就是由如何滿足社會經(jīng)濟和人民生活對室內(nèi)環(huán)境不斷提高的要求。以及如何最大限度地節(jié)約能耗,開辟新能源利用的歷史。此外。空調(diào)技術(shù)的發(fā)展和各種相關(guān)科學(xué)技術(shù)的發(fā)展息息相關(guān),冶金、化工和各種材料工業(yè)提供的材料日新月異。機械工業(yè)制造出各式各樣的新型冷、熱源設(shè)備和五花八門的末端裝置.自動控制理論和技術(shù)的進步也改變著空調(diào)系統(tǒng)工作過程的控制與調(diào)節(jié)的方式與方法。深入開拓電子計算機在空調(diào)技術(shù)中的應(yīng)用。自覺地理解和運用系統(tǒng)思想和系統(tǒng)方法。不僅可以加速空調(diào)技術(shù)革新的進程。并能更有效地移植和利用其他學(xué)科和專業(yè)的新的研究成果。近年來,特別是計算機技術(shù)和數(shù)據(jù)通訊與網(wǎng)絡(luò)技術(shù)的結(jié)合開辟了一個信息化社會的新時代。信息技術(shù)快速的發(fā)展對科學(xué)技術(shù)及社會生活方式的巨大影響對空調(diào)技術(shù)不但是機遇。更是一種挑戰(zhàn)。
第2章 方案選擇及論證
2.1設(shè)計要求
控制系統(tǒng)要控制的是空氣溫度,是通過壓縮機的運行、停止控制的,實際上單片機直接控制的是壓縮機的工作狀態(tài)。該系統(tǒng)要實現(xiàn)以下功能:
(1)根據(jù)環(huán)境溫度控制壓縮機工作:控制參數(shù)是溫度,被控參數(shù)是壓縮機電路通、斷的工作狀態(tài)。
(2)設(shè)置希望的環(huán)境溫度值:由人手動按鍵控制。
(3)顯示設(shè)定的溫度值,顯示的精度為1°C。
(4)顯示傳感器檢測到的實際溫度值,顯示的精度為1°C。
(5)系統(tǒng)帶數(shù)據(jù)的斷電保護功能。
2.2方案選擇
2.2.1單片機的選擇機論證
單片機是整個系統(tǒng)的核心,單片機具有體積小、重量輕、價格便宜、功耗低、控制功能強及運算速度快等特點。按處理的字長分,現(xiàn)在的單片機主要分為8位與16位兩種類型,型號的選擇有兩種方案:
方案一:選擇Intel 的8位單片機80C51【6】
特點:工作電壓為5V;8位的CPU;CPU時鐘:小于24MHz,一般為6或12 MHz;4KB程序存儲器;128Bytes數(shù)據(jù)存儲器 ;最大可接64KB的外部程序存儲器;最大可接64KB的外部數(shù)據(jù)存儲器;21個專用寄存器;4組I/O口(P0、P1、P2、P3);2個16位的可編程定時/計數(shù)器(T0、T1);5個中斷源(INT0、INT1、T0、T1、RXD、TXD),2個優(yōu)先級;1組全雙工的串行通信口;具有邏輯操作位尋址功能。
方案二:選擇凌陽的16位單片機SPCE061A【7】
特點:16位μ’nSP 微處理器;工作電壓(CPU)VDD為3.0~3.6V,(I/O)VDDH為3.0~5.5V;CPU時鐘:0.32~49.152MHz;內(nèi)置2K字SRAM ;內(nèi)置32K字FLASH ;可編程音頻處理 ;內(nèi)置晶體振蕩器;系統(tǒng)處于備用狀態(tài)下(時鐘處于停止狀態(tài)),耗電僅為2uA/3.6V;2個16位可編程定時器/計數(shù)器(可自動預(yù)置初始計數(shù)值);2個10位DAC(數(shù)/模轉(zhuǎn)換)輸出通道;32位通用可編程輸入/輸出通道;14個中斷源可來自定時器A/B、時基、2個外部時鐘源輸入和鍵喚醒;具備觸鍵喚醒的功能;使用凌陽音頻編碼SACM_S480可以播放壓縮的語音資源;鎖相環(huán)PLL振蕩器提供系統(tǒng)時鐘信號;32768Hz實時時鐘;7通道10位電壓模/數(shù)轉(zhuǎn)換器(ADC)和單通道聲音模/數(shù)轉(zhuǎn)換器;聲音模/數(shù)轉(zhuǎn)換器輸入通道內(nèi)置麥克風放大器,并具有自動增益控制(AGC)功能;具備串行設(shè)備接口;具備低電壓復(fù)位功能和低電壓檢測功能;內(nèi)置在線仿真電路接口;具有WatchDog功能。
通過對兩種單片機的多方面比較,決定選用凌陽的16位單片機SPCE061A,因為SPCE061A單片機支持ISP下載,無需昂貴的編程器,只需要一根并口線,在幾秒鐘的時間就能完成程序的燒寫,而且單片機無需從電路板上取下,在線調(diào)試非常方面。并且SPCE061A單片機的處理速度快,支持用標準C語言編程,減少編寫代碼的難度,同時還具有強大處理的語音處理功能,為對空調(diào)進行語音控制做了保留。
2.2.2溫度傳感器的選擇及論證
方案一:熱敏電阻AD590
AD590是美國Analog Devices 公司生產(chǎn)的二端式集成溫度-電流傳感器,測溫范圍為-50到+150攝氏度,作為溫度傳感器,精度可達±0.5攝氏度。
由其測出的是電流,經(jīng)過AD芯片轉(zhuǎn)換成對應(yīng)的數(shù)字量,再計算出溫度,這需要比較多的外部元件支持,且硬件電路復(fù)雜,制作成本相對較高。
方案二:智能溫度傳感器DS18B20
DS18B20溫度傳感器是美國DALLAS半導(dǎo)體公司最新推出的一種改進型智能溫度傳感器,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)9~12位的數(shù)字值讀數(shù)方式。
DS18B20的性能特點如下:
一線制數(shù)字溫度傳感器;溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉(zhuǎn)換精度,測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數(shù)字量方式串行輸出;電壓范圍為3.0~5.5V,其工作電源既可在遠端引入,也可采用寄生電源方式產(chǎn)生;多個DS18B20可以并聯(lián)到一起,CPU只需一根數(shù)據(jù)線就能與諸多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路;無須外部器件;零待機功耗;負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作;用戶可定義的非易失性溫度報警設(shè)置;報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)。
通過對兩種溫度傳感器的比較,決定選用DS18B20作為本設(shè)計系統(tǒng)的溫度傳感器【8】【9】【10】。
2.2.3顯示電路的的選擇及論證
顯示電路的選擇方案主要有兩種:
方案一:LCD顯示
LCD顯示具有以下的特點:低壓微功耗、平板型結(jié)構(gòu)、被動顯示(無眩光,不刺激人眼,不會引起眼睛疲勞)、顯示信息量大、易于彩色化、壽命長等優(yōu)點,但是電路結(jié)構(gòu)比較復(fù)雜,成本較高。
方案二:LED顯示
LED顯示是由發(fā)光二極管排列組成的一顯示器件。它采用低電壓掃描驅(qū)動,具有:耗電少、使用壽命長、成本低、結(jié)構(gòu)和電路簡單、亮度高、故障少、視角大、可視距離遠等特點。
綜上所述,由于本設(shè)計中只需顯示四位的數(shù)字值,所以顯示電路可采用兩片的LED共陰極數(shù)碼顯示管LG5621AH 和LG5641AH 動態(tài)掃描的方式實現(xiàn)顯示。數(shù)碼管的驅(qū)動采用7硅NPN型達林頓管ULN2003A驅(qū)動芯片。
2.2.4 數(shù)據(jù)的斷電保護方案的選擇及論證
本設(shè)計要求單片機斷電后再次恢復(fù)工作時能夠記住上次用戶設(shè)定的溫度值,所以選擇斷電保護的方案就顯得比較重要了。該功能的實現(xiàn)可分別通過硬件和軟件的方法來實現(xiàn)。
方案一:附加外部的硬件電路
此方案又有兩種方案:一、加接不間斷電源,讓整個系統(tǒng)在掉電時繼續(xù)工作;二是采用備份電源,掉電后保護系統(tǒng)中全部或部分數(shù)據(jù)存儲單元的內(nèi)容。不管采用此方案中的哪種,都會帶來新的成本、額外的電路結(jié)構(gòu),同時也加大了整個系統(tǒng)的體積。
方案二:軟件編程實現(xiàn)
由于FLASH ROM既具有ROM掉電不丟失數(shù)據(jù)的特點,又有RAM隨機讀寫的特點。所以此方案是通過往單片機的FLASH ROM芯片中寫入必要保護的數(shù)據(jù),每次開機時再把該數(shù)據(jù)讀出,這樣即可實現(xiàn)斷電數(shù)據(jù)保護功能。該方案不需外加什么電路,僅需通過軟件編程的方法和SPCE061A單片機內(nèi)部自帶的flash存儲器即可實現(xiàn),而且該存儲器可擦寫數(shù)十萬次,性能可靠。
綜上所述,決定選用軟件編程的方案。
2.2.5壓縮機的的選擇及論證
壓縮機為制冷系統(tǒng)中的核心設(shè)備,只有通過它將電能轉(zhuǎn)換為機械功,把低溫低壓氣態(tài)制冷劑壓縮為高溫高壓氣體,才能保證制冷的循環(huán)進行【4】。
方案一:選擇活塞式壓縮機
活塞式壓縮機的工作是靠氣缸、氣閥和在氣缸中作往復(fù)運動的活塞所構(gòu)成的工作容積不斷變化來完成。活塞式壓縮機每個周期的工作即曲軸每旋轉(zhuǎn)一周所完成的工作,可分為吸氣、壓縮和排氣三個階段。曲軸旋轉(zhuǎn)一周,活塞往復(fù)一次,氣缸內(nèi)相繼實現(xiàn)進氣、壓縮、排氣的過程,即完成一個工作循環(huán)。
方案二:選擇離心式制冷壓縮機
離心式制冷壓縮機的工作原理與活塞式壓縮機有根本的區(qū)別,它不是利用汽缸容積減小的方式來提高汽體的壓力,而是依靠動能的變化來提高汽體的壓力。
離心式制冷壓縮機與活塞式制冷壓縮機相比較,具有下列優(yōu)點:
(1)單機制冷量大,在制冷量相同時它的體積小,占地面積少,重量較活塞式輕5~8倍。
(2)由于它沒有汽閥活塞環(huán)等易損部件,又沒有曲柄連桿機構(gòu),因而工作可靠、運轉(zhuǎn)平穩(wěn)、噪音小、操作簡單、維護費用低。
(3)工作輪和機殼之間沒有摩擦,無需潤滑。故制冷劑蒸汽與潤滑油不接觸,從而提高了蒸發(fā)器和冷凝器的傳熱性能。
(4)能經(jīng)濟方便的調(diào)節(jié)制冷量且調(diào)節(jié)的范圍較大。
綜上所述,決定選用離心式制冷壓縮機。
第3章 系統(tǒng)硬件設(shè)計
3.1系統(tǒng)硬件總體邏輯設(shè)計

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

圖3-2 SPCE061A的結(jié)構(gòu)
時鐘電路

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

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

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

圖3-6復(fù)位電路

當電源電壓低于2.2V時,系統(tǒng)會變得不穩(wěn)定且容易出錯。導(dǎo)致電源電壓過低的原因很多,如電壓的反跳、負載過重、電池電量不足⋯⋯。如果電源電壓低于2.2V時,會在4個時鐘周期之后產(chǎn)生一個復(fù)位信號,使系統(tǒng)復(fù)位。LVR時序如圖3-7所示。
圖3-7復(fù)位示意圖
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[7:0]:通過編程,可設(shè)置成喚醒管腳 IOA[6:0]:與ADC Line_In輸入共用 |
| | | |
| | | IOB10:通用異步串行數(shù)據(jù)發(fā)送管腳Tx |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | IOB1:串行接口數(shù)據(jù)信號SDA |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | 模擬電路(A/D,D/A和2V穩(wěn)壓源)VDD參考電壓 |
| | | 模擬電路(A/D,D/A和2V穩(wěn)壓源)GND參考電壓 |
RESET | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
3.2.3 IOA與IOB口的使用特點
SPCE061A有兩個16位的通用并行I/O口:A口和B口。這兩個端口的每一位都可通過編程單獨定義成輸入或輸出口。A口和B口均是位控制結(jié)構(gòu)的I/O端口,每一位都可以單獨用于數(shù)據(jù)輸入或輸出。每個獨立的位可通過以下3種控制向量來作設(shè)定:數(shù)據(jù)向量Data;屬性向量Attribution;方向控制向量Direction,每3個對應(yīng)的控制向量組合在一起,形成一個控制字,用來定義相對應(yīng)I/O端口位的輸入輸出狀態(tài)和方式。
A口的IOA0~IOA7作為輸入端口時,具有喚醒功能,即當輸入電平發(fā)生變化時,會觸發(fā)CPU中斷。B口除了具有常規(guī)的輸入/輸出端口功能外,還有一些特殊的功能。
3.2.4 SPCE061A單片機的最小系統(tǒng)
最小系統(tǒng)接線如圖3-9所示,在OSC0、OSC1端接上晶振及諧振電容,在鎖相環(huán)壓控振蕩器的阻容輸入VCP端接上相應(yīng)的電容電阻后即可工作。其它不用的電源端和地端接上0.1μF的去藕電容提高抗干擾能力。
圖3-9 SPCE061A的最小系統(tǒng)圖
3.3 DS18B20數(shù)字溫度傳感器
3.3.1 DS18B20簡介
DS18B20是DALLAS公司生產(chǎn)的一線制數(shù)字溫度傳感器;溫度測量范圍為-55℃~+125℃,可編程為9位~12位A/D轉(zhuǎn)換精度,測溫分辨率可達0.0625℃,被測溫度用符號擴展的16位數(shù)字量方式串行輸出;其工作電源既可在遠端引入,也可采用寄生電源方式產(chǎn)生;多個DS18B20可以并聯(lián)到一起,CPU只需一根數(shù)據(jù)線就能與諸多DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。以上特點使DS18B20非常適用于遠距離多點溫度檢測系統(tǒng)。
3.3.2 DS18B20 的內(nèi)部結(jié)構(gòu)
DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器TH和TL、配置寄存器。DS18B20的外形及管腳排列如圖3-10。

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

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

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

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

是否有鍵按下。
圖3-14按鍵與單片機的接口
3.6 LED顯示器的驅(qū)動

顯示采用2位共陰極數(shù)碼管LG5621AH 和四位的共陰極數(shù)碼管LG5641AH進行動態(tài)顯示。LG5621AH顯示管如圖3-16所示,在使用時,將a~dp接IOA8~IOA15,DIG0和DIG1分別接IOB12、IOB13。顯示出的溫度是DS18B20溫度傳感器檢測到的溫度值。
圖3-15 LG5621AH元件圖
圖中:a~dp為數(shù)碼管的段信號,G1、G2為2位數(shù)碼管的位信號。段信號高有效,位信號低有效。
LG5641AH顯示管如圖3-16所示,在使用時,將a~dp接IOA8~IOA15,DIG5

和DIG6分別接IOB8、IOB9。顯示出的溫度是用戶設(shè)定的空調(diào)工作溫度值。
圖3-16 LG5621AH 元件圖
圖中:a~dp為數(shù)碼管的段信號,d1、d2為時鐘冒號的段信號;G1~G4為4位數(shù)碼管的位信號,G5為時鐘冒號的位信號。段信號高有效,位信號低有效。

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

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

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

斷電保護程序:當單片機突然斷電時,把用戶設(shè)定的空調(diào)工作溫度值保存到單片機中的FLASH ROM存儲器中;再次上電時,把保存的空調(diào)工作溫度值讀出到RAM中。以文件名的形式細化表示各程序間的調(diào)用關(guān)系如圖4-1所示。
圖4-1軟件結(jié)構(gòu)圖
各個程序文件的功能如下【11】【12】:
main.c 主程序文件,實現(xiàn)系統(tǒng)的初始化,整個系統(tǒng)的運行控制,鍵值的處理和壓縮機處理,斷電保護等。
Dig.asm 數(shù)碼管顯示文件,包含顯示的端口初始化,顯存的刷新,數(shù)碼管的閃爍等。
Key.asm 按鍵函數(shù)文件,按鍵的初始化、掃描及獲取鍵值。
flash.asm 斷電保護函數(shù)文件,內(nèi)含對flash芯片進行讀、寫、擦除的用戶接口函數(shù) 。
ISR.asm 中斷服務(wù)函數(shù)文件,系統(tǒng)的顯示刷新、按鍵掃描、通道的選擇及壓縮機的啟動和關(guān)閉均通過中斷完成。
Ds18b20_driver.c DS18B20處理文件,DS18B20溫度傳感器的初始化、讀、寫操作。
4.2 主程序的設(shè)計
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(); // 數(shù)碼管顯示初始化
Sys_Initial(); // 初始化TimerB及IRQ2_TMB中斷
while(DS18B20_Initial(0) == 0); // 初始化DS18B20
LoadSD(); // 讀出預(yù)設(shè)的空調(diào)工作溫度
Tep[0] = g_Data[Temp_Alarm % 10]; // 個位數(shù)值,不帶小數(shù)點
Tep[1] = g_Data[Temp_Alarm / 10]; // 十位數(shù)值
DIG_Set(1,Tep[0]); // 顯示空調(diào)的工作溫度值
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); //按鍵處理函數(shù)
*P_Watchdog_Clear = 0x0001; //喂狗
}
}
4.3溫度檢測子程序
4.3.1 DS18B20的操作時序
初始化
首先我們必須對DS18B20芯片進行復(fù)位,復(fù)位就是由控制器(單片機)給DS18B20單總線至少480uS的低電平信號。當18B20接到此復(fù)位信號后則會在15~60uS后回發(fā)一個芯片的存在脈沖。在復(fù)位電平結(jié)束之后,控制器應(yīng)該將數(shù)據(jù)單總線拉高,以便于在15~60uS后接收存在脈沖,存在脈沖為一個60~240uS的低電平信號。至此,通信雙方已經(jīng)達成了基本的協(xié)議,接下來將會是控制器與DS18B20間的數(shù)據(jù)通信【13】【14】。時序如圖4-3所示。

圖4-3 DS18B20初始化時序圖
寫時序
寫時間隙分為寫“0”和寫“1”,時序如圖4-4所示。在寫數(shù)據(jù)時間隙的前15uS總線需要是被控制器拉置低電平,而后則將是芯片對總線數(shù)據(jù)的采樣時間,采樣時間在15~60uS,采樣時間內(nèi)如果控制器將總線拉高則表示寫“1”,如果控制器將總線拉低則表示寫“0”。每一位的發(fā)送都應(yīng)該有一個至少15uS的低電平起始位,隨后的數(shù)據(jù)“0”或“1”應(yīng)該在45uS內(nèi)完成。整個位的發(fā)送時間應(yīng)該保持在60~120uS,

否則不能保證通信的正常。
寫0時序 寫1時序
圖4-4 DS18B20寫時序圖
讀時序
讀時間隙時控制時的采樣時間應(yīng)該更加的精確才行,讀時間隙時也是必須先由主機產(chǎn)生至少1uS的低電平,表示讀時間的起始。隨后在總線被釋放后的15uS中DS18B20會發(fā)送內(nèi)部數(shù)據(jù)位,這時控制如果發(fā)現(xiàn)總線為高電平表示讀出“1”,如果總線為低電平則表示讀出數(shù)據(jù)“0”。每一位的讀取之前都由控制器加一個起始信號。如圖4-5所示。

圖4-5 DS18B20 讀時序圖
4.3.2 單片機對DS18B20的操作流程
1.初始化:單總線上的所有處理均從初始化開始
2.控制器發(fā)送ROM指令:總線主機檢測到DS18B20的存在便可以發(fā)出ROM操作指令。其主要目的是為了分辨一條總線上掛接的多個器件并作處理。ROM指令如表4-1。
3.控制器發(fā)送存儲器操作指令:在ROM指令發(fā)送給18B20之后,緊接著(不間斷)就是發(fā)送存儲器操作指令了。存儲器操作指令的功能是命令18B20做什么樣的工作,是芯片控制的關(guān)鍵。存儲器操作指令如表4-2。
4.執(zhí)行或數(shù)據(jù)讀寫:一個存儲器操作指令結(jié)束后則將進行指令執(zhí)行或數(shù)據(jù)的讀寫,這個操作要視存儲器操作指令而定。
表4-1 ROM 指令
表4-2 存儲器操作指令
| |
| |
| 復(fù)制內(nèi)部數(shù)據(jù)存儲器 |
| |
跳過ROM指令[CCH]
這條指令使芯片不對ROM編碼做出反應(yīng),在單總線的情況之下,為了節(jié)省時間則可以選用此指令。
溫度轉(zhuǎn)換指令[44H]
收到此指令后芯片將進行一次溫度轉(zhuǎn)換,將轉(zhuǎn)換的溫度值放入RAM的第1、2地址。此后由于芯片忙于溫度轉(zhuǎn)換處理,當控制器發(fā)一個讀時間隙時,總線上輸出“0”,當儲存工作完成時,總線將輸出“1”。在寄生工作方式時必須在發(fā)出此指令后立刻超用強上拉并至少保持500MS,來維持芯片工作。
讀內(nèi)部數(shù)據(jù)存儲器指令[BEH]
此指令將從RAM中讀數(shù)據(jù),讀地址從地址0開始,一直可以讀到地址9,完成整個RAM數(shù)據(jù)的讀出。芯片允許在讀過程中用復(fù)位信號中止讀取,即可以不讀后面不需要的字節(jié)以減少讀取時間。
5.把溫度值轉(zhuǎn)換成十進制:讀出當前的溫度數(shù)據(jù)需要執(zhí)行兩次工作周期,第一個周期為復(fù)位、跳過ROM指令、執(zhí)行溫度轉(zhuǎn)換存儲器操作指令、等待500uS溫度轉(zhuǎn)換時間。緊接著執(zhí)行第二個周期為復(fù)位、跳過ROM指令、執(zhí)行讀RAM的存儲器操作指令、讀數(shù)據(jù)(最多為9個字節(jié),中途可停止,只讀簡單溫度值則讀前2個字節(jié)即可)。溫度字節(jié)代表的十進制溫度值如表4-3所示,當控制器讀取了某個溫度值后可以根據(jù)表4-3算出十進制溫度值。
表4-3字節(jié)位與測量溫度值的關(guān)系
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) // 等待轉(zhuǎn)換結(jié)束
{
*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; // 轉(zhuǎn)換為實際溫度
F_18B20_RsuSystemCLK();
__asm("irq on");
return fTemp;
}
4.4 溫度設(shè)定子程序
4.4.1 按鍵消抖

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

圖4-8溫度設(shè)定的流程圖
溫度設(shè)定子程序:
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(); // 保存設(shè)定的溫度值到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 數(shù)據(jù)的斷電保護子程序
斷電的數(shù)據(jù)保護就是確保當單片機突然斷電時,能把用戶斷電前設(shè)定的空調(diào)工作溫度值保存到單片機中的FLASH ROM存儲器中;而在再次上電后,能把斷電前單片機保存的空調(diào)工作溫度值讀出到RAM中,空調(diào)繼續(xù)按上次設(shè)定的溫度工作,直到用戶再次設(shè)定工作溫度。由此可看出,斷電保護主要的工作就是對SPCE061A單片機的FLASH ROM進行擦除、寫和讀的操作。
SPCE061A具有32K字(32K×16位)閃存容量,這32K字的內(nèi)嵌閃存被劃分為128個頁,每個頁存儲容量為256個字。它們在CPU正常運行狀態(tài)下均可通過程序擦除或?qū)懭。全?2K字閃存均可在ICE工作方式下被寫入或被擦除。為了安全起見,該單片機不對用戶開放整體擦除功能。
用戶必須通過向P_Flash_Ctrl (寫) ($7555H)單元寫入0xAAAA,來啟用閃存的存取功能。然后,向P_Flash_Ctrl (寫) ($7555H)單元寫入0x5511,來擦除頁的內(nèi)容。寫入0x5533,對閃存寫入。這些指令不能被任何其它的操作打斷,包括中斷、ICE的單步跟蹤動作。這是因為閃存控制器必須保證閃存處于寫入狀態(tài)。如果其它的操作打亂了這個順序,閃存的狀態(tài)將發(fā)生改變,擦除頁和寫入的操作不能再繼續(xù)進行。
此外,為保證數(shù)據(jù)的正確寫入,用戶必須在寫入之前擦除頁的內(nèi)容。頁大小為0x100。第一頁地址范圍:0x8000~0x80FF,最后一頁的地址范圍:0xFF00~0xFFFF。0xFC00~0xFFFF范圍內(nèi)的地址由系統(tǒng)保留,用戶最好不要用本范圍內(nèi)的地址。
4.5.1讀存儲單元操作
在芯片上電后,閃存就處于讀取狀態(tài),讀取的操作與SRAM相同。
4.5.2擦除操作
在對閃存寫入數(shù)據(jù)前,必須對閃存進行擦除操作。由于閃存采用分頁的數(shù)組結(jié)構(gòu),使得各個存儲頁可以被獨立地擦除。當用戶向閃存控制接口發(fā)出頁擦除命令以后,只要向某個地址寫入任意的數(shù)據(jù),對應(yīng)到這個地址的的記憶頁就被擦除。要保證擦除操作的正確完成,必須考慮以下幾個參數(shù):
1. 該閃存的內(nèi)部分頁結(jié)構(gòu)。
2. 每個頁分區(qū)的擦除時間。
4.5.3寫入操作
閃存芯片的寫入操作是自動字節(jié)寫入, 既可以循序?qū)懭耄部芍付ǖ刂穼懭搿iW存的地址空間為0x8000—0xFFFF,閃存控制接口的地址為0x7555 。第一頁范圍是[0x8000—0x80FF],最后一頁范圍是[0xFF00—0xFFFF]。
1. 擦除一頁的流程是:先對命令用戶接口地址0x7555送出0xAAAA,然后再對命令用戶接口地址0x7555送出0x5511,再來對要擦除的記憶頁地址寫入任意數(shù)據(jù),約20ms即可完成擦除操作,之后就可以再進行其它操作。例如擦除第6頁[0x8500—0x85FF]流程如下:(1)0x7555 ←0xAAAA (2) 0x7555 ←0x5511(3) 0x85XX←0xXXXX (其中X為任意值)。
2. 寫入一個字的流程是:先對命令用戶接口地址0x7555送出0xAAAA,然后再對命令用戶接口地址0x7555送出0x5533,再來對要寫入字的地址寫入數(shù)據(jù),約40us即可完成寫入操作,之后就可以再進行其它操作。例如向0x8000記憶地址寫入0xffff流程如下:(1)0x7555←0xAAAA (2) 0x7555 ←0x5533 (3) 0x8000←0xFFFF 。
3. 連續(xù)寫入多個字的流程是:先對命令用戶接口地址0x7555送出0xAAAA,然后再對命令用戶接口地址0x7555送出0x5544,再給要連續(xù)寫入字的起始地址寫入字數(shù)據(jù),約40us即可完成1個字的寫入操作。再對命令用戶接口地址0x7555送出0x5544,再對后續(xù)要寫入的字地址寫入字數(shù)據(jù),等待40us,循環(huán)操作即可完成連續(xù)字的寫入。

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

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