如何用N76E003做無刷電機控制器?
網(wǎng)上關于單片機BLCD驅(qū)動資料很多,但能通俗易懂的少,看這些資料不得要領、源代碼更是看得是一頭霧水,尤其關于PWM、換相完全不得其法。本文,就準備以最基本的通俗易懂的思維,帶大家一步一步的來了解無刷電動機驅(qū)動的思路和設計。
由于屬于入門級別的,所以只以有霍爾的三相無刷電機為例子來展開。其實搞懂了有霍爾,則無霍爾也僅僅只是程序上的升級版而已。
網(wǎng)上關于三相無刷電機的基本原理、UVW接法,轉(zhuǎn)動原理就不重復了,這里就直接核心的內(nèi)容,先根據(jù)霍爾來展開。
霍爾傳感器,這里也假定大家已經(jīng)知道其基本原理和輸出信號(如果想理解原理,大家另行去找資料看),這里所說的,是已經(jīng)獲取到完整的霍爾信號,并進一步就霍爾信號和驅(qū)動信號來一步一步的展開。
說起霍爾,又繞不過去一個令很多人疑惑的概念:120°和60°。
所謂120°霍爾,和60°霍爾,從實際上來說,是以物理角度安裝位置就可以明確區(qū)分的,其安裝角度步距角度為60°就叫60°霍爾,120°的類推。
下面是旋轉(zhuǎn)一個360度電氣角度的120°霍爾信號時序:
行業(yè)標準霍爾編碼從100開始,這里圖片的波形時序也按照該標準。
這里特別稱為360度電氣角度,是因為,360度完成了一個循環(huán),而并不是電機轉(zhuǎn)了360°,電機到底轉(zhuǎn)了多少角度還和電機的極數(shù)有關,極數(shù)越多,則360°一個循環(huán)驅(qū)動周期電機轉(zhuǎn)動的角度越小。UVW都是一個極的,則電機真的轉(zhuǎn)了360度,而都是2個極的則只轉(zhuǎn)了180°,以此類推,這個大家了解就好,關系就是驅(qū)動扭矩和轉(zhuǎn)速等的區(qū)別,和原理、程序基本沒什么區(qū)別。
下圖是60°霍爾信號的時序:
對比上面2個時序圖,大家應該可以發(fā)現(xiàn),60°和120°時序的差別,也就是各個霍爾是在角度差異120°還是60°時候改變狀態(tài)而已。
現(xiàn)在,我們把60°霍爾的Hb信號反一個相,或者在電機上面轉(zhuǎn)換一個面安裝,同時把這個這個信號當成Hc,而把原來的Hc當成Hb,再來看看新是時序邏輯,發(fā)現(xiàn)了沒,它就是120°霍爾的時序圖了。圖是直接在60度時序上面變換,所以看起來第一順序就不是典型的100了,大家順延類推就好。
這就是網(wǎng)上常常說的,60°-120°其實安裝位置是一樣的,只是中間一個反了個個安裝而已說法的由來,當然這個說法好像都忽略了,相位順序最后2個必須顛倒一下。
上面說了120°和60°的關系了,相信大家都已經(jīng)明白,其實這些問題,如果放到程序里面去處理,會更加簡單,所以,這里就只討論120°霍爾條件下的電機及其驅(qū)動,弄清楚這個,大家肯定可以非常簡單的處理出60度霍爾的對應方法。
圖為一個三相無刷電機典型的輸出驅(qū)動線路簡化圖。這里分別標注了各個驅(qū)動信號的位置和意義,當然這里的AH---CL都只是邏輯上的高低電平表述,實際上我們必須通過浮柵驅(qū)動等手段來實現(xiàn)MOS管的具體驅(qū)動線路,這些,會在后面講到。
有了典型驅(qū)動線路,那么,我們該怎么去驅(qū)動這個線路能?
下面就通過另一個時序圖,清楚的了解一下單片機各驅(qū)動端輸出邏輯和霍爾的關系。
經(jīng)過對單片機6個端口的驅(qū)動時序要求,我們進一步分析,可以得到時序圖后面標注的輸出和霍爾ABC的邏輯關系。各個關系自己看圖就好了。
對應這樣的驅(qū)動時序要求,我們會單片機編程的,已經(jīng)在想了,這邏輯實現(xiàn)起來,在程序上面不怎么難嘛,是的,這就是我們說的換相邏輯,其實,到這里,如果你會基本的編程,那么你就已經(jīng)可以根據(jù)輸入的3個霍爾信號,編程完成AH-CL6個驅(qū)動IO端口的邏輯了。為了編程過程更加清晰明了,我們下面根據(jù)上圖的換相邏輯,用一個混合的邏輯圖來進一步說明:
這里,我們把3個IO,分別接到3個霍爾信號端,同時采用N76E003管腳中斷方式,每個霍爾狀態(tài)變化都將引起一次中斷,用一個寄存器(可位尋址),每個中斷分別讀取3個霍爾點位,并取反存儲到對應bit,然后根據(jù)豎線所表示的邏輯關系,直接邏輯運算,就已經(jīng)獲得了各端口輸出信號,如果我們把各位集中暫存在某寄存器,等六位完成后,一次性送到一個IO寄存器,就可以一次性輸出變化后的驅(qū)動信號,而不會有任何時序上的先后。
上面的霍爾換相驅(qū)動,我們是基于時序圖并用基本的邏輯運算來實現(xiàn),看起來有點復雜,其特點是思路明確,直接模擬邏輯運算過程實現(xiàn)換相。缺點是程序過程稍嫌復雜,換相運算量相對大點,而這個是不利于提高轉(zhuǎn)速的。
那么是不是有更簡潔快速的方法呢?當然有,我們馬上可以想到另外一種常用手段那就是查表。我只需要把可能的幾種組合,變成表里面的數(shù)據(jù),直接查表不就成了。
請看下面的圖:
我們把各輸出端口,分別定義為bit5-bit0,其中,AH=bit5;AL=bit4;....CL=bit0,程序輸出時候,這些位,將直接對應單片機P端口的輸出寄存器。
再看看把霍爾信號當成地址數(shù)據(jù),則可以發(fā)現(xiàn),地址占3位,而狀態(tài)只有6種就開始重復了,那么其中有000和111是非法地址,其他都是合法地址。根據(jù)上面的思路,我們按照地址升序排列,就可以獲得下面的表格:
就這樣,當霍爾信號邊沿變化,中斷到來時候,我們只需要檢查一下是不是非法地址,并直接排除,然后就把霍爾數(shù)據(jù)當成3位地址查表,將查表數(shù)據(jù)直接填入到IO輸出寄存器,就實現(xiàn)了非常簡單的換相邏輯,而且運算量非常小。
到這里,有人會問了,你上面描述的,換相是有了,可都只是方波,這里沒PWM什么事情啊。對的,為了清除的說明問題,這里還真沒有加入PWM,你可以理解為,上面說的所有換相邏輯,都是PWM100%時候的波形,也就是,如果我們按照上面的去做,我保證電機完全可以正常轉(zhuǎn)起來的,缺點就是轉(zhuǎn)起來就是最高速度,它是不會調(diào)速的.......。當然還有啟動時候電流大什么的,這些我們暫時就先忽略了吧。
電機不能調(diào)速怎么成,我們當然必須要能夠用PWM無級變速、那么實際的速度控制的我們該怎么做呢?
其實非常簡單,我們把上面描述的換相邏輯當中的波形,每路驅(qū)動信號幅度為1的那高電平部分,直接替換成我們可以控制的PWM信號,則一個帶PWM調(diào)速的無刷有霍爾電機就完成了。
當我們能夠把輸出變成這樣一種驅(qū)動信號的時候,再描述一下PWM調(diào)速的過程:
當我們準備運轉(zhuǎn)電機時候,則單片機PWM開始增加,然后電機在換相邏輯控制下,輸出符合上面時序圖的帶PWM的驅(qū)動波形,然后電機開始旋轉(zhuǎn),在某個合適的PWM占空比條件下,電機最終就會穩(wěn)定在一個合適的速度,而不再是上面那個簡單方波,一接上電機,電機就是全速運轉(zhuǎn)。
到這里,關于換相邏輯的部分都已經(jīng)說明白了,那么我們怎么具體去實現(xiàn)呢?
N76E003其實為電機驅(qū)動做好了充分的準備,人家芯片硬件都弄的好好的,我們只需要把這些硬件驅(qū)動起來便是了。。。
編輯:admin 最后修改時間:2020-11-04