製作隔空感應的引擎轉速表 - 新唐N76S003計時器輸入捕捉的應用(Timer input capture)
先前說過, 用新唐1T 8051 N76S003製作的003Clock套件 不只是時鐘而已,設計時將所有IO接腳都拉出來了,因此它還能夠做其它有趣的應用! 這次分享一個應用實例是「隔空感應的引擎轉速表」。老樣子,會在留言區和GitHub提供完整程式碼。 https://github.com/danchouzhou/003Clock/blob/f8fa5d909b5bdadf008ea9de9164a25ca33d9015/firmware/Tachometer/main.c 引擎轉速信號 轉速表的基本原理都是測量點火之間的週期或頻率,使用類比電路、數位電路或MCU中的程式換算出轉速。那麼點火和引擎轉速有什麼關聯呢?我們看一下 維基百科可以得知,當今主流的四行程引擎運作時,720度中分為 進氣、壓縮、爆炸、排氣 共四個行程 ,其中爆炸行程就是靠與高壓線圈相連接的火星塞產生的火花,點燃在燃燒室中的壓縮混合氣,讓氣體溫度上升,膨脹時讓引擎產生動力。而高壓線圈可以在收到點火信號時,輸出數十KV讓火星塞產生火花。所以可以得知,點火與引擎轉速呈現線性關係,經過換算後即可得知引擎轉速。取得轉速信號最直接的方式當然就是把高壓線圈的點火信號拉出來用。 高壓線圈產生的EMI可以當成是轉速信號? 一般來說,雜訊在電路裡是我們不樂見的干擾源,但我卻將高壓線圈產生的電磁波當成是轉速信號。下圖是發動之後,將示波器探棒靠近引擎量到的波形,信號可是非常清晰的,注意喔,在這裡探棒並未直接與車輛電路相連,是隔空就能測得到信號。經過實際測試,將微控制器的IO用20公分左右的線接出來,並設定成pull-up模式(這可以避免輕微的雜訊誤觸發),接條線出來當天線靠近引擎,IO準位也會隨之跳動,完全不用額外的電路或感測器。如此以來不用改裝原車線路,就能夠「隔空」得到轉速信號。 在這邊將示波器時基設為50 ms/DIV、探棒設為1:1、垂直設為10 V/DIV,trigger level設成-20 V,可以看見trigger頻率是13.8 Hz,大約就是摩托車引擎怠速1600 RPM點火的頻率(後面會再講解頻率如何換算成轉速)。 如何得到兩次點火的間隔? 還記得 之前介紹過的計時器吧 !要得到兩次點火的間隔,可以開一個Timer並將IO設定成邊緣觸發的外部中斷,每次中斷發生時把Timer計數值讀取出來,再把Tim...