PyQt5信号检测系统(结项)
时间:10-02
整理:3721RD
点击:
工程代码地址:https://github.com/agdhun/PyQtDetect
考虑到Firefly3399板载的PCIE是MiniPCIE和PCIE M2(NGFF) B key版,而DSP上带有的PCIE接口是标准的X4接口,考虑到Firefly带有网口和WIFI,故确定最终实现为网口传输方式,使用TCP/IP协议。
本次试用我实现的整体结构如下:
首先从ADC控制着一部分说起,FPGA控制选择ADC通道,ADC内部叫做地址;FPGA也同时可以读取ADC的数据,考虑到ADC地址与数据映射关系,实现的地方我采用,先送地址再送数据,FPGA每隔100us便读取一次样本,这是考虑到ADC和SPI接口速度的缘故,我采用的ADC为TLC1543,它最大支持的SPI速度为25MHz,而每一次SPI采样过程时间至少达到1.425us,采样率为38K,选取100us,给ADC提供了充足的转化时间。
其次,每个样本都及时存入BlockRAM,利用BlockRAM的高地址位来提醒A9及时取走数据,A9取走数据后,将数据打包,通过LWIP这个轻量级TCP/IP库发送到Firefly RK3399网络链路上,Firefly RK3399读取链路上数据,通过Python处理,利用PyQt图形库显示。这是显示的完整流程,接下来我将介绍控制。
PyQt显示提供了通道选择按钮和FFT勾选框,其中0-10是采样通道,11-13是3个TLC1543内部的测试通道,14则是Python提供测试通道,如下图所示。
首先GUI界面一旦有选择按钮勾选,则Python会将按“通道号:FFT state”这种格式发送到网络链路中,A9接收后,实时反馈到FPGA部分,FPGA会实时处理ADC。
下图是RK3399上PyQt显示的内部通道波形
下图是RK3399上PyQt显示的内部通道波形的FFT
由于手里没有信号源等啥设备,只好用直流电压进行测试,channel0,如下所示
接下来重点阐述PyQt5部分设计,PyQt5部分涉及到网口通信部分我是使用Python提供的Socket库,使用比较简单,socket连接代码如下:
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.connect((host, port))
- recvThread.setDaemon(True)
- recvThread.start()
- data = s.recv(10240)
- if not data:
- exit()
- str_data = data.decode()
- list_str_data=str_data.split(',')
- list_data=list(map(int,list_str_data))
- self.paint.setPoints(list_data)