PCI总线是一种先进的高性能32/64位地址数据复用局部总线,可以同时支持多组外围设备。实现PCI总线接口的方法主要有两种:一是采用CPLD或FPGA设计PCI接口,这种方法比较灵活,但是其难度较大,设计周期也较长。二是采用专用的PCI接口芯片,可以大大减少设计者的工作量,从而缩短开发周期,降低开发成本。本运动控制卡采用PLX公司的PCI9052接口芯片进行设计,该芯片符合PCI2.1规范。
与ISA总线相比,PCI总线支持三个物理空间:存储器地址空间、I/O地址空间和配置空间。配置空间是PCI特有的一个空间,所有的PCI设备都必须提供配置空间。PCI9052包含一个用于加载配置信息的串行EEPROM接口,用于装载一个特定适配设备信息。串行EEPROM中存储了PCI9052的重要的配置信息,如设备号、制造商号、设备类型号、局部空间基地址以及局部空间描述符等信息。PCI9052对EEPROM型号的要求是比较严格的,可以使用的包括HolTek的HT93LC46,MicroChip的93LC46B等。
在ISA模式下,EEPROM的使用是必需的,为使PCI9052正常工作在ISA模式下,首先应确保EEPEOM能被找到,并且将PCI9052的第68管脚接低电平。EEPROM的内容非常重要,它直接关系到整个板卡能否正常工作,在设计时要特别注意。
运动控制芯片
传统的运动控制器多采用嵌入式高性能单片机或DSP来实现,但系统集成度不够高,电路复杂,且软、硬件研制周期长。采用专用运动控制器可以提高系统集成度、插补速度及可靠性,同时简化电路,缩短开发周期。
目前市场上有多种运动控制器,如美国的PMD公司以及日本的NOVA、KYOPAL、SEEK公司的产品。本设计采用NOVA公司的MCX312,它能同时控制独立两个伺服电机或步进电机的运动控制芯片。以脉冲串的形式输出,能对伺服电机和步进电机进行位置控制、插补驱动、速度控制等。
● 独立二轴驱动
一个芯片可分别控制2个电机驱动轴的运动。每个轴都可以进行定速驱动,直线加/减速驱动,S曲线驱动等,2轴的性质相同;输出驱动脉冲的范围为1PPS~4MPPS,使用16MHz时钟时,输出脉冲频率精度小于±0.1%。
● 定量驱动和连续驱动
定量驱动是指以固定速度或加/减速度输出制定数量的脉冲,用以移动到确定位置或进行确定的动作,连续驱动连续输出驱动脉冲直至高位的停止命令或外部的停止信号有效,用以原点搜寻、扫描操作、及电机旋转速度控制。
● 插补驱动
可进行相对于当前位置范围-8 388 607~+8 388 607内的2轴直线插补及圆弧插补,插补精度为±0.5LSB,速度范围为1PPS~4MPPS,并可以连续地运用2轴直线及圆弧插补在每个插补节点不停的驱动,其最大速度可达2MHz。
● 位置控制
每轴都有两个32位位置计数器,一个是芯片内部管理驱动脉冲输出的逻辑位置计数器,另一个是管理从外部编码器来的脉冲的实际位置计数器,并可通过内部寄存器的设定,使得当位置计数器同比较寄存器的大小关系有变化时,产生中断。
● 实时监控
在驱动过程中,可以通过实时读取片内部寄存器得到逻辑位置、实际位置、驱动速度、加速度以及加/减速状态(加速中,定速中,减速中)等信息。
● 其他功能
MCX312还具有许多其他重要功能:由外部信号控制进行定量驱动、连续驱动;硬件限制;紧急停止;驱动状态输出;脉冲输出方式选择;输入信号滤波等。
系统设计
在硬件系统中,PCI9052作为连接CPU与运动控制芯片的桥梁,完成了从PCI总线到ISA总线的过渡。CPU通过编程对运动控制芯片进行控制,以实现对两轴运动的控制。
该设计硬件结构如下图所示,PCI9052与PCI总线相连,AD[31:0]、CBE[3:0]、PAR、TRDYN、IDSEL、STOPN、PERRN、SERRN、CLK、RST0、INTA0、LOCKN等是必须实现的信号,EESK、EEDO、EEDI、DDCS与串行EEPROM相连;CPU以16位数据对MCX312进行控制,使其向外发出X及Y方向脉冲信号,以控制两个方向轴上的运动。
数控系统通过位置传感器返回其包括nLMTP、nLMTM、nINPOS、nALARM等系统位置信息,进而实现左右方向限位,伺服到位及报警等功能。编码器输入信号引起MCX312的实际位置计数器的变化,可以得到两轴相对于原点的实际移动位置。通用输入输出扩展了系统功能,在应用中可根据实际情况用作不同的用途。
图 PCI总线运动控制卡硬件结构图
在电路设计时应考虑一下几点:
(1)根据PCI协议规定,PCI总线的CLK信号线的长度为2500mil,其他信号线的长度以1500mil以内为宜;
(2)因系统中多为开关量输入输出,在实际工作中,应尽量避免外界信号的干扰,为达到这个目的,在系统中采用光电耦合器件,其输入端配置发光器件,输出端为受光器,开关量输入接入电路中,会被挡在光电耦合器以外,从而将干扰隔离;
(3)数字电路信号电平转换过程中会产生很大的冲击电流,并在传输线和电源内阻上产生较大的压降,形成严重的干扰。为了抑止这种干扰,在芯片的电源和地之间连接高频特性好的0.1μF左右的去耦电容;
(4)总线信号PRSNT1#的PRSNT2#中必须有一个接地,它们表明板卡的存在并提供该板对电源要求的有关信息。
函数库及驱动设计
运动控制卡给用户提供了一个软硬件的使用平台,用户可以根据自己的需要选择使用自己需要的功能,而对于功能实现,函数库的编制是必须的。函数库用于运动控制系统的二次开发,编程人员可以使用高级语言,通过对库函数的调用,来实现对运动控制系统的控制。该系统的库函数包括5类。
(1)基本参数设置,包括卡的初始化与释放、脉冲输出方式、软硬件限位设定、脉冲输出方式及编码器输入的工作方式、加/减速方式设定及输入信号滤波功能设置等;
(2)运动参数的设定与读取,包括范围设定、加/减速度的设定与读取、驱动速度的设定与读取、初始速度的设定与读取、逻辑/实际位置计数器的设定与读取、COMP+/COMP-寄存器的设定等;
(3)驱动状态检查,包括获取各轴的驱动状态及插补驱动状态;
(4)脉冲驱动输出及设定,包括两轴直线插补、顺时针/逆时针圆弧插补、定量驱动、连续驱动及驱动的减速停止与立即停止;
(5)开关量输入输出,包括所有开关量的输入输出及单个输入输出的控制。
开发Windows下的应用程序应考虑系统的限制,Windows系统为保护系统对用户的访问权限进行了划分,用户所处的级别由系统对硬件资源进行了屏蔽,用户不能直接访问硬件资源。为了达到与硬件通信的目的,必须编写驱动程序。
用于Windows驱动开发的工具包括Windriver,DriverStudio以及DDK(Driver Develop Kit)。Windriver使用简单,不需要专门的关于系统驱动的知识,开发时间短,但效率低,且不易发布;DDK效率及可靠性高,但使用烦琐,开发周期长;DriverStudio包括DriverWorks,SoftICE,DirverAgent等工具,具有开发调试的强大功能,把DDK用类的形式进行了封装,使用简单。本文就是利用DriveStudio进行驱动开发的。
DriverWorks提供了DriverWizard向导,利用它可以生成驱动程序的框架,其中最为关键的一步添加相应的I/O端口、内存资源、DMA、中断等相应得硬件资源,并在相应的处理程序中添加代码。
结论
本系统采用PCI总线接口及MCX312运动控制芯片,支持即插即用,可用于多种操作系统,具有输出脉冲频率高、控制准确、易向多轴扩展等特点,可广泛应用于机器人、基于PC的数控系统中。