1樓:做而論道
針對你的脈衝速率,的確應該採用「測周」的方法。
你已經注意到了流速不斷的重複兩次變化,比如:1392l/h,1368l/h,兩數之間相差36。
實際上,這是你檢測的脈衝個數,在「兩個」相鄰的數字上變化,如100、101。
你反過來換算一下,36,是不是對應乙個脈衝?
這說明,「測頻」的方法,精度已經達到極限。
這時,採用「測周」的方法,精度會提高很多。
測周,是測量兩個下降(或上公升)沿之間的時間,約100hz的訊號,微控制器可得到10000的時間資料(12mhz的晶振),考慮到正負1的誤差,可能為9999~10001。
換算出「脈衝個數」,就是100.01~99.99,折算成流量,將是0.36的差別。
2樓:潛爾藍
89s52微控制器我現在也不怎麼用了 呵呵 不過你這個還是不難的
首先 分析一下 頻率不是很高 100hz 用微控制器捕捉每個脈衝的邊緣也是可以的 這樣每個邊緣的時刻你都清楚了 你說的問題也就解決了 對不對?
說一下具體實現 我記得s52是有t2定時器的 這個定時器應該帶捕獲模式~ 這樣就是可以記錄脈衝的精確時間了 具體實現你還是要參照下手冊 細節記不清了
如果不用t2 可以用外部中斷 每個下降沿進中斷 記錄下定時器的時刻 也可以~ 但是有點小問題就是如果不停定時器 那麼8bit cpu 讀16bit資料要兩次 碰上正好進製就麻煩了 再就是停定時器 然後軟體補償一下這個誤差 還有其他方法~
你的方法相當於 測定時長內的脈衝個數 對脈衝細節不敏感 所以會出現問題 這個方法適合測比較高的頻率 比如50ms有5000個脈衝~ 乙個乙個脈衝去關注你當然受不了了~
應該滿意了吧?
3樓:匿名使用者
考慮超出取值範圍,否則會出現錯誤的。
4樓:匿名使用者
可以試一下這種方法:
在程式的某一位置放乙個標誌位,例如p1.0,先置1再置0.然後用示波器來測p1.0口的輸出頻率.這樣就可以得到你那段程式所消耗的時間.
51微控制器裡TMOD設定問題,51微控制器裡TMOD設定問題
問題1 工作方式0 0x00 工作方式1 0x01 工作方式2 0x02 工作方式3 0x03 問題2 當你選擇好工作方式後,接下來就是設定初始值,方式0 16位加法計數器用了13位,也就是說,可以計算2 13 要想計數更大,使用迴圈即可。同理方式1 16位加法計數器用了16位,方式2是8位的。以上...
關於51微控制器的中斷問題,51微控制器外部中斷0的問題
優先中斷,就是在執行乙個中斷的時候,又來了乙個中斷 如果新來的中斷,其優先順序高於正在執行的中斷,那麼就會暫停現在的中斷而去執行新來的中斷,等這個新中斷執行完之後再會回去繼續執行剛才那個沒執行完也就是那個被打斷的中斷 如果新來的中斷,其優先順序不如正在執行的中斷的優先順序高,那麼程式會繼續執行這個中...
51微控制器中斷問題
想完成這個功能 必須在主迴圈加入條件判斷語句 比如if anniu 1 否則跳轉,如果想實現單鍵啟動 停止 根據這個程式 把acc加1,用程式狀態字再判acc的奇偶標誌,吧anniu值1或值0來控制主迴圈的執行。至於用中斷或者普通埠鍵盤都無所謂。中斷分 電平躍變 只要有乙個脈衝就執行中斷程式 中斷函...