本教程介紹步進電機驅動和細分的工作原理_第1頁
本教程介紹步進電機驅動和細分的工作原理_第2頁
本教程介紹步進電機驅動和細分的工作原理_第3頁
本教程介紹步進電機驅動和細分的工作原理_第4頁
本教程介紹步進電機驅動和細分的工作原理_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、本教程介紹步進電機驅動和細分的工作原理 ,以及stm32103為主控芯片 制作的一套自平衡的兩輪車系統,附帶原理圖pcb圖和源代碼,有興趣的 同學一起來吧 .本系統還有一些小問題 ,不當之處希望得到大家的指正 .一. 混合式步進電機的結構和驅動原理電機原理這部分不想講的太復雜了, 拆開一臺電機看看就明白了。電機的轉子是一個永磁體,它的上面有若干個磁極 SN組成,這些磁極固定的擺放成一定角度。 電機的定子是幾個串聯的線圈構成的磁 體。出線一般是四條線標記為 A+, A-,B+, B-。A相與B相是不通的, 用萬用表很容易區分出來,至于各相的 +-出線實際是不用考慮的, 任意 一相正負對調電機將反

2、轉。另外一種出線是六條線的只是在 A相和B相 的中間點做兩條引出線別的沒什么差別, 六出線的電機通過中間出線到 A+或 A-的電流來模擬正向或負向的電流,可以在沒有負相電流控制的電 路中實現電機驅動, 從而簡化驅動電路, 但是這種做法任意時刻只有半 相有電流,對電機的力矩是有損失的。 步進電機的轉動也是電磁極與永 磁極作用力的結果,只不過電磁極的極性是由驅動電路控制實現的。我們做這樣的一個實驗就可以讓步進電機轉動起來。 1 找一節電 池正負隨意接入到A相兩端;然后斷開;(記為A正向)2再將電池接入到 B相兩端;然后斷開;(記為B正向)3電池正負對調再次接入 A相;然后 斷開;(記為A負向)4保

3、持正負對調接入B相;然后斷開;(記為B負向), 如此循環你會看到步進電機在緩慢轉動。 注意電機的相電阻是很小的接通時近乎短路。我們將相電流的方向記錄下來應該為:A+B+A-B-A+,,如果我們更換接線順序使得相電流順序為A+B-A-B+A+,這時我們會看到電機向反方向運動。 這里每切換一次相電流電機都會轉動一個很小的 角度,這個角度就是電機的步距角。 步距角是步進電機的一個固有參數, 一般兩相電機步距角為 1.8 度即切換 200 次可以讓電機轉動一圈。 這里 我們比較正反轉的電流順序可以看出A+和 A-;B+和B-的交換后的順序和正反順序是一致的, 也就是前面所說的”任意一相正負對調電機將反

4、 轉”。以上為四排工作方式, 為了使相電流更加平滑另外可以使用八排 的工作方式即:A+;A+B+;B+;B+A-;A-;A-B-;B-;B-A+;從前往后循環正轉,從后往前循環反轉。為了用單片機實現相電流的正負流向控制必須要有一個H橋的驅動電路,這種帶H橋的驅動模塊還是很多的,比較便宜的是晶體管H橋比如L298N,晶體管開關速度比較慢,無法驅動電機高速運動。有些模 塊將細分控制電路也包含在內,我們也不用這種, 因為我們的細分由軟 件控制。實際應用中使用 ST的mos管兩橋驅動芯片L6205 一片即可驅 動一臺步進電機。有了 H橋通過PWM就可以控制相電流大小,改變輸入 極 IN1、IN2 的狀

5、態(參看手冊第 8 頁)可以控制相電流的方向。二. 細分的原理和輸出控制從這里開始重點了,別的地方看不到哦。一個理想的步進電機電流曲線應該是相位相差 90 度的正弦曲線如下圖:圖中藍色線時A相電流,紅色線是B相電流。如果把A相正負極 值視為A+A-, B相正負極值視為B+B-,比較一下四拍方式正轉 A+B+A-B- 和反轉A+B-A-B+不難看出四排方式實際上是用一個脈沖來代替一個正 弦半周期,相位點從左到右變化則電機正轉,從右到左電機反轉。類似 的我們把八拍方式 A+;A+B+;B+;B+A-;A-;A-B-;B-;B-A+; 放到曲線里也 可以找到對應點, 圖中標出了各拍的相位點 1, 2

