基于CAN總線的溫度控制系統(tǒng)_第1頁
基于CAN總線的溫度控制系統(tǒng)_第2頁
基于CAN總線的溫度控制系統(tǒng)_第3頁
基于CAN總線的溫度控制系統(tǒng)_第4頁
基于CAN總線的溫度控制系統(tǒng)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于CAN總線的溫度控制系統(tǒng)前言CAN (Controller Area Network) 總線又稱控制器局域網(wǎng)是Bosch 公司, 在現(xiàn)代汽車技術(shù)中領(lǐng)先推出的一種多主機(jī)局部網(wǎng)由于其卓越的性能極高的可靠性獨(dú)特靈活的設(shè)計(jì)和低廉的價(jià)格現(xiàn),已廣泛應(yīng)用于工業(yè)現(xiàn)場控制智能大廈小區(qū)安防交通工具醫(yī)療儀器環(huán)境監(jiān)控等眾多領(lǐng)域CAN, 已被公認(rèn)為幾種最有前途的現(xiàn)場總線之一CAN。 總線規(guī)范已被ISO 國際標(biāo)準(zhǔn)組織制訂為國際標(biāo)準(zhǔn),CAN 協(xié)議也是建立在國際標(biāo)準(zhǔn)組織的開放系統(tǒng)互連參考模型基礎(chǔ)上的,主要工作在數(shù)據(jù)鏈路層和物理層。用戶可在其基礎(chǔ)上開發(fā)適合系統(tǒng)實(shí)際需要的應(yīng)用層通信協(xié)議,但由于CAN 總線極高的可靠性從而使應(yīng)

2、用層通信協(xié)議得以大大簡化。CAN總線的物理層是將ECU連接至總線的驅(qū)動(dòng)電路。ECU的總數(shù)將受限于總線上的電氣負(fù)荷。物理層定義了物理數(shù)據(jù)在總線上各節(jié)點(diǎn)間的傳輸過程,主要是連接介質(zhì)、線路電氣特性、數(shù)據(jù)的編碼解碼、位定時(shí)和同步的實(shí)施標(biāo)準(zhǔn)??刂破骶钟蚓W(wǎng)CAN是目前為止被批準(zhǔn)為國際標(biāo)準(zhǔn)的少數(shù)現(xiàn)場總線之一。CAN網(wǎng)絡(luò)可以采用多主方式工作。它采用非破壞性的總線仲裁技術(shù),其控制和信號(hào)傳輸采用短幀結(jié)構(gòu),因而具有低耦合性和較強(qiáng)的抗干擾能力。它的傳輸介質(zhì)可以是雙絞線、同軸光纖或電纜,選擇十分靈活;每幀信息都有CRC校驗(yàn)及其它檢錯(cuò)措施,因此數(shù)據(jù)出錯(cuò)率極低,可靠性較高;當(dāng)其傳輸?shù)男畔⒊鲥e(cuò)嚴(yán)重時(shí),節(jié)點(diǎn)可以自動(dòng)斷開與總線的

3、聯(lián)系,以使其總線上其它的操作不受影響。 雖然目前USB、PCI等總線技術(shù)得到了快速發(fā)展,但是在大量應(yīng)用的測試微機(jī)及工控機(jī)中,用的最多的還是ISA總線。ISA總線具有16位數(shù)據(jù)寬度,其最高工作頻率為8MHz,數(shù)據(jù)傳輸速率可達(dá)到16MBs,地址總線有24條,可尋址16MB的地址單元,其總線信號(hào)分為5類,分別為數(shù)據(jù)線、控制線、地址線、電源線和時(shí)鐘線??刂破骶钟蚓W(wǎng)CAN屬于現(xiàn)場總線的范疇,是一種有效支持分布式控制系統(tǒng)的串行通信網(wǎng)絡(luò)。是德國博世公司在20世紀(jì)80年代專門為汽車行業(yè)開發(fā)的一種串行通信總線。由于其高性能、高可靠性以及獨(dú)特的設(shè)計(jì)而越來越受到人們的重視,被廣泛應(yīng)用于諸多領(lǐng)域。由于CAN

4、總線具有很高的實(shí)時(shí)性能和應(yīng)用范圍,從位速率最高可達(dá)1Mbps的高速網(wǎng)絡(luò)到低成本多線路的50Kbps網(wǎng)絡(luò)都可以任意搭配。因此,CAN總線己經(jīng)在工業(yè)控制、汽車業(yè)、航空業(yè)、安全防護(hù)等領(lǐng)域中得到了廣泛應(yīng)用?,F(xiàn)場總線是應(yīng)用在生產(chǎn)最底層的一種總線型拓?fù)涞木W(wǎng)絡(luò),是用作現(xiàn)場控制系統(tǒng)的、直接與所有受控節(jié)點(diǎn)串行相連的通信網(wǎng)絡(luò)。受控設(shè)備和網(wǎng)絡(luò)所處的環(huán)境可能很特殊,對(duì)信號(hào)的干擾往往是多方面的,這就要求控制必須是實(shí)時(shí)性很強(qiáng)。CAN控制器SJA1000的地址數(shù)據(jù)總線是分時(shí)復(fù)用的,它通過ALE信號(hào)的下降沿可鎖存總線上的地址信號(hào);ISA總線上的數(shù)據(jù)總線和地址是單獨(dú)提供的, 其不能直接和SJA1000的地址數(shù)據(jù)總線相連。此設(shè)計(jì)

5、利用地址譯碼電路來對(duì)地址信號(hào)線進(jìn)行譯碼,從而為CAN適配卡分配出一定的端口地址。然后利用74HC373芯片的數(shù)據(jù)鎖存功能鎖存第一次IO操作中通過ISA數(shù)據(jù)總線傳送的數(shù)據(jù)信號(hào),以便作為訪問CAN控制器SJA1000中寄存器的地址信號(hào),最后在第二次IO操作中完成對(duì)SJA1000中相應(yīng)地址寄存器的讀寫操作。其它現(xiàn)場總線較差,這也是目前CAN總線在眾多領(lǐng)域被廣泛采用的原因。節(jié)點(diǎn)是網(wǎng)絡(luò)上信息的接CAN總線與其它幾種現(xiàn)場總線比較而言是最容易實(shí)現(xiàn)價(jià)格最為低廉的的一種,但其性能并不比收和發(fā)送站,由微處理器和可編程的CAN 控制芯片組成的就是所謂智能節(jié)點(diǎn)。它們有兩者合二為一的如芯片P8XC592,也有如此文介紹

6、的獨(dú)立的通信控制芯片與單片機(jī)接口。其后者的優(yōu)點(diǎn)是比較靈活。DALLAS的最新單線數(shù)字溫度傳感器DS18B20體積更小、適用電壓更寬、更經(jīng)濟(jì), DALLAS 半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 "一線總線"接口的溫度傳感器。一線總線獨(dú)特且經(jīng)濟(jì)的特點(diǎn),用戶可輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念。DS18B20、DS1822 “一線總線”數(shù)字化溫度傳感器與DS1820一樣,DS18B20也支持“一線總線”接口,測量溫度范圍為-55°C+125°C,在-10°C+85°C范圍內(nèi),精度為±0.5&

7、#176;C。DS1822的精度較差為± 2°C?,F(xiàn)場溫度是直接以"一線總線"的數(shù)字方式傳輸,這樣大大提高了系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量,如:設(shè)備或過程控制、環(huán)境控制、測溫類消費(fèi)電子產(chǎn)品等。與前一代產(chǎn)品不同的是新的產(chǎn)品支持3V5.5V的電壓范圍,使系統(tǒng)設(shè)計(jì)更方便、靈活。且新一代產(chǎn)品更便宜,體積更小。DS18B20、DS1822的特性DS18B20可以程序設(shè)定912位的分辨率,精度為±0.5°C??蛇x用更小的封裝方式,更寬的電壓適用范圍。分辨率的設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EEPROM中,掉電后依然保存。DS18B2

8、0的性能是新一代產(chǎn)品中最好的!其性能價(jià)格比也非常出色!DS1822與 DS18B20軟件兼容,是DS18B20的簡化版本。省略了存儲(chǔ)用戶定義分辨率參數(shù)和報(bào)警溫度的EEPROM,精度降低為±2°C,適用于對(duì)性能要求不高,成本控制嚴(yán)格的應(yīng)用,是經(jīng)濟(jì)型產(chǎn)品。DS1820開辟了溫度傳感器技術(shù)的新概念。DS18B20和DS1822使特性、電壓及封裝有更多的選擇,讓我們可以構(gòu)建適合自己的經(jīng)濟(jì)的測溫系統(tǒng)。1 總體設(shè)計(jì)1.1 課題背景隨著科學(xué)技術(shù)的飛速發(fā)展,過程控制領(lǐng)域在過去的兩個(gè)世紀(jì)里發(fā)生了巨大的變革。19世紀(jì)60年代出現(xiàn)的基于513psi的氣動(dòng)信號(hào)標(biāo)準(zhǔn),標(biāo)志著控制理論初步形成,20世紀(jì)

9、50年代,隨著基于420mA或010mA的電流模擬信號(hào)的模擬過程控制體系被提出被得到廣泛的應(yīng)用,標(biāo)志著電氣自動(dòng)控制時(shí)代的到來,20世紀(jì)70年代,隨著數(shù)字計(jì)算機(jī)的介入,產(chǎn)生了“集中控制”的中央控制計(jì)算機(jī)系統(tǒng),不久后伴隨著“集中控制”的北人們發(fā)現(xiàn),該系統(tǒng)存在著可靠性低、易失控等缺點(diǎn),很快就將其發(fā)展為分布式控制系統(tǒng);隨著快速發(fā)展的微處理器被廣泛的應(yīng)用,數(shù)字化通信網(wǎng)絡(luò)被延伸到工業(yè)過程現(xiàn)場成為可能,也就產(chǎn)生了以微處理器為核心,使用集成電路代替常規(guī)電子線路,實(shí)施信息采集、處理、顯示、傳輸以及優(yōu)化控制等功能的智能設(shè)備。設(shè)備之間彼此控制、通信,在精度、可靠性以及可維護(hù)性、可操作性等都有更高的要求。因此,現(xiàn)場總

