打印
[其他MCU]

NXP LPC1768 CAN总线

[复制链接]
2704|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lovecat2015|  楼主 | 2015-12-24 20:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
开发环境:集成开发环境μVision4 IDE版本4.60.0.0
主机系统:Microsoft Windows XP
开发平台:旺宝NXP LPC1768开发板
19.1 CAN总线简介
19.2 LPC1768 CAN总线控制器介绍
19.3 LPC1768滤波原理
19.4  CAN通信配置步骤19.5  程序说明19.6  实验现象 1CAN总线简介:
CAN控制器局域网络(Controller Area Network)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准。是国际上应用最广泛的现场总线之一。通信速率最高可达1Mbps
CAN总线特点:(1) 数据通信没有主从之分,任意一个节点可以向任何其他(一个或多个)节点发起数据通信,靠各个节点信息优先级先后顺序来决定通信次序,高优先级节点信息在134μs通信; (2) 多个节点同时发起通信时,优先级低的避让优先级高的,不会对通信线路造成拥塞; (3) 通信距离最远可达10KM(速率低于5Kbps)速率可达到1Mbps(通信距离小于40M);(4)CAN总线传输介质可以是双绞线,同轴电缆。CAN总线适用于大数据量短距离通信或者长距离小数据量,实时性要求比较高,多主多从或者各个节点平等的现场中使用。

相关帖子

沙发
lovecat2015|  楼主 | 2015-12-24 20:36 | 只看该作者
CAN总线是基于报文的协议,CAN总线上报文所包含的内容只有优先级标志区和欲传送的数据内容。所有节点都会接收到在总线上传送的报文,并在正确接后发出应答确认。至于该报文是否要做进一步的处理或被丢弃将完全取决于接收节点本身。一旦有新的节点接入到总线中,它就开始接收信息,判别信息标识,然后决定是否作处理或直接丢弃。报文中的位流是按非归零码的方法编码的,即一个完整的电平要么是显性(逻辑0),要么是隐性(逻辑1)。在隐性状态下,CAN_H和CAN_L被固定于平均电压电平,Vdiff近似为零。在总线空闲或隐性位期间发送隐性状态。显性状态以大于最小阀值的差分电压表示,其电气特性如下:
其报文有两种不同的帧格式,不同之处为识别符场的长度不同:具有11位识别符的帧称之为标准帧;而含有29位识别符的帧为扩展帧。构成一帧的帧起始、仲裁场、控制场、数据场和CRC序列均借助于位填充规则进行编码,当发送器在发送的位流中检测到5位连续的相同数值,将自动的在实际发送的位流中插入一个补码位。而数据帧和远程帧的其余位场则采用固定格式,不进行填充,出错帧和超载帧同样是固定格式。
CAN报文有以下4个不同的帧类型:
1)数据帧:用于一个节点转送信息到其他任一或所有节点
2)远端帧:总线节点发送远端帧,请求发送具有同一标识符的数据帧
3)错误帧:任何节点检测到总线错误就发出错误帧
4)过载帧:当一个节点正忙于处理接收的信息,需要额外的等待时间接收下一个报文是,发送过载帧通知其他节点暂缓发送新报文。
数据帧是最常用的帧类型,其由7个不同的位场组成,即帧起始、仲裁场、控制场、数据场、CRC场、应答场和帧结束。数据长度可以为0。在CAN技术规范2.0中其数据帧的组成如下:

使用特权

评论回复
板凳
lovecat2015|  楼主 | 2015-12-24 20:37 | 只看该作者
在CAN技术规范2.0B中存在两种不同的帧格式,其主要区别在于标识符的长度,具有11位标识符的帧称为标准帧,具有29位的标识符的称为扩展帧。标准帧和扩展帧格式如下,其中SRR代表远程请求,RTR代表远程发送请求位,IDE代表标识位扩展位
1)帧起始(SOF)标志:数据帧和远程帧的起始,它由一个显性位构成,只有在总线处于空闲状态是,才允许单元开始发送,所有单元都必须同步于首先开始发送的哪个单元的帧起始前沿。
2)仲裁场:由标识符和远程发送请求位(RTR)组成
3)控制场:由保留位(r0,r1)和数据长度码(DLC)组成,保留位必须发送显性位,数据长度码指定数据场的字节数目,其允许数目为0-8,不使用其他数值。
4)数据场:数据帧中被发送的数据组成,它包括0-8个字节(由DLC决定),从最高位开始发送
总线仲裁原理:
只要总线空闲,任何挂载在总线上的节点都可以开始发送报文。具有较高优先权的报文可以获得总线访问权,当有多个节点同时想总线发送报文时,就会发生总线冲突,为了确保报文的完整性及正确性,使用总线仲裁的机制,当具有相同识别副的数据帧和远程帧同时发送时数据帧优先于远程帧。

使用特权

评论回复
地板
lovecat2015|  楼主 | 2015-12-24 20:38 | 只看该作者
显性电平(逻辑0)称之为支配位,隐性电平(逻辑1)称之为顺从位,支配位一定会在和顺从位的判别过程中获胜,也就是说,报文标记区(报文仲裁专用区域)的值越小,其优先级越高。如两个节点同时发送报文A(id=00011010011)B(id=00011000011),前6位相同则两个节点继续发送,判断到第7位时A=1(顺从位),B=0(支配位),因此报文A顺从报文B,因此A节点被总裁为发送权取消,停止发送报文,B报文继续发送知道整个报文发送完毕,A节点等待总线空闲时再次尝试发送报文。
2、LPC1768 CAN总线控制器介绍:2.1 通用CAN特性
兼容CAN规范2.0B、ISO11898-1;
        多主机结构,带有无破坏性的位仲裁;
        由报文标识符(11位或29位)控制的总线访问优先级;
        为高优先级报文确保了等待时间;
        可编程传输速率(高达1Mbit/s);
        多播和广播报文功能;
        数据长度:0~8字节;
        强大的错误处理能力;
非归零(NRZ)编码/译码,带有位填充

使用特权

评论回复
5
lovecat2015|  楼主 | 2015-12-24 20:39 | 只看该作者
2.2 CAN 控制器特性
        2个CAN控制器和总线;
        支持11位和29位的标识符;
        双重接收缓冲器和三态发送缓冲器;
        可编程的错误警报界限和可读/写的错误计数器;
        仲裁丢失捕获和错误代码捕获(带有详细的位位置);
        单次触发的发送(不会重复发送);
        只听模式(无答应,无活动错误标志);
        “自身”报文接收(自接收请求)
2.3 验收滤波器特性
        快速硬件实现的搜索算法,支持大量的CAN标识符;
        全局验收滤波器识别所有CAN总线的11位和29位的Rx标识符;
        允许11位和29位CAN标识符的明确定义和分组定义;
        验收滤波器可为被选中的标准标识符提供 FullCAN-style 自动接收
3、LPC1768滤波原理
当总线上面有报文传送时,每个节点都会接收到报文,但是该报文是不是自己需要的,如果没有进行滤波,只要总线上有报文,控制器就接收(不管是否有效)这样就会浪费大量的系统资源,因此CAN控制器添加了滤波操作。
        CAN总线在的帧数据在总线上传送时,其它的CAN控制器是通过验收滤波来决定总线上的数据帧的ID是否和本节点相吻合,如果与本节点吻合,那么总线上的数据就被存入总线控制器的相应寄存器里,否则就抛弃该数据,从而也能够减轻总线控制器的工作量。换句话说,总线上数据帧的ID 通过待接收节点的验收滤波后是吻合的,是可以被接收的。
LPC1768提供了512*32(2KB)滤波RAM,该RAM空间可以存放1024个标准标识符或512个扩展标识符,软件可以在其中存放5个标识符表:FullCAN(标准帧格式)标识符区、明确的标准帧格式标识符区、标准帧组格式标识符区、明确的扩展帧格式标识符区和扩展帧组格式标识符区,形成一个LUT表:

使用特权

