時(shí)間的計(jì)算與實(shí)操)
1. 從兩個挨得極近的脈沖說起為什么肉眼判定一定會翻車做嵌入式信號采集、PLC高速計(jì)數(shù)、或者電源雙脈沖測試的朋友大概率都遇到過這種場景示波器屏幕上兩個脈沖幾乎貼在一起中間只有一小段凹槽。你盯著屏幕看了半天心里犯嘀咕——這到底是傳感器真實(shí)輸出了兩次事件還是僅僅一次脈沖因?yàn)榫€路寄生參數(shù)產(chǎn)生的振鈴如果你憑肉眼拍板那后面的計(jì)數(shù)、報(bào)警、邏輯判斷全都會跟著錯。這個問題在工業(yè)現(xiàn)場極其常見。比如信捷PLC的XD3系列做伺服驅(qū)動器脈沖信號采集時(shí)編碼器輸出的差分脈沖經(jīng)過長線纜傳輸后邊沿會疊加振鈴再比如HX711這類稱重ADC采樣率設(shè)在10Hz還是80Hz直接決定了你能不能分辨出兩個緊挨著的重量變化脈沖。還有電源領(lǐng)域的雙脈沖測試用來評估功率器件的開關(guān)特性兩個脈沖之間的間隔往往在微秒級振鈴和真實(shí)脈沖混在一起沒有一套明確的判定規(guī)則根本沒法干活。核心矛盾就一句話脈沖寬度、間隔時(shí)間、振鈴衰減時(shí)間這三者處在同一量級時(shí)任何基于“看起來像”的判定都是不可靠的。你需要的是兩個硬指標(biāo)——判定窗和恢復(fù)時(shí)間。判定窗決定“多近的兩個邊沿才算兩次獨(dú)立事件”恢復(fù)時(shí)間決定“一次事件之后要安靜多久才能確認(rèn)它真的結(jié)束了”。這兩個參數(shù)不能拍腦袋定必須從信號本身的物理特性、采樣系統(tǒng)的能力、以及后端邏輯的容忍度反推出來。這篇文章面向的是做數(shù)據(jù)采集、PLC編程、電源測試、傳感器信號處理的工程師和技術(shù)愛好者。我會把判定窗和恢復(fù)時(shí)間的推導(dǎo)邏輯拆開講清楚給出可以直接套用的計(jì)算方法和實(shí)操步驟再把我自己在現(xiàn)場踩過的坑整理成排查清單。不管你是剛接觸脈沖信號的新手還是已經(jīng)調(diào)過不少板子的老手應(yīng)該都能從中找到能直接抄作業(yè)的東西。2. 判定窗與恢復(fù)時(shí)間的底層邏輯不是拍腦袋是算出來的2.1 脈沖、振鈴與采樣率的三方博弈要理解判定窗和恢復(fù)時(shí)間先得把三個基本概念的關(guān)系理清楚。脈沖是你要檢測的有效信號變化。它可能是一個上升沿、一個下降沿或者一個窄脈沖。振鈴是脈沖邊沿之后由于傳輸線阻抗不匹配、寄生電感電容諧振而產(chǎn)生的衰減振蕩。采樣率是你用來觀察和判定這個信號的系統(tǒng)時(shí)鐘頻率。這三者之間的關(guān)系可以用一個生活化的類比來理解假設(shè)你在一個安靜的房間里聽人敲門。真正的敲門聲是脈沖但房間有回音敲一下之后會有短暫的余響這就是振鈴。如果你的耳朵反應(yīng)足夠快采樣率高你能分辨出敲門聲和回音如果反應(yīng)慢采樣率低回音和下一次敲門聲就會混在一起你就不知道到底敲了幾下。關(guān)鍵結(jié)論采樣率必須至少是振鈴頻率的2倍以上否則你連振鈴本身都看不到更談不上區(qū)分。根據(jù)奈奎斯特采樣定理要還原一個頻率為f的信號采樣率至少要是2f。但實(shí)際工程中為了能準(zhǔn)確判定脈沖邊沿和振鈴的邊界我通常建議采樣率至少是振鈴最高頻率分量的5到10倍。舉個例子某伺服驅(qū)動器編碼器輸出脈沖邊沿振鈴頻率實(shí)測約2MHz。如果你用10MHz采樣率去采每個振鈴周期只有5個采樣點(diǎn)勉強(qiáng)能看出振蕩但很難精確定位衰減到閾值以下的時(shí)間點(diǎn)。換成50MHz采樣率每個周期25個點(diǎn)衰減包絡(luò)就清晰多了。這就是為什么HX711在80Hz采樣率下比10Hz更能分辨快速變化的重量信號——采樣率直接決定了時(shí)間分辨率。2.2 判定窗到底在判定什么判定窗Decision Window的本質(zhì)是一個時(shí)間閾值。當(dāng)兩個脈沖邊沿之間的時(shí)間間隔小于這個閾值時(shí)系統(tǒng)判定為“一次事件帶振鈴”大于這個閾值時(shí)判定為“兩次獨(dú)立事件”。這個閾值的設(shè)定不能憑感覺要從三個維度反推第一振鈴的衰減時(shí)間。振鈴從峰值衰減到系統(tǒng)噪聲底以下所需的時(shí)間記為t_ring。判定窗必須大于t_ring否則你會把振鈴的第二個波峰誤判為第二次事件。t_ring可以通過實(shí)測得到給系統(tǒng)一個理想的單次脈沖觀察邊沿后振蕩衰減到噪聲底的時(shí)間。第二后端邏輯的最小響應(yīng)時(shí)間。你的計(jì)數(shù)器、中斷服務(wù)程序、或者PLC的高速計(jì)數(shù)模塊從接收到一個有效邊沿到準(zhǔn)備好接收下一個邊沿需要一定的時(shí)間。這個時(shí)間記為t_logic。判定窗必須大于t_logic否則第二次事件會被漏掉。第三信號本身的物理約束。如果傳感器或信號源本身不可能在短時(shí)間內(nèi)產(chǎn)生兩次真實(shí)事件那么判定窗可以設(shè)得更大一些以提高抗干擾能力。比如一個機(jī)械開關(guān)物理上不可能在1ms內(nèi)完成兩次通斷那判定窗就可以設(shè)到1ms以上。最終判定窗的取值T_window max(t_ring, t_logic, t_physical_min) × 安全系數(shù)。安全系數(shù)通常取1.5到2給溫漂、老化、批次差異留余量。2.3 恢復(fù)時(shí)間的真實(shí)含義恢復(fù)時(shí)間Recovery Time經(jīng)常被和判定窗混淆但兩者作用不同。判定窗是“兩個邊沿之間至少隔多久才算兩次事件”恢復(fù)時(shí)間是“一次事件被確認(rèn)后系統(tǒng)需要多長時(shí)間才能回到穩(wěn)定狀態(tài)、準(zhǔn)備接受下一次判定”。恢復(fù)時(shí)間包含幾個部分信號調(diào)理電路的建立時(shí)間、ADC或比較器的恢復(fù)時(shí)間、數(shù)字濾波器的群延遲、以及軟件狀態(tài)機(jī)的復(fù)位時(shí)間。在雙脈沖測試中恢復(fù)時(shí)間還涉及功率器件的關(guān)斷拖尾和測試電路的儲能元件復(fù)位。我見過太多人把恢復(fù)時(shí)間設(shè)得太短結(jié)果第一次脈沖的振鈴還沒完全衰減系統(tǒng)就重新武裝了導(dǎo)致振鈴被誤判為第二次脈沖。也見過把恢復(fù)時(shí)間設(shè)得太長兩個真實(shí)脈沖間隔明明夠大但第二個脈沖被“恢復(fù)期”屏蔽掉了。恢復(fù)時(shí)間的設(shè)定原則T_recovery ≥ T_window t_margin其中t_margin是額外余量通常取判定窗的20%到50%。這樣確保系統(tǒng)在判定完一次事件后有足夠時(shí)間完全穩(wěn)定下來再進(jìn)入下一次判定。2.4 為什么不能憑肉眼一個真實(shí)的翻車案例去年幫一個客戶調(diào)信捷PLC的XD3-24T-E伺服脈沖采集程序。現(xiàn)場現(xiàn)象是伺服電機(jī)低速運(yùn)行時(shí)PLC計(jì)數(shù)正常一旦提速計(jì)數(shù)就偏多而且速度越快偏得越多。客戶堅(jiān)持說伺服驅(qū)動器沒問題用示波器看波形“很干凈”。我讓他把時(shí)基打到100ns/div再看結(jié)果每個脈沖邊沿后面都跟著一串約3MHz的振鈴衰減時(shí)間大約800ns。在低速時(shí)脈沖間隔遠(yuǎn)大于800ns振鈴在下一個脈沖到來前已經(jīng)衰減完了但高速時(shí)脈沖間隔縮短到1μs左右振鈴還沒完全消失PLC的高速計(jì)數(shù)模塊就把振鈴的第二個波峰也計(jì)了一次。解決方案很簡單在PLC程序里加一個判定窗設(shè)定為1.2μs。兩個邊沿間隔小于1.2μs時(shí)只計(jì)一次。同時(shí)把恢復(fù)時(shí)間設(shè)為1.5μs確保振鈴?fù)耆p后再重新武裝計(jì)數(shù)器。改完之后全速段計(jì)數(shù)準(zhǔn)確。這個案例說明肉眼看到的“干凈波形”在足夠高的時(shí)間分辨率下可能完全是另一回事。判定窗和恢復(fù)時(shí)間必須基于實(shí)測數(shù)據(jù)來設(shè)定而不是基于“看起來沒問題”的直覺。3. 核心參數(shù)計(jì)算與實(shí)操設(shè)定從理論到可落地的數(shù)值3.1 振鈴衰減時(shí)間的實(shí)測方法設(shè)定判定窗的第一步是測出振鈴衰減時(shí)間t_ring。具體操作如下讓信號源輸出一個理想的單次脈沖或者讓設(shè)備在最低速下運(yùn)行確保兩個脈沖間隔遠(yuǎn)大于預(yù)期振鈴時(shí)間。用示波器高分辨率采集這個脈沖的邊沿時(shí)基設(shè)置到能看清振鈴細(xì)節(jié)的程度。一般振鈴頻率在1MHz到10MHz之間時(shí)基建議50ns/div到200ns/div。打開示波器的包絡(luò)測量功能或者用光標(biāo)手動測量從脈沖邊沿的峰值開始到振鈴幅度衰減到系統(tǒng)噪聲底通常是峰峰值的2%到5%的時(shí)間。記錄至少10組數(shù)據(jù)取最大值作為t_ring。注意測量時(shí)要用設(shè)備實(shí)際工作時(shí)的線纜長度和連接方式不要用短跳線代替。線纜的寄生參數(shù)直接影響振鈴頻率和衰減時(shí)間。如果手頭沒有高帶寬示波器可以用一個間接方法逐步提高信號源的脈沖重復(fù)頻率觀察計(jì)數(shù)系統(tǒng)從準(zhǔn)確到開始出錯的臨界頻率。臨界頻率的倒數(shù)就是振鈴時(shí)間的一個保守估計(jì)。這個方法雖然粗糙但在現(xiàn)場應(yīng)急時(shí)很實(shí)用。3.2 采樣率與判定精度的量化關(guān)系采樣率決定了你能分辨的最小時(shí)間間隔。如果采樣周期為T_s那么兩個邊沿之間的時(shí)間差測量誤差最大為T_s。判定窗的設(shè)定必須考慮這個誤差。假設(shè)采樣率為f_s采樣周期T_s 1/f_s。如果你需要分辨的最小脈沖間隔為T_min那么要求T_s ≤ T_min / 5也就是說采樣率至少是最小待分辨間隔的5倍。比如你需要分辨1μs的脈沖間隔采樣率至少要5MHz。實(shí)際工程中我建議留更多余量取10倍以上?;氐紿X711的例子10Hz采樣率對應(yīng)采樣周期100ms80Hz對應(yīng)12.5ms。如果你要檢測的重量變化脈沖間隔在50ms左右10Hz采樣率下每個脈沖只有0.5個采樣點(diǎn)根本分辨不了80Hz下每個脈沖有4個采樣點(diǎn)勉強(qiáng)能分辨。這就是為什么高速稱重場景必須用80Hz。采樣率采樣周期可分辨最小間隔5倍原則適用場景10Hz100ms500ms靜態(tài)稱重、慢速溫度采集80Hz12.5ms62.5ms動態(tài)稱重、快速重量變化1MHz1μs5μs一般數(shù)字脈沖采集10MHz100ns500ns伺服編碼器、高速計(jì)數(shù)100MHz10ns50ns雙脈沖測試、功率器件評估3.3 判定窗的完整計(jì)算流程把前面的因素綜合起來判定窗的計(jì)算流程如下步驟一確定振鈴衰減時(shí)間t_ring。通過3.1節(jié)的方法實(shí)測取最大值。步驟二確定后端邏輯響應(yīng)時(shí)間t_logic。查閱PLC高速計(jì)數(shù)模塊的手冊或者實(shí)測中斷服務(wù)程序的執(zhí)行時(shí)間。信捷XD3系列的高速計(jì)數(shù)模塊單相計(jì)數(shù)時(shí)最高響應(yīng)頻率200kHz對應(yīng)最小響應(yīng)時(shí)間5μs但這是電氣層面的軟件層面還要加上中斷延遲和程序執(zhí)行時(shí)間實(shí)際t_logic可能在10μs到50μs之間。步驟三確定物理最小間隔t_physical。根據(jù)信號源的物理特性確定。比如機(jī)械開關(guān)的抖動時(shí)間通常在1ms到10ms那t_physical就取10ms。步驟四計(jì)算判定窗。T_window max(t_ring, t_logic, t_physical) × 1.5。步驟五驗(yàn)證。用已知間隔的兩個脈沖測試間隔略大于T_window時(shí)應(yīng)該計(jì)為兩次略小于時(shí)應(yīng)該計(jì)為一次。如果不符合調(diào)整安全系數(shù)重新計(jì)算。3.4 恢復(fù)時(shí)間的設(shè)定與驗(yàn)證恢復(fù)時(shí)間的設(shè)定相對簡單但驗(yàn)證同樣重要T_recovery T_window max(T_window × 0.3, t_stabilize)其中t_stabilize是信號調(diào)理電路的建立時(shí)間通常可以從運(yùn)放或比較器的手冊中查到。對于大多數(shù)比較器建立時(shí)間在100ns到1μs之間。驗(yàn)證方法用兩個間隔等于T_recovery的脈沖測試第二個脈沖應(yīng)該被正常計(jì)數(shù)。然后把間隔縮小到T_recovery的80%第二個脈沖應(yīng)該被屏蔽。如果不符合說明恢復(fù)時(shí)間設(shè)短了或設(shè)長了。實(shí)操心得恢復(fù)時(shí)間不要設(shè)得剛好等于判定窗一定要留余量。我通常會把恢復(fù)時(shí)間設(shè)成判定窗的1.3到1.5倍。多出來的時(shí)間不會影響正常計(jì)數(shù)但能有效防止振鈴誤判。4. 完整實(shí)操流程從信號采集到邏輯判定的全鏈路實(shí)現(xiàn)4.1 硬件層面的信號調(diào)理在進(jìn)入數(shù)字判定之前硬件層面要先做好信號調(diào)理盡量把振鈴壓下去。這樣判定窗和恢復(fù)時(shí)間就可以設(shè)得更小系統(tǒng)能分辨更近的脈沖。第一阻抗匹配。如果信號線是長線纜源端和負(fù)載端都要做阻抗匹配。通常源端串一個33Ω到50Ω的電阻負(fù)載端并一個等于線纜特性阻抗的電阻常見50Ω或75Ω。匹配好了振鈴幅度能下降一半以上。第二比較器加遲滯。用LM339這類比較器做脈沖整形時(shí)一定要加遲滯。沒有遲滯的比較器在信號邊沿附近會多次翻轉(zhuǎn)產(chǎn)生額外的窄脈沖。遲滯窗口一般設(shè)為信號幅度的5%到10%。具體做法在比較器輸出和同相輸入端之間接一個正反饋電阻阻值根據(jù)需要的遲滯量計(jì)算。第三RC低通濾波。在比較器輸入端加一個RC低通截止頻率設(shè)為振鈴頻率的1/3到1/2。比如振鈴頻率3MHzRC截止頻率設(shè)1MHz到1.5MHz。這樣振鈴被大幅衰減而脈沖邊沿的上升時(shí)間只會略微變慢。計(jì)算R取1kΩC取100pF截止頻率約1.6MHz。第四施密特觸發(fā)器整形。如果信號經(jīng)過長線纜后邊沿已經(jīng)很差可以用74HC14這類施密特觸發(fā)器做最后整形。它的遲滯特性天然抑制振鈴。4.2 數(shù)字判定狀態(tài)機(jī)的設(shè)計(jì)硬件調(diào)理之后進(jìn)入數(shù)字判定環(huán)節(jié)。我習(xí)慣用一個簡單的狀態(tài)機(jī)來實(shí)現(xiàn)判定窗和恢復(fù)時(shí)間typedef enum { STATE_IDLE, // 空閑等待第一個邊沿 STATE_WINDOW, // 判定窗內(nèi)忽略后續(xù)邊沿 STATE_RECOVERY // 恢復(fù)期等待系統(tǒng)穩(wěn)定 } pulse_state_t; pulse_state_t state STATE_IDLE; uint32_t last_edge_time 0; uint32_t window_ticks WINDOW_US; // 判定窗對應(yīng)的計(jì)數(shù)值 uint32_t recovery_ticks RECOVERY_US; // 恢復(fù)時(shí)間對應(yīng)的計(jì)數(shù)值 void on_edge_detected(uint32_t current_time) { uint32_t elapsed current_time - last_edge_time; switch (state) { case STATE_IDLE: // 第一次邊沿計(jì)數(shù)并進(jìn)入判定窗 pulse_count; last_edge_time current_time; state STATE_WINDOW; break; case STATE_WINDOW: // 判定窗內(nèi)忽略 break; case STATE_RECOVERY: // 恢復(fù)期內(nèi)忽略 break; } } void on_timer_tick(uint32_t current_time) { uint32_t elapsed current_time - last_edge_time; if (state STATE_WINDOW elapsed window_ticks) { state STATE_RECOVERY; last_edge_time current_time; } else if (state STATE_RECOVERY elapsed recovery_ticks) { state STATE_IDLE; } }這個狀態(tài)機(jī)的邏輯很清晰檢測到第一個邊沿后進(jìn)入判定窗在判定窗內(nèi)忽略所有后續(xù)邊沿判定窗結(jié)束后進(jìn)入恢復(fù)期恢復(fù)期內(nèi)也忽略邊沿恢復(fù)期結(jié)束后回到空閑準(zhǔn)備接受下一個有效邊沿。關(guān)鍵參數(shù)就是window_ticks和recovery_ticks它們由前面的計(jì)算結(jié)果換算成定時(shí)器計(jì)數(shù)值。比如定時(shí)器頻率1MHz判定窗1.2μs那window_ticks 1.2取整為2。恢復(fù)時(shí)間1.5μsrecovery_ticks 1.5取整為2。注意定時(shí)器頻率要足夠高否則判定窗的精度不夠。建議定時(shí)器頻率至少是采樣率的2倍或者直接用采樣時(shí)鐘作為定時(shí)基準(zhǔn)。4.3 在PLC中實(shí)現(xiàn)判定窗和恢復(fù)時(shí)間信捷XD3系列PLC的高速計(jì)數(shù)功能本身不帶判定窗需要在梯形圖程序里自己實(shí)現(xiàn)。思路和上面的狀態(tài)機(jī)一樣只是用PLC的定時(shí)器和計(jì)數(shù)器來實(shí)現(xiàn)。具體步驟用高速計(jì)數(shù)器的中斷功能每次邊沿觸發(fā)一個中斷。在中斷程序里讀取一個自由運(yùn)行定時(shí)器的當(dāng)前值計(jì)算與上一次邊沿的時(shí)間差。如果時(shí)間差小于判定窗設(shè)定值直接返回不計(jì)數(shù)。如果時(shí)間差大于判定窗計(jì)數(shù)器加一并更新上一次邊沿的時(shí)間戳。用一個單獨(dú)的定時(shí)器實(shí)現(xiàn)恢復(fù)時(shí)間在恢復(fù)期內(nèi)屏蔽中斷。梯形圖的關(guān)鍵網(wǎng)絡(luò)包括時(shí)間差計(jì)算網(wǎng)絡(luò)、判定窗比較網(wǎng)絡(luò)、計(jì)數(shù)使能網(wǎng)絡(luò)、恢復(fù)定時(shí)器網(wǎng)絡(luò)。具體指令可以用DSUB做時(shí)間差DCMP做比較DADD做計(jì)數(shù)。實(shí)測下來XD3-24T-E在200kHz計(jì)數(shù)頻率下加上判定窗邏輯后CPU掃描周期會增加約0.5ms。如果掃描周期本來就緊張可以把判定窗邏輯放在中斷程序里減少對主程序的影響。4.4 雙脈沖測試中的特殊處理雙脈沖測試的場景更復(fù)雜一些因?yàn)閮蓚€脈沖是你主動產(chǎn)生的間隔精確可控但功率器件的響應(yīng)會引入額外的振鈴和拖尾。在雙脈沖測試中判定窗主要用來區(qū)分“第一個脈沖的關(guān)斷振鈴”和“第二個脈沖的開啟邊沿”?;謴?fù)時(shí)間則用來確保測試電路在第二個脈沖到來前已經(jīng)完全復(fù)位。我的做法是先用一個脈沖測試測出關(guān)斷振鈴的衰減時(shí)間t_ring_off。然后設(shè)定判定窗為t_ring_off × 1.5?;謴?fù)時(shí)間設(shè)為判定窗的1.2倍。第二個脈沖的延遲時(shí)間必須大于恢復(fù)時(shí)間否則會被屏蔽。如果測試中發(fā)現(xiàn)第二個脈沖的電流波形異常首先檢查恢復(fù)時(shí)間是否設(shè)得太短導(dǎo)致測試電路還沒復(fù)位就開啟了第二個脈沖。其次檢查判定窗是否太大把第二個脈沖的開啟邊沿也屏蔽了。5. 常見問題與排查技巧實(shí)錄5.1 計(jì)數(shù)偏多振鈴被誤判為脈沖這是最常見的癥狀。表現(xiàn)是計(jì)數(shù)值比實(shí)際脈沖數(shù)多且多出來的數(shù)量與信號邊沿的振鈴程度相關(guān)。排查步驟用高帶寬示波器觀察脈沖邊沿確認(rèn)振鈴頻率和衰減時(shí)間。檢查判定窗是否小于振鈴衰減時(shí)間。如果是增大判定窗。檢查恢復(fù)時(shí)間是否小于判定窗。如果是增大恢復(fù)時(shí)間。檢查硬件調(diào)理是否到位。如果振鈴幅度很大光靠數(shù)字判定窗可能不夠需要加RC濾波或阻抗匹配。避坑技巧判定窗和恢復(fù)時(shí)間不要同時(shí)調(diào)。先固定恢復(fù)時(shí)間為判定窗的1.5倍只調(diào)判定窗找到臨界值后再微調(diào)恢復(fù)時(shí)間。5.2 計(jì)數(shù)偏少真實(shí)脈沖被屏蔽表現(xiàn)是計(jì)數(shù)值比實(shí)際脈沖數(shù)少且丟失的脈沖往往出現(xiàn)在高速段。排查步驟確認(rèn)判定窗是否設(shè)得太大把兩個真實(shí)脈沖之間的間隔也覆蓋了。確認(rèn)恢復(fù)時(shí)間是否設(shè)得太長第二個脈沖落在恢復(fù)期內(nèi)被屏蔽。檢查后端邏輯的響應(yīng)時(shí)間是否足夠。如果PLC掃描周期太長即使判定窗設(shè)得合理中斷響應(yīng)不及時(shí)也會丟脈沖。用已知間隔的脈沖源測試逐步縮小間隔找到開始丟脈沖的臨界點(diǎn)與判定窗和恢復(fù)時(shí)間的設(shè)定值對比。5.3 低速正常、高速出錯采樣率或邏輯響應(yīng)跟不上這種癥狀通常不是判定窗本身的問題而是采樣率或邏輯響應(yīng)時(shí)間不夠。排查步驟計(jì)算當(dāng)前采樣率下可分辨的最小間隔。如果最小間隔大于實(shí)際脈沖間隔必須提高采樣率。檢查PLC高速計(jì)數(shù)模塊的最高響應(yīng)頻率。信捷XD3系列單相最高200kHz雙相最高100kHz。如果脈沖頻率接近這個上限計(jì)數(shù)出錯是正常的需要換更高規(guī)格的模塊或改用硬件計(jì)數(shù)方案。檢查中斷程序的執(zhí)行時(shí)間。如果中斷程序太長兩次中斷之間來不及處理就會丟脈沖。優(yōu)化中斷程序只做最必要的計(jì)數(shù)和狀態(tài)更新其他處理放到主程序。5.4 常見問題速查表癥狀可能原因排查方法解決措施計(jì)數(shù)偏多振鈴被誤判高帶寬示波器看邊沿增大判定窗加硬件濾波計(jì)數(shù)偏少真實(shí)脈沖被屏蔽用已知間隔脈沖源測試減小判定窗或恢復(fù)時(shí)間高速出錯采樣率不足計(jì)算最小可分辨間隔提高采樣率或換硬件低速出錯恢復(fù)時(shí)間太長檢查恢復(fù)時(shí)間設(shè)定減小恢復(fù)時(shí)間隨機(jī)出錯信號完整性差檢查線纜和接地加阻抗匹配改善接地溫漂后出錯參數(shù)余量不足高低溫測試增大安全系數(shù)5.5 獨(dú)家避坑經(jīng)驗(yàn)經(jīng)驗(yàn)一判定窗不要設(shè)成整數(shù)。比如計(jì)算出來是1.2μs不要設(shè)成1μs或2μs就設(shè)1.2μs。整數(shù)往往是其他周期的倍數(shù)容易產(chǎn)生諧波干擾。非整數(shù)設(shè)定能避開一些系統(tǒng)性的噪聲。經(jīng)驗(yàn)二恢復(fù)時(shí)間要分場景。同一個設(shè)備低速運(yùn)行和高速運(yùn)行時(shí)恢復(fù)時(shí)間可以設(shè)不同的值。低速時(shí)振鈴有足夠時(shí)間衰減恢復(fù)時(shí)間可以短一些高速時(shí)恢復(fù)時(shí)間要長一些。可以在程序里根據(jù)當(dāng)前速度動態(tài)調(diào)整。經(jīng)驗(yàn)三留一個調(diào)試接口。在程序里留一個變量可以實(shí)時(shí)修改判定窗和恢復(fù)時(shí)間不用重新下載程序?,F(xiàn)場調(diào)試時(shí)這個接口能省大量時(shí)間。經(jīng)驗(yàn)四用雙脈沖測試驗(yàn)證。不要只用連續(xù)脈沖測試要用兩個間隔精確可控的脈沖測試。第一個脈沖用來產(chǎn)生振鈴第二個脈沖用來驗(yàn)證判定窗和恢復(fù)時(shí)間是否合理。雙脈沖測試能暴露出連續(xù)脈沖測試發(fā)現(xiàn)不了的問題。經(jīng)驗(yàn)五注意溫度影響。振鈴頻率和衰減時(shí)間會隨溫度變化。如果設(shè)備工作在寬溫環(huán)境判定窗和恢復(fù)時(shí)間要按最高溫度下的振鈴時(shí)間來計(jì)算并留足夠余量。我一般會按常溫實(shí)測值乘以1.5作為寬溫場景的設(shè)定值。6. 從信號到?jīng)Q策把判定窗和恢復(fù)時(shí)間變成系統(tǒng)能力判定窗和恢復(fù)時(shí)間這兩個參數(shù)表面上看只是兩個時(shí)間閾值但它們決定了整個采集系統(tǒng)的“時(shí)間分辨能力”。設(shè)得太小系統(tǒng)被噪聲和振鈴淹沒設(shè)得太大系統(tǒng)反應(yīng)遲鈍真實(shí)事件被漏掉。找到那個恰到好處的值靠的不是肉眼而是對信號物理特性的理解、對采樣系統(tǒng)的量化分析、以及對后端邏輯的準(zhǔn)確評估。我在多個項(xiàng)目里反復(fù)驗(yàn)證過一個原則先測振鈴再算判定窗最后定恢復(fù)時(shí)間。這個順序不能亂。跳過振鈴實(shí)測直接拍腦袋設(shè)判定窗十有八九要返工。恢復(fù)時(shí)間一定要比判定窗大大多少取決于信號調(diào)理電路的建立時(shí)間和后端邏輯的復(fù)位時(shí)間不能想當(dāng)然。還有一個容易被忽視的點(diǎn)判定窗和恢復(fù)時(shí)間不是設(shè)一次就一勞永逸的。設(shè)備老化、線纜更換、工作環(huán)境變化都會改變振鈴特性。定期用雙脈沖測試驗(yàn)證一下這兩個參數(shù)是否仍然合適應(yīng)該成為設(shè)備維護(hù)的常規(guī)項(xiàng)目。最后分享一個我在現(xiàn)場常用的小技巧如果手頭沒有高帶寬示波器可以用一個簡單的方法估算振鈴時(shí)間——把信號源的脈沖頻率逐步提高同時(shí)觀察計(jì)數(shù)系統(tǒng)的輸出。當(dāng)計(jì)數(shù)開始出錯時(shí)記錄當(dāng)前的脈沖間隔這個間隔就是振鈴時(shí)間的一個保守上界。雖然不夠精確但足以幫你設(shè)定一個安全的判定窗。等有條件時(shí)再用示波器精確測量并優(yōu)化。