10、線的產(chǎn)生成為了必然?,F(xiàn)場總線是應(yīng)用在生產(chǎn)最底層的一種總線型拓?fù)涞木W(wǎng)絡(luò),是用作現(xiàn)場控制系統(tǒng)的、直接與所有受控節(jié)點(diǎn)串行相連的通信網(wǎng)絡(luò)。受控設(shè)備和網(wǎng)絡(luò)所處的環(huán)境可能很特殊,對(duì)信號(hào)的干擾往往是多方面的,這就要求控制必須是實(shí)時(shí)性很強(qiáng)。在20世紀(jì)80年代初,工程人員開始討論現(xiàn)有的總線系統(tǒng)運(yùn)用于轎車的可能性。1986年2月在SAE大會(huì)上,博世公司提出了CAN,稱為“Automotive SerialController Area Network”。而今幾乎在歐洲誕生的每一輛新轎車都裝配有一個(gè)或多個(gè)CAN網(wǎng)絡(luò)系統(tǒng)。CAN網(wǎng)絡(luò)系統(tǒng)也應(yīng)用在了從火車到輪船等其他類型的運(yùn)輸工具上,以及工業(yè)控制方面 。僅1999年,就

11、有近六千萬個(gè)CAN控制器投入使用,2000年這個(gè)數(shù)字達(dá)到一億。1.2 開發(fā)意義由于CAN總線具有多主方式工作、非破壞總線仲裁、直接通訊距離遠(yuǎn)、通信介質(zhì)靈活、性價(jià)比高等特點(diǎn),它的應(yīng)用范圍現(xiàn)在已不再局限于汽車行業(yè),而已經(jīng)擴(kuò)展到了機(jī)械工業(yè)、農(nóng)業(yè)機(jī)械、紡織機(jī)械、數(shù)控機(jī)床、機(jī)器人、家用電器等行業(yè)領(lǐng)域。CAN總線已經(jīng)形成了國際標(biāo)準(zhǔn),并且被公認(rèn)為其中最有前途的現(xiàn)場總線之一。對(duì)于CAN總線的開發(fā)具有重要的現(xiàn)實(shí)意義。1.3 課題完成功能利用P89C51單片機(jī)、和SJA1000CAN控制器設(shè)計(jì)開發(fā)智能溫度節(jié)點(diǎn),實(shí)時(shí)上傳測量的溫度并顯示,接收命令來控制溫度。 2 系統(tǒng)硬件設(shè)計(jì)2.1 系統(tǒng)總圖 上位機(jī)電平轉(zhuǎn)換收發(fā)主節(jié)

12、點(diǎn)溫度節(jié)點(diǎn)控制節(jié)點(diǎn)RS232總線CAN總線圖2.1-1 系統(tǒng)總圖2.2 硬件電路圖5、7、8、12本文中所設(shè)計(jì)的CAN總線系統(tǒng)智能節(jié)點(diǎn)是以89C51作為節(jié)點(diǎn)的微處理器在CAN總線通信接口中采用PHILIPS公司的SJA1000和隔離CAN收發(fā)器模塊。SJA1000是獨(dú)立CAN, CTM系列模塊是集成電氣隔離、電源隔離、CAN收發(fā)器,CAN總線保護(hù)于一體的隔離CAN收發(fā)器模塊。如圖所示,CAN總線系統(tǒng)智能節(jié)點(diǎn)硬件電路主要由四部分所構(gòu)成微控制器89C51,獨(dú)立CAN 通信控制器SJA1000 CAN,隔離CAN收發(fā)器模塊和DS18B20數(shù)字溫度傳感器。89C51負(fù)責(zé)SJA1000的初始化且通過控制

13、SJA1000實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收等通信任務(wù)。SJA1000的AD0AD7連接到89C51的P0口,CS接高,CPU通過這些地址可對(duì)SJA1000執(zhí)行相應(yīng)的讀寫操作。SJA1000的INT接89C51的INT0 ,89C51也可通過中斷方式訪問SJA1000。89C51的P3.0接LED,作為繼電器的狀態(tài)顯示。P3.1接繼電器,控制電阻絲的通斷,來控溫。89C51的P0為數(shù)碼管的斷碼,P2為位碼。顯示實(shí)時(shí)測量溫度和控溫點(diǎn),各為兩位數(shù)。CTM系列模塊是集成電氣隔離、電源隔離、CAN收發(fā)器,CAN總線保護(hù)于一體的隔離CAN收發(fā)器模塊,該模塊RXD、TXD引腳兼容+3.3V、及+5V的CAN控制器,

14、不需要外接其他元器件,直接將+3.3V或+5V的CAN控制器發(fā)送、接收引腳與CTM模塊的發(fā)送、接收引腳相連接.圖2.2-1 硬件電路圖3 系統(tǒng)各模塊介紹3.1 P89C51單片機(jī)1 、2、6、9P89C51是PHILIPS半導(dǎo)體公司生產(chǎn)的低電壓 、高性能CMOS、8位單片機(jī),片內(nèi)含有4kbytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器(ROM)和128 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM ),器件采用PHILIPS半導(dǎo)體公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),它兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash存儲(chǔ)單元,功能強(qiáng)大的P89C51單片機(jī)可為您提供許多高性價(jià)

15、比的應(yīng)用場合,靈活應(yīng)用于各種控制領(lǐng)域。 功能特性概述P89C51提供4k字節(jié)Flash閃速存儲(chǔ)器、128字節(jié)內(nèi)RAM,它有32個(gè)I/O口線,兩個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)5向量兩級(jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),P89C51可降至OHz的靜態(tài)邏輯操作,并且支持兩種軟件可選的節(jié)電工作模式。其空閑方式停止CPU的工作,但允許RAM、定時(shí)/計(jì)數(shù)器、串行通信口及中斷系統(tǒng)繼續(xù)工作。在掉電方式保存RAM 中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到下一個(gè)硬件復(fù)位。3.1.2 引腳功能說明圖3.1.2-1 幾腳功能圖引腳功能說明P0口:PO口是一組8位漏極開路型雙向I/0口

16、,也即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口用時(shí),每位能吸收電流的方式驅(qū)動(dòng)8個(gè)TTL邏輯門電路,對(duì)端口寫”1”可作為高阻抗輸入端用。Pl口:P1是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。P2口:P2是一個(gè)帶有內(nèi)部上拉電阻的8位雙向I/O口,P2的輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。P3口除了作為一般的I/0口線外,更重要的用途是它的第二功能,如下表所示:表-1 第二功能端口引腳第二功能P3.0串行輸入口P3.1串行輸出口P3.2外中斷0P3.3外中斷1P3.4定時(shí)/計(jì)數(shù)器0P3.5定時(shí)/計(jì)數(shù)器1P3.6外部數(shù)據(jù)存儲(chǔ)器寫選

17、通P3.7外部數(shù)據(jù)存儲(chǔ)器讀選通P3口還接收一些用于FLASH閃速存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。XTAL1:振蕩器反相放大器的及內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL2:振蕩器反相放大器的輸出端。3.2 CAN控制器SJA10003 、10、12SJA1000是一獨(dú)立的CAN控制器,它主要用于一般工業(yè)環(huán)境中的區(qū)域網(wǎng)絡(luò)控制和移動(dòng)目標(biāo)。它是美國PHILIPS半導(dǎo)體公司PCA82C200 CAN控制器的替代產(chǎn)品,而且它增加的是一種新的操作模式PeliCAN,這種模式支持CAN2.0B協(xié)議。 主要性能特點(diǎn)SJA1000的主要性能特點(diǎn)如下:引腳可以與PCA82C200獨(dú)立CAN控制器兼容電器特性可以與PCA8

18、2C200獨(dú)立CAN控制器兼容以有擴(kuò)展的接收緩沖器64字節(jié),先進(jìn)先出(FIFO)。它支持CAN2.0A/B協(xié)議它支持29位和11位標(biāo)識(shí)碼 其通信位速率可達(dá)1Mbps其驗(yàn)收濾波器的擴(kuò)展時(shí)鐘頻率是24MHz可以與不同的微處理器接口有可編程的CAN輸出驅(qū)動(dòng)器配置等。3.2.2 SJA1000引腳功能說明圖3.2.2-1 SJA1000引腳表3.2.2-2 SJA1000引腳功能符 號(hào)引 腳功 能AD0 AD72,1,28 23地址/數(shù)據(jù)復(fù)用總線ALE3ALE 信號(hào)INTEL 方式或AS 信號(hào)Motorola 方式/CS4片選輸入低電平允許訪問SJA1000/RD5微控制器的讀信號(hào)Intel 方式或E

19、 信號(hào)Motorola 式/WR6微控制器的寫信號(hào)Intel 方式或讀寫信號(hào)Motorola 方式CLKOUT7SJA1000 產(chǎn)生的提供給微控制器的時(shí)鐘輸出信號(hào)此信號(hào)由內(nèi)部振蕩器經(jīng)可編程分頻器得到可編程禁止該引腳VSS18邏輯電路地XTAL19振蕩放大器輸入外部振蕩放大器信號(hào)經(jīng)此引腳輸入XTAL210振蕩放大器輸出使用外部振蕩信號(hào)時(shí)此引腳必須開路MODE11方式選擇輸入端1=Intel 方式0=Motorola 方式VDD312輸出驅(qū)動(dòng)器5V 電源TX013由輸出驅(qū)動(dòng)器0 至物理總線的輸出端TX114由輸出驅(qū)動(dòng)器1 至物理總線的輸出端VSS315輸出驅(qū)動(dòng)器地/INT16中斷輸出端用于向微控制

20、器提供中斷信號(hào)/RST17復(fù)位輸入端用于重新啟動(dòng)CAN 接口低電平有效VDD218輸入比較器5V 電源RX0 RX119 20由物理總線至SJA1000輸入比較器的輸入端顯性電平將喚醒處于睡眠方式的SJA1000 當(dāng)RX0高于RX1時(shí)讀出為隱性電平否則為顯性電平VSS221輸入比較器地VDD122邏輯電路5V 電源 SJA1000的內(nèi)部結(jié)構(gòu)方框圖圖3.2.3-1 SJA1000的內(nèi)部結(jié)構(gòu)方框圖3.3 隔離CAN收發(fā)器模塊(CTM Module)3CTM系列模塊是集成電氣隔離、電源隔離、CAN收發(fā)器和CAN總線保護(hù)于一體的隔離CAN收發(fā)器模塊,該模塊RXD、TXD引腳兼容+5V、及+3.3V的C

21、AN控制器,而不需要外接其他元器件,直接將+5V或+3.3V的CAN控制器接收、發(fā)送引腳與CTM模塊的接收、發(fā)送引腳相連接!如圖所示為PHILIPS與CTM1050的SJA1000連接原理圖,其電路采用了隔離CAN收發(fā)器模塊,有了隔離CAN收發(fā)器,就可以很好地實(shí)現(xiàn)CAN-bus總線上各節(jié)點(diǎn)電源、電氣之間完全獨(dú)立和隔離,提高了節(jié)點(diǎn)的安全性和穩(wěn)定性。4 系統(tǒng)軟件設(shè)計(jì)4.1 軟件流程圖圖4.1-1 軟件流程圖1總流程:當(dāng)開始工作時(shí),首先CPU初始化,然后CAN控制器SJA1000初始化,得到最初的溫度值,通過數(shù)碼管顯示。當(dāng)還沒有到設(shè)定的時(shí)間段而且沒有中斷時(shí),就通過數(shù)碼管繼續(xù)顯示原來的溫度。當(dāng)?shù)搅嗽O(shè)定

22、的時(shí)間段則發(fā)送一個(gè)最新的實(shí)際溫度值,在沒有中斷的條件下通過數(shù)碼管顯示最新的實(shí)際溫度。當(dāng)有中斷時(shí)就接受命令再通過數(shù)碼管顯示。圖4.1-1 軟件流程圖2SJA1000初始化:當(dāng)開始時(shí),首先CAN控制器SJA1000進(jìn)入復(fù)位模式,選擇PeliCAN模式,開放中斷,再設(shè)置驗(yàn)收代碼寄存器和驗(yàn)收屏蔽寄存器并設(shè)置總線定時(shí)器400Kbps波特率和輸出控制寄存器為正常輸出,然后返回工作狀態(tài),SJA1000就初始化完了。圖4.1-1 軟件流程圖3SJA1000發(fā)送:當(dāng)開始時(shí),首先讀入SJA1000狀態(tài),然后判斷是否正在接收?不是則再進(jìn)入讀入SJA1000狀態(tài);是則等待,待接收完成后繼續(xù)判斷是否先前發(fā)送是否成功?不

23、是則再進(jìn)入讀入SJA1000狀態(tài),是則等待,然后判斷發(fā)送緩沖器是否鎖定?不是則要設(shè)置TX標(biāo)準(zhǔn)幀報(bào)文,再設(shè)置ID數(shù)據(jù)報(bào),再裝入實(shí)際溫度值,然后啟動(dòng)發(fā)送,最后返回。圖4.1-1 軟件流程圖4SJA1000接收:當(dāng)開始時(shí),首先讀入SJA1000狀態(tài),然后判斷總線關(guān)閉、錯(cuò)誤狀態(tài)、溢出是否有數(shù)據(jù)?不是則返回;是則繼續(xù)判斷總線是否關(guān)閉?是則清除中斷位并恢復(fù)總線,不是或已經(jīng)恢復(fù)了總線則繼續(xù)判斷數(shù)據(jù)是否溢出?是則清除數(shù)據(jù)溢出和釋放接收緩沖區(qū),不是或已經(jīng)清除數(shù)據(jù)溢出和釋放接收緩沖區(qū)則繼續(xù)判斷是否有數(shù)據(jù)?是則接收數(shù)據(jù)并做處理開斷繼電器,再釋放接收緩沖區(qū),然后釋放仲裁丟失捕捉寄存器,最后釋放錯(cuò)誤丟失捕捉寄存器,再返

24、回;不是則直接返回。4.2 Kile編譯平臺(tái)界面圖4.2-1 Kile編譯平臺(tái)界面4.3 系統(tǒng)程序清單4 、10CAN總線節(jié)點(diǎn)的軟件設(shè)計(jì)包括主要三大部分:CAN節(jié)點(diǎn)的初始化和報(bào)文發(fā)送以及報(bào)文接收。熟悉了這三部分程序的設(shè)計(jì)就能編寫出利用CAN總線進(jìn)行通信的一般應(yīng)用程序,當(dāng)然要將CAN總線應(yīng)用于通信任務(wù)比較復(fù)雜的系統(tǒng)中還需詳細(xì)了解有關(guān)CAN總線錯(cuò)誤處理總線脫離處理接收濾波處理波特率參數(shù)設(shè)置和自動(dòng)檢測以及CAN總線通信距離和節(jié)點(diǎn)數(shù)的計(jì)算等方面的內(nèi)容。程序用語言編寫,簡潔明了且有詳細(xì)的注釋,并寫成頭文件的形式,可移植更強(qiáng)。 主程序包括定時(shí)發(fā)送、中斷接收、溫度顯示。5 小結(jié)經(jīng)過半年多的努力終于完成畢業(yè)設(shè)

