0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

步進(jìn)電機(jī)原理與驅(qū)動(dòng)附件中附帶電路與程序

開(kāi)源嵌入式 ? 來(lái)源:開(kāi)源嵌入 ? 2023-01-31 09:48 ? 次閱讀

步進(jìn)電機(jī)概述:

步進(jìn)電機(jī)驅(qū)動(dòng)器的細(xì)分原理介紹,步進(jìn)電機(jī)安裝有帶永久磁性的轉(zhuǎn)子,而定子至少具有兩個(gè)繞線(xiàn)。當(dāng)轉(zhuǎn)子磁性與定子繞線(xiàn)保持一致時(shí),將驅(qū)動(dòng)第二個(gè)繞線(xiàn)。兩個(gè)繞線(xiàn)交替開(kāi)啟和關(guān)閉,這將導(dǎo)致電機(jī)鎖定在想要的步進(jìn)位置。通過(guò)繞線(xiàn)的電流方向還可反向。在帶有兩個(gè)定子繞線(xiàn)的步進(jìn)電機(jī)中,有四個(gè)步進(jìn)以 90 °隔開(kāi)。步進(jìn)電機(jī)驅(qū)動(dòng)器的細(xì)分原理介紹,根據(jù)向定子繞線(xiàn)提供的脈沖,可精確控制步進(jìn)電機(jī)移動(dòng)的步進(jìn)。步進(jìn)電機(jī)的速度控制可通過(guò)向繞線(xiàn)提供脈沖頻率實(shí)現(xiàn),而旋轉(zhuǎn)方向可通過(guò)反向脈沖序列進(jìn)行更改。電機(jī)內(nèi)部的極片有許多齒,有助于定位相對(duì)于定子的轉(zhuǎn)子位置。一些步進(jìn)電機(jī)的定子級(jí)也有齒。根據(jù)使用的控制技術(shù),可全步進(jìn)、半步進(jìn)或微步進(jìn)控制步進(jìn)電機(jī)。簡(jiǎn)單的方形脈沖可以控制處于全步進(jìn)的電機(jī),而先進(jìn)控制技術(shù)(如脈寬調(diào)制 (PWM))可用于微步進(jìn)。步進(jìn)電機(jī)驅(qū)動(dòng)器的細(xì)分原理介紹,在國(guó)內(nèi),大家對(duì)細(xì)分還不是特別了解,有的只是認(rèn)為,細(xì)分是為了提高精度,其實(shí)不然,細(xì)分主要是改善電機(jī)的運(yùn)行性能,現(xiàn)說(shuō)明如下:步進(jìn)伺服電機(jī)的細(xì)分控制是由驅(qū)動(dòng)器精確控制步進(jìn)電機(jī)的相電流來(lái)實(shí)現(xiàn)的,以二相電機(jī)為例,假如電機(jī)的額定相電流為3A,如果使用常規(guī)驅(qū)動(dòng)器(如常用的恒流斬波方式)驅(qū)動(dòng)該電機(jī),電機(jī)每運(yùn)行一步,其繞組內(nèi)的電流將從0突變?yōu)?A或從3A突變到0,相電流的巨大變化,必然會(huì)引起電機(jī)運(yùn)行的振動(dòng)和噪音。如果使用細(xì)分驅(qū)動(dòng)器,在10細(xì)分的狀態(tài)下驅(qū)動(dòng)該電機(jī),電機(jī)每運(yùn)行一微步,其繞組內(nèi)的電流變化只有0.3A而不是3A,且電流是以正弦曲線(xiàn)規(guī)律變化,這樣就大大的改善了電機(jī)的振動(dòng)和噪音,因此,在性能上的優(yōu)點(diǎn)才是細(xì)分的真正優(yōu)點(diǎn)。由于細(xì)分驅(qū)動(dòng)器要精確控制電機(jī)的相電流,所以對(duì)驅(qū)動(dòng)器要有相當(dāng)高的技術(shù)要求和工藝要求,成本亦會(huì)較高。需要注意的是,國(guó)內(nèi)有一些驅(qū)動(dòng)器采用平滑來(lái)取代細(xì)分,有的亦稱(chēng)為細(xì)分,但這不是真正的細(xì)分,一定要分清兩者的本質(zhì)不同。

步進(jìn)電機(jī)驅(qū)動(dòng)器的細(xì)分1.平滑并不精確控制電機(jī)的相電流,只是把電流的變化率變緩一些,所以平滑并不產(chǎn)生微步,而細(xì)分的微步是可以用來(lái)精確定位的。步進(jìn)電機(jī)驅(qū)動(dòng)器的細(xì)分2.電機(jī)的相電流被平滑后,會(huì)引起電機(jī)力矩的下降,而細(xì)分控制不但不會(huì)引起電機(jī)力矩的下降,相反,力矩會(huì)有所增加。步進(jìn)電機(jī)驅(qū)動(dòng)器的細(xì)分原理介紹,步進(jìn)電機(jī)安裝有帶永久磁性的轉(zhuǎn)子,而定子至少具有兩個(gè)繞線(xiàn)。當(dāng)轉(zhuǎn)子磁性與定子繞線(xiàn)保持一致時(shí),將驅(qū)動(dòng)第二個(gè)繞線(xiàn)。兩個(gè)繞線(xiàn)交替開(kāi)啟和關(guān)閉,這將導(dǎo)致電機(jī)鎖定在想要的步進(jìn)位置。通過(guò)繞線(xiàn)的電流方向還可反向。

