掌握MCU軟件設(shè)計(jì)準(zhǔn)則 實(shí)現(xiàn)直流馬達(dá)控制精準(zhǔn)度提升
掃描二維碼
隨時(shí)隨地手機(jī)看文章
300瓦以下的小功率馬達(dá)適合以MCU做為控制方案,在各家MCU硬件規(guī)格差異化日漸縮小之下,軟件演算設(shè)計(jì)就顯得相形重要,若能掌握MCU控制各種直流馬達(dá)的軟件設(shè)計(jì)原則,將能大幅提升馬達(dá)控制的精準(zhǔn)度。
運(yùn)作在300瓦(W)以下的小功率馬達(dá)被廣泛應(yīng)用于各類應(yīng)用,例如汽車系統(tǒng)、打印機(jī)、復(fù)印機(jī)、碎紙機(jī)、玩具、工廠自動(dòng)化、測(cè)試設(shè)備、機(jī)器人技術(shù)、航空航天與軍工等。最流行的小功率馬達(dá)類型是直流(DC)馬達(dá)、無刷直流馬達(dá)(BLDC)和步進(jìn)馬達(dá)。馬達(dá)的產(chǎn)量大致與功率大小成反比,量產(chǎn)的小功率馬達(dá)數(shù)量遠(yuǎn)遠(yuǎn)高于大功率馬達(dá)數(shù)量。
專用于馬達(dá)控制的數(shù)字信號(hào)處理器(DSP)設(shè)計(jì)主要在滿足大型脫機(jī)式馬達(dá)的需求。脫機(jī)馬達(dá)通常為交流(AC)感應(yīng)或無刷直流馬達(dá),運(yùn)行在110-480VAC和1/4-100馬力(HP)。專用于馬達(dá)控制的DSP,對(duì)于小功率馬達(dá)控制系統(tǒng)來說,成本太高。
本文提供使用微控制器(MCU)控制各類馬達(dá)的軟件范例。雖然這些范例相對(duì)簡(jiǎn)單,但其針對(duì)各類馬達(dá)提供有效的解決方案。一個(gè)傳統(tǒng)的馬達(dá)控制系統(tǒng)通常要求額外特性并具有更高的復(fù)雜度。這些軟件范例能夠做為開發(fā)更復(fù)雜馬達(dá)驅(qū)動(dòng)系統(tǒng)的基礎(chǔ)。
借助軟件演算 DC有刷馬達(dá)功耗下降
DC馬達(dá)在小功率馬達(dá)中是最常見和最便宜的。在本文中,DC馬達(dá)主要指的是有刷換向永磁直流馬達(dá)。
DC馬達(dá)的特性使其成為變速系統(tǒng)中最簡(jiǎn)單易使用的馬達(dá)。DC馬達(dá)的轉(zhuǎn)矩-速度特性如圖1所示,DC馬達(dá)的非負(fù)載速度與馬達(dá)電源電壓成線性關(guān)系。驅(qū)動(dòng)穩(wěn)定扭矩負(fù)載、線性負(fù)載或指數(shù)負(fù)載的DC馬達(dá)的電壓-速度特性也是連續(xù)的、正斜率的和可預(yù)測(cè)的,因此,在大多數(shù)情況下,使用開放回路控制系統(tǒng)是可行的。簡(jiǎn)單地改變通過馬達(dá)的電壓,任何人都能夠控制馬達(dá)的速度。脈寬調(diào)變(PWM)能夠用于改變馬達(dá)供電電壓,加載到馬達(dá)的平均電壓與PWM工作周期比成正比例關(guān)系(這里忽略馬達(dá)電感和不連續(xù)運(yùn)行導(dǎo)致的次要影響)。
圖1 DC馬達(dá)特性
這里提供一個(gè)以MCU控制DC馬達(dá)的簡(jiǎn)單例子。在這個(gè)范例中,使用模擬數(shù)字轉(zhuǎn)換器(ADC)讀取電位器的位置信息,并使用PCA 8位PWM模式輸出對(duì)應(yīng)的PWM信號(hào)(圖2)。
圖2 DC馬達(dá)驅(qū)動(dòng)電路
單個(gè)N通道功率金屬氧化物半導(dǎo)體場(chǎng)效晶體管(MOSFET)Q1用于驅(qū)動(dòng)DC馬達(dá)。功率MOSFET應(yīng)當(dāng)根據(jù)特定的馬達(dá)電壓和電流需求進(jìn)行選擇。飛輪二極管的D1跨接到DC馬達(dá)。當(dāng)MOSFET關(guān)閉時(shí),電流通過馬達(dá)自感繼續(xù)流動(dòng),MOSFET漏極電壓將上升到超過馬達(dá)電源電壓的一個(gè)二極管壓降,然后,電流經(jīng)由飛輪二極管繼續(xù)流動(dòng)。
大多數(shù)低壓馬達(dá)驅(qū)動(dòng)電路利用蕭特基功率整流器實(shí)現(xiàn)飛輪二極管,蕭特基整流器具有較低的正向電壓和極短的反向恢復(fù)時(shí)間。這兩者在馬達(dá)驅(qū)動(dòng)應(yīng)用中都是非常重要的參數(shù)因子。
功率MOSFET由反向閘極驅(qū)動(dòng)器驅(qū)動(dòng)。F300的端口引腳默認(rèn)配置為輸入引腳,并且啟用弱的100k上拉電阻。在端口被配置而且交叉開關(guān)器和周邊啟用之前,端口引腳一直保持高電平。當(dāng)復(fù)位接腳保持低電平時(shí),端口接腳也會(huì)被配置為弱上拉啟用的輸入接腳。透過使用反向驅(qū)動(dòng)器,功率晶體管在預(yù)設(shè)狀態(tài)下處于關(guān)閉狀態(tài)。如果使用非反相器驅(qū)動(dòng),10k下拉電阻應(yīng)當(dāng)端口引腳和接地。
為使用3伏特(V)微控制器,閘極驅(qū)動(dòng)器應(yīng)當(dāng)具有3V相容的輸入電平臨界值。如果馬達(dá)電壓在5-15V之間,閘極驅(qū)動(dòng)器能夠直接切斷馬達(dá)電源電壓。如果馬達(dá)電壓超過15V,分開的閘極驅(qū)動(dòng)器電源電壓是需要的,通常為5V或者12V。當(dāng)采用低于10V的閘極驅(qū)動(dòng)器電源電壓時(shí),應(yīng)當(dāng)使用邏輯電平功率MOSFET。
軟件實(shí)現(xiàn)非常簡(jiǎn)單。main()函數(shù)初始化頻率、端口和周邊,然后進(jìn)入while(1)回路。在while(1)中使用avgADC()函數(shù)讀取電位器電壓值,然后輸出這個(gè)值到8位PWM。
PORT_Init()函數(shù)配置端口輸入/輸出(I/O)、周邊、?用數(shù)位交叉開關(guān)器。在這里,為8位PWM?用端口引腳,為閘極驅(qū)動(dòng)器?用推挽式輸出引腳。
系統(tǒng)頻率SYSCLK被配置運(yùn)行在24.5MHz最大速率,這允許8位PWM可配置為160奈秒(ns)頻率周期和24kHz頻率。
ADC0_Init()函數(shù)配置ADC為查詢模式。ADC增益設(shè)定為1,并且為ADC頻率選擇1MHz保守頻率。重要的是,這里也要初始化電壓參考,配置ADC使用VDD滿量程。
函數(shù)readADC()采用查詢模式讀取電壓值一次,并返回ADC值。函數(shù)avgADC()調(diào)用readADC()函數(shù),并且返回六十四個(gè)采樣值的平均值。平均化ADC讀數(shù)可以最小化噪聲影響,減少PWM輸出抖動(dòng)。
當(dāng)使用PCA 8位PWM模式時(shí),在CEX0輸出0x00值對(duì)應(yīng)到100%的工作周期比;輸出0xFF值對(duì)應(yīng)到0.39%的工作周期比,0%的工作周期比可以透過清除PCA0CPM0 SFR中的ECOM0位來實(shí)現(xiàn)。
當(dāng)使用反向驅(qū)動(dòng)器時(shí),這種關(guān)系是相反的。在MOSFET閘極驅(qū)動(dòng)器上,0x00值對(duì)應(yīng)到0%的工作周期比,0xFF值對(duì)應(yīng)到99.6%的工作周期比為了簡(jiǎn)單起見,本文中所有使用8位PWM的軟件范例都僅限于使用99.6%PWM。
在一些情況下,100%的工作周期比是可取的,100%工作周期比將有效的消除開關(guān)損耗。由于MOSFET從不會(huì)關(guān)閉,因此在MOSFET上沒有開關(guān)損耗,在二極管上也沒有損失,唯一的功率損耗是功率MOSFET中的傳導(dǎo)損耗。如果馬達(dá)預(yù)計(jì)在大部分時(shí)間里都處于全速運(yùn)作,100%的最大工作周期比是合理的。100%的工作周期比,可以經(jīng)由清除PCA0CPM0 SFR中的ECOM0位來實(shí)現(xiàn)。
MCU軟件襄助 永磁DC馬達(dá)更適于反轉(zhuǎn)應(yīng)用
永磁DC馬達(dá)通常被用于須要反轉(zhuǎn)馬達(dá)方向的應(yīng)用中。為了反轉(zhuǎn)旋轉(zhuǎn)方向,須要反轉(zhuǎn)馬達(dá)上電壓的極性。這須要使用H橋電路(圖3),H橋電路有四個(gè)晶體管。當(dāng)在正方向驅(qū)動(dòng)馬達(dá)時(shí),Q4打開,PWM信號(hào)應(yīng)用于晶體管Q1。在反方向上驅(qū)動(dòng)馬達(dá),Q3打開,PWM信號(hào)應(yīng)用于晶體管Q2。在這個(gè)范例中,下部的晶體管被用于PWM速度控制;上部的晶體管被用于轉(zhuǎn)向,使用這種拓?fù)浣Y(jié)構(gòu),可以在兩個(gè)方向上提供變速控制。
圖3 DC馬達(dá)全橋電路
在圖3中,N通道功率MOSFET被用于低壓側(cè)晶體管,P通道功率MOSFET被用于高壓側(cè)晶體管。對(duì)于驅(qū)動(dòng)20V以下的DC馬達(dá)來說,利用互補(bǔ)功率MOSFET是非常符合成本效益的。如圖3所示,低壓側(cè)閘極驅(qū)動(dòng)器帶有反相器;而高壓側(cè)閘極驅(qū)動(dòng)器沒有反相器。閘極驅(qū)動(dòng)器極性被選擇,以確保當(dāng)端口引腳在弱上拉?動(dòng)的重置配置模式下,功率晶體管處于關(guān)閉狀態(tài)。
該范例軟件建構(gòu)在基本范例代碼上。主回路現(xiàn)在包括一個(gè)if語句檢查反轉(zhuǎn)開關(guān)SW1的狀態(tài)。當(dāng)反轉(zhuǎn)按鍵被按下,PWM停止運(yùn)作,同時(shí)所有P0輸出也同樣被禁止。當(dāng)按鍵釋放后,馬達(dá)將反轉(zhuǎn)方向。范例軟件中的初始化函數(shù)類似于DC有刷馬達(dá)控制,只是除了增加額外的推挽式輸出引腳配置之外。
調(diào)用reverse()函數(shù)反轉(zhuǎn)馬達(dá)方向。標(biāo)志位Fwd用于保存馬達(dá)狀態(tài),F(xiàn)wd位被切換用于判斷哪些輸出須要啟動(dòng)。
反轉(zhuǎn)馬達(dá)還存在一個(gè)潛在的問題。當(dāng)反轉(zhuǎn)開關(guān)SW1被按下時(shí),馬達(dá)可能由于馬達(dá)慣性而繼續(xù)旋轉(zhuǎn)一段時(shí)間。當(dāng)馬達(dá)正在轉(zhuǎn)動(dòng)時(shí),它將產(chǎn)生與馬達(dá)速度成比例關(guān)系的反向電動(dòng)勢(shì);如果馬達(dá)停止旋轉(zhuǎn)之前反向按鍵被釋放,馬達(dá)反向電動(dòng)勢(shì)將透過上部晶體管而短路,如下所述。
參考圖4,假設(shè)開始時(shí)Q4處于打開狀態(tài),馬達(dá)正在正方向上旋轉(zhuǎn);假設(shè)馬達(dá)正在運(yùn)行,并且反向電動(dòng)勢(shì)大約為6V?,F(xiàn)在反轉(zhuǎn)開關(guān)被按下,所有四個(gè)晶體管被關(guān)閉,馬達(dá)右側(cè)將比左側(cè)高約6V;然后開關(guān)釋放,打開Q3,馬達(dá)左側(cè)被上拉到電源電壓,馬達(dá)的反向電動(dòng)勢(shì)必透過Q4的內(nèi)部二極管而短路。
圖4 DC馬達(dá)反轉(zhuǎn)危害
最終的結(jié)果是,馬達(dá)停止,在馬達(dá)機(jī)械慣性中儲(chǔ)存的所有能量被注入Q4。反轉(zhuǎn)過程中很容易損壞上部晶體管,在一些具有較大摩擦力負(fù)載的應(yīng)用中,一個(gè)固定延遲時(shí)間可以確保馬達(dá)有足夠時(shí)間停止。而在其他應(yīng)用中,馬達(dá)可能須要花費(fèi)幾秒鐘才完全停止,這個(gè)問題的通用解決方案,如圖4所示。
軟件防護(hù)法助力 DC馬達(dá)反轉(zhuǎn)控制更安全
這個(gè)用于DC馬達(dá)的軟件范例基于第二個(gè)范例,提供軟件防護(hù)方法。為了安全的反轉(zhuǎn)DC馬達(dá),我們須要判斷馬達(dá)是否還處于運(yùn)轉(zhuǎn)中。
確定馬達(dá)是否仍然處于旋轉(zhuǎn)狀態(tài)的簡(jiǎn)單而有效方法,是測(cè)量跨接在馬達(dá)端子上的電壓差。ADC能夠被配置,去測(cè)量模擬多路選擇器中的任意兩個(gè)輸入引腳上的差動(dòng)電壓??沙绦蛟O(shè)計(jì)的窗口檢測(cè)器也可以用于判斷差動(dòng)電壓是否屬于默認(rèn)極限。在這個(gè)范例軟件中,如果差動(dòng)馬達(dá)電壓在100毫秒(ms)內(nèi)保持在滿量程的3%以下,那么馬達(dá)即開始反轉(zhuǎn)。具備電壓感應(yīng)功能的DC馬達(dá)驅(qū)動(dòng)的硬件實(shí)現(xiàn),類似于在馬達(dá)端子上分別添加兩個(gè)電阻分壓器(圖5)。
圖5 帶有電壓感應(yīng)能力的DC馬達(dá)驅(qū)動(dòng)
主回路已經(jīng)被改進(jìn)用來檢測(cè)馬達(dá)是否停止。detectStop()函數(shù)首先配置ADC去測(cè)量差動(dòng)電壓,ADC和窗口檢測(cè)器都適用于查詢模式。如果ADC值在默認(rèn)窗口范圍內(nèi),那么計(jì)數(shù)器增加。使用實(shí)現(xiàn)10ms延遲的定時(shí)器T0設(shè)置采樣時(shí)間,任何在窗口之外的采樣值將重置定時(shí)器,退出while回路之前,它將使用十個(gè)連續(xù)的采樣值;返回到主回路之前,detectStop()函數(shù)將重新配置ADC去測(cè)量速度電位器。
憑借軟件算法 無刷直流馬達(dá)變速控制性能大增
無刷直流馬達(dá)提供一些傳統(tǒng)有刷換向DC馬達(dá)所沒有的優(yōu)點(diǎn)。電子和傳感器有效的替代電刷角色,提供更長(zhǎng)的壽命,減少維護(hù)操作,并且沒有電刷噪聲。正確整流的無刷直流馬達(dá)的扭矩-速度特性完全相同于如圖1所示的DC馬達(dá),因此,無刷直流馬達(dá)展現(xiàn)出與DC馬達(dá)相同的滿足需求的質(zhì)量,非常適用于變速控制。這個(gè)范例為使用霍爾效應(yīng)傳感器控制馬達(dá)換向的無刷直流馬達(dá),提供簡(jiǎn)單的開放回路控制,無刷直流馬達(dá)的速度使用簡(jiǎn)單的電位器控制。在這種方式下的無刷直流馬達(dá)控制的特點(diǎn),類似于經(jīng)典DC馬達(dá)控制范例。
這個(gè)范例的硬件實(shí)現(xiàn)如圖6所示。馬達(dá)由六個(gè)功率晶體管驅(qū)動(dòng),構(gòu)成三相橋式結(jié)構(gòu)。下部的晶體管Q1-3是N通道功率MOSFET;上部的三個(gè)晶體管是P通道功率MOSFET。這樣就簡(jiǎn)化閘極驅(qū)動(dòng)器管理,此外,互補(bǔ)閘極驅(qū)動(dòng)器的使用使得在預(yù)設(shè)狀態(tài)下,功率晶體管處于關(guān)閉狀態(tài)。
圖6 無刷DC馬達(dá)驅(qū)動(dòng)
霍爾效應(yīng)傳感器有開集電極輸出,需要上拉電阻。檢查馬達(dá)規(guī)格確保霍爾效應(yīng)傳感器是適合配置的,開集電極輸出通常是3V兼容的,然而,霍爾效應(yīng)傳感器也需要一個(gè)偏置電源,通常須要超過3V。在大多數(shù)系統(tǒng)中,霍爾效應(yīng)傳感器能夠關(guān)閉馬達(dá)電源電壓,或者閘極驅(qū)動(dòng)器電源電壓。
使用斷點(diǎn)調(diào)變軟件可能會(huì)將馬達(dá)和MOSFET置于不良狀態(tài)。當(dāng)MCU遇到一個(gè)斷點(diǎn)時(shí),引腳被及時(shí)的有效凍結(jié),而且可以留下PWM輸出處于啟動(dòng)狀態(tài)。這里推薦的流程是在進(jìn)行單步調(diào)變或者使用斷點(diǎn)之前,一直斷開馬達(dá)電源連接。BLDC馬達(dá)在跨越繞組時(shí),將會(huì)滿電壓失速。BLDC馬達(dá)失速電流僅僅與繞組的內(nèi)阻相關(guān),這很可能損壞功率MOSFET。
PORT_Init()函數(shù)對(duì)交叉開關(guān)器和輸出引腳分配進(jìn)行設(shè)置。額外的控制引腳為3-相控制而設(shè)置為推挽式輸出,為讀取霍爾傳感器而設(shè)置為輸入。
可程序設(shè)計(jì)計(jì)數(shù)器數(shù)組時(shí)基采用160ns,啟動(dòng)計(jì)數(shù)器。然而,模塊0模式SFR沒有初始化為8位PWM。在霍爾效應(yīng)位置被確定之前,沒有馬達(dá)驅(qū)動(dòng)被?用。
main()函數(shù)首先初始化相關(guān)資源,設(shè)置start標(biāo)志位。主回路首先使用hallPosition()函數(shù)檢測(cè)霍爾效應(yīng)傳感器的位置。如果start標(biāo)志位被設(shè)置或者霍爾位置已經(jīng)改變,馬達(dá)透過調(diào)用commutate()函數(shù)進(jìn)行換向。接下來,速度輸入被讀取,速度設(shè)置被寫入PWM輸出。
hallPosition()函數(shù)在錯(cuò)誤狀態(tài)時(shí)返回0,這發(fā)生在霍爾效應(yīng)輸入全為高或全為低時(shí)。如果錯(cuò)誤發(fā)生,主回路經(jīng)過調(diào)用coast()函數(shù)使所有輸出無效;起始位也在錯(cuò)誤條件發(fā)生時(shí)置位,而迫使換向發(fā)生在下一個(gè)合法的霍爾位置讀數(shù)時(shí)。[!--empirenews.page--]
readHalls()函數(shù)在霍爾效應(yīng)輸入端口引腳上讀取,并且去除霍爾效應(yīng)編碼抖動(dòng),該函數(shù)等待三個(gè)連續(xù)的相同讀數(shù)。當(dāng)霍爾編碼正在改變時(shí),這種方式降低錯(cuò)誤讀數(shù)的可能性。
hallPosition()首先透過上面描述的readHalls()函數(shù)讀取霍爾效應(yīng)編碼?;魻柧幋a模式被儲(chǔ)存在常量數(shù)組hallPattern[]中。為了匹配霍爾效應(yīng)編碼,一個(gè)帶有后遞減的單行for回路被用于尋找對(duì)應(yīng)的索引。hallPosition()函數(shù)如果發(fā)現(xiàn)一個(gè)匹配的模式,則返回1-6中的一個(gè)值;如果沒有發(fā)現(xiàn)匹配,hallPosition()函數(shù)返回0值。
commutate()函數(shù)用來在啟動(dòng)時(shí)初始化輸出,當(dāng)霍爾位置改變時(shí)改變輸出狀態(tài),并且在檢測(cè)到霍爾錯(cuò)誤后重新啟動(dòng)馬達(dá)。commutate()函數(shù)首先禁止PWM和上部的晶體管,然后,它才使用從hallPosition()函數(shù)中獲得的索引。
對(duì)于霍爾效應(yīng)模式或者整流模式來說,沒有統(tǒng)一的標(biāo)準(zhǔn)。請(qǐng)參閱你所使用之特定馬達(dá)制造商所提供的數(shù)據(jù)手冊(cè),依據(jù)制造商的資料手冊(cè)仔細(xì)查核兩種模式。同時(shí),也請(qǐng)檢查霍爾效應(yīng)模式和整流模式之間的通信,必要時(shí)請(qǐng)改變兩種模式之間的位移。