当前位置:首页 >> 信息与通信 >>

基于CAN总线大作业

基于 CAN 总线的楼宇智能环境智能监测系统设计
某楼宇有多个房间(如下图所示) ,其中一个房间可作为集中监 控室,每个房间都安装温度和湿度传感器,并通过 CAN 总线监测到的 温度、湿度信号发送到监控室中的上位机 PC 用于随时监控各房间的 环境状况。

1)

介绍 CAN 总线网络层次结构。
CAN 总线与简单总线逻辑不同,CAN 是一种复杂逻辑的总线结构。参照

ISO/OSI 标准模型,CAN 分为数据链路层和物理层。而数据链路层又包括逻辑 链路子层 LLC (Logic Link Control) 和媒体访问控制子层 MAC (Medium Access Control) 。CAN 的通信参考模型如图一所示。 1. 物理层 在物理层中定义实际信号的传输方法,包括位的编码和解码、位的定时 和同步等内容,作用是定义不同节点之间根据电气属性如何进行位的实际传 输。 在物理连接上, 总线结构提供两个引脚--CANH 和 CANL, CAN 总线通过 CANH 和 CANL 之间的差分电压完成信号的位传输。 2. 逻辑链路子层 LLC 逻辑链路子层 LLC 的主要功能是,对总线上传输的报文实行接收滤波, 判断总线上传输的报文是否与本节点有关,哪些报文应该为本节点接收;对

报文的接收予以确认;为数据传送和远程数据请求提供服务;当丢失仲裁或 被出错干扰时,逻辑链路子层具有自动重发的恢复管理功能等。 3. 媒体访问控制子层 MAC MAC 子层是 CAN 协议的核心。它负责执行总线仲裁、报文成帧、出错检 测、错误标定等传输控制规则。

逻辑链路子层 LLC
接收滤波 超载通州 恢复管理

数据链路层

媒体访问控制层 MAC
数据封装/拆装 帧编码(填充/解除填充) 媒体访问管理 错误检测 出错标定 应答 串行化/解除串行化 位编码/解码 位定时 同步 驱动器/接收器特性 连接器

物理层
图一

CAN 的通信参考模型

2)

介绍 CAN 总线通讯协议的报文格式。

根据 CAN 报文帧的不同用途,可以把 CAN 报文帧划分为以下 4 种类型, 数据帧,远程帧,出错帧,超载帧。 1. 数据帧 数据帧携带数据从发送器至接收器。总线上传输的大多是这种帧,从标 识符长度上,又可以把数据帧分为标准帧(11 位标识符)和扩展帧(29 位标识 符)。 数据帧由 7 个不同的位场组成:帧起始、仲裁场、控制场、数据场、CRC 场、应答场、帧结束。其中,数据场的长度为 0~8 个字节。标识符位于仲裁 场中,报文接收节点通过标识符进行报文滤波。数据帧结构如图二所示。

1

图二 2. 远程帧

数据帧结构

由总线上的节点发出, 用于请求其他节点发送具有同一标识符的数据帧。 当某个节点需要数据时,可以发送远程帧请求另一节点发送相应数据帧。与 数据帧相比,远程帧没有数据场。远程帧结构如图三所示。

图三 3. 出错帧

远程帧结构

任何单元,一旦检测到总线错误就发出错误帧。错误帧由两个不同的场 组成,第一个场是由不同站提供的错误标志的叠加(错误标志),第二个场是 错误界定符。出错帧结构如图四所示。

图四

出错帧结构

2

4. 超载帧 超载帧用于在先行的和后续的数据帧(或远程帧)之间提供附加延时。超 载帧包括两个场:超载标志和超载界定符。超载帧结构如图五所示。

图五

超载帧结构

3)

在总线上传输的报文以帧结构进行传输,与 CAN 总线传输相 关的关键技术术是什么?实现过程是什么?
答:在 CAN 系统中为保证报文传输的正确性,需要对通信过程进行差错