全步和半步:步進(jìn)驅(qū)動(dòng)器控制步進(jìn)電機(jī)的運(yùn)行方式,步進(jìn)電機(jī)常用的勵(lì)磁模式有全步、半步和微步三種。這些勵(lì)磁模式對(duì)電機(jī)提供的運(yùn)行特性和扭矩都有影響。每次將輸入脈沖施加到電機(jī)時(shí),步進(jìn)電機(jī)都會(huì)將電子信號(hào)轉(zhuǎn)換為機(jī)械運(yùn)動(dòng)。每個(gè)脈沖以固定增量移動(dòng)軸。如果步進(jìn)電機(jī)的步進(jìn)分辨率為1.8°,那么為了讓軸旋轉(zhuǎn)一整圈,在全步進(jìn)操作中,步進(jìn)電機(jī)需要接收200個(gè)脈沖,360°÷1.8=200。 有兩種全步勵(lì)磁模式: 在單相全步中,電機(jī)一次僅在一個(gè)相通電的情況下運(yùn)行。在任何激勵(lì)模式中,這種模式需要來(lái)自驅(qū)動(dòng)器的最少功率。

9f563b0e-a108-11ed-bfe3-dac502259ad0.png

在雙相全步中,電機(jī)在兩相同時(shí)通電的情況下運(yùn)行。此模式提供了改進(jìn)的扭矩和速度性能。兩相開(kāi)啟比單相開(kāi)啟提供大約30%到40%的扭矩,但它需要來(lái)自驅(qū)動(dòng)器的兩倍功率。

9f771946-a108-11ed-bfe3-dac502259ad0.png

半步勵(lì)磁模式是一相開(kāi)啟和兩相開(kāi)啟全步模式的組合。這導(dǎo)致基本步距角的一半。由于角度分辨率的提高,這個(gè)較小的步距角提供了更平滑的操作。半步產(chǎn)生的轉(zhuǎn)矩比兩相全步低約15%,但修改后的半步通過(guò)增加單相通電時(shí)施加到電機(jī)的電流來(lái)消除轉(zhuǎn)矩降低。

9f7c125c-a108-11ed-bfe3-dac502259ad0.png

微步可實(shí)現(xiàn)更好的控制和更平穩(wěn)的操作: 微步可以將電機(jī)的基本步長(zhǎng)分割多達(dá)256倍,使小步距變小。微型驅(qū)動(dòng)器使用兩個(gè)相隔90°的電流正弦波,這非常適合實(shí)現(xiàn)電機(jī)的平穩(wěn)運(yùn)行。您會(huì)注意到電機(jī)運(yùn)行安靜,沒(méi)有真正可檢測(cè)到的步進(jìn)動(dòng)作。

9f8e7d5c-a108-11ed-bfe3-dac502259ad0.png

通過(guò)控制每個(gè)繞組中電流的方向和幅度,分辨率提高,電機(jī)特性改善,振動(dòng)更小,運(yùn)行更平穩(wěn)。因?yàn)檎也ㄒ黄鸸ぷ?,所以從一個(gè)繞組到另一個(gè)繞組的平滑過(guò)渡。當(dāng)一個(gè)電流增加時(shí),另一個(gè)電流減小,從而實(shí)現(xiàn)平穩(wěn)的步進(jìn)進(jìn)展并保持扭矩輸出。 細(xì)分的原理和輸出控制:

一個(gè)理想的步進(jìn)電機(jī)電流曲線(xiàn)應(yīng)該是相位相差90度的正弦曲線(xiàn)如下圖:

9fae3584-a108-11ed-bfe3-dac502259ad0.jpg


圖中藍(lán)色線(xiàn)時(shí)A相電流,紅色線(xiàn)是B相電流。如果把A相正負(fù)極值視為A+A-,B相正負(fù)極值視為B+B-,比較一下四拍方式正轉(zhuǎn)A+B+A-B-和反轉(zhuǎn)A+B-A-B+不難看出四排方式實(shí)際上是用一個(gè)脈沖來(lái)代替一個(gè)正弦半周期,相位點(diǎn)從左到右變化則電機(jī)正轉(zhuǎn),從右到左電機(jī)反轉(zhuǎn)。類(lèi)似的我們把八拍方式A+;A+B+;B+;B+A-;A-;A-B-;B-;B-A+;放到曲線(xiàn)里也可以找到對(duì)應(yīng)點(diǎn),圖中標(biāo)出了各拍的相位點(diǎn)1,2,3…,不難看出用A+B+代替第2拍點(diǎn)用B+A-代替第四拍點(diǎn)都是近似的做法。那么這種近似和理想情況的電流的差值去哪里了呢?這些電流被無(wú)謂的消耗掉了而且多余的電流會(huì)引起電機(jī)轉(zhuǎn)動(dòng)的不平穩(wěn)。為什么要細(xì)分呢?實(shí)際細(xì)分的終極目標(biāo)就是在正弦的周期中插入若干個(gè)點(diǎn)使得相電流接近正弦變化,細(xì)分可以提高定位精度和電機(jī)運(yùn)轉(zhuǎn)的平穩(wěn)性。

spwm運(yùn)算和輸出 Spwm的產(chǎn)生可以分為軟件方法和硬件方法,硬件方法通過(guò)硬件產(chǎn)生一路三角波一路正弦波,經(jīng)過(guò)一個(gè)比較器比較正弦波幅值與三角波幅值的關(guān)系即可得到spwm波。這種方法也應(yīng)用于很多spwm集成芯片。硬件方法在波形產(chǎn)生上不需要軟件參與,并且調(diào)頻和調(diào)幅控制上都是比較簡(jiǎn)單的。硬件方法的功能和性能取決于芯片本身,對(duì)于比較復(fù)雜的應(yīng)用上會(huì)受到限制。 軟件方法的思路是使得pwm波以spwm的脈寬數(shù)據(jù)變化濾波后就可以得到正弦波形,通過(guò)計(jì)算得到占空比的波形數(shù)據(jù),按波形數(shù)據(jù)調(diào)整pwm。其實(shí)軟方法和硬方法也并不是絕對(duì)的,比如tidsp芯片內(nèi)部的spwm發(fā)生器,他的做法是在內(nèi)存中存儲(chǔ)一張正弦表,然后用一個(gè)和定時(shí)器時(shí)鐘同步的計(jì)數(shù)器正負(fù)計(jì)數(shù)模擬一個(gè)三角波,每個(gè)時(shí)鐘將正弦表的值與三角計(jì)數(shù)值作比較輸出即得到spwm,實(shí)際上可以看成是一種半軟件半硬件的做法。軟件方法的優(yōu)勢(shì)在于成本低且更靈活,成本低不用說(shuō)了,靈活性上舉個(gè)例子:調(diào)制正弦波性的極性是由獨(dú)立的控制位實(shí)現(xiàn)的(雙極性),如果輸出標(biāo)準(zhǔn)的正弦波形硬方法需要三角波發(fā)生器和正弦波發(fā)生器的起始點(diǎn)精確對(duì)齊,這在硬件電路實(shí)現(xiàn)上需要附帶鎖相環(huán)電路才能保證,而軟件方法則不需要任何附加操作?,F(xiàn)在為了改善步進(jìn)電機(jī)的驅(qū)動(dòng)性能,我們希望極性翻轉(zhuǎn)點(diǎn)落后輸出幾個(gè)微秒,要做到這一點(diǎn)硬件方法改動(dòng)肯定是難上難,而軟件方法上只需要增加個(gè)定時(shí)滯后輸出就行了。 為了減少運(yùn)算開(kāi)銷(xiāo)也可以使用查表法,把計(jì)算好的spwm數(shù)據(jù)存儲(chǔ)在rom里,按順序輸出表中的值即可。這種方法的數(shù)據(jù)計(jì)算可以在pc機(jī)上通過(guò)matlab軟件進(jìn)行,將數(shù)據(jù)算好粘貼到源程序中就可以了。查表法的局限在于參數(shù)的變化和存儲(chǔ)開(kāi)銷(xiāo)的矛盾,參數(shù)越復(fù)雜占用存儲(chǔ)空間越大。 (1)三角波向鋸齒波的轉(zhuǎn)換 載波為三角波時(shí)輸出的是一個(gè)左右不對(duì)稱(chēng)的pwm波形,只有這種波形能夠調(diào)制出半周期對(duì)稱(chēng)的正弦波,這種方法稱(chēng)為非對(duì)稱(chēng)的自然采樣法。其它方法(規(guī)則采樣等效面積…)都是為了減小計(jì)算量或不得以而采取的近似方法。非對(duì)稱(chēng)pwm開(kāi)點(diǎn)與關(guān)閉點(diǎn)沒(méi)有必然關(guān)系,必須由中央對(duì)齊的pwm模式通過(guò)一個(gè)周期的兩次更新來(lái)輸出。三角波可以看成是兩個(gè)鋸齒波的組合,因此我們可以通過(guò)鋸齒波的數(shù)據(jù)來(lái)簡(jiǎn)化程序結(jié)構(gòu)。我們比較下面三張圖:

9fb6a23c-a108-11ed-bfe3-dac502259ad0.jpg

9fcce3e4-a108-11ed-bfe3-dac502259ad0.jpg

9fe1d3f8-a108-11ed-bfe3-dac502259ad0.jpg

