基于PC/104的多CAN-Bus系统设计
扫描二维码
随时随地手机看文章
1 引言
PC/104嵌入式控制PC出现于80年代末,并于1992年形成IEEEP966.1标准。它一方面继承了PC的所有资源,另一方面又对PC的各个方面做了优化设计,使其与IBM PC完全兼容,并具有体积小,功耗低,工作温度宽,可靠性高等特点;它采用了独特的"自栈式"总线连接、模块化结构,使用起来灵活方便;它采用面向对象的硬件设计方法,使得在PC/104标准上开发的扩展模块具有更强的通用性和更长的生命期;它以其优良的品质、高可靠性及模块化,广泛应用于工业控制、航空、军事、医疗、消防设备、智能、导航、通讯、数控、自动化生产设备、便携式计算机等领域。 在实际应用中,一个较为复杂的系统,往往不是由单个计算机独立控制,而是由多个计算机组成通信网络共同完成控制的过程。因此,对于每一个嵌入式计算机来说,除了连接必需的外设之外,还需要考虑计算机之间的通信。
控制器局域网(简称CAN)是目前国际上应用最广泛的现场总线之一。最初,CAN被设计用作汽车中的微控制器通讯,在车载各电子控制装置ECU之间交换信息,形成控制网络。CAN是一种多主机方式的串行通讯总线,能够使用诸如双绞线、光纤等多种物理介质,其中最常用的就是双绞线。它的基本设计规范是要求具有高的位速率和高的抗电磁干扰性,而且要求能够检测出任何错误。由于CAN总线具有高实时性、卓越性能、高可靠性、独特灵活设计和低廉价格,已广泛应用于工业现场、控制、智能大厦、小区安防、交通工具、、环境监控等众多领域,目前,已被公认为是几种最有前途的现场总线之一。
2 系统的硬件设计
设计的系统采用合适的档次(以功能、性能够用为标准)、高性价比、CPU为X86(相当于586)、300 MHz的PC/104模块作为主控单元,以的+作为CAN接口器件和收发器;以公司的器件作为逻辑控制和译码单元。整个系统共设计4个CAN接口,其中两个用于外部远距离通讯,工作在5 Kb/s下,另外两个用于近距离通讯,工作在1 Mb/s下,当然这4个CAN接口的硬件是完全相同的。另外,系统还扩展了一个5英寸、320×240点阵的单色屏、按键和指示灯组成的人机接口。图1给出该系统硬件原理框图。
2.1 I/O端口地址分配表
由于系统在PC/104的基础上扩充了CAN、、指示灯和按键等资源,要对其进行访问和操作时,必须为它们分配地址,但分配的地址又不能与PC/104原有的I/O接口地址冲突,所以分配地址之前,必须搞清楚所选用的PC/104模块的地址分配表,即搞清楚哪些地址范围已被PC/104占用,哪些区域是空闲的。新分配的地址只能占用空闲区域,否则会引起端口冲突,导致系统不能正常工作。表1给出PC/104的I/O端口地址分配表。
PC/104总线能访问64 K个I/O端口,但实际上只用了1 K端口地址(~3FFH),其中256个单元(~OFFH)分配给系统板上的I/O接口器件,其余的768个单元(100~3FFH)分配给扩充卡。当然,现在的PC/104功能非常强大,板上集成了许多接口,如:多个串口、USB、 LAN、GPIO等,它们都要占用端口地址。所以,在实际应用中,必须以所选用的PC/104为准,选出一块空白的地址区域,对上述系统资源进行编址。该系统设计选取地址为180~1BFH。
2.2 中断源的分配
在数据通讯中,数据的接收是随机的、突发的,所以通讯方式必须采用中断接收方式;(数据的发送是可控的,可以采用查询方式,也可以采用中断方式。为此,必须对CAN的中断号进行分配。表2给出PC/104的中断分配表。
由表2可见,IRQ10、IRQ11、IRQ12、IRQ15系统不用,故系统设计选用这4个中断作为CAN的中断号。
2.3 设计
由于系统资源较多,必须采用完成复杂的逻辑设计。设计工具采用提供的MAX+ II工具软件。图2示出设计的CPLD逻辑原理图。PC/104的地址总线A9~A3经比较器和译码器。其中一路输出接4路输入或门的一个输入端,再配合低位地址A2~A0、nWR、nRD等信号,即可得到CANOnWR、CANOnRD、CANOALE等的控制信号;CAN0中断输出信号经反向器接入PC/104的IRQ10。另外,PC/104的数据总线D0~D7直接与的AD0~AD7相连,并一一对应(图2中略)。
由于PC/104的地址总线和数据总线是各自独立的;SJA1000的地址总线和数据总线是分时复用的,所以它们之间不能直接相连,必须通过逻辑控制,再配合软件来实现读/写操作。
图2只给出1路CAN接口的逻辑原理图,3路原理与其相同。对SJA1000的操作方法是:首先,对地址为CAN0首地址+0(A2A1A0=000)的端口进行写操作(nWR为低,有效),CAN0ALE为高,有效,此时复用的地址/数据总线上的数据被视为地址信号,进入SJA1000内部锁存器;然后,对地址为CAN0首地址+1(A2A1A0=001)的端口进行读或写操作(nRD/nWR为低,有效),CAN0ALE为低,上述中的地址信号已被锁存,此时复用的地址/数据总线上的数据被视为数据信号,这样即可完成对SJA1000的各个寄存器和缓冲区读或写操作。另外,译码器还要输出对、指示灯输出、按键采集等电路的片选信号。
3 系统的软件设计
为方便软件调试,软件开发和运行的操作系统采用DOS6.22;软件开发环境采用Turbo C++/ C++编译器。
3.1 软件流程图
图3a给出采用模块化设计的系统软件流程图。其中系统初始化模块负责完成对系统的中断、时钟、I/O端口、串口、CAN接口等资源的配置;LCD显示界面初始化模块负责完成系统的工作界面显示;CAN发送呼叫模块通过CAN-Bus呼叫各子模块,各子模块在收到呼叫命令后,将采集的数据发送给主机,同时主机也可将系统的设置参数或动作指令发送给各子模块;CAN接收数据处理模块负责处理收到的各种数据;键盘采集处理及LCD显示刷新模块负责系统采集和处理键盘命令,并通过LCD显示出系统执行结果和各种状态信息。图3b给出系统中断服务子程序,包括4个CAN中断服务子程序和定时中断服务子程序等。
3.2 软件代码
在软件代码中,中断向量的和PC/104对SJA1000的操作比较重要。下面以CAN0为例进行详细说明。
3.2.1中断向量的
3.2.2 PC/104对SJA1000的操作
由于篇幅有限,其它子程序不再详述。
4 具体应用结果
采用该方案设计了铁路道岔融雪系统。整个系统的PC/104子系统多达10个以上;各子系统的最远距离达7~8 km,它们都以远距离、低速的CAN-Bus与车站中央控制系统相连。每个以PC/104为核心的子系统中都有电流采集模块、电压采集模块、轨温采集模块、I/O模块等,它们都以近距离、高速的CAN-Bus与PC/104模块相连。另外,系统还可扩展、无线模块。这样可以组成了一个功能强大的分布式控制系统。目前,正在对系统的各功能、技术指标等进行测试。由于系统方案设计合理,整个系统运行稳定、可靠,因此取得了较好的效果。
5 结语
目前,嵌入式工业计算机PC/104的档次很多,其CPU从低端的386、486、X86…一直到高端的 III,IV等,应有尽有,运行的操作系统可以是DOS、、WinCE,也可以是,所以以PC/104平台来搭建控制系统具有广泛的适应性和可扩展性。