控制。目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发 送端便自动重发,此时的差错控制只需要检错功能。常用的检错码有两类: 奇偶校验码和循环冗余校验码。奇偶校验码是一种最常见的检错码,其实现 方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低, 所以在通信系统中获得了广泛的应用。下面介绍CAN网络中循环冗余校验 码(即 CRC 码)的原理和实现方法。 1、CRC 码检错的工作原理 CRC 码检错是将被处理报文的比特序列当作一个二进制多项式 A(×)的 系数,该系数除以发送方和接收方预先约定好的生成多项式 g(×)后,将求 得的余数 p(×)作为 CRC 校验码附加到原始的报文上,并一起发给接收方。 接收方用同样的 g(×)去除收到的报文 B(×),如果余数等于 p(×),则传输 无误(此时 A(×)和 B(×)相同);否则传输过程中出错,由发送端重发,重新 开始 CRC 校验,直到无误为止。 上述校验过程中有几点需注意:①在进行 CRC 计算时,采用二进制(模 2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异 或运算;②在进行 CRC 计算前先将发送报文所表示的多项式 A(×)乘以×n,

3

其中n为生成多项式 g(×)的最高幂值。对二进制乘法来讲,A(×)·×n 就 是将 A(×)左移n位,用来存放余数(×),所以实际发送的报文就变为A (×)·×n+p(×);③生成多项式 g(×)的首位和最后一位的系数必须为1。 目前已经有多种生成多项式被列入国际标准中,如:CRC-4、CRC-12、 CRC-16、CCITT-16、CRC-32 等。CAN 总线中采用的生成多项式为 g(×)=× 15+×14+×10+×8+×7+x4+×3+1。可以看出,CAN 总线中的 CRC 校验采用 的多项式能够校验七级,比一般 CRC 校验(CRC-4、CRC-12、CRC-16 等)的级 数(二~五级)要高许多,因而它的检错能力很强,误判率极低,成为提高数 据传输质量的有效检错手段。 2、CRC 序列计算方法 多项式 g(×)除法的余数就是发送到总线上的 CRC 序列。为了实现这个 功能,可以使用 15 位的移位寄存器----CRC_RG(14 : 0)。如果 NXTBIT 指示 位流的下一位,那么从帧的起始到数据末尾都由没有填充的位顺序给定。CRC 序列的计算如下: CRC_RG=0; REPEAT CRCNXT = NXTBIT EXOR CRC_RG(14); //异或运算 //初始化移位寄存器

CRC_RG(14 : 1)= CRC_RG(13 : 0); CRC_RG(0)=0; IF CRCNXT THEN

//寄存器左移 1 位

CRC_RG(14 : 0)==CRC_RG(14 : 0)EXOR(H) END IF UNTIL(CRC 序列开始或有一错误条件)

4)

进行测量结点的硬件设计(基于 AT89S51、SJA1000 的 CAN 总 线智能结点的总体设计) 。
SJA1000 在电路中是一个总线接口芯片,通过它实现上位机与现场微处

理器之间的数据通信。该电路的主要功能是通过 CAN 接收来自上位机的数据 进行分析组态然后就传给下位机的控制电路实现控制功能,当 CAN 总线接口 收到下位机上传的数据,SJA1000 就产生一个中断,引发微处理器产生中断,
4

通过中断处理程序接收每一帧信息并通过 CAN 总线上传给上位机进行分析。 AT89S51 是 CAN 总线接口电路的核心,其承担 CAN 控制器的初始化、CAN 的收 发控制等任务。 1、单片机 AT89S51 的选取: 1) 4k Bytes Flash 片内程序存储器; 2)128 bytes 的随机存取数据存储器(RAM) ; 3)32 个外部双向输入/输出(I/O)口; 4)6 个中断源; 5)2 个 16 位可编程定时器/计数器; 6)2 个全双工串行通信口; 7)片内振荡器和时钟电路; 8)全静态工作:0Hz-33MHz; 9)可编程串行通道; 10) 低功耗的闲置和掉电模式。

在设计电路时要注意:①总线两端必须接凉的终端匹配电阻;②SJA1000 的 TX1 引脚的电位必须维持在约 0.5V 上;③将 SJA1000 的 CLOCKOUT 的时钟 信号接至 AT89S51 的时钟电路输入端。 故其中的部分接线按以下说明来接: CAN 总线控制器 SJA1000 AD0~AD7 连接到 AT89S51 的 P0 口,片选段 CS

5

非连接到 AT89S51 的 P2.7,P2.7 为 1 时,CPU 外存储器可选中 SJA1000,CPU 通过这些地址就可对 SJA1000 执行相应的读/写操作。SJA1000 的 RD 非、WR 非、ALE 分别于单片机 AT89S51 对应的引脚相连。由于 SJA1000 是低电平复 位,单片机 AT89S51 是高电平复位,因此两者的复位电路的设计也不同。 SJA1000 的 11 脚接高电平,选择 Intel 的二分频模式。16 脚的中断 INT 非接 到单片机相应的外部中断 0 的输入脚 INT0 非。

5)

