CAN数据总线
CAN数据总线(精选9篇)
CAN数据总线 第1篇
1 CAN总线数据通信接口的硬件设计
M9020-FNU20是基于LPC2290工业级微控制器, 支持10M以太网通信、CAN总线通信, 具有CF卡接口、USB接口等功能。产品提供保护型总线设计, 使模块在EMC性能及稳定性方面均有良好的表现。
产品提供LPC2290标准化驱动库, 并固化协议栈, 调用API函数即可实现嵌入式设备的TCP/IP网络通信、CF卡、海量电子盘等存储功能。
1.1 CTM1050
CTM1050是一款带隔离的高速CAN收发器芯片, 该芯片内部集成了所有必需的CAN隔离及CAN收、发器件, 这些都被集成在不到3平方厘米的芯片上。具有以下优点:具有隔离、ESD保护功能;通讯速率最高达1Mbps;隔离电压为DC 2500V;电磁抗干扰EMI性极高等。芯片的主要功能是将CAN控制器的逻辑电平转换为CAN总线的差分电平并且具有DC 2500V的隔离功能及ESD保护作用。
1.2 M9020-FNU20结构
M9020-FNU20嵌入式工控板主要由LPC2290 (ARM7TDMI) 微控制器、程序存储器、数据存储器、工业级以太网控制器CS8900A、USB主机控制器和大容量NAND Flash存储器组成。总线通过缓冲保护电路与底板接口以保证微控制器总线运行不受外界干扰。产品标配可校准的实时时钟和带256Bytes E2-PROM的复位监控电路。
1.3 电路设计
完整的CAN总线设备由CAN控制器、总线收发器以及相应的隔离电路组成。M9020-FNU20工控板使用CAN接口电路, CTM1050为隔离CAN收发器模块, 能确保CAN总线在遭受严重干扰时控制器仍正常工作。
2 CAN总线数据通讯接口的软件设计
2.1 初始化设置
CAN总线操作需要初始化, 以创建CAN控制器所需要的软硬件资源, 并进行引脚配置等。CAN初始化函数原型为:void*CAN_Create (INT8U CAN_Ch, INT16U Rx Buf Size, INT32U Baud Rate, void*pfun) 。
2.2 接收程序
M9020-FNU20有3个接收缓冲器。但是, 其中总是有一个缓冲器用于监视总线是否有进入的报文。这个缓冲器叫做报文合成缓冲器。只有2个接收缓冲器可见 (RXB0和RXB1) , 基本上可以即时接收来自协议引擎的完整报文。当一个接收缓冲器在接收报文或保持上次接收到的报文时, CPU仍可以使用另一个接收缓冲器工作。
当CAN总线上有报文在传输时, 总线上除发送结点以外的所有节点都将成为接受节点;接受节点将报文暂时存放在本地M9020-FNU20的后台接收缓冲区Rx BG中并进行滤波比较。当接收到报文时, RXn IF标志 (Ci INTF<0>或Ci INRF<1>) 将置位。此位只有在报文被接收时才被置位。该位在CPU处理完缓冲器中的报文后将由CPU清零。若该报文通过本地滤波, M9020-FNU20再将此报文复制到前台接收缓冲区Rx FG中, 并置接收缓冲区满标志位。该位的正向锁定功能确保M9020-FNU20已经完成了报文缓冲器的处理。如果RXn IE位 (Ci INTE<0>或Ci INTE<1>) 置位, 当接收到报文时将会产生一个中断。有2个与接收缓冲器相关的可编程的接收过滤屏蔽器, 两个缓冲器各有一个。
当接收到报文时, FILHIT位 (接收缓冲器0的Ci RX0CON<0>和接收缓冲器1的Ci RX1CON<2:0>) 会表明报文的接收标准。除了表明使能接收的过滤屏蔽器个数外, 还能指出所接收的报文是远程传输请求的状态位。
2.3 发送程序
M9020-FNU20有三个发送缓冲器。每个缓冲器可容纳14字节的数据。5个字节用来存放标准或扩展报文标识符和其他报文仲裁信息, 另外的8个字节用于存放发送的报文。最后一个字节是与每个报文相关的控制字节。该字节中的信息决定在何种情况下报文将被发送以及表示报文发送的状态。
TXn IF位 (Ci INTF<2>、Ci INTF<3>或Ci INTF<4>) 将被置位, 并且TXREQ位 (Ci TXn CON<3>) 清零, 表明报文缓冲器完成了发送。随后M9020-FNU20把将要发送的报文内容装入报文缓冲器。必须装载标准标识符寄存器Ci TXn SID。如果报文中有数据字节, 还应装载寄存器TXBn Dm。如果报文使用扩展标识符, Ci TXn EID寄存器和EID<5:0>位 (Ci TXn DLC<15:10>) 会被加载并置位TXIDE位 (Ci TXn SID<0>) 。
在发送报文前, 用户必须初始化TXn IE位 (Ci INTE<2>、Ci INTE<3>或Ci INTE<4>) 以便在发送报文后使能或禁止中。必须置位TXREQ位 (Ci TXn CON<3>) 来发送报文。M9020-FNU20解决了由TXREQ位与SOF时间设置造成的所有时序冲突, 确保当优先级改变时, 能在发送SOF之前解决时序冲突。当TXREQ (Ci TXn CON<3>) 置位时, TXABT (Ci TXn CON<6>) 、TXLARB (Ci TXn CON<5>) 和TXERR (Ci TXn CON<4>) 标志位由模块清零。
为保证优先级的报文不被覆盖, M9020-FNU20模块提供了3个结构相同的发送缓冲区。每个缓冲区占16字节, 包含4个报文标识符寄存器、8个报文数据寄存器、1个数据长度寄存器, 1个发送缓冲区优先级寄存器和1个保留字节。
当M9020-FNU20需要发送数据时, 必须先将数据按CAN协议格式进行封装, 再将CAN报文存入空闲发送缓冲区, 并清除相应缓冲区空标志。报文在被成功发送出去之前可以通过发送“中止发送”请求以中止当前报文的发送。
3 结语
由于CAN总线数据通信的高速通信速率、高可靠性、连接方便、多主站、通讯协议简单和高性能价格比等突出优点, 减少了硬件系统的布线, 节约了成本, 深得许多工业应用部门的青睐, 其应用由最初的汽车工业迅速发展至数控机床、农业机械、铁路运输、过程测控、冶金自动化等各个方面。
参考文献
[1]饶运涛, 邹继军, 郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社, 2006:20-36.
[2]朱涛.以太网与CAN总线通讯接口技术[D].武汉:武汉理工大学, 2006.
CAN总线学习心得--重要 第2篇
CAN总线学习心得--重要
SJ A1 0 0 0 的常用标准波特率设置,为什么基本上都是单次采样?即使是低速的时 候也是这样的,既然T SEG1 的设置周期都很大,比如都大于1 0 了,为什么不让 他采样三次呢?答: 是不好理解,但那是Ci A 推荐的值。用5 1 系列芯片和两个SJ A1 0 0 0 接口还要外扩一个RAM,请问5 1 的AL E 能否同时 与三个芯片的AL E 管脚相连(地址不同)有哪位高手做过双SJ A1 0 0 0 冗余的请指 教!答: 能同时连接。请问CAN 总线在想传输1 0 0 0 m 的情况下, 最快的速度能到多少呢?答: 5 0 k b p s = 1 3 0 0 m。如果一个网络中只有2 个节点, 其中一个处于监听模式,另一个节点发送报文会 使处于监听模式的节点进入中断吗?答: 能进入接收中断,你自己的试验也可以证明。想组建一个简单的CAN 网络, 已经有两个节点, 我想问CAN 总线如何组建, 终端电 阻安装在哪里?小弟还没有入门, 大虾们指点一下。答1 :直接将节点CANH 和CANL 连到总线上,终端电阻接在总线两端,大约1 2 0 欧。答2 : 推荐北航出版《现场总线CAN 原理与应用技术》,研读一下。请问各位老师:我是一名c a n 总线的新手,我正在做c a n 总线的开发,控制器用 s j a 1 0 0 0 t(我自己两个控制板互通), 但我在发送数据后将出现总线关闭,我看到 发送错误计数器在不断增加,直到0 x f f 最后恢复到0 x 7 f , 谢谢各位老师帮我解 答这个问题。或者对我给与启发 答1 ;首先调通单个节点。答2 :这是单节点发送没有成功(或者由于网络中其他节点没有收到帧并在响应 场响应)建议参考网站CAN 应用方案。我想请教各位c a n 远程贞有何作用?如何应用?在什么情况下才需要用到远程 贞?谢谢了!答:远程帧的用与不用完全取决你自己的协议,c a n 有远程帧的功能,是可用可 不用的!用网站提供的计算波特率的工具算出的数,1 2 k 以上的都正确,无论是自接收还 是两个节点通讯都没有任何问题。但是1 2 k 以下的数据一个都不能用,两个节点 通讯没有成功的,自接收有1 0 k 的几个数据成功。我们的项目要求必须在1 0 k 以下,最好是5 k,但是不成功,自己计算的数据也没有成功的。(我们至少试 验了3 0 多个,所有情况都考虑了。)我现在怀疑s j a 1 0 0 0 的波特率根本达不到5 k 和相对应的传输1 0 k m。或者可以谁能提供个经过实践检验的正确的总线定时器0 和1 的设置呢?要求低 于1 0 k。答:PCA8 2 C2 5 0 / 2 5 1 可以保证5 KBPS 的速率;比如Z L GCAN 系列接口卡。答:t j a 1 0 5 0 在低速时好像有问题。我用1 0 5 0 进行5 k 的时候不行,用8 2 c 2 5 0 很好,你可以试一试。我本想双机调试,一边收,一边发,但跑程序后,发送方会不断进入复位模式,所以现在进行自测试模式,我先进入复位模式,设置进入PEL I CAN 模式,对寄存 器初始化后,设置接收,发送中断使能,最后设置进入自接收,单滤波模式,这 样初始化就结束了,我的ACR0 ~ ACR3 为0 x 5 5 , 0 x 5 5 , 0 x 5 5 0 x 5 0 , AMR0 ~ AMR3 为 0 x f f , 之后,我就往BUF F ER 里填数,0 x 8 8 , 0 x 5 5 , 0 x 5 5 , 0 x 5 5 , 0 x 5 0 , 0 x 3 0 , 0 x 3 1 ,.0 x 3 7 , 之后,启动自接收请求命令,但是程序只进入了中断一次,是发送空中断,接收中断没有产生,我读发送错误 寄存器,发现有错误产生,我读接收计数寄存器,为0,说明我没有收到数,但 我读接收BUF F ER 时,值为 0 x 5 5 , 0 x 5 5 , 0 x 5 5 , 0 x f f , 0 x f f , 0 x f f , 0 x f f , 0 x f f , 0 , 0 , 0 , 0 , 0 , 以上测试时,我在CANH 和CANL 之间加入了两个1 2 0 欧的匹配电阻并联在一起的,请各位高手指点呀,谢谢了 答:在总线上加个CAN 接口卡会方便许多,或者加个捕获功能的示波器也可以检 测波形。仿真环境:k e i l u v 2 编译器:k e i l c 5 1 7.0 仿真器:t k s4 个CAN 通道。s j a 1 0 0 0 出现错误而中断的几率由多大呢?特别是发送错误,总线关闭等。答:注意CAN-b u s 是一个网络,调试网络时需要在另一端连接一个正常工作的 CAN 节点。CAN 是可靠的网络;测试过2RS-4 8 5 升级...》中有一些性能比较。单片机用的是5 1 系列,c 语言,如果SJ A1 0 0 0 模式寄存器的地址为 OXC0 0 0,请 问用什么样的命令来读写,然后判断该寄存器可以被正常读写。答:可以通过写入并验证SJ A1 0 0 0 测试寄存器(地址:0 x 0 9,名称:REG_ CAN_ T EST)的数值来判断CPU 与SJ A1 0 0 0 的硬件连接是否正确。例如,第1 次向SJ A1 0 0 0 测试寄存器REG_ CAN_ T EST 写入0 x 5 5 并读出验证;如果 通过,则再次向寄存器REG_ CAN_ T EST 写入0 x AA 并读出验证;如果2 次验证均通 过,说明CPU 与SJ A1 0 0 0 连接正确,否则需要检查相关的硬件连接。在《基于CAN 控制器SJ A1 0 0 0 控制器的Ba s i c CAN 控制模块》、《基于SJ A1 0 0 0 CAN 控制器的Pe l i CAN 模块》源代码中均有测试SJ A1 0 0 0 硬件接口函数,函数名称为: SJ AT e s t I n t e r f a c e,用户可直接调用。以下程序为《基于CAN 控制器SJ A1 0 0 0 控制器的Pe l i CAN 模块》中关于 SJ AT e s t I n t e r f a c e 函数的源代码。c h a r SJ AT e s t I n t e r f a c e(u n s i g n e d c h a r t e s t v a l u e){ c h a r s t a t u s = 0;b i t Er r o r F l a g = 1;u n s i g n e d c h a r Er r o r Co u n t = 0 x 2 0;u n s i g n e d c h a r t e mp = t e s t v a l u e;wh i l e(-CANT X(CAN2), CANRX(CAN1)-;i f(Se c Da t a = = 0){ Se c Da t a = 0 x 1 0;T H0 = 0 x 8 0;T L 0 = 0 x 6 0;Se c F l a g = 1;Se c o n d + +;} T R0 = 1;} v o i d I n i t Cp u(v o i d){ PX0 = 1;I T 0 = 1;EX0 = 1;ET 0 = 1;EA= 1;Se c Da t a = 0 x 1 0;} v o i d I n i t T 0(v o i d){ T mo d Da t a = T MOD;T mo d Da t a &= 0 x f 0;T mo d Da t a │= 0 x 0 1;T MOD = T mo d Da t a;T H0 = 0 x 8 0;T L 0 = 0 x 6 0;T R0 = 1;Se c Da t a = 0 x 2 0;Se c o n d = 0 x 0 0;} v o i d Sj a 1 0 0 0 I n i t(v o i d){ BCAN_ ENT ER_ RET MODEL()BCAN_ SET _ BANDRAT E(0 x 0 4);/ / 1 0 0 k BCAN_ SET _ OBJ ECT(0 x a a , 0 x f f);BCAN_ SET _ OUT CL K(0 x a a , 0 x 4 8);BCAN_ QUI T _ RET MODEL();SJ A_ BCANAd r = REG_ CONT ROL;* SJ A_ BCANAd r │= 0 x 0 a;/ / } 现在用示波器测CAN_ H 和CAN_ L,没有信号,请问是什么问题?注:这个参考一下吧,呵呵 问: 请教各位大虾:有没有CAN 局部测试程或意见?急需!谢谢!有没有人能给他的自测程序给我看看?帮帮我呀!答:网上有b a s i c CAN 例程,CANs t a r t e rI I 开发套件中提供的资源。问:请问各位高手,作为一个初学者应该如何学习CAN 总线技术?应该先学习哪 一些基本知识,请推荐妨相关书籍一二。谢谢!答:现场总线CAN 原理与应用技术 作者:饶运涛 邹继军 郑勇芸 出版社:北京航空航天大学出版社 问:又没有带CAN 控制器的可在线编程的8 位单片机呢,麻烦推荐一款吧 答:AT MEL AT 8 9 C5 1 CC0 X 系列不错!答:i n t e l 的8 9 C5 9 1 , 8 9 C5 9 2 都是片内带c a n 的8 位单片机。问:本来应用了CAN232,但是想提高系统的速度,想用PCI-CAN,做USB-CAN,但是想借此学习PCI,或USB,ZLG这里能想CAN 232一样,如果买了板子,提供代码,原理图吗?如果没有哪种开发板有呢,能推荐一下吗?答:系统而理论地学习CAN,建议选择CANs t a r t e r0 4-2 8 1 1 : 0 2 问:第一,接收信息的工作节点需要什么响应来确认?第二,接收的子程序未调 好是否意味收发两方均无法调试?如何确认发送成功?答:网络上同一速率的正常工作节点响应:1、已设定速率;2、在工作状态。完 全是由硬件(比如:SJ A1 0 0 0 芯片)完成ACK 确认。问:请问单个c a n 节点可以进行调试吗?是一块一路的c a n 适配卡,使用端口 地值3 0 0 h , 我使用wi n i o 进行读写的,可为什么,所有的单元读出来得数据都是 f f ?是因为只使用了单个节点c a n 控制器不能正常工作吗?答:s j a 可实现单节点调试;f f 应该是地址空间错误;问:我还是不太明白,你说的地址空间错误,是说s j a 1 0 0 0 的地址没有选通,地 址没有指向s j a 1 0 0 0 的寄存器吗?答:首先把读写片选信号产生了再去管s j a 1 0 0 0 吧。问:我用验收滤波器来选择接收CAN2.0 B 的一帧数据,2 9 位中只对其中几位进 行判别,其他位又不是定值,请问这该怎么办?可不可以掩住不关心的位?用范 围应该也可以实现,不过那样感觉不好,请教大家,谢谢!答:相关/ 不相关位最终都可以转化为范围描述。问:请教关于2 1 1 9 c a n 验收过滤器的问题 请问:1、在c a n s t a r t e r-i i 应用指南第4 2 页中提到的“f u l l c a n 标准地址” 与“标准单个地址”有何区别?2、第4 5 页表2.3 4 的“值”“字”“行”“i d 索引”是什么概念?答:f u l l c a n 标准地址放置的是需要自动执行接收存储的i d 索引表格(f u l l CAN 功能,查看相关的介绍);标准单个地址仅仅是AF 接收/ 屏蔽标准i d 的索引表格,即和一般的接收过滤理解一致。答:f u l l c a n 模式下自动把符合的帧放在后面的r a m 里
基于CAN总线的数据监控系统设计 第3篇
关键词:CAN总线,数据监控,Visual C++
一、引言
CAN总线是德国BOSCH公司从80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议,具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点,特别适用于环境恶劣、电磁辐射强和振动大的工业环境[1]。
笔者叙述的是基于CAN总线的数据监控系统设计,把先进的网络通讯技术应用于数据传输中,并结合MFC设计出上位机窗口,便于实时监控和限值报警。
二、CAN总线特点
CAN总线广泛应用于汽车、船舶、机器人、液压系统、楼宇自动化等场合。由于CAN总线采用了许多技术及独特的设计,与一般的通信总线相比,它的数据通信具有突出的可靠性、实时性和灵活性,其特点可概括为:(1)CAN为多主方式工作,网络上任一节点均可在任意时刻主动地向网络上其他节点发送信息,而不分主从;(2)采用非破坏仲裁技术,当多个节点同时向总线发送信息冲突时,优先级低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。尤其是在网络负载很重的情况下,也不会出现网络瘫痪情况;(3)CAN的直接通信距离最远可达10km(速率在5kbps以下);通信速率最高可达1Mbps(此时通信距离最长为40m);(4)报文采用短帧结构,传输时间短,受干扰概率低,保证了数据出错率极低,每帧信息都有CRC校验及其他检错措施,具有极好的检错效果。
三、系统硬件设计
如图1所示,整个系统以CAN总线通信和Visual C++监控窗口编程为核心进行设计。系统采用AT89C51作为节点的微处理器,在CAN总线通信接口中,CAN通信控制器采用SJA1000,CAN总线收发器采用82C250,上位机采用Visual C++编辑数据监控窗口[2]。
3.1微处理器AT89S51
AT89S51是美国AT M EL公司生成的低功耗、高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
3.2 CAN控制器SJA1000
SJA1000是一种独立的CAN控制器,主要用于移动目标和一般工业环境中的区域网络控制。它是Philips半导体公司PCA82C200CAN控制器(BasicCAN)的替代产品,而且还增加了一种新的操作模式PeliCAN,这种模式支持具有很多新特性的CAN2.0B协议。
3.3 CAN收发器82C250
82C250是CAN控制器与物理总线之间的接口,驱动电路内部具有限流电路,可防止发送输出级对电源、地或负载短路。82C250采用双线差分驱动,有助于抑制恶劣电气环境下的瞬变干扰。
3.4硬件电路原理图
如图2所示,电路主要由4部分所构成:微控制器89S51、独立CAN通信控制器SJA1000,CAN总线收发器82C250和高速光电耦合器6N137。微处理器89S51负责处理SJA1000的初始化,通过控制SJA1000实现数据的接受和发送等通信任务。为了增强CAN总线的抗干扰能力,SJA1000的TX0和RX0并不是直接与82C250的TXD和RXD相连,而是通过高速光耦6N137后与82C250相连,这样就很好地实现了CAN节点间的电气隔离。82C250与CAN总线接口部分也采用了一定的安全和抗干扰措施。82C250的CANH和CANL引脚各自通过一个5Ω的电阻与CAN总线相连,电阻可起到一定的限流作用,保护82C250免受过流的冲击。
四、系统软件设计
本系统软件设计包括二大部分:CAN总线智能节点软件设计和上位机监控显示模块软件设计,前者实现数据通讯,后者实现上位机显示。
4.1 CAN总线系统智能节点软件设计
CAN总线智能节点的软件设计主要包括三大部分:CAN节点初始化、报文发送和报文接受。
(1)CAN节点的初始化程序
CAN控制器的初始化只有在复位模式下才可以进行。初始化程序主要是通过对CAN控制器相关寄存器写入相应的控制字来确定CAN控制器的工作方式。初始化工作主要包括工作模式设置、命令寄存器设置、总线时序设置、中断使能设置及接受验收过滤设置等。初始化流程图如图3所示。
(2)CAN控制器的数据发送过程
发送子程序负责节点报文的发送。发生时用户需将待发送的数据按特定格式组合成一帧报文,送入SJA1000发送缓存区中,然后启动SJA1000发送。在往SJA1000发送缓存区送报文之前,必须先作一些判断,如图4所示。发送程序分发送远程帧和数据帧两种。
(3)CAN控制器的数据接受程序
接受子程序负责节点报文的接受以及其他情况处理。接受子程序在处理接受报文的过程中,要对诸如总线关闭、错误报警、接受溢出等情况进行处理。SJA1000报文接受主要有两种方式:中断接受方式和查询接受方式。接受过程如图5所示。
4.2上位监控软件设计
本系统中,上位监控采用Visual C++
来编写,即用Msco m m控件实现串口编程。具体来说,主要有以下步骤:(1)建立应用程序工程Mscom m控件;(2)在当前工程中添加Mscomm控件;(3)初始化串口:设置Mscomm控件的属性;(4)添加串口事件消息处理函数Oncomm();(5)发送数据[3]。
部分程序的代码如下[4]:
五、结语
采用CAN总线作为数据通讯方式进行数据监控系统设计,在工业现场监控领域,具有很大的实用价值。经过试验验证后,该系统稳定,可以对数据实现在线实时监控和报警,具有可操作性。随着CAN总线研究的深入,应用范围已经不再局限于汽车行业,而扩展到了机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械、家用电器及传感器等领域,具有广泛的前景[5]。
参考文献
[1]邬宽明.CAN总线原理和应用系统设计[M].北京:北京航空航天大学出版社,1996.
[2]AT89S51中文手册.
[3]赵琳,吴亚君.基于Visual C++的PC机与单片机串行通信的实现[J].沈阳电力高等专科学校学报,2004,2(20):5-8.
[4]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2004.
汽车CAN总线实验教学系统的设计 第4篇
http://
汽车CAN总线实验教学系统的设计
一 系统概述
CAN-bus(Controller Area Network)即控制器局域网,是国际上应用最广泛的开放式现场总线之一,作为一种技术先进、可靠性高、功能完善、成本合理的网络通讯控制方式,CAN-bus在汽车也已经得到了广泛的应用。汽车电子车身网络系统是由多个ECU之间采用高速CAN总线网络通信实现车辆动力与操作系统信息快速交互,低速CAN总线网络通信实现车辆车身操作控制信息交互,以及低成本的LIN总线对CAN网络进行必要的扩充。通过总线的连接,将多个ECU组成控制网络,实现相互间的信息互联互通,使汽车变得更加安全、可靠、智能,功能扩展更加便捷,车身更加轻便。
该实验系统配置了汽车常见的基础ECU(ECU即电子控制单元Electronic Control Unit的缩写),可以通过ECU外置的输入输出硬件进行本地化操作,以达到了解单独一个ECU功能的目的。提供ECU仿真模型、二次开发所必须的原理图、源代码等,为以后独立开发汽车电子功能部件奠定基础。该系统也可组网构成一个基本车载网络的模型,了解车载网络的基本构成。通过可配套使用的PFautoCAN平台软件,可以完成对车载网络的设计、软件仿真、半实物仿真、硬件在环仿真等,以达到构建网络控制方案,验证网络模型,并通过对网络数据的采集、存储、分析、处理等对车载网络进行测量、评估、优化等目的。二 技术指标
1.双CAN通信网关单元
1.1 可实现低速CAN网络(如125Kbps)与高速CAN网络(如250Kbps)之间的数据选择性交互,完成汽车电子车身网络内不同通信速率CAN网络之间的信息互联互通。
1.2 支持CAN2.0A与CAN2.0B协议,支持CAN通信速度范围5Kbps ~ 1000Kbps。1.3 通过彩色液晶显示屏实时显示网络报文等相关信息。1.4 提供8路开关量信号输入和8路开关量信号输出。
1.5 提供软件代码测试CAN各种波特率标准、通信帧的类型、通信帧的格式、总线滤波等功能。成都盘沣科技有限公司
http:// 1.6 可通过PFautoCAN平台软件对ECU进行CAN-BUS网络通信软仿真、半实物仿真及硬件在环仿真。
1.7 提供ECU实物原理图、实验源代码等教学资源。
1.8 能够通过PFautoCAN平台软件对单个ECU的CAN-BUS通信功能进行诊断,并可做多个ECU联网后CAN-BUS通信的综合诊断。
2.汽车组合仪表控制单元
汽车仪表是一个综合性汽车电器,采集并显示来自各个汽车模块的信息,如车灯、车门、油温、车速等;所以仪表是汽车所有信息的汇集处,仪表既要将这些状态信息显示出来,又要将相应的信息发送给相应控制模块,工作较为繁忙,在汽车电子车身网络中扮演着非常重要的角色。
2.1 仪表包括:里程表、发动机转速表、车速表、燃油表和温度表。
2.2 指示包括:燃油报警信号;关于发动机的信号:水温报警信号、充电指示信号、机油压力报警指示等;关于制动系统的信号:制动器液位故障报警指示、驻车制动指示、制动蹄片间隙警告指示;关于安全的信号:安全带未系警告指示、SRS故障指示、副驾驶安全气囊、防盗指示等;关于车灯的信号:近光灯、远光灯、防雾灯和转向灯等;除霜信号指示。2.3软件包括八类模块单元:
2.3.1燃油表控制模块:主要有油位采集模块和步进电机驱动模块; 2.3.2温度表控制模块:主要有温度采集模块和步进电机驱动模块; 2.3.3车速表控制模块:主要有车速采集模块和步进电机驱动模块; 2.3.4转速表控制模块:主要有转速采集模块和步进电机驱动模块; 2.3.5指示灯模块:主要有信号采集和控制信号输出模块;
2.3.6液晶显示模块:主要时间、日期调节和显示模块以及总里程显示模块; 2.3.7CAN通信模块:主要有数据处理模块、CAN接收和发送模块; 2.3.8声光报警模块:主要有信号采集模块和蜂鸣器驱动模块。2.4 实验信号输入:
实验设备自带信号输入;信号发生器信号输入;CAN网络报文输入。2.5 通过PFautoCAN平台软件对ECU进行软仿真、半实物仿真及硬件在环仿真。成都盘沣科技有限公司
http:// 2.6 提供ECU实物原理图、实验源代码等教学资源。
2.7 通能够通过PFautoCAN平台软件对单个ECU的CAN-BUS通信功能进行诊断,并可做多个ECU联网后CAN-BUS通信的综合诊断。
3.汽车车门控制单元
3.1 提供不少于6路的继电器信号输出,可以驱动控制车门、车窗、后视镜等汽车电器。
3.2 四门独立控制开关输入。
3.2实现CAN与Lin总线通信的综合应用。
3.3 通过本地控制可以实现本单元的ECU功能演示,并可通过CAN/lin总线网络进行实车的模拟控制,并通过网关、仪表等显示相关控制报文、指示信息等。3.4 综合应用CAN通信与LIN通信的组网与数据交互,以及车门开关控制策略; 3.5 提供ECU原理图及实验源代码等教学资源。
3.6 通过PFautoCAN平台软件对ECU进行软仿真、半实物仿真及硬件在环仿真。3.7 通能够通过PFautoCAN平台软件对单个ECU的CAN-BUS通信功能进行诊断,并可做多个ECU联网后CAN-BUS通信的综合诊断。
4.汽车车灯控制单元
4.1 七组以上灯光控制继电器输出。4.2 1七路以上独立逻辑信号输入。4.3实现CAN与Lin总线通信的综合应用。
4.4 通过本地控制可以实现本单元的ECU功能演示,并可通过CAN/lin总线网络进行实车的模拟控制,并通过网关、仪表等显示相关控制报文、指示信息等。4.5 提供ECU原理图及实验源代码等教学资源。
4.6 通过PFautoCAN平台软件对ECU进行软仿真、半实物仿真及硬件在环仿真。4.7 通能够通过PFautoCAN平台软件对单个ECU的CAN-BUS通信功能进行诊断,并可做多个ECU联网后CAN-BUS通信的综合诊断。
5.汽车防盗报警器单元 成都盘沣科技有限公司
http:// 5.1 六路以上继电器控制输出,五路以上报警信号输入。
5.2 综合应用CAN、LIN总线通信与无线通信的数据交互技术,以及汽车防盗原理。
5.3 提供ECU原理图及实验源代码等教学资源。5.4 多路LED工作指示灯控制电路。
5.5 电子防盗软件部分主要包括功能选择开关信号采集与处理、制动踏板等开关信号采集与处理、振动传感器信号采集与处理、RF信号采集与处理、继电器控制及控制策略。
5.6 通过PFautoCAN平台软件对ECU进行软仿真、半实物仿真及硬件在环仿真。5.7 通能够通过PFautoCAN平台软件对单个ECU的CAN-BUS通信功能进行诊断,并可做多个ECU联网后CAN-BUS通信的综合诊断。
6.汽车倒车雷达控制单元
6.1 通过对超声波探头控制,采集车身周围障碍物分布情况,将信息汇总后模糊推理,提供倒车建议。
6.2 提供ECU原理图及实验源代码等教学资源。
6.3 通过PFautoCAN平台软件对ECU进行软仿真、半实物仿真及硬件在环仿真。6.4 通能够通过PFautoCAN平台软件对单个ECU的CAN-BUS通信功能进行诊断,并可做多个ECU联网后CAN-BUS通信的综合诊断。
7.智能天窗控制单元
7.1 提供4路以上控制继电器输出,控制天窗滑移电机、斜升电机等。7.2 提供6路以上逻辑信号输入。
7.3 实现滑动开关有滑动打开、滑动关闭和断开(中间位置)3 个挡位。7.4 实现斜升开关也是有斜升、斜降和断开(中间位置)3个挡位。7.5 实现对天窗的自动控制。
7.6 综合应用CAN、LIN总线的通信技术,以及智能天窗控制原理。7.7 提供ECU原理图及实验源代码等教学资源。成都盘沣科技有限公司
http:// 7.8 通过PFautoCAN平台软件对ECU进行软仿真、半实物仿真及硬件在环仿真。7.9 通能够通过PFautoCAN平台软件对单个ECU的CAN-BUS通信功能进行诊断,并可做多个ECU联网后CAN-BUS通信的综合诊断。
8.PFautoCAN汽车CAN网络设计仿真平台软件
PFautoCAN平台软件是针对车载CAN-BUS网络及其相关ECU的开发、测试和分析的集成开发环境软件,涵盖了从系统规划到实现的完整开发流程,可提高开发基于CAN-BUS网络的ECU及车载网络的效率。支持ECU及车载CAN-BUS网络系统的开发、测量、仿真、诊断、测试、分析、数据记录、数据回放等,并实现了与Vector公司的dbc文件兼容等。
8.1 测量:以图形,图表等形式实时的反映车载网络的总线状态及相关信息 8.2仿真:用于车载网络仿真,包括软件仿真,半实物仿真,硬件在环仿真。8.3诊断:完成对单个ECU的CAN-BUS通信功能诊断,以及多个ECU联网后网络的综合诊断。
8.4测试:对开发过程中各个阶段的ECU进行CAN总线通信功能测试,检查测试模型,回归测试及一致性测试。
8.5 数据记录与回放:可记录总线数据,并进行记录数据的回放。
8.6符合ISO11898标准的两路独立CAN-bus通道,可以处理CAN2.0A和CAN2.0B格式的CAN报文信息;发送速度最高大于4000帧/秒,接收速度最高大于5000帧/秒。
8.7可实时显示总线负载和流量以及总线错误状态。8.8支持检测和显示错误帧。
8.9 可通过脚本配置以支持自定义协议。
8.10 可发送协议帧,进行模拟操作;具有键盘输入、时间等触发功能,并可设定接收到指定类型的协议帧时触发发送相应的协议帧。
9.汽车信号发生器
9.1 具有DDS单元(数字信号发生单元),可通过该单元模拟发动机转速、车速等信号。成都盘沣科技有限公司
CAN数据总线 第5篇
关键词:CAN-bus,游艺机,数据交互,单片机
1 前言
CAN(Controller Area Network)即控制器局域网络,属于工业现场总线的范畴。CAN总线的数据通信具有突出的可靠性、实时性和灵活性,因而在汽车领域得到了广泛的应用,实现汽车内部控制系统与各检测和执行机构间的数据通信。基于CAN以上优点,及在复杂环境下具有抗干扰能力强、多字节传输、1Mb/s可编程速率、多个发送和接收缓冲等特点,本文主要介绍利用PIC24系列单片机组成CAN总线局域网[1],实现游乐机各控制系统、各检测和执行机构间的数据通信,组成一个整体进行控制和监控。
2 系统原理及技术要求
中小型游乐机的控制有多种要求,各种操作按钮的输入信号、传感器信号、输出控制、与其它控制单元通信(如变频器、显示模块、节点、上位机)等,设备安装现场干扰信号较多,要求具有较强的抗干扰能力;基于以上要求采用CAN总线通信方式实现数据的交互和设备的控制。
3 硬件实现
主控制系统基于PIC24HJ128GP504单片机实现,由输入、输出、及具有CAN通信三大部分组成(如图1所示)。
控制板的编号ID由拨码控制,带通用锁存芯片的输入输出端口,使用USART实现RS232/485接口、带USB接口的芯片可与PC进行通讯,SPI/I2C接口可扩展芯片功能;本文对CAN的实现做详细的讨论,电路原理图如图2所示,PIC24HJ128GP504的CAN收发口经光耦与CAN控制器隔离,在后级加电感滤波和二极管稳压,可极大地提高CAN差分信号的稳定[2]。输出端CH-,CH+接于总线上即可组成CAN局域网进行通信。
4 软件实现
CAN通信主要由初始化配置、接收数据和发送数据三部分组成(如图3所示)。PIC24系列单片机具有完全E-CAN协议,可以灵活地进行配置,以方便实际的使用。
软件使用C语言实现[3],将PIC24HJ128GP504芯片的20脚定义为CAN的输出,21脚定义为CAN的输入;将CAN配置为标准CAN2.0协议,115200的波特率,8个发送缓冲区,32个接收缓冲区,及激活错误检测中断功能;多个发送和接收硬件缓冲区,具有良好的数据冗余性,提高了数据传输的速度,减少数据收发之间的影响;对于要收发的数据不采用软件缓冲也不会导致丢包,减少程序的编写量,保证系统稳定安全地工作。对于数据的发送和接收采用中断的形式,收发大量数据时可提高程序运行的效率;中断程序利用DMA传输(中断发送程序_DMA0Interrupt(void),中断接收程序_DMA1Interrupt(void)),不经过CPU的处理可直接进行数据的收发,从另一方面提高了程序运行的效率,减少在中断程序中进行大量数据处理而带来性能上的影响。CAN的部分代码实现如图4所示。
5 结论
此系统有较丰富的输入输出接口、通信接口、以及其它丰富的通信接口,最重要的是具有的CAN总线接口,可以在复杂和干扰比较强烈的工业环境中进行通信。中小型游艺机经常在复杂的干扰比较强的环境中使用,采用带CAN总线功能的通信控制系统,在编制软件时也做好抗干扰算法,在实际项目的使用中证明其提高了系统的抗干扰性能,使设备稳定地工作。
参考文献
[1]刘和平,刘钊,郑群英,等.PIC18Fxx单片机程序设计及应用[M].北京:北京航空航天大学出版社,2005.
[2]阎石.数字电子技术基础[M].北京:高等教育出版社,2004.
CAN数据总线 第6篇
目前总线技术已广泛应用于工程机械中,其通讯方式大都以CAN数据总线为通讯基础,建立由多组电子控制单元组成的计算机网络控制系统。电子控制单元之间通过CAN数据总线实现数据传输,通过控制程序保证执行机构可靠有效的动作,实现工程机械安全、可靠、高效的运行。
工程机械上的CAN数据总线控制技术较为成熟,其控制软件不易出现故障,其故障一般都是由CAN数据总线、外接传感器、控制开关、相关连接线路等硬件问题引起。
若工程机械电路出现故障,通常先根据电路图分析故障原因,再使用万用电表、试灯等测试工具进行测试,即可排查出故障部位。但万用电表、试灯这种工具无法对控制程序进行测试,无法对某些CAN数据总线型传感器参数进行标定,也无法对电磁阀电流大小进行修改,只能作为CAN数据总线电路故障检测的辅助手段。本文介绍运用现代技术结合传统检测工具,排查CAN数据总线、外接传感器、控制开关、相关连接线路故障的办法。
2.故障排查方法
(1) CAN数据总线故障
CAN数据总线有2条导线,分别是CAN-High线和CAN_Low线,这2条导线电压一致(大约为2.5V),没有数据流时为静电平。当有信号时,CAN_High线上的电压会升高(幅值约1V),CAN_Low线上的电压会降低(幅值约1V),这样自然产生电压差。CAN_High线电压最高约为3.5 V,CAN_Low线电压最低约为1.5 V,通过数据压差进行信号传输。当压差超出范围或者CAN_High线、CAN_Low线交叉连接,将无法进行数据传输。CAN数据总线数据传递原理如图1所示。
为了消除在通信电缆中的信号反射(即阻抗不连续和阻抗不匹配),提高网络节点的信号传输质量(即拓扑能力),2根CAN数据总线两端需要接有1200抑制反射的终端电阻,如果没有安装终端电阻,可造成通信故障,导致设备无法正常工作。CAN数据总线120(Q电阻接法如图2所示。
两侧连接终端电阻,使用万用电表测量时的阻值为60Ω,终端电阻低于60Ω可能有以下3个原因:一是终端电阻连接多于2个;二是电阻阻值不是120Ω;三是传输导线之间存在短路现象。
总线电压存在异常可能有以下4个原因:一是电源至控制器之间保险丝(或者断路器)熔断;二是导线断路;三是地线虚接;四是插接件安装不到位。
如果通过排查均不是以上原因造成CAN数据总线故障,这时需要考虑更换相关控制器或总线型传感器,更换时要正确选择接点和接口,以及所能传递信号的速率(即波特率)。
(2)传感元件故障
传感器是将外部非电信号按照一定规律转换成电信号,并将电信号输出的器件。按照输出信号的类型,工程机械采用的传感器可以分为电压型传感器、电流型传感器、总线型传感器和编码器。
电压型传感器和电流型传感器均可采用万用电表进行测试,电压型传感器输出信号为0~10V的电压信号,可以用万用电表直接测试;电流型传感器输出的是电流信号,输出范围一般为4~20mA,可以用万用电表的电流挡测试。电压型传感器存在远距离传输信号衰减现象,适用范围小,工程机械大都不采用。
总线型传感器具有精度高、抗干扰能力强、传输速度快等优点,但其故障只能通过PC机或人机交互模块进行检测,使用万用电表无法进行性能测试,只可对其连接线束进行测试。
编码器是一种将角位移转换成数字脉冲电信号的旋转式传感器,多应用于需测量角度或计算圈数的部位。编码器的优点是测量范围大、便于设置起始点和终点,在安装时不需要费时、费力的寻找零点,将某一中间位置作为起始点就可以使用,从而大大简化了安装、调试难度。但是在检测时同总线型传感器一样,无法使用万用电表进行测试,只能通过PC机及人机交互模块进行检测。
(3)检测开关故障
造成检测开关故障的原因主要分为以下5个方面:一是检测开关安装位置不正确,造成检测开关行程内无法实现有效动作,调整检测开关安装位置即可;二是被测装置安装位置错误,造成检测开关无法正常反馈所采集的信号,调整被测装置安装位置即可;三是检测开关摇臂或凸轮动作过小,没有达到检测开关动作行程,调整摇臂或凸轮行程即可;四是与检测开关相连的线路接点接错或接触不良,查找是否存在错接线、线路是否短路即可;五是检测开关损坏,将其更换即可。
(4)线路故障
线路故障一般分为短路、断路和搭铁3种:
短路工程机械一般在每个分路上都设有熔断器进行短路保护,防止各分路的电流不流经用电器直接回到电源负极,造成回路电流过大,发生短路故障。检测此类故障时,可通过观察熔断器上发光二极管是否发光,即可判断是哪一路分支短路。再用分段法进行线路检查即可。如果分支电路中没有电流,即使熔断器已经熔断,发光二极管也不会发光。此时可检验线路是否短路,再将熔断器接通,使分支电路中有电流流通。
断路工程机械线路断路故障包括导线虚连、断路,虚焊等,其明显特征是线路始端有电,而终端无电。解决此类故障需要检查导线连接节点是否虚接,导线两端是否断路,导线是否接入对应的接点,通常要重点排查是否有错接以及接点氧化、腐蚀。
搭铁为了防止外部信号干扰,应用CAN数据总线技术的工程机械大都采用地线集中返回蓄电池负极的方法,此处所说搭铁故障与通常所说搭铁故障不同,此处所说的搭铁故障是由于运动磨损或机械摩擦造成线路绝缘层损坏,导线与其它金属部件导通所产生的短路故障。这种短路故障通过控制箱的地线连接端子无法测量,只能通过万用电表负极连接至金属外壳进行测量。
CAN数据总线 第7篇
在自动化数据采集与控制系统中,数据采集节点、控制节点通常是以单片机为核心的,数据采集节点、控制节点与主机之间的通信是必不可少的,以往的通信主要是采用RS232,RS485等总线标准已不能满足现代技术发展对通信的高速率、高可靠性、更远距离传输的要求。本文所采用的CAN总线是一种有效支持分布式控制或实时控制的通信网络,CAN总线控制器采用短帧传送,受干扰性小,发生的全局错误会100%被检出。同时,CAN总线最高传输速率可达1Mbps(在40m内),传输速率为5Kbps时,可传输10km[1,2]。因而,CAN总线具高可靠、高速传输性。正是由于这些特性,我们采用CAN总线完成这个采样系统的设计。
二、转向系统简介
本文中,智能车辆转向控制系统与电动助力转向系统(EPS)相似,但又存在本质的不同。电动助力转向系统以转向柱上的转矩和车速信号为输入,扭矩传感器将转向柱所受到的扭矩转化为电压信号输入控制装置并控制电机的助力大小和方向。而智能车辆转向控制系统由于车内无驾驶员,通过采集到的车速信号和整车与车道线的距离S、整车与车道线的夹角θ经ECU计算车所需的转向力矩,转向力矩完全由电机提供,是纯电动转向,即输出量对于输入量的跟踪来实现转向。其输入信号如图1所示。本系统主要是由机械转向装置、扭矩传感器、车速传感器、助力电动机、离合器、减速机构、电子控制单元(ECU)构成。电子控制单元根据车速传感器和扭矩感器输出的信号计算出所需的转向助力电机的驱动信号,并通过电机驱动模块控制直流助力电机的转动,电机的输出经过减速机构减速增扭后,驱动机械转向机构,产生相应的转向助力[3]。其工作原理示意图如图1所示:
由于智能车辆转向控制系统靠蓄电池提供能量,免去了液压装置,利用电动机直接来提供助力,转向力矩大小由ECU控制,提高汽车的操纵灵活性,只有在车辆偏离时才消耗能量,所以,由于本系统的应用能够节约燃料,智能车辆转向控制系统能够满足当前节能与环保的要求等优点。
三、系统硬件
本设计中MC9S12DG128单片机系统电路包括电源电路、时钟电路、复位电路、串口通信电路,CAN总线通信电路、BDM接口电路[4]等。本文只介绍CAN总线通信电路、复位电路和BDM接口电路。
MC9S12DG128内部集成了CAN总线控制器,因此只需要一个CAN总线驱动电路,就能完成CAN控制器与物理总线之间的接口。本设计中CAN总线驱动电路采用Philips公司的82C250作为总线驱动器,如图2所示:
复位电路使用低电压复位芯片MC34064。使用专门的上电复位电路使系统上电复位更加可靠。当然也可以用一只0.1uF的替代电路中的MC34064。手动复位按钮在系统调试时非常有用。
B D M接口是接BDM调试工具的,如图4所示。其中BDMIN接口是向MC9S12DG128单片机下载程序用的;B D M O U T是当应用程序为B D M调试器程序时,用作BDM调试器输出用的。
四、软件设计
CAN总线节点要有效、实时地完成通信任务,软件的设计是关键。它主要包括节点初始化程序、报文发送程序、报文接收程序以及CAN总线出错处理程序等,数据解释功能由主程序完成。
MSCAN模块的信息结构使其在很大的范围内获得使用。MSCAN具有四个接收缓冲区,他们按先进先出(FIFO)方式组织,具有同一个物理地址空间。MSCAN使用后台接收缓冲区,而CPU访问前台接收缓冲区。在接收时,检查每个信息是否通过检验,并并行写入后台接收区,当接收标志寄存器CANRFLG的“接受器满”标志RXF为0时,把后台接收缓冲区内容拷贝进前台接收缓冲区,并置位RXF,在允许时可产生中断。用户接受处理程序从前台接收区读出数据,并清零RXF,从而释放前台接收区。后台接收缓冲区紧跟新信息[5]。多通道数据采集的常用方式。
多通道数据采集一般是指同时对多路信号进行采样,并把采样信号按一定格式保存下来。目前,常用的方式有以下两种:
1. 每个通道使用一个独立的采样单元,包括采样保持电路、A/D转换器电路、采样计算机单元。该方式工作时,每个通道可独立地设定采样频率、采样启动和停止时间、采样数据的保存方式以及采样单元和数据处理计算机之间的数据传输方式。这种方式一般用于较大的数据系统,每个通道的采样数据量较大,采样频率较高。
2. 多个通道采用共享A/D转换器的方式,该方式下的每个通道通过一个多路转换开关,按某一时间间隔,依次将各个通道的信号输入到采样保持电路,再经A/D转换器将模拟信号转换成数字信号。A/D转换器输出的数字信号,通过相应的计算机接口电路,输入到计算机进行保存。该采样方式的工作过程中,每个通道的采样频率相等,统一在一台计算机的控制之下,通过扫描的方式,依次将各通道的模拟信号转换成数字信号,由计算机将其读入并保存[6]。该方式一般用于数据量不大且采样频率不高的场合。
因为在本系统中用的主控CPU是MC9S12DG128单片机,它内部集成了A/D转换器电路和采样计算机单元,并且有10路集成的A/D转换电路,所以采用了第二种采集方式。
MSCA N有三个发送缓冲区:在发送信息时,CPU应先检测是否有空的发送缓冲区,然后把标识符、控制场和数据内容写入发送缓冲区。最后通过清发送标志寄存器CANTFLG的TXE位表示可准备发送缓冲区内容。MSCAN选出需发送的信息,并通过置位TXE表示已成功发送该缓冲区的内容。允许时,TXE可产生中断,并用于驱动应用软件来更新装入缓冲区。
CAN为了提高抗干扰能力和数据的可靠性,采用了多种错误检测手段。当产生“溢出”、“错误”、“警告”等出错条件时,均会产生出错中断。
报文的接收主要有中断和查询两种方式。为了提高通信的实时性,本设计采用中断方式实现CAN总线的通过程。节点的初始化与中断程序流程图如图5所示。
五、结束语
本文设计的基于CA N总线的智能车辆转向数据采集系统实际应用中运行良好,传感器数据的采集率在10kHz时系统工作稳定,没有发生总线超载现象,采样数据无错误,能够通过CAN总线在上位机实时显示和保存采集到的数据曲线,达到理想的效果。解决了在传统的工业通讯控制方式RS232串行协议中的一些弊端,实践证明了CAN总线的数据采集系统具有通信距离远,数据传输率高,可靠性极高,抗干扰能力强,具有非破坏性总线仲裁,支持竞争,后期维护成本低,可靠的错误处理和检错机制,通讯失败率低,总线利用率高,网络调试容易等优点。
参考文献
[1]黄天戌.袁学文.程安宇.一种基于CAN总线的数据采集系统.国内外机电一体化技术.2004
[2]邬宽明.CAN总线原理和应用系统设计.北京:北京航空航天大学出版社,1996.11
[3]周淑辉.李幼德.李静.林新春.李春峰.汽车电子控制转向技术的发展趋势.汽车电子.2007.12
[4]王雄波.基于模糊控制的电动助力转向系统的研究与开发.湖南大学[硕士学位论文]2008.4
[5]邵贝贝.单片机嵌入式应用的在线开发方法[M].北京:清华大学出版社.2004
[6]葛林.周文华.CAN通信网络在汽车中的应用研究[[J].设计?计算?研究.2000.11
CAN数据总线 第8篇
在野外复杂环境中, 通常将采集节点数据汇总至流动站, 再由流动站统一接入互联网。局部数据的传输方式可有多种选择, 需要综合考虑距离、便捷性、可靠性及成本等多种因素。本文中设计了一种采用控制器局域网 (CAN) 进行地震数据传输的方式, 以满足分散的采集点能在相对较广范围内进行组网通信的要求。
1 系统框架
本文以激光多普勒地震仪项目为背景进行系统构建, 主要解决将分散的采集点进行集中管理的问题。由于野外采集点数量众多, 且安装位置较分散, 若都与流动站之间直接组建局部网络连接, 则无论采用何种组网方式, 都必将加重人力、物力的投入, 同时也会加重流动站的管理负担。因此, 本文采用中继站的思想, 将一定区域内的采集点利用总线方式汇总到主控机上, 再由主控机统一将数据传输到流动站, 系统结构如图1所示。采用这种分布式结构, 一方面可以降低采集点组建网络的成本, 另一方面主控机可以取代部分流动站的功能, 对本局域网内的采集点进行管理和监控, 便于组成规模更大的野外流动站。
系统采用的控制器局域网 (CAN) 是一种ISO国际标准化的串行通信协议, 能有效支持具有很高安全等级的分布实时控制。相对于其他总线, CAN总线具有传输距离远、速度较快、抗干扰能力强、介质简单、可靠性高等优势[2,3], 适合野外无人值守的环境。
2 采集节点的CAN通信实现
项目中采集点的主控芯片采用TI公司C54系列DSP, 因芯片不带CAN控制端口, 所以要在DSP平台上实现CAN通信节点的设计。
2.1 基于DSP的传输节点设计
项目选取SPI接口的独立控制器MCP2515作为总线控制端, 收发器采用带有隔离的总线收发器ADM3054, 该芯片直接将隔离器和收发器集成到一起, 省去了控制器与收发器之间的光耦隔离, 同时也可解决控制器与收发器之间的电平匹配问题, 简化外围电路设计。
将DSP的多通道缓冲串行口 (Mc BSP) 配置成SPI兼容模式, 这种模式下每一帧的长度是固定的。但MCP2515的SPI控制指令长度并不统一, 因此, 采取折中方案以最长的指令位数来配置串行口。
使用SPI模式通信时, 关键的问题是时序的匹配, 因为DSP的工作时钟频率远高于SPI传输时钟频率, 所以需要在读操作时加入足够长的延时。图2中的 (a) 、 (b) 可反映这一情况, 采用控制器的环回模式进行测试, Data Send数组中存放的是发送的8 B数据, Recv Buff数组中存放的则是通过SPI读取接收数据寄存器得到的值。图2 (a) 是没有加入足够延时的读操作, 从虚线框标出的数据看出, 读操作在时间上发生了错位, 当前的读操作实际读到的是上一个指令传送回来的数据, 而图2 (b) 在加入了足够长的延时之后, 能在时间上对应, 读到正确的数值。
2.2 节点的通信策略
CAN协议所采用的对报文进行地址编码的方式便于在总线上增删节点。在本项目中, 由于各个节点都只与主控机进行通信, 所以, 充分利用CAN报文帧ID识别码的特性, 将发送帧的识别码、本节点的编码以及本节点接收滤波器的识别码相统一。而主控机的节点则可以读取所有总线上的报文, 所采用的通信策略如图3所示, 这样的设计实际上就将原先总线式的拓扑结构转换成了类似星形拓扑的结构, 便于主机管理所有节点。
3 主控制点的设计
相对于采集节点单一的采集处理任务而言, 主控机需要实现更多的功能, 单任务的MCU则无法满足要求。因此, 本文选用嵌入式微处理器ARM11作为主控机的硬件平台, ARM处理器具有丰富的外设接口和良好的实时控制性能, 无论从寻址空间还是处理性能上, 都要优于一般的单片机, 适合充当小型控制中心。
3.1 Linux下CAN网络设备驱动的实现
项目中移植了Linux 3.0.1版本内核作为软件运行的系统平台, 内核会为驱动提供统一的接口。在较新版本的内核中, CAN设备已经不再简单定义成字符设备, 而是定义成网络设备, 这更接近于CAN是一种局域网的本质, 从而可以使用Socket套接字操作CAN设备, 并使用内核提供的高级功能。
对内核已提供的MCP2515的驱动文件进行修改以符合硬件平台的实现。通过定义mcp251x_priv结构体来管理设备所有的信息, 如下所示:
以上3个结构体变量分别存放了设备需要使用的协议层、网络层和硬件层的相关信息。通常, 网络设备驱动模块主要包括网络协议接口层、网络设备接口层、设备驱动功能层和网络设备与媒介层4层[4], 各部分模块在内核中的结构关系如图4所示。设备通过SPI子系统来实现硬件层操作, 网络设备与SPI设备之间的连接桥梁是驱动功能层struct net_device_ops, 通过它向上层提供网络设备的底层硬件操作接口函数:
采用“顶半部”和“底半部”的机制来处理中断, 可以解决在中断中读写SPI耗时的问题, 这种机制将耗时过长的中断程序放到更安全的时段中运行, 以使系统能及时响应其他的中断请求[5]。因此, 仅仅在中断函数中唤醒一个处理函数的工作队列:schedule_work (&priv->irq_work) , 而将真正的处理程序放到这个工作队列中运行, 以保证系统实时响应的性能。
运行驱动还需要向内核注册必要的硬件信息, 如晶振频率 (.oscillator_frequency) 、SPI总线号 (.bus_num) 、硬件中断号 (.irq) 等硬件信息。其中设备名 (.modalias) 必须要和驱动中定义的设备名相同, 否则内核无法把这些信息传递到驱动中。
3.2 基于Qt的控制应用程序开发
上层应用程序是实现主控制点所有功能的入口, 也是人机交互的平台。项目采用跨平台的C++应用程序开发框架Qt来实现图形化用户界面程序的开发, 其具有良好的适应性和可移植性[6]。
本系统中移植了4.8.0版本的Qt库, 如图5所示。项目应用程序的主要框架通过窗体部件类QWidget来构建。为了使界面更直观, 加入了对标签窗体类QTab Widget的支持。同时, 主控机的Socket CAN通信功能由多线程来实现, 多线程机制可以使Qt程序在同时运行多个阻塞式任务时, 不会影响用户界面的响应。
子线程类Recv Thrd主要实现对CAN口的监听任务, 并通过信号-槽机制将数据传给主线程, 重写虚成员函数void Recv Thrd::run () 加载新的线程任务。Socket CAN的使用类似于其他网络协议操作, 主要包括建立套接字、绑定端口和监听等, 不同的是CAN通信不需要与对方建立连接, 主要实现方式如下:
如图6所示, 使用绘图类QPainter在子窗口Graph中实时显示动态数据曲线和坐标。绘制坐标曲线时首先要使用QPainter的视窗转换函数将Qt中默认的绘图坐标原点从屏幕的左上角移到左下角。动态曲线采用折线方式绘制, 当曲线超过一定宽度后, 会实时向左平移。由于在Qt中使用专门定义的数据类型, 所以C中的通用数据类型都需经过特定转换后才能供Qt使用和显示。管理数据和文件时使用流操作可有效减少系统调用次数, 提高运行速度[7]。
4 测试与总结
将Qt应用程序交叉编译后, 下载到ARM平台上运行, 产生图6中的标签式窗口界面。在构造主窗体时传入Qt::Frameless Window Hint参数, 可以让界面不产生标题栏, 使窗口界面能准确并完整地显示在液晶屏上。
当主线程检测到新的地震采集节点号时, 会弹出消息框通知用户处理, 新节点会被加入每个子窗口的设备列表中, 或被丢弃。引入Qt的互斥锁QMutex机制, 可以有效避免因命令没有得到及时处理而导致重复添加相同ID号的情况。在另外两个子窗口中可以浏览接收的数据以及管理对应节点。
测试表明, 基于ARM平台的主控机可以满足数据收发、实时显示、节点监控以及异常记录等多任务要求, 在不影响与地震采集节点间通信的前提下, 实现良好的人机交互和实时控制性能, 在整个网络系统中起中继站的作用, 方便了流动站对分散的地震采集节点的控制和管理。
本文设计了一种采用CAN总线通信技术在地震数据采集点与流动站之间进行数据传输的方式, 利用CAN总线通信传输距离长、抗干扰能力强、易于施工布线的特点, 以及微处理器ARM优越的实时控制能力和良好的通信能力, 在地震采集节点与流动站之间构建中间控制点, 以星形拓扑的方式将一定范围内分散的采集点集中控制。同时, 通过在ARM硬件平台上构建Linux多任务系统平台, 采用Qt嵌入式应用程序框架搭建人机交互界面, 实现了良好的实时控制和管理功能。这种基于CAN总线和嵌入式技术的地震数据传输方式, 既便于野外环境中网络的组建和拓展, 也有利于减轻流动站的管理任务。
参考文献
[1]王晨, 滕云田, 王晓美, 等.地震前兆野外流动观测无线组网系统[J].地球物理学进展, 2012, 27 (3) :945-949.
[2]郭成镇, 何迪.CAN总线的PLC通信网络的研究[J].通信技术, 2012, 45 (7) :51-53, 74.
[3]梁金芝.CAN总线协议在嵌入式系统中的应用[J].电脑知识与技术, 2011, 7 (20) :5003-5004.
[4]宋宝华.Linux设备驱动开发详解 (第2版) [M].北京:人民邮电出版社, 2010.
[5]CORBET J, RUBIN A, KROAH-HARTMAN G.Linux设备驱动程序 (第3版) [M].魏永明, 耿岳, 钟书毅, 译.北京:中国电力出版社, 2005.
[6]BLANCHETTE J, SUMMERFIELD M.C++GUI Qt 4编程 (第2版) [M].闫锋欣, 译.北京:电子工业出版社, 2008.
CAN数据总线 第9篇
关键词:现场总线,CAN总线,STM32,数据采集
CAN(Controller Area Network,控制器局域网)是一种有效支持实时控制的串行数据通信网络。自上世纪80年代诞生以来,CAN总线以其可靠性好、实时性高及组网简便灵活等优势而受到人们的青睐,并在众多行业领域内得到了广泛的应用。
随着工业技术的不断进步,控制过程的自动化与网络化是必然的发展趋势,同时数据的传输量越来越大,对数据传输的实时性要求也更加苛刻。笔者采用内置CAN控制器的高性能微处理器STM32F103C8T6作为节点的微处理器,使用带隔离的高速集成CTM1050T作为CAN收发器,数据输入输出通道采用光电耦合器进行隔离,设计了CAN总线系统的数据采集节点。本设计节点具有体积小、功耗低、抗干扰能力强、实时性高及数据处理能力强等优势。(1)
1 系统总体结构
CAN总线作为一种工业现场总线,它将传统分布式控制系统结构中主机的常规测试与控制功能分散到现场各节点来完成。这样主机便从原来繁重的底层设备监控任务中解放出来,从而实现更高层次的控制和管理功能。
工业现场的CAN总线系统可由上位机(PC机或工控机)、数据转换器和现场的节点构成[1,2]。上位机通过数据转换器接入CAN总线,带有CAN接口的现场节点作为从机挂接在CAN总线上,系统的总体结构如图1所示。主控节点由运行于上位机的由Lab View编写的监控软件来实现,它主要实现现场节点的监控及数据的显示、分析和存储。数据转换器采用RS-232转CAN,它主要实现串口协议与CAN协议之间的桥接,并将接收的数据进行转发。各节点与工业现场的仪器仪表相连接,不分主次地挂接在CAN总线上,它主要实现数据的采集与处理,并接收来自CAN总线上的数据或将数据发送到CAN总线上。笔者主要介绍现场节点的设计,它主要由微处理器(内嵌CAN控制器)、CAN收发器及功能I/O等部分组成。
2 硬件电路设计
节点的硬件设计结构框图如图2所示,硬件电路构成主要有:STM32F103C8T6微处理器、外部电源、LED指示、SWD接口、CAN接口、数字量输入、数字量输出、节点地址及波特率设定等[3,4]。
主控芯片为ST公司的STM32F103C8T6型微处理器,该微处理器具有体积小、功耗低及性能高等优势。它有丰富的片上资源:37个可独立编程的I/O;两个12位模数转换器;最高时钟工作频率可达72MHz;64KB的FLASH存储器;2KB的RAM;支持SWD(Serial Wire Debug,单线串行调试)和JTAG调试模式,可完全满足设计要求,并为以后系统功能的扩展提供了广阔空间。它本身集成了CAN控制器,支持CAN协议2.0A和2.0B,位通讯波特率可达1Mb/s,完全符合J1939规范。微处理器主要完成一些初始化工作,控制数据的接收与发送,按照应用程序控制数据的采集与处理。
外部供电采用工业常用的24V电压,CTM105T的供电电压为5V,STM32的供电电压为3.3V,故电源模块采用带电源隔离的IB245LS(24V转5V)和SPX1117(5V转3.3V)。为防止电源反接造成危害,在电源输入部分可串接一个二极管。
SWD接口与传统的JTAG调试接口相比其速度更快、更加方便和简捷。特别是当项目中对板子空间要求严格,I/O资源紧张的情况下,采用SWD接口会更加有利。
CAN收发器采用CTM1050T,它是一款带隔离的高速CAN收发器芯片,具有DC 2 500V的隔离功能和ESD保护作用,完全符合ISO11898标准。该芯片内部集成了所有必需的CAN隔离和CAN收、发器件,具有体积小、性能可靠及接口简单等优点。该模块的主要功能是将CAN控制器的逻辑电平转换为CAN总线的差分电平。CAN总线网络采用差分信号传输,为防止因电阻不匹配而引起的信号反射,需要在网络的两端加上120Ω的终端电阻。
数字量输入输出部分,可实现远程I/O数据采集和控制。数字量输入部分分别接到PA0~PA7上,构成8路数字量的输入[5,6]。同样数字量输出部分分别接到PB0~PB7,构成8路数字量的输出。输出的驱动采用三极管的集电极开路结构,故可根据外接电压的不同而提供不同的驱动。输入输出通道都采用光耦进行隔离,可防止外部干扰对CAN总线节点的影响。
节点地址和波特率设定采用8路拨码开关,分别与微处理器的PB8~PB15口相连接。低6位用于设定节点地址,高2位用于设定节点的波特率。
3 软件设计
软件调试环境采用ARM公司最新推出的针对各种嵌入式处理器的软件开发工具Real View MDK。它集成了业内最领先的技术,融合了中国多数软件开发工程师所需的特点和功能,提供了完善的设备调试和软件仿真功能,包含了众多的案例模板和固件实例,支持多种调试接口(如UART、JTAG及JLINK等),可大大减小开发难度,缩短开发周期。本设计采用JLINK仿真器支持的SWD调试功能。
CAN节点主程序流程如图3所示,主程序通过查询的方法发送数据,采用中断方式接收数据。节点的主程序主要包括系统及外设初始化、CAN控制器初始化、数据发送、数据接收和应用处理部分。
3.1 CAN控制器的初始化
STM32F103内部集成了单路CAN控制器,其初始化内容包括:CAN的I/O模式及时钟的配置、开CAN外设时钟、CAN中断优先级的分配、使能相应的CAN中断、通讯模式初始化、波特率初始化和过滤器初始化。利用STM32开发商提供固件函数库,只需按照实际应用作相应修改即可。
3.2 报文的发送
CAN发送报文数据的流程为:应用程序选择1个空发送邮箱;设置标识符、数据长度和待发送数据;请求报文的发送。
请求发送后,发送邮箱就进入挂号状态,并等待成为最高优先级的邮箱,此时的发送邮箱就不再是空邮箱,软件对其不再有写的权限。该挂号邮箱成为最高优先级的邮箱后,其状态就变为预定发送状态。随后开始监听CAN总线,一旦CAN总线进入空闲状态,预定发送邮箱就转入发送状态,此时发送邮箱中的报文就被发送出去。报文被发送成功后,就将该邮箱释放,以便后续报文的写入。
3.3 报文的接收
STM32中有两个三级邮箱深度的接收缓冲区,每个接收缓冲区都配备了多个验收过滤器。CAN控制器首先将接收的报文标识符与已设定的验收过滤标识符进行匹配,如果相匹配,则认为该报文是有效的,该报文被放入接收缓冲区,否则就丢弃该报文。报文的接收过程由硬件来实现,从而节省了CPU的处理负荷,简化了软件设计并保证了数据的一致性。应用程序通过读取FIFO输出邮箱,来读取FIFO中收到的报文,然后释放接收缓冲区以便接收后续报文。
4 结束语
以STM32微处理器为核心,设计了CAN总线的智能数据采集节点。采用CAN接口作为节点的通信接口,具有通信可靠、抗干扰能力强、传输速率高和组网简便灵活等优势。该节点能够进行远程I/O监控,实现了过程监控智能化和网络化,在工业测控领域有广阔的应用前景,尤其是在数据处理量较大和实时性要求更高的场合,该设计节点会更加有优势。
参考文献
[1]王黎明.CAN现场总线系统的设计与应用[M].北京:电子工业出版社,2008.
[2]黄明,梁旭,岳洋.基于CAN总线设计实现的数据采集监控系统[J].化工自动化及仪表,2010,37(6):79~81.
[3]张戟,程昊,谢剑英.基于现场总线DeviceNet的智能设备开发指南[M].西安:西安电子科技大学出版社,2004.
[4]于泓博,朱恒军,李会.基于CAN总线和ZigBee的矿井瓦斯监测系统设计[J].化工自动化及仪表,2011,38(6):722~725.
[5]李真花,崔健.CAN总线轻松入门与实践[M].北京:北京航空航天大学出版社,2011.
CAN数据总线
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


