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