CAN总线是一种开放式、数字化、多点通信的串行总线,是一种具有较高性价比、能满足分布式控制要求的现场总线,在控制领域得到广泛采用。CAN的速率可达到1 Mb/s/40 M,最大传输距离可达10 km/5 kb/s。为了扩展CAN总线的监控、管理功能,需要一种实时、可靠的CAN总线PC适配器,实现对CAN总线监视、控制和操作。本文利用TMS320LF2407芯片自带CAN模块,设计成CAN的一个特殊节点。使其即能通过PCI接口同PC机进行数据交换,又能独立与PC机自主运行。
2 适配器的硬件设计
2.1 CAN接口实现
以往CAN总线适配器多数采用Intel82527、Philips公司的SJA100等芯片来完成CAN通信控制。本文利用TMS320LF2407内嵌的CAN模块作为CAN通讯控制器,该模块是一个16位的外设模块。他完全支持CAN 2.0B协议,可工作在标准模式和扩展模式,支持数据帧和远程帧,数据收发采用邮箱方式;有可编程位定时器,可对中断配置编程,可编程实现总线唤醒功能;能自动回复远程请求,有完备的错误诊断功能;可进行自测试,有自动收发功能。PCA82C250是驱动CAN控制器和物理总线间的接口芯片,与DSP2407的CAN模块相连,完成DSP对CAN总线的差动发送和接收功能。
2.2 PCI接口实现
采用H.X公司的PCI9052实现PCI总线接口功能,PCI9052可与多种局部总线相连接,并且可支持相对慢的局部总线,在PCI总线上达到突发传输速率132 m/s。PCI9052拥有读写FIFO,32位的字宽,33 M的PCI总线时钟频率。主要功能与特性如下:
(1)符合PCI2.1规范的目标,接口芯片支持低成本从属适配器;
(2)支持非复用或多路复用8位、16位、32位局部总线;
(3)串行E2PROM用于装载配置信息;
(4)具有5个局部地址空间和4个局部地址空间的片选信号;
(5)支持局域总线与PCI时钟的异步运行。
2.3 总体设计思想
适配器采用存储器共享的方式实现DSP与PC的数据交换。其中共享存储器选用集成双口RAM IDT7130。IDT7130容量为1 kb,其左口连接DSP2407,右口连接PCI9052,使用存储器寻址方式。同时,对IDT7130 2个端口的仲裁采用的是中断线的方式。片上的DSP和PC机通过互发中断来读取IDT7130的数据。这样使IDT7130成为上位机和DSP的数据交换中介,DSP能够实时处理从上位机传来的命令和数据,同时把各个CAN节点的信息传给上位机。利用一块串行E2PROM(93CA6B)存放适配器的PCI配置信息。上电后访问93C46B,实现本适配器的自动配置。Altera公司的EPM7064S完成地址译码和逻辑控制。适配器原理图如图1所示:
2.4 电源、地及噪声的处理
在本设计中对电源的处理首先将模拟部分的电源和数字电路部分的电源进行隔离,即分别供电。模拟电路部分的5 V电源分别取自PCI总线上的12 V电源,经线性稳压后,再经去耦、滤波后引至专门设计的模拟电源平面。数字部分的5 V电源直接取自PCI总线上的5 V电源。数字部分的3.3 V电源亦取自PCI总线上的5 V电源,经稳压后得到。在PCB的层结构设计中也充分考虑到尽可能地保留完整、大而积的电源平面层。适配器的“地”事实上分为模拟地和数字地2部分。这2部分最终在电源平面入口处相连。使得模拟地相对干净。从而减少叠加到信号上的噪声,有利于提高信噪比。
3 适配器的硬件设计
适配器的硬件设计主要包括2部分:PCI适配器驱动软件部分和DSP数据采集处理软件部分。
3.1 PCI适配器驱动程序设计
由于PCI设备的中断,1/0端口、映射内存等资源都是动态分配的,必须编写驱动程序管理硬件,才能供用户编程使用。考虑到适配器的通用性和兼容性,驱动程序的开发采用支持Windows XP,Windows 2000,Windows 98的WDM驱动程序。开发工具采用Visual C++6.0。WDM(WindowsDriver Model)是NT4.0内核模式设备驱动程序模型的扩展形式,是为基于Windows 2000的设备驱动程序提供的一种新的开发模型。本设计使用开发工具WINDRIVER大大简化驱动程序的开发。通过DiverWizard开发者很容易生成驱动程序框架,同时,WINDRIVER和VC有很好的接口。生成驱动框架后在VC中就可以通过在工程项目中加入9052_lib.c,在应用程序开头直接引用#include"9052lib.h",并0添加特定的驱动代码完成驱动程序的编写。下面是驱动程序主函数的部分代码: