任海燕,廖建平,肖述晗,吴帅,尹晓丽
(航空工业北京长城计量测试技术研究所,北京 100095)
国内惯性测试设备的角度编码器信号采集通常以单片机或DSP+FPGA作为系统的控制核心[1-2],属于采用硬件电路实现,但使用硬件电路时接口电路复杂,开放性差,不能实现系统的可互换性。
为实现惯性测试设备高精度伺服控制,不仅需要良好的用户界面便于用户使用,更要具有良好的实时性能,以保证数据的实时采集和实时发送。Windows是比较常见的操作系统,人机交互界面良好,但当打开程序平台太多时,会出现定时不准现象,难以满足对实时性要求较高的系统需求[3]。RTX操作系统是美国Ardence公司开发的实时子系统,用于Windows平台,不仅具有较强的实时性,而且具有较好的稳定性及可扩展性[4-5]。本文基于RTX+Windows系统平台进行角度编码器信号的实时采集研究。
RTX+Windows系统平台是在Windows系统基础上拓展实时子系统RTSS[6],该平台不仅继承了原有Windows操作系统的优点,而且提高了系统实时性,使线程间切换时间极大地缩短。RTX+Windows系统平台也是目前Windows平台上唯一基于软件的硬实时解决方案[7-8]。
本文以单轴转台为应用对象。单轴转台主要由三部分组成:台体、采集及控制系统和计算机系统。台体为立式结构;采集及控制系统用于实时采集转台角位置并控制台体按照指令进行回转运动;计算机系统主要为工控机,用于采集数据及发送指令[9]。
该单轴转台控制系统要求根据给定的指令,通过计算机系统生成控制律,通过DA卡作用于驱动器,从而控制电机,其中采集的角度编码器信号用于转台角位置反馈,实现对转台角位置的闭环控制。
由于单轴转台控制系统为闭环系统,需要角度编码器信号作为反馈元件,修正位置指令与反馈位置的误差。因此角度编码器的精度直接影响了系统的位置精度。
相较于相对编码器,绝对编码器抗干扰能力强,用于控制系统更可靠。其中德国HEIDENHAIN公司绝对式光栅编码器性能较强、可靠性高,并且重复性好。该编码器可输出ENDAT,1Vpp等信号,其中ENDAT协议输出绝对位置编码数据。
HEIDENHAIN计数卡IK220是一个基于PCI的PC计算机扩展卡,用于记录绝对式角度编码器测量值[10],与HEIDENHAIN绝对编码器配套使用,对模拟信号的细分倍数高,准确度高且实时性强,对实现基于软件的硬实时采集具有重要作用。
该单轴转台控制系统通过IK220计数卡实时采集转台角度编码器信号,并通过RTX系统实时驱动IK220计数卡,实时读取角位置数据。
系统硬件方案如图1所示,系统根据实时读取的角位置数据及位置指令,设计控制算法得到实时控制律,从而对该单轴转台进行高精度控制。控制策略采用位置环和电流环双闭环,其中位置环采用经典数字PID算法。角度编码器信号的采集及控制均通过下位机实现。
图1 单轴转台系统硬件方案图
由于Windows系统是非实时系统[11],故IK220针对Windows系统的驱动程序,不能满足单轴转台控制实时性的需求。故研究基于RTX的IK220接口驱动程序设计,实时采集角度编码器测量位置值,进而实现单轴转台位置和速率的高精度控制。
RTX实时线程的调用机制是独立的,且RTSS线程优先级高于Windows线程,可直接访问I/O设备。同时,RTSS支持通过共享内存、事件和信号量等实现与非实时进程的通讯[12]。
本系统中驱动程序用于完成硬件和控制软件的数据和信息的交互。与常用Windows系统下的驱动程序[13-14]相比,RTX驱动程序是开放的,可以通过RTX函数直接访问外部硬件,操作方便快捷。在RTX下,PCI设备和RTX基本内核位于驱动底层,RTX内核可以通过I/O和中断方式与PCI设备进行数据交换[1],提高设备的实时性能,RTX定时精度可达0.1μs。RTX应用程序由Visual Studio建立,使用RTX Driver Wizard生成驱动程序框架,生成的文件类型是“rtss”。
驱动程序设计主要包括设备初始化、物理地址的映射、基本的控制操作以及检测处理设备错误等。基于RTX驱动程序框图如图2所示。
图2 基于RTX驱动程序框图
IK220卡是PCI总线形式计数卡,内部寄存器采用内部映射方式,板卡的制造商号和设备号分别为0X10B5和0X9050。目前HEIDENHAI公司只提供Windows下和LINUX下的软件开发包,无法用于实时控制领域中的数据采集。本文通过研究IK220卡的采集原理,实现基于RTX的IK220接口驱动程序。
与其他板卡不同,IK220板卡上电后,需要下传DSP固件代码,开始启动板卡操作。IK220具有16个16位寄存器,其中控制寄存器用于设置板卡工作模式,命令寄存器用于控制板卡、读写数据等操作,IK220通过上述寄存器与板上DSP处理器进行通讯,DSP根据指令再进行相应控制。基于RTX的IK220接口驱动程序流程图如图3所示。
图3 IK220接口驱动程序流程图
程序设计主要包含以下内容:
1)寻找匹配设备。首先寻找所有的PCI设备,通过设备号和制造商获取PCI板卡的基地址,为对设备操作做准备。其中RtGetBusDataByOffset()函数可获取PCI板卡配置空间[15]。
RtGetBusDataByOffset(PCIConfiguration,
uBusNum,
SlotNumber.u.AsULONG.//logical slot number
PciData,
uOffset,
PCI_COMMON_HDR_LENGTH);
2)将设备的物理地址映射为系统地址。驱动程序只有将设备物理地址转换成系统映射地址,才可以实现对设备的操作。其中RtTranslateBusAddress()函数用来将PCI板卡寄存器基地址转换为系统映射地址,RtMapMemory()函数的作用是将PCI板卡内存映射地址赋予指针变量,对板卡操作可通过该指针变量实现[10]。
RtTranslateBusAddress(PCIBus,BusNum,PortAdd,
&AddSpace,&uPortAdd);
BaseAddress=RtMapMemory(uPortAdd,4*1024,0);
3)设备基本操作,包括IK220初始化、IK220启动及停止、读写寄存器、读写数据等。由于地址映射到I/O空间,可对设备直接进行操作。
*pData=*(PortBase[Axis]+Adr);
//Read word value from register to pData
*(PortBase[Axis]+Adr)=Data;
//Writes Data to Axis at Adr
为了验证基于RTX的IK220接口驱动程序的有效性,在单轴转台控制系统中进行角位置的多位置采集测试。手动转动转台角度,若采集角位置结果与转动角位置结果一致,则证明驱动程序各部分函数都能实现。
为了验证角位置实时采集效果,需对转台进行角位置精度检测以及转台动态性能检测,在RTX实时系统中,设置定时精度为1 ms。角位置精度检测方法参照GJB 1801-93《惯性技术测试设备主要性能试验方法》中方法104《角位置测量试验》,角位置精度检测结果为±2″。转台动态性能检测中,位置指令设置为幅值0.2°,频率为1 Hz的正弦信号,位置指令和实际角位置采集结果如图4所示,从图4中可看出,实时角位置与指令结果一致,幅值误差小于0.5%。
图4 角位置指令与采集实时位置
以上检测结果表明,本文设计的基于RTX的角度编码器信号实时采集系统满足对转台的实时控制要求,并且性能结果满足实际工程需求。
以惯性测试设备为应用对象,设计了基于RTX的IK220接口驱动程序,并成功应用于单轴转台控制系统,实现单轴转台基于RTX的角度编码器信号实时采集,为实现单轴转台的位置和速率高精度控制奠定基础。本文的设计方法可进一步应用于惯性测试设备控制系统的其他PCI接口板卡的实时驱动,从而提高了对惯性测试设备控制系统的控制性能。