圖1是一個(gè)鋸齒波幅值為1,載波比N=16,正弦幅值0.5,正弦與鋸齒波相差為半個(gè)鋸齒波周期;圖2是圖1水平翻轉(zhuǎn)的結(jié)果;圖3是圖1和圖2的疊加結(jié)果。圖三中看到三角波形的spwm數(shù)據(jù)了嗎?沒(méi)錯(cuò)就這么簡(jiǎn)單,鋸齒波正弦幅值比為2:1,相差半個(gè)鋸齒波周期,計(jì)算出來(lái)的數(shù)據(jù)首尾組合成三角波數(shù)據(jù)。算法上就很簡(jiǎn)單了,假設(shè)數(shù)組中存放上述的鋸齒波spwm數(shù)據(jù),編號(hào)0~15共16個(gè),依次取0,1,2,…15為三角波形開(kāi)點(diǎn)輸出數(shù)據(jù),則反向取15,14,13,…0為三角波形關(guān)點(diǎn)數(shù)據(jù)即可。特別的如果載波比為奇數(shù)時(shí)三角波也為奇數(shù),中間的數(shù)自然和自己組合的數(shù)據(jù)仍然是正確的。 注意這里提及的方法可以把三角波形的計(jì)算轉(zhuǎn)換為鋸齒波,但并不能減少計(jì)算量,因?yàn)槿绻桥紨?shù)個(gè)三角波只要計(jì)算四分之一周期就夠了其他的是對(duì)稱(chēng)的,而鋸齒波形數(shù)據(jù)需要計(jì)算半個(gè)周期。至此我們可以使用鋸齒波的方法計(jì)算按三角波的數(shù)據(jù)輸出。 (2)spwm迭代運(yùn)算 為計(jì)算spwm占空比首先要求得鋸齒波斜線(xiàn)與正弦交點(diǎn),即方程KX+B=Y與Sin(X)=Y的解。這個(gè)方程是一個(gè)超越方程,只能通過(guò)迭代的方法計(jì)算。我們將直線(xiàn)方程變?yōu)閄=(Y-B)/K,首先任取一個(gè)X值(這個(gè)值就是迭代初值),將它帶入Sin(X)求一個(gè)Y值再將Y值代入(Y-B)/K求一次X值,再將X帶入Sin(X)求一個(gè)Y值…如此反復(fù)若干次后可以得到一個(gè)結(jié)果就是方程式的解,這個(gè)就叫做迭代法。迭代次數(shù)越多;迭代初值越接近結(jié)果精度越高。每一組數(shù)據(jù)計(jì)算有這樣幾個(gè)參數(shù)1:正弦幅值(三角幅值與之成比例)2:載波比N值即半周期中三角波個(gè)數(shù)。另外pwm的占空比即定時(shí)器的通道值是和pwm的周期值有關(guān)系的,因此為了計(jì)算定時(shí)器通道值還需要一個(gè)周期值,對(duì)于stm32f這個(gè)值就是定時(shí)器ARR寄存器的值,它決定pwm周期(或頻率)。附件中有個(gè)matlab_spwm.rar,matlab下計(jì)算定時(shí)器spwm數(shù)值和繪圖的小工具上面幾個(gè)圖就是用它畫(huà)的,開(kāi)始部分可以置參數(shù) s_M=32768/65536 %正弦波幅值比0~1 s_N=16 %半周期三角波個(gè)數(shù) s_Pre=16384 %單片機(jī)定時(shí)器模數(shù)值 執(zhí)行分為三部分,計(jì)算spwm數(shù)據(jù);將數(shù)據(jù)按周期值換算為定時(shí)器設(shè)定值;畫(huà)圖;
計(jì)算定時(shí)器設(shè)定結(jié)果在TimerSetting中,復(fù)制粘貼替換tab字符成逗號(hào)就行了,下面是上述參數(shù)的計(jì)算結(jié)果: 1780 5246 8444 11221 13461 15088 16063 16384 16075 15182 13764 11893 9645 7102 4346 1463 (3)spwm實(shí)時(shí)運(yùn)算的優(yōu)化 如前所述簡(jiǎn)單的應(yīng)用查表法就可以解決了但是復(fù)雜一點(diǎn)的功能就不能滿(mǎn)足要求了,比如步進(jìn)電機(jī)大范圍調(diào)速、不同轉(zhuǎn)速下恒力矩輸出、恒加速運(yùn)動(dòng)等等。網(wǎng)上有很多文章介紹自然采樣法的數(shù)學(xué)方法,并給出了各種優(yōu)化算法,這些算法力圖精確求解三角方程與正弦方程的交點(diǎn),由于運(yùn)算中帶有大量的浮點(diǎn)運(yùn)算若沒(méi)有dsp或高速浮點(diǎn)處理芯片的支持必然會(huì)造成運(yùn)算時(shí)間過(guò)長(zhǎng)對(duì)實(shí)時(shí)調(diào)控產(chǎn)生影響。實(shí)際上我們需要的計(jì)算精度和每載波周期可能的開(kāi)關(guān)點(diǎn)數(shù)量有關(guān)系,此數(shù)值用C來(lái)表示,稱(chēng)其為控制比數(shù)值上=載波周期/pwm周期,同步調(diào)制方式中此值為整數(shù),可以理解為用多少個(gè)pwm周期控制一個(gè)載波周期。pwm頻率實(shí)際上是開(kāi)關(guān)電路的極限頻率或最理想工作的頻率,假設(shè)每載波周期可能的開(kāi)關(guān)點(diǎn)數(shù)量為512個(gè)則需要二進(jìn)制的9位計(jì)算精度如果再加一位存疑位最多計(jì)算10位就夠了。如果采用數(shù)據(jù)類(lèi)型IEEE32浮點(diǎn)數(shù)迭代運(yùn)算將得到24位(二進(jìn)制)精度的計(jì)算結(jié)果,與實(shí)際需要相差甚遠(yuǎn),也就是說(shuō)你算了半天大部分是沒(méi)有意義的計(jì)算,這種計(jì)算資源浪費(fèi)發(fā)生在每一次運(yùn)算中,因此累計(jì)起來(lái)就比較驚人了。從另一個(gè)角度看由于pwm頻率的限制有高精度的計(jì)算結(jié)果也無(wú)法實(shí)施高精度的開(kāi)關(guān)控制,這么說(shuō)就好理解了。對(duì)計(jì)算采取一定的優(yōu)化是必須的它將直接影響系統(tǒng)的實(shí)時(shí)性能。 步進(jìn)電機(jī)運(yùn)行控制 至此假設(shè)我們可以很快的在單片機(jī)上進(jìn)行實(shí)時(shí)的迭代運(yùn)算了。迭代計(jì)算一個(gè)半周期的spwm其輸入的原始參數(shù)只和三個(gè)數(shù)值有關(guān):
1.M正弦的幅值這個(gè)值將決定步進(jìn)電機(jī)的相電流大小,也就是步進(jìn)電機(jī)的輸出力矩。步進(jìn)電機(jī)的優(yōu)點(diǎn)之一是它的低速性能,當(dāng)步進(jìn)電機(jī)低速運(yùn)轉(zhuǎn)時(shí)轉(zhuǎn)子始終受到磁場(chǎng)力的牽引轉(zhuǎn)動(dòng),這個(gè)力的大小直接取決于勵(lì)磁電流的大小,很小的速度下卻可以用很大的力牽引轉(zhuǎn)動(dòng)。而直流電機(jī)的低速運(yùn)動(dòng)只能靠減小勵(lì)磁電流實(shí)現(xiàn),實(shí)際上就是小力矩實(shí)現(xiàn)低速,這樣控制就不可能很精確特別是啟停階段尤其麻煩。步進(jìn)電機(jī)在高速時(shí)力矩下降很快這個(gè)原因也不難理解,因?yàn)樵诓竭M(jìn)電機(jī)勵(lì)磁線(xiàn)圈里有多組磁極快速劃過(guò)產(chǎn)生很大的感生電動(dòng)勢(shì)抵消了驅(qū)動(dòng)的電壓致使勵(lì)磁電流變小力矩變小。為了改善高速性能解決辦法只有一個(gè)提高工作電壓。根據(jù)電機(jī)轉(zhuǎn)速自動(dòng)調(diào)整相電流的大小就可以實(shí)現(xiàn)恒定的力矩輸出了,即低轉(zhuǎn)速小幅值高轉(zhuǎn)速大幅值。 2.載波比N和控制比C,這兩個(gè)參數(shù)和調(diào)制頻率F的關(guān)系是: F*2C*2N=TF(TF是定時(shí)器的時(shí)鐘頻率) 我們慢慢來(lái)解釋一下這個(gè)式子,調(diào)制頻率就是我們實(shí)際想要的電機(jī)轉(zhuǎn)速,從上面式子可以看出要讓電機(jī)速度增加有兩個(gè)方法即減小C或減小N(TF也是可以變的暫不考慮); C實(shí)際上就是定時(shí)器的模數(shù)值(ARR),他的含義是使用幾個(gè)定時(shí)器時(shí)鐘周期產(chǎn)生一個(gè)pwm周期,前面的2是由于定時(shí)器工作在中央對(duì)齊模式下,定時(shí)器+-計(jì)數(shù)一輪產(chǎn)生一個(gè)完整的三角波周期。ARR的取值范圍不可以太小,因?yàn)樾枰〞r(shí)器中斷來(lái)更新個(gè)通道的值,太小的數(shù)值兩次更新時(shí)間過(guò)短而無(wú)法實(shí)現(xiàn)計(jì)算和更新步計(jì)數(shù)等操作。ARR的值如果太大則輸出的pwm頻率過(guò)低效果不佳。 N是載波比也就是半周期的三角波的數(shù)量,他的含義是使用幾個(gè)pwm周期調(diào)制出一個(gè)正弦周期,其實(shí)也就是我們常說(shuō)的細(xì)分?jǐn)?shù),它決定一個(gè)正弦周期(一個(gè)步距角)內(nèi)可以控制的位置點(diǎn)的數(shù)量。在常見(jiàn)的驅(qū)動(dòng)器中這個(gè)數(shù)值都是由撥碼開(kāi)關(guān)事先設(shè)定的,工作中是一個(gè)固定值,原因是硬件電路無(wú)縫的調(diào)整細(xì)分度幾乎是不可能的。軟件運(yùn)算則沒(méi)有這個(gè)問(wèn)題,N的取值可以是任意的,唯一受影響的就是極性控制,上面算式里N前面的2含義是正弦正半周期和負(fù)半周期。N的取值還要考慮內(nèi)存和計(jì)算占用;迭代算法如果有接近結(jié)果的初始值將使得運(yùn)算效率大幅提高,因此對(duì)于有初始值的運(yùn)算每一個(gè)計(jì)算點(diǎn)都要有存儲(chǔ)空間占用,過(guò)大的N值要考慮內(nèi)存資源,如果無(wú)初值的計(jì)算則要考慮計(jì)算資源。特別的當(dāng)N值變化時(shí)初值會(huì)與真實(shí)值有差距,所以應(yīng)盡量減少N的變動(dòng)。 步值計(jì)數(shù)產(chǎn)生AB極性邏輯和正反轉(zhuǎn):
先來(lái)梳理一下目前已經(jīng)現(xiàn)在做到的內(nèi)容,內(nèi)存中有一個(gè)數(shù)組存放整個(gè)正弦半周期的實(shí)時(shí)運(yùn)算的spwm數(shù)據(jù),這個(gè)數(shù)據(jù)是根據(jù)當(dāng)前的pwm周期折算過(guò),因此每個(gè)pwm周期依次將數(shù)組內(nèi)容賦值給定時(shí)器通道值就可以在定時(shí)器通道管腳輸出正弦變化的pwm了。另外使用一個(gè)(l6205是兩個(gè),也可以用非門(mén))io口來(lái)控制極性輸出,比如高電平輸出正弦負(fù)半周,低電平輸出正弦正半周。
接下來(lái)需要安排一個(gè)合理而簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)把步進(jìn)計(jì)數(shù)、細(xì)分和極性控制合為一體。首先我們用一個(gè)s32 stepcounter全局量來(lái)做步進(jìn)計(jì)數(shù),它的數(shù)值與步進(jìn)電機(jī)的實(shí)時(shí)位置對(duì)應(yīng),這個(gè)變量是一個(gè)很關(guān)鍵的變量,因?yàn)槿我鈺r(shí)刻的AB兩相spwm數(shù)據(jù)輸出點(diǎn)和極性控制信號(hào)都由它產(chǎn)生。假設(shè)我們把它的低八位視為細(xì)分步計(jì)數(shù)(256為最大細(xì)分),則這個(gè)計(jì)步值除256對(duì)應(yīng)整步位置。另外安排一個(gè)u8 microstep用來(lái)控制細(xì)分步進(jìn),它的取值和當(dāng)前的細(xì)分度有關(guān),如果256細(xì)分則microstep=1,128細(xì)分microstep=2,以此類(lèi)推.如果電機(jī)正轉(zhuǎn)前進(jìn)一個(gè)微步則stepcounter+=microstep,如果反轉(zhuǎn)一個(gè)微步則stepcounter-=microstep(微步進(jìn)這部分可以放到中斷程序里),OK正反轉(zhuǎn)很簡(jiǎn)單,微步前進(jìn)自動(dòng)更新整步。關(guān)鍵點(diǎn)在于如何使用這個(gè)計(jì)數(shù)值產(chǎn)生兩個(gè)相位的極性信號(hào)輸出控制和A相B相的spwm數(shù)據(jù)位置,這里解釋一下為什么會(huì)希望控制都由這一個(gè)變量產(chǎn)生:因?yàn)檫@樣的程序最簡(jiǎn)單,雖然這里講一大堆但是在編程實(shí)現(xiàn)時(shí)你就看到了就幾行搞定;不容易出錯(cuò),效率最高,你可以想象的到如果涉及的變量越多操作的代碼越多需要考慮的可能性越多也越容易錯(cuò);便于封裝和功能擴(kuò)展,比如你想做一個(gè)AD采樣值與電機(jī)位置按一個(gè)比例同步的程序即轉(zhuǎn)滑阻電機(jī)跟著動(dòng)的小玩意兒,稍微改改把AD采樣值賦給計(jì)步值其它都不用管了。
先說(shuō)第一個(gè)數(shù)據(jù)的輸出,spwm數(shù)組256個(gè),如果不考慮極性則數(shù)據(jù)位置只和stepcounter的低8位有關(guān),因此A相數(shù)據(jù)用stepcounter的低8位作指針從數(shù)組取數(shù)就可以(A相0值點(diǎn)為計(jì)步0值點(diǎn)),B相與A相相差為90度,所以A=0,1,2,255,0 則B=128,129,130,127,128能看出來(lái)嗎?(A的數(shù)據(jù)指針+128)%256等同于 A的數(shù)據(jù)指針^128就是B的數(shù)據(jù)指針。
程序上這樣寫(xiě):
A通道值=spwm數(shù)組[(u8)stepcounter];
B通道值=spwm數(shù)組[(u8)stepcounter^128];
這里數(shù)組大小是256,所以一個(gè)邏輯異或就解決,如果你非要取大小是100個(gè)的話(huà)你就得(point+50)%100才能找到B相位點(diǎn)了。 步進(jìn)電機(jī)基本算法,S算法:

