步驟1:準(zhǔn)備
步驟2:工具和材料
工具
數(shù)字萬用表(DMM)-如果您的DMM具有頻率計(jì)示波器(最好具有至少2個(gè)通道)《
T8 Torx驅(qū)動(dòng)程序(您需要其中之一來打開任何硬盤驅(qū)動(dòng)器)。一個(gè)好的硬件商店就會(huì)有它們。
機(jī)器商店和Rapid Prototype Machine(這些工具非常有用,但是我有點(diǎn)機(jī)靈,我認(rèn)為沒有它們就可以完成該項(xiàng)目)。
材料
計(jì)算機(jī)硬盤驅(qū)動(dòng)器上的BLDC電機(jī)
另一個(gè)硬盤驅(qū)動(dòng)器上的磁環(huán)(電機(jī)的一半)。
硬盤驅(qū)動(dòng)器上的幾(3-6)個(gè)銀盤
一秒鐘小型電機(jī)(直流刷過OK)
橡皮筋或(最好是)皮帶,用另一臺(tái)電機(jī)轉(zhuǎn)動(dòng)BLDC
電子面包板
實(shí)心線22 AWG用于面包板連接
三個(gè)120 k歐姆電阻
六個(gè)?400歐姆電阻
線性或旋轉(zhuǎn)電位計(jì)100 k歐姆
ST Microelectronics L6234三相電動(dòng)機(jī)驅(qū)動(dòng)器IC
兩個(gè)100 uF電容器
一個(gè)10 nF電容器
一個(gè)220 nF電容器
一個(gè)1 uF電容器
一個(gè)100 uF電容器
三個(gè)整流二極管
一個(gè)2.5安培保險(xiǎn)絲
一個(gè)保險(xiǎn)絲座
3 Honeywell SS411A雙極霍爾效應(yīng)數(shù)字正弦波在傳感器上
三個(gè)1 K電阻器
注意:Mike Anton已設(shè)計(jì)并正在銷售一種產(chǎn)品,該產(chǎn)品將代替本使用說明中顯示的電力電子和霍爾傳感器電路(它使用反電動(dòng)勢感應(yīng)控制)。規(guī)格和購買信息可在以下兩個(gè)鏈接中找到:https://www.tindie.com/stores/manton/http://manton.wikidot.com/open:bldc-motor-driver
12 V愛好型鉛酸電池
步驟3:了解BLDC控制
如果您要執(zhí)行此項(xiàng)目,我建議您花一些時(shí)間徹底了解BLDC的工作原理和控制方法。在線有大量參考資料可供參考(有關(guān)一些建議,請(qǐng)參見下文)。但是,我確實(shí)提供了一些來自我的項(xiàng)目的圖表和表格,這些圖表和表格可以幫助您理解。
這里列出了我認(rèn)為對(duì)理解該項(xiàng)目最重要的概念:
三相半橋
三相電動(dòng)機(jī)的六步換向《脈沖寬度調(diào)制(PWM)
霍爾效應(yīng)數(shù)字位置傳感器
Microchip無刷直流電動(dòng)機(jī)基本原理AVR443:ATMEL的基于傳感器的三相無刷直流電動(dòng)機(jī)控制
》 Microchip的無刷直流電動(dòng)機(jī)控制輕松實(shí)現(xiàn),帶飛思卡爾霍爾傳感器的三相BLDC電動(dòng)機(jī)控制
一個(gè)很好的視頻,展示了一個(gè)掃氣式硬盤電動(dòng)機(jī),但作者似乎將電動(dòng)機(jī)作為步進(jìn)電動(dòng)機(jī)運(yùn)行,不作為BLDC4上L6234電動(dòng)機(jī)驅(qū)動(dòng)器IC上的更詳細(xì)的參考資料
網(wǎng)頁,包括數(shù)據(jù)表,應(yīng)用筆記和購買信息。免費(fèi)樣品http://www.st.com/stonline/domains/buy/samples/index.htm
用于混合動(dòng)力電動(dòng)汽車應(yīng)用的PM無刷電機(jī)驅(qū)動(dòng)器的設(shè)計(jì)。這是我發(fā)現(xiàn)的唯一描述再生制動(dòng)換向順序的論文。
這篇論文《電動(dòng)汽車的再生制動(dòng)》很有用,我從中借鑒了一些數(shù)據(jù),但我認(rèn)為它錯(cuò)誤地描述了再生的工作原理。
步驟4:電機(jī)
我使用打撈的磁盤驅(qū)動(dòng)器電機(jī)完成了這個(gè)項(xiàng)目,因?yàn)樗苋菀讓?shí)現(xiàn),而且我喜歡學(xué)習(xí)BLDC的繩索的想法使用小型低壓電動(dòng)機(jī)進(jìn)行控制,不會(huì)造成任何安全問題。另外,霍爾傳感器的磁體的配置也非常簡單,它使用了第二個(gè)電動(dòng)機(jī)的磁環(huán)(轉(zhuǎn)子)(請(qǐng)參見步驟4)。
如果您不想全部在安裝和校準(zhǔn)霍爾傳感器時(shí)遇到麻煩(步驟5-7),我知道至少有一些CD/DVD驅(qū)動(dòng)器電機(jī)內(nèi)置了霍爾傳感器。
要在電動(dòng)機(jī)上提供一些旋轉(zhuǎn)慣量并給它們一點(diǎn)點(diǎn)要承受的負(fù)載,我在電機(jī)上放了5個(gè)硬盤驅(qū)動(dòng)器磁盤,輕輕地粘在一起,并用少許強(qiáng)力膠粘到了電機(jī)上(這使飛輪進(jìn)入了我的原始項(xiàng)目)。
如果要卸下電機(jī)從硬盤驅(qū)動(dòng)器上,您將需要一個(gè)T8梅花形螺絲刀來擰開外殼(通常在中心有一兩個(gè)螺釘,這些螺釘隱藏在粘貼式標(biāo)簽的后面),以及用于將電動(dòng)機(jī)固定到位的內(nèi)部螺釘。您還需要卸下磁頭讀取器(音圈致動(dòng)器),以便卸下存儲(chǔ)磁盤才能到達(dá)電機(jī)。
此外,您還需要另一臺(tái)相同的硬盤驅(qū)動(dòng)器電動(dòng)機(jī),從中卸下轉(zhuǎn)子(內(nèi)部有一個(gè)磁鐵環(huán))。為了將電動(dòng)機(jī)拉開,我用虎鉗夾住電動(dòng)機(jī)的轉(zhuǎn)子(頂部),然后用兩把螺絲起子分開180度,在定子(底部)上撬動(dòng)。將虎鉗固定在虎鉗中而不變形不會(huì)那么容易。為此,您可能需要構(gòu)建一組木制的V型塊。
我在車床上的磁環(huán)上鉆了一個(gè)孔,以便將其緊密地安裝在電動(dòng)機(jī)的頂部。如果您無法使用車床,則可以使用強(qiáng)力膠將倒轉(zhuǎn)的轉(zhuǎn)子固定到電動(dòng)機(jī)上。
下面的照片2和3顯示了我拉開的其中一個(gè)電動(dòng)機(jī)的內(nèi)部。在上半部分(轉(zhuǎn)子)的內(nèi)部有8極(用塑料包裹的磁鐵)。在下半部分(定子)上有12個(gè)槽(繞組)。三相電動(dòng)機(jī)的每一相都有4個(gè)串聯(lián)的插槽。
某些HD電動(dòng)機(jī)的底部有三個(gè)觸點(diǎn),每一相一個(gè),還有一個(gè)是電動(dòng)機(jī)的中心抽頭(其中三個(gè)相遇)。在此項(xiàng)目中,不需要中央分接頭,但在無傳感器控制中,它可以派上用場(我希望這些天之一可以發(fā)布有關(guān)無傳感器控制的說明)。如果您的電動(dòng)機(jī)有四個(gè)觸點(diǎn),則可以用歐姆表識(shí)別相。電阻位于中心抽頭和相位之間,是兩相電阻的一半。
關(guān)于BLDC電動(dòng)機(jī)的大多數(shù)文獻(xiàn)都涉及梯形反電動(dòng)勢波形,但硬盤驅(qū)動(dòng)器似乎具有看起來為正弦的反電動(dòng)勢(請(qǐng)參閱參考資料)。下圖)。據(jù)我所知,雖然效率可能會(huì)有所降低,但使用方波PWM驅(qū)動(dòng)正弦電動(dòng)機(jī)效果很好。
與所有BLDC電動(dòng)機(jī)一樣,該電動(dòng)機(jī)由三相半電動(dòng)機(jī)驅(qū)動(dòng)-晶體管橋(請(qǐng)參見下面的第二張照片)。我將ST Microelectronics(L6234)制造的IC用于電橋,也稱為電機(jī)驅(qū)動(dòng)器。 L6234的電氣連接在步驟8中顯示。下面的第三張照片顯示了電動(dòng)機(jī)驅(qū)動(dòng)器和三個(gè)電動(dòng)機(jī)相位的示意圖。
為了使電動(dòng)機(jī)順時(shí)針運(yùn)行,將按照以下順序進(jìn)行切換(第一個(gè)字母為上方的晶體管,第二個(gè)字母為下方的晶體管):
第1步3 2 5 6 6順時(shí)針:CB ,AB,AC,BC,BA,CA
逆時(shí)針方向:BC,BA,CA,CB,AB,AC
此6步序列需要360度“電度”,但對(duì)于這些電機(jī),僅90物理度。因此,該序列每電動(dòng)機(jī)旋轉(zhuǎn)發(fā)生四次??磥磉@兩個(gè)序列是相同的,但它們卻不相同,因?yàn)閷?duì)于6步序列中的每一步,通過相的電流對(duì)于CW而言是一個(gè)方向,而對(duì)于CCW而言是相反的方向。
您可以通過從電池或電源向任意兩個(gè)電機(jī)相施加電壓來親自查看。如果施加電壓,電機(jī)將向一個(gè)方向轉(zhuǎn)動(dòng)一點(diǎn),然后停止。如果您可以按照上述順序之一快速更改相電壓,則可以手動(dòng)旋轉(zhuǎn)電動(dòng)機(jī)。當(dāng)電動(dòng)機(jī)高速運(yùn)行時(shí),晶體管和微控制器非常迅速地完成所有這些切換,每秒每秒數(shù)百次。
另外,請(qǐng)注意,如果將電壓施加到兩相中,則電動(dòng)機(jī)稍微移動(dòng)然后停止。這是因?yàn)榕ぞ刈優(yōu)榱恪D梢栽谙旅娴牡谒膹堈掌锌吹竭@一點(diǎn),該照片顯示了一對(duì)電機(jī)相位的反電動(dòng)勢。這是一個(gè)正弦波。當(dāng)波穿過x軸時(shí),該相位提供的扭矩為零。在六步BLDC換向序列中,這永遠(yuǎn)不會(huì)發(fā)生。在特定相位上的扭矩變低之前,將電源切換到另一相組合。
步驟5:霍爾傳感器機(jī)械設(shè)置
大型BLDC電機(jī)通常在電機(jī)內(nèi)部裝有霍爾傳感器。如果您有這樣的電動(dòng)機(jī),則可以跳過此步驟。另外,我了解到至少有一些CD/DVD驅(qū)動(dòng)器電動(dòng)機(jī)具有內(nèi)置霍爾傳感器。
三個(gè)霍爾傳感器用于在電動(dòng)機(jī)旋轉(zhuǎn)時(shí)進(jìn)行位置檢測,因此換向發(fā)生在正確的瞬間。我的高清電機(jī)的運(yùn)行速度高達(dá)9000 RPM(150 Hz)。由于每轉(zhuǎn)有24個(gè)換向,因此以9000 RPM的換向每280微秒發(fā)生一次。 Arduino微控制器以16 MHz運(yùn)行,因此每個(gè)時(shí)鐘周期為0.06微秒。我不知道執(zhí)行換向需要多少個(gè)時(shí)鐘周期,但是即使花費(fèi)100個(gè)時(shí)鐘,每個(gè)換向也需要5微秒。
HD電機(jī)沒有霍爾傳感器,因此有必要將其安裝到電機(jī)的外部。傳感器需要相對(duì)于電動(dòng)機(jī)旋轉(zhuǎn)進(jìn)行固定,并暴露于一系列隨電動(dòng)機(jī)旋轉(zhuǎn)而變化的磁極。我的解決方案是從同一臺(tái)電動(dòng)機(jī)上取下磁環(huán),然后將其倒置安裝在要控制的電動(dòng)機(jī)上。將三個(gè)霍爾傳感器安裝在此磁環(huán)的正上方,彼此在電機(jī)軸上相距30度(電動(dòng)機(jī)旋轉(zhuǎn)120度)。
我的霍爾傳感器安裝架由一個(gè)簡單的支架組成,該支架由三個(gè)鋁制部件組成我用快速原型機(jī)加工了三個(gè)塑料零件。如果您無權(quán)使用這些工具,那么尋找另一種制作支架的方法應(yīng)該不會(huì)太困難。為霍爾傳感器創(chuàng)建支架將更具挑戰(zhàn)性。這可能是一種方法:
1。找到一個(gè)適當(dāng)大小的塑料盤,您可以在其上小心地為霍爾傳感器加環(huán)氧樹脂。
2。在紙張上打印出一個(gè)模板,該模板的圓與磁環(huán)的半徑相同,并且三個(gè)標(biāo)記之間的距離為15度《3》。將模板粘到磁盤上,然后以模板為指導(dǎo)小心地將霍爾傳感器涂在適當(dāng)?shù)奈恢谩?/p>
步驟6:霍爾傳感器電路
現(xiàn)在,您已將霍爾傳感器正確安裝在電動(dòng)機(jī)上,將它們分別與下面所示的電路連接,并使用DMM或示波器對(duì)其進(jìn)行測試,以確保輸出與輸出信號(hào)一樣高和低。電機(jī)旋轉(zhuǎn)。我使用Arduino的5V輸出以5V運(yùn)行這些傳感器。
步驟7:校準(zhǔn)霍爾傳感器
霍爾傳感器是數(shù)字設(shè)備,它們根據(jù)檢測到的是南磁極還是北磁極而輸出高電平或低電平(1或0)。由于它們的間隔為15度,并且磁體在其下方旋轉(zhuǎn),每45度改變一次極性,所以這三個(gè)傳感器永遠(yuǎn)不會(huì)同時(shí)處于高電平或低電平狀態(tài)。隨著電機(jī)旋轉(zhuǎn),傳感器輸出以六步模式變化,如下表所示。傳感器必須與電動(dòng)機(jī)的運(yùn)動(dòng)對(duì)齊,以便三個(gè)傳感器之一精確地在電動(dòng)機(jī)換向位置改變。在這種情況下,第一霍爾傳感器(H1)的上升沿應(yīng)與相位C(高)和B(低)的組合的開啟相一致。這相當(dāng)于在橋式電路中將晶體管3和5導(dǎo)通。我用示波器將傳感器與磁體對(duì)準(zhǔn)。我必須使用示波器的三個(gè)通道來執(zhí)行此操作。我通過連接到第二個(gè)電動(dòng)機(jī)的皮帶旋轉(zhuǎn)了電動(dòng)機(jī),并測量了兩個(gè)相組合(A和B,A和C)之間的反電動(dòng)勢,這是下圖中的兩個(gè)正弦波。然后,在示波器的通道3上查看來自霍爾傳感器2之一的信號(hào)。旋轉(zhuǎn)霍爾傳感器底座,直到霍爾傳感器的上升沿與換向應(yīng)發(fā)生的點(diǎn)完全對(duì)準(zhǔn)為止(請(qǐng)參見下圖)。我現(xiàn)在意識(shí)到,只需兩個(gè)通道即可進(jìn)行相同的校準(zhǔn)。如果使用相位組合B-C的BEMF,則H2的上升沿將與B-C曲線的零交叉重合。
此處應(yīng)進(jìn)行換向的原因是要始終保持盡可能高的電動(dòng)機(jī)轉(zhuǎn)矩。反電動(dòng)勢與扭矩成正比,您會(huì)注意到,每次換向都會(huì)在反電動(dòng)勢越過下一相曲線以下時(shí)發(fā)生。因此,實(shí)際扭矩由每個(gè)相組合的最高部分組成。
如果您無法使用示波器,這是我進(jìn)行對(duì)準(zhǔn)的一個(gè)想法。對(duì)于任何想了解BLDC電機(jī)工作原理的人來說,這實(shí)際上都是一個(gè)有趣的練習(xí)。如果將電動(dòng)機(jī)A相(正相)和B相(負(fù)相)連接到電源并打開電源,則電動(dòng)機(jī)將旋轉(zhuǎn)一小段然后停止。然后,如果將負(fù)極電源線移至C相并打開電源,則電動(dòng)機(jī)將轉(zhuǎn)動(dòng)一點(diǎn)然后停止。序列的下一部分將是將正極引線移至B相,依此類推。執(zhí)行此操作時(shí),電動(dòng)機(jī)將始終在轉(zhuǎn)矩為零的點(diǎn)處停止,該點(diǎn)在圖形上與圖形與x軸交叉的位置之一相對(duì)應(yīng)。注意,第三相組合的零對(duì)應(yīng)于前兩個(gè)組合的換向位置。因此,B-C組合的零扭矩位置是您要定位H2上升沿的位置。用細(xì)標(biāo)記或鋒利的刀片標(biāo)記該位置,然后使用DMM調(diào)整霍爾傳感器安裝座,直到H2的輸出準(zhǔn)確地在該標(biāo)記上變高。即使您在此校準(zhǔn)中稍有偏離,電動(dòng)機(jī)也應(yīng)能正常工作。
步驟8:電力電子設(shè)備
三個(gè)電機(jī)相將從L6234三相電動(dòng)機(jī)驅(qū)動(dòng)器。我發(fā)現(xiàn)它是經(jīng)受時(shí)間考驗(yàn)的好產(chǎn)品。使用電力電子設(shè)備,有很多方法可以無意間炸炸您的組件,而我不是電氣工程師,所以我并不總是完全了解發(fā)生了什么。在我的學(xué)校項(xiàng)目中,我們還用6個(gè)MOSFET晶體管和6個(gè)二極管制成了自己的三相半橋。我們將它與另一個(gè)驅(qū)動(dòng)程序(Intersil的HIP4086)一起使用,但是在設(shè)置時(shí)遇到了很多問題-我們燒壞了一堆晶體管和芯片。
我運(yùn)行L6234(從而運(yùn)行了電動(dòng)機(jī))在12V
L6234具有一組不尋常的輸入來控制6晶體管半橋。而不是為每個(gè)晶體管提供一個(gè)輸入,而是為三相的每一個(gè)提供一個(gè)使能(EN)輸入,然后通過另一個(gè)輸入(IN)選擇該相中的哪個(gè)晶體管導(dǎo)通(上或下)。例如,要導(dǎo)通晶體管1(上部)和6(下部),EN1和EN3都為高電平(EN2為低電平以保持該相截止),IN1為高電平,IN3為低電平。
盡管L6234應(yīng)用筆記建議將用于控制電機(jī)速度的PWM應(yīng)用于IN引腳,但我還是決定在EN引腳上使用它,因?yàn)檎J(rèn)為將一個(gè)相位的上,下晶體管交替導(dǎo)通將是“怪異的”。實(shí)際上,同時(shí)打開兩個(gè)相的低晶體管似乎沒有錯(cuò),因?yàn)樗鼈兲幱谙嗤碾妱?,因此任何一個(gè)都不會(huì)流過電流。用我的方法,在PWM頻率上交替啟用和禁用高相,而在整個(gè)換向期間保持低相導(dǎo)通。
下面是電機(jī)驅(qū)動(dòng)器的示意圖,我已經(jīng)在其中添加了與Arduino開發(fā)板的引腳連接。我還在電池正極和電路之間加了一個(gè)2.5 Amp的保險(xiǎn)絲,在電源和接地之間加了一個(gè)100 uF的電容,以減少再生電流的紋波。該圖有點(diǎn)小,因此請(qǐng)查看L6234的文檔以獲取較大版本。
注意:Mike Anton為L6234制作了PCB,(我相信)可以代替
http://manton.wikidot.com/open:bldc-motor-driver
https://www.tindie.com/stores/manton/
第9步:再生制動(dòng)
因?yàn)榈侥壳盀橹刮疫€沒有找到很多有關(guān)三相電動(dòng)機(jī)再生制動(dòng)的信息,所以我將描述我對(duì)它的工作原理的理解。請(qǐng)注意,我不是電氣工程師,因此請(qǐng)對(duì)我的解釋進(jìn)行任何更正。
在進(jìn)行電動(dòng)機(jī)驅(qū)動(dòng)時(shí),控制系統(tǒng)以使轉(zhuǎn)矩最大的方式將電流發(fā)送到電動(dòng)機(jī)的三個(gè)相中。在再生制動(dòng)中,控制系統(tǒng)也會(huì)使轉(zhuǎn)矩最大化,但這一次是負(fù)轉(zhuǎn)矩,這會(huì)導(dǎo)致電動(dòng)機(jī)減速,同時(shí)將電流傳回電池。
我使用的再生制動(dòng)方法來了摘自美國政府Oakridge國家實(shí)驗(yàn)室的論文。這個(gè)實(shí)驗(yàn)室對(duì)汽車的電動(dòng)機(jī)做了很多研究。下圖來自另一篇論文,有助于說明其工作原理(但是,我認(rèn)為第二篇論文中的解釋部分不正確)。請(qǐng)記住,電動(dòng)機(jī)相位中的BEMF電壓會(huì)隨著電動(dòng)機(jī)旋轉(zhuǎn)而上升和下降。在該圖中,顯示了一個(gè)瞬間,其中B相的BEMF高,而A相的低。在這種情況下,電流有可能從B流到A。
再生制動(dòng)的關(guān)鍵是低端晶體管正在快速導(dǎo)通和關(guān)斷(PWM每秒切換數(shù)千次)。當(dāng)高端晶體管開關(guān)為OFF時(shí);當(dāng)?shù)途w管導(dǎo)通時(shí),電流如第一幅圖所示流動(dòng)。用電力電子學(xué)的術(shù)語來說,電路就像一個(gè)稱為升壓轉(zhuǎn)換器的設(shè)備,能量存儲(chǔ)在電機(jī)相中(維基百科上有一篇很好的文章解釋了升壓轉(zhuǎn)換器的工作原理)。當(dāng)?shù)投司w管截止時(shí),該能量被釋放,但電壓更高,電流瞬間流過每個(gè)晶體管旁邊的“反激”二極管,然后流回電池。二極管可防止電流從電池流向電動(dòng)機(jī)。同時(shí),沿該方向(與電動(dòng)機(jī)相反)的電流與磁鐵環(huán)相互作用,產(chǎn)生負(fù)轉(zhuǎn)矩,使電動(dòng)機(jī)減速。低側(cè)晶體管通過PWM進(jìn)行開關(guān),PWM的占空比控制制動(dòng)量。
在進(jìn)行電動(dòng)機(jī)驅(qū)動(dòng)時(shí),電動(dòng)機(jī)的換向在適當(dāng)?shù)臅r(shí)候從一個(gè)相組合切換到下一個(gè)相組合,以保持較高的轉(zhuǎn)矩。盡可能。再生制動(dòng)的換向非常相似,因?yàn)橐欢ǖ那袚Q模式可以使電動(dòng)機(jī)產(chǎn)生最大可能的負(fù)轉(zhuǎn)矩。
如果您在第1步中觀看視頻,則可以看到再生制動(dòng)有效,但是不能很好地工作。我認(rèn)為主要原因是我使用的硬盤驅(qū)動(dòng)器馬達(dá)是一個(gè)低扭矩的馬達(dá),因此除了最高速度外,它不會(huì)產(chǎn)生太多的BEMF。在較低的速度下,幾乎沒有再生制動(dòng)。另外,我的系統(tǒng)在相對(duì)較低的電壓(12 V)下運(yùn)行,并且由于通過反激二極管的每條路徑都會(huì)使電壓下降幾伏,因此效率也大大降低了。我使用普通的整流二極管,如果使用一些具有較低壓降的特殊二極管,則可能會(huì)獲得更好的性能。
步驟10:與Arduino的連接
下面是arduino上的輸入和輸出列表。還包括我的電路板的圖和照片。
2-霍爾1數(shù)字輸入-還將120 K電阻連接到gnd
3-霍爾2數(shù)字輸入-也將120 K電阻器連接到gnd
4-霍爾3個(gè)數(shù)字輸入-同樣是120 K電阻至接地5-IN 1數(shù)字輸出與400歐姆電阻串聯(lián)
6-IN 2數(shù)字輸出與400歐姆電阻
7串聯(lián)-IN 3數(shù)字輸出與400歐姆電阻串聯(lián)的電阻
9-EN 1與400歐姆電阻串聯(lián)的數(shù)字輸出
10-EN 2與400歐姆電阻串聯(lián)的數(shù)字輸出
11-EN 3與400歐姆電阻串聯(lián)的數(shù)字輸出
100 k歐姆電位計(jì)連接到+ 5V,兩端接地,中間為模擬引腳0。該電位器用于控制電動(dòng)機(jī)速度和制動(dòng)量。
+ 5V電源也用于運(yùn)行霍爾傳感器(請(qǐng)參見步驟5)。
步驟11 :用于Arduino的控制軟件
下面是我為Ardjuino編寫的整個(gè)程序,并帶有注釋:
/*
* BLDC_congroller 3.1。 1
* by David Glaser
*
* 3.x系列程序適用于ST L6234三相電動(dòng)機(jī)驅(qū)動(dòng)器IC
*
*順時(shí)針運(yùn)行磁盤驅(qū)動(dòng)器電動(dòng)機(jī)
*帶再生制動(dòng)
*電機(jī)速度和制動(dòng)由單個(gè)電位器控制
*電機(jī)位置由三個(gè)霍爾效應(yīng)傳感器確定
* Arduino接收來自3個(gè)霍爾傳感器的輸出(引腳2,3 ,4)*并將它們的組合轉(zhuǎn)換為6個(gè)不同的換相步長
*在引腳9,10,11上以32 kHz的PWM輸出(分別對(duì)應(yīng)于EN 1,2,3
* 3 DO引腳5,6,7(IN 1,2,3)
*模擬輸入0連接到電位計(jì)以更改PWM占空比并更改
*電動(dòng)和再生制動(dòng)。
* 0-499:制動(dòng)
* 500-523:滑行
* 524-1023:電動(dòng)
*注釋了很多行,這些行用于
*將各種值打印到串行連接。
*/
int HallState1;//三個(gè)霍爾傳感器(3,2,1)的變量
int HallState2;
int HallState3;
int HallVal = 1;//所有3個(gè)霍爾傳感器的二進(jìn)制值
int mSpeed = 0;//電動(dòng)機(jī)的轉(zhuǎn)速等級(jí)
int bSpeed = 0;//制動(dòng)水平
int油門= 0;//此變量與模擬輸入一起使用,以測量油門電位器的位置。
void setup(){
pinMode(2,INPUT);//Hall 1
pinMode(3,INPUT);//Hall 2
pinMode(4,INPUT);//Hall 3
//L6234電動(dòng)機(jī)驅(qū)動(dòng)器的輸出
pinMode(5,OUTPUT);//IN 1
pinMode(6,OUTPUT);//IN 2
pinMode(7,OUTPUT);//IN 3
pinMode(9,OUTPUT);//EN 1
pinMode(10,OUTPUT);//EN 2
pinMode(11,OUTPUT);//EN 3
//Serial.begin(9600);//如果要使用串行連接,請(qǐng)取消注釋此行
//還要在程序末尾取消注釋Serial.flush命令。
/*在引腳9,10和11
上設(shè)置PWM頻率//一部分代碼來自
http://usethearduino.blogspot.com/2008/11/changing-pwm-frequency-on-arduino.html
*/
//為引腳9,10設(shè)置PWM至32 kHz
//首先清除所有三個(gè)預(yù)分頻器位:
int prescalerVal = 0x07;//創(chuàng)建一個(gè)名為prescalerVal的變量,并將其設(shè)置為等于二進(jìn)制數(shù)“ 00000111”數(shù)字“ 00000111”數(shù)字“ 00000111”
TCCR1B&=?prescalerVal;//并用二進(jìn)制數(shù)“ 11111000”將TCCR0B中的值與
//現(xiàn)在設(shè)置適當(dāng)?shù)念A(yù)分頻器位:
int prescalerVal2 = 1;//將prescalerVal設(shè)置為等于二進(jìn)制數(shù)“ 00000001”
TCCR1B | = prescalerVal2;//或用二進(jìn)制數(shù)“ 00000001”對(duì)TCCR0B中的值進(jìn)行操作
//將引腳3,11設(shè)置為32 kHz至32 kHz(此程序僅使用引腳11)
//首先清除所有三個(gè)預(yù)分頻器位:
TCCR2B&=?prescalerVal;//與TCCR0B中的值一起使用二進(jìn)制數(shù)“ 11111000”
//現(xiàn)在設(shè)置適當(dāng)?shù)念A(yù)分頻器位:
TCCR2B | = prescalerVal2;//或用二進(jìn)制數(shù)“ 00000001”對(duì)TCCR0B中的值進(jìn)行////首先清除所有三個(gè)預(yù)分頻器位:
}
//PRGROM的主循環(huán)
void loop(){
//time = millis();
//打印自程序啟動(dòng)以來的時(shí)間
//Serial.println(time);
//Serial.print(“ ”);
節(jié)氣門= AnalogRead(0);//油門電位器的值
mSpeed = map(throttle,512,1023,0,255);//電機(jī)映射到電位計(jì)的上半部
bSpeed = map(throttle,0,511,255,0);//鍋底一半的再生制動(dòng)
//mSpeed = 100;//用于調(diào)試
HallState1 = digitalRead(2);//從1號(hào)大廳讀取輸入值
HallState2 = digitalRead(3);//從2號(hào)大廳讀取輸入值
HallState3 = digitalRead(4);//從3號(hào)大廳讀取輸入值
//digitalWrite(8,HallState1);//當(dāng)對(duì)應(yīng)的傳感器為高電平時(shí)LED點(diǎn)亮-最初用于調(diào)試
//digitalWrite(9,HallState2);
//digitalWrite(10,HallState3);
HallVal =(HallState1) +(2 * HallState2)+(4 * HallState3);//計(jì)算3個(gè)霍爾傳感器的二進(jìn)制值
/*Serial.print(“H 1:“);//用于調(diào)試
Serial.println(HallState1);
Serial.print(“ H 2:”);
Serial.println(HallState2);
Serial.print(“ H 3: “);
Serial.println(HallState3);
Serial.println(”“);
*/
//Serial.println(mSpeed);
//Serial.println(HallVal);
//Serial.print(” “);
//監(jiān)視晶體管輸出
//delay(1000);
/* T1 = digitalRead(2);
//T1 =?T1;
T2 = digitalRead(4);
//T2 =?T2;
T3 = digitalRead(5 );
//T3 =?T3;
Serial.print(T1);
Serial.print(“ t”);
Serial.print(T2);
串行。 print(“ t”);
Serial.print(T3);
Serial.print(“ n”);
Serial.print(“ n”);
Serial.print (digitalRead(3));
Serial.print(“ t”);
Serial.print(digitalRead(9));
Serial.print(“ t”);
串行.println(digitalRead(10));
Serial.print(“ n”);
Serial.print(“ n”);
//延遲(500);
*/
//電機(jī)換向
//每個(gè)二進(jìn)制數(shù)都有一個(gè)對(duì)應(yīng)于打開的不同晶體管的情況
//位數(shù)學(xué)用于更改輸出的值
//對(duì)于本教程在Arduino的位上:http://www.arduino.cc/playground/Code/BitMath
//PORTD包含L6234驅(qū)動(dòng)器上的IN引腳的輸出
//,該輸出確定是高位還是低位使用各相的晶體管
//EN引腳的輸出由Ard控制uino命令A(yù)nalogWrite,其中
//設(shè)置PWM的占空比(0 = OFF,255 = ON或由電位計(jì)控制的油門值)。
if(throttle》 511){
開關(guān)( HallVal)
{
案例3:
//PORTD = B011xxx00;//引腳0-7 xxx的所需輸出是霍爾輸入,不應(yīng)更改。
PORTD&= B00011111;
PORTD | = B01100000;//
AnalogWrite(9,mSpeed);//A相上的PWM(高端晶體管)
AnalogWrite(10,0);//關(guān)閉B相(占空比= 0)
AnalogWrite(11,255);//C相導(dǎo)通-占空比= 100%(低壓晶體管)
斷開;
情況1:
//PORTD = B001xxx00;//引腳0-7
的所需輸出PORTD&= B00011111;//
PORTD | = B00100000;//
AnalogWrite(9,mSpeed);//A相上的PWM(高端晶體管)
AnalogWrite(10,255);//(低端晶體管)上的B相
analogWrite(11,0);//關(guān)閉階段B(占空比= 0)
中斷;
情況5:
//PORTD = B101xxx00;//引腳0-7
的所需輸出PORTD&= B00011111;//
PORTD | = B10100000;
模擬寫(9,0);
模擬寫(10,255);
模擬寫(11,mSpeed);
中斷;
情況4:
//PORTD = B100xxx00;//引腳0-7所需的輸出
PORTD&= B00011111;
PORTD | = B10000000;//
模擬寫(9,255);
模擬寫(10,0);
模擬寫(11,mSpeed);
中斷;
情況6:
//PORTD = B110xxx00;//引腳0-7所需的輸出
PORTD&= B00011111;
PORTD = B11000000;
責(zé)任編輯:wv
-
微控制器
+關(guān)注
關(guān)注
48文章
7576瀏覽量
151721 -
BLDC
+關(guān)注
關(guān)注
207文章
803瀏覽量
97034 -
位置傳感器
+關(guān)注
關(guān)注
3文章
270瀏覽量
27527 -
Arduino
+關(guān)注
關(guān)注
188文章
6473瀏覽量
187423
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論