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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)SH79F168的航模無刷直流電機(jī)控制方案

          基于單片機(jī)SH79F168的航模無刷直流電機(jī)控制方案

          作者: 時(shí)間:2011-08-29 來源:網(wǎng)絡(luò) 收藏

            1 概述

          本文引用地址:http://www.ex-cimer.com/article/220164.htm

            無位置傳感器的無刷直流電機(jī)(Brushless Direct Current Motor, M)由于其快速、可靠性高、體積小、重量輕等特點(diǎn),在航模領(lǐng)域得到了廣泛的應(yīng)用。但是與有刷電機(jī)和有位置傳感器的無刷直流電機(jī)相比,其控制算法要復(fù)雜得多。加上航模設(shè)計(jì)中對(duì)重量和體積的要求非常嚴(yán)格,因此要求硬件電路盡可能簡(jiǎn)單,更增加了軟件的難度。

            本文提出了一種基于中穎8位單片機(jī)的控制方案,借助于該芯片片內(nèi)集成的針對(duì)電機(jī)控制的功能模塊,只需很少的外圍電路即可搭建控制系統(tǒng),實(shí)現(xiàn)基于反電動(dòng)勢(shì)法的無位置傳感器控制,在保證穩(wěn)定性和可靠性的基礎(chǔ)上大大降低了系統(tǒng)成本。而且該芯片與傳統(tǒng)8051完全兼容,易于上手,從而也降低了研發(fā)成本。

            2 系統(tǒng)硬件設(shè)計(jì)

            本方案選用中穎的8位單片機(jī)做為主控芯片。該芯片采用優(yōu)化的單機(jī)器周期8051核,內(nèi)置16K FLASH存儲(chǔ)器,兼容傳統(tǒng)8051所有硬件資源,采用JTAG仿真方式,內(nèi)置16.6M振蕩器,同時(shí)擴(kuò)展了如下功能:

            雙DPTR指針. 16位 x 8乘法器和16位/8除法器.

            3通道12位帶死區(qū)控制PWM,6路輸出,輸出極性可設(shè)為中心或邊沿對(duì)齊模式;同時(shí)集成故障檢測(cè)功能,可瞬時(shí)關(guān)閉PWM輸出;

            7通道10位ADC模塊;

            內(nèi)置放大器和比較器,可用作電流放大采樣和過流保護(hù);

            增強(qiáng)的外部中斷,提供4種觸發(fā)方式;

            提供硬件抗干擾措施;

            Flash自編程功能,方便存儲(chǔ)參數(shù);

            主系統(tǒng)硬件架構(gòu)如圖1所示,從圖中可以看出該系統(tǒng)大部分功能都由片內(nèi)集成的模塊完成。外圍電路的簡(jiǎn)化一方面可以提高系統(tǒng)可靠性,另一方面也降低了成本。

            

          基于單片機(jī)SH79F168的航模無刷直流電機(jī)控制方案


            圖 1 系統(tǒng)硬件架構(gòu)

            三相逆變橋采用上橋PMOS用三極管驅(qū)動(dòng),下橋NMOS用PWM端口直接驅(qū)動(dòng)的方式,如圖2所示。

            

          基于單片機(jī)SH79F168的航模無刷直流電機(jī)控制方案


            圖 2 三相逆變橋

            SH79F169片內(nèi)集成了三通道6路PWM端口,可分別獨(dú)立配置為PWM輸出或者IO輸出。將PWM01~PWM21配置為PWM輸出,直接驅(qū)動(dòng)三相逆變橋的下橋;PWM0~PWM2配置為IO端口,經(jīng)過晶體管反相電路后驅(qū)動(dòng)三相逆變橋的上橋。

            外部中斷輸入INT4x配置為雙沿觸發(fā),即輸入信號(hào)的上升沿和下降沿都能觸發(fā)中斷,可用于捕捉調(diào)速給定信號(hào)。

            3 系統(tǒng)軟件設(shè)計(jì)

            由于的硬件已經(jīng)完成了大量的任務(wù),軟件的部分相對(duì)簡(jiǎn)化很多。主程序流程圖如圖3所示。

            

          基于單片機(jī)SH79F168的航模無刷直流電機(jī)控制方案


            圖 3 主程序流程圖

            為便于理解,該流程圖經(jīng)過了盡量的簡(jiǎn)化,只保留最關(guān)鍵的步驟。主流程中沒有列出“檢測(cè)BEMF”和“換相”兩個(gè)關(guān)鍵的步驟,因?yàn)樗鼈兎謩e在PWM中斷和timer0中斷中進(jìn)行。

            3.1 反電動(dòng)勢(shì)過零點(diǎn)檢測(cè)

            在PWM輸出高期間,假設(shè)斷開相繞組端電壓為 ,反電動(dòng)勢(shì)為 ,供電電壓為 ,則三者之間有如下關(guān)系[1]:

            

          4.jpg


            SH79F168提供PWM周期中斷和占空比中斷。當(dāng)周期中斷發(fā)生時(shí)不斷檢測(cè)斷開相的端電壓,并與 比較,直到檢測(cè)到過零點(diǎn)或者PWM輸出低(根據(jù)PWM占空比中斷標(biāo)志位判斷),即可實(shí)現(xiàn)在PWM輸出高期間的反電動(dòng)勢(shì)過零點(diǎn)檢測(cè)。每次換相后就切換到另一個(gè)通道,檢測(cè)下一個(gè)斷開相的端電壓,如此循環(huán),實(shí)現(xiàn)實(shí)時(shí)檢測(cè)。

            需要注意是剛換相后的一段時(shí)間內(nèi),由于MOS管的續(xù)流,斷開相繞組的電壓會(huì)出現(xiàn)尖峰。為了準(zhǔn)確檢測(cè)反電動(dòng)勢(shì),可以選擇在剛換相的一到兩個(gè)PWM周期內(nèi)不進(jìn)行采樣,避開尖峰電壓。

            3.2 起動(dòng)算法

            電機(jī)的反電動(dòng)勢(shì)和轉(zhuǎn)速正相關(guān),在起動(dòng)和低速運(yùn)行階段,電機(jī)產(chǎn)生的反電動(dòng)勢(shì)為零或很小,因此往往需要經(jīng)過一段強(qiáng)制加速,使反電動(dòng)勢(shì)上升到能夠檢測(cè)過零點(diǎn)的水平。

            航模電機(jī)一般在較低速時(shí)即會(huì)產(chǎn)生比較明顯的反電動(dòng)勢(shì),這個(gè)特點(diǎn)為起動(dòng)提供了很大的便利。先給電機(jī)任意兩相通電,使電機(jī)獲得一個(gè)初速度,這時(shí)檢測(cè)斷開相電壓并等待其發(fā)生過零。若檢測(cè)到過零點(diǎn)則換相,若經(jīng)過較長(zhǎng)一段時(shí)間還沒有檢測(cè)到過零則強(qiáng)制換相,重復(fù)這個(gè)過程直至電機(jī)穩(wěn)定運(yùn)行。這種起動(dòng)方式,不但實(shí)現(xiàn)簡(jiǎn)單,而且穩(wěn)定可靠。在這種方式不能適用時(shí),再根據(jù)應(yīng)用場(chǎng)合考慮選用特定的起動(dòng)方式,可參考文獻(xiàn)[2],限于篇幅本文不詳述。

            3.3 換相計(jì)算

            一般在用反電動(dòng)勢(shì)法進(jìn)行BLDC控制的時(shí)候,需要對(duì)每?jī)纱螕Q相的間隔時(shí)間進(jìn)行計(jì)時(shí),得到60°電角度時(shí)間,然后除以2作為檢測(cè)到過零點(diǎn)后30°延時(shí)的定時(shí)值。這就需要用到兩個(gè)定時(shí)器/計(jì)數(shù)器,一個(gè)用作計(jì)數(shù)器對(duì)每?jī)纱螕Q相的間隔進(jìn)行計(jì)數(shù),另一個(gè)用作定時(shí)器實(shí)現(xiàn)30°延時(shí)。本方案中為了節(jié)省timer資源,用一個(gè)timer同時(shí)完成兩項(xiàng)功能。

            在每次換相后,檢測(cè)到該通電狀態(tài)下的過零點(diǎn)之間,timer0用作計(jì)數(shù)器;在檢測(cè)到過零點(diǎn)之后,之前的計(jì)數(shù)值即為30°電角度,將其作為定時(shí)值裝入timer0,timer0用作定時(shí)器開始定時(shí)。定時(shí)時(shí)間到后,在timer0中斷中進(jìn)行換相。然后timer0又用作計(jì)數(shù)器,如此循環(huán)。正常情況下,由于電機(jī)轉(zhuǎn)速很高,每次換相到檢測(cè)到過零點(diǎn)之間的時(shí)間很短,timer0在計(jì)數(shù)模式下不會(huì)發(fā)生中斷。若timer0在計(jì)數(shù)模式時(shí)發(fā)生中斷,必然是計(jì)數(shù)溢出,說明電機(jī)經(jīng)過較長(zhǎng)的時(shí)間還沒有檢測(cè)到過零點(diǎn),而這可以作為電機(jī)堵轉(zhuǎn)的標(biāo)志。根據(jù)實(shí)際情況,可對(duì)timer0在計(jì)數(shù)模式下連續(xù)發(fā)生中斷的次數(shù)進(jìn)行計(jì)數(shù),超過一定值即認(rèn)為發(fā)生堵轉(zhuǎn)。這樣,timer0還實(shí)現(xiàn)了堵轉(zhuǎn)保護(hù)的功能。

            4 系統(tǒng)測(cè)試及總結(jié)

            圖4~6分別為PWM占空比約為20%、50%和100%時(shí),在電機(jī)運(yùn)轉(zhuǎn)過程中用示波器捕捉到的各相電壓和過零點(diǎn)位置波形。

            

          5.jpg


            圖 4 PWM占空比為20%

            

          6.jpg


            圖 5 PWM占空比為50%

            

          基于單片機(jī)SH79F168的航模無刷直流電機(jī)控制方案


            圖 6 PWM占空比為100%

            各圖中最上方的方波中每個(gè)高低翻轉(zhuǎn)的位置即對(duì)應(yīng)程序中檢測(cè)到過零點(diǎn)的時(shí)刻,下面三個(gè)梯形波分別為A、B、C三相的端電壓。由圖中可以看出PWM占空比越高時(shí)系統(tǒng)運(yùn)行越穩(wěn)定。本系統(tǒng)經(jīng)測(cè)試在PWM占空比低至8%時(shí)還能穩(wěn)定運(yùn)行。

            采用本方案的航模電調(diào)通過廠家的各項(xiàng)測(cè)試,性能良好,穩(wěn)定可靠,且節(jié)省了成本。目前已進(jìn)入批量生產(chǎn)階段,產(chǎn)生了良好的經(jīng)濟(jì)效益。

            參考文獻(xiàn)

            [1] Jianwei Shao. Direct Back EMF Detection Method for Sensorless Brushless DC Motor Dives. Thesis submitted to the Faculty of the Virginia Polytechnic Institute and the State University in Partial fulfillment of the requirements for the degree of Master, 2003.

            [2] 吳筱輝, 程小華, 劉杰. 反電動(dòng)勢(shì)法檢測(cè)轉(zhuǎn)子位置的直流無刷電機(jī)系統(tǒng)起動(dòng)方法. 中小型電機(jī), 2005, 32(5)



          評(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); })();