基于MCP2515的CAN总线通信模式的设计

点赞:16298 浏览:70722 近期更新时间:2024-02-15 作者:网友分享原创网站原创

摘 要 :介绍了一种基于MCP2515的CAN总线通讯模块的硬件和软件设计.硬件部分主要可编程的CAN通讯控制器MCP2515和高速CAN收发器TJA1050组成.软件设计包括MCP2515的初始化,数据的发送和接收三部分.该模块采用SPI接口,显著减少了系统的连线,简化了系统设计.它具有较高的抗干扰能力.

关 键 词 :CAN总线通信;MCP2515;单片机;SPI

中图分类号:TP393.1文献标识码:A文章编号:1009-3044(2012)10-2409-03

Design of CAN Bus Communication Module Based on MCP2515

DAI Guo-, CHANG Guo-quan

(Department of Computer and Information, AnYang Technology University, Anyang 45500, China)

Abstract: This paper expounds the design of hardware and software of CAN bus munication module based on MCP2515.The part of hardware mainly consisted with MCP2515 stand-alone CAN controller and TJA1050 high speed CAN transceiver.The design of software included initial of MCP2515,the sending and receiving of data.This module used SPI interface to the controller, thus obviously reduced the line of a system ,and simplified system design.It had high antijamming capability.

Key words: CAN bus munication, MCP2515 , microcontroller, SPI

1CAN是一种高性能、高可靠的串行通信协议

在工业自动化、船舶、医疗设备和工业设备等方面得到广泛的应用.Microchip的MCP2515是一款独控制器局域网(Controller Area Network,CAN)协议控制器,完全支持CANV2.0B技术规范.该器件能发送和接收标准和扩展数据帧以及远程帧.MCP2515自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销.MCP2515与MCU的连接是通过业界标准串行外设接口(Serial Peripheral Interface,SPI)来实现的.该文主要就是使用MCP2515来设计一款CAN总线通信模块.

2CAN节点模块的硬件组成

该文所设计的CAN总线通讯模块采用MCP2515作为CAN控制器,TJA1050作为CAN收发器.系统结构如图1所示.其中MCP2515是一款独立CAN控制器,可简化需要与CAN总线连接的应用.CAN收发器使用恩智浦半导体公司(NXP)的TJA1050芯片.

图1系统实现方法

2.1 CAN控制器MCP2515

MCP2515主要由三个部分组成:

1)CAN模块,包括CAN协议引擎、验收滤波寄存器、验收屏蔽寄存器、发送和接收缓冲器.

CAN模块的功能是处理所有CAN总线上的报文接收和发送.报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中.通过SPI接口设置控制寄存器中的相应位或使用发送使能引脚均可启动发送操作.通过读取相应的寄存器可以检查通讯状态和错误.会对在CAN总线上检测到的任何报文进行错误检查,然后与用户定义的滤波器进行匹配,以确定是否将报文移到两个接收缓冲器中的一个.

2)用于配置该器件及其运行的控制逻辑和寄存器.

通过与其他模块连接,控制逻辑模块控制MCP2515的设置和运行,以便传输信息与控制.所提供的中断引脚提高了系统的灵活性.器件上有一个多用途中断引脚及各接收缓冲器的专用中断引脚,用于指示有效报文是否被接收并载入接收缓冲器.可选择使用专用中断引脚.通用中断引脚和状态寄存器(通过SPI接口访问)也可用来确定何时接收了有效报文.器件还有三个引脚,用来启动将装载在三个发送缓冲器之一中的报文立即发送出去.是否使用这些引脚由用户决定;若不使用,也可利用控制寄存器(通过SPI接口访问)来启动报文发送.

3)SPI协议模块.

MCU通过SPI接口与该器件连接.使用标准的SPI读/写指令以及专门的SPI命令来读/写所有的寄存器.

2.2 CAN收发器TJA1050

通信模块使用恩智浦半导体公司(NXP)的TJA1050芯片作为CAN收发器.它是CAN控制器和物理总线之间的接口.它的功能如下:将CAN控制器的信号转换成差分信号送到总线上;将CAN总线上的差分信号转换成CAN控制器能够识别的电平.它完全兼容“ISO11898”标准,最高支持1Mbps的传送速率.具有“silent”(静音)模式,在此模式下不会打扰到总线上的其它节点.它的差分接收器适应宽范围的共模信号,具有很强的防电磁干扰能力.

2.3其它部分

CAN模块给微控制器留有SPI接口,方便微控制器控制模块.PESD1CAN是静电保护器,用于保护CAN总线.它可抵抗高达40KV的瞬时高电压,防止因静电放电而造成模块损伤.模块中使用了120Ω的匹配电阻.理论上,在每个接收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配.典型双绞线上的信号传输速率约为0.2m/ns(24AWG PVC电缆),那么只要数据速率在250kb/s以内、电缆长度不超过16米,就可以不加终端匹配.而在工业控制中,多有远距离传输的要求,因此模块中加入了的匹配电阻.

