電機(jī)原理與驅(qū)動(dòng):從線圈到代碼全解析)
1. 從線圈認(rèn)識(shí)步進(jìn)電機(jī)為什么單極性方案經(jīng)久不衰很多剛接觸步進(jìn)電機(jī)的朋友第一眼看到“單極性”這三個(gè)字容易犯迷糊因?yàn)樵谌粘=佑|的直流電機(jī)、無(wú)刷電機(jī)里很少聽(tīng)到這種分類方式。我在早期調(diào)試設(shè)備時(shí)也犯過(guò)同樣的錯(cuò)誤以為單極性就是“只有一根電源線”后來(lái)拆開(kāi)電機(jī)看線圈才徹底搞明白今天這篇文章就把線圈到代碼這條鏈路一次講透。步進(jìn)電機(jī)本質(zhì)上是一個(gè)數(shù)字執(zhí)行器它靠脈沖信號(hào)驅(qū)動(dòng)每收到一個(gè)脈沖就走一個(gè)固定的角度這個(gè)“固定角度”就是步距角。單極性步進(jìn)電機(jī)是步進(jìn)電機(jī)家族里結(jié)構(gòu)最簡(jiǎn)單、最容易上手的一種它內(nèi)部每個(gè)繞組有一個(gè)中心抽頭通過(guò)控制不同繞組的導(dǎo)通順序讓轉(zhuǎn)子一步步旋轉(zhuǎn)起來(lái)。相比雙極性電機(jī)需要H橋電路來(lái)?yè)Q向單極性電機(jī)只需要幾個(gè)開(kāi)關(guān)管就能驅(qū)動(dòng)成本低、邏輯清晰這也是它在家用電器、3D打印機(jī)、小型機(jī)器人里大量出現(xiàn)的原因。這篇文章適合誰(shuí)看如果你是嵌入式開(kāi)發(fā)初學(xué)者、創(chuàng)客愛(ài)好者或者正在做畢業(yè)設(shè)計(jì)準(zhǔn)備驅(qū)動(dòng)一個(gè)步進(jìn)電機(jī)通篇讀完后你不僅知道怎么接線、怎么點(diǎn)燈式地把電機(jī)轉(zhuǎn)起來(lái)還能理解為什么單相驅(qū)動(dòng)會(huì)有死點(diǎn)、為什么雙相驅(qū)動(dòng)能消除抖動(dòng)、半步驅(qū)動(dòng)到底“半”在什么地方。我會(huì)從線圈繞組的物理結(jié)構(gòu)講起一直落到實(shí)際的C語(yǔ)言驅(qū)動(dòng)代碼和參數(shù)計(jì)算保證每一步都能直接抄作業(yè)。2. 單極性步進(jìn)電機(jī)的繞組結(jié)構(gòu)與磁場(chǎng)本質(zhì)2.1 中心抽頭到底是怎么回事單極性步進(jìn)電機(jī)最核心的硬件特征是繞組帶中心抽頭。你可以把中心抽頭想象成兩個(gè)線圈拼接后的公共點(diǎn)它把原本一個(gè)完整繞組拆成了兩個(gè)串聯(lián)的半段。常規(guī)的單極性四相五線電機(jī)內(nèi)部有四個(gè)繞組每?jī)蓚€(gè)繞組共用一個(gè)中心抽頭引出公共線再加上四個(gè)繞組端一共五根線。接線時(shí)公共端接電源正極四個(gè)繞組端分別接驅(qū)動(dòng)管的漏極或集電極。當(dāng)某一個(gè)繞組端被拉低到地時(shí)電流從公共端流入流過(guò)該半段線圈再?gòu)膶?duì)應(yīng)繞組端出去形成一個(gè)回路產(chǎn)生磁場(chǎng)。因?yàn)殡娏鞣较蚴冀K是從公共端流向繞組端磁場(chǎng)方向始終是同一方向所以叫“單極性”——它不需要改變電流方向來(lái)?yè)Q向只需要切換導(dǎo)通哪一個(gè)繞組端。這里有個(gè)容易誤解的點(diǎn)我最早也在這上面踩過(guò)坑單極性電機(jī)四個(gè)繞組如果獨(dú)立看其實(shí)每個(gè)繞組只有“通”和“斷”兩種狀態(tài)磁場(chǎng)方向固定那轉(zhuǎn)子怎么實(shí)現(xiàn)正反轉(zhuǎn)答案在于四個(gè)繞組在定子上的空間位置是錯(cuò)開(kāi)的它們沿著圓周分別布置在0°、90°、180°、270°的位置依次導(dǎo)通不同繞組磁場(chǎng)方向就會(huì)在圓周上旋轉(zhuǎn)轉(zhuǎn)子就會(huì)跟著磁場(chǎng)跑。2.2 用馬克斯韋爾方程看線圈電磁關(guān)系如果你只想寫驅(qū)動(dòng)代碼可以跳過(guò)這段但如果你要選型電機(jī)、計(jì)算扭矩或者做電磁仿真理解線圈的電磁關(guān)系非常關(guān)鍵。每個(gè)通電線圈中電流和磁鏈的關(guān)系滿足[\Phi L \cdot i]這里的L是電感它決定了電流上升的速度。步進(jìn)電機(jī)繞組的直流電阻通常很小比如幾歐姆而電感可能達(dá)到幾十毫亨所以電氣時(shí)間常數(shù)L/R會(huì)比較長(zhǎng)。你給一個(gè)24V電壓灌進(jìn)去電流是一點(diǎn)點(diǎn)爬升的不是瞬間到位的這個(gè)特性直接影響了高速時(shí)的扭矩衰減。還有反電動(dòng)勢(shì)的問(wèn)題。轉(zhuǎn)子旋轉(zhuǎn)時(shí)線圈在定子磁場(chǎng)中運(yùn)動(dòng)會(huì)感應(yīng)出與外加電壓相反的電動(dòng)勢(shì)轉(zhuǎn)速越高反電動(dòng)勢(shì)越大。我實(shí)測(cè)過(guò)一個(gè)額定12V的電機(jī)空載轉(zhuǎn)速拉到3000rpm時(shí)繞組端反電動(dòng)勢(shì)峰值能到6V以上如果不考慮這個(gè)因素去設(shè)計(jì)驅(qū)動(dòng)電路你可能會(huì)在高頻時(shí)發(fā)現(xiàn)扭矩掉得很厲害甚至出現(xiàn)丟步。如果需要做更精確的線圈仿真Maxwell 3D是個(gè)常用工具用它可以模擬繞組電感、磁場(chǎng)分布以及不同轉(zhuǎn)子位置下的磁鏈曲線。我在做一款閉環(huán)步進(jìn)方案時(shí)用Maxwell仿真過(guò)電感參數(shù)得到的靜態(tài)電感值和實(shí)際LCR表測(cè)的結(jié)果誤差在5%以內(nèi)仿真還能看到飽和效應(yīng)。不過(guò)對(duì)于絕大多數(shù)應(yīng)用場(chǎng)景手算L/R時(shí)間常數(shù)加上實(shí)測(cè)波形已經(jīng)足夠支撐設(shè)計(jì)決策。2.3 單極性與雙極性的取舍單極性和雙極性電機(jī)的對(duì)比是個(gè)老話題這里給一個(gè)直觀的表格項(xiàng)目單極性步進(jìn)電機(jī)雙極性步進(jìn)電機(jī)繞組結(jié)構(gòu)每個(gè)繞組帶中心抽頭每個(gè)繞組無(wú)中心抽頭電流方向固定方向不需要換向需要H橋雙向換向驅(qū)動(dòng)電路簡(jiǎn)單4~6個(gè)開(kāi)關(guān)管需要2個(gè)或4個(gè)H橋銅利用率較低同尺寸扭矩較小較高全繞組參與勵(lì)磁低速平穩(wěn)性較好適合打印類設(shè)備更優(yōu)適合高精度定位典型應(yīng)用低成本3D打印、小型儀表數(shù)控機(jī)床、工業(yè)機(jī)械臂單極性電機(jī)因?yàn)槊看沃粚?dǎo)通半個(gè)繞組銅線的利用率只有雙極性的一半左右所以同等體積下扭矩會(huì)偏小。但它的驅(qū)動(dòng)電路實(shí)在簡(jiǎn)單一個(gè)ULN2003芯片里面集成7個(gè)達(dá)林頓管能直接驅(qū)動(dòng)五線電機(jī)這在很多低成本的場(chǎng)景里是決定性的優(yōu)勢(shì)。選型時(shí)我先看實(shí)際扭矩需求和應(yīng)用電壓扭矩要求高于0.5N·m的場(chǎng)合一般優(yōu)先雙極性方案低于這個(gè)門檻則單極性性價(jià)比更高。3. 單相、雙相、半步三種驅(qū)動(dòng)模式的轉(zhuǎn)矩差異推導(dǎo)3.1 單相驅(qū)動(dòng)為什么叫“最省電但最容易抖”單相驅(qū)動(dòng)指的是任何一個(gè)時(shí)刻只有一相繞組通電四相電機(jī)依次輪流通電換相順序?yàn)锳→B→C→D→A。這種模式的優(yōu)點(diǎn)是單片機(jī)好寫四個(gè)IO口按順序拉低就行功耗也最低只有一組線圈在工作。但單相驅(qū)動(dòng)的致命問(wèn)題在轉(zhuǎn)矩特性。以兩相單極性電機(jī)為例定子磁場(chǎng)方向是跳躍式改變的轉(zhuǎn)子在每?jī)蓚€(gè)穩(wěn)定位置之間會(huì)經(jīng)歷轉(zhuǎn)矩過(guò)零的區(qū)域。說(shuō)得更直白一點(diǎn)轉(zhuǎn)子轉(zhuǎn)到某個(gè)中間位置時(shí)轉(zhuǎn)矩恰好為零如果沒(méi)有慣性沖過(guò)去轉(zhuǎn)子就停在那個(gè)位置不動(dòng)了——這就是經(jīng)典的單相驅(qū)動(dòng)“死點(diǎn)”。實(shí)際測(cè)試中我用四相電機(jī)做單相驅(qū)動(dòng)步距角1.8°給一個(gè)10V的電源電機(jī)在低速時(shí)運(yùn)轉(zhuǎn)尚可但用手捏住轉(zhuǎn)軸會(huì)感覺(jué)到明顯的頓挫感而且在某些角度上會(huì)感覺(jué)到“沒(méi)勁”那就是遇到了轉(zhuǎn)矩低谷。單相驅(qū)動(dòng)還有一個(gè)問(wèn)題是阻尼很弱一旦負(fù)載波動(dòng)轉(zhuǎn)子在平衡位置附近容易振蕩出現(xiàn)“嗡嗡”聲。雖然單相驅(qū)動(dòng)有這些缺點(diǎn)但它作為入門理解是極好的。它把步進(jìn)電機(jī)的原理簡(jiǎn)化為最純粹的“哪個(gè)線圈通電轉(zhuǎn)子就指向哪里”非常適合教學(xué)和驗(yàn)證。3.2 雙相驅(qū)動(dòng)通過(guò)矢量疊加消死點(diǎn)雙相驅(qū)動(dòng)就是同時(shí)給兩相繞組通電比如A和B一起通A?和B一起通。兩個(gè)繞組產(chǎn)生的磁場(chǎng)在空間上相差90°電角度合成磁場(chǎng)方向指向它們的中線位置。這樣一來(lái)轉(zhuǎn)子不再有單相驅(qū)動(dòng)時(shí)的中間死區(qū)因?yàn)槿魏螘r(shí)候總有一個(gè)繞組在提供有效的轉(zhuǎn)矩分量。用矢量圖來(lái)理解單相驅(qū)動(dòng)時(shí)合成磁動(dòng)勢(shì)只有兩個(gè)方向可選切換時(shí)存在90°的突變雙相驅(qū)動(dòng)時(shí)同時(shí)通電的兩相磁動(dòng)勢(shì)矢量疊加合成矢量落在45°方向每換一次相合成矢量旋轉(zhuǎn)45°比單相驅(qū)動(dòng)的90°更平滑。磁場(chǎng)矢量連續(xù)縮小了步距角的一半轉(zhuǎn)子的分辨率翻倍同時(shí)齒槽效應(yīng)和轉(zhuǎn)矩波動(dòng)明顯減小。雙相驅(qū)動(dòng)的實(shí)際效果我在一臺(tái)小型雕刻機(jī)上驗(yàn)證過(guò)同樣的電機(jī)和電壓從單相切成雙相驅(qū)動(dòng)后電機(jī)運(yùn)行的噪聲明顯降低旋轉(zhuǎn)更加平穩(wěn)用手反向扭動(dòng)轉(zhuǎn)軸能感覺(jué)到阻力均勻了很多。代價(jià)是功耗增加約一倍因?yàn)橥瑫r(shí)有兩個(gè)線圈在通電發(fā)熱會(huì)上去所以如果長(zhǎng)時(shí)間運(yùn)行需要關(guān)注電機(jī)表面溫度和驅(qū)動(dòng)芯片的散熱。3.3 半步驅(qū)動(dòng)是“通一相”和“通兩相”的交替組合半步驅(qū)動(dòng)的控制邏輯非常直觀把單相和雙相加在一起交替執(zhí)行。以四相電機(jī)為例導(dǎo)通序列為A→AB→B→BC→C→CD→D→DA→A。這樣每個(gè)換相步驟磁場(chǎng)矢量旋轉(zhuǎn)45°而不是單相的90°或雙相的90°步距角從1.8°變成了0.9°。這里要強(qiáng)調(diào)一下半步驅(qū)動(dòng)的步距角減半不等于精度翻倍。步進(jìn)電機(jī)是開(kāi)環(huán)控制位置精度取決于電機(jī)本身的制造精度和機(jī)械負(fù)載半步只提高了分辨率不代表絕對(duì)定位誤差會(huì)嚴(yán)格減半通常絕對(duì)定位精度要到整步和半步混合標(biāo)定之后才能評(píng)估。不過(guò)對(duì)大多數(shù)應(yīng)用半步行進(jìn)細(xì)膩程度已經(jīng)足夠。半步驅(qū)動(dòng)還有一個(gè)除了分辨率外的隱藏優(yōu)勢(shì)它結(jié)合了單相和雙相的轉(zhuǎn)矩特性合成轉(zhuǎn)矩的波動(dòng)比純單相小但又不至于像純雙相那樣持續(xù)高發(fā)熱是功耗和平穩(wěn)性之間的折中方案。我手頭有一臺(tái)老式的唱片機(jī)轉(zhuǎn)盤用的就是半步驅(qū)動(dòng)轉(zhuǎn)速波動(dòng)很小效果很好。四種驅(qū)動(dòng)模式的驅(qū)動(dòng)序列匯總模式導(dǎo)通序列四相電機(jī)步距角倍數(shù)特點(diǎn)單相WaveA→B→C→D1× 整步功耗最低轉(zhuǎn)矩波動(dòng)大雙相雙4拍AB→BC→CD→DA1× 整步扭矩大平穩(wěn)性好半步8拍A→AB→B→BC→C→CD→D→DA0.5×分辨率和穩(wěn)定性的平衡微步細(xì)分正弦電流插值0.1×~0.01×平滑度最高需專用芯片4. 從寄存器到脈沖手寫單極性步進(jìn)電機(jī)驅(qū)動(dòng)代碼4.1 先搞定硬件連接和GPIO初始化實(shí)操之前先把硬件接對(duì)。我常用來(lái)做演示的是一個(gè)四相五線單極性步進(jìn)電機(jī)額定電壓5V步距角1.8°配合ULN2003驅(qū)動(dòng)板。接線方式是電機(jī)紅線接驅(qū)動(dòng)板端接外部電源正橙、黃、粉、藍(lán)四根線分別接驅(qū)動(dòng)板的IN1~IN4驅(qū)動(dòng)板的GND和單片機(jī)共地IN1~IN4再接單片機(jī)的四個(gè)GPIO。引腳定義在代碼里寫清楚我用的是STM32的HAL庫(kù)但邏輯對(duì)任何單片機(jī)都通用#define MOTOR_A_PIN GPIO_PIN_0 // PA0 - ULN2003 IN1 #define MOTOR_B_PIN GPIO_PIN_1 // PA1 - ULN2003 IN2 #define MOTOR_C_PIN GPIO_PIN_2 // PA2 - ULN2003 IN3 #define MOTOR_D_PIN GPIO_PIN_3 // PA3 - ULN2003 IN4初始化到這一步就可以準(zhǔn)備測(cè)試脈沖了不過(guò)優(yōu)先要確認(rèn)一件事電機(jī)公共端電壓是否匹配驅(qū)動(dòng)板的電源輸入5V電機(jī)別直接接24V否則繞組會(huì)過(guò)熱甚至燒掉。4.2 半步驅(qū)動(dòng)狀態(tài)機(jī)的實(shí)現(xiàn)細(xì)節(jié)模式切換的核心是一個(gè)查表法把半步驅(qū)動(dòng)的八個(gè)狀態(tài)做成一個(gè)數(shù)組每次換相就是移動(dòng)數(shù)組下標(biāo)。我用一個(gè)狀態(tài)機(jī)來(lái)實(shí)現(xiàn)這樣可以方便地在單相、雙相、半步之間切換只需要換不同的表。// 半步驅(qū)動(dòng)表前四位對(duì)應(yīng)A/B/C/D引腳電平1導(dǎo)通 const uint8_t half_step_table[8][4] { {1, 0, 0, 0}, // A導(dǎo)通 {1, 1, 0, 0}, // AB導(dǎo)通 {0, 1, 0, 0}, // B導(dǎo)通 {0, 1, 1, 0}, // BC導(dǎo)通 {0, 0, 1, 0}, // C導(dǎo)通 {0, 0, 1, 1}, // CD導(dǎo)通 {0, 0, 0, 1}, // D導(dǎo)通 {1, 0, 0, 1}, // DA導(dǎo)通 }; static uint8_t step_index 0; void stepper_set_output(uint8_t a, uint8_t b, uint8_t c, uint8_t d) { HAL_GPIO_WritePin(GPIOA, MOTOR_A_PIN, a ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, MOTOR_B_PIN, b ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, MOTOR_C_PIN, c ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOA, MOTOR_D_PIN, d ? GPIO_PIN_SET : GPIO_PIN_RESET); } void stepper_step_forward(void) { step_index (step_index 1) % 8; stepper_set_output( half_step_table[step_index][0], half_step_table[step_index][1], half_step_table[step_index][2], half_step_table[step_index][3] ); } void stepper_step_backward(void) { step_index (step_index 7) % 8; stepper_set_output( half_step_table[step_index][0], half_step_table[step_index][1], half_step_table[step_index][2], half_step_table[step_index][3] ); }注意示例代碼里GPIO高電平有效ULN2003內(nèi)部是達(dá)林頓管輸入輸入高電平對(duì)應(yīng)的輸出端會(huì)導(dǎo)通到地。不同驅(qū)動(dòng)板的邏輯可能相反如果發(fā)現(xiàn)通電后電機(jī)不動(dòng)先把某個(gè)IO置高再用萬(wàn)用表量驅(qū)動(dòng)板對(duì)應(yīng)輸出端的電壓排查邏輯方向。4.3 速度和加減速怎么算步進(jìn)電機(jī)的速度控制核心是脈沖間隔時(shí)間。半步模式下步距角0.9°所以轉(zhuǎn)一圈需要360/0.9400個(gè)脈沖。假設(shè)你希望電機(jī)以60rpm轉(zhuǎn)速旋轉(zhuǎn)那么每秒需要400個(gè)脈沖也就是每個(gè)脈沖間隔為2.5毫秒。代碼里的延時(shí)時(shí)間不能直接寫死否則速度不可調(diào)。我用一個(gè)簡(jiǎn)單的速度控制器通過(guò)修改脈沖間隔來(lái)變速。對(duì)于加減速控制最常用的是梯形加減速曲線即啟動(dòng)時(shí)脈沖逐步加密到達(dá)目標(biāo)速度后勻速停止時(shí)逐步稀疏防止丟步和過(guò)沖。// 梯形加減速簡(jiǎn)化實(shí)現(xiàn)假設(shè)accel_steps100 uint16_t delay_us 5000; // 初始速度慢 uint16_t min_delay_us 2000; // 目標(biāo)速度脈沖間隔短 uint16_t accel_step (delay_us - min_delay_us) / 100; // 每步縮短的時(shí)間 void stepper_run_trapezoid(uint32_t target_steps) { uint32_t step_count 0; while (step_count target_steps) { stepper_step_forward(); // 前100步加速 if (step_count 100 delay_us min_delay_us) { delay_us - accel_step; } // 最后100步減速需要預(yù)留100步的提前量 if (step_count target_steps - 100 delay_us 5000) { delay_us accel_step; } delayMicroseconds(delay_us); step_count; } }加減速參數(shù)要根據(jù)負(fù)載慣量調(diào)整慣量大就加長(zhǎng)加速區(qū)間否則啟動(dòng)時(shí)電機(jī)會(huì)因?yàn)閼T性跟不上脈沖頻率而丟步。調(diào)試時(shí)我先用一個(gè)極低的初始速度驗(yàn)證換相是否正常再逐步提高這樣能把系統(tǒng)的極限轉(zhuǎn)速摸清楚。4.4 用微步細(xì)分把低頻振動(dòng)磨平上面的例子只到半步。如果還想進(jìn)一步降低振動(dòng)和噪聲就要用微步細(xì)分原理是把每個(gè)整步內(nèi)的電流按照正弦規(guī)律逐步變化讓磁場(chǎng)矢量平滑旋轉(zhuǎn)。商用細(xì)分驅(qū)動(dòng)芯片如A4988、DRV8825內(nèi)部已經(jīng)實(shí)現(xiàn)了正弦波細(xì)分你只需要設(shè)置MS1/MS2引腳選擇細(xì)分倍數(shù)再給STEP引腳發(fā)脈沖即可。使用細(xì)分芯片時(shí)步距角計(jì)算公式要相應(yīng)更新一圈脈沖數(shù) 360 / (步距角 / 細(xì)分?jǐn)?shù))。例如步距角1.8°電機(jī)16細(xì)分時(shí)一圈需要3200個(gè)脈沖。這時(shí)候如果還用上面的代碼只要把延時(shí)公式按照3200脈沖/圈重新算一遍就行控制邏輯完全兼容。我在實(shí)際項(xiàng)目里對(duì)要求高平穩(wěn)性的場(chǎng)景一律開(kāi)細(xì)分3D打印開(kāi)1/16細(xì)分光學(xué)平臺(tái)開(kāi)1/32細(xì)分甚至更多。細(xì)分能改善低速時(shí)的爬行現(xiàn)象但是對(duì)于高速運(yùn)行細(xì)分的意義不大因?yàn)槊课⒉降耐A魰r(shí)間極短電流波形基本來(lái)不及建立。5. 實(shí)際操作中的異常、故障排查與參數(shù)標(biāo)定5.1 電機(jī)不轉(zhuǎn)但線圈發(fā)熱的排查順序這是新手最容易遇到的問(wèn)題之一。電機(jī)接上電源程序跑起來(lái)轉(zhuǎn)軸紋絲不動(dòng)但沒(méi)過(guò)一會(huì)兒電機(jī)外殼就開(kāi)始發(fā)燙。我的排查步驟一般是先看供電電壓用萬(wàn)用表量公共端電壓是否正常。很多單極性電機(jī)公共端接的是外部電源正極但驅(qū)動(dòng)板上的口和單片機(jī)共地了嗎如果沒(méi)共地驅(qū)動(dòng)管的控制信號(hào)沒(méi)有參考地輸出端根本拉不低線圈里一直通著恒定電流電機(jī)自然發(fā)熱但不轉(zhuǎn)。這是最常見(jiàn)的接線錯(cuò)誤。再看GPIO邏輯把程序步長(zhǎng)放得極慢比如每500毫秒換一次相用萬(wàn)用表量電機(jī)四根引出線的電壓正常應(yīng)該依次看到低電平。如果某一個(gè)引腳始終是高電平說(shuō)明那一相沒(méi)有導(dǎo)通檢查GPIO配置、代碼里的驅(qū)動(dòng)表、以及ULN2003對(duì)應(yīng)通道是否損壞。最后看驅(qū)動(dòng)表的相序和實(shí)際接線的對(duì)應(yīng)關(guān)系。電機(jī)四條引出線的顏色順序和驅(qū)動(dòng)板的IN1~IN4不一定一一對(duì)應(yīng)調(diào)換其中兩組線的順序旋轉(zhuǎn)方向可能就正常了。如果四根線順序全亂磁場(chǎng)方向就會(huì)亂跳同樣不轉(zhuǎn)。5.2 丟步和共振的工程對(duì)策丟步是步進(jìn)電機(jī)開(kāi)環(huán)控制的通病表現(xiàn)是負(fù)載加大時(shí)電機(jī)轉(zhuǎn)軸動(dòng)的步數(shù)和指令不符或者干脆停下來(lái)。解決思路分三步第一步檢查電流把驅(qū)動(dòng)電壓或限流電阻調(diào)大增加轉(zhuǎn)矩儲(chǔ)備第二步降速讓脈沖頻率低于電機(jī)的最大自啟動(dòng)頻率尤其是啟動(dòng)瞬間需要加速曲線第三步檢查機(jī)械負(fù)載有沒(méi)有卡滯、皮帶是不是太緊這些機(jī)械上的小阻力在低速時(shí)看不出來(lái)高速時(shí)全都會(huì)變成丟步的誘因。共振通常出現(xiàn)在某一特定轉(zhuǎn)速區(qū)間。步進(jìn)電機(jī)的轉(zhuǎn)子、負(fù)載和連接件構(gòu)成了一個(gè)彈簧-質(zhì)量系統(tǒng)每個(gè)電機(jī)都有固有的共振頻率。當(dāng)脈沖頻率落在共振點(diǎn)附近時(shí)振動(dòng)會(huì)急劇放大噪聲變大甚至失步。實(shí)操中最快的解決辦法是避開(kāi)這段頻率將運(yùn)行轉(zhuǎn)速往上或往下調(diào)一點(diǎn)。還有一招是用細(xì)分將激勵(lì)頻率移到驅(qū)動(dòng)器的響應(yīng)帶寬之外共振幅度會(huì)小很多。我調(diào)試一個(gè)絲桿滑臺(tái)時(shí)在1000Hz附近整個(gè)平臺(tái)“嗡嗡”作響后來(lái)把半步切成1/8細(xì)分噪聲立刻小了很多這就是細(xì)分改善共振的典型表現(xiàn)。5.3 霍爾傳感器與零位標(biāo)定的組合用法有些項(xiàng)目不只讓電機(jī)轉(zhuǎn)還要讓它回零。步進(jìn)電機(jī)本身沒(méi)有位置反饋失步后位置就丟了所以很多設(shè)備會(huì)加一個(gè)接近開(kāi)關(guān)或霍爾傳感器作為零點(diǎn)參考。開(kāi)機(jī)后先以一個(gè)固定方向運(yùn)行直到觸發(fā)零位信號(hào)再把計(jì)數(shù)器清零之后所有的位置都基于這個(gè)零點(diǎn)進(jìn)行累加。我在一個(gè)轉(zhuǎn)盤機(jī)構(gòu)上用霍爾傳感器小磁鐵做零位程序里啟動(dòng)后先以雙相驅(qū)動(dòng)大電流模式快速找零找到后切到半步模式精確定位這樣一個(gè)“粗找精定位”的流程整個(gè)回零過(guò)程不到一秒鐘精度可以穩(wěn)定在1/4個(gè)半步以內(nèi)。如果你也想做閉環(huán)還可以加編碼器測(cè)量實(shí)際轉(zhuǎn)角做PID補(bǔ)償這樣就是完整的閉環(huán)步進(jìn)方案了。6. 調(diào)試步進(jìn)電機(jī)項(xiàng)目時(shí)的個(gè)人經(jīng)驗(yàn)與工具準(zhǔn)備工具方面我建議常備一個(gè)邏輯分析儀便宜的那種就夠用。把STEP和DIR引腳接上去可以在上位機(jī)看到脈沖波形快速判斷主控發(fā)出的信號(hào)是否正確排除電機(jī)端的機(jī)械問(wèn)題。示波器更適合觀測(cè)繞組電流波形能看到電流建立過(guò)程和續(xù)流情況。如果發(fā)現(xiàn)電流上升太慢多半是驅(qū)動(dòng)電壓不夠高步進(jìn)電機(jī)驅(qū)動(dòng)有一個(gè)常用的做法用高電壓加上限流電阻或斬波恒流讓電流快速建立低速和高速兼顧。用12V驅(qū)動(dòng)額定5V的電機(jī)加上PWM限流是我在實(shí)驗(yàn)室比較常用的方案低速扭矩明顯比直連5V好。再提一個(gè)Maxwell 3D的進(jìn)階場(chǎng)景。如果你在設(shè)計(jì)自己的電機(jī)定子結(jié)構(gòu)可以用靜態(tài)磁場(chǎng)仿真查看某相電流下的磁力線分布計(jì)算不同轉(zhuǎn)子位置下的轉(zhuǎn)矩-角度曲線。仿真得到的數(shù)據(jù)可以導(dǎo)出為表格再在代碼里做成轉(zhuǎn)矩查表這屬于從線圈到代碼的完整貫通雖然復(fù)雜但確實(shí)是電機(jī)驅(qū)動(dòng)領(lǐng)域最徹底的掌握方式。另外一個(gè)很實(shí)用的小技巧步進(jìn)電機(jī)長(zhǎng)時(shí)間低速運(yùn)行發(fā)熱是正常的繞組電流持續(xù)存在。判斷是否過(guò)熱不能靠手摸用紅外測(cè)溫槍測(cè)繞組表面溫度通常不要超過(guò)80°C。如果超了要么降低電流要么加散熱否則線圈絕緣會(huì)老化最終短路燒毀電機(jī)。個(gè)人實(shí)操下來(lái)單極性步進(jìn)電機(jī)是很好的入門平臺(tái)從線圈結(jié)構(gòu)、電磁原理到驅(qū)動(dòng)代碼一環(huán)扣一環(huán)。先搞懂磁場(chǎng)怎么旋轉(zhuǎn)再看代碼里的狀態(tài)機(jī)怎么換相最后調(diào)速度和加速度整個(gè)知識(shí)體系就建立起來(lái)了。單相、雙相、半步到細(xì)分其實(shí)都是同一個(gè)物理本質(zhì)的不同控制策略理解了矢量疊加后面任何驅(qū)動(dòng)方式都能看得通。