浅谈Small RTOS51 下CAN总线数据收发实现
简称,是由研发和生产汽车电子产品着称的德国BOSCH公司开发了的,并最终成为国际标准(ISO118?8)。是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境82C250是CAN控制器和物理总线间的接口。之所以选择82C250芯片是因为其具有高速性(最高可达1Mbit/s),具有抗瞬间干扰保护总线的能力。具有降低射频干扰的斜率控制。此外,它可以与110 个节点相连,防止电池与地之间发生短路,当某一个节点掉电时,不会影响总线。
(3)设计电路注意的问题
◆SJA1000通过光耦与82C250的连接是光电隔离的接法。这样可以防止线路间的串扰。在总线两端要接2 个120欧姆的总线阻抗匹配电阻。忽略掉它们会降低总线的抗干扰能力,甚至导致无法通信。
◆SJA1000的TX1脚悬空,RX1引脚的电位必须维持在0.5vcc以上,否则将不能行成CAN协议所要求的电平逻辑。
◆光耦6N137的输入端2,3脚的信号输入极性要与光耦的输出极性相同,如果电路设计时极性相反,也可以通过软件编程改变SJA1000的数据输出极性,从而使单片机的输出数据与82C250中数据的极性一致。
4 在Small RTOS 下CAN节点的数据接收与发送实例
下面将通过一个简单的实例(需要配置Small RTOS51操作系统)来介绍在Small RTOS 下CAN节点的数据接收与发送过程。实例使用两个CAN节点组成CAN网络,实现的功能是,每隔一定的定时周期发送一帧数据,同时接收CAN数据,并将接收的CAN数据发送到CAN总线上。LED将显示收到的数据帧的头两个字节。
(1)实例部分代码实现
void main(void)
{
CpuInit(); //微控制器初始化
UserTickTimer(void);//系统时钟节拍的初始化
OSStart();//启动small rtos操作系统
SendData();//发送数据任务
{ unsigned char data status;
unsigned char i;
unsigned char xdata *p =CAN1_SJA_BaseAdr+REG_CAN_SR ;
unsigned char xdata *p1;
status=SJAInit();//初始化can控制器
if(status!=0){
OSSendSignal(2); //唤醒错误处理任务
}
P_SJAFrameStructApp =(P_SJAFrameStruct )BufCan2[0];
IT0 =0;//电平触发模式
EX0=1;//使能CAN中断
BufCan2[0]=0x88;
P_SJAFrameStructApp->FrameID=0x11111111;
while(1)
{
OSWait(K_TMO,2);//系统等待函数,每两个时钟周期发送一次数据
P_SJAFrameStructApp->FrameID++;
p1=(unsigned char xdata *)P_SJAFrameStructApp->FrameID;
for(i=0;i4;i++) //发送测试数据
BufCan2[1+i] =*(p1+i);// 0x55;
for(i=0;i4;i++)
BufCan2[5+i] =*(p1+i);// 0x55;
for(i=0;i4;i++)
BufCan2[9+i] =*(p1+i);// 0x55;
status=SJASendData(BufCan2,0x10);//向CAN总线发送数据,所发送数据的首地址是BufCan2
if(status!=0) //表示发送数据错误
OSSendSignal(2);唤醒错误处理任务
}
}
void DisPlay(void)
{
while(1){
OSWait(K_TMO,1);
ShowLED(); // led显示处理
}
}
Error();// 错误信息处理任务
}
(2) 测试结果:
如果运行正确:数码管会显示依次加1的数值,否则:数码管会显示E-xx的错误代码
5 结束语
CAN总线的产生与发展控制器局部网(CAN-CONTROLLER AREA NETWORK)是BOSCH公司为现代汽车应用领先推出的一种多主机局部网,由于其高性能、高可靠性、实时性等优点现已广泛应用于工业自动化、多种控制设备、交通工具、医疗仪器以及建筑、环境控制等众多部门。控制器局部网将在我国迅速普及推广。
随着计算机硬件、软件技术及集成电路技术的迅速发展,工业控制系统已成为计算机技术应用领域中最具活力的一个分支,并取得了巨大进步。由于对系统可靠性和灵活性的高要求,工业控制系统的发展主要表现为:控制面向多元化,系统面向分散化,即负载分散、功能分散、危险分散和地域分散。
本文作者创新点是实现了在实时操作系统Small RTOS51下CAN总线上数据的接收与发送,用一个简单的实例来说明了CAN总线的接收、发送原理。
- 基于RTOS的嵌入式系统在Nexar中的实现(01-20)
- 在Nexar上实现RTOS51的嵌入式系统方法介绍(03-27)
- Small RTOS51实现基于单片机的温控器设计(12-08)
- 基于Small RTOS51的营养液输液系统(08-04)
- 对TTCAN的分析(05-26)
- 嵌入式Win CE中CAN总线控制器的驱动设计与实现(05-01)