步進電機驅動詳解

2021-10-18 22:15:28 字數 2032 閱讀 6098

最近在使用步進電機的時候,發現細分驅動器太大了,而且只是會使用細分驅動器的話並不能代表你會用步進電機了,於是就想找個小一點的驅動自己編寫**驅動步進電機,於是l298n模組就符合我的要求了,它不僅小而且還帶有兩路大功率電機的輸出,把他接到步進電機的四相剛剛好!

按照慣例,先上效果圖

可以看出,我能夠精確控制步進電機旋轉360度以及穩定速度旋轉。下面我來給出教程啦

不知道工作原理的話是寫不出驅動程式的,在這裡我簡單說說步進電機通過l298n的工作原理

如圖所示分別代表步進電機的四根線a+ a- b+ b- 。初中物理應該學過,通電導線會產生磁場,所以我們只要改變圖中所示電流方向就可以得到不同方向的磁場,圖示線圈即為步進電機的定子。

接下來就是圖示所示的執行了,因為我們改變了電流方向,即不斷改變定子的磁場,根據異極相吸的道理,轉子就會跟隨著變化的磁場而轉動,這就是步進電機旋轉的原理。然後我們怎麼控制他的角度呢?

如圖所示,我們只要控制好a+ a- b+ b-的高低電平就可以控制步進電機旋轉特定的角並停下,要是無限迴圈就會一直勻速轉動啦。對應的真值表如下

在這裡肯定有很多小夥伴有疑問了,你這裡不是8拍轉一圈嗎?那你的步進值不是360/8=45度嗎?為什麼說電機的步進值是1.8度那麼小呢?

這裡我就要科普一下了,上面是步進電機的實現原理,現實的步進電機是比較複雜的,因為轉子的周圍還有很多小齒,比如1.8步進值的電機的話轉子齒為50,所以公式是360/50/8=0.9為半拍步進值。360/50/4=1.8才是步進值

我們知道,微控制器的io口雖然可以輸出pwm波,但是他不能帶動大功率的東西比如電機,而且電平也只有3.3v。於是乎我們就需要乙個功率放大的模組比如l298n。它能夠通過微控制器的控制而產生方向與大小可變的電流電壓輸出,可以給步進電機的四相產生相應的脈衝。

in1和in2分別接入微控制器的兩個pwm輸出腳。通過占空比來控制輸出的電壓大小,比如說l298n接入12v電源,我in1輸入50%占空比的pwm波,in0輸入電平為0,則輸出口a+ a-產生正6v的電壓。因為這個模組有兩路,於是我們便可以輸出步進電機所需的4種電平來驅動,這就是驅動原理

我選用了tim1的1.2通道和tim的1.2通道分別接l298n的pwm1.pwm2.pwm3.pwm4

我們就初始化相應的引腳和時鐘,因為是占空比控制所以頻率無所謂,這裡我選用了7.5khz,開發板時鐘源是240m

不會初始化定時器使用io口輸出電平的可以去網上搜尋學習下

接下來就是重要部分的模擬步進電機的8拍執行了

我們確定好乙個占空比之後,引腳輸出pwm波視為邏輯1,不輸出pwm波視為邏輯0。於是我們就可以這樣實現步進電機的邏輯輸入了

這裡的節拍輸入間隔我選擇了1000us,因為經過實測這樣比較平滑,不會出現劇烈抖動或者失步。

然後就是主函式了。我們怎樣實現某個角度的控制呢?

因為輸入乙個半拍脈衝就會旋轉0.9度,根據這個就可以精確計算所需要的角度了,也可以進行死迴圈使得電機勻速運動。旋轉完成之後記得失能電機,不然一直停著不轉電能無法被正確釋放會產生不好的後果。

步進電機驅動方式總結

方式一 uln2003驅動 適用範圍 最大驅動電流 0.5a 驅動5v 直流電機,5v二相六線線步進電機,12v二相六線線步進電機 短時間可用,發熱量大,注意散熱 無散熱片 注 二相四線線步進電機不能用 uln2003 驅動,需要用 h橋電路來驅動,或者使用專用晶元 二相四線步進電機 uln2003...

A4988驅動步進電機

a4988一般用arduino來驅動,我是用stm32f103驅動的。我用的是 驅動比較好寫,首先要弄清楚接線方式。io初始化 void motor init void 細分 x 1 全步 x 2 半步 x 4 1 4步 x 8 1 8步 x 16 1 16步 void step micr u16 ...

步進電機 什麼是步進電機?

1.什麼是步進電機 步進電機是將電脈衝訊號轉變為角位移或線位移的開環控制電機,是現代數字程式控制系統中的主要執行元件,應用極為廣泛。在非超載的情況下,電機的轉速 停止的位置只取決於脈衝訊號的頻率和脈衝數,而不受負載變化的影響,當步進驅動器接收到乙個脈衝訊號,它就驅動步進電機按設定的方向轉動乙個固定的...