《CAN总线与RS-232、SPI总线转换模块的设计》论文 - 图文(6)

2018-12-29 19:26

石河子大学学士学位论文

图4-2 单片机与SJA1000接口电路

STC89C52实现对SJA1000的初始化,控制SJA1000的数据收发等功能。SJA1000的AD0--AD7接入单片机的P0端口实现数据通信,CS接入P2.0实现对SJA1000的片选,RD、WR、INT、ALE分别与单片机的相应引脚连接。单片机可以采用查询或中断的方式访问SJA1000。为了增强系统的稳定性,采用双晶体振荡器,STC89C52采用11.0592 MHz 的晶体振荡器,SJA1000选用16MHz的晶体振荡器。

2)SJA1000与PCA82C250接口电路设计

PCA82C250是CAN控制器与物理总线之间的接口,器件可以提供对总线的差动发送和接收功能。

RS脚接地,PCA82C250处于高速,使用屏蔽电缆来抗干扰,RS脚串接一个电阻(16.5k---140k)后再接地,用于控制上升和下降斜率,从而减小射频干扰。

若PCA82C250处于CAN总线的网络终端,总线接口部分需加一个120Ω的匹配电阻[5]。

其与CAN总线控制器SJA1000的连接电路如图4-3:

18

4)单片机硬件复位电路设计

平实现复位。电路设计如图4-5:

3)单片机与RS-232接口电路设计

[7]

第四章 CAN/RS-232总线转换模块设计

图4-3 SJA1000与PCA82C250接口电路

图4-4 单片机与RS-232接口电路

与RS-232电平的相互转换,还可以为单片机提供下载端口。接口电路如图4-4:

硬件复位采用电平按键复位方式,在RST上加时间大于2个机器周期的高电

MAX232芯片构成RS-232的接口电平转换电路,实现单片机串口的TTL电平

19

石河子大学学士学位论文

图4-5单片机硬件复位电路

CAN/RS-232总线转换模块总的硬件原理图、PCB图及实物图见附录。 4.2软件设计

主程序分为初始化和循环检测两个主要部分。初始化部分完成对RS-232串口和CAN总线的初始化,并开启串口中断。循环检测部分通过调用CAN总线接收函数CAN_Receive和RS-232接收函数RS-232_Receive检测缓冲区内是否收到数据,如果CAN总线有数据接收则调用RS-232发送函数put_char。RS-232总线有数据接收则会调用CAN总线发送函数Can_trans转发数据。串口数据采用中断接收,串口数据的发送和CAN总线数据的收发都采用查询的方式。此外,由于CAN总线的速率与RS-232接口的速率并不相同,因此还需在单片机的片外数据存储器(RAM)定义两个数组,其中一个用于接收RS-232总线的数据,另一个用于接收来自CAN总线的数据,作为双方转换的数据缓冲区[8]。

1)程序初始化

程序初始化包括两部分:CAN节点初始化和单片机串口初始化。 (1)CAN节点初始化

独立CAN控制器SJA1000必须先复位,而且是低电平复位,在每次开始工作时给SJA1000的复位引脚一个复位电平,使其进入复位模式。CAN控制器SJA1000的初始化包括设置工作方式、接收滤波方式、接收屏蔽寄存器、接收代码寄存器、波特率参数和中断允许寄存器。初始化设置完成后,SJA1000则进入工作状态。SJA1000寄存器初始化,首先要将其模式寄存器MOD复位模式位置为1,再通过时钟分频寄存器CDR选择 PeliCAN工作模式,同时关闭时钟输出CLOCKOUT;通过中断允许寄存器IER开启发送中断、溢出中断和错误警告中断;向接收屏蔽寄

20

第四章 CAN/RS-232总线转换模块设计

存器(AMR)和接收代码(ACR)寄存器赋初值;通过总线定时寄存器0-BTR0和总线定时寄存器1-BTR1设置波特率;为输出控制寄存器(OCR)赋初值;通过接收缓冲器起始地址寄存器(RBSA)来设置接收缓冲器FIFO的起始地址;清除发送错误计数寄存器(TXERR);清除错误代码捕捉寄存器(ECC),最后再次选择方式寄存器(MOD),设置单滤波,并返回工作状态。

(2)单片机串口初始化

通过对工作方式控制寄存器(TMOD)和串口控制寄存器(SCON)的设置来选择定时器和工作方式及串行通信的波特率,并把中断允许寄存器(IE)中的ES和EA置位选择用中断的方式来接收和发送串口数据[9]。

2)RS-232 报文的接收和发送

在程序的开始定义一个CanBuff数组和ComBuff数组分别用来存放CAN总线和RS—232总线接收的数据,定义四个指针分别指向这两个数组的接收和发送。进入循环,首先调用CAN_Receive函数,通过访问SJA1000的状态寄存器来判别CAN控制器的状态。当SJA1000的接收缓存区有有效报文时则将缓存区的数据接收到RBuffer数组里函数并返回1,当监测到函数返回值为1,

图4-6 CAN/RS-232总线转换模块软件主程序流程图 串口有数据接收?Y将数据从SBUFF中读出并通过can_trans()发到CAN总线上CAN控制器接收缓存区有有效数据?Y将数据接收到单片机并通过put_char()函数发送到串口上NN开始CAN节点初始化把RBuffer数组的数赋值给CanBuff数组,将指向CanBuff的接收指针CanRxP加上RBuffer数组中数据的个数。由于CanRxP的改变导致了指向CanBuff数组的发送指针CanTxP不相等,就说明有CanBuff数组有CAN数据进来,这时候就调用put_char函数把数据通过串口发送出去。

串口数据的接收采用中断的方式,当有数据通过串口传送进来时,程序就会

21

石河子大学学士学位论文

进入串口中断服务程序,进入中断服务程序首先关串口中断,然后把RI为清零,把SBUF中的数据写到ComBuff数组中接收指针ComRxP加1,退出服务程序之前再把串口中断打开。

3)CAN报文的接收和发送

当有数据从CAN总线传送进来,首先根据报文的第一个字节帧信息来判断是标准帧还是扩展帧,标准帧有两个标识码而扩展帧有四个标识码,帧信息的最后四位代表该报文数据字节的个数,字节数不得超过8个,当超过8个时也当8个进行处理。报文的标识码必须和初始化设定好的的接收代码寄存器和接收屏蔽寄存器的值相比较,符合条件的报文允许进入SJA1000的接收缓存区,不符合条件的不接收。当有报文进入接收缓存区时,中断寄存器和状态寄存器相应位都置1,通过判断寄存器状态来判断SJA1000是否存在有效报文,如果有有效报文则调用CAN_Receive函数接收数据。如果检测到ComBuff数组两个指针不相等,就说明串口有数据发送过来,ComBuff数组里有待发送数据,首先判断要发送的是什么帧格式,以及发送的数据有几个字节,然后从数组里截取这个报文然后通过Can_trans这个函数把待发数据写到SJA1000的数据发送缓存区里,然后通过置位发送请求位,当总线闲时把数据通过CAN总线驱动器PCA82C250发送到CAN总线上。这样就完成了数据格式的转换[10]。

22


《CAN总线与RS-232、SPI总线转换模块的设计》论文 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版高中化学必修一3.1《金属的化学性质》(第1课时)word教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: