<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于PIC單片機(jī)的永磁無(wú)刷直流電動(dòng)機(jī)控制系統(tǒng)的開(kāi)發(fā)

          基于PIC單片機(jī)的永磁無(wú)刷直流電動(dòng)機(jī)控制系統(tǒng)的開(kāi)發(fā)

          作者: 時(shí)間:2012-04-12 來(lái)源:網(wǎng)絡(luò) 收藏

          表1 適用于PIC18F系列單片機(jī)的幾種嵌入式實(shí)時(shí)操作系統(tǒng)

          1.jpg

          結(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在編寫的過(guò)程中就充分考慮到了可移植性,它的絕大部分代碼都由ANSI C寫成,與處理器相關(guān)的代碼集中在OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C這三個(gè)文件中,因此只要針對(duì)具體的硬件改寫這些文件,就可以完成移植工作。

          移植成功之后,就可以開(kāi)始應(yīng)用程序的編寫工作。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í)性要求高的操作,需要編寫相關(guān)的中斷服務(wù)程序。

          正常運(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)鍵盤輸入;顯示電機(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ù)列表

          2.jpg

          系統(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ú)位置傳感器的設(shè)計(jì),針對(duì)系統(tǒng)具體要求,確定了以PIC18F452單片機(jī)為主控器件,μC/OS-II作為軟件平臺(tái)的開(kāi)發(fā)方案。實(shí)際的開(kāi)發(fā)過(guò)程證明了這種開(kāi)發(fā)模式能夠滿足系統(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)買商用的實(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)題。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();