為了實(shí)現(xiàn)步進(jìn)電機(jī)的平緩啟停以及避免轉(zhuǎn)高轉(zhuǎn)速時(shí)不失步停轉(zhuǎn)。在步進(jìn)電機(jī)啟動(dòng)、停止過(guò)程中,需要采用加減速的算法對(duì)啟動(dòng)過(guò)程進(jìn)行控制。S曲線(xiàn)是加減速控制最理想的方案。但是S曲線(xiàn)的公式以及控制過(guò)程都比較復(fù)雜。

將S曲線(xiàn)離散化,在整個(gè)加減速過(guò)程中,以一定的時(shí)間間隔更新頻率,總的更新次數(shù)為2*N,i表示為第i次的更新,則第i次更新的頻率f(i)表示為:

其中fb為開(kāi)始的頻率,fr是最終運(yùn)行的頻率,α是曲線(xiàn)的伸縮系數(shù),一般可以取3-5之間的常數(shù)。

比如,啟動(dòng)加速,開(kāi)始頻率為400Hz,運(yùn)行頻率為5KHz。

停止減速,開(kāi)始頻率為5KHz,停止頻率為400Hz,

加減速的時(shí)間均為1s,按10ms的時(shí)間間隔更新頻率,總共更新100次,α取5。

通過(guò)以下步驟實(shí)現(xiàn)實(shí)現(xiàn)步進(jìn)電機(jī)的S曲線(xiàn)的加減速控制:

