電機(jī)精確定位:S型加減速與失步檢測(cè)實(shí)戰(zhàn))
簡(jiǎn)介關(guān)于STM32F103與TMC2209步進(jìn)電機(jī)S型加減速精確定位系統(tǒng)的完整技術(shù)文檔面向具備嵌入式C語(yǔ)言基礎(chǔ)、熟悉STM32開(kāi)發(fā)的工程師、電子愛(ài)好者以及3D打印、數(shù)控雕刻機(jī)、機(jī)器人關(guān)節(jié)等運(yùn)動(dòng)控制領(lǐng)域研發(fā)人員用于解決電機(jī)啟停失步、振動(dòng)、噪聲影響定位精度等工程問(wèn)題。文檔系統(tǒng)講解了TMC2209驅(qū)動(dòng)芯片的寄存器配置、UART串口通信、定時(shí)器脈沖生成與S型/梯形加減速算法實(shí)現(xiàn)并深入介紹stallGuard4堵轉(zhuǎn)檢測(cè)、多軸同步控制、G代碼解析及回零操作等擴(kuò)展功能幫助讀者實(shí)現(xiàn)低噪聲、高精度的步進(jìn)電機(jī)控制。文中附有硬件接線圖表、控制流程框圖和調(diào)試建議提出利用串口工具與邏輯分析儀觀測(cè)波形、逐步驗(yàn)證各項(xiàng)功能的方法適合結(jié)合硬件平臺(tái)邊實(shí)踐邊學(xué)習(xí)。資源包共1個(gè)PDF文件整體約827KB內(nèi)容精煉覆蓋從硬件搭建到軟件算法再到調(diào)試優(yōu)化的完整鏈路。目前已有74人學(xué)習(xí)下載是入門(mén)高性能步進(jìn)電機(jī)控制與精密定位系統(tǒng)設(shè)計(jì)的實(shí)用參考資料。 做運(yùn)動(dòng)控制設(shè)備的人應(yīng)該都經(jīng)歷過(guò)這種抓狂的瞬間三軸雕刻機(jī)空跑一切正常帶上負(fù)載速度一拉起來(lái)步進(jìn)電機(jī)開(kāi)始“噠噠噠”尖叫走到一半直接丟步停下來(lái)位置偏了一截。后來(lái)我換掉整套方案用STM32做脈沖生成和運(yùn)動(dòng)狀態(tài)管理TMC2209當(dāng)驅(qū)動(dòng)芯片負(fù)責(zé)細(xì)分和失步診斷再配合S型加減速算法把加加速度控制住這套組合才真正穩(wěn)下來(lái)。同樣的機(jī)械結(jié)構(gòu)定位誤差從肉眼可見(jiàn)的毫米級(jí)降到穩(wěn)定的半細(xì)分步以?xún)?nèi)中高速噪聲也明顯下降。這篇文章把整個(gè)系統(tǒng)的設(shè)計(jì)思路、落地細(xì)節(jié)和現(xiàn)場(chǎng)調(diào)試過(guò)程完整拆開(kāi)講適合正在做基于STM32的步進(jìn)電機(jī)精確定位項(xiàng)目的工程師也適合被丟步問(wèn)題折磨的DIY玩家參考。1. 為什么把TMC2209放在這套定位系統(tǒng)的核心位置1.1 定位誤差的三個(gè)來(lái)源驅(qū)動(dòng)芯片管得上兩個(gè)步進(jìn)電機(jī)本質(zhì)上是開(kāi)環(huán)執(zhí)行器你給它多少個(gè)脈沖它就理論轉(zhuǎn)多少步。但實(shí)際項(xiàng)目里誤差來(lái)源可以分成三層機(jī)械層絲杠回差、皮帶彈性、聯(lián)軸器間隙電氣層驅(qū)動(dòng)芯片的電流波形質(zhì)量、斬波噪聲、電流衰減模式運(yùn)動(dòng)學(xué)層加減速過(guò)程中的沖擊導(dǎo)致失步或過(guò)沖。后兩層的責(zé)任主要在驅(qū)動(dòng)芯片第三層的一半問(wèn)題也是驅(qū)動(dòng)芯片力矩響應(yīng)不夠平滑而放大的。很多項(xiàng)目一丟步就怪電機(jī)太小其實(shí)是驅(qū)動(dòng)芯片在中高速段力矩掉得太快、電流波形失真再加上加減速曲線太激進(jìn)三者疊加才導(dǎo)致失步。TMC2209這個(gè)芯片把電氣層的問(wèn)題解決得比較徹底。它內(nèi)置256微步插值外部給一個(gè)整步脈沖內(nèi)部會(huì)插值出最多256個(gè)微步實(shí)際效果就是用很小的物理步距角把運(yùn)動(dòng)“抹平”了。這在低速段特別明顯——同樣的脈沖頻率A4988驅(qū)動(dòng)下的電機(jī)會(huì)有可感知的振動(dòng)和噪聲TMC2209則是接近安靜的勻速轉(zhuǎn)動(dòng)。定位分辨率也從整步提升了一個(gè)量級(jí)。1.2 TMC2209比手里其他驅(qū)動(dòng)芯片強(qiáng)在哪這里放一張直觀的對(duì)比表把常見(jiàn)驅(qū)動(dòng)方案的差異列出來(lái)項(xiàng)目A4988DRV8825TB6600TMC2209最大細(xì)分163232部分256插值靜音算法無(wú)無(wú)無(wú)StealthChop2失步/堵轉(zhuǎn)檢測(cè)無(wú)無(wú)無(wú)StallGuard2配置方式撥碼撥碼撥碼UART單線中高速力矩表現(xiàn)一般一般一般較好TMC2209的StallGuard2是最容易被忽略但價(jià)值最高的功能。它不需要編碼器通過(guò)檢測(cè)反電動(dòng)勢(shì)來(lái)估算當(dāng)前負(fù)載芯片診斷寄存器里的值會(huì)隨負(fù)載變化。這意味著在純開(kāi)環(huán)系統(tǒng)里你也能知道電機(jī)是否快堵轉(zhuǎn)了對(duì)定位系統(tǒng)來(lái)說(shuō)等于多了一層保險(xiǎn)。不過(guò)這里有一個(gè)電機(jī)選型上的教訓(xùn)TMC2209在低電感電機(jī)上表現(xiàn)最好推薦1到5mH。如果選了高電感電機(jī)StealthChop2的正弦電流波形會(huì)失真靜音效果和力矩都打折。我實(shí)測(cè)6.3mH的57步進(jìn)低速還行中高速明顯不如低電感型號(hào)后來(lái)?yè)Q2.2mH電機(jī)才正常。如果手頭已有高電感電機(jī)有個(gè)折中方案——把StealthChop2的自動(dòng)調(diào)諧靈敏度調(diào)低一點(diǎn)犧牲一點(diǎn)靜音性換取波形穩(wěn)定。2. S型加減速的參數(shù)化設(shè)計(jì)梯形方案為什么不夠用2.1 加速度突變是丟步和抖動(dòng)的元兇先聊梯形加減速。它的特點(diǎn)是加速段加速度恒定速度線性上升到達(dá)目標(biāo)速度后勻速停止前線性減速。優(yōu)點(diǎn)是計(jì)算簡(jiǎn)單、定時(shí)器ARR值線性變化好更新缺點(diǎn)也明顯——加速度在啟動(dòng)瞬間、加速轉(zhuǎn)勻速瞬間、勻速轉(zhuǎn)減速瞬間、停止瞬間四次突變。加速度突變意味著加加速度Jerk趨近無(wú)窮大。放在機(jī)械上就是四個(gè)沖擊點(diǎn)絲杠和螺母的間隙被突然壓緊又松開(kāi)皮帶被拉長(zhǎng)又彈回。放到定位系統(tǒng)里減速結(jié)束時(shí)這個(gè)沖擊會(huì)讓負(fù)載產(chǎn)生微小滑移導(dǎo)致每次停的位置不太一樣加速段沖擊嚴(yán)重時(shí)會(huì)直接丟步。用一個(gè)簡(jiǎn)單比喻梯形加減速像開(kāi)手動(dòng)擋車(chē)瞬間松離合S型加減速像自動(dòng)擋起步——?jiǎng)恿鬟f是漸進(jìn)的沖擊小得多。這個(gè)差別在低速小慣量系統(tǒng)里不明顯一旦負(fù)載上去或者速度拉起來(lái)差距就非常明顯。2.2 七段式S曲線的工程簡(jiǎn)化完整的S型曲線分七段加加速段、勻加速段、減加速段、勻速段、加減速段、勻減速段、減減速段。其中前三段組成了完整加速過(guò)程后三段是減速過(guò)程中間是勻速段。關(guān)鍵參數(shù)有三個(gè)最大速度 vmax最大加速度 amax最大加加速度 jmax加加速段時(shí)間 ta amax / jmax。這個(gè)時(shí)間決定了加速過(guò)程的“圓滑程度”ta越大曲線越緩但加速總時(shí)間也越長(zhǎng)。工程上我不建議在定時(shí)器中斷里實(shí)時(shí)計(jì)算S曲線。浮點(diǎn)運(yùn)算在中斷里雖然STM32也扛得住但會(huì)拉長(zhǎng)中斷執(zhí)行時(shí)間造成脈沖間隔抖動(dòng)反而影響定位精度。更穩(wěn)妥的做法是查表法程序初始化階段把速度和對(duì)應(yīng)的定時(shí)器ARR值生成一張表運(yùn)動(dòng)過(guò)程中每個(gè)Tick直接查表更新ARR不做浮點(diǎn)運(yùn)算。加速段速度表生成的簡(jiǎn)化邏輯#define TABLE_LEN 512 uint32_t arr_table[TABLE_LEN]; void gen_speed_table(float v0, float vmax, float amax, float jmax, float fs, float dt) { float v v0; float a 0.0f; float jerk jmax; for (int i 0; i TABLE_LEN; i) { arr_table[i] (uint32_t)(fs / v); a jerk * dt; if (a amax) a amax; v a * dt; if (v vmax) { v vmax; } } }這里的fs是定時(shí)器計(jì)數(shù)頻率dt是每個(gè)表項(xiàng)對(duì)應(yīng)的時(shí)間步長(zhǎng)。ARR值變化越平滑實(shí)際速度曲線就越貼近理論S型。2.3 減速點(diǎn)的計(jì)算很多人栽在這里實(shí)現(xiàn)S型加減速最容易出錯(cuò)的地方不是曲線生成而是減速點(diǎn)判斷。一個(gè)運(yùn)動(dòng)任務(wù)有目標(biāo)距離D加速段要走的步數(shù)記為Na減速段要走的步數(shù)記為Nd。如果D大于Na加Nd運(yùn)動(dòng)能達(dá)到最大速度中間有一段勻速如果D小于等于Na加Nd說(shuō)明距離太短根本到不了最大速度這時(shí)候要做“三角形”運(yùn)動(dòng)——加速到某個(gè)中間速度后立刻減速。很多新手直接用滿(mǎn)速計(jì)劃減速點(diǎn)短距離任務(wù)就會(huì)沖過(guò)目標(biāo)。我的做法是先按滿(mǎn)速計(jì)算Na和Nd如果不夠用解析法找出實(shí)際能達(dá)到的最高速度重新生成一條縮短的S曲線。查表法在這里也方便因?yàn)楸硎穷A(yù)生成的運(yùn)行時(shí)只需要確定查表索引走到哪里開(kāi)始反向查減速表即可。3. STM32工程里的定時(shí)器、狀態(tài)機(jī)與脈沖生成細(xì)節(jié)3.1 定時(shí)器資源怎么分脈沖頻率怎么算STM32生成步進(jìn)脈沖的常見(jiàn)方式有兩種。第一種是PWM輸出模式配DMA把目標(biāo)脈沖數(shù)預(yù)加載到比較寄存器硬件自動(dòng)輸出指定個(gè)數(shù)的脈沖。優(yōu)點(diǎn)是CPU介入少、脈沖頻率高且穩(wěn)定適合高速連續(xù)運(yùn)動(dòng)。缺點(diǎn)是加減速動(dòng)態(tài)改頻率時(shí)需要同步更新ARR和CCR時(shí)序處理不好會(huì)有毛刺。第二種是在定時(shí)器更新中斷里翻轉(zhuǎn)IO口每個(gè)中斷翻轉(zhuǎn)一次形成方波。邏輯簡(jiǎn)單直觀適合頻率不太高幾百kHz以?xún)?nèi)的場(chǎng)景并且方便在中斷里順便做位置計(jì)數(shù)和狀態(tài)遷移。我做的單軸定位系統(tǒng)用的就是這種方式把中斷里的事情控制在微秒級(jí)實(shí)測(cè)200kHz以下脈沖輸出很穩(wěn)定。定時(shí)器的分配建議一個(gè)定時(shí)器做步進(jìn)脈沖輸出如TIM1一個(gè)定時(shí)器做運(yùn)動(dòng)控制時(shí)基Tick如TIM2每1ms中斷一次負(fù)責(zé)狀態(tài)機(jī)刷新一個(gè)定時(shí)器做UART輪詢(xún)或看門(mén)狗時(shí)基三軸及以上系統(tǒng)每個(gè)軸至少要一個(gè)脈沖定時(shí)器特別注意引腳復(fù)用沖突比如TIM1的CH1和UART的TX經(jīng)常共用PA9需要先查數(shù)據(jù)手冊(cè)再分配。脈沖頻率和速度的換算關(guān)系必須明確。假設(shè)步距角1.8度、細(xì)分16、絲杠導(dǎo)程4mm想跑120mm/s則每秒需要的脈沖數(shù)為f (v / lead) * (steps_per_rev * microstep) (120 / 4) * (200 * 16) 96000 Hz這個(gè)頻率對(duì)應(yīng)的定時(shí)器ARR值以72MHz計(jì)數(shù)時(shí)鐘為例是 72000000 / 96000 750。3.2 運(yùn)動(dòng)狀態(tài)機(jī)的實(shí)現(xiàn)邏輯運(yùn)動(dòng)控制里的狀態(tài)機(jī)我習(xí)慣拆成六個(gè)狀態(tài)IDLE待機(jī)脈沖輸出關(guān)閉ACCEL加速查表更新ARRRUN勻速ARR固定DECEL減速反向查表STOP停止保持電流FAULT異常如失步警告或限位觸發(fā)中斷偽代碼如下void TIM1_UP_IRQHandler(void) { if (state ACCEL) { if (accel_index TABLE_LEN) { __HAL_TIM_SET_AUTORELOAD(htim1, arr_table[accel_index]); } else { state RUN; __HAL_TIM_SET_AUTORELOAD(htim1, RUN_ARR); } } else if (state DECEL) { if (decel_index 0) { __HAL_TIM_SET_AUTORELOAD(htim1, arr_table[decel_index--]); } else { state STOP; stop_motor(); } } if (dir FORWARD) pos_counter; else pos_counter--; }有個(gè)重要細(xì)節(jié)位置計(jì)數(shù)最好在中斷里累加而不是事后讀定時(shí)器CNT。雖然CNT也能反映位置但定時(shí)器重裝ARR時(shí)CNT的相位和脈沖波形不一定對(duì)應(yīng)。自己維護(hù)一個(gè)32位步數(shù)計(jì)數(shù)器簡(jiǎn)單又可靠注意溢出處理。減速點(diǎn)的切換由另一個(gè)狀態(tài)判斷函數(shù)處理放在時(shí)基中斷里。每次Tick檢查當(dāng)前已走步數(shù)如果剩余步數(shù)小于減速表長(zhǎng)度就把狀態(tài)切成DECEL。這樣加減速可以完全對(duì)稱(chēng)實(shí)現(xiàn)簡(jiǎn)單調(diào)試也直觀。4. 精確定位的三道保險(xiǎn)原點(diǎn)、失步檢測(cè)與末端穩(wěn)定4.1 Home流程決定坐標(biāo)基準(zhǔn)不能省精確定位必須有穩(wěn)定可靠的原點(diǎn)。很多人直接開(kāi)機(jī)全速往限位開(kāi)關(guān)撞觸發(fā)就設(shè)為原點(diǎn)。這樣做的重復(fù)精度很差因?yàn)橄尬婚_(kāi)關(guān)觸發(fā)有機(jī)械反彈和電氣抖動(dòng)全速撞擊的位置一致性很差。我用的Home流程分三步以20mm/s左右的速度接近限位碰到后反向退開(kāi)一段安全距離。再用3到5mm/s的爬行速度重新接近觸發(fā)后把當(dāng)前位置記為粗原點(diǎn)。從粗原點(diǎn)正向走一個(gè)固定距離比如10mm再回到粗原點(diǎn)目的是消除絲杠回差把最終原點(diǎn)記錄下來(lái)。這樣處理之后原點(diǎn)的重復(fù)精度可以到微米級(jí)主要受限于絲杠螺距誤差和限位開(kāi)關(guān)的機(jī)械一致性而不是觸發(fā)瞬間的速度。4.2 把StallGuard2當(dāng)成開(kāi)環(huán)系統(tǒng)的“第六感”開(kāi)環(huán)定位最怕的就是失步不自知。TMC2209的StallGuard2可以在不增加編碼器的情況下給出負(fù)載估算這就能做兩件事運(yùn)行中周期讀診斷寄存器負(fù)載突變時(shí)視為堵轉(zhuǎn)或碰撞觸發(fā)急停。標(biāo)定正常負(fù)載區(qū)間低于閾值就報(bào)警。TMC2209的UART是單線半雙工PDN_UART引腳復(fù)用。通信上有幾個(gè)坑必須注意PDN_UART引腳不用時(shí)要通過(guò)上拉電阻保持高電平否則芯片進(jìn)入掉電模式表現(xiàn)為驅(qū)動(dòng)完全沒(méi)反應(yīng)。發(fā)送時(shí)切換成UART功能閑置后要恢復(fù)成GPIO高電平很多模塊沒(méi)有自動(dòng)處理這個(gè)切換。幀格式是寫(xiě)保護(hù)加CRC配置寄存器時(shí)注意地址和CRC計(jì)算我調(diào)試時(shí)遇到最多的問(wèn)題就是CRC不對(duì)導(dǎo)致寫(xiě)配置不生效。讀診斷的邏輯大概是發(fā)讀請(qǐng)求幀到地址0x00解析返回幀的IOIN寄存器把SG_RESULT字段取出來(lái)。值越小負(fù)載越大具體閾值要根據(jù)實(shí)際機(jī)械負(fù)載標(biāo)定。4.3 末端停止策略別讓電機(jī)停在“晃動(dòng)”里停止位置準(zhǔn)了但如果停止后負(fù)載還在絲杠回差范圍內(nèi)來(lái)回晃最終誤差照樣大。解決思路兩條。一是停止后立即切到保持電流。通常保持電流是運(yùn)行電流的50%到80%既能保證足夠的保持力矩又不會(huì)讓電機(jī)過(guò)熱。TMC2209可以用UART配置獨(dú)立的保持電流比例。二是末端減速要足夠緩。如果S曲線的減速段太短最終停止時(shí)速度還比較高絲杠的慣性會(huì)帶動(dòng)負(fù)載過(guò)沖一點(diǎn)點(diǎn)然后又因?yàn)榛夭顝椈?。我?xí)慣最后一段速度降到2到5mm/s以下再停止機(jī)械沖擊和回彈都小很多。關(guān)于細(xì)分補(bǔ)充一個(gè)觀點(diǎn)細(xì)分不是越大越好。超過(guò)電機(jī)物理分辨率太多時(shí)比如1.8度電機(jī)配256細(xì)分物理上單個(gè)微步只有0.007度對(duì)定位精度沒(méi)有實(shí)際提升反而減小有效保持力矩。普通1.8度步進(jìn)電機(jī)用16到64細(xì)分已經(jīng)足夠TMC2209的256微步插值在低速段的順滑作用是額外福利不用刻意追求。5. 現(xiàn)場(chǎng)調(diào)試踩過(guò)的三個(gè)坑與完整排查鏈路5.1 電流配置與溫度失控第一次用TMC2209時(shí)我把57步進(jìn)電機(jī)電流配到1.5A RMS空載跑起來(lái)正常結(jié)果連續(xù)運(yùn)行十幾分鐘后芯片燙得手不能碰。奇怪的是電機(jī)在低速段反而出現(xiàn)輕微振動(dòng)這是StealthChop2邊界振蕩的表現(xiàn)。排查下來(lái)是電流增益過(guò)高且StealthChop2自動(dòng)調(diào)諧靈敏度在邊界附近來(lái)回?cái)[動(dòng)。把運(yùn)行電流降到1.2A同時(shí)把自動(dòng)調(diào)諧靈敏度調(diào)低一檔溫度和振動(dòng)都恢復(fù)正常。后來(lái)我養(yǎng)成了習(xí)慣任何新機(jī)構(gòu)上電先跑10分鐘溫升測(cè)試驅(qū)動(dòng)芯片溫度穩(wěn)定在60度以?xún)?nèi)才算安全。還有一個(gè)容易忽略的點(diǎn)芯片底下的大面積焊盤(pán)必須可靠接地并留散熱銅皮只靠引腳散熱是不夠的。我有一塊自制的轉(zhuǎn)接板布局時(shí)忽略了散熱過(guò)孔同樣的電流配置下溫度比成品模塊高了近15度。5.2 皮帶機(jī)構(gòu)高頻嘯叫根源在加減速段太短另一臺(tái)皮帶傳動(dòng)設(shè)備出現(xiàn)大約2kHz的高頻嘯叫。開(kāi)始懷疑齒輪嚙合和皮帶張緊度調(diào)了張緊輪沒(méi)效果。后來(lái)把運(yùn)動(dòng)參數(shù)拉出來(lái)分析發(fā)現(xiàn)加速段只有50msJerk等于很大加速度變化在幾十毫秒內(nèi)完成頻譜成分剛好落在皮帶橫向振動(dòng)的共振頻段。把加速段時(shí)間從50ms延長(zhǎng)到200ms嘯叫立即消失。這個(gè)案例提醒我S曲線的參數(shù)不能只看數(shù)學(xué)最優(yōu)也要考慮到機(jī)械固有頻率。如果Jerk過(guò)高等于給機(jī)械結(jié)構(gòu)敲了一記沖擊錘。現(xiàn)在我在調(diào)試任何新機(jī)構(gòu)時(shí)都會(huì)先用低速低加速度跑一遍記錄出現(xiàn)異響時(shí)的速度段再反推是否需要調(diào)整S曲線的Jerk參數(shù)。5.3 單向定位誤差0.03mm的排查全過(guò)程這是整個(gè)系統(tǒng)調(diào)試中收獲最大的一次。現(xiàn)象是設(shè)備每次正向走固定距離定位總是偏大約0.03mm誤差還有累積趨勢(shì)反向走則完全正常。排查鏈路是這樣的第一步懷疑機(jī)械回差。做了往復(fù)測(cè)試重復(fù)性很好只有單向有誤差排除回差。第二步檢查細(xì)分配置和方向切換邏輯。確認(rèn)所有軸都配置一致不存在細(xì)分混用。第三步懷疑高速段電流衰減導(dǎo)致丟步。如果丟步誤差通常以整步為單位且比較隨機(jī)但這里誤差穩(wěn)定在0.03mm不像丟步特征。第四步用示波器同時(shí)抓STEP和ENABLE兩路信號(hào)。終于發(fā)現(xiàn)問(wèn)題運(yùn)動(dòng)結(jié)束瞬間使能引腳被拉高比最后一個(gè)脈沖早了大約20ms。也就是說(shuō)電機(jī)還沒(méi)走完最后幾步驅(qū)動(dòng)就被斷電了剩余那幾步因?yàn)閼T性滑了過(guò)去每次都差固定的幾個(gè)微步。根源在固件里我把“目標(biāo)到位標(biāo)志”和“脈沖停止標(biāo)志”兩個(gè)判斷的先后順序?qū)懛戳耸鼓芸刂葡扔诿}沖流結(jié)束觸發(fā)。修正順序后誤差從0.03mm降到0.005mm以?xún)?nèi)。這個(gè)問(wèn)題很有代表性很多“莫名其妙”的定位誤差最后都藏在信號(hào)時(shí)序里。示波器雙通道同時(shí)抓STEP和ENABLE是我現(xiàn)在調(diào)試任何定位系統(tǒng)必做的一步。這幾個(gè)月的調(diào)試做下來(lái)我最大的體會(huì)是步進(jìn)電機(jī)精確定位系統(tǒng)電機(jī)和驅(qū)動(dòng)芯片只是基礎(chǔ)真正決定成敗的是加減速曲線的平滑程度、信號(hào)時(shí)序上的細(xì)節(jié)以及一套能快速定位問(wèn)題的排查思路。TMC2209的靜音和失步檢測(cè)是加分項(xiàng)但沒(méi)有合理運(yùn)動(dòng)規(guī)劃再好的芯片也救不了失控的定位。如果你正在做類(lèi)似項(xiàng)目建議先把S型加減速和定時(shí)器狀態(tài)機(jī)跑通再逐步加TMC2209的UART診斷功能一個(gè)環(huán)節(jié)一個(gè)環(huán)節(jié)驗(yàn)證而不是一上來(lái)就全上。最后再分享一個(gè)小技巧每次調(diào)試前把示波器探頭夾在STEP和ENABLE上觀察完整運(yùn)動(dòng)周期的時(shí)序能幫你避開(kāi)很多隱性問(wèn)題省下的時(shí)間絕對(duì)值得。本文還有配套的精品資源點(diǎn)擊獲取