摘要:通過UML語言對嵌入式系統(tǒng)建模,急準(zhǔn)確地完成了分析人員與用戶需形式化層次上的一致性,也為程序開發(fā)人員建立了清晰的程序結(jié)構(gòu)和行為準(zhǔn)則,大大縮短了系統(tǒng)開發(fā)周期,并使系統(tǒng)的升級和重用成為可能。本文通過一個用Atmel 89C52單片機(jī)實現(xiàn)簡單變頻調(diào)速器系統(tǒng),說明UML應(yīng)用與嵌入式系統(tǒng)的分析設(shè)計方法。
1、概述
隨著我國裝備制造業(yè)的發(fā)展,嵌入式系統(tǒng)已經(jīng)成為制造業(yè)的核心技術(shù)。它被廣泛地應(yīng)用到工業(yè)控制、仿真系統(tǒng)、醫(yī)療儀器、信息家電、通信設(shè)備等眾多領(lǐng)域。目前,圍繞嵌入式系統(tǒng)展開研究和開發(fā),已經(jīng)成為計算機(jī)軟硬件技術(shù)發(fā)展最活躍的方向之一。
嵌入式系統(tǒng)不同于通常純粹的軟件系統(tǒng)或硬件系統(tǒng),而是軟件與硬件通過在一起的,有些功能既可以用軟件實現(xiàn),也可以通過硬件實現(xiàn)。另外,嵌入式系統(tǒng)設(shè)計所面臨的挑戰(zhàn)不僅涉及到計算機(jī)軟件和硬件,也會涉及到許多非計算機(jī)工程中的問題,諸如機(jī)械尺寸問題、功耗問題和制造成本問題等。即使是計算機(jī)工程方面的問題,大部分系統(tǒng)在實時性、可靠性和多速率等問題方面也都有特別要求。
目前,實現(xiàn)嵌入式系統(tǒng)的硬件方法主要有:定制邏輯(ASIC)、現(xiàn)場可編程門陣列(FPGA)和嵌入式微處理器三種。在實際系統(tǒng)實施中,絕大多數(shù)系統(tǒng)是采用嵌入式微處理器方式,如單片機(jī)、單板機(jī)或嵌入式微處理器芯片等。這是因為用微處理器實現(xiàn)嵌入式系統(tǒng)是一種十分有效的方法,它使得在不同價位上設(shè)計不同特性的產(chǎn)品系列成為可能,并且能夠擴(kuò)充新特性以滿足飛速發(fā)展變化的市場需求。
2、嵌入式系統(tǒng)設(shè)計面臨的問題和解決辦法
過去嵌入式系統(tǒng)分析和設(shè)計方面的主要問題為:①分析設(shè)計沒有一個統(tǒng)一的標(biāo)準(zhǔn);②分析設(shè)計方法不統(tǒng)一;③從分析設(shè)計到制作和編程沒有一個始終一貫的工程化方法,使得產(chǎn)品形成的每一個過程人為因素影響十分嚴(yán)重;④分析設(shè)計的成果不能被開發(fā)類似項目或產(chǎn)品的重用。以上4個方面的問題成為多年來制約嵌入式系統(tǒng)發(fā)展的主要瓶頸,使得大部分從事嵌入式系統(tǒng)應(yīng)用開發(fā)的組織和團(tuán)體,基本上是采用小組甚至是作坊式的動作模式。這使得開發(fā)較復(fù)雜或大型系統(tǒng)的工作變得十分困難甚至無法進(jìn)行,或因為系統(tǒng)需求的不斷變化或小組成員的流動導(dǎo)致項目失敗。我們知道,人類之間要想達(dá)成對任何事件的交流,前提是實現(xiàn)對該事物形態(tài)(或表現(xiàn)形式)和行為的標(biāo)準(zhǔn)化,之后才可能實現(xiàn)對該事物形態(tài)(或表現(xiàn)形式)和行為的標(biāo)準(zhǔn)化,之后才可能實現(xiàn)對其的存儲、處理和交流。嵌入式系統(tǒng)制作過程產(chǎn)品以上4方面問題的主要原因是沒有一個對嵌入式系統(tǒng)需求、分析、設(shè)計、制作、測試和維護(hù)過程的結(jié)構(gòu)特征和行業(yè)特征統(tǒng)一的工程化描述方法。目前,面向?qū)ο蠹夹g(shù)正是建立在對真實世界抽象思維的基礎(chǔ)上,統(tǒng)一建模語言(UML)為這種思維提供了可視化工具,解決了以上難題。使用UML對嵌入式系統(tǒng)建模,不僅可以使系統(tǒng)分析設(shè)計實現(xiàn)標(biāo)準(zhǔn)化,而且完全可以實現(xiàn)系統(tǒng)分析、設(shè)計和制作、測試分別由不同的項目成員在統(tǒng)一、一貫的方式下完成,也使得系統(tǒng)分析和設(shè)計模型在相似系統(tǒng)中重用成為可能。
3、系統(tǒng)建模
面向?qū)ο蟮那度胧较到y(tǒng)建模同任何軟件密集型系統(tǒng)建模一樣,從系統(tǒng)中的類建模開始。為了解類的結(jié)構(gòu),首先對系統(tǒng)工作過程作一個總體陳述。無論是采用問題空間詞匯抽象方法還是采用用例(use case)驅(qū)動建模方法,目標(biāo)都是找到系統(tǒng)以類或?qū)ο笞鳛闃?gòu)造塊的類圖。如果采用用例驅(qū)動的系統(tǒng)分析方法,該內(nèi)容也可以用用例視圖加以模型規(guī)格說明,然后使其作為系統(tǒng)白盒測試依據(jù)。由于使用用例視圖做的規(guī)格說明篇幅比較大,本文僅用文字描述說明這部分內(nèi)容。
本文所例舉的系統(tǒng)為一小型變頻調(diào)速器系統(tǒng)。對任何一個三相交流電機(jī),在輸入單相交流電源的情況下,實現(xiàn)6Hz到[9Hz,50Hz]區(qū)間內(nèi)任一頻率的穩(wěn)步啟動運(yùn)轉(zhuǎn)。系統(tǒng)用戶界面包括2位數(shù)碼顯示器、一個運(yùn)行/停止指示器、電源開/關(guān)指示器、6個按鈕鍵盤和電源開關(guān)。2位顯示器用于顯示電機(jī)當(dāng)前正在運(yùn)轉(zhuǎn)的頻率,6個按鍵分別代表啟動、停機(jī)、正點(diǎn)動、反點(diǎn)動、頻率加和頻率減。啟動命令使電機(jī)從6Hz以每步0.2Hz的步長穩(wěn)步提升到當(dāng)前設(shè)置頻率上后在該頻率上穩(wěn)定運(yùn)轉(zhuǎn);正點(diǎn)動命令使電機(jī)穩(wěn)定在6Hz上正向運(yùn)轉(zhuǎn);反點(diǎn)動命令時,電機(jī)轉(zhuǎn)動頻率與正點(diǎn)動上同,但旋轉(zhuǎn)方向相反;頻率加命令在電機(jī)運(yùn)轉(zhuǎn)時使電機(jī)以1Hz/s的速率增加運(yùn)轉(zhuǎn)頻率和當(dāng)前預(yù)置頻率,在電機(jī)停止時僅改變預(yù)置頻率;頻率減命令與頻率加命令相反;停機(jī)命令則無論電機(jī)運(yùn)行在什么狀態(tài)下,都使電機(jī)停止運(yùn)轉(zhuǎn)。
如圖1所示。圖中有2個硬件類Button*和Light*,1個主動類Microcontrollor和3個一般類Convertor、Watchdog和Display。Button*類代表所有按鈕;Light*類代表2個發(fā)光數(shù)碼管和1個運(yùn)行指示燈;主動類Microcontrollor是系統(tǒng)主控模塊,完成所有對象的調(diào)度和管理;3個一般類為3個功能獨(dú)立的程序模塊。
[align=center][img=497,127]http://www.e-works.net.cn/images/127904195096718750.GIF[/img]
圖1 變頻調(diào)速系統(tǒng)類圖[/align]
圖2為系統(tǒng)實施圖。微處理器節(jié)點(diǎn)是系統(tǒng)的主控節(jié)點(diǎn),采用Atmel 89C52。其內(nèi)部8KB Flash ROM和128B RAM資源已能滿足系統(tǒng)需要,因此不再增加外部存儲器。與其它節(jié)點(diǎn)的連接完全通過其本身的串并接口就可完成。按鈕節(jié)點(diǎn)代表所有按鈕,在系統(tǒng)變化時也可以用鍵盤取代,本例為6個單獨(dú)機(jī)械按鈕。顯示節(jié)點(diǎn)代表系統(tǒng)顯示部分,本例為2個數(shù)碼管和1個表示電同運(yùn)行狀態(tài)的發(fā)光二極管。運(yùn)行監(jiān)控節(jié)點(diǎn)具有兩部分功能,其一是通過WatchDog技術(shù)監(jiān)視微處理器的運(yùn)行狀況,另一個是監(jiān)視變換器輸出的脈沖寬度。變換器邛樹熊設(shè)計為專用電路,通過微處理器并行口接受三相正弦脈沖,根據(jù)電機(jī)功率轉(zhuǎn)換成本相電機(jī)線圈所需要的脈沖電壓。三相電機(jī)節(jié)點(diǎn)不屬于嵌入式系統(tǒng)本身,但為了說明本嵌入式系統(tǒng)與控制對象關(guān)系而布置在同一實施圖中。
[align=center][img=500,125]http://www.e-works.net.cn/images/127904195276875000.GIF[/img]
圖2 變頻調(diào)速系統(tǒng)實施圖[/align] 圖3為系統(tǒng)有限狀態(tài)機(jī)行為模型。系統(tǒng)開機(jī)上電后,經(jīng)過初始化處理自動進(jìn)入到等待狀態(tài),在等待狀態(tài),Microcontrollor對象根據(jù)用戶鍵盤按鈕命令,調(diào)度相應(yīng)的操作對象。當(dāng)用戶發(fā)出正或反點(diǎn)動命令時,系統(tǒng)進(jìn)入點(diǎn)動運(yùn)行態(tài),此時Convertor對象輸出6Hz正或反相序三相脈沖。當(dāng)用戶松開正或反點(diǎn)動按鈕時,系統(tǒng)返回等待狀態(tài)。在系統(tǒng)預(yù)置頻率設(shè)定正確的情況下,用戶按啟動按鈕時,系統(tǒng)先進(jìn)入到啟動運(yùn)行態(tài)。在此狀態(tài)時系統(tǒng)從6Hz開始按每步0.2Hz的步長穩(wěn)步增加電機(jī)運(yùn)轉(zhuǎn)頻率,直到達(dá)到預(yù)置頻率時進(jìn)入到穩(wěn)定運(yùn)行態(tài)。在穩(wěn)定運(yùn)行態(tài)用戶可以改變預(yù)置頻率,步長為1Hz。每次預(yù)置頻率的改變事件,都會產(chǎn)生從穩(wěn)定運(yùn)行態(tài)到啟動運(yùn)行態(tài)的交替變動。當(dāng)系統(tǒng)運(yùn)行出現(xiàn)故障時,進(jìn)入到故障處理狀態(tài)處理,完成后自動返回到等待狀態(tài)。
[align=center][img=500,250]http://www.e-works.net.cn/images/127904195474687500.GIF[/img]
圖3 變頻調(diào)速系統(tǒng)狀態(tài)圖[/align]
4、系統(tǒng)實現(xiàn)
4.1 數(shù)據(jù)處理
由于本文例舉的系統(tǒng)為一小型變頻調(diào)速嵌入式系統(tǒng),所有三相正弦波形的PWM脈沖都由Atmel 89C52的P1.0~P1.5端口輸出。當(dāng)把任何頻率正弦波形分解成N等分時(N為6的整數(shù)倍),則要用N個等幅而不等寬的矩形脈沖來等效,每個脈沖區(qū)間如圖4。每個頻率正弦波劃分為6個相序,每個相序為60°。每個相序分為N/6個區(qū)間,每區(qū)間分為7個小區(qū)間。每個區(qū)間采用中心對稱脈沖波形,因此在每個小脈沖邊沿只有一相功率驅(qū)動開關(guān)換相而使驅(qū)動電源電流平衡變化。在任何一相換相時,由軟件自動加死區(qū)保護(hù)(死區(qū)時間一相上下臂開關(guān)同時關(guān)閉,如圖4中豎雙線間部分),以免功率驅(qū)動開關(guān)在換相瞬間上下臂同時導(dǎo)通而損壞元件。
[align=center][img=500,267]http://www.e-works.net.cn/images/127904195634218750.GIF[/img]
圖4 三相正弦波行的一個小區(qū)間[/align]
雖然對于不同頻率每個相序內(nèi)脈沖區(qū)間數(shù)和占空比有所不同,但輸出的波形卻是相同的。又因為每個區(qū)間的7個小區(qū)間波形是中心對稱的,因此在輸出最后3個小波形時,只要把前3個小波形的占空時間和輸出波形數(shù)據(jù)倒讀并輸出就可以完成。另外,每個脈沖區(qū)間僅需要4個占空定時T區(qū)間,t2,t3,t4(見下節(jié)說明),并且每個相序僅需要4個脈沖波形數(shù)據(jù)就可以了。三相正弦波區(qū)間數(shù)據(jù)關(guān)系如表1。
[align=center]表1 三相正弦波區(qū)間數(shù)據(jù)關(guān)系
[img=500,184]http://www.e-works.net.cn/images/127904195825156250.gif[/img][/align]
4.2 系統(tǒng)資源配置
當(dāng)系統(tǒng)的分析與設(shè)計采用面向?qū)ο蠓椒〞r,并不意味著所使用的編程語言也一定是面向?qū)ο蟮?。事實上,這種分析設(shè)計方法的具體實現(xiàn)可以使用任何編程語言(如匯編語言或C語言);但是,在程序設(shè)計上要盡可能地使用面向?qū)ο蟮乃枷耄珞w現(xiàn)程序結(jié)構(gòu)方面的封裝性、消息傳遞等。這種才會使程序結(jié)構(gòu)清晰,便于應(yīng)付隨著需求變化而產(chǎn)生的不斷更新和系統(tǒng)維護(hù)。
在實現(xiàn)本系統(tǒng)時,系統(tǒng)最重要的資源是程序存儲器和定時器。由于采用了上小節(jié)所討論的數(shù)據(jù)處理技術(shù),大大壓縮了數(shù)據(jù)空間。在實現(xiàn)時,把6Hz~50Hz頻率空間劃分成7個大的區(qū)段,使每個區(qū)間的脈沖周期在900μs左右,區(qū)間周期定時使用單片機(jī)內(nèi)部的T2定時器的常數(shù)自動重裝入方式。由于區(qū)間周期與輸出頻率關(guān)系是確定的(T區(qū)間=1/Nf頻率),片內(nèi)T0定時器用于區(qū)間內(nèi)小區(qū)間t2、t3、t4定時,而t1定時由t1=T區(qū)間-2×t2-2×t3-t4計算得到。T1定時器用于監(jiān)視系統(tǒng)輸出的脈沖寬度,當(dāng)P1口任何一端輸出脈沖寬度超過1000μs時,系統(tǒng)通過中斷進(jìn)入故障處理狀態(tài)。另外,系統(tǒng)還設(shè)一WatchDog電路X5045,監(jiān)視系統(tǒng)程序運(yùn)行情況。當(dāng)程序運(yùn)行異常時,系統(tǒng)通過復(fù)位進(jìn)入到故障處理狀態(tài)。系統(tǒng)的顯示接口通過單片機(jī)串行接口實現(xiàn)。
5、討論
由于嵌入式系統(tǒng)的實現(xiàn)工具基本上都是非面向?qū)ο蟮?,因此如何使面向?qū)ο蟮姆治鲈O(shè)計與非面向?qū)ο蟮膶崿F(xiàn)工具之間的銜接就成為了一個值得探討的問題。另外,嵌入式系統(tǒng)一般都具有不同于大型軟件系統(tǒng)的具體要求,如實時性、可靠性、機(jī)械尺寸、能耗(如電池供電)要求等,因此在實現(xiàn)系統(tǒng)時還應(yīng)根據(jù)開發(fā)者的經(jīng)驗進(jìn)行特別處理。但是,采用面向?qū)ο蠼:笤賹崿F(xiàn)系統(tǒng)實現(xiàn)的方法,為系統(tǒng)建立了可視化的組織結(jié)構(gòu)和行業(yè)結(jié)構(gòu),實現(xiàn)了用戶需求的可視化表示,縮短了系統(tǒng)的開發(fā)周期,很好地適應(yīng)了用戶需求的變化。