基于PIC18F系列單片機(jī)的嵌入式系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
嵌入式系統(tǒng)是指以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、體積、成本、可靠性、功耗嚴(yán)格要求的專(zhuān)用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)是面向應(yīng)用的,系統(tǒng)的硬件選型和軟件開(kāi)發(fā)模式都必須根據(jù)具體的應(yīng)用確定。
永磁無(wú)刷直流電動(dòng)機(jī)是電機(jī)控制研究領(lǐng)域的熱點(diǎn)之一,這與其自身固有的技術(shù)優(yōu)勢(shì)密切相關(guān):以電子換相取代了有刷直流電動(dòng)機(jī)的機(jī)械換相。從根本上革除了普通有刷直流電動(dòng)機(jī)由于電刷換相帶來(lái)的火花、噪音、高故障率等一系列問(wèn)題,同時(shí)又使系統(tǒng)的性能能夠與普通有刷直流電動(dòng)機(jī)相媲美,因此得到了廣泛的應(yīng)用。永磁無(wú)刷直流電動(dòng)機(jī)的電子換相離不開(kāi)電機(jī)的轉(zhuǎn)子位置信號(hào),傳統(tǒng)的方法是采用霍爾器件或其他位置傳感器檢測(cè)位置信號(hào),這使得系統(tǒng)的維護(hù)和制造都不方便,并且由于傳感器的工作特性不穩(wěn)定,給系統(tǒng)的安全運(yùn)行帶來(lái)了一些隱患。因此,無(wú)位置傳感器方案引起了人們的極大興趣。
本文結(jié)合無(wú)位置傳感器永磁無(wú)刷直流電動(dòng)機(jī)控制系統(tǒng)的開(kāi)發(fā),以Microchip公司的PIC18F452單片機(jī)為主控器件,并采用嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II作為軟件開(kāi)發(fā)平臺(tái),詳細(xì)討論了嵌入式系統(tǒng)的開(kāi)發(fā)模式與流程。
2.系統(tǒng)硬件平臺(tái)設(shè)計(jì)
嵌入式系統(tǒng)設(shè)計(jì)的第一步是結(jié)合具體的應(yīng)用,綜合考慮系統(tǒng)對(duì)成本、性能、可擴(kuò)展性、開(kāi)發(fā)周期等各個(gè)方面的要求,確定系統(tǒng)的主控器件,并以之為核心搭建系統(tǒng)硬件平臺(tái)。
無(wú)位置傳感器永磁無(wú)刷直流電動(dòng)機(jī)控制系統(tǒng)的關(guān)鍵問(wèn)題是位置檢測(cè)。目前已經(jīng)有了很多位置檢測(cè)方案,其中,反電勢(shì)法由于簡(jiǎn)單實(shí)用而得以廣泛采用。反電勢(shì)法的原理是:基于電機(jī)的三相端電壓,通過(guò)硬件檢測(cè)電路或軟件算法得到三相反電勢(shì)過(guò)零信號(hào),然后用軟件移相得到換相時(shí)刻,并在換相時(shí)刻按換相邏輯完成換相,觸發(fā)逆變橋以合適的導(dǎo)通時(shí)序工作,從而保證了電機(jī)的正常運(yùn)行。
反電勢(shì)法的永磁無(wú)刷直流電動(dòng)機(jī)無(wú)位置傳感器控制對(duì)系統(tǒng)硬件提出了更高的要求:
① 三個(gè)外部中斷輸入引腳,便于捕捉三相反電勢(shì)過(guò)零信號(hào);
② 至少一個(gè)PWM模塊,實(shí)現(xiàn)電機(jī)的斬波調(diào)速;
③ 豐富的定時(shí)器資源,完成軟件移相、測(cè)速等功能;
④ 多通道的AD轉(zhuǎn)換模塊,能夠采樣速度給定及主電路的電流、電壓信號(hào);
⑤ 硬件乘法器,保證速度、電流調(diào)節(jié)器的快速性;
⑥ 足夠的程序和數(shù)據(jù)存儲(chǔ)器,便于系統(tǒng)擴(kuò)展;
⑦ 高速的系統(tǒng)工作頻率,保證系統(tǒng)的強(qiáng)實(shí)時(shí)性;
⑧ 豐富的通信模塊,便于系統(tǒng)與其他嵌入式系統(tǒng)的互連。
對(duì)于無(wú)位置傳感器永磁無(wú)刷直流電動(dòng)機(jī)控制系統(tǒng)的設(shè)計(jì),有很多專(zhuān)用芯片可供選用,但為了進(jìn)一步提高系統(tǒng)性能,增強(qiáng)設(shè)計(jì)的靈活性,多采用DSP或?qū)S脝纹瑱C(jī)等智能器件。但是,這樣在提高系統(tǒng)性能的同時(shí)卻增加了系統(tǒng)開(kāi)發(fā)成本。為了設(shè)計(jì)一個(gè)高性能、低成本的開(kāi)發(fā)平臺(tái),針對(duì)應(yīng)用對(duì)系統(tǒng)硬件的要求,考慮到PIC18F452單片機(jī)的高性?xún)r(jià)比,選用其作為主控器件。
PIC18F452是Microchip公司推出的一款增強(qiáng)型8位單片機(jī),采用精簡(jiǎn)指令集(RISC)的設(shè)計(jì),有兩級(jí)流水線(xiàn),最高運(yùn)行頻率可達(dá)到10MIPS,能夠滿(mǎn)足系統(tǒng)對(duì)實(shí)時(shí)性的要求;指令總線(xiàn)16位寬,數(shù)據(jù)總線(xiàn)8位寬;單片機(jī)內(nèi)部有32K字節(jié)的FLASH程序存儲(chǔ)器,1.5K字節(jié)的數(shù)據(jù)存儲(chǔ)器和256字節(jié)的EEPROM,便于系統(tǒng)的擴(kuò)展;自帶8×8硬件乘法器;中斷資源豐富,提供18個(gè)中斷源,兩個(gè)中斷優(yōu)先級(jí),并且中斷優(yōu)先級(jí)可配置。PIC18F452單片機(jī)配備了豐富的外圍模塊,極大地簡(jiǎn)化了單片機(jī)外圍電路的設(shè)計(jì)。同時(shí),Microchip公司為PIC18F系列單片機(jī)提供了功能強(qiáng)大的指令集,共77條指令,絕大部分指令為單字(2個(gè)字節(jié))存儲(chǔ),單周期執(zhí)行,應(yīng)用代碼的存儲(chǔ)壓縮率高,指令執(zhí)行效率高。
以PIC18F452為主控器件構(gòu)成的系統(tǒng)硬件框圖如圖1所示。
值得說(shuō)明的是:
① 系統(tǒng)中的換相邏輯由可編程邏輯器件完成,主要是為了提高系統(tǒng)的可靠性,從功能上講,完全可由單片機(jī)實(shí)現(xiàn);
② 電機(jī)的速度檢測(cè),可根據(jù)位置信號(hào)利用軟件計(jì)算得來(lái),故省略了速度傳感器;
③ 模擬輸入為電機(jī)的速度給定信號(hào)。
3.嵌入式系統(tǒng)軟件開(kāi)發(fā)模式
對(duì)于簡(jiǎn)單的應(yīng)用系統(tǒng),系統(tǒng)的軟件開(kāi)發(fā)模式通常如圖2所示,稱(chēng)為前后臺(tái)系統(tǒng)(也叫無(wú)限循環(huán)系統(tǒng))。
前后臺(tái)系統(tǒng)中,應(yīng)用程序就是一個(gè)無(wú)限循環(huán)。循環(huán)中調(diào)用函數(shù)完成相應(yīng)的操作,這些操作稱(chēng)為后臺(tái)任務(wù);中斷服務(wù)程序處理異步事件,這部分稱(chēng)為前臺(tái)行為。因?yàn)橹袛喾?wù)程序提供的信息一直要等到后臺(tái)程序運(yùn)行到該處理這個(gè)信息時(shí)才得到處理,所以最壞情況下的任務(wù)響應(yīng)時(shí)間等于整個(gè)循環(huán)的執(zhí)行時(shí)間。因?yàn)楹笈_(tái)循環(huán)的執(zhí)行周期不是常數(shù),所以基于前后臺(tái)模式的應(yīng)用軟件開(kāi)發(fā),雖然設(shè)計(jì)過(guò)程簡(jiǎn)單,但系統(tǒng)的實(shí)時(shí)性得不到保障。
為了提高系統(tǒng)的實(shí)時(shí)性,可以采用基于嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)的軟件開(kāi)發(fā)模式。RTOS分為兩類(lèi):非可剝奪型內(nèi)核和可剝奪型內(nèi)核,一般商用的都是可剝奪型內(nèi)核,所以本文只討論此類(lèi)RTOS,其內(nèi)核結(jié)構(gòu)如圖3所示。
RTOS將整個(gè)應(yīng)用細(xì)分為多個(gè)任務(wù),每個(gè)任務(wù)完成特定的功能,并被賦予一定的優(yōu)先級(jí),擁有自己的任務(wù)控制塊和??臻g。一般地,每個(gè)任務(wù)在程序結(jié)構(gòu)上都是一個(gè)無(wú)限循環(huán),它有多個(gè)狀態(tài)——休眠態(tài)、就緒態(tài)、運(yùn)行態(tài)、掛起態(tài)和中斷態(tài)等。系統(tǒng)內(nèi)核總是讓就緒態(tài)的高優(yōu)先級(jí)任務(wù)先運(yùn)行,中斷服務(wù)程序可搶占CPU,中斷服務(wù)程序完成時(shí),系統(tǒng)內(nèi)核讓此時(shí)就緒態(tài)中優(yōu)先級(jí)最高的任務(wù)運(yùn)行(不一定是被中斷的任務(wù))??梢?jiàn),基于RTOS的軟件開(kāi)發(fā)模式使系統(tǒng)的任務(wù)響應(yīng)時(shí)間得到了最優(yōu)化。更重要的是,這種開(kāi)發(fā)模式將以往面向功能的應(yīng)用開(kāi)發(fā)轉(zhuǎn)化為面相任務(wù)的應(yīng)用開(kāi)發(fā),簡(jiǎn)化了系統(tǒng)設(shè)計(jì)的邏輯結(jié)構(gòu);同時(shí),由于有了RTOS,屏蔽了應(yīng)用軟件對(duì)底層硬件的可見(jiàn)性,將以往軟件系統(tǒng)的兩層結(jié)構(gòu)轉(zhuǎn)化為三層結(jié)構(gòu)(如圖4所示),極大地方便了系統(tǒng)的軟件擴(kuò)展與硬件升級(jí)。
對(duì)于PIC18F系列單片機(jī),目前常用的嵌入式實(shí)時(shí)操作系統(tǒng)有:μC/OS-II、Salvo、CMX、PIC18OS等。它們都是可剝奪型的實(shí)時(shí)內(nèi)核,詳細(xì)的比較如表1所示。
結(jié)合本文的具體應(yīng)用,綜合考慮系統(tǒng)硬件資源及上述幾種實(shí)時(shí)操作系統(tǒng)的特點(diǎn),最終選用基于操作系統(tǒng)的軟件開(kāi)發(fā)模式,并選擇μC/OS-II作為系統(tǒng)軟件平臺(tái)。
4.基于μC/OS-II的應(yīng)用軟件開(kāi)發(fā)
μC/OS-II是一個(gè)可移植、可固化、可裁剪及可剝奪型的多任務(wù)實(shí)時(shí)內(nèi)核,應(yīng)用開(kāi)發(fā)時(shí)首先必須完成其在特定硬件上的移植。μC/OS-II在編寫(xiě)的過(guò)程中就充分考慮到了可移植性,它的絕大部分代碼都由ANSI C寫(xiě)成,與處理器相關(guān)的代碼集中在OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C這三個(gè)文件中,因此只要針對(duì)具體的硬件改寫(xiě)這些文件,就可以完成移植工作。
表1 適用于PIC18F系列單片機(jī)的幾種嵌入式實(shí)時(shí)操作系統(tǒng)
名稱(chēng) |
μC/OS-II |
Salvo |
CMX |
PIC18OS |
版權(quán) |
源碼公開(kāi)的免費(fèi)實(shí)時(shí)內(nèi)核 |
商用實(shí)時(shí)內(nèi)核 |
商用實(shí)時(shí)內(nèi)核 |
源碼公開(kāi)的免費(fèi)實(shí)時(shí)內(nèi)核 |
可靠性 |
可靠性高。通過(guò)了美國(guó)FAA認(rèn)證。 |
可靠性高。 |
可靠性高。 |
未測(cè)試。 |
內(nèi)核大小 |
可裁剪。內(nèi)核ROM占用量最少2K,RAM需求由具體應(yīng)用而定。 |
內(nèi)核小,可裁剪。RAM需求很小,一般每個(gè)任務(wù)需4~12bytes,每個(gè)事件需3~4bytes。 |
較大。 |
非常小。內(nèi)核ROM占用量小于1K,RAM最少需求約120bytes。 |
系統(tǒng)服務(wù) |
豐富。最多支持64個(gè)任務(wù)。支持信號(hào)量、事件標(biāo)志組、消息郵箱、消息隊(duì)列、時(shí)間管理、內(nèi)存管理等。 |
較豐富。 |
非常豐富。支持信號(hào)量、事件管理、消息郵箱、消息隊(duì)列、內(nèi)存管理、設(shè)備管理、TCP/IP協(xié)議棧等。 |
少。最多支持8個(gè)任務(wù),目前僅支持事件標(biāo)志,最多支持8個(gè)事件。 |
適用 硬件 平臺(tái) |
非常廣泛,已經(jīng)被移植到了40多種CPU上(包括PIC18F系列單片機(jī))。 |
較為廣泛,適用于8051系列單片機(jī)、Microchip的8位單片機(jī)、TI的2000系列DSP等。 |
非常廣泛,適用于多種型號(hào)的8位、16位、32位、64位處理器,支持大部分DSP。 |
目前僅支持Microchip公司的PIC18F系列單片機(jī)。 |
調(diào)試工具 |
較少 |
一般 |
非常豐富 |
少 |
備注 |
實(shí)際開(kāi)發(fā)過(guò)程中可針對(duì)具體硬件優(yōu)化內(nèi)核,從而進(jìn)一步減少內(nèi)核代碼,提高系統(tǒng)實(shí)時(shí)性。 |
有三個(gè)版本,Salvo Lite為免費(fèi)測(cè)試版,Salvo SE為標(biāo)準(zhǔn)版,Salvo PRO為增強(qiáng)版。 |
有兩個(gè)版本,CMX-RTX為完全版,CMX-TINY+為簡(jiǎn)化版本。 |
基于OSEK/VDX標(biāo)準(zhǔn),但目前僅實(shí)現(xiàn)了其Operating System部分。 |
移植成功之后,就可以開(kāi)始應(yīng)用程序的編寫(xiě)工作。RTOS將面向功能的應(yīng)用開(kāi)發(fā)轉(zhuǎn)化為了面相任務(wù)的應(yīng)用開(kāi)發(fā),因此軟件開(kāi)發(fā)的過(guò)程就是將應(yīng)用系統(tǒng)按照功能細(xì)分為多個(gè)任務(wù),然后實(shí)現(xiàn)每個(gè)任務(wù),并為任務(wù)確定合適的優(yōu)先級(jí);對(duì)于實(shí)時(shí)性要求高的操作,需要編寫(xiě)相關(guān)的中斷服務(wù)程序。
永磁無(wú)刷直流電動(dòng)機(jī)正常運(yùn)行的基本條件是:在最佳換相時(shí)刻按最佳換相邏輯換相。這個(gè)過(guò)程對(duì)實(shí)時(shí)性要求很高,所以由中斷服務(wù)程序完成。反電勢(shì)過(guò)零時(shí),程序進(jìn)入反電勢(shì)過(guò)零中斷服務(wù)程序,該中斷服務(wù)程序根據(jù)當(dāng)前的電機(jī)速度設(shè)定軟件移相定時(shí)器的溢出值;當(dāng)軟件移相定時(shí)器溢出中斷時(shí),程序進(jìn)入移相定時(shí)器中斷服務(wù)程序,顯然,此時(shí)即最佳換相時(shí)刻。因此,在移相定時(shí)器中斷服務(wù)程序中按最佳換相邏輯完成換相,就能保證電機(jī)的正常運(yùn)行。此外,對(duì)于過(guò)流、過(guò)壓、欠壓等緊急故障的處理也必須由相應(yīng)的中斷服務(wù)程序完成。系統(tǒng)還要完成的功能有:定時(shí)采樣速度給定,并將采樣結(jié)果經(jīng)過(guò)調(diào)節(jié)器轉(zhuǎn)化為PWM波的占空比;響應(yīng)鍵盤(pán)輸入;顯示電機(jī)的速度、PWM波占空比等系統(tǒng)狀態(tài)信息;與上位PC機(jī)串口通信;系統(tǒng)非緊急故障的處理等等。這些功能對(duì)實(shí)時(shí)性的要求不是很高,故由任務(wù)級(jí)完成。應(yīng)用系統(tǒng)的任務(wù)如表2所示。
表2 應(yīng)用系統(tǒng)任務(wù)列表
任務(wù)名稱(chēng) |
TaskAD |
TaskKey |
TaskShow |
TaskErr |
TaskCom |
TaskIdle |
任務(wù)優(yōu)先級(jí) |
2 |
3 |
4 |
1 |
5 |
7 |
任務(wù)描述 |
處理AD采用結(jié)果,更新PWM占空比 |
鍵盤(pán)任務(wù) |
顯示任務(wù) |
系統(tǒng)非緊急故障處理任務(wù) |
與上位PC機(jī)進(jìn)行串行通訊 |
操作系統(tǒng)的缺省任務(wù) |
系統(tǒng)運(yùn)行時(shí),首先進(jìn)行系統(tǒng)初始化操作,并創(chuàng)建任務(wù)。所有新創(chuàng)建的任務(wù)都被置為就緒態(tài),操作系統(tǒng)內(nèi)核首先調(diào)用就緒態(tài)中優(yōu)先級(jí)最高的任務(wù)運(yùn)行。系統(tǒng)運(yùn)行過(guò)程中,始終保證運(yùn)行任務(wù)的優(yōu)先級(jí)高于就緒態(tài)中的所有任務(wù)。當(dāng)運(yùn)行著的任務(wù)因等待某一事件或延時(shí)而被掛起,或者有更高優(yōu)先級(jí)的任務(wù)進(jìn)入了就緒態(tài),則內(nèi)核中止當(dāng)前運(yùn)行著的任務(wù),把CPU的使用權(quán)交給就緒態(tài)中優(yōu)先級(jí)最高的任務(wù)。當(dāng)中斷發(fā)生時(shí),系統(tǒng)運(yùn)行中斷服務(wù)程序,中斷返回時(shí),系統(tǒng)內(nèi)核將進(jìn)行任務(wù)調(diào)度,將優(yōu)先級(jí)最高的就緒態(tài)任務(wù)轉(zhuǎn)為運(yùn)行態(tài)。例如,系統(tǒng)運(yùn)行過(guò)程中發(fā)生了AD采樣完成中斷,程序進(jìn)入AD采樣完成中斷服務(wù)程序;中斷服務(wù)程序向郵箱ADResult發(fā)送AD采樣結(jié)果,由于任務(wù)TaskAD早先因等待郵箱ADResult而被掛起,所以此時(shí)任務(wù)TaskAD的狀態(tài)被轉(zhuǎn)為就緒態(tài);中斷返回時(shí),內(nèi)核進(jìn)行任務(wù)調(diào)度,由于TaskAD是就緒態(tài)中優(yōu)先級(jí)最高的任務(wù)(系統(tǒng)正常運(yùn)行時(shí)TaskErr任務(wù)始終為掛起態(tài)),因此不管原先被中斷的任務(wù)是什么,系統(tǒng)都將運(yùn)行任務(wù)TaskAD,這就保證了任務(wù)TaskAD具有足夠快的任務(wù)響應(yīng)速度。TaskAD執(zhí)行一個(gè)循環(huán)后,又因等待郵箱ADResult而轉(zhuǎn)為掛起態(tài),內(nèi)核再次進(jìn)行任務(wù)調(diào)度,調(diào)用就緒態(tài)中的最高優(yōu)先級(jí)任務(wù)運(yùn)行。
5. 結(jié)論
本文結(jié)合無(wú)位置傳感器永磁無(wú)刷直流電動(dòng)機(jī)控制系統(tǒng)的設(shè)計(jì),針對(duì)系統(tǒng)具體要求,確定了以PIC18F452單片機(jī)為主控器件,μC/OS-II作為軟件平臺(tái)的開(kāi)發(fā)方案。實(shí)際的開(kāi)發(fā)過(guò)程證明了這種開(kāi)發(fā)模式能夠滿(mǎn)足系統(tǒng)高性能、低成本的設(shè)計(jì)要求,同時(shí)具備了較強(qiáng)的可擴(kuò)展性和一定技術(shù)前瞻性。
值得說(shuō)明的是,在嵌入式系統(tǒng)中使用RTOS,增強(qiáng)了系統(tǒng)實(shí)時(shí)性,簡(jiǎn)化了系統(tǒng)軟件設(shè)計(jì);同時(shí),也增加了系統(tǒng)的開(kāi)發(fā)成本。一方面,操作系統(tǒng)本省會(huì)耗費(fèi)一定的硬件資源(例如程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、定時(shí)器資源等等),增加了系統(tǒng)的硬件成本;另一方面,若購(gòu)買(mǎi)商用的實(shí)時(shí)操作系統(tǒng),需要額外的軟件支出,即使是使用免費(fèi)的實(shí)時(shí)內(nèi)核,也要求開(kāi)發(fā)者對(duì)內(nèi)核本省有深入的理解,需要投入相當(dāng)?shù)木?。所以,雖然使用RTOS會(huì)給開(kāi)發(fā)過(guò)程帶來(lái)一定的便利,但針對(duì)具體的應(yīng)用,是否使用RTOS,若使用,具體選擇那種RTOS,都是制定系統(tǒng)方案時(shí)值得慎重考慮的問(wèn)題。
參考文獻(xiàn):
[1] 周意成,朱平平,張相軍.無(wú)位置傳感器的方波無(wú)刷直流電機(jī)壓縮機(jī)負(fù)載的控制.電氣自動(dòng)化,2000 (3):16-19.
[2] 3-Phase BLDC Motor Control with Sensorless Back EMF Zero Crossing Detection Using DSP56F80X (Motorola Order No. AN1914/D). Motorola Inc.,U.S.,2001.
[3] PIC18FXX2 Data Sheet (DS39564B). Microchip Technology Inc.,U.S.,2002.[4] Labrosse Jean J.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II(第2版).邵貝貝譯.北京:北京航空航天大學(xué)出版社,2003