第二十章 金龙 107——CAN
20.1 CAN 简介CAN 是
控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车 电子产品著称的
德国 BOSCH 公司开发了的,并最终成为国际标准(ISO 11898)。是国际 上应用最广泛的
现场总线之一。 在北美和
西欧,CAN 总线协议已经成为
汽车计算机控制系 统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工 机械车辆设计的 J1939 协议。
1) 用 CAN 优势
CAN 属于
现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较 之许多
RS-485 基于 R 线构建的
分布式控制系统而言,基于 CAN 总线的分布式控制系统在 以下方面具有明显的优越性:
2) 网络各节点之间的数据通信实时性强
首先,CAN
控制器工作于多种方式,网络中的各
节点都可根据总线访问优先权(取决于
报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这 些特点使得 CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成
冗余结构,提高
系统的可靠性和系统的灵活性。而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差;
3) 缩短了开发周期
CAN 总线通过CAN收发器接口
芯片82C250 的两个输出端CANH和CANL与物理总 线相连,而CANH端的状态只能是高电平或悬浮状态,CANL端只能是低电平或悬浮状态。这就保证不会在出现在RS-485网络中的现象,即当系统有错误,出现多
节点同时向总线发送数据时,导致总线呈现短路,从而损坏某些节点的现象。而且
CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响,从而保证不会出现象在网络中,因个别节点出现问题,使得总线处于“
死锁”状态。而且,CAN具有的完善的
通 信协议可由CAN
控制器芯片及其接口芯片来实现,从而大大降低系统开发难度,缩短了开发周期,这些是仅有电气协议的RS-485所无法比拟的。
4) 已形成国际标准的现场总线
另外,与其它
现场总线比较而言,CAN总线是具有通信速率高、容易实现、且性价比高等诸多特点的一种已形成国际标准的现场总线。这些也是CAN总线应用于众多领域,具有强劲的市场竞争力的重要原因。
5) 最有前途的现场总线之一
CAN即
控制器局域网络,属于工业
现场总线的范畴。与一般的通信总线相比,CAN总线的数据通信具有突出的可靠性、实时性和灵活性。由于其良好的性能及独特的设计,CAN总线越来越受到人们的重视。它在汽车领域上的应用是最广泛的,世界上一些著名的汽车制造厂商,如
BENZ(奔驰)、
BMW(宝马)、PORSCHE(保时捷)、
ROLLS-ROYCE(劳斯莱斯)和
JAGUAR(美洲豹)等都采用了CAN总线来实现汽车内部控制系统与各检测和执 行机构间的数据通信。同时,由于CAN总线本身的特点,其应用范围已不再局限于汽车行业,而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。CAN已经形成国际标准,并已被公认为几种最有前途的
现场总线之一。其典型的应用协议有:SAE J1939/ISO11783 、CANOpen、
CANaerospace、DeviceNet、NMEA 2000 等。
20.2 试验说明本节进行的试验需要两块开发板(或者用 USB 转 CAN),两块金龙 107 的开发板CAN1对接好,9针串口分别接到电脑上,通过串口调试互相通信。
20.3 硬件说明20.4 程序说明主函数->CAN 时钟初始化->然后串口->CAN 初始化
CAN1 初始化后打开了 CAN1 的接收中断
然后 IO 口初始化 其中有一句GPIO_PinRemapConfig(GPIO_Remap2_CAN1, ENABLE ); PD0 、PD1做CAN功能需要重映射
重映射如下
下面是 CAN 控制器的初始化 关于波特率的配置
程序中,这三个值如下
CAN1是挂在APB1上的,APB1的时钟 36M那么CAN的波特率= APB1/(1+3+5)/8 = 36M/9/8 = 500Kfile:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ksohtml\wps1F3.tmp.png CAN滤波设置末做滤波处理关于CAN中断
CAN中断接收到数据后,通过串口做一次转发。当串口口发生中断后,也会通过CAN做一次转发。
20.5 试验现象该例程需要两套开发板,分别将两套板子用串口线连接到电脑,两个板子之间用两根导线连接CANH和CANL,若想测试远距离通讯请使用双绞线。例程使用的是UART1和CAN1。
LED 灯用来指示程序得运行状态其中 :
D1:表示程序运行正常
D2:表示 CAN 接收数据
D3:表示 UART 接收数据
整个通讯过程类似 QQ 聊天,电脑端使用串口调试助手发送和显示内容。对应的指示数据收发和程序运行的 LED 也会闪烁。