<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 消費電子 > 設計應用 > 數(shù)字轉速計的設計

          數(shù)字轉速計的設計

          ——
          作者:周嶸 楊穎 時間:2007-01-26 來源:《自動化與儀器儀表》 收藏

          引 言
            
          在工業(yè)控制中經常要進行轉速測量,一般采用的是接觸式轉速計,這種轉速計必須頂在轉軸中心才能進行測量,使用起來不方便,而且局限性很大,安全性也不是很好。因此,我們設計了采用光電傳感器的非接觸式轉速計,測量范圍從1.0~9999轉/分鐘,四位數(shù)碼管顯示,當被測轉速小于1000轉/分鐘時,精確到0.1轉/分鐘。

          1 測量原理

          本文引用地址:http://www.ex-cimer.com/article/20995.htm

          在被測旋轉軸上貼一片鋁箔作為反光體,當反光體轉到光電傳感器的正前方時,光電傳感器發(fā)出的紅外光束被反射回來,同時被光電傳感器上的紅外接收管接收,產生一個脈沖信號,我們利用這個信號的邊沿觸發(fā)單片機內部的高精度定時器進行計時,精度可達1μs,當反光體再次轉到光電傳感器的正前方時,利用光反射信號的邊沿停止單片機計時。這樣轉軸的旋轉周期t就被精確地測量出來了,然后單片機把周期換算成轉速并通過led數(shù)碼管顯示出來。

          2 電路構成及軟件設計

          電路結構見圖1,因為要求體積小巧且顯示亮度高,因此,采用掃描顯示模式,然而,用一片cpu同時完成測量和顯示是不行的,掃描功能將嚴重影響cpu的測量。因此,采用兩片atmel公司生產的at89c2051單片機來分別擔任,at89c2051具有內置2kb的eeprom程序存儲器和128個字節(jié)的ram,且每個引腳能夠吸入20ma的電流等這些良好特性。cpu1用來測量旋轉軸的旋轉周期并換算成轉速,然后把顯示數(shù)據(jù)發(fā)送給cpu2,cpu2平時只是在不斷地掃描顯示數(shù)據(jù),當cpu1發(fā)送數(shù)據(jù)過來時,cpu2產生中斷,立即接收數(shù)據(jù),然后更新顯示數(shù)據(jù),這樣在四位led數(shù)碼管上的數(shù)據(jù)就被立即更新了。采用兩片cpu的好處是電路結構清晰,編程簡單,實現(xiàn)了模塊化設計。cpu之間采用串行接口方式2,以中斷形式進行通信。cpu2的通信部分程序清單如下:

          3 結 論

          經過實際使用,我們設計的轉速計達到了預先設想的目的,使用方便可靠,而且因為這樣的結構設計使得cpu1的輸入/輸出口占用極少,因此還可以拓展它的功能。例如我們安裝了一個切換開關,增加了光電計數(shù)器的功能(探頭是共用的)。另外,我們還可以把cpu2及四位led共陽數(shù)碼管構成一個通用顯示模塊,除顯示0~9等數(shù)字外,還可以顯示例如a-j、l、o、p、q、r、u、y等字符。這樣,如果我們在設計其他的電路時,如果要用到led數(shù)碼管顯示,不必再編程制版,只要使用這個通用顯示模塊即可,簡單方便。這種顯示模塊如果不擴充輸入輸出口線,最多可以進行五位的七段數(shù)碼管顯示。



          關鍵詞:

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();