进行硬件设计,包括 AT89S51 编程,CAN 通讯协议等(CAN 结 点初始化,报文发送和报文接收三部分的设计作一个描述) 。
1、串口初始化: 1)、确定 T1 的工作方式(方式 2:编程 TMOD=0x20)。 2)、计算 T1 的初值,装载 TH1,TL1(T1:0xFD)。 3)、启动 T1(编程 TCON 中的 TR1 位)。 4)、确定串行口控制(编程 SCON 寄存器); 5)、在中断方式工作时,要进行中断设置(编程 IE,IP 寄存器)。 2、程序 1)、主程序(单片机) #include<reg52.h> Unsigned char has_r,rec_c; Void main() { TMOD=0x20; //设 T1 工作方式位方式 2 TH1=0xFD; TL1=0xFD; TR1=1; //打开 T1 REN=1; //串口允许接收 SM0=0; //设置方式 1 SM1=1; SM2=0; EA=1; //开串行总中断
6

ES=1; //开串行中断 While(1) { if(has_r==1) ES=0; //关串行中断 has_r=0; SBUF=rec_c; while(!TI) TI=0; ES=1; } } Void ser() interrupt 4 //接收中断 { RI=0; //接收中断标志位清 0 Rec_c=SBUF; Has_r=1; //接收完成标志 }

2)、CAN 控制器 SJA1000 的初始化程序 MOV DPTR,#MODE MOV A,#09H MOV @DPTR,A MOV DPTR,#CDR MOV A,#88H MOVX @DPTR,A NOV DPTR,#IFR MOV A,#0DH MOVX @DPTR,A ;中断允许寄存器 ;开放发送中断、溢出中断 ;时钟分频寄存器 ;模式寄存器 ;进入复位模式,对 SJA1000 进行初始化

7

MOV DPTR,#AMR MOV R6,#4 MOV R0,#DAMR AMRINI: MOV A,@R0 MOVX @DPTR,A INC DPTR DJNZ R6,AMRINI MOV DPTR,#ACR MOV R6,#4 MOV R0,#DACR ACRINI: MOV A,@R0 MOVX @DPTR,A INC DPTR DJNZ R6,ACRINI MOV DPTR,#BTR0 MOV A,#03H MOVX @DPTR,A MOV DPTR,#BTR1 MOV A,#0FFH MOVX @DPTR,A MOV DPTR,#0CH MOV A,#0AAH MOVX @DPTR,A MOV A,#0 MOVX @DPTR,A MOV DPTR,#TXERR MOV A,#0 MOVX @DPTR,A MOV DPTR,#ECC

;验收屏蔽寄存器

;验收屏蔽寄存器赋初值

;验收代码寄存器

;验收代码寄存器赋初值

;总线定时寄存器 0

;总线定时寄存器 1 ;设置波特率

;输出控制寄存器

;设置接收缓存器起始地址

;发送错误计数寄存器 ;清除发送错误计数寄存器

;错误代码捕捉寄存器

8

MOVX A,@DPTR MOV DPTR,#MODE MOV A,#08H MOVX @DPTR,A REI

;清除错误代码捕捉寄存器 ;模式寄存器 ;设置单滤波接收方式,并返回

3)、SJA1000 发送程序 Void CanSend (unsigned char * buf DATA; Unsigned char datalen) //Can 设备发送函数 {unsigned int sja_addr; unsigned char j=0,temp; unsigned int n; sja_addr=SJA_EFF; SendBufInfo=datalen; WR_SJA(sja_addr.++; sendBufInfo) { for(j=0, j<2, j++) WR_SJA(sja_addr+j,*(SendBufId+j)); unsigned char sendBufId[2]={0x07,0x20} ; for(j=0, j<datalen, j++) WR_SJA(sja_addr+2+j,*(bufDATA+j)); WR_SJA(sja_CMR,0x03); for(n=0,n<m SendDelay,n++) { temp=RD_SJA(SJA_SR); #define SJA_SR 2

if((temp 8c 0x08)==0x08) { for (n=0,n<300,n++);

9

break; } } } } Void WR_SJA(unsigned char sja_addr,unsigned char sja_date) { ALE_CAN=1 //开启地址锁存允许将 I/O 口的地址锁存 P0=sja_addr; delay2 (3); ALE_CAN=0 //关闭地址锁存,改为发送数据有效 delay2 (1); CS_CAN=0; WR_CAN=0; P0=sja_data Delay2 (4) WR_CAN=1; //恢复到操作前的状态,避免影响单片机对 SJA1000 的该操 作 CS_CAN=1; ALE_CAN=0; }

4)、SJA1000 中断接收程序 Void can_rx_isr(void)interrupt 0// 功能 SJA1000 接收中断函数 { unsigned char k=0; unsigned char sja_addr; EA=0; if((RD_SJA(SJA_IR) 8c 0x01)==0x01)

10