6、, 3,, 不難看出用 A+B+ 代替第2拍點用B+AY弋替第四拍點都是近似的做法。那么這種近似和理 想情況的電流的差值去哪里了呢?這些電流被無謂的消耗掉了而且多 余的電流會引起電機轉動的不平穩。 為什么要細分呢?實際細分的終極 目標就是在正弦的周期中插入若干個點使得相電流接近正弦變化, 細分 可以提高定位精度和電機運轉的平穩性。由此我們拋開細分不談,如果你能調制出兩條相差為 90 度的正 弦波形就是理想的步進電機驅動器了, 調制出的正弦波形的頻率就是步 進電機的轉速,正弦的幅值就是步進電機的轉矩。 這個聽起來貌似不難 啊,但是你不要忘了調制出的正弦是有要求的。第一要有一定的驅動能 力步進電機

7、的功率越大驅動能力要求也越大。第二要能夠保持 90度的 相差前提下改變正弦的頻率,這樣才能夠驅動電機按不同的轉速運轉, 步進電機的旋轉方向實際上是兩條正弦波的相位點順序。 第三最好能夠 調幅,調整幅值能夠實現電機的恒力矩輸出, 調幅的實際意義還不止這 些后面再講。總之一句話就是通過pwm調制輸出可以調頻調幅的兩路固定相差的正弦波。 (如果是三相步進電機應該是相差各位 120 度的三路 正弦波,原理是一樣的。)上面那個圖和兩相步進電機驅動的關系可能有些疑惑 真的是這 樣的嗎 ?, 我們在這里再安排一個試驗。我們知道電動機和發電機是兩 個可逆的過程,因此我們可以用步進電機來當發電機。很簡單的實驗,

8、 我們把步進電機的兩相引線接到雙蹤示波器輸入上, 然后找個電機帶著 轉軸運轉 (我是用一個手電鉆夾住電機的轉軸,我的這個手鉆是可以正 反轉的)。保持穩定的轉速,你會在示波器上看到上面那個圖:即兩路 相差固定的完美的正弦波,當轉速增大時幅值和頻率都有變化 (線性關 系),并且正轉和反轉時兩路正弦相位位置不同,如果你能夠確定轉速 的話你還可以驗證以下周期、轉速、步距角之間的關系。步進電機的驅動要比逆變器、伺服電機驅動復雜的地方在于需 要大范圍的變頻, 如果能做好這個步進電機的驅動器其它那兩個就不成 問題了,至少在波形調制上絕對沒問題了,它們的基本原理是通的。下面我們展開正弦調制的討論, 這部分是核

9、心的部分將占很大的 篇幅,你放心我絕對不會羅列一大堆的數學式在教程里,不然怎么能叫 超級無敵呢?教程超級無敵, 這個 stm32 實現的驅動程序也是超級無敵 的(吼吼)。但是“載波比、spwm死區、單雙極性”這幾個詞如果你 覺得很陌生的話建議你還是要看看電力電子課程的相關章節基本概念 還是要有的。三. spwm運算和輸出Spwm的產生可以分為軟件方法和硬件方法,硬件方法通過硬件產 生一路三角波一路正弦波,經過一個比較器比較正弦波幅值與三角波幅 值的關系即可得到spwm波。這種方法也應用于很多 spwm集成芯片 .硬件方法在波形產生上不需要軟件參與,并且調頻和調幅控制上都是比較簡單的。硬件方法的

10、功能和性能取決于芯片本身,對于比較復雜的應用上會受到限制。軟件方法的思路是使得pwm波以spwm的脈寬數據變化濾波后就可 以得到正弦波形,通過計算得到占空比的波形數據,按波形數據調整pwm 其實軟方法和硬方法也并不是絕對的,比如ti的dsp芯片內部的spwm發生器,他的做法是在內存中存儲一張正弦表,然后用一個和定時器時 鐘同步的計數器正負計數模擬一個三角波,每個時鐘將正弦表的值與三角計數值作比較輸出即得到 spwm實際上可以看成是一種半軟件半硬件 的做法。軟件方法的優勢在于成本低且更靈活,成本低不用說了,靈活 性上舉個例子:調制正弦波性的極性是由獨立的控制位實現的(雙極性),如果輸出標準的正弦

11、波形硬方法需要三角波發生器和正弦波發生器的 起始點精確對齊,這在硬件電路實現上需要附帶鎖相環電路才能保證, 而軟件方法則不需要任何附加操作。現在為了改善步進電機的驅動性能, 我們希望極性翻轉點落后輸出幾個微秒,要做到這一點硬件方法改動肯 定是難上難,而軟件方法上只需要增加個定時滯后輸出就行了。為了減少運算開銷也可以使用查表法,把計算好的spwm數據存儲在rom里,按順序輸出表中的值即可。這種方法的數據計算可以在pc機上通過matlab軟件 進行,將數據算好粘貼到源程序中就可以了。查表法的局限在于參數的變化和存儲 開銷的矛盾,參數越復雜占用存儲空間越大。(1) 三角波向鋸齒波的轉換載波為三角波時

12、輸出的是一個左右不對稱的pwm波形,只有這種波形能夠調制出半周期對稱的正弦波,這種方法稱為非對稱的自然采樣法。其它方法(規則采樣 等效面積,)都是為了減小計算量或不得以而采取的近似方法。非對稱pwm開點與關閉點沒有必然關系,必須由中央對齊的pwm模式通過一個周期的兩次更新來輸出。三角波可以看成是兩個鋸齒波的組合,因此我們可以通過鋸齒波的數據來簡化程序 結構。我們比較下面三張圖:圖1是一個鋸齒波幅值為1,載波比N=16,正弦幅值0.5,正弦 與鋸齒波相差為半個鋸齒波周期; 圖 2 是圖 1 水平翻轉的結果;圖 3 是 圖1和圖2的疊加結果。圖三中看到三角波形的spwm數據了嗎?沒錯就這么簡單,

13、鋸齒波正弦幅值比為 2:1,相差半個鋸齒波周期, 計算出 來的數據首尾組合成三角波數據。 算法上就很簡單了, 假設數組中存放 上述的鋸齒波spwm數據,編號015共16個,依次取0,1,2,,15 為三角波形開點輸出數據,則反向取 15,14,13,,0 為三角波形關點 數據即可。特別的如果載波比為奇數時三角波也為奇數,中間的數自然 和自己組合的數據仍然是正確的。注意這里提及的方法可以把三角波形的計算轉換為鋸齒波, 但并 不能減少計算量, 因為如果是偶數個三角波只要計算四分之一周期就夠 了其他的是對稱的, 而鋸齒波形數據需要計算半個周期。至此我們可以 使用鋸齒波的方法計算按三角波的數據輸出。(

14、2) spwm 迭代運算為計算spwm占空比首先要求得鋸齒波斜線與正弦交點,即方程KX+B二Y與Sin(X)=Y的解。這個方程是一個超越方程,只能通過迭代的 方法計算。我們將直線方程變為 X=(Y-B)/K,首先任取一個X值(這個 值就是迭代初值),將它帶入 Sin(X)求一個Y值再將Y值代入(Y-B)/K 求一次X值,再將X帶入Sin(X)求一個丫值,如此反復若干次后可以得 到一個結果就是方程式的解,這個就叫做迭代法。迭代次數越多;迭代 初值越接近結果精度越高。每一組數據計算有這樣幾個參數1:正弦幅值(三角幅值與之成比例)2:載波比N值即半周期中三角波個數。另 外pwm的占空比即定時器的通道

15、值是和 pwm的周期值有關系的,因此為 了計算定時器通道值還需要一個周期值,對于 stm32f 這個值就是定時 器ARF寄存器的值,它決定pwm周期(或頻率)。附件中有個 matlab_spwm.rar , matlab下計算定時器spwm數值和繪圖的小工具上面 幾個圖就是用它畫的,開始部分可以置參數 s_M=32768/65536 %正弦波幅值比 01 s_N=16% 半周期三角波個數s_Pre=16384% 單片機定時器模數值執行分為三部分,計算spwm數據;將數據按周期值換算為定時器設定 值;畫圖; 計算定時器設定結果在 TimerSetting 中,復制粘貼替換 tab 字符成逗 號就

16、行了,下面是上述參數的計算結果:1780 5246 8444 11221 1346115088 16063 16384 16075 1518213764 11893 9645710243461463(3)spwm 實時運算的優化 如前所述簡單的應用查表法就可以解決了但是復雜一點的功能 就不能滿足要求了, 比如步進電機大范圍調速、 不同轉速下恒力矩輸出、 恒加速運動等等。 網上有很多文章介紹自然采樣法的數學方法,并給出 了各種優化算法,這些算法力圖精確求解三角方程與正弦方程的交點, 由于運算中帶有大量的浮點運算若沒有 dsp 或高速浮點處理芯片的支持 必然會造成運算時間過長對實時調控產生影響。

17、實際上我們需要的計算 精度和每載波周期可能的開關點數量有關系,此數值用C來表示,稱其為控制比(下文同)數值上 二載波周期/pwm周期,同步調制方式中此值 為整數,可以理解為用多少個 pwm周期控制一個載波周期。pwm頻率實 際上是開關電路的極限頻率或最理想工作的頻率, 假設每載波周期可能 的開關點數量為 512個則需要二進制的 9位計算精度如果再加一位存疑 位最多計算10位就夠了。如果采用數據類型IEEE32浮點數迭代運算將 得到 24 位(二進制)精度的計算結果,與實際需要相差甚遠 , 也就是說 你算了半天大部分是沒有意義的計算 , 這種計算資源浪費發生在每一次 運算中,因此累計起來就比較驚

18、人了。從另一個角度看由于pwm頻率的限制有高精度的計算結果也無法實施高精度的開關控制 , 這么說就好理 解了。對計算采取一定的優化是必須的它將直接影響系統的實時性能。一個簡單的方法就是在計算有初值后確定數據變動方向逐個可能值比 較,另一個方法就是去浮點迭代計算, 這兩個方法在單片機上實現都可 行有機會再發文討論不再詳述了。四. 步進電機運行控制 至此假設我們可以很快的在單片機上進行實時的迭代運算了。 迭代 計算一個半周期的spwm其輸入的原始參數只和三個數值有關:1. M 正弦的幅值這個值將決定步進電機的相電流大小 , 也就是步進 電機的輸出力矩。步進電機的優點之一是它的低速性能 , 當步進電

19、機低 速運轉時轉子始終受到磁場力的牽引轉動 , 這個力的大小直接取決于勵 磁電流的大小 , 很小的速度下卻可以用很大的力牽引轉動。而直流電機 的低速運動只能靠減小勵磁電流實現 , 實際上就是小力矩實現低速 , 這 樣控制就不可能很精確特別是啟停階段尤其麻煩。 步進電機在高速時力 矩下降很快這個原因也不難理解 , 因為在步進電機勵磁線圈里有多組磁 極快速劃過產生很大的感生電動勢抵消了驅動的電壓致使勵磁電流變 小力矩變小。 為了改善高速性能解決辦法只有一個提高工作電壓。 根據 電機轉速自動調整相電流的大小就可以實現恒定的力矩輸出了 , 即低轉 速小幅值高轉速大幅值。2. 載波比N和控制比C,這兩個

