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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于單片機(jī)控制的CAN與RS-232轉(zhuǎn)換器的研究與設(shè)計(jì)

          基于單片機(jī)控制的CAN與RS-232轉(zhuǎn)換器的研究與設(shè)計(jì)

          作者: 時(shí)間:2013-03-15 來源:網(wǎng)絡(luò) 收藏

            2.2 SJA1000與接口電路設(shè)計(jì)

            控制器SJA1000芯片采用片外24MHz晶振,其CLKOUT引腳輸出工作頻率接入微處理器的XTAL1引腳。片選/CS端與單片機(jī)的P2.7引腳直接相連,因此SJA1000的尋址空間從地址0開始。AD0~AD7直接與的低8位數(shù)據(jù)/地址復(fù)用口P0口相連,MODE接高電平設(shè)置為Intel模式,中斷輸出信號/INT與微處理器的/INT0連接,使通信可以采用中斷和查詢兩種方式。TLP113的外接390Ω電阻為限流保護(hù)電阻,為避免當(dāng)驅(qū)動器失效時(shí)出現(xiàn)過流導(dǎo)致控制器損壞。SJA1000與接口電路如圖2所示。


            2.3 總線物理層接口電路設(shè)計(jì)

            PCA82C250與CAN總線的接口部分采用一定的安全和抗干擾措施。CANH和CANL與地之間并聯(lián)了兩個(gè)30P的小電容,可以起到濾除總線的高頻干擾和一定的防電磁輻射的能力。另外在兩根CAN總線接入端與地之間分別反接一個(gè)保護(hù)二極管,當(dāng)CAN總線有較高的負(fù)電壓時(shí),通過二極管的短路可起到一定的過壓保護(hù)作用。PCA82C250的Rs腳上接有一個(gè)斜率電阻,電阻大小可根據(jù)總線通訊速度適當(dāng)調(diào)整,一般在16K~140K之間。用光電隔離芯片TLP113將CAN控制器SJA1000和收發(fā)器PCA82C250隔離,以便有效地增加通訊距離和抗干擾能力。CAN總線物理層接口電路如圖3所示。


            3.基于的CAN總線與軟件設(shè)計(jì)

            主程序分為初始化和循環(huán)檢測兩個(gè)主要部分。初始化部分完成對看門狗電路及RS-232 串口和CAN總線的初始化并開啟INT0中斷和串口中斷。循環(huán)檢測部分通過調(diào)用CAN總線接收函數(shù)(CAN_Receive())和RS-232接收函數(shù)(RS232_Receive())檢測緩沖區(qū)內(nèi)是否收到到數(shù)據(jù),如果有數(shù)據(jù)接收則調(diào)用RS-232發(fā)送函數(shù)(RS232_Send())和CAN總線發(fā)送函數(shù)(CAN_Send())轉(zhuǎn)發(fā)數(shù)據(jù)。數(shù)據(jù)的發(fā)送和接收都是通過中斷來進(jìn)行的。每次循環(huán)檢測結(jié)束通過調(diào)用rst_wdog函數(shù)使看門狗復(fù)位。此外,由于CAN總線的速率與RS-232接口的速率并不相同,因此還需設(shè)置片外的存儲器(RAM),用于轉(zhuǎn)換雙方的數(shù)據(jù)緩沖區(qū)。主程序流程圖如圖4所示。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();