CAN总线应用.doc

上传人:scccc 文档编号:13780873 上传时间:2022-01-23 格式:DOC 页数:23 大小:918.50KB
返回 下载 相关 举报
CAN总线应用.doc_第1页
第1页 / 共23页
CAN总线应用.doc_第2页
第2页 / 共23页
CAN总线应用.doc_第3页
第3页 / 共23页
CAN总线应用.doc_第4页
第4页 / 共23页
CAN总线应用.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《CAN总线应用.doc》由会员分享,可在线阅读,更多相关《CAN总线应用.doc(23页珍藏版)》请在三一文库上搜索。

1、设计(论文:题目: 基于CAN总线的楼宇温度检测系统、八 、,刖言基于单片机实现传统温度检测技术的特点,提出了基于CAN总线的楼宇温度检测系统方案。该系统方案的硬件平台主要包括温度检测模块和主控平台,并详细介绍了其硬件实现、软件设计思想及流程。实验表明:该系统可实现对楼宇 温度的实时检测,并由数码管显示检测结果,对异常情况进行处理,从而实现对 楼宇房间温度的有效检测。在传统的检测技术中,温度检测基本采用单片机系统为主,且大多数都针对 工业需要,日常生活中的应用并不多;而通信多基于落后的485总线,不能进行 远距离的实时数据传输,更不能与因特网相连,可靠性也不高。因此,本文提出 一种基于CAN总

2、线的温度测控技术,该技术适合远距离控制与传输,具有非常 高的可靠性。控制器局域网(Controller Area Network,CAN )是国际上应用最广泛的现 场总线之一。CAN总线最早出现在20世纪80年代末的汽车工业中,由德国 BOSCH公司最先提出,其主要特性为低成本,且总线利用率高。CAN采用串行 通信方式工作,所提供的最高数据传输速率为1Mbit/s,最大通信距离为10km。CAN还具有可靠的错误处理和检错机制,极强的错误检测能力,发送信息遭到 破坏后可自动重发;可在高噪声的干扰环境中只用,能够检测出产生的任何错误, 当数据的传输距离达到10km时,CAN仍能提供5kbit/s的

3、数据传输速率。正是基于CAN总线的上述优点,目前 CAN总线在众多领域被广泛应用, 其应用范围不再局限于原先的汽车行业,而向过程工业、机械工业、纺织工业、 数控机床、医疗器械及传感器等领域发展,CAN总线已经形成国际标准,并已被公认为是几种最有前途的现场总线之一。考虑到CAN总线的高可靠性和远距离传输优点,结合目前温度检测技术的 技术瓶颈,即距离短和实时性差的特点,本系统CAN总线应用于传统的温度检测中,也是一种新的尝试。1基于CAN总线楼宇温度检测系统的实现本设计的总体方案如图1所示,有主控平台、报警系统、键盘控制、数码管 显示、温度检测模块即电源接口电路等部分组成。 主控平台的主要功能是连

4、接和图2系统结构1.1温度检测节点的硬件设计温度检测模块是本方案的核心模块,该模块的技术关键在于温度检测节点的 设计。其每个检测节点主要包快CAN总线接口、控制模块和温度传感器图3温度检测模块的检测模块图3中DS18B20为数字温度传感器,主要用于组网温度测量,它是l-Wire总线通信协议数字式温度传感器,测温范围为-55+125C,分辨率05C。SJA1000控制器是PHILIPS公司生产的符合CAN2.0B协议的协议转换器。TJA1050是 CAN协议控制器的物理总线之间的接口, 对总线提供差动发送能力,对CAN控 制器提供差动接受能力,使用 TJA1050可以增大通信距离、提高系统的瞬间

5、抗 干扰能力、保护总线及降低射频干扰。光耦则是高速光电隔离器件,使用已经非 常普遍。1.2主控平台设计系统中的主控平台主要完成人机对话和系统管理功能, 如各温度检测点的温 度上下限设定,对由温度检测模块采集的温度进行数据库管理,实现温度的实时图4主控平台原理图图4中的键盘驱动,数码管显示及报警部分均有成熟的电路可用选用,核心PC机可以采用单片机AT89S51。2软件设计2.1主控台软件设计主控台软件分为初始化和主调度。初始化部分仅在上电启动或复位时运 行;主调度主要包括CAN信息帧处理、键盘按键处理、显示处理和警报、 数据和时间处理、中断控制等部分。软件框图如图5所示。图5主控机软件框图主调度

6、始终不停地在多个子任务之间巡查和调用。主调度负责管理多个 子任务的运行,巡查各个子任务,当外部事件触发主调度的相关子任务时, 则此子任务被激活,进行子任务处理,否则主调度跳过这一子任务。任何系统在使用之前都要对系统进行初始化,此系统的初始化包括 CAN总线接口的初始化、时钟芯片的初始化等。键盘扫描电路及按键处理 程序则用来实现键盘的输入按键的识别及相关处理。CAN信息帧处理模块主要实现基于CAN总线的控制台和个控制节点间的通讯协议。显示处理和 报警模块则实现将数据和时间处理模块的结果进行数码管显示,并控制报警系统。2.2节点软件设计此系统包含多个节点,分布在各自需要的位置,每个节点都是通过CA

7、N 总线接受主控台控制,处理后得到该节点所控制的每个房间温度极限值。同 时,每个节点配有各自的温度传感器DS18B20,节点系统能够读取该节点的温度值,与该房间的温度极限值进行比较,如果超过极限值则通过控制模 块控制发出相应信号。此信号通过 CAN总线将节点位置和相应温度值送往 主控制台。节点软件框图如图6所示。I测温处 理数据和 时间处 理CAN信 息帧处 理图6节点软件框图2.3 CAN接收与发送数据程序发送数据程序把数据存储区中待发送的数据取出,组成数据帧,然后将数据 帧发送到CAN控制器的发送缓冲区。在接收到发送模块发送请求后,发送程序 启动发送命令。数据从CAN控制器发送到总线是由C

8、AN控制器自动完成的。数据从CAN总线到CAN控制器的接收缓冲区也是由 CAN控制器自动完成 的。接收程序只需从接收缓冲区读取数据, 并将其存储在数据存储区。接收和发 送数据的中断程序流程如图7、图8所示。开始图7接收数据流程图开始图8发送数据流程图3设计原理本系统主要由三部分组成,分布在现场的节点,即温度检测模块;主控台,是所有节点的控制核心;还有就是连接主控台和各个节点通讯的CAN总线。温度检测模块是系统构成的基础与关键, 它直接与温度采集机构相连接,实现对温 度的检测与控制,如温度超限报警等。虽然该模块是系统的一个组成部分,但它 也可以独立工作,即在系统其它部分停止工作的情况下,自动温度

9、测控模块仍可 以独立控制执行机构来实现基本的温度测控功能,提高了系统工作的可靠性。同 时由于系统对主控台的依赖并不是绝对的,因此就降低了各个节点独立工作的风险。这样就算是由于年久失修使总线失去通讯功能时,温度检测模块仍可根据以前的设定对相应事件做出反应。系统工作时,首先主控台将各个温度检测点的温度设定值及极限温度设定值 通过CAN总线发送给相应的温度检测模块,各个节点的温度检测模块将接收到 的各个设定值保存,这样在不更新设置的情况下,温度检测模块可以脱离主控台 而独立工作。各个节点的温度测控模块与主控台之间通过 CAN现场总线通讯。与其它网 络不同,在CAN总线的通信协议中,没有节点地址的概念

10、,也没有任何与节点 地址相关的信息存在,它支持的是基于数据的工作方式。即,CAN总线面向的是数据而不是节点;因此加入或撤销节点设备都不会影响网络的工作,这样的结构十分适用于控制系统要求快速、可靠、简明的特点。同时,CAN总线的直接通讯距离最远可以达到10Km,通过CAN总线中的中继器可以使通讯的距离进 一步延长。本系统使用的温度采集模块是数字温度传感器DS18B20,它的温度测量范围为-55+125C,精度为05C,测量的温度值用912位数字表示,最大转换时 间为750ms,温度超标报警的上、下限值,DS18B20的转换分辨率均可由用户 设定,并能长期保存。 改变了传统温度测量的方法, 能在现

11、场采集温度数据, 并 直接将温度物理量变换为数字信号并以总线方式传送到主控台进行数据处理。 可 应用于各种领域、 各种环境的自动化测试和控制系统, 使用方便灵活, 测试精度 高,优于任何传统的温度数字化、 自动化测控设备。 本系统使用的显示器是数码 管。本系统在设计时主要考虑的是使用 CAN 总线进行主控制台和各个节点之间 通讯控制。因此在设计时使用的报警器只是用简单的蜂鸣器替代, 而在现实应用 中则应选择合适的报警器。 不同的报警器有不同的报警方式, 因人使用的区别而 异。如果要将此系统应用到实际之中, 只需用合适的报警器替代本系统中的蜂鸣 器。实现原理相同,只需稍加改变。显示部分使用的则是

12、人们日常使用的数码管, 它的功耗极低,抗干扰能力强, 因而在低功耗的单片机系统中能够得到广泛的应用。 数码管的显示方法是动态扫 描方式,通过分时轮流控制各个数码管的的 COM 端,就使各个数码管轮流受控 显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms, 由于人的视觉暂留现象及发光二极管的余辉效应, 尽管实际上各位数码管并非同 时点亮, 但只要扫描的速度足够快, 给人的印象就是一组稳定的显示数据, 不会 有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的 I/O 端口。4 结束语楼宇温度检测系统不仅具有基本的温度测控功能,而且通过 CAN 总线将分 布在各处的节点

13、连接起来, 可以在主控台上进行集中监控以及查询和统计等数据 的管理, 具有结构灵活、 集中控制和管理于一体等优点, 克服了人工方式控制精 度差,劳动强度大, 且集中综合管理更加困难等缺点, 降低了各种损耗, 管理手 段实现了现代化。在本设计方案中 硬件电路主 要由微处理 器、 CAN 控制器、温 度芯片 DS18B20、显示数码管、按键键盘、复位电路、蜂鸣器等几部分组成。单片机 AT89S51 是硬件电路的核心, 承担 CAN 控制器的初始化、 数据收发控制等任务; CAN 总线控制器用于同主控台进行远程通讯, 能够独立完成 CAN 总线上数据的 接收和发送工作; DS18B20 芯片用于检测

14、和发送温度数据。温度测控模块是系 统构成的基础与关键,它直接与温度采集机构相连,实现对温度的检测与控制, 如温度超限报警等。基于 CAN 总线的智能测温系统具有测量范围广、精度高、环境适应能力强 等特点。该系统通过 CAN 总线控制器和主控台连接,可以方便地构成分布式测 控系统。 此外,该智能测温系统可以应用于其它远距离分布式控制场合, 而且该 智能测温系统在电力、 油田、楼宇、 冶金等工业自动化领域也具有广泛的应用前 景。在此,需要说明的是本系统测得的温度误差是DS18B20芯片的测量误差及单片机的处理误差, 而系统传输过程中不会增加新的误差, 但有时也有可能由于 CAN 总线协议编写不对,

15、会引起丢失数据现象的情况存在。本系统基本可以实 现对楼宇房间温度的有效检测,达到城市用电高峰时的电能耗主动控制检测。5.1主控台原理图Q B- B. -.E EOH卅卄mtm-j IFi-_-rEr訓P1Al矍】Is QES菩5.2节点原理图I B IsSSSS Srg|E|GiS*Ki4jMR_ri&| C_F|-i_j -!. L_#R-iV V- !-3-S 3 3 13 2S 3 3 37 a y 千1i-ipF為E引总畐E 封食眉雇冏总冏直司 E呂产I胃问SSBBBBBSB sVssVetcI6.1 主控台程序#include IT0 = 1;/脉冲方式触发,外部中断 0#inclu

16、de 负边沿触发#include EX0 = 1;/打开外部中断0void CANnit( void ); /初始化 CAN总EA = 1; /打开总中断线芯片SJA_CS = 1;/CAN总线片选无效 , 保证void CAN_TXD( void );/CAN发送子函数数据线上的变化不会影响 SJA1000void Rxd_deal(void);/接收处理函数/CPU 初始化void Txd_deal(void);/发送处理函数CAN_init( ); /SJA1000初始化,对void Delay(uchar delay_time);/延时子SJA1000寄存器的读写是米用外部寄存器寻函数

17、址方式,所以不需void fasong();/显示子函数void jieshou();/接收显示子函数要程序单独控制片选有效无效void shezhi();/设置子函数_nop_();void bojing();_nop_();sbit keyl = P3A0;while(1)sbit key2 =卩3人1;sbit key3 = P3A3;_nop_();sbit bao = P3A4;_nop_();sbit key4 = P3A5;/显示 /sbit p2 = P2;if(key5=0)sbit p22= P2A2;sbit p24 = P2A4;if( TXD_flag =1 )sbi

18、t key5 = P2A6;Txd_deal();/发送处理程序sbit key6 = P2A7;while(!key5);/按下 5 键,将设置好的数uchar shi=3,ge=0,shezhishi;据发送/CAN_init();fasong();/* 延时 IMS函数 */void delay(uchar x)if(key6=0) uchar i,j;for(i=0;ix;i+)if( RXD_flag )for(j=0;jshezhishi) bao=1;/ 主控台接收到的数据大于设定值, 起 while(!key3) shi=shi+1;/ if(key4=0)while(key4

19、= shi=shi-1;/ if(key2=0)/ if(key3=0) while(!key3) ge=ge+1; / while(key4=ge=ge-1; / elsebao=0;/ 否则,报警器不响void fasong() /显示要发送的温度数值,用数码管动态扫描显示uchar shezhizhi;shezhizhi=shi*10+ge;p2=ledshi;p22=0;p24=1;delay(1);p2=ledge;p22=1;p24=0;delay(1);Txd_data=shezhizhi;void jieshou() /显示接收到的温度数值,用数码管动态扫描显示uchar sh

20、i1,ge1;shi1=Rxd_data%10;ge1 =Rxd_data/10;p2=ledshi1;p22=0;p24=1;delay(1);p2=ledge1;p22=1;p24=0;delay(1);void shezhi() / 设置要发送给节点的门限 值uchar shi=3,ge=0;if(key1=0)/ 对十位数字进行设置if(key3=0)十位数字累加十位数字递减对个位数字进行设置个位数字累加个位数字递减6.2 节点程序/*发送处理函数 *#include #include #include void CANnit( void ); /初始化 CAN总线芯片void CAN

21、_TXD( void );/CAN 发送子函数 void Rxd_deal(void);/接收处理函数void Txd_deal(void);/发送处理函数void Delay(uchar delay_time);/延时子函数void bojing();/ 报警子程序函数sbit DQ=P1A0;sbit bo=P3A4;uchar temp;void main(void)/CPU 初始化开始SJA_RST = 0;Delay(10);SJA_RST = 1;/CAN 总线复位管脚SJA_CS = 0;/CAN 总线片选有效EX1 = 1;/夕卜部中断1使能;CAN总线接收中断IT1 = 0;

22、/低电平触发IT0 = 1;/脉冲方式触发,外部中断 0负边沿触发EX0 = 1;/打开外部中断 0EA = 1; /打开总中断SJA_CS =1;/CAN总线片选无效 , 保证Txd_deal();/发送处理程序if( RXD_flag =1)Rxd_deal();/接收处理程序bojing();void Rxd_deal(void)EA = 0;/关闭CPU中断RXD_flag = 0;Rxd_data = RX_buffer5;EA = 1; void Txd_deal(void)_nop_();TXD_flag = 0;TX_buffer5 = Txd_data;CAN_TXD();n

23、op();_nop_();/ 中断处理程序 / void CAN_RXD( void ) interrupt 2/ 接收数据函数,在中断服务程序中调用uchar data Judge;EA = 0;/ 关 CPU中断 IE0 = 0;数据线上的变化不会影响 SJA1000/CPU 初始化结束CAN_init( ); /SJA1000初始化,对SJA1000寄存器的读写是采用_nop_();/ 外部寄存器寻址方式, 所以 不需要程序单独控制片选有效无效_nop_();while(1)_nop_();_nop_();if( TXD_flag = 1 )Judge = IR;if( Judge &

24、0x01)/IR.0 = 1接收中断RX_buffer0 = RBSR;RX_buffer1 = RBSR1;RX_buffer2 = RBSR2;RX_buffer3 = RBSR3;RX_buffer4 = RBSR4;RX_buffer5 = RBSR5;RX_buffer6 = RBSR6;RX_buffer7 = RBSR7;RX_buffer8 = RBSR8;RX_buffer9 = RBSR9;RX_buffer10 = RBSR10;RX_buffer11 = RBSR11;RX_buffer12 = RBSR12;RXD_flag = 1;/ 置有接收标志 CMR = 0X

25、04;Judge = ALC;/ 释放仲裁随时捕捉寄存器Judge = ECC;/ 释放错误 代码捕捉寄存器IER = 0x01;/ .0=1-接收中断使厶匕能;EA = 1;/打开CPU中断/ 按键中断发送处理 /SJA1000 的初始化 / void CAN_init( void )uchar bdata Judge; uchar ACRR4;uchar AMRR4; ACRR0 = 0x11; ACRR1 = 0x22; ACRR2 = 0x33;ACRR3 = 0x44;/ 节点 1AMRR0 = 0xff;AMRR1 = 0Xff;AMRR2 = 0xff;AMRR3 = 0xff;

26、/ 只接收主机发送的信息 do接收代码寄存器,接收屏蔽寄存器。/ .0=1-resetMODRe入复位模式,以便设置相应的寄存器/ 防止未进入复位模式,重复写入MODR = 0x09;Judge = MODR ;/ 保证在复位模式下操作while( !(Judge & 0x01) );CDR = 0x88;/ 时钟分频 CDR.3=1- 时钟关闭,CDR.7=0-basicCAN,CDR.7=1-Peli CANBTR1 = 0x1c;/16M晶振,波特率BTR0 = 0x03;125KbpsIER = 0x01;/ .0=1- 接收中断使 能; .1=0- 关闭发送中断使能OCR = 0xa

27、a;/ 配置输出控制寄存器CMR =0x04;/ 命令寄存器;释放接收缓冲器ACR = ACRR0;ACR1 = ACRR1;ACR2 = ACRR2;ACR3 = ACRR3;/ 初始化标示码AMR = AMRR0;AMR1 = AMRR1;AMR2 = AMRR2;AMR3 = AMRR3;/ 初始化掩码do/ 回到工作模式MODR = 0x08;Judge = MODR;while( Judge & 0x01 );/CAN 初始化结束 / 发送初始化 /void CAN_TXD( void )uchar data Judge;uchar data TX_buffer N_can ;/ 初

28、始化标示码头信息TX_buffer0 = 0x88;/TX.7=1 扩展 帧; TX.6=0 数据帧; .3=1 数据长度 TX_buffer1 = 0x00;/ 本节点地址 TX_buffer2 = 0x02;TX_buffer3 = 0x03;TX_buffer4 = 0x00;/ 初始化标示码头信息/ 初始化发送数据单元TX_buffer5 = Txd_data;TX_buffer6 = 0x22;TX_buffer7 = 0x33;TX_buffer8 = 0x44;TX_buffer9 = 0x55;TX_buffer10 = 0x66;TX_buffer11 = 0x77;TX_b

29、uffer12 = 0x88;正在发送发送while(delay_time-) void init_com()TMOD=0x20; / 式2TH1=0xfd; /TL1=0xfd;TR1=1;/SM0=0;/设置设置定时器 1 为模装初值设定波特率启动定时器选择串口通信模式SM1=1;PCON=0;void DQ_reset()uchar flag;DQ=1;Delay(1); /1usDQ=0;Delay(480); / 当总线停留在低电平超过 480us/ 总线上所有器件都将被复位线停留在低电平超过480卩s,总线上的所有器件都复位DQ=1;/产生复位脉冲后, 微处理器释放总线 , 让总线

30、处于空闲状态。Delay(5); /释放总线后, 以便从机 18b20 通过拉低总线来指示其是否在线 ,if(DQ=0)flag=1; / elseflag=0; /Delay(150); / 间延时约 150usDQ=1; / 线处于空闲状态检测到 DS18B20没有检测到 DS18B20 存在检测低电平时再次拉高总线, 让总bit DQ_read_bit(void) / 读一位bit dat;DQ=0;/单片机(微处理器)将总线拉低Delay(1); /读时隙起始于微处理/ 初始化数据信息 EA = 0; / 关中断/ 接收状态? doJudge = SR;/ 状态寄存器while( Ju

31、dge & 0x10 ); /SR.4=1 接收等待/ 发送状态? doJudge = SR;while(!(Judge & 0x08); /SR.3=0, 请求未处理完,等待/ 发送缓冲器被锁 doJudge = SR;while(!(Judge & 0x04); /SR.2=0, 缓冲器被锁。等待/TBSR = TX_buffer0;TBSR1 = TX_buffer1;TBSR2 = TX_buffer2;TBSR3 = TX_buffer3;TBSR4 = TX_buffer4;TBSR5 = TX_buffer5;TBSR6 = TX_buffer6;TBSR7 = TX_buffer7;TBSR8 = TX_buffer8;TBSR9 = TX_buffer9;TBSR10 = TX_buffer10;TBSR11 = TX_buffer11;TBSR12 = TX_buffer12;CMR = 0x01;/ 置位发送请求 /P57EA = 1;/delay程序 /void Delay(uchar delay_time)/ 延时程序器将总线拉低至少 1usDQ=1; /拉低 总线后接着释放总线,让从机18b20能够接管总线,输出有效数据

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1