sja_addr=SJA_EFF { if(canRxAddr==MaxLen.Can.RxBuf) //unsigend RxBuf=440 CanRxBuf=0; for(k=0;k<11;k++) { CanRxBuf[CanRxAdd+k]=RD_SJA(sja_addr);sja_addr++; } WR_SJA(SJA_CMR,0x04); CanRxAddr+=11; CanRxcompdateflag+=1 } EA=1; } unsigned char RD_SJA(unsigned char SJA_addr)//读地址为 SJA_addr 的寄存器中的数据,通过 ALE、RD、CS 配合完成 { unsigned char SJA.date; int MaxLenCan

ALE_CAN=1;//置高开启地址锁存允许将 I/O 口的数据锁存 P0=SJA_addr; delay2(3) ; ALE_CAN=0; delay2 (1); CS_CAN=0; //使能片选 P1=0xff; // I/O 口初始化 RD_CAN=0; //使能读有效 delay2 (4); SJA_date=P0; RD_CAN=1;

11

CS_CAN=1; ALE_CAN=1; Return SJA_data; }

12


相关文章:
基于CAN总线大作业.doc
基于CAN总线大作业 - 基于 CAN 总线的楼宇智能环境智能监测系统设计 某楼
基于CAN总线的拖拉机作业数据解析.pdf
基于CAN总线的拖拉机作业数据解析 - 2015 年 10 月 农机化研究 第 10 期 基于 CAN 总线的拖拉机作业数据解析 刘传茂,王熙 16331...
现场总线大作业2016.doc
现场总线大作业2016 - 南京工程学院 现场总线大作业 课程名称 基于 CANopen 总线的温度测的设计 自动化学院 自动化 数控 133 吴雅雯 2016/11/4 - 201...
现场总线大作业.doc
现场总线大作业 - 南京工程学院 现场总线大作业 课程名称 基于 CANopen
现场总线技术大作业.doc
现场总线技术大作业 - 成绩 南京工程学院 自动化学院 现场总线技术及其应用课程论文 题目: 基于 CAN 总线的通信系统设计 专 业: 自动化(数控技术) 学号: 2400954...
CAN总线详细教程,精心编制,不可错过_图文.ppt
CAN总线详细教程,精心编制,不可错过 - 第4讲 CAN 数据总线(CAN B
CAN总线与基于CAN的控制网络(本)_图文.pdf
CAN总线基于CAN的控制网络(本) - 天津工业大学 自动化、电气工程及其自
基于CAN总线的直流(DC)电机调速系统设计.doc
测控系统综合设计 基于 CAN 总线的直流(DC)电机调速系统设计 基于 CAN 总线的直流(DC)电机调速系统设计 摘要 随着高新技术的不断发展,各种功能强大、性能稳定可靠...
基于CAN总线的温度控制系统.doc
基于CAN总线的温度控制系统 - 基于 CAN 总线的温度控制系统 前言 CAN
【原创】基于CAN总线的温度检测系统毕业论文.doc
【原创】基于CAN总线的温度检测系统毕业论文 - 毕业设计,毕业论文,毕业论文设
基于CAN总线的中央空调系统设计.pdf
, 2006 研究与设计 基于 CAN 总线的中央空调系统设计冯 华王艳 殷天明北京 100044) ( 北京交通大学电气工程学院 摘 要: 本文介绍基于 CAN 总线的集散式中央空调...
基于CAN总线在线更新机制的设计与实现.pdf
基于CAN总线在线更新机制的设计与实现 - 为解决CAN总线系统节点应用程序更新
基于CAN总线的电子控制单元功能测试方法_程安宇_图文.pdf
基于CAN总线的电子控制单元功能测试方法_程安宇_信息与通信_工程科技_专业资料
基于CAN总线的数据采集系统毕业论文.doc
基于CAN总线的数据采集系统毕业论文 - 毕业论文,单片机论文,毕业论文设计,毕
一种基于CAN总线的数据采集系统.pdf
一种基于CAN总线的数据采集系统_信息与通信_工程科技_专业资料。《测控技术》
基于CAN总线的温度监测系统毕业设计.doc
基于CAN总线的温度监测系统毕业设计 - 湖南工业大学专科毕业设计(论文) 基于 CAN 总线的温度监测系统 摘要 控制器局部网(CANC0NTROLLER AREA NET的RK)是B...
基于CAN总线的监控系统设计_图文.pdf
基于CAN总线的监控系统设计 - 您的论文得到两院院士关注 中文核心期刊 《微计
基于CAN总线的通信系统设计.doc
基于CAN总线的通信系统设计_计算机硬件及网络_IT/计算机_专业资料。一种基于
基于CAN总线纯电动汽车整车控制器设计_图文.pdf
法及故障诊断定义,整车控制器的设计基于CAN网络总线结构,还涉及CAN网络结构及
基于CAN总线的智能控制器设计.pdf
基于CAN总线的智能控制器设计 - 随着计算机技术、微处理器技术以及通讯技术的不
更多相关标签: