摘 要:文章简要介绍了PCI总线从模式接口芯片PCI9052的主要特点、结构组成和特色功能,并通过一个实例介绍了PCI9052在运动控制卡中的典型应用,具体包括运动控制卡的实现原理,硬件电路、驱动程序、功能库函数和操作界面的设计及其抗干扰措施
关键词:PCI总线;PCI接口芯片9052;运动控制卡
一:引言
目前,国外有关运动控制方面的技术已经比较成熟,其研究的内容主要集中在提高运动控制器的灵活性,可集成性及标准化程度三个方面。而与国外相比,我国在运动控制领域的研发起步较晚,国内有关这方面的产品在稳定性、可靠性和实用性方面仍然存在诸多问题。因此开发一款成本低廉、功能强大稳定的运动控制卡具有良好的应用前景。
二:PCI总线接口芯片PCI9052
PCI总线是一种先进的高性能32/64位地址数据复用局部总线,可以同时支持多组外围设备,具有高数据传输率、即插即用、低功耗、适应性强等特点。一般,实现PCI总线接口的方法主要有两种:一是采用CPLD或FPGA设计PCI接口,这种方法比较灵活,但是其难度较高,设计周期也较长。二是采用专用的PCI接口芯片,可以大大减少设计者的工作量,从而缩短开发周期,降低开发成本。而本运动控制卡采用PCI9052芯片进行设计。
1:PCI9052的主要特点有 :
(1)、支持突发操作:PCI9052提供读写FIFO,支持突发存储器映射和I/O映射方式在 PCI总线和局部总线存取数据。
(2)、可编程局部总线配置:PCI9052支持多路复用和非多路复用的8/16/32位局部总线。
(3)、先读模式:即预锁存数据可从PCI9052内部FIFO寄存器先于局部总线读取。
(4)、四个局部片选信号(五个局部地址空间):其基地址和每一个片选(局部地址空间)的范围可由串行EEPROM或主控设备进行编程。
(5)、PCI锁定机制:PCI主控设备可以通过锁定信号独占对PCI9052的访问。
2:组成结构
如图1所示,PCI9052是由PCI 总线接口逻辑、局部总线接口逻辑、串行EEPROM接口逻辑和内部逻辑组成。
3:PCI9052的部分功能及操作
(1)、初始化
在上电时,PCI总线将PCI9052的内部寄存器设置为缺省值,同时,PCI9052输出局部复位信号,并且检查EEPROM是否存在,如果其存在且第一个16字节非空,则PCI9052根据EEPROM内容设置内部寄存器,否则设为缺省值。
(2)、复位
PCI9052支持硬件复位和软件复位。一、硬件复位:当RST#信号输入有效时,将引起整个PCI9052复位,并输出LREST#局部复位信号。二、软件复位:通过设置CNTRL中的软件复位字节来复位,并输出LRESET#信号。PCI9052保持这个状态直到PCI总线上的主机清除软件复位字节。
(3)、对串行EEPROM接口的访问
复位后,PCI9052开始读串行EEPROM,若读出的第一个字非FFFFH,则继续进行读操作,否则认为无效。PCI总线的主设备对EEPROM进行读写操作之前需要将寄存器位CNTRL[25]设置为“1”,并控制CNTRL[24]位以产生串行EEPROM的时钟,然后从EEDI送入指令代码。结束操作时,将CNTRL[25]设置为“0”即可。
(4)、对内部寄存器的访问
PCI9052提供了两种类型的片内寄存器,即PCI配置寄存器和局部配置寄存器,二者都可以由PCI总线和串行EEPROM访问,也可以通过设置CNTRL[13:12]禁止对串行EEPROM的访问。这些寄存器主要有:(其中“*”表示数值,取值范围是0~3)
<1>、设备与厂商寄存器:用于标识设备类别和制造厂家。
<2>、状态寄存器:内含与PCI总线相关的事件信息。
<3>、命令寄存器:控制设备对PCI访问的响应。
<4>、地址范围寄存器(LAS*RR):用于定义板卡上资源所占用的地址空间的大小。
<5>、基址寄存器(LAS*BA):用于定义板卡上资源所占用的基地址,并将之重映射到
PCI地址空间中,以便PC机对板卡进行访问。
<6>、总线区域描述寄存器(LAS*BRD):用于定义地址空间的具体工作特性。
<7>、片选信号控制寄存器(CS*BASE):用来确定片选信号有效的地址范围,从而为硬件提供片选信号CS*。
(5)、PCI中断(INTA#)的产生
要产生中断INTA#,首先将INTCSR[6]设置为“1”。若以软件方式产生中断,只需将INTCSR[7]设置为“1”即可;如果需要由局部总线上的设备产生中断信号INTi1和INTi2,再生成中断INTA#的方式,只要将INTCSR的相关位按要求进行设置即可。
三:PCI9052的应用实例
1:运动控制卡的实现原理
图2为设计的一款基于PCI总线的运动控制卡的系统结构图。系统采用了PCI专用接口芯片PCI9052实现运动控制芯片PCL5023与PCI总线之间的高速通信;采用CPLD(复杂可编程逻辑器件,其优点是:系统集成化程度高,方便逻辑功能的更改,修改时无需改动硬件设计)实现卡上逻辑电路功能。如图所示:系统采用两片PCL5023芯片实现对电机的运动控制。其中一片PCL5023控制轴1和轴2,另外一片PCL5023控制轴3和轴4。使用时须正确设置PCI9052的EEPROM的参数,使得系统上电时能够正确初始化PCI9052的内部寄存器(如对PCI配置寄存器和PCI局部配置寄存器进行正确设定后,才能使计算机上的存储空间地址和卡上的局部存储空间地址形成一一映射的关系)。正确上电配置后,通过高频脉冲驱动步进电机或者伺服电机,完成预期的速度输出要求。而且同一系统中可以同时使用多块本款运动控制卡,从而达到对多轴的运动控制,满足在多种情况下的运动控制要求。
2:整个系统的设计包括两个方面,即硬件电路设计和软件设计。
(1):硬件电路设计
具体包括电路原理图的设计,设计时充分考虑了总体元件的分布,使其满足热效应原则、抗干扰原则、最近相邻原则,并同时保证了板卡设计的正确性、可靠性、合理性、经济性以及热设计、电磁抗干扰等(接地、配置退耦电容等)。而卡上外部信号与内部信号使用光耦合器进行有效隔离。
(2):软件设计
具体包括驱动程序、功能库函数以及人机界面的设计。
a:驱动程序的设计
由于在WINDOWS操作系统下,不能直接访问计算机设备上的硬件资源。因此,要实现对运动控制卡的硬件资源的访问必须编写运行在核心态的设备驱动程序。而windriver具有对PCI接口芯片的良好支持以及无需精通操作系统以及驱动程序方面的知识等优点,所以本设计采用了windriver来开发设备驱动程序。具体步骤大致如下: 在创建驱动程序项目时,在项目中添加程序文件P9052lib.c,在驱动程序源代码中包括头文件P9052lib.h,在源代码开始时调用P9052_Open()来获得板卡的一个句柄“HANDLE”,然后在程序中调用 P9052_ReadBlock()、P9052_WriteBlock()、P9052_ReadByte()、P9052_ReadWord()、P9052_ReadDWord()、P9052_WriteByte()、P9052_WriteWord()、P9052_WriteDWord()、P9052_IntEnable()、P9052_IntDisable()、P9052_IntWait()等函数来完成对板卡内存的读取、使能/禁止中断等操作,同时修改并添加必要的代码,在驱动程序的最后用 P9052_Close()来关闭对板卡的调用。
b:运动控制卡功能库函数的设计
为了给用户提供一个良好的软、硬件开发平台,满足在一定的情况下,用户可以通过调用提供的接口函数来获得实际需要的运动控制模式,这些运动控制模式主要有:单轴的恒速运动模式、单轴的梯形运动模式、单轴的S曲线形运动模式(如图3)、单轴的返回模式、双轴的线性和圆形插补运动模式以及多轴点对点运动模式等。所以需要编写丰富的功能库函数来完成对系统的初始化、脉冲的输入输出配置、中断控制、位置控制、插补参数配置、I/O口的控制和监测以及各种运动模式等。所有这些功能库函数均采用C语言编写。
如图3所示,电机转速在加减速区和最大速度之间实现了平滑转换,这样可以有效的降低冲击和磨损,从而有利于提高电机和机械系统的寿命。
库函数的设计原理是利用API函数实现对PCL5023芯片的寄存器的读写操作。而这些读写操作实现对相应的寄存器写入某些特定的值,从而控制电机在一定的操作模式下工作。对应于不同的操作模式,不同的操作内容,对寄存器的读写操作也不相同,而且对其操作的步骤也有特定的要求。如图4所示,通过CPU发出的数据信号和控制信号对PCL5023的内部寄存器实行读写操作,从而实现对电机的控制。
c:操作界面的编写
为了实现对电机的实时精确控制,本软件系统设计了比较人性化的人机操作界面,以完成对需要的操作,具体包括轴的选择及其参数配置、运动参数以及插补参数的选择、操作模式的选择等。编程语言采用VC++6.0。
四:抗干扰措施
在硬件电路中采用以下措施:在交流伺服系统的输入电源上使用噪声滤波器、在交流伺服系统的功率电源采用隔离变压器、在系统中的不同功能模块实行电源分组供电以防止设备间的相互干扰以及采用光电耦合器将运动控制卡的内部电路与伺服驱动器的输入、输出电路隔离开,以防止干扰从外部进入到运动控制卡或主机等。
另外,在软件系统中也采用了一些抗干扰措施,比如,采用平均值法以避免系统的随机误差对采样结果的影响,采用比较取舍法以剔除个别异常数据等。
五:结束语
本文主要介绍了PCI9052接口芯片的主要特点、结构组成、相关功能及其相应的操作,同时结合实际介绍了PCI9052在运动控制卡设计中的应用,具体包括有运动控制卡实现原理、硬件电路的设计以及驱动程序、功能库函数和人机界面的设计。实践证明,采用这种专业接口芯片进行运动控制卡的开发,不但大大的缩短了设计周期,降低了产品的成本,而且采用PCI9052开发的本款运动控制卡实用性强、可靠性好、并具有良好的可扩张性。