当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]Small RTOS51 下CAN总线数据收发实现

1 CAN总线简介

现场总线技术FCS(Fieldbus Control System)成为当今工业自动化技术发展的热点,德国Bosch公司的CAN(1Mbit/s)是国际标准之一,也是Controller Area Network 的应用标准。它属于现场总线范畴,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性、及独特设计,CAN总线已成为目前国外最普及和实时性最高的现场总线。CAN总线在可靠性和实时性方面远远优于RS-485等工业现线CAN总线主要有下列特征:

1. 数据信号采用差分电压传输,两条信号线”CAN_H”和” CAN_L”。

2. 传输介质可用双绞线、同轴电缆或光纤,具有较强的抗干扰能力。直接通信距离最大可达10km(速率小于5kbit/s),最高通信速率可达1Mbit/s(此时距离最长为40m)。

3. 节点不分主从,节点任意时刻可向其他节点发送信息,依据优先权进行总线访问,满足不同的实时要求。

4. 采用非破坏性基于优先权总线仲裁技术。

5. 采用短帧结构,每帧为8bit,保证了数据出错率低。

6. 可以点对点、点对多点及全局广播方式传送接收数据。

7. 发送期间若丢失仲裁或由于出错而遭破坏的帧可自动重发送。
2  Small RTOS51简介

Small RTOS51 是一个用于8051系列单片机的多任务实时操作系统。8051系列单片机一般只有很少的ROM和RAM资源,如P89C51只有4KB Flash和128字节RAM。一般的实时操作系统如RTX Tiny 虽然小,但是任务没有优先级和中断管理,也无源代码,而uc/os-II规模太大,需要大量外部RAM。基于此,Small RTOS51是专为51 单片机编写嵌入式操作系统,它使用了RTX51 Tiny 的堆栈管理机制,并像uc/os-II一样是抢占式的。

3 一个典型的CAN节点

3.1.CAN总线接口的结构

一个CAN总线接口有3 部分组成,如图(a)所示,它们分别对应于CAN总线的物理层、数据链路层和应用层。

最上层为微控制器,主要负责上层应用以及系统控制,包括CAN协议的应用层协议的实现,协调各系统设备的工作。(本设计采用的MCU是8051)

中间层为CAN控制器,CAN控制器负责处理数据帧,完成数据的打包、解包,错误界定,并提供报文缓冲和传输滤波。(本设计采用的CAN总线控制器是Philips公司生产SJA1000)

最底层为CAN收发器,主要是接口电平的转换,接口电器特性的处理。(本设计采用82C250)
  
(a)CAN接口结构



3.2.节点电路设计

(1)SJA1000与单片机接口电路


  
(b)SJA1000与单片机接口电路

SJA1000 的AD0-AD7与单片机的数据总线相连,地址A17作为SJA1000的片选使能端,由ALE、WR、RD控制SJA1000 数据的发送和接收。注意SJA1000复位端的连接,单片机是高电平复位,而SJA1000是低电平复位,因此复位信号要通过一个反相器与SJA1000复位端相连。另外SJA1000的11脚MODE接高电平,选择Intel二分频模式 。SJA1000的16脚时中断信号输出,在中断允许情况下,有中断发生时,16脚出现有高电平到低电平的跳变。因此16脚可以直接与单片机的外部中断输入脚相连接。

SJA1000的ODE引脚可选择接口模式:

◆Intel模式  MODE高

◆M0torola模式  MODE低

[!--empirenews.page--](2)节点前端物理接口电路的设计



(c)节点前端物理接口电路的设计

使用SJA1000 CAN总线控制器可完成CAN总线通信任务,但它的驱动能力不够,因此外接82C250总线驱动芯片。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;i<4;i++)  //发送测试数据
  BufCan2[1+i] =*(p1+i);// 0x55;
  for(i=0;i<4;i++)
  BufCan2[5+i] =*(p1+i);// 0x55;
  for(i=0;i<4;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已经广泛用于汽车、火车、轮船、机器人、智能楼宇、机械制造、数控机床、纺织机械、医疗器械、农用机械、液压传动、消防管理、传感器、自动化仪表等领域。目前支持CAN协议的有Intel,Motorola,Philips,Siemens,NEC,Silioni,Honeywell等百余家国际著名大公司。因此CAN成为许多人学习的热点,本文对读者了解CAN总线节点的设计以及CAN总线对数据的接收和发送原理有很大的帮助。

本文作者创新点是实现了在实时操作系统Small RTOS51下CAN总线上数据的接收与发送,用一个简单的实例来说明了CAN总线的接收、发送原理。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

汽车电子系统架构发生了颠覆性变化。它已经持续了近十年,现在正在加快速度。这主要发生在 BEV 初创公司中,因为它们没有历史限制或根深蒂固的喜爱设计,并且可以从电子架构的零基础开始。

关键字: CAN总线 电动汽车

(全球TMT2022年8月15日讯)全球电子设计制造大厂USI环旭电子运用优化电路板设计与线路布局技术(Placement & Layout Optimization Technology),发展出Ultra-...

关键字: FACTOR FOR SMALL ULTRA

在电子产品的设计中,电磁兼容EMC性能对系统的影响非常大,关系到其能正常稳定运转。世界上已经开始对电子产品的电磁兼容性做强制性限制,电磁兼容性能已经成为产品性能的一个重要指标。 电磁兼容主要有两方面的内容,一个是产...

关键字: CAN总线 电磁兼容EMC

CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低功耗、低成本的要求,各种各样的电子控制系统被开发了出来。...

关键字: CAN总线 CAN 抗噪

CAN总线首先在汽车上得到了广泛应用,之后又在工业生产领域有了很大发展,那么面对不同的应用场景和工况,如何选择合适的网络拓扑结构慢慢成为一个让人头疼的问题。在这篇文章中,我将重点介绍用于驱动这些总线电压的 CAN 驱动器...

关键字: CAN总线 CAN总线拓扑

在进行CAN总线通信前,应保证正确的总线配置,比如终端电阻。它是影响总线通信的重要组件,下面我们不考虑信号的完整性,只从信号幅度和时间常数方面分析不加终端电阻时的影响。  终端电阻添加要求根据ISO11898-2对终端电...

关键字: 电阻 终端 CAN总线 电平

大家好,我是小麦。最近在调试一个CAN总线的设备遇到一些问题,简单总结一下。本文会对CAN总线进行简单介绍,CAN的硬件链路层,协议层,以及调试的一些心得。目录什么是CAN总线?物理层差分信号连接方式CAN节点CAN协议...

关键字: CAN总线

大家好,我是小麦。最近在调试一个CAN总线的设备时遇到了一些问题,在此简单总结一下。本文将对CAN总线进行简单介绍,包括CAN的硬件链路层、协议层,以及调试的一些心得。目录什么是CAN总线?物理层差分信号连接方式CAN节...

关键字: CAN总线

摘要:介绍了基于STC12C5A60S2单片机、SJA1000型CAN接口控制器以及PCA82C250串行收发器构成的总线通信网络。该网络中远端的CAN节点可监测现场环境,并实现数据收发和串行通信,上位PC机利用VB6....

关键字: 单片机 CAN总线 VB6.0 环境参数

关注、星标公众号,直达精彩内容来源:整理与网络素材最近在搞一个can协议,本文争对一些can底层细节很到位,分享一下。1.简介CAN总线由德国BOSCH公司开发,最高速率可达到1Mbps。CAN的容错能力特别强,CAN控...

关键字: CAN总线

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