20、參數和調制頻率 F的關系是:F*2C*2N二TF(TF是定時器的時鐘頻率) 我們慢慢來解釋一下這個式子 , 調制頻率就是我們實際想要的電機轉速 從上面式子可以看出要讓電機速度增加有兩個方法即減小C或減小N(TF也是可以變的暫不考慮);C實際上就是定時器的模數值(ARR),他的含義是使用幾個定時器時鐘周 期產生一個pwm周期,前面的2是由于定時器工作在中央對齊模式下,定 時器+-計數一輪產生一個完整的三角波周期。ARR的取值范圍不可以太小,因為需要定時器中斷來更新個通道的值 ,太小的數值兩次更新時間 過短而無法實現計算和更新步計數等操作。ARR的值如果太大則輸出的pwm頻率過低效果不佳。3. N

21、 是載波比也就是半周期的三角波的數量 , 他的含義是使用幾個 pwm 周期調制出一個正弦周期 , 其實也就是我們常說的細分數 , 它決定一個 正弦周期 (一個步距角 )內可以控制的位置點的數量。 在常見的驅動器中 這個數值都是由撥碼開關事先設定的 , 工作中是一個固定值 , 原因是硬 件電路無縫的調整細分度幾乎是不可能的。 軟件運算則沒有這個問題 ,N 的取值可以是任意的,唯一受影響的就是極性控制,上面算式里N前面的2含義是正弦正半周期和負半周期。 N的取值還要考慮內存和計算占 用;迭代算法如果有接近結果的初始值將使得運算效率大幅提高, 因此 對于有初始值的運算每一個計算點都要有存儲空間占用,

22、過大的N值要考慮內存資源,如果無初值的計算則要考慮計算資源。特別的當N值變化時初值會與真實值有差距,所以應盡量減少N的變動。和步進電機轉速有關系的參量在運行時都是已知的, 因此任意時刻 電機的轉速都是可以計算的, 如果電機能夠平穩運行 (沒有堵轉或丟步 的情況)是不需要其它測速碼盤裝置的,閉環控制就更加沒必要了。話 又說回來如果丟步或堵轉了閉環能解決嗎? 五.步值計數產生AB極性邏輯和正反轉網上看到的步進電機驅動程序千篇一律的都是數組存儲 io 狀態 查表輸出,帶細分更少。先來梳理一下目前已經現在做到的內容,內存 中有一個數組存放整個正弦半周期的實時運算的spwm數據,這個數據是根據當前的pw

23、m周期折算過,因此每個pwm周期依次將數組內容賦值 給定時器通道值就可以在定時器通道管腳輸出正弦變化的pwmTo另外使用一個( l6205 是兩個,也可以用非門) io 口來控制極性輸出,比如 高電平輸出正弦負半周,低電平輸出正弦正半周。接下來需要安排一個合理而簡單的數據結構把步進計數、 細分和 極性控制合為一體。首先我們用一個 s32 stepcounter 全局量來做步進 計數, 它的數值與步進電機的實時位置對應,這個變量是一個很關鍵的 變量,因為任意時刻的AB兩相spwm數據輸出點和極性控制信號都由它 產生。假設我們把它的低八位視為細分步計數 (256為最大細分) ,則這 個計步值除 2

24、56對應整步位置。另外安排一個 u8 microstep 用來控制 細分步進 , 它的取值和當前的細分度有關,如果 256細分則 microstep=1,128 細分 microstep=2, 以此類推 . 如果電機正轉前進一個 微步則 stepcounter+=microstep ,如果反轉一個微步則 stepcounter-=microstep (微步進這部分可以放到中斷程序里), OK 正反轉很簡單,微步前進自動更新整步。 關鍵點在于如何使用這個計數 值產生兩個相位的極性信號輸出控制和A相B相的spwm數據位置,這里解釋一下為什么會希望控制都由這一個變量產生: 因為這樣的程序最 簡單,雖然這里講一大堆但是在編程實現時你就看到了就幾行搞定;不 容易出錯,效率最高,你可以想象的到如果涉及的變量越多操作的代碼 越多需要考慮的可能性越多也越容易錯; 便于封裝和功能擴展,比如你 想做一個AD采樣值與電機位置按一個比例同步的程序即轉滑阻電機跟 著動的小玩意兒,稍微改改把 AD采樣值賦給計步值其它都不用管了。先說第一個數據的輸出,spwmi數組256個,如果不考慮極性則數據位置只和stepc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論