3CAN节点模块的软件设计

CAN节点模块的软件设计主要包括三部分,MCP2515的初始化,数据的发送和接收.这三部分程序是CAN模块进行数据通讯的基本部分.熟悉了这三部分就能编写出利用CAN总线进行数据通讯的一般应用程序.下面就这三部分程序设计进行一个描述.

基于MCP2515的CAN总线通信模式的设计参考属性评定
有关论文范文主题研究: 关于模块的论文范文素材 大学生适用: 自考论文、学位论文
相关参考文献下载数量: 49 写作解决问题: 怎么写
毕业论文开题报告: 论文模板、论文总结 职称论文适用: 刊物发表、职称评初级
所属大学生专业类别: 怎么写 论文题目推荐度: 经典题目

1)MCP2515的初始化程序

上电后要对CAN模块进行复位操作,以便MCP2515的逻辑和寄存器能够恢复到默认状态.CAN的初始化要做的工作有:设置通信的速率,设置屏蔽滤波器RXM,设置验收滤波器RXF,清零接收缓冲区RXB,设置中断模式等.设置通信速率的同时还要设定对总线信号采样的时间点.而这一切的设定都要在MCP2515的配置模式下才能进行,因此首先要将MCP2515设定成配置模式,在配置完成后还要将其模式改回为正常模式.

unsigned char Init_Can(void)

{

unsigned char res,

CS 等于 0,/*选中片选,P0.1 */

RST 等于 1,/*使能复位,P0.0 */

RST 等于 0,

Delay_Ms(10),/*低电平至少保持2uS */

RST 等于 1,

CS 等于 1,

res 等于 mcp2515_SetCanCtrl_Mode(MODE_CONFIG), /*---设置MCP2515的参数,设置为配置模式*/

if(res等于等于MCP2515_FAIL)/*配置失败,直接退出*/

return res,

mcp2515_configrate(20),/*设置通信的速率,波特率:20kBps */

mcp2515_initCANBuffers(), /*清零发送控制寄存器,发送缓冲区;清零接收控制寄存器等*/

mcp2515_setRegister(MCP_CANINTE,MCP_RX0IE | MCP_RX1IE),/*---采用中断---*/

mcp2515_SetCanCtrl_Mode(MODE_NORMAL), /*---设置为正常工作模式---*/

return 0,/*返回初始化正确标志*/

}

2)数据发送函数

发送子程序负责节点报文的发送!发送时只需将待发送的数据按特定的格式组合成一组数据送入MCP2515的发送缓冲区,然 后设定发送优先级,启动MCP2515发送即可!下面是一个发送数据帧的发送子程序!

Send_data ( )

{

mcp2515_setRegisterS(MCP_TXB0CTRL+6,sendbuf,4), /*写发送缓冲器0的数据区,4个字节*/


mcp2515_setRegister(MCP_TXB0CTRL+5,4),/*填写要发送的字节数*/

mcp2515_write_can_id(MCP_TXB0SIDH,0,0x000),/*设置ID号为:0x000,标准格式*/

mcp2515_ModifyRegister(MCP_TXB0CTRL,0x0B,0x0B), /* TXBOCTR低四位为:1011,缓冲0发送,优先级为:11,最高*/

do

{

res 等于 mcp2515_ReadRegister(MCP_TXB0CTRL), /*读发送缓存0控制寄存器*/

res 等于 res & 0x08,/*观察发送请求位*/

}while(res),/*若为1,说明仍在发送,断续等待*/

}

3)数据接收函数

接收子程序负责节点报文的接收,可以有中断方式和查询方式接收!在通讯实时性要求不高的情况下可以用查询方式接收!下面以中断方式为例介绍一下接收子程序!

Rec_data( )

{

errcount等于mcp2515_ReadRegister(MCP_REC)),/*接收错误计数*/

mcp2515_ModifyRegister(MCP_CANINTF,0x01,0x00), /*清零接收缓冲0中断标志位*/

len 等于 mcp2515_ReadRegister(MCP_RXB0CTRL+5),/*读取数据长度*/

for(i等于0,i

recbuf[i] 等于 mcp2515_ReadRegister(MCP_RXB0CTRL+6+i),}

4结束语

该文介绍的基于MCP2515的CAN总线通讯模块的设计.它显著减少了系统的连线,简化了系统的设计,具有较高的抗干扰能力.模块经过测试,可以稳定正常地运行.MCP2515本身提供了许多的功能,模块的SPI的接口留有扩展引脚,方便在实现基本功能的基础上,根据具体的应用需要再进行功能扩展.