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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > CAN總線在測溫系統(tǒng)中的應用

          CAN總線在測溫系統(tǒng)中的應用

          作者: 時間:2016-09-12 來源:網(wǎng)絡 收藏

          控制器局部網(wǎng)(controller area network,CAN)屬于現(xiàn)場總線的范疇,它是一種有效支持分布式控制的串行通訊網(wǎng)絡,被公認為是最有前途的現(xiàn)場總線之一。本文利用MAX6675測溫芯片作為傳感器,使用CAN總線標準設(shè)計了一種智能測溫系統(tǒng)(適用范圍0℃~+1023.5℃)。該系統(tǒng)精度高(±0.5℃)、可靠性好、結(jié)構(gòu)簡單、成本低,在適用范圍內(nèi)可取代傳統(tǒng)的測溫系統(tǒng),對該系統(tǒng)稍加修改,可使它應用于在多種測溫場合。

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

          1 硬件設(shè)計

          硬件電路由微處理器、CAN控制器、測溫芯片MAX6675、LED、鍵盤、復位電路、蜂鳴器等幾部分組成,如圖1所示。單片機AT89C51是硬件電路的核心,承擔CAN 控制器的初始化、數(shù)據(jù)收發(fā)控制等任務;CAN總線控制器用于同上位機進行遠程通訊,能夠獨立完成CAN總線上數(shù)據(jù)的接收和發(fā)送工作;MAX6675芯片用于檢測和發(fā)送溫度數(shù)據(jù)。

          圖2 測溫電路圖

          MAX6675從I/O口線輸出數(shù)據(jù)的具體過程如下:P12端口輸出的低電平將CS變低,并提供時鐘信號給SCK,由SO口讀取測量結(jié)果。CS變低,將停止任何轉(zhuǎn)換過程,CS變高將啟動一個新的轉(zhuǎn)換過程。

          一個完整串行接口讀操作需16個時鐘周期,在時鐘的下降沿讀16個輸出位。第15位是偽標志位,并總為0;第14位到第3位為以MSB到LSB順序排列的轉(zhuǎn)換溫度值;第2位平時為低,當熱電偶輸入開放時為高,開放熱電偶檢測電路完全由MAX6675實現(xiàn),為開放熱電偶檢測器操作,T-必須接地,并使能地點盡可能接近GND 腳;第1位為低以提供MAX6675器件身份碼,第0位為三態(tài)標志位 。

          1.2的通信節(jié)點電路

          通信節(jié)點采用PHILIPS公司生產(chǎn)的符合CAN2.0B協(xié)議的獨立CAN通信控制器SJA1000及CAN收發(fā)器PCA82C250組成與其他智能節(jié)點或上位機的通信接口,實現(xiàn)數(shù)據(jù)傳輸。CAN控制器SJA1000工作在中斷模式,通過其中斷輸出引腳向CPU申請中斷,CPU在中斷子程序內(nèi)完成對上位機命令的解釋與執(zhí)行。CAN通信節(jié)點電路如圖3所示。

          圖4 溫度采集程序流程圖

          2.2 CAN通訊節(jié)點設(shè)計

          CAN接口通信軟件設(shè)計主要分為三部分:CAN初始化、數(shù)據(jù)發(fā)送、數(shù)據(jù)接收。

          2.2.1 CAN控制器SJA1000的初始化

          CAN初始化主要是設(shè)置SJA1000的參數(shù)。需要初始化的CAN控制寄存器有:模式寄存器、時分寄存器、接收代碼寄存器、屏蔽寄存器、總線定時寄存器、輸出控制寄存器。這些寄存器只能在CAN控制器處于復位狀態(tài)下才可寫訪。設(shè)SJA1000的首地址是0BF00H。初始化子程序如下:

          CR EQU 0BF00H; 控制寄存器

          CMR EQU 0BF01H; 命令寄存器

          SR EQU 0BF02H; 狀態(tài)寄存器

          IR EQU 0BF03H; 中斷寄存器

          ACR EQU 0BF04H; 驗收碼寄存器

          AMR EQU 0BF05H; 驗收屏蔽寄存器

          BTR0 EQU 0BF06H; 總線定時寄存器0

          BTR1 EQU 0BF07H; 總線定時寄存器1

          OCR EQU 0BF08H; 輸出控制寄存器

          CANINI:MOV DPTR,#CR ;開始初始化

          MOV A,#01H ;置復位請求為高

          MOVX @DPTR,A

          CANI1:MOVX A,@DPTR ;判復位請求有效

          JNB ACC.0,CAN I1

          MOV DPTR,#ACR ;寫接收碼寄存器

          MOV A,NODE;設(shè)置接點號

          MOVX @DPIR,A

          MOV DPTR,#AMR;寫接收碼屏蔽寄存器

          MOV A,#00H

          MOVX @DPTR,A

          MOV DPTR,#BTR0;寫總線定時寄存器0

          MOV A,NBTR0;設(shè)置波特率

          MOVX @DPIR,A

          MOV DPTR,#BTR1;寫總線定時寄存器1

          MOV A,NBTR1

          MOVX @DPTR,A

          MOV DPTR,#OCR;寫輸出控制寄存器

          MOV A,#0FAH

          MOV @DPTR,A

          MOV DPTR,#CDR;寫時鐘分頻寄存器

          MOV A,#00H ;設(shè)定工作模式

          MOVX @DfTR ,A

          MOV DPTR,#CR ;寫控制寄存器

          MOV A,#0EH ;開放中斷源

          MOVX @DPTR,A

          RET

          2.2.2 CAN接收與發(fā)送數(shù)據(jù)程序

          發(fā)送數(shù)據(jù)程序把數(shù)據(jù)存儲區(qū)中待發(fā)送的數(shù)據(jù)取出,組成數(shù)據(jù)幀,并將主機的ID地址填人幀頭,然后將數(shù)據(jù)幀發(fā)送到CAN 控制器的發(fā)送緩沖區(qū)。其數(shù)據(jù)幀形式如下:

          幀起始→仲裁場→控制場→數(shù)據(jù)場(8B)→CRC場→ACK場→幀結(jié)束。

          在接收到主機的發(fā)送請求后,發(fā)送程序啟動發(fā)送命令。數(shù)據(jù)從CAN控制器發(fā)送到總線是由CAN控制器自動完成的。數(shù)據(jù)從CAN總線到CAN控制器的接收緩沖區(qū)也是由CAN控制器自動完成的。接收程序只需從接收緩沖區(qū)讀取數(shù)據(jù),并將其存儲在數(shù)據(jù)存儲區(qū)。接收和發(fā)送數(shù)據(jù)的中斷程序流程如圖5、圖6所示。

          圖5 接收數(shù)據(jù)的中斷程序流程 圖6 發(fā)送數(shù)據(jù)的中斷程序流程

          3 結(jié)語

          基于CAN總線的智能測溫系統(tǒng)具有測量范圍廣、精度高、環(huán)境適應能力強等特點。該系統(tǒng)通過CAN適配器與計算機連接,可以方便地構(gòu)成分布式測控系統(tǒng)。已經(jīng)成功應用于CNC精密成型磨削設(shè)備數(shù)控的研制項目中。此外,該智能測溫系統(tǒng)在電力、油田、樓宇、冶金等工業(yè)自動化領(lǐng)域可具有廣泛的應用前景。



          關(guān)鍵詞: CAN總線 測溫系統(tǒng)

          評論


          相關(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); })();