25、計(jì),通過這次畢業(yè)設(shè)計(jì)我學(xué)習(xí)到了許多以前學(xué)習(xí)不到或是沒去學(xué)習(xí)的知識(shí),了解到了一些當(dāng)前的國際科技情形,同時(shí)提升了自己個(gè)人單獨(dú)面臨和處理問題的能力。但由于經(jīng)驗(yàn)匱乏,難免有許多考慮不周全的地方,如果沒有導(dǎo)師的指導(dǎo)和同學(xué)的關(guān)心與幫助,想要完成這個(gè)設(shè)計(jì)是難以想象的。在這里首先要感謝我的導(dǎo)師王維博教授。他平日里工作繁多,但在我做畢業(yè)設(shè)計(jì)的每個(gè)階段,從需求分析到查閱資料,設(shè)計(jì)草案的確定和修改,中期檢查,后期詳細(xì)設(shè)計(jì),設(shè)計(jì)電路等整個(gè)過程中都給予了我悉心的指導(dǎo)。我的設(shè)計(jì)比較復(fù)雜煩瑣,但是王教授仍然細(xì)心地糾正設(shè)計(jì)過程中的錯(cuò)誤。通過這次畢業(yè)設(shè)計(jì)我認(rèn)識(shí)到不論課本理論知識(shí)學(xué)得多好,沒有通過自己動(dòng)手將知識(shí)應(yīng)用到生活中,那么

26、一切都如紙上談兵,都是空的。學(xué)習(xí)知識(shí)和將其應(yīng)用到生活中是相輔相成的,只有學(xué)以致用才能使自己不斷提高,才能成為有用的人。在這里我要特別感謝大學(xué)四年來教導(dǎo)我們的所有的老師,他們?yōu)槲覀兇蛳铝俗詣?dòng)化專業(yè)知識(shí)的基礎(chǔ);包括實(shí)驗(yàn)中心的各位老師,讓我們鍛煉了動(dòng)手能力,讓理論在實(shí)踐中得到了升華,讓我們的能力有了很大的提高;同時(shí)還要感謝所有的同學(xué),正是因?yàn)橛辛怂麄兊闹С趾蛶椭?,此次畢業(yè)設(shè)計(jì)才會(huì)順利完成。同時(shí),真誠的感謝學(xué)院四年來對(duì)我的支持、關(guān)心和鼓勵(lì),使我能夠順利的完成學(xué)業(yè)!附錄:主程序: 包括定時(shí)發(fā)送、中斷接收、溫度顯示。/*頭文件*/#include "reg51.h"#include&q

27、uot;intrins.h"#include"absacc.h"#include "sja1000reg.h"#include "sja1000.h"#include "ds18b20.h"/*數(shù)據(jù)類型*/#define uchar unsigned char#define uint unsigned int/*管腳定義*/#define SEG_WORDPORT P1/段碼#define SEG_DIGPORT P2/位碼uchar code Seg_Code10=0xc0,0xf9,0xa4,0xb0

28、,0x99,0x92,0x82,0xf8,0x80,0x90;/*函數(shù)聲明*/void Cpu_Init(void);void Display_Seg(uchar wd_h,uchar wd_l);/*主程序*/main()uchar *Tempcode;Delay(0,0);/0.524sDelay(0,0);/0.524s/復(fù)位后延時(shí)等待系統(tǒng)外圍復(fù)位完成Cpu_Init();/CPU初始化Sja1000_Init();/SJA1000初始化DQ=0; /DS18B20開始工作while(1)Tempcode=DS18B20_RdTemp(); /讀溫度值Display_Seg(*(Temp

29、code+1),*Tempcode);/顯示/*CPU初始化*/void Cpu_Init()EA=0;IT0=1; EX0=1;/開外部中斷0TMOD=0X01; ET0=1; /開定時(shí)中斷0TH0=0X3C; TL0=0XB0;/方式1,50ms定時(shí)TR0=1;EA=1;/開總中斷LED=0; /led亮SW_JDQ=1;/繼電器開,加熱/*數(shù)碼管顯示*/void Display_Seg(uchar wd_h,uchar wd_l)uchar buf4;/顯示單元uchar i;uchar dig=0x01;wd=(wd_h&0x07)*16+(wd_l&0xf0)>

