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