可測量脈沖寬度的微控制器串行端口
很多工業(yè)與儀表系統都需要測量脈沖輸入的持續時(shí)間,如轉速傳感器、外部系統的門(mén)控與選通脈沖,以及PWM(脈沖寬度調制)輸入的頻率等。設計者是采用片上定時(shí)器和邊沿驅動(dòng)的中斷。但是,如果這些元件不可用,可以用片上的串行同步接收器做這類(lèi)測量。
可以根據需要的時(shí)序精度,設定串行接收器的波特率。接收器每8 bit后中斷微控制器??梢栽趹贸绦蛑胁迦朊}沖寬度采集例程,用于讀取ISR(中斷服務(wù)例程)接收到的字節。它會(huì )統計和累加接收到的0和1字節,以測量出進(jìn)入脈沖的持續時(shí)間(圖1)。
算法測量a的是兩個(gè)連續上升沿之間的持續時(shí)間。當微控制器收到一個(gè)既不是0xff也不是0x00的字節時(shí),就檢測到了一個(gè)上升沿或下降沿。如果一個(gè)字節小于0x80H (100 000b),則該字節表示一個(gè)上升沿。如果字節等于或大于該值,則該字節表示一個(gè)下降沿。
前上升沿將位計數器重置為上升沿字節中拖尾1的個(gè)數,方法是將向右移位。位計數器在每個(gè)字節來(lái)到時(shí)加8,也包括標志下降沿的那個(gè)字節。當計數器接收到后上升沿(由下一個(gè)上升沿字節標志,它大于0x80H但小于00H)時(shí),它再次統計該字節中領(lǐng)先0的個(gè)數,并將此數加到累加位計數器上。此時(shí)的累加位計數與脈沖鏈的時(shí)間周期相關(guān),其因數等于波特率。
圖2表示一個(gè)200Hz的脈沖鏈,兩個(gè)上升沿之間的時(shí)間為5ms。波特率為256kbaud。在一個(gè)測量周期內,假設前上升沿的標志為0011 1111b。微控制器將其向右移位,統計拖尾1的數目,位計數器初始化為6。這個(gè)計數對應的時(shí)間約為23.43 μs。
接下來(lái),上升沿字節前的每個(gè)字節都使位計數器加8。簡(jiǎn)單計算表明,共有159字節,即1272位。此時(shí),計算的總位數為1278位,包括在第一個(gè)上升沿字節中收到的6個(gè)1。
現在,脈沖鏈遇到了拖尾的上升沿字節,其值為0011 1111b。做這個(gè)計數時(shí),需要將0左移,統計為兩個(gè)位。兩上升沿之間的總位數就是1280bit。在256 kbaud速率下,這個(gè)數字精確地對應于5 ms或200 Hz。
可以根據自己的應用需求,對這種位計數概念作修改。如果只需要測量低周期的脈沖,需要探測一個(gè)下降沿,并累計位數,直到遇見(jiàn)一個(gè)上升沿??梢詫⑦@種概念用于讀取進(jìn)入的PWM信號,方法是讀取一個(gè)已知進(jìn)入脈沖頻率的高周期。
評論