30、>4);/溫度值if(wd!=85)/屏蔽85度,因開機(jī)為85?buf3=Seg_Codekw&0xf0;/控制溫度的十位buf2=Seg_Codekw&0x0f;/控制溫度的個(gè)位buf1=Seg_Codewd/10%10;/測量溫度的十位buf0=Seg_Codewd%10;/測量溫度的個(gè)位for(i=0;i<4;i+)/4個(gè)數(shù)碼管SEG_WORDPORT=0xff;/清屏SEG_DIGPORT=dig<<i;/位碼SEG_WORDPORT=bufi;/段碼Delay(50,125);/延時(shí) /*外部0中斷*/void int0()interrupt

31、0/接收中斷Sja1000_RX();/SJA1000接收/*定時(shí)0中斷*/void time0() interrupt 1 /定時(shí)發(fā)送uchar n;TR0=0;TH0=0X3C; TL0=0XB0;TR0=1;n+;if(n=20)/1sn=0;Sja1000_TX();/SJA1000發(fā)送sja1000reg.h頭文件用偽指令“define”來定義外部地址。/*PeliCAN模式SJA1000的內(nèi)部寄存器地址的定義*/#define SJA_ADR 0X0000/片選直接接高#define MODE XBYTESJA_ADR+00/模式寄存器#define CMR XBYTESJA_AD

32、R+01/命令寄存器#define SR XBYTESJA_ADR+02/狀態(tài)寄存器#define IR XBYTESJA_ADR+03/中斷寄存器#define IER XBYTESJA_ADR+04/中斷使能寄存器#define BTR0 XBYTESJA_ADR+06/時(shí)序寄存器0#define BTR1 XBYTESJA_ADR+07/時(shí)序寄存器1#define OCR XBYTESJA_ADR+08/輸出控制寄存器#define TEST XBYTESJA_ADR+09/測試寄存器#define ALC XBYTESJA_ADR+11/仲裁丟失捕捉寄存器#define ECC XBY

33、TESJA_ADR+12/錯(cuò)誤代碼捕捉寄存器#define ELWR XBYTESJA_ADR+13/錯(cuò)誤報(bào)警限額寄存器#define RXERR XBYTESJA_ADR+14/RX錯(cuò)誤計(jì)數(shù)器#define TXERR XBYTESJA_ADR+15/TX錯(cuò)誤計(jì)數(shù)器/#define TXB XBYTESJA_ADR+16/報(bào)文發(fā)送緩沖區(qū)(操作模式下)/#define RXB XBYTESJA_ADR+16/報(bào)文接收緩沖區(qū)(操作模式下)#define TXSFFXBYTESJA_ADR+16/TX標(biāo)準(zhǔn)幀報(bào)文緩沖區(qū)(操作模式下)#define TXID1XBYTESJA_ADR+17/TX ID

34、1(操作模式下)#define TXID2XBYTESJA_ADR+18/TX ID2(操作模式下)#define TXDATA1XBYTESJA_ADR+19/TX DATA1(操作模式下)#define RXDATA1XBYTESJA_ADR+19/RX DATA1(操作模式下)#define ACR0 XBYTESJA_ADR+16/驗(yàn)收代碼寄存器(復(fù)位模式下)#define ACR1 XBYTESJA_ADR+17/驗(yàn)收代碼寄存器(復(fù)位模式下)#define AMR0 XBYTESJA_ADR+20/驗(yàn)收屏蔽寄存器#define AMR1 XBYTESJA_ADR+21/驗(yàn)收屏蔽寄存器

35、/#define RBSA XBYTESJA_ADR+30/RX緩沖區(qū)起始地址/?作用#define CDR XBYTESJA_ADR+31/時(shí)鐘分頻器#define ID 0x01/本機(jī)ID號(hào)#define TOID 0x00/上位機(jī)ID號(hào)sja1000.h頭文件包括SJA1000初始化、接收和發(fā)送子程序。只有在復(fù)位模式下SJA1000才可以進(jìn)行初始化,主要包括工作方式的設(shè)置、接收屏蔽寄存器AMR、接收濾波方式的設(shè)置和接收代碼寄存器ACR的設(shè)置、中斷允許寄存器IER的設(shè)置和波特率參數(shù)設(shè)置等。在完成了SJA1000的初始化設(shè)置以后,SJA1000就可以回到工作狀態(tài)進(jìn)行正常的通信任務(wù)。負(fù)責(zé)節(jié)點(diǎn)報(bào)

36、文的發(fā)送是發(fā)送子程序。發(fā)送時(shí)用戶只需要將待發(fā)送的數(shù)據(jù)按特定格式組合成一幀報(bào)文送入SJA1000發(fā)送緩存區(qū)中,然后啟動(dòng)SJA1000發(fā)送就可以了。當(dāng)然必須先作一些判斷才往SJA1000發(fā)送緩存區(qū)送報(bào)文。接收子程序負(fù)責(zé)節(jié)點(diǎn)報(bào)文的接收以及其它情況處理。發(fā)送子程序比接收子程序要簡單一些,因?yàn)樵谔幚斫邮請?bào)文的過程中要同時(shí)對(duì)諸如總線脫離錯(cuò)誤報(bào)警接收溢出等情況進(jìn)行處理。本程序用的是斷接收方式,因這樣通信的實(shí)時(shí)性強(qiáng)。/*數(shù)據(jù)類型*/#define uchar unsigned char#define uint unsigned int/*定義*/sbit LED=P30;/(常斷)繼電器狀態(tài)標(biāo)志,低電平點(diǎn)亮L