评论回复
6
lovecat2015|  楼主 | 2015-12-24 20:39 | 只看该作者
FullCAN标识符区:0x0000~SFF_sa 当SFF_sa=0x0000禁止
明确标准帧格式标识符区:SFF_sa~SFF_GRP_sa 当SFF_GRP_sa=SFF_sa禁止
标准帧组格式标识符区:SFF_GRP_sa~EFF_sa 当EFF_sa=SFF_GRP_sa禁止
明确扩展帧格式标识符区:EFF_sa~EFF_GRP_sa 当EFF_GRP_sa=EFF_sa禁止
扩展帧组格式标识符区:EFF_GRP_sa~ENDofTable 当ENDofTable=EFF_GRP_sa禁止
其格式如下:
一行FullCAN下的单个标识符表
一行标准帧组格式标识符表
一行扩展帧格式标识符表
其中控制器代表CAN控制器编号:000对应CAN1,0001代表CAN2(1768只有2个CAN控制器),禁能位为0表示检查该标识符
验收滤波器筛选过程:
1)FullCAN(标准帧格式)标识符区
2)独立的标准帧格式标识符区
3)标准帧组格式标识符区
4)独立的扩展帧格式标识符区
5)扩展帧组格式标识符区
在打开滤波器的模式下,当通过CAN总线接收到一帧数据时,将接收到的报文ID在表LUT中进行查找匹配,从1~5个区中依次进行查找,当ID匹配时就会中断筛选过程,否则一直往下查找知道LUT表结束,若没有找到匹配ID则抛弃该报文。
本章以“CAN滤波”例程为例介绍滤波,这里没有使用到FullCAN模式,因此SFF_sa=0x0000,从独立的标准帧格式标识符区开始查询:

使用特权

评论回复
7
lovecat2015|  楼主 | 2015-12-24 20:40 | 只看该作者
当使用USB转CAN调试助手发送标准数据帧ID为0x0001、0x0002、0x200<=ID<=0x210或扩展帧ID为0x100000、0x100001、0x200000<=ID<=0x200010时开发板能接收到数据,否则接收不到。
4、CAN通信配置步骤:
1)电源使能:在PCONP寄存器中设置PCAN1/2
2)时钟使能:在PPCLK_SEL0寄存器中选择PCLK_CAN1/2和验收滤波器的PCLK_ACF
3)唤醒:CAN控制器能够将为控制器从掉电模式唤醒
4)引脚:通过PINSEL寄存器选择CAN1/2引脚,并通过PINMODE寄存器选择引脚模式
5)中断:使能相应中断
6)CAN控制器初始化:在CANNOD寄存器中设置
在这里就不对寄存器做详细说明了

使用特权

评论回复
8
lovecat2015|  楼主 | 2015-12-24 20:41 | 只看该作者
5、程序说明:
本实验提供两个例程:CAN通信非滤波方式和滤波方式。
CAN通信非滤波方式:本例程只需使用一块宝马开发板即可进行实验,实验将开发板串口与电脑相连,CAN1与CAN2相连,电脑通过串口向开发板发送字符,开发接收到字符后通过CAN1将字符发送出去,CAN2接收到CAN1发送的数据后通过串口打印出来,其主函数如下:
程序初始化CAN1和CAN2控制器后通过串口打印测试信息,其中波特率配置如下,本实验使用的CAN时钟为25MHz,通过配置CAN总线时序寄存器来配置总线波特率25M/(BRP+1)/(SJW+TESG1+TESG2)
CAN通信滤波方式:本例程使用USB转CAN进行调试,将开发板串口与电脑相连,USB转CAN与开发板CAN1接口相连,打开电脑CAN总线调试工具设置波特率为500KBps连接设备,串口调试助手发送字符到开发板后通过CAN1发送出去,在CAN总线调试工具中分别设置不同的ID发送数据,当ID在滤波范围内,开发板即可接收到数据并通过串口打印出来。
6、实验现象:
1)非滤波方式:设置串口波特率为9600,插上跳线帽JP15,串口调试助手输入字符即可回显出来。
2)滤波方式:设置串口波特率为9600,连接USB转CAN调试助手,波特率设置为500K,改变发送ID,当ID在滤波范围内,串口打印接收到的字符。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

816

帖子

0

粉丝