DesignSpark Electrical Logolinkedin
Menu Search
Ask a Question

15 Feb 2017, 4:13

Arduino的步進馬達控制(繁體)

 

翻譯自ChelseaBack的 Arduino的步进马达控制

 

 

什麼是步進馬達?

步進馬達是一種透過用離散的方式來移動的電磁裝置,它是由幾個線圈來組成不同的” 相”。當每個階段能依次通電後,步進馬達就能實現十分準確的定位或速度的控制,這亦是步進馬達常被運用於高精度的應用如打印機的原因。

單極和雙極

步進馬達具有兩種不同的類型,分別是單極和雙極。它們之間最大的區別就是兩種不同類型都有各自的捲繞裝置,而且它們各自的捲繞裝置是會影響它們的步進馬達的控制方式。

單極步進馬達

單極步進馬達是由具備中心軸頭的單捲繞組所組成的。捲繞組的每個部份都是根據磁場的方向而被接通,因為它內裡的磁極是能夠在不轉變電流的方向的情況下反轉。試舉例說明一下,雖然在雙相單極步進器上有6個接點,每相3個,但有兩個公共點是能夠在內部連接起來,這意味著只有5個接點。

雙極步進馬達

此類型的馬達與單極步進馬達不同,它每相只有一個捲繞組,而且它沒有軸頭。所以為了能夠轉變磁極,捲繞組中的電流需要被反轉。這意味著雙極步進器運行時比較複雜。雖然如此,但它亦有其好處,縱然雙極步進馬達和單極步進馬達是相同重量,但是它具備較好使用的捲繞組,因此雙極步進馬達比單極步進馬達更強大而且單極步進馬達在相同空間中需要達兩倍的導線量,並且在任何時間下亦只能使用其一半,換言之單極步進馬達只有50%的效率。

 

對於單極性和雙極性,它們各自擁有幾種不同的捲繞裝置,如下圖所示

Image source: Osmtec.com

Arduino的馬達擴展板

此馬達擴展板是基於L298驅動器,它能驅動一個步進馬達或者是兩個直流電的馬達。如具備了此擴展板,你能夠獨立地控制一個或更多個馬達的速度和方向。當你使用擴展板時能直接將馬達連接到Arduino板,而不需要麵包板或任何使用Arduino時通常需要的額外電路。

 

在我的項目中,我決定用Cliff Electronic的單極雙極,單極步進馬達,它是具備了5個接點的步進馬達。但是當這個公共點被忽視的時侯,不論是它的性能或是整體都可當成雙極步進馬達。

由於此馬達需要一個12伏特的電壓,因此我必須把擴展板裡面的電線和ArduinoUNO分開,以避免任何可能的損害(詳情在Arduino 馬達擴展板的網頁中提供)。亦因為這個原因,我無法直接使用12伏特的電壓直接插入ArduinoUNO板,所以我把它們改裝,令它們能同樣被充電。

找出在馬達中的線圈

廠商提供的馬達資料表中能清楚顯示出每一條電線是代表什麼,所以我知道藍色和黃色是一組線圈,而粉紅色和橙色則是另一組線圈,而紅色是兩者的公共點舉例來說: 如果我把該馬達看成是單極步進的馬達,我會將一組線圈連接到通道A,而把另一組的線圈連接到通道B,並同時保持紅色的電線不會連接到任何一組線圈,因為這是一個單極的步進馬達,而紅色的電線是它們的公共接點。

如果資料表是沒有說明每一條電線是代表什麼,自己也十分容易確定。首先把萬用表設置為歐姆,線圈的某部分將顯示出電阻的數值,線圈的軸頭的數值會是電阻的一半。所以當軸頭的數值是0的時侯,則說明了這兩個是獨立的線圈。

 

運行中的馬達

因為我的馬達已被連接,我需要做的下一步就是找到代碼,所以我有一個粗略的想法。我在Instructables中的Arduino馬達擴展板教程中找到了一些代碼,這使我能夠驅動我的馬達。我真正想做的是在所使用的sketch中包括Stepper.h庫,但這個例子中沒有使用這個庫。最好就是使用官方的資料庫,所以我在一個Arduino論壇找了另一個sketch,在這個sketch中,馬達能在一個方向旋轉360度,然後在相反方向也可以旋轉360度。

 

在這個sketch中,我需要指定我使用的馬達每一轉的步數,但我必須先計算出來,廠商的資料表規定了馬達是5.625和11.25度的增加量。因此我用它來確定每一轉的步數,所以我們需要將360除以角度。由於這個馬達也是依賴齒輪來轉動的,而且齒輪比為1:64,因此我們需要將轉數乘以齒輪比。像這樣:

360 / 11.25×64 = 2048 360 / 5.625×64 = 4096

一開始我在sketch中使用每轉4096步,假設馬達的角度為5.625度。但當我這樣做時,它逆時針旋轉了兩次,然後順時針旋轉了兩次。很明顯這裡我假設了錯誤的角度,因為它做了兩個旋轉,而且5.625是11的一半,當在分區中使用時它會提供兩倍的答案。我把每轉的步數改為2048,這時馬達順時針旋轉一圈,然後逆時針旋轉一圈。由於把馬達的速度設置為二似乎移動得太慢,因此我把速度從二改為五。

 

直到現時,我看著我使用中的代碼,有一些代碼似乎並不是完全有意義。我不明白為何dirA和dirB的位置都沒有被使用或設定過,為什麼要把它們也列出來。我曾討論這兩行,並再次上傳sketch,我也認為這些代碼不是必要的,所以我刪除它們。接下來,我再次添加我這些行,但上面的步進庫初始化並將其用作定義。

然後我看了一下Stepper庫的源代碼,看到那裡並沒有任何一組代碼來控制不同的插頭的位置。原因是控制插頭的位置的線路全被定義為輸出和被設定為低邏輯,變成是防止其浮動的預防措施。

我覺得我已經學到了很多關於步進馬達的知識,它非常有趣,而且我了解到它們是如何運作,以及各種捲繞組的安排是如何影響他們的操作。我真的很興奮及希望能夠在未來的項目中再次使用它們。

Blogger, DesignSpark Team

15 Feb 2017, 4:13