37、EDsbit SW_JDQ=P31;/(常斷)繼電器uchar wd;/測量的溫度uchar kw;/控溫點(diǎn)/*sja1000初始化*/Sja1000_Init()uchar i;MODE=0X09;/設(shè)置方式寄存器,進(jìn)入復(fù)位模式CDR=0X88;/設(shè)置時(shí)鐘分頻寄存器,選擇PeliCAN模式關(guān)閉時(shí)鐘輸出(CLKOUT)IER=0X0D;/設(shè)置中斷允許寄存器,開放(放送,溢出,錯(cuò)誤警告)中斷ACR0=0X00;/設(shè)置驗(yàn)收代碼寄存器,ACR1=ID<<5;/本機(jī)號(hào)為01AMR0=0X00;/設(shè)置驗(yàn)收屏蔽寄存器AMR1=0X00;/不屏蔽BTR0=0X00;/設(shè)置總線定時(shí)器0BTR1=0

38、X1B;/設(shè)置總線定時(shí)器1,12MHz,400Kbps/?OCR=0XAA;/設(shè)置輸出控制寄存器,正常輸出/?/RBSA=0X00;/設(shè)置接收緩存器FIFO起始地址為0/作用 TXERR=0X00;/寫指令清除發(fā)送錯(cuò)誤計(jì)數(shù)寄存器i=ECC;/讀指令清除錯(cuò)誤代碼捕捉寄存器MODE=0X08;/設(shè)置單濾波方式,并返回工作狀態(tài)/*sja1000發(fā)送程序*/Sja1000_TX()uchar ss;doss=SR;/讀入SJA1000狀態(tài)while(ss&0x10);/判是否正在接收,是則等待doss=SR;/讀入SJA1000狀態(tài)while(!(ss&0x08);/判先前發(fā)送是否成功

39、,否則等待doss=SR;/讀入SJA1000狀態(tài)while(!(ss&0x04);/判發(fā)送緩沖器是否鎖定,是則等待TXSFF=0x01;/設(shè)置TX標(biāo)準(zhǔn)幀報(bào)文, FF=0,RTR=0,DLC=0X01(數(shù)據(jù)長度)TXID1=0x00;/TXID2=TOID<<5;/目標(biāo)機(jī)號(hào)為00TXDATA1=wd;/發(fā)送實(shí)際溫度值CMR=0X01;/設(shè)置命令寄存器為啟動(dòng)發(fā)送/*sja1000中斷接收程序*/Sja1000_RX()uchar ss;uchar buf_RX;ss=SR;/讀入SJA1000狀態(tài)ss&=0xc3;/取總線關(guān)閉,錯(cuò)誤狀態(tài),溢出,有數(shù)據(jù)if(ss)/無上

40、述狀態(tài),則直接返回if(ss&0x80)/總線關(guān)閉ss=IR;/讀中斷寄存器以清除中斷位MODE=0X08;/恢復(fù)總線/?else ss=IR;/讀中斷寄存器以清除中斷位if(ss&0x08)/數(shù)據(jù)溢出CMR=0X0C;/清除數(shù)據(jù)溢出和釋放接收緩沖區(qū)elseif(ss&0x01)/接收緩沖區(qū)有數(shù)據(jù)buf_RX=RXDATA1;/接收數(shù)據(jù),為繼電器(開/斷)控溫命令if(buf_RX=0xbb)LED=1;/led滅SW_JDQ=0;/繼電器斷開else if(buf_RX=0xdd)LED=1;/led亮SW_JDQ=0;/繼電器閉合else if( (buf_RX&l

41、t;100) && (buf_RX>0) )/控溫點(diǎn)為199度kw=buf_RX;CMR=0X04;/設(shè)置命令寄存器為釋放接收緩沖區(qū)ss=ALC;/讀操作以釋放仲裁丟失捕捉寄存器ss=ECC;/讀操作以釋放錯(cuò)誤丟失捕捉寄存器 ds18b20.h頭文件DS18B20為數(shù)字溫度傳感器,它是眾多傳感器中比較好用的之一,但它須很嚴(yán)格的時(shí)序,故運(yùn)行此驅(qū)動(dòng)程序時(shí)須關(guān)中斷,這里沒必要。/*管腳定義*/sbit DQ = P37; /data for DS18B20void Delay(uchar t1,uchar t2) for(;t1>0;t1-) for(;t2>0;t2-);DS18B20_Reset(void) DQ = 0; / DQ 低電平 Delay(1,65); / 480us>>960us DQ = 1; / DQ 高電平 Delay(1,2); / 等待15us>>60us while(DQ); while(DQ); Delay(1,5); /從1-wire 總線上讀取一個(gè)字節(jié)uchar DS18B20_Read_byte(void) uchar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論