高級電機控制中的軟件設計原則
運行在300W以下的小功率電機被廣泛應用于各類應用,例如汽車系統(tǒng)、打印機、復印機、碎紙機、玩具、工廠自動化、測試設備、機器人技術、航空航天與軍工以及其他應用。最流行的小功率電機類型是DC電機、無刷DC電機和步進電機。電機的產量大致與功率大小成反比。量產的小功率電機數量遠遠高于大功率電機數量。
本文引用地址:http://www.biyoush.com/article/201610/306753.htm專用于電機控制的DSP設計旨在滿足大型離線式電機的需求。離線電機通常為AC感應或無刷DC電機,運行在110-480VAC和1/4-100HP。專用于電機控制的DSP對于小功率電機控制系統(tǒng)來說成本太高。
本文展示了使用C8051F3xx MCU控制各類電機的軟件示例。雖然這些示例相對簡單,但是他們?yōu)楦黝愲姍C展示了有效的解決方案。一個傳統(tǒng)的電機控制系統(tǒng)通常要求額外特性并且具有更高的復雜度。這些軟件示例能夠作為開發(fā)更復雜電機驅動系統(tǒng)的起點。
DC電機控制
DC電機在小功率電機中是最常見和最便宜的。在本文中,術語“DC電機”特指有刷換向永磁DC電機。
DC電機的特性使得它成為變速系統(tǒng)中使用的最簡單電機。DC電機的轉矩—速度特性如圖1所示。DC電機的非負載速度與電機電源電壓成線性關系。驅動穩(wěn)定扭矩負載、線性負載或指數負載的DC電機的電壓—速度特性也是連續(xù)的、正斜率的和可預測的。因此,在大多數情況下使用開環(huán)控制是可行的。
圖1-DC電機特性
簡單地改變通過電機的電壓,任何人都能夠控制電機的速度。PWM能夠用于改變電機供電電壓。加載到電機的平均電壓與PWM占空比成正比例關系(這里忽略電機自感和不連續(xù)運行導致的次要影響)。
使用F3xx MCU提供簡單的DC電機速度控制的一個簡單的例子。在這個示例中使用ADC讀取電位器的位置信息,并且使用PCA 8位PWM模式輸出對應的PWM信號。硬件配置如圖2所示。
圖2-DC電機驅動電路
單個N溝道功率MOSFET Q1用于驅動DC電機。功率MOSFET應當根據特定的電機電壓和電流需求進行選擇。單向導通的二極管D1跨連到DC電機。當MOSFET關閉時,電流通過電機自感繼續(xù)流動。MOSFET漏極電壓將上升到超過電機電源電壓的一個二極管壓降。然后,電流通過單向導通二極管繼續(xù)流動。
大多數低壓電機驅動電路利用肖特基功率整流器實現單向導通二極管。肖特基整流器具有較低的正向電壓和極短的反向恢復時間。這兩者在電機驅動應用中都是非常重要的參數因子。
功率MOSFET由反向門驅動器驅動。F300的端口引腳默認配置為輸入引腳,并且使能弱的100k歐姆上拉電阻。在端口被配置而且交叉開關器和外設使能之前,端口引腳一直保持高電平。當復位引腳保持低電平時,端口引腳也會被配置為弱上拉使能的輸入引腳。通過使用反向驅動器,功率晶體管在默認狀態(tài)下處于關閉狀態(tài)。如果使用非反相器驅動,10k歐姆下拉電阻應當連接端口引腳和地之間。
為了使用3V微控制器,門驅動器應當具有3V兼容的輸入電平臨界值。如果電機電壓在5V和15V之間,門驅動器能夠直接切斷電機電源電壓。如果電機電壓超過15V,分開的門驅動器電源電壓是需要的,通常為5V或者12V。當采用低于10V的門驅動器電源電壓時,應當使用邏輯電平功率MOSFET。
軟件實現非常簡單。main()函數初始化時鐘、端口和外設,然后進入while(1)循環(huán)。在while(1)中使用avgADC()函數讀取電位器電壓值,然后輸出這個值到8位PWM。
PORT_Init()函數配置端口I/O、外設、使能數字交叉開關器。在這里,為8位PWM使能輸出引腳,為門驅動器使能推挽式輸出引腳。
系統(tǒng)時鐘SYSCLK被配置運行在24.5MHz最大速率,這允許8位PWM可配置為160ns時鐘周期和24kHz頻率。
ADC0_Init()函數配置ADC為查詢模式。ADC增益設定為1,并且為ADC時鐘選擇1MHz保守頻率。重要的是這里也要初始化電壓參考,配置ADC使用VDD滿量程。
函數readADC()采用查詢模式讀取電壓值一次,并返回ADC值。函數avgADC()調用readADC()函數,并且返回64個采樣值的平均值。平均化ADC讀數可以最小化噪聲影響,減少PWM輸出抖動。
當使用PCA 8位PWM模式時,在CEX0輸出0x00值對應到100%的占空比,輸出0xFF值對應到0.39%的占空比。0%的占空比可以通過清除PCA0CPM0 SFR中的ECOM0位來實現。
當使用反相驅動器時,這種關系是相反的。在MOSFET門驅動器上,0x00值對應到0%的占空比,0xFF值對應到99.6%的占空比。為了簡單起見,本文中所有使用8位PWM的軟件示例都僅限于使用99.6%PWM。
還有一些情況,100%的占空比是可取的。100%占空比將有效地消除開關損耗。由于MOSFET從不會關閉,因此在MOSFET上沒有開關損耗,在二極管上也沒有損失。唯一的功率損耗是功率MOSFET中的傳導損耗。如果電機預計在大部分時間里都處于全速運行,那么100%的最大占空比是合理的。100%的占空比可以通過清除PCA0CPM0 SFR中的ECOM0位來實現。
帶反轉能力的DC電機
永磁DC電動機通常被用于需要反轉電機方向的應用中。為了反轉旋轉方向,需要反轉電機上電壓的極性。這需要使用H橋。如圖3所示,H橋有4個晶體管。當在正方向驅動電機時,Q4打開,PWM信號應用于晶體管Q1。在反方向上驅動電機,Q3打開,PWM信號應用于晶體管Q2。在這個示例中,下部的晶體管被用于PWM速度控制,上部的晶體管被用于轉向。使用這種拓撲結構,可以在兩個方向上提供變速控制。
圖3-DC電機全橋電路
在圖3中,N溝道功率MOSFET被用于低壓側晶體管,P溝道功率MOSFET被用于高壓側晶體管。對于驅動20V以下的DC電機來說,利用互補功率MOSFET是非常符合成本效益的。如圖3所示,低壓側門驅動器帶有反相器,而高壓側門驅動器沒有反相器。門驅動器極性被選擇以確保當端口引腳在弱上拉使能的復位配置模式下,功率晶體管處于關閉狀態(tài)。
該示例軟件構建在基本示例代碼上。主循環(huán)現在包括一個if語句檢查反轉開關SW1的狀態(tài)。當反轉按鍵被按下時,PWM禁止,同時所有P0輸出禁止。當按鍵釋放后,電機將反轉方向。
除了增加額外的推挽式輸出引腳配置之外,示例軟件中的初始化函數類似于示例1。
調用reverse()函數反轉電機方向。標志位Fwd用于保存電機狀態(tài)。Fwd位被切換用于判斷哪些輸出需要激活。
反轉電機還存在一個潛在的問題。當反轉開關SW1被按下時,電機可能由于電機慣性而繼續(xù)旋轉一些時間。當電機正在轉動時,它將產生與電機速度成比例關系的反向電動勢。如果電機停止旋轉之前反向按鍵被釋放,電機反向電動勢將通過上部晶體管而短路,如下所述。
參考圖4,假設開始時Q4處于打開狀態(tài),電機正在正方向上旋轉。假設電機正在運行,并且反向電動勢大約為6V。現在反轉開關被按下,所有4個晶體管被關閉。電機右側將比左側高約6V。然后開關釋放,打開Q3。電機左側被上拉到電源電壓,電機的反向電動勢通過Q4的內部二極管而短路。
最終的結果是,電機停止,在電機機械慣性中儲存的所有能量被注入Q4。反轉過程中很容易損壞上部晶體管。在一些具有較大摩擦力負載的應用中,一個固定延遲時間可以確保電機有足夠時間停止。而在其他應用中,電機可能需要花費幾秒鐘才完全停止。這個問題的通用解決方案,如圖4所示。
圖4–DC電機反轉危害
帶有軟反轉能力的DC電機
這個用于DC電機的軟件示例基于第二個示例,提供軟反轉能力。為了安全的反轉DC電機,我們需要判斷電機是否還處于運轉中。
確定電機是否仍然處于旋轉狀態(tài)的簡單而有效方法是測量跨接在電機端子上的電壓差。ADC能夠被配置去測量模擬多路選擇器中的任意兩個輸入引腳上的差分電壓??删幊痰拇翱跈z測器也可以用于判斷差分電壓是否屬于預設極限。在這個示例軟件中,如果差分電機電壓在100ms內保持在滿量程的3%以下,那么電機開始反轉。
帶有電壓感應功能的DC電機驅動的硬件實現類似于在電機端子上分別添加兩個電阻分壓器,如圖5所示。
圖5–帶有電壓感應能力的DC電機驅動
主循環(huán)已經被改進用來檢測電機是否停止。detectStop()函數首先配置ADC去測量差分電壓。ADC和窗口檢測器都適用于查詢模式。如果ADC值在預設窗口范圍內,那么計數器增加。使用實現10ms延遲的定時器T0設置采樣時間。任何在窗口之外的采樣值將重置計時器。退出while循環(huán)之前,它將使用10個連續(xù)的采樣值。返回到主循環(huán)之前,detectStop()函數將重新配置ADC去測量速度電位器。
無刷DC電機控制
無刷DC(BLDC)電機擁有一些傳統(tǒng)有刷換向DC電機所沒有的優(yōu)勢。電子和傳感器有效地替代了電刷的角色,提供更長的壽命,減少維護操作,并且沒有電刷噪聲。正確整流的BLDC電機的扭矩—速度特性完全相同于如圖1所示的DC電機。
因此,無刷DC電機展現出與DC電機相同的滿足需求的品質,非常適用于變速控制。這個示例為使用霍爾效應傳感器控制電機換向的BLDC提供簡單的開環(huán)控制。BLDC電機的速度使用簡單的電位器控制。在這種方式下的BLDC電機控制的特點類似于經典DC電機控制示例。
這個示例的硬件實現如圖6所示。由于BLDC電機需要額外的輸出,因此推薦C8051F330這個MCU。如果應用需要更多的存儲資源,C8051F336也是不錯的選擇,因為它有較大的16kB代碼存儲空間,并且代碼兼容C8051F330。電機由6個功率晶體管驅動,構成三相橋式結構。下部的晶體管Q1-3是N溝道功率MOSFET。上部的3個晶體管是P溝道功率MOSFET。這樣就簡化了門驅動器管理。此外,互補門驅動器的使用使得在默認狀態(tài)下功率晶體管處于關閉狀態(tài)。
圖6–無刷DC電機驅動
霍爾效應傳感器有開集電極輸出,需要上拉電阻。檢查電機規(guī)格確?;魻栃獋鞲衅魇沁m合配置的。開集電極輸出通常是3V兼容的。然而,霍爾效應傳感器也需要一個偏置電源,通常需要超過3V。在大多數系統(tǒng)中,霍爾效應傳感器能夠關閉電機電源電壓或者門驅動器電源電壓。
使用斷點調試軟件可能會將電機和MOSFET置于不良狀態(tài)。當MCU遇到一個斷點時,引腳被及時有效地凍結,而且可以留下PWM輸出處于激活狀態(tài)。這里推薦的流程是在進行單步調試或者使用斷點之前,一直斷開電機電源連接。BLDC電機在跨越繞組時將會滿電壓失速。BLDC電機失速電流僅僅與繞組的內阻相關。這很可能損壞功率MOSFET。
BLDC電機示例軟件包含許多新的元素,如下所述。
PORT_Init()函數對交叉開關器和輸出引腳分配進行設置。額外的控制引腳為3相控制而設置為推挽式輸出,為讀取霍爾傳感器而設置為輸入。
可編程計數器陣列時基采用160ns,啟動計數器。然而,模塊0模式SFR沒有初始化為8位PWM。在霍爾效應位置被確定之前,沒有電機驅動被啟動。
main()函數首先初始化相關資源,設置start標志位。主循環(huán)首先使用hallPosition()函數檢測霍爾效應傳感器的位置。如果start標志位被設置或者霍爾位置已經改變,電機通過調用commutate()函數進行換向。接下來,速度輸入被讀取,速度設置被寫入PWM輸出。
hallPosition()函數在錯誤狀態(tài)時返回0。這發(fā)生在霍爾效應輸入全為高或全為低時。如果錯誤發(fā)生了,主循環(huán)通過調用coast()函數使所有輸出無效。起始位也在錯誤條件發(fā)生時置位,從而迫使換向發(fā)生在下一個合法的霍爾位置讀數時。
readHalls()函數在霍爾效應輸入端口引腳上讀取并且去除霍爾效應編碼抖動。該函數等待三個連續(xù)的相同的讀數。當霍爾編碼正在改變時,這種方式可以降低錯誤讀數的可能性。
hallPosition()首先通過上面描述的readHalls()函數讀取霍爾效應編碼。霍爾編碼模式被儲存在常量數組hallPattern[]中。為了匹配霍爾效應編碼,一個帶有后遞減的單行for循環(huán)被用于尋找對應的索引。hallPosition()函數如果發(fā)現一個匹配的模式,則返回1-6中的一個值。如果沒有發(fā)現匹配,hallPosition()函數返回0值。
commutate()函數用來在啟動時初始化輸出,當霍爾位置改變時改變輸出狀態(tài),并且在檢測到霍爾錯誤后重新啟動電機。commutate()函數首先禁止PWM和上部的晶體管。然后,它才使用從hallPosition()函數中獲得的索引。
對于霍爾效應模式或者整流模式來說沒有統(tǒng)一的標準。用戶需要瀏覽你所使用的特定電機的制造商所提供的數據手冊。依據制造商的數據手冊仔細核查兩種模式。也要檢查霍爾效應模式和整流模式之間的通信。必要時需要改變兩種模式之間的位移。
評論