配置1ms的定時(shí)器以及1ms的中斷程序在中斷程序中對(duì)加減速的頻率更新次數(shù)i進(jìn)行計(jì)數(shù)配置產(chǎn)生步進(jìn)電機(jī)驅(qū)動(dòng)信號(hào)的PWM模塊,設(shè)置PWM的定時(shí)中斷以及中斷程序在PWM的定時(shí)中斷程序中,計(jì)算當(dāng)前更新次數(shù)對(duì)應(yīng)的頻率,并按出來(lái)的頻率更新PWM的頻率以及占空比在PWM的定時(shí)中斷程序中,計(jì)算步進(jìn)電機(jī)運(yùn)行的步數(shù),如果達(dá)到設(shè)置的步數(shù)減去停止的S曲線(xiàn)減速運(yùn)行所設(shè)置的步數(shù),則開(kāi)始減速運(yùn)行。同時(shí)檢測(cè)外部輸入,如果有需要停止運(yùn)行的輸入條件,則開(kāi)始減速運(yùn)行。

整個(gè)加減速控制過(guò)程的難點(diǎn)在于:

步進(jìn)電機(jī)的計(jì)步以及頻率更新需要在每一個(gè)PWM中斷中進(jìn)行。步進(jìn)電機(jī)的運(yùn)行頻率最高到40KHz,這種頻率下,PWM的定時(shí)中斷周期達(dá)到了25us,PWM定時(shí)器中斷程序運(yùn)行總時(shí)間盡量小,根據(jù)經(jīng)驗(yàn)至少小于中斷周期的30%,即7.5us。一旦超過(guò)這個(gè)數(shù)值,導(dǎo)致所有中斷程序(包括PWM定時(shí)中斷程序)漏運(yùn)行,基本主程序無(wú)法運(yùn)行,導(dǎo)致整個(gè)控制器假死現(xiàn)象。根據(jù)S曲線(xiàn)的公司是一個(gè)復(fù)雜的非線(xiàn)性的指數(shù)浮點(diǎn)數(shù)運(yùn)算,需要耗費(fèi)大量的時(shí)間,直接調(diào)用C語(yǔ)言的庫(kù)函數(shù)計(jì)算這一數(shù)值可能耗費(fèi)幾十上百毫秒。

為了解決S曲線(xiàn)的運(yùn)算時(shí)間問(wèn)題,基于STM32F103,我采用了查表法,具體步驟如下:

1. 將α值定義5,

的取值范圍為-5~5之間。

2. 在整個(gè)加減速過(guò)程中,表達(dá)式

在取值范圍-5~5內(nèi)均勻取1024個(gè)數(shù)值,得到數(shù)值表。

