電機(jī)驅(qū)動(dòng)板調(diào)試實(shí)戰(zhàn):從CAN通信到偶發(fā)停機(jī)的完整排查)
1. 先說(shuō)清楚這批B2模塊到底要干什么1.1 設(shè)備場(chǎng)景與B2模塊的定位這次調(diào)試的B2模塊是給某臺(tái)三軸搬運(yùn)設(shè)備用的電機(jī)驅(qū)動(dòng)控制板。設(shè)備結(jié)構(gòu)不復(fù)雜X、Y、Z三個(gè)軸每軸一臺(tái)步進(jìn)電機(jī)配絲桿末端是一個(gè)真空吸盤負(fù)責(zé)把物料從A工位搬到B工位。運(yùn)動(dòng)邏輯也很常規(guī)原點(diǎn)復(fù)位、取料、直線插補(bǔ)、放料、回原點(diǎn)。B2模塊是供應(yīng)商提供的現(xiàn)成驅(qū)動(dòng)板板子上集成了24V電源輸入、步進(jìn)電機(jī)四線輸出A/A-/B/B-、兩個(gè)限位開(kāi)關(guān)輸入、一個(gè)CAN通信口還有幾個(gè)撥碼開(kāi)關(guān)用來(lái)設(shè)置節(jié)點(diǎn)ID和終端電阻。按理說(shuō)這種模塊屬于拿來(lái)就能用的器件接線圖也在手冊(cè)里寫得清清楚楚真正調(diào)起來(lái)不該太費(fèi)勁。但實(shí)際從第一次上電開(kāi)始我就連著踩了好幾個(gè)坑前后花了兩周才把系統(tǒng)穩(wěn)定下來(lái)。1.2 調(diào)試環(huán)境與接線調(diào)試用的東西很簡(jiǎn)單都是普通設(shè)備24V開(kāi)關(guān)電源一臺(tái)B2模塊三塊步進(jìn)電機(jī)三臺(tái)主控板用某款A(yù)RM Cortex-M內(nèi)核的開(kāi)發(fā)板另加一個(gè)USB-CAN分析儀用來(lái)監(jiān)聽(tīng)和發(fā)送總線報(bào)文。萬(wàn)用表、示波器、電子負(fù)載各一臺(tái)這些是后面排查故障時(shí)反復(fù)用到的東西。接線原則上很清晰電機(jī)四根線對(duì)應(yīng)接A/A-/B/B-電源接24V和GNDCAN接CANH和CANL。三塊模塊的ID通過(guò)撥碼分別設(shè)為1、2、3限位開(kāi)關(guān)接模塊輸入口。但我在這一步犯了個(gè)錯(cuò)誤后面付出很大代價(jià)為了省事CAN線沒(méi)有單獨(dú)布雙絞線而是順著電源線一起走緊挨著電機(jī)動(dòng)力線。我當(dāng)時(shí)覺(jué)得調(diào)試階段無(wú)所謂出問(wèn)題再整理結(jié)果這個(gè)決定讓后面一個(gè)偶發(fā)停機(jī)問(wèn)題多查了兩天。先埋個(gè)伏筆第五節(jié)專門講。1.3 調(diào)試日志從第一天就開(kāi)始寫調(diào)試第一天我就建了一個(gè)文本日志每次改動(dòng)、每次故障現(xiàn)象、每次測(cè)量數(shù)據(jù)都往里記。這個(gè)習(xí)慣幫了大忙。尤其到第三周設(shè)備出現(xiàn)偶發(fā)停機(jī)時(shí)如果當(dāng)時(shí)沒(méi)有日志根本不可能把停機(jī)時(shí)間和電機(jī)換向時(shí)間關(guān)聯(lián)起來(lái)。很多做嵌入式調(diào)試的人不愿意記錄覺(jué)得浪費(fèi)時(shí)間但我的經(jīng)驗(yàn)是越是感覺(jué)不難的系統(tǒng)越容易在一個(gè)隱蔽問(wèn)題上卡好幾天日志是唯一能讓你從反復(fù)試轉(zhuǎn)向按證據(jù)排查的工具。2. 第一次上電就冒煙供電端口的兩個(gè)低級(jí)錯(cuò)誤2.1 冒煙經(jīng)過(guò)與直接原因接線檢查了兩遍電機(jī)線沒(méi)有接反電源極性也沒(méi)錯(cuò)。我按下開(kāi)關(guān)電源的按鈕第一塊B2模塊的電源指示燈都來(lái)不及亮一股焦味就飄了出來(lái)。斷電拆下來(lái)電源端口的保險(xiǎn)管已經(jīng)熔斷板子上的DC-DC芯片附近有明顯燒痕。第一反應(yīng)是模塊本身有問(wèn)題但第二塊、第三塊都是好的說(shuō)明大概率不是來(lái)料不良。冷靜下來(lái)仔細(xì)看手冊(cè)才發(fā)現(xiàn)問(wèn)題B2模塊的使能引腳EN默認(rèn)是懸空的而它的內(nèi)部邏輯把懸空當(dāng)成使能且全速運(yùn)行。上電瞬間驅(qū)動(dòng)器直接進(jìn)入全輸出狀態(tài)而這時(shí)主控板還在初始化方向引腳和脈沖引腳都是高阻等于驅(qū)動(dòng)器在沒(méi)有任何有效指令的情況下滿電流輸出電流失去控制功率部分直接燒掉。這類問(wèn)題在電機(jī)驅(qū)動(dòng)模塊上很常見(jiàn)。不少模塊為了讓客戶上電即用會(huì)把使能引腳默認(rèn)拉高但如果負(fù)載端堵轉(zhuǎn)、線纜過(guò)長(zhǎng)或者電機(jī)電感較小上電瞬間的沖擊電流可以達(dá)到正常工作電流的3到5倍非常容易出問(wèn)題。所以不管用什么驅(qū)動(dòng)模塊上電前的第一個(gè)動(dòng)作都應(yīng)該是確認(rèn)使能引腳有一個(gè)確定的默認(rèn)電平而不是賭它默認(rèn)不工作。2.2 用示波器復(fù)現(xiàn)故障波形燒了一塊板子后我沒(méi)有急著換新的而是用第二塊B2做了個(gè)簡(jiǎn)單的故障復(fù)現(xiàn)24V供電EN引腳懸空示波器探頭夾在電機(jī)線的A和A-之間。上電瞬間抓到的波形顯示A和A-之間出現(xiàn)了一個(gè)脈寬約1.2毫秒、幅值接近24V的窄脈沖電流被推到接近5A。驅(qū)動(dòng)器額定電流2.8A這就是冒煙的直接原因。這個(gè)波形說(shuō)明了兩件事一是EN懸空導(dǎo)致的默認(rèn)使能確實(shí)存在二是直流側(cè)缺少軟啟動(dòng)上電瞬間的沖擊電流幾乎全部灌進(jìn)了功率級(jí)。后來(lái)翻到模塊手冊(cè)附注里的一行小字才確認(rèn)上電默認(rèn)狀態(tài)就是EN有效客戶必須在主控初始化前拉低EN或者在電源輸入端加軟啟動(dòng)。這類手冊(cè)小字是最容易被忽略的但它往往決定了一塊板子能不能安全上電。2.3 整改方案下拉電阻加軟啟動(dòng)時(shí)序整改分兩步。硬件上我在每塊B2模塊的EN引腳和GND之間加了一個(gè)10K下拉電阻保證上電默認(rèn)是不使能的。這里要注意下拉電阻不能太小太小會(huì)在正常工作時(shí)額外消耗電流也會(huì)拉低EN高電平的有效性10K對(duì)CMOS輸入來(lái)說(shuō)是常規(guī)選擇穩(wěn)定且功耗可忽略。軟件上主控程序重新寫了一條初始化序列先配置GPIO并拉低EN等系統(tǒng)時(shí)鐘、CAN外設(shè)、定時(shí)器全部初始化完成再延時(shí)100毫秒最后拉高EN并輸出第一個(gè)脈沖。延時(shí)的目的不是等驅(qū)動(dòng)器響應(yīng)而是給驅(qū)動(dòng)器內(nèi)部的自檢和母線電容充電留時(shí)間避免初始化過(guò)程中的抖動(dòng)被當(dāng)成有效指令。提示所有電機(jī)驅(qū)動(dòng)類模塊在上電初始化完成前永遠(yuǎn)假設(shè)它是會(huì)動(dòng)的。使能引腳必須有確定的默認(rèn)電平不能依賴主控的初始化速度去搶時(shí)間。3. 通信握手失敗CAN總線的三層排查3.1 電壓、終端電阻和波特率第二塊、第三塊模塊換上后沒(méi)有再冒煙但新問(wèn)題來(lái)了USB-CAN分析儀發(fā)送指令三塊B2全部沒(méi)有應(yīng)答。第一反應(yīng)是節(jié)點(diǎn)ID撥碼錯(cuò)了但反復(fù)檢查1、2、3都沒(méi)有問(wèn)題。接著量CAN總線的靜態(tài)電壓CANH對(duì)地約2.5VCANL對(duì)地約2.5V差分電壓為0V。這個(gè)狀態(tài)說(shuō)明總線處于隱性電平當(dāng)前總線上沒(méi)有節(jié)點(diǎn)在主動(dòng)發(fā)送數(shù)據(jù)但物理層看起來(lái)是正常的。再測(cè)終端電阻我在總線兩端各接了一個(gè)120歐姆電阻主控端和最后一臺(tái)B2端萬(wàn)用表量總線兩端阻值正好是60歐姆終端也沒(méi)問(wèn)題。硬件沒(méi)問(wèn)題問(wèn)題大概率出在波特率上。我把USB-CAN分析儀的波特率從默認(rèn)的250K改到500K再發(fā)指令三塊B2全部正常應(yīng)答。原因很簡(jiǎn)單B2模塊出廠默認(rèn)波特率是500K而我習(xí)慣性地用了250K。這里有個(gè)容易被忽略的點(diǎn)CAN總線的波特率不匹配時(shí)不是所有設(shè)備都會(huì)報(bào)錯(cuò)。很多節(jié)點(diǎn)只是安靜地不響應(yīng)看起來(lái)像完全沒(méi)通信。用USB轉(zhuǎn)CAN工具時(shí)第一步永遠(yuǎn)是確認(rèn)工具波特率和目標(biāo)設(shè)備一致而不是上來(lái)就翻代碼。后來(lái)我把主控的CAN初始化參數(shù)固定了下來(lái)#define CAN_BAUD 500000U #define CAN_SAMPLE_POINT 80U // 采樣點(diǎn)80%按B2手冊(cè)推薦 CAN_Init(CAN_BAUD, CAN_SAMPLE_POINT);采樣點(diǎn)設(shè)成80%而不是常見(jiàn)默認(rèn)的75%是因?yàn)檫@條總線上線纜較長(zhǎng)、信號(hào)邊沿偏緩80%的采樣點(diǎn)可以避開(kāi)信號(hào)上升沿附近的抖動(dòng)區(qū)間。B2手冊(cè)里明確推薦80%這種參數(shù)按廠商推薦值來(lái)就行不要盲目套通用模板。3.2 幀ID過(guò)濾器這層最容易忽略波特率對(duì)了之后總線能通信了但很快發(fā)現(xiàn)一個(gè)更隱蔽的現(xiàn)象部分指令生效部分指令無(wú)效。查來(lái)查去問(wèn)題出在我主控板的CAN過(guò)濾器上。最初我把接收過(guò)濾器配置成只允許標(biāo)準(zhǔn)幀ID在0x100到0x10F范圍內(nèi)的報(bào)文通過(guò)而B(niǎo)2模塊的指令幀ID是0x200開(kāi)頭大部分報(bào)文被過(guò)濾器直接丟掉。能被收到的那幾條是我測(cè)試時(shí)恰好用了允許段內(nèi)的ID表現(xiàn)出來(lái)就是時(shí)靈時(shí)不靈。這個(gè)錯(cuò)誤很蠢但很典型。CAN過(guò)濾器一旦配錯(cuò)接收端完全不知道有人在給它發(fā)數(shù)據(jù)也不會(huì)有任何提示表現(xiàn)和總線無(wú)數(shù)據(jù)幾乎一樣。排查CAN問(wèn)題時(shí)一定要區(qū)分是物理層沒(méi)數(shù)據(jù)還是數(shù)據(jù)到了但被過(guò)濾了。打開(kāi)CAN分析儀的接收窗口如果能看到報(bào)文的ID和內(nèi)容但程序沒(méi)響應(yīng)八成問(wèn)題就在過(guò)濾器或中斷配置上。3.3 固定排查順序的意義經(jīng)過(guò)這輪折騰我總結(jié)了一條固定的CAN排查順序看總線靜態(tài)電壓電平再量終端電阻再確認(rèn)波特率再查幀ID過(guò)濾器最后查數(shù)據(jù)內(nèi)容。這個(gè)順序之后每次都按它走基本能快速定位八成以上的CAN通信問(wèn)題。為什么要強(qiáng)調(diào)順序因?yàn)镃AN的問(wèn)題往往不是單一的。我就碰到過(guò)終端電阻正確、波特率正確、但過(guò)濾器錯(cuò)了的情況也碰到過(guò)波特率正確、但某一段線纜接觸不良導(dǎo)致偶發(fā)丟幀的情況。如果每次都靠猜效率太低。按順序排查每排除一層就記錄一層后面同類問(wèn)題可以直接跳過(guò)已驗(yàn)證的環(huán)節(jié)至少能省一半時(shí)間。4. 電機(jī)抖動(dòng)、堵轉(zhuǎn)和偶發(fā)失控控制參數(shù)與信號(hào)線沖突4.1 閉環(huán)不能一步到位先從開(kāi)環(huán)跑通通信正常后開(kāi)始動(dòng)電機(jī)。B2模塊支持脈沖方向模式、速度模式、位置閉環(huán)模式三種。最初的思路是把三臺(tái)電機(jī)全部配成位置閉環(huán)模式一步到位直接跑設(shè)備邏輯結(jié)果三臺(tái)電機(jī)一上電就劇烈抖動(dòng)絲桿來(lái)回竄動(dòng)聲音非常刺耳Z軸甚至直接報(bào)了堵轉(zhuǎn)。這個(gè)經(jīng)歷給了我很深的教訓(xùn)閉環(huán)調(diào)試不能從冷啟動(dòng)直接給目標(biāo)位置。位置閉環(huán)依賴編碼器反饋、PID參數(shù)、加減速曲線任何一個(gè)環(huán)節(jié)沒(méi)調(diào)好驅(qū)動(dòng)器就會(huì)在目標(biāo)位置附近來(lái)回修正表現(xiàn)出來(lái)就是抖動(dòng)。正確路徑是先做開(kāi)環(huán)驗(yàn)證把電機(jī)方向、正反行程、限位邏輯全部確認(rèn)無(wú)誤再切閉環(huán)。于是我把三塊模塊全部切回脈沖方向模式用主控定時(shí)器輸出固定頻率脈沖先50Hz再100Hz、500Hz逐步加每臺(tái)電機(jī)的轉(zhuǎn)向、步距、加減速都驗(yàn)證了一遍。這個(gè)階段如果方向反了只需要對(duì)調(diào)A和A-/或者修改方向引腳邏輯比在閉環(huán)模式下排查直觀得多。4.2 方向信號(hào)和使能信號(hào)的時(shí)序競(jìng)爭(zhēng)切回閉環(huán)模式后設(shè)備已能完成基本搬運(yùn)動(dòng)作但出現(xiàn)了一個(gè)非常隱蔽的問(wèn)題每次從A點(diǎn)回到B點(diǎn)后再往C點(diǎn)運(yùn)動(dòng)時(shí)偶爾會(huì)先反方向竄一小段然后又正向運(yùn)動(dòng)過(guò)去。這個(gè)現(xiàn)象出現(xiàn)概率不高大概三四次里有一次而且不固定在哪根軸非常難抓。用示波器同時(shí)抓方向信號(hào)DIR和使能信號(hào)EN后發(fā)現(xiàn)B2模塊的EN引腳在閉環(huán)模式下還承擔(dān)了清錯(cuò)功能。主控在改變方向時(shí)先翻轉(zhuǎn)了DIR然后為了清除驅(qū)動(dòng)器內(nèi)部的位置誤差又短脈沖拉低了一下EN。問(wèn)題就出在這個(gè)順序上。正常情況下這沒(méi)問(wèn)題但如果DIR翻轉(zhuǎn)和EN拉低之間的時(shí)間小于B2模塊內(nèi)部的采樣周期約200微秒模塊有可能把新的DIR狀態(tài)和舊的EN狀態(tài)一起鎖存導(dǎo)致它認(rèn)為方向沒(méi)變或者在舊方向上執(zhí)行了一小段位置修正表現(xiàn)出來(lái)就是反方向竄一下。解決辦法也很直接改變方向時(shí)先拉低EN禁能等300微秒再設(shè)置DIR再等300微秒最后拉高EN重新使能。順序從翻DIR→拉EN改成拉EN→翻DIR→使能。這個(gè)問(wèn)題讓我意識(shí)到不要想當(dāng)然認(rèn)為設(shè)置引腳是瞬時(shí)動(dòng)作。對(duì)驅(qū)動(dòng)器來(lái)說(shuō)每個(gè)輸入引腳都是按采樣周期采樣的引腳變化的先后順序本身就是邏輯的一部分必須當(dāng)協(xié)議來(lái)看。4.3 Z軸PID參數(shù)調(diào)整記錄閉環(huán)抖動(dòng)還牽出另一個(gè)問(wèn)題B2模塊內(nèi)部位置環(huán)PID的默認(rèn)參數(shù)是按一般水平負(fù)載調(diào)好的但這套機(jī)構(gòu)里Z軸是垂直安裝重力方向讓上下運(yùn)動(dòng)的響應(yīng)明顯不對(duì)稱。上升時(shí)跟隨很好下降時(shí)總是過(guò)沖然后來(lái)回修正。一共調(diào)了兩輪。第一輪把比例增益P從默認(rèn)的20降到8積分增益I從5降到1過(guò)沖明顯減少但下降到位后還有輕微振蕩。第二輪把微分增益D從0.8提到1.5振蕩消失。最終Z軸參數(shù)如下表軸PID說(shuō)明X軸2050.8水平安裝負(fù)載輕保持默認(rèn)Y軸2050.8水平安裝負(fù)載輕保持默認(rèn)Z軸811.5垂直安裝重力影響大降低P/I、提高D這里記錄一個(gè)快速調(diào)參方法先把P和I都調(diào)到很小P從能穩(wěn)住的最小值開(kāi)始加I在P穩(wěn)定后再慢慢加D只在出現(xiàn)超調(diào)和振蕩時(shí)才加。不要一開(kāi)始就追求響應(yīng)速度先把穩(wěn)定性做出來(lái)再逐步提高增益。每次只改一個(gè)參數(shù)改完跑一個(gè)完整往復(fù)動(dòng)作觀察波形再動(dòng)下一個(gè)參數(shù)這樣出問(wèn)題也知道是哪一步引入的。5. 偶發(fā)停機(jī)的物理層真相共阻抗耦合5.1 故障現(xiàn)象與日志盲區(qū)三軸都能正常動(dòng)作后開(kāi)始做連續(xù)運(yùn)行測(cè)試結(jié)果出現(xiàn)最折磨人的問(wèn)題偶發(fā)停機(jī)。有時(shí)一天出現(xiàn)四五次有時(shí)幾小時(shí)一次完全沒(méi)有規(guī)律。停機(jī)時(shí)主控日志沒(méi)有記錄任何錯(cuò)誤B2模塊也沒(méi)有報(bào)警燈整個(gè)系統(tǒng)就像被人悄悄按了暫停鍵。多軸設(shè)備出現(xiàn)這種問(wèn)題最讓人頭疼因?yàn)樗幌駞?shù)錯(cuò)誤那樣每次都能復(fù)現(xiàn)屬于典型的現(xiàn)場(chǎng)才會(huì)出現(xiàn)、實(shí)驗(yàn)室很難抓到的故障。排查的第一步先看主控日志沒(méi)有任何報(bào)錯(cuò)記錄。第二步看B2模塊的報(bào)警狀態(tài)也沒(méi)有報(bào)警。既然軟件層面沒(méi)有線索我把示波器接在B2模塊的24V供電線上長(zhǎng)時(shí)間監(jiān)測(cè)終于發(fā)現(xiàn)停機(jī)瞬間總伴隨一個(gè)很短的電壓跌落從24V降到22.8V左右持續(xù)約300微秒后恢復(fù)。這個(gè)幅度的跌落對(duì)純電阻負(fù)載不算什么但對(duì)電源管理電路已經(jīng)足夠觸發(fā)一次欠壓復(fù)位。5.2 示波器抓到的毛刺與排查鏈路順著電壓跌落的線索繼續(xù)查。我把示波器的一路探頭夾在CANH對(duì)地另一路夾在24V上等下一次停機(jī)發(fā)生時(shí)看到停機(jī)前沿出現(xiàn)了一個(gè)幅值約4V、寬度約1微秒的毛刺。把這個(gè)毛刺出現(xiàn)的時(shí)刻和電機(jī)換向時(shí)刻一對(duì)比頻率完全一致問(wèn)題鎖定在干擾耦合上。根源就是第一節(jié)埋的伏筆CAN線順著電源線走、又緊貼電機(jī)動(dòng)力線。電機(jī)是感性負(fù)載換向瞬間會(huì)在公共地線上產(chǎn)生尖峰電流這個(gè)電流在電源線和CAN線共用的那段地線上產(chǎn)生壓降。表面看是停機(jī)實(shí)際上是通信報(bào)文被干擾后模塊收不到主控的心跳信號(hào)進(jìn)入了安全停機(jī)狀態(tài)。這里把排查鏈路完整列出來(lái)看主控日志無(wú)錯(cuò)誤記錄。看B2報(bào)警記錄無(wú)報(bào)警。示波器抓供電電壓發(fā)現(xiàn)22.8V跌落。示波器同步抓CANH波形發(fā)現(xiàn)停機(jī)前沿有4V幅值毛刺。確認(rèn)毛刺頻率與電機(jī)換向頻率一致。5.3 整改措施與波形對(duì)比整改動(dòng)作有三項(xiàng)CAN線改為獨(dú)立雙絞線與電機(jī)動(dòng)力線保持至少5厘米距離。電機(jī)線和電源線在進(jìn)入模塊前分別套上磁環(huán)吸收換向尖峰。主控、B2模塊、開(kāi)關(guān)電源三者的地線改為星型單點(diǎn)接地不再共用同一段地線走線。改完之后再測(cè)CANH上的毛刺幅值從4V降到0.8V以下連續(xù)24小時(shí)運(yùn)行再?zèng)]有出現(xiàn)過(guò)一次停機(jī)。這一步是整個(gè)調(diào)試過(guò)程中最有價(jià)值的排查它讓我切實(shí)體會(huì)到偶發(fā)性故障看似是軟件問(wèn)題很多時(shí)候物理層才是真兇。而且物理層問(wèn)題有個(gè)特點(diǎn)——它不是每次都觸發(fā)只有當(dāng)干擾幅度超過(guò)某個(gè)閾值的那一刻才觸發(fā)所以必須靠長(zhǎng)時(shí)間監(jiān)測(cè)和波形證據(jù)不能靠試。6. 復(fù)盤與沉淀調(diào)試日志里的幾個(gè)習(xí)慣6.1 變更記錄怎么記才不白記這次調(diào)試踩了太多坑后面我養(yǎng)成了一個(gè)習(xí)慣每一次接線改動(dòng)、參數(shù)修改、代碼變更都記錄在調(diào)試日志里內(nèi)容包括時(shí)間、變更內(nèi)容、復(fù)測(cè)結(jié)果以及為什么改。記錄為什么改這一點(diǎn)尤其重要。比如PID參數(shù)從20調(diào)到8如果不記原因過(guò)兩天就會(huì)忘了是為什么等溫度變化引起參數(shù)漂移時(shí)根本無(wú)從判斷是應(yīng)該繼續(xù)往小調(diào)還是恢復(fù)默認(rèn)值。再比如第一塊模塊上電前加的下拉電阻如果日志里沒(méi)有寫明防止EN懸空導(dǎo)致默認(rèn)使能后面維護(hù)的人很可能把它當(dāng)成多余的器件拆掉故障就會(huì)重新出現(xiàn)。6.2 值得長(zhǎng)期堅(jiān)持的幾條原則調(diào)試電機(jī)驅(qū)動(dòng)類項(xiàng)目我總結(jié)了幾條個(gè)人經(jīng)驗(yàn)示波器要一直開(kāi)著不要只在出問(wèn)題的時(shí)候才拿出來(lái)很多偶發(fā)問(wèn)題在出問(wèn)題時(shí)已經(jīng)晚了要提前觀察正常時(shí)的波形基線出問(wèn)題時(shí)才能一眼看出哪里不正常。電源和通信的布線從一開(kāi)始就按正式規(guī)格來(lái)不要覺(jué)得調(diào)試階段可以偷懶布線引發(fā)的干擾問(wèn)題是最難查的那一類。驅(qū)動(dòng)器的每個(gè)輸入引腳都當(dāng)協(xié)議來(lái)看順序、時(shí)序、采樣周期都是邏輯的一部分。最后說(shuō)點(diǎn)實(shí)在的。這次B2調(diào)試從頭到尾所有問(wèn)題回頭看都算顯而易見(jiàn)但每一步都實(shí)實(shí)在在花掉了時(shí)間。我把整個(gè)過(guò)程完整寫下來(lái)一是給后面維護(hù)這臺(tái)設(shè)備的人一份參考二是提醒自己越是看起來(lái)簡(jiǎn)單的系統(tǒng)越要按順序排查、別跳步。調(diào)試記錄這件事本質(zhì)上是寫給三天后的自己的寫的時(shí)候覺(jué)得麻煩遇到問(wèn)題時(shí)才知道它值多少錢。