多通道超声波探伤实时处理-飞泰
多通道系统的超声探伤波形数据需要实时传输到微处理器进行处理和显示,应用程序还需要监控多通道的实时报警情况。这些功能都是通过软硬件共同实现的,其中 FPGA 相关算法模块实现多通道高速采样数据的非均匀压缩算法和闸门报警算法,应用程序实现软件功能的控制与数据的存储等。实时功能模块的设计直接影响本系统的性能指标,也是超声波探伤系统的技术重点和难点。
1.多通道超声回波信号输入到 AD9212 进行高速采样,采样后的数字信号送入 FPGA。FPGA对多通道高速数字信号进行并行非均匀压缩,压缩后的数据存放在 8 个 FIFO 中。因为 ARM 子系统同时只处理一个物理通道的数据,所以,同一时刻 FPGA 也只有一个 FIFO 与 ARM 子系统连接,称为当前实时波形 FIFO。当当前实时波形 FIFO 产生完一帧数据时,FPGA 向 ARM 子系统发送一个硬件中断 int1。如果开启了硬件报警功能,相关通道实时数据 FIFO 将继续输入到FPGA 中的实时报警模块,分别与相应的闸门数据进行比较,如果数据超过相应的闸门门限值,将进行实时声光报警,并对相应的状态寄存器进行置位。当实时报警模块判定报警结束时,将产生的报警数据写入相应的报警数据 FIFO 中,并向 ARM 子系统发送硬件中断 int2。以上是FPGA 相关算法模块的具体工作。
2.操作系统接收到外部中断 int1 或者 int2 后,根据相关驱动程序中已经注册的中断,调用相关的驱动程序中的中断服务子程序。探伤系统中,int1 的中断服务子程序在实时波形模块驱动程序中实现,int2 的中断服务子程序在实时报警模块驱动程序中实现。在这两个中断服务子程序中,都向应用程序发送了 SIGIO 信号,从而通知应用程序波形数据或者报警数据已经就绪。
3.应用程序在运行过程中接收到 SIGIO 信号后,便跳转到相应的信号处理函数。首先通过调用实时报警模块驱动程序中的 ioctl(),判断是否是报警中断。如果是报警中断,则将报警 FIFO中的数据读取到用户空间并保存;如果是实时波形中断,则首先通过 ioctl() 方法读取报警状态寄存器 reg_state,根据 reg_state 判断哪几个通道发生报警,并在显示屏上进行显示,然后将当前通道的数据从 FIFO 中读取到用户空间,进行处理后在波形区域实时显示。