3. 定義一個(gè)unsigned short型有1024個(gè)元素的const類(lèi)型的數(shù)組,用于存儲(chǔ)數(shù)值表。

4. Const數(shù)組存儲(chǔ)在內(nèi)部的flash,數(shù)值表共占用2048字節(jié)。

STM32F103RTC6共256K,程序組和設(shè)置參數(shù)占用48K,bootloader程序占用了8K,遠(yuǎn)程升級(jí)空間占用了100K,目前應(yīng)用程序只用到40K左右。

剩余60K左右的空間,騰出2K的空間來(lái)存儲(chǔ)數(shù)值表,有空間,就是這么任性。

5. 在中斷程序中,根據(jù)總的更新次數(shù)以及當(dāng)前的更新計(jì)數(shù)值,計(jì)算

值,再映射到0-1023的數(shù)值有的索引值,通過(guò)索引獲取數(shù)值。

6. 需要注意的是stm32f103不支持浮點(diǎn)數(shù)的運(yùn)算,所以對(duì)于浮點(diǎn)數(shù)的運(yùn)算,需要換算成乘以一個(gè)數(shù)再除以另一個(gè)數(shù),比如*α,需要轉(zhuǎn)變?yōu)?65535/13107。

下面一段代碼是根據(jù)更新的計(jì)數(shù)值獲取頻率的函數(shù):

U16 fnMC_GetFreq(U16 n, U16 halftn, U16 alpha, U16 minfreq, U16 maxfreq){//alpha=alpha * 4096

signed int udataA;

signed short uiDataA;

U16 uiRes;

U32 uwData;

udataA=(signed int)alpha * (signed int)n;

udataA=(signed int)udataA / halftn;

if(udataA > 32767){

udataA=32767;

}

uiDataA=(signed short)alpha - (signed short)udataA;

uiDataA=(signed short)4 * 4096 - uiDataA;

if(uiDataA < 0){

uiDataA=0;

}

uiRes=(U16)uiDataA;

uiRes=uiRes / 32;//*1023/8/4096

if(uiRes > 1023){

uiRes=1023;

}

udataA=(signed int)(maxfreq - minfreq) * g_mc_uchExp[uiRes];

udataA=udataA / 65535;

uiDataA=(signed int)udataA;

uiDataA +=minfreq;

if(uiDataA < 200){

uiDataA=200;

}

return(uiDataA);

}

下面一段代碼是產(chǎn)生步進(jìn)電機(jī)控制信號(hào)的PWM周期中斷程序:

int data;

U16 freq;

STRMotorRegs *motor;

motor=&g_motor_regs[0];

MOTOR_A_CLEARINT();

motor->steps ++;

data=(int)MOTOR_A_STEPS_GET();

if(motor->direction==0)

{

data=data + 1;

}

else

{

data=data - 1;

}

MOTOR_A_STEPS_SET(data);

freq=motor->runfrequency;

if(motor->runstate==MOTOR_RUN_STATE_INC){

if(motor->runtimer >=motor->starttime){

motor->runstate=MOTOR_RUN_STATE_IDLE;

}else{

freq=fnMC_GetFreq(motor->runtimer, motor->halfstarttime, motor->alpha, motor->startfreq, motor->runfrequency);//U16 n,U16 halftn,U16 alpha,U16 maxfreq,U16 minfreq)

}

motor->runsnapfreq=freq;

}else if(motor->runstate==MOTOR_RUN_STATE_IDLE){

if(motor->totalstep <=(motor->steps + motor->stopremainstep)){

motor->runstate=MOTOR_RUN_STATE_DEC;

motor->runtimer=0;

}

motor->runsnapfreq=freq;

}else{

if(motor->runtimer >=motor->stoptime){

freq=motor->stopfreq;

}else{

freq=fnMC_GetFreq(motor->runtimer, motor->halfstoptime, motor->alpha, motor->runsnapfreq, motor->stopfreq);//U16 n,U16 halftn,U16 alpha,U16 maxfreq,U16 minfreq)

}

}

if(motor->steps >=motor->totalstep)

{

motor->starting=FALSE;

}

if(FALSE==motor->starting)

{

MOTOR_A_DISABLE();

}else{

motor->curfrequency=freq;

fnMT_Cal_MotorA_TimeConf();

}

下面是生成S曲線(xiàn)數(shù)值表、控制步進(jìn)電機(jī)啟動(dòng)、停止的視頻,從視頻上可以明顯看到啟動(dòng)時(shí)慢加速->快加速->慢加速的過(guò)程,以及停止時(shí)慢減速->快減速->慢減速的過(guò)程。

部分程序代碼(需要代碼可以下載完整程序)

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電流
    +關(guān)注

    關(guān)注

    40

    文章

    6507

    瀏覽量

    131121
  • 驅(qū)動(dòng)器
    +關(guān)注

    關(guān)注

    51

    文章

    7998

    瀏覽量

    145030
  • 步進(jìn)電機(jī)
    +關(guān)注

    關(guān)注

    150

    文章

    3043

    瀏覽量

    146867

原文標(biāo)題:步進(jìn)電機(jī)原理與驅(qū)動(dòng)附件中附帶電路與程序

文章出處:【微信號(hào):KY_QRS,微信公眾號(hào):開(kāi)源嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    步進(jìn)電機(jī)驅(qū)動(dòng)芯片的工作原理和特點(diǎn)

    步進(jìn)電機(jī)驅(qū)動(dòng)芯片是步進(jìn)電機(jī)控制系統(tǒng)實(shí)現(xiàn)驅(qū)動(dòng)
    的頭像 發(fā)表于 06-12 15:14 ?794次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)器細(xì)分怎么調(diào)

    步進(jìn)電機(jī)驅(qū)動(dòng)器細(xì)分調(diào)整是步進(jìn)電機(jī)控制系統(tǒng)的一個(gè)重要環(huán)節(jié),它直接影響到
    的頭像 發(fā)表于 06-12 09:40 ?1276次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)器常見(jiàn)故障維修

    步進(jìn)電機(jī)驅(qū)動(dòng)器是一種將電脈沖信號(hào)轉(zhuǎn)換為角位移的電氣設(shè)備,廣泛應(yīng)用于自動(dòng)化控制系統(tǒng)。然而,在實(shí)際使用過(guò)程,
    的頭像 發(fā)表于 06-11 17:28 ?3283次閱讀

    如何正確選擇步進(jìn)電機(jī)驅(qū)動(dòng)

    步進(jìn)電機(jī)驅(qū)動(dòng)器是步進(jìn)電機(jī)系統(tǒng)的重要組成部分,它負(fù)責(zé)將控制信號(hào)轉(zhuǎn)換為
    的頭像 發(fā)表于 06-05 18:04 ?1483次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)芯片衰減模式是什么意思?

    步進(jìn)電機(jī)驅(qū)動(dòng)芯片衰減模式是指在步進(jìn)電機(jī)運(yùn)行過(guò)程驅(qū)動(dòng)
    的頭像 發(fā)表于 04-08 15:06 ?1494次閱讀

    步進(jìn)電機(jī)的微步驅(qū)動(dòng)原理是什么

    地移動(dòng),并能夠?qū)崿F(xiàn)更精確的定位。 微步驅(qū)動(dòng)原理的核心在于對(duì)繞組電流的精細(xì)控制。在傳統(tǒng)的步進(jìn)電機(jī)操作,繞組通常被全開(kāi)或全關(guān),對(duì)應(yīng)于一個(gè)特定的極性方向,從而產(chǎn)生足夠的力矩使
    的頭像 發(fā)表于 02-06 09:46 ?1460次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)器參數(shù)設(shè)置 步進(jìn)電機(jī)驅(qū)動(dòng)器常見(jiàn)故障維修

    步進(jìn)電機(jī)驅(qū)動(dòng)器是一種常見(jiàn)的電動(dòng)驅(qū)動(dòng)裝置,廣泛應(yīng)用于各種自動(dòng)化設(shè)備。在使用步進(jìn)
    的頭像 發(fā)表于 01-24 11:30 ?5864次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)電路原理 步進(jìn)電機(jī)驅(qū)動(dòng)器可以通用嗎

    步進(jìn)電機(jī)驅(qū)動(dòng)電路原理是指通過(guò)特定的電信號(hào)驅(qū)動(dòng)步進(jìn)電機(jī)
    的頭像 發(fā)表于 01-24 10:46 ?1876次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)電路是直流穩(wěn)壓電源電路

    步進(jìn)電機(jī)驅(qū)動(dòng)電路并非直流穩(wěn)壓電源電路。步進(jìn)電機(jī)
    的頭像 發(fā)表于 01-24 10:13 ?910次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)器撥碼開(kāi)關(guān)怎么調(diào)

    步進(jìn)電機(jī)驅(qū)動(dòng)器是一種常見(jiàn)的電機(jī)驅(qū)動(dòng)裝置,可用于控制步進(jìn)電機(jī)
    的頭像 發(fā)表于 01-15 13:56 ?3237次閱讀

    arduino如何驅(qū)動(dòng)步進(jìn)電機(jī)

    隨著物聯(lián)網(wǎng)的不斷發(fā)展,電機(jī)控制技術(shù)得到了廣泛應(yīng)用,其中步進(jìn)電機(jī)作為一種常見(jiàn)的電機(jī)類(lèi)型,在各行各業(yè)得到了廣泛應(yīng)用。而作為一種強(qiáng)大、靈活的開(kāi)源
    的頭像 發(fā)表于 01-14 16:37 ?3058次閱讀

    步進(jìn)電機(jī)驅(qū)動(dòng)器的主要驅(qū)動(dòng)方式有哪些?

    步進(jìn)電機(jī)驅(qū)動(dòng)器是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)
    的頭像 發(fā)表于 11-14 08:07 ?2307次閱讀
    <b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b>器的主要<b class='flag-5'>驅(qū)動(dòng)</b>方式有哪些?

    使用ULN2003A的步進(jìn)電機(jī)驅(qū)動(dòng)例程

    今天要講的是步進(jìn)電機(jī)驅(qū)動(dòng)例程,硬件電路采用的是ULN2003A來(lái)進(jìn)行步進(jìn)
    的頭像 發(fā)表于 11-09 09:58 ?4989次閱讀
    使用ULN2003A的<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b>例程

    步進(jìn)電機(jī)是如何工作的?

    然后步進(jìn)電機(jī)驅(qū)動(dòng)器將程序轉(zhuǎn)為一系列脈沖信號(hào)來(lái)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)。
    發(fā)表于 10-18 10:24 ?808次閱讀
    <b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>是如何工作的?

    步進(jìn)電機(jī)閉環(huán)系統(tǒng)的組成和優(yōu)缺點(diǎn) 閉環(huán)步進(jìn)電機(jī)驅(qū)動(dòng)的9大優(yōu)勢(shì)

    步進(jìn)電機(jī)基本上以開(kāi)環(huán)電路驅(qū)動(dòng),用于位置控制。換句話(huà)說(shuō),步進(jìn)電機(jī)以外的
    的頭像 發(fā)表于 09-24 08:08 ?4010次閱讀
    <b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b>閉環(huán)系統(tǒng)的組成和優(yōu)缺點(diǎn) 閉環(huán)<b class='flag-5'>步進(jìn)</b><b class='flag-5'>電機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b>的9大優(yōu)勢(shì)