基于C8051F040的CAN总线通讯系统设计
1 引言
can总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性及独特的设计和适宜的价格,而广泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,并已被公认为几种最有前途的现场总线之一。
目前can系统使用较多的是独立can控制器,利用单片机的并口控制can控制器,除了8条数据线外,还需要几条控制线。采取这样的设计不但占用了单片机的引脚,而且增加了电路板的面积。同时,由于采用了并行通讯,降低了系统的可靠性,因此,采取系统内部集成can控制器的单片机势在必行。
本文已cygnal公司的内部集成can控制器的c8051f040单片机为基础,介绍了can总线的通讯接口的具体设计及其应用。由于采用了集成can控制器的单片机,大大简化了电路,同时也提高了系统的可靠性。
2 c8051f040集成的can控制器
c8051040内部集成can控制器,他兼容can技术规范2.0a和2.0b主要由can内核、消息ram(独立于cip-51的ram)、消息处理单元和控制寄存器组成,图1所示是c8051f040的内部的can总线结构图。
图1中,can内核由can协议控制器和负责消息收发的串行/并行转换rx/tx移位寄存器组成,消息ram用于存储消息目标和每个目标的仲裁掩码。这种can处理器有32个随意配置为发送和接收的消息目标,并且每一个消息目标都有他自己的识别掩码,所有的数据传输和接收滤波都是由can控制器完成的,而不是由cip-51来完成。can内部寄存器中存储了所有can的控制和配置信息,其中包括控制寄存器、状态寄存器、设置波特率的位定时寄存器,测试寄存器、错误计数器和消息接口寄存器。通常can内核不能直接访问消息ram,而必须通过接口寄存器if1或if2来访问。另外,cip51的sfr并不不能直接访问can内部寄存器的所有单元,其配置can、消息目标、读取can状态以及获取接收数据、传递发送数据都由sfr中的6个特殊寄存器来完成,其中can0cn,can0tst和can0sta三个寄存器可直接获取或修改can控制器中对应的寄存器,而can0dath,can0atl,can0adr三个寄存器主要用来访问修改其他不能直接访问的can内部寄存器,其中can0adr用来指出要访问寄存器的地址,ca0dath,can0datl这时就相当于要访问的16位寄存器的高低字节的映射寄存器,而对他们的读写则相当于所指向寄存器的读写。
图2给出了cip-51如何访问can中控制寄存器和每个消息的路径图。消息处理单元用于根据寄存器中的消息来控制can内核中移位寄存器和消息ram之间的数据传递,同时,他还可用来管理中断的产生。
3 智能节点通讯部分的硬件设计
c8051f040中内置can总线协议控制器,只要外接总线驱动芯片和适当的抗干扰电路就可方便地建立一个实用的can总线智能测控节点。本文采用philip公司的tja1050t can总线驱动器,硬件原理图如图3所示。
为了增强can总线节点的抗干扰能力,可以采取以下措施:
(1)f040的tx0和rx0并不是直接与tja1050t的txd和rxd相连,而是通过高速光耦6n137后与tja1050t相连,这就很好地实现了总线上各can节点间的电气隔离,不过应该特别说明的一点是光耦部分电路采用的两个电源va和vb必须完全隔离,否则采用光耦也就失去了意义。这些部分虽然增加了节点的复杂性,但是却提高了节点的稳定性和安全性。
(2)tja1050t的canh和canl引脚各自通过1个5ω的电阻与can总线相连,电阻可起到一定的限流作用,保护tja1050t免受过流的冲击。
(3)canh和canl与地之间并联2个30pf的小电容,可以起到滤除总线上的高频干扰和一定的防电磁辐射的作用。
(4)另外可在2根can总线接入端与地之间分别反接1个保护二极管。当can总线有较高的负电压时,通过二极管的短路可起到一定的过压保护作用。
4 智能节点的通讯软件设计
节点的can通信主要包括系统初始化程序、发送程序、接收程序等,软件部分设计的好坏将直接决定系统能否正常工作,对于初次接触can总线系统的设计人员来说是一个难点,也是一个重点,在本论文中,系统软件采用结构化程序设计方案,使其具有较好的模块性和可移植性,对于不同的系统功能或不同的应用环境,可以方便地进行编程重组。
4.1 系统的初始化
初始化程序主要完成对所有的消息对象进行初始化(一般将所有值置零),对can控制寄存器(can0cn)、位定时寄存器(bitreg)进行设置,还要对发送消息对象和接收消息对象分别进行初始化。其中,位定时寄存器的设置较为复杂,这里使用外部晶振为11.0592mhz,can通信速率为1mb/s,得到bitreg的出初始值为0x2640。主程序中规定对象初始化、发送和接收初始化,最后才启动can处理机制(对bitreg和can0cn初始化),下面为can启动程序:
4.2 发送和接收程序
发送程序主要负责把接口寄存器里边要发送内容写入到具体的消息对象中,而接收程序所要实现的功能与发送程序正好相反,接收程序负责把接收到的内容从消息对象中读入接口寄存器中,由于两者的程序相似,下面给出发送程序代码。
5 结语
采用内部集成了can控制器模块的微控制器设计现场总线智能结点,不但硬件设计上简单、可靠、编制相应的软件时也更方便和简洁。本文正是采用这种设计方案,详细介绍了用c8051f040进行can总线智能节点通讯接口设计时的硬件接口及软件设计方法。系统的实际运行验证了设计的正确性与可靠性。
评论