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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式超聲波測距儀的設計方案

          嵌入式超聲波測距儀的設計方案

          作者: 時間:2011-07-22 來源:網(wǎng)絡 收藏

            2.2 電路

            電路主要包括兩個部分:發(fā)射電路和超聲波接收電路,具體的電路如圖3所示。圖2中上半部分就是超聲波發(fā)射電路,微處理器AT89C51通過編程在端口P16產生一個40kHz的超聲波信號,經過兩個74LS14非門將信號驅動整形,再由三極管Q9對其進行放大,最后經過變壓器T1送到超聲波傳感器CSB-T40,這樣就可以通過超聲波傳感器CSB-T40發(fā)出相應的超聲波信號。而圖3中的下半部分就是超聲波接收電路,超聲波信號通過障礙物發(fā)射到超聲波傳感器CSB-R40后,產生一定的電信號,電信號通過集成塊BX1490放大后送到了2個74LS14非門電路整形,最后進入微處理器AT89C51的P17端口。這樣就完成了1次超聲波的掃描過程,它可以通過程序來控制計數(shù)器,將計數(shù)器的數(shù)據(jù)轉換為相應的時間,再用時間乘以超聲波的傳播速度后除以2,既可以得到障礙物與超聲波傳感器之間的距離。

          2.3 CAN總線通信電路

            考慮到現(xiàn)在的智能測試設備日益趨于網(wǎng)絡化,則將CAN總線通信功能也進了此超聲波測距儀中,CAN總線通信電路系統(tǒng)主要有AT89C51微控制器、獨立CAN通信控制器SJA1000、CAN總線驅動器PCA82C250及復位電路IMP708組成。CAN總線應用節(jié)點具體電路如下圖4所示。為了提高系統(tǒng)的抗干擾能力,設計在SJA1000和CAN總線驅動器PCA82C250之間增加了光電隔離器6N137。當微處理器AT89C51將測距結果數(shù)據(jù)通過P0口發(fā)送到CAN總線控制器SJA1000,由SJA1000將并行數(shù)據(jù)轉換為串行數(shù)據(jù)從端口TX0發(fā)出,經過光電隔離器6N137后到達CAN總線驅動器PCA82C250,最后將數(shù)據(jù)發(fā)送到CAN總線上。相反,來自CAN總線的數(shù)據(jù)也可以經過相應電路到達微處理器。這樣就可以實現(xiàn)測距儀與上位機的通信功能。

            3 程序設計

            3.1 主程序設計

            系統(tǒng)主程序主要包括系統(tǒng)的啟動后對系統(tǒng)的初始化、超聲波發(fā)射與接收、中斷管理、計時程序、測距計算、結果顯示、CAN通信、報警等其他子程序組成。根據(jù)以上超聲波測距儀的工作原理描述,系統(tǒng)主程序的流程圖設計如圖5所示。在主程序初始化后就進入超聲波信號發(fā)送程序,即利用程序產生超聲波信號由微處理器的P16端口送出,此時系統(tǒng)進入計時狀態(tài),同時檢測P17端口是否能接收到超聲波的回波信號,但檢測到回波信號就關閉外部中斷進入計算距離子程序,接下來進行是否報警驗證和CAN通信子程序,最后打開外部中斷完成一次測距掃描過程,即主程序結束。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          超聲波液位計相關文章:超聲波液位計原理


          液位計相關文章:磁翻板液位計原理




          評論


          相關推薦

          技術專區(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); })();