|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
<strong>引言</strong>
CAN是Controller Area Network的缩写,是ISO国际标准化的串行通信协议。CAN属于现场总线范畴,具有通信实时性好、纠错能力强,结构简单等优点。RS-232是美国电子丁业协会EIA制定的一种串行物理接口标准。它作为计算机串行通信接口,已经被广泛的使用。RS-232的缺点就是传输距离短,而且只能点对点通信,无法组建多点通信网络。CAN总线正好弥补了RS-232的这些缺点。因此设计RS-232转CAN总线协议的适配器,既可以发挥RS-232的通用性强的优点,又可以利用CAN总线解决远程通信网络的问题,具有很高的应用价值。
<strong>1 CAN协议帧功能及结构分析</strong>
CAN协议使用5种帧来完成通信。分别是数据帧、远程帧、错误帧、过载帧、帧间间隔。其中,数据帧就是发送单元向接收单位发送数据所用的帧。数据帧分两种,具有11位标识符的帧叫做标准格式,具有29位标识符的帧叫做扩展格式。
<strong>2 RS-232转CAN总线协议适配器的总体设计及工作原理</strong>
RS-232转CAN总线协议适配器分为RS-232接口部分,微处理器和CAN总线接口部分。结构框图如图1所示。
<ignore_js_op>
2010-3-22 15:03:32 上传
<strong>下载附件</strong> (3.64 KB)
</ignore_js_op>
图1 RS-232转CAN总线协议适配器的结构框图
当串口向CAN总线接口发送数据时,数据通过串口输送到MAX232进行电平转换,将RS-232电平转换成TrL电平,然后STC89C51对数据进行提取,将有效数据提取出来.增加帧结构信息、帧类型、字节长度和标识符等,这样就生成CAN报文格式.然后由CAN总线控制器MCP2510发送出去。
当CAN总线接口向串口发送数据时,总线控制器MCP2510接受到数据,然后输送给STC89C51.进行格式转换,转换为RS-232通信格式,然后输送给MAX232进行电平转换,就得到了符合RS-232格式的数据。
<strong>3 RS-232转CAN总线协议适配器的软硬件设计</strong>
3.1硬件设计
3.1.1微处理器
微处理器采用的是STC89C51,带4K字节的FLASHFPROM,高性能的8位单片机。STC89C51的作用就是数据转换,以及总线控制器的初始化。
3.1.2 RS-232接口部分
RS-232接口部分的电路图如图2所示。
<ignore_js_op>
2010-3-22 15:03:32 上传
<strong>下载附件</strong> (8.97 KB)
</ignore_js_op>
图2 RS-232接口部分的电路图
RS-232接口部分由MAX232芯片构成。使用5v单电源供经发送结束。处理器将要发送的数据写入MCP2510的缓冲区电。可实现rI'IIJCMOS电平与RS-232电平的转换,包含2路接收和驱动器,。MAX232可以把5 v电压变换成RS-232输出电平所需的+10 V电压。
3.1.3 CAN总线接口部分
CAN总线接口部分由CAN总线控制器和CAN总线收发器组成。
(1) CAN总线控制器MCP2510
MCP2510是一种带有SPI接口的CAN控制器,它支持CAN技术规范V2.0MB,并能够发送和接收标准的和扩展的信息帧同时具有接收滤波和信息管理的功能。MCP2510通过SPI接口与MCU进行数据传输,最高数据传输速率可达5Mb/s,MCU可通过MCP2510与CAN总线上的其它MCU单元通讯。MCP2510内含三个发送缓冲器、二个接收缓冲器。同时还具有灵活的中断管理能力.这些特点使得MCU对CAN总线的操作变得非常简便。
(2)CAN总线高速收发器TJA1050
TJAl050是CAN总线协议控制器和物理总线之间的接口.可以为总线提供不同的发送性能.为CAN总线控制器提供不同的接收性能.而且它与IS01 1898标准完全兼容。采用TJAl050的目的是增大通信距离、提高系统的瞬间抗干扰能力、保护总线、降低射频干扰及实现热防护等。CAN总线接口部分的电路图如图3所示。
<ignore_js_op>
2010-3-22 15:03:32 上传
<strong>下载附件</strong> (6.45 KB)
</ignore_js_op>
图3 CAN总线接口部分的电路图
3.2 软件设计
RS-232转CAN总线协议适配器的软件设计包括单片机STC89C51的初始化,CAN总线控制器的初始化,数据的发送、接收以及错误处理等。具体流程如图4所示。
<ignore_js_op>
2010-3-22 15:03:32 上传
<strong>下载附件</strong> (3.62 KB)
</ignore_js_op>
图4软件设计流程图
(1) STC89C51的初始化
单片机STC89C51上电复位后,要对单片机的定时/计数控制寄存器、串行控制器、中断优先级控制器、中断使能寄存器等进行初始化。
(2)CAN总线控制器的初始化
要实现CAN通信。首先要对CAN控制器进行初始化。MCP2510中有3个发送缓冲区,可以循环使用,也可以只使用一个发送缓冲区,但必须保证在发送的时候.前一次的数据已经发送结束。处理器将要发送的数据写入MCP2510的缓冲区之后,调用RTS命令即可将数据发送的CAN总线上。
这里定义了一个结构体MCP2510_Data作为传输数据的结构体。
struet{
int id_CAN;
char datalength;
char data[8];
int IsExt;
im rxRTR;
}MCP25 10_Data;
id_CAN是CAN信息的ID号,datalength是传输数据的长度,data是要传输的消息数据,IsExt指是否使用扩展1D,rxRTR指使用数据帧还是远程帧。
定义了一个MCP2510_Rev结构体用于记录缓冲区的各种状态。
struct{
MCP25 10_Data candata;
int nCANREV;
int nCANREAD;
int loop;
}MCP25 10一Rev;
nCANREV表示接收缓冲区数据状态,nCANREAD表示读取缓冲区数据状态,loop表示是否支持回环模式。
(3)数据的发送与接收
数据的发送接收.包括串行中断程序和CAN总线中断程序。中断流程图如图5所示。
<ignore_js_op>
2010-3-22 15:03:32 上传
<strong>下载附件</strong> (10.49 KB)
</ignore_js_op>
图5中断流程图
函数MCP2510_Write和MCP2510_Read负责对缓冲区读写数据,MCP25lO_Open负责打开CAN总线控制器,并清空3个发送缓冲区,MCP2510_Close负责关闭CAN总线控制器,MCP2510 Comm负责向CAN总线控制器发送各种控制命令。
<strong>4 结束语</strong>
本文作者创新点:使用STC89C51设计了RS-232与CAN总线协议转换的硬件电路,解决了RS-232与CAN总线数据转换与传输的问题。这样将使很多具有RS-232接口的设备可以与CAN总线一起构成一个远程的通信网络,既节省了成本,又
保证了设备的兼容性。
作者:谢曜聪 来源:《微计算机信息》2009年第7-2期 |
|