在激光陀螺捷联惯导系统中,惯性仪表(激光陀螺和加速度计)直接“捆绑”在载体上,所承受的力学环境要比平台恶劣。在某些军用环境所要求承受的强烈振动条件下,由于惯性组合体在力和运动的激励下产生多项误差,系统姿态和位置误差增长较快。研究表明,这些误差项有一部分具有较好的补偿性,可以通过误差补偿减小或消除部分误差,从而提高系统在强振动下的精度。这就需要将惯性仪表在振动环境下的输出数据高速采集并保存下来,然后在PC机上进行离线仿真以确定和分离各项误差系数。
由于数据量庞大,无法直接存储在导航计算机中:例如以8 kHz对惯性仪表输出进行采样,每秒的数据量约为200 K字节。而原有捷联惯导系统采用RS422接口与外部通讯,其最大波特率为1 M。不足以将高速数据传送给PC机保存下来。因此,有必要在导航计算机外围扩展更高速的USB接口,以实现导航计算机和PC机之间的高速通讯。USB接口(Universal Serial Bus)是一种通用的高速串行通讯接口。USB2.0理论传输速度可达到480 Mb/s,可以很好地解决数据在惯导系统与PC机之间的高速互传问题。
1 激光陀螺捷联惯导系统的USB接口设计
1.1 USB接口芯片CY7C68013A
CY7C68013A是CYPRESS公司最新推出的USB2.O控制器,它既负责USB事务处理也兼具微处理器的控制功能,还可作为USB外部芯片的主控芯片,其小巧的体积及较高的性价比使得该芯片在各种USB设备上得到了广泛的应用。该芯片包括带16KB片上RAM的高速8051单片机、4KBFIFO存储器以及通用可编程接口(GPIF)、串行接口引擎(SIE)和USB2.0收发器,6条可编程控制输出线,9条地址输出线和6条通用的准备输入线。数据线宽度可设为8位也可设为16位,方便与不同的CPU接口。图1是CY7C68013A的内部结构功能框图。
由于CY7C68013A硬件逻辑并不复杂,加上可以充分利用FPGA的灵活性,在导航计算机外围扩展CY7C68013A的线路板设计工作相对简单,将CY7C68013A的总线和控制信号与DSP导航计算机的FPGA相应引脚正确相连即可。
USB接口的软件设计要复杂一些,主要是编写CY7C68013A自身的固件程序。
在激光陀螺捷联惯导系统中,惯性仪表(激光陀螺和加速度计)直接“捆绑”在载体上,所承受的力学环境要比平台恶劣。在某些军用环境所要求承受的强烈振动条件下,由于惯性组合体在力和运动的激励下产生多项误差,系统姿态和位置误差增长较快。研究表明,这些误差项有一部分具有较好的补偿性,可以通过误差补偿减小或消除部分误差,从而提高系统在强振动下的精度。这就需要将惯性仪表在振动环境下的输出数据高速采集并保存下来,然后在PC机上进行离线仿真以确定和分离各项误差系数。
由于数据量庞大,无法直接存储在导航计算机中:例如以8 kHz对惯性仪表输出进行采样,每秒的数据量约为200 K字节。而原有捷联惯导系统采用RS422接口与外部通讯,其最大波特率为1 M。不足以将高速数据传送给PC机保存下来。因此,有必要在导航计算机外围扩展更高速的USB接口,以实现导航计算机和PC机之间的高速通讯。USB接口(Universal Serial Bus)是一种通用的高速串行通讯接口。USB2.0理论传输速度可达到480 Mb/s,可以很好地解决数据在惯导系统与PC机之间的高速互传问题。
1 激光陀螺捷联惯导系统的USB接口设计
1.1 USB接口芯片CY7C68013A
CY7C68013A是CYPRESS公司最新推出的USB2.O控制器,它既负责USB事务处理也兼具微处理器的控制功能,还可作为USB外部芯片的主控芯片,其小巧的体积及较高的性价比使得该芯片在各种USB设备上得到了广泛的应用。该芯片包括带16KB片上RAM的高速8051单片机、4KBFIFO存储器以及通用可编程接口(GPIF)、串行接口引擎(SIE)和USB2.0收发器,6条可编程控制输出线,9条地址输出线和6条通用的准备输入线。数据线宽度可设为8位也可设为16位,方便与不同的CPU接口。图1是CY7C68013A的内部结构功能框图。
由于CY7C68013A硬件逻辑并不复杂,加上可以充分利用FPGA的灵活性,在导航计算机外围扩展CY7C68013A的线路板设计工作相对简单,将CY7C68013A的总线和控制信号与DSP导航计算机的FPGA相应引脚正确相连即可。
USB接口的软件设计要复杂一些,主要是编写CY7C68013A自身的固件程序。
1.2 CY7C68013A的固件程序设计
CY7C68013A的固件程序主要用于USB芯片的端点配置、频率设置、数据宽度、可编程标志定义、中断定义及特定功能的8051程序编写等。固件程序主要完成如图2所示的任务流程。
在上述固件程序当中,CY7C68013A的初始化子程序TD_Init()的开发按照以下步骤进行:按图3中的规则配置端点;使CY7C68013A工作在SLAVE FIFO模式,选择BULK传输,使用3个端点EP2、EP4和EP6,全部采用双缓冲方式;3个端点FIFO标志分别定义为:FLGA为EP2的4字节接收可编程标志,FIGB为EP6的满标志,FLGC为EP2的空标志;数据宽度设为16位。
1.3 丢帧问题及解决措施
在导航计算机与PC机间通过USB接口进行了双向高速通讯测试。测试方法如下:PC机向导航计算机传输一个数据包,导航计算机接收后回传,PC机接收后进行正确性校验、传输、回传和校验过程循环进行。测试中发现偶尔有丢帧现象出现。尝试改变上位机中数据采集与后台实时写内存线程的优先级和改变CY7C68013A的端点大小及缓冲级别(如三缓冲、四缓冲)来解决这个问题,但是丢帧现象依然存在。
经过较长时间的分析与验证,找到了问题所在:PC机中运行的Windows操作系统是一个多任务的操作系统,同时运行着多个进程,系统在给每个进程分配时间片时也是有一定的优先级的,优先级高的进程占用时间片较多,如果PC机在执行某些其他进程时占用时间超过了一定的限度,就可能导致该读出的数据没有及时读出,而下一帧数据又已送到缓冲区,覆盖前一帧数据,从而造成丢帧。
解决丢帧的办法是在DSP的内存中设置一个圆形缓冲区,如果发现IN型端点的FIFO已满(说明PC机未及时读走FIFO中数据),则将本帧数据存入圆形缓冲区里,直到FIFO完全为空。
圆形缓冲区的结构如图4所示。
在图4中,sptr为写入数据指针,dptr为发送数据指针。整个圆形缓冲区的大小设置为256 K字(32位)。若按8 K的数据存入速率,可以保存8 s数据。在PC机不能及时读取IN端点FIFO数据的情况下,这个圆形缓冲区可以起到很好的缓冲作用。
在程序执行的初始时刻,设置指针sptr等于dptr。当IN端点FIFO满时,DSP将数据按指针sptr存入圆形缓冲区,sptr随之递增,而dptr保持不变。当IN端点FIFO空时,DSP仍将数据按指针sptr存入圆形缓冲区,sptr随之加1。但此时将从dptr指针处发送两帧数据到FIFO中,这种dptr追赶sptr的机制,将保证圆形缓冲区不出现溢出现象:即不会出现sptr超过dptr一圈以上的情况。
1.4 通讯系统软件整体设计
遵循软件设计中尽量较少使用中断的原则,这里只使用1个4 K中断,其他三路信号都采用查询方式,中断分配如图5所示。
图6为主程序流程。USB从管道0接收PC机发来的命令,命令写入EP2端点中,此时在INT7管脚上产生USB中断。DSP通过查询INT7中断,将EP2中的命令及数据读出,对命令进行解析,并执行相应的指令工作。非周期指令执行完后,将接收数据写入EP4端点,PC机从管道1中将数据取走;周期指令执行完后,将接收数据写入EP6端点,PC机从管道2中将数据取走。
图7中的4 K中断流程主要完成陀螺和加速度计脉冲及温度数据的采集工作,并向EP6端点写入。
2 通讯效果测试
将激光陀螺惯性导航系统固定于振动模拟台,按照军用环境的要求进行了近千小时的振动实验。实验过程中导航计算机高速采集惯性仪表在振动环境下的输出数据,并通过USB接口传输给PC机并保存下来。
当圆形缓冲区的两个指针各自达到最大位置后将从0地址重新开始,长时间双向通讯的测试结果表明:将采用上述方法后的输出数据与串口输出数据进行比对,发现无丢帧现象产生。在导航计算机上进行离线仿真以确定和分离各项误差系数,通过实时误差补偿减小了部分误差,从而提高了系统在强振动下的精度。当然,PC机在与导航计算机的数据传输过程中,建议尽量减少运行的任务数量,特别是占用CPU时间较多的任务,如杀毒、音频视频解码等。
3 结论
本文将基于CY7C68013A的USB接口技术应用于惯导系统数据通信,创新性的设立圆形缓冲区解决了USB接口数据传输过程中的丢帧问题。近千小时测试结果表明:上述USB接口通讯装置可实现导航计算机和PC机间高速实时数据传输且期间无丢帧现象发生,表明该装置具有良好的稳定性与可靠性。