数据采集实验
Tags
Hardware Architecture Design
Digital Signal Processing Design
Verilog Programming
Data Acquisition System Design
Signal Processing Techniques
FPGA-Based Signal Processing
Last edited by
AI summary
数据采集实验涉及信号处理的核心原理,包括信号的采样、序列化和量化编码。系统分为低频和高频采集,设计了基于zx-2的数据采集系统,支持多通道信号采集,使用UART进行数据发送和人机交互。详细描述了各通道的信号采集驱动程序、数据传输接口、命令参数解析及按键控制等功能,确保有效的数据处理和交互。
Last edited time
Nov 7, 2024 01:58 PM
第一节:数据采集系统1.1 数据采集系统的核心原理1.2 数据采集系统分类1.3 数据采集系统的基本工作原理第二节:基于zx-2的数据采集系统设计2.1 数据采集系统架构设计2.1.1 通道0信号采集驱动程序设计2.1.2 通道1信号采集电路设计与实现2.1.3 采样数据传输接口驱动程序设计2.1.4 人机交互信息接收程序设计2.1.5 人机交互2的电路设计2.1.5.1 功能寄存器定义2.1.5.2 人机交互2程序设计2.1.6 人机交互1电路设计2.1.6.1 按键消抖程序设计2.1.6.2 缓存通道写程序设计2.2 验证
第一节:数据采集系统
在信号处理领域数字电路发挥着重要作用,尤其是数据采集往往需要硬件实现,数据采集系统小到一个芯片完成,大到一个电路板完成。
信号处理在应用中包括2部分,分别是数据采集和数据处理,简单的说
信号处理 = 数据采集 + 数据处理
通过以上的分析可以看出 数据采集系统是信号处理领域的电路,作用就是为数据处理提供数据源。
由于FPGA的灵活性,很适合用来作为数据采集芯片,为DPS或者ARM,以及其它AISC以及其它电路提供信号处理所需要的数据。
1.1 数据采集系统的核心原理
数据采集系统的核心就是为数据处理提供源数据,源数据为信号,连续的模拟信号是不能够被软件或者电路进行处理的,因此我们需要连续信号经过变换,转化为电路或者软件能够处理的数据。

想在计算机或者电路中表示信号,需要采样,将转换为非连续的值,如果源信号为周期信号,我们至少采2个点以上(奈奎斯特定理),直接将采集的赋值电压表示,在计算机或者电路中运用不理想,需要转化为另外一种表示。
- 序列化
通过整形,将源信号转化为离散序列
- 量化编码(PCM码)
如当前采样电压为1.8v,参考电压是5V,规定量化精度N=8
1.8/5 = PCM码值/256
PCM码值 = 92
1.2 数据采集系统分类
按照源采样信号的频率高低可分为低频采集系统(简易采集系统)和高频采集系统(复杂采集系统)。
简易采集系统:一般使用低频AD
复杂采集系统:高速AD
按照采样信号源个数又可将采集系统划分为单通道采集系统和多通道采集系统
单通道:只对一个通道的信号源采集数据
多通道:对2个或者2个以上的信号源采集
1.3 数据采集系统的基本工作原理


第二节:基于zx-2的数据采集系统设计
需求分析
- 2通道信号采集
通道0使用TL549采集信号源
通道1使用频率和相位可调的DDS,精度N=32
- 通道选择(人机交互1)
通道选择使用独立按键,使用一个独立按键即可
- 缓存
使用深度=1024的FIFO
- 预处理
本设计不需要
- 数据发送
使用UART发送
- 人机交互(人机交互2)
使用uart接收寄存器命令或者参数,采用命令参数解析分实现人机交互2
2.1 数据采集系统架构设计

2.1.1 通道0信号采集驱动程序设计
功能:通道0信号采样

- 端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平有效 |
TL549 ad芯片接口 | ㅤ |
scl | TL549接口同步时钟,最高1.1mhz |
cs_n | TL549接口片选,最高1.1mhz |
sdi | TL549接口采样数据输入 |
人机交互控制 | ㅤ |
ch0_en | 当ch0_en==1的时候开始采样 |
输出采样数据 | ㅤ |
data_Ch0_[7:0] | 通道0采样数据输出 |
flag_data_Ch0 | 当flag_data_Ch0==1表示data_Ch0_[7:0]有效 |
- TL549采样率
数据采集中,采样率是一个重要的指标,表示采集数据的快慢,我们用hz表示
由于一般采样为周期采样,2个相邻的点的时间间隔为采样周期,它对应的频率就是采样率。
TMIN(type) >= 1.4US + 7.5*tSCL + 36*0.250us
>= 1.4US + 7.5*1us + 36*0.250us
>= 1.4US + 7.5*1us + 9
>= 17.9us
2.1.2 通道1信号采集电路设计与实现
功能:通道1信号采样

- 端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平有效 |
人机交互控制 | ㅤ |
fword[31:0] | 控制dds输出波形的频率 |
pword[10:0] | 控制输出波形的相位 |
ch1_en | 控制输出波形的采样率 |
输出波形采样输出 | ㅤ |
data_ch1[7:0] | 通道1采样数据 |
flag_data_Ch1 | 当flag_data_Ch1==1表示data_ch1[7:0]有效 |
- DDS
DDS是数字电路设计中一种常见的产生不同输出波形的一种数字电路,可以理解为波形发生器,本质上是将采样量化的编码数据存放在存储器中,在原始参考采样控制下输出采样数据。

- DDS输出波形频率计算
Fout = Fsap /2N
N :PCM码表示精度
Fout :输出波形频率
Fsap :原始参考采样时钟频率
Fout = (Fsap /2N )*K (K>0)
DDS 中输出波形频率
Addr =addr +K 等效于(Fsap /2N )*K (K>0)
- DDS相位

Addr = addr + pword
2.1.3 采样数据传输接口驱动程序设计
功能:
从存储器(这里默认FIFO)中将采样数据读出,经过数据传输接口(这里采用uart)发送给数据处理电路系统。

端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平复位 |
Fifo读相关 | ㅤ |
rd_en | FIFO读使能 |
rd_clk | FIFO读时钟 |
rddata[7:0] | FIFO读数据 |
empty | FIFO读状态 |
人机控制相关 | ㅤ |
en_t | 控制发送速率 |
Uart接口相关 | ㅤ |
tx | 发送信号 |
2.1.4 人机交互信息接收程序设计
功能:在数据采集系统中,通过接口(默认uart)接收人机交互信息

- 端口说明
信号名 | 描述 |
系统相关 | |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平复位 |
Uart接口相关 | ㅤ |
rx | Uart接收 |
人机交互接收速率控制 | ㅤ |
en_r | 接收速率控制 |
接收数据输出 | ㅤ |
rvdata[7:0] | 接收数据 |
flag_rvdata | 当flag_rvdata==1表示rvdata[7:0]有效 |
2.1.5 人机交互2的电路设计
在数字电路设计中,在实际应用中交互方式有2种,具体如下:
- 设备交互
通过诸如终端类设备控制电路的运行状态,比如逻辑分析仪设计中通过PS2键盘控制波形采样和波形显示。
- 命令参数解析法
命令参数解析法是数字电路设计中一种重要的交互电路设计方法,实现了和上位机信息交互的手段,可以是是和软件(上位机)。
命令参数解析法的实现方式是通过配置寄存器完成此种电路设计。

上位机 :一般是软件,它是控制设备
下位机 :人机交互电路的硬件设计,即交互电路
Reg[N-1:0] : 功能寄存器,带有属性的寄存器
设计电路 :人机交互被控制电路
在实际中我们的控制可能不只一个,需要多个人机控制,因此我们需要定义多个功能寄存器,当我们在操作多个寄存器的时候,要区分是操作那个寄存器,需要给寄存器编号,我们叫做寄存器地址。
2.1.5.1 功能寄存器定义
根据当前我们的设计,我们自定功能寄存器,根据实际需要定义寄存器,需要多少寄存器定义多少寄存器。
- 人机交互控制分析
功能 | 控制信号 |
通道0采样率控制 | ch0_en |
通道1采样率控制 | ch1_en |
通道1输出波形频率控制 | fword[31:0] |
通道1输出波形的相位控制 | pword[10:0] |
UART波特率控制 | en_t |
ㅤ | en_r |
- 寄存器定义
经过分析寄存器的位宽定义为8位,16为,32位都可以,这里我们选择16位作为我们寄存器的位宽。
寄存器定义 | 属性 | 控制信号 | 描述 |
cnt_ch0_max_h[31:16] | 地址:0
读写:w | ch0_en | 通道0采样率计数器最大值的高16位 |
cnt_ch0_max_l[15:00] | 地址:1
读写:w | ㅤ | 通道0采样率计数器最大值的低16位 |
cnt_ch1_max_h[31:16] | 地址:2
读写:w | ch1_en | 通道1采样率计数器最大值的高16位 |
cnt_ch1_max_l[15:00] | 地址:3
读写:w | ㅤ | 通道1采样率计数器最大值的低16位 |
fword_h[31:16] | 地址:4
读写:w | fword[31:0] | 通道1输出波形频率控制参数高16位 |
fword_l[15:00] | 地址:5
读写:w | ㅤ | 通道1输出波形频率控制参数低16位 |
pword_rg[10:0] | 地址:6
读写:w | Pword[10:0] | 通道1输出波形相位控制参数 |
uart_sel[2:0] | 地址:7
读写:w | en_t
en_r | Uart波特率选择
|

2.1.5.2 人机交互2程序设计
由于我们和上位机交互通过uart接收命令参数,UART以比特最基本通信数据传输单位每次接收的数据我们无法区分数据类型,因此我们需要规定上位机和下位机的数据通信格式,这里我们和上位机以包作为数据传输单位。
包数据传输是数字电路设计中一种比较重要的数据通信方式,包是一种数据结构,这里我们规定包的格式如下:

0x88:表示包开始指示符,8bit,默认8’h88
0x03:包数据长度,默认3字节
寄存器地址:配置寄存器的地址,默认8位
寄存器高8位:参数的 高8位
寄存器低8位:参数的 低8位
0x66: 表示包结束指示符,8bit,默认8’h66
- 包解析程序设计
功能:根据已经定义的包结构解析数据包,输出寄存配置信息(地址+参数)

端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平有效 |
Uart接收数据输出 | ㅤ |
rvdata[7:0] | Uart接收数据 |
flag_rvdata | 当flag_rvdata==1表示rvdata[7:0]有效 |
寄存器配置相关 | ㅤ |
wr | 当wr==1表示寄存器写 |
addr[7:0] | 寄存器编号 |
data[15:0] | 寄存器参数 |

- 命令参数解析(uart控制)
功能:解析uart相关的命令参数,控制它接收或者发送速率

端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平有效 |
寄存器配置相关 | ㅤ |
wr | 当wr==1表示寄存器写 |
addr[7:0] | 寄存器编号 |
data[15:0] | 寄存器参数 |
人机交互控制 | ㅤ |
en_r | Uart接收速率控制,默认波特率的7倍 |
en_t | Uart发送速率控制 |
- 其它命令参数解析程序设计(非uart控制)

端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平有效 |
寄存器配置相关 | ㅤ |
wr | 当wr==1表示寄存器写 |
addr[7:0] | 寄存器编号 |
data[15:0] | 寄存器参数 |
人机交互控制 | ㅤ |
ch0_en | 通道0采样率控制 |
ch1_en | 通道1采样率控制 |
fword[31:0] | 通道1输出波形频率控制 |
pword[10:0] | 通道1输出波形相位控制 |
2.1.6 人机交互1电路设计
功能:在按键的控制下选择当前缓存数据的采样通道

2.1.6.1 按键消抖程序设计

端口描述
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平有效 |
按键输出 | ㅤ |
key_i:有抖动 | 按键输入电平 |
按键输出电平 | ㅤ |
key_o:无抖动 | 按键输出电平 |
后沿


2.1.6.2 缓存通道写程序设计
功能:根据当前选择的通道采样通道数据,将数据写入FIFO

端口说明
信号名 | 描述 |
系统相关 | ㅤ |
clk | 系统时钟,默认50mhz |
rst_n | 系统复位,低电平有效 |
按键输出电平 | ㅤ |
key_o:无抖动 | 按键输出电平 |
Fifo写相关 | ㅤ |
wr_clk | FIFO写时钟 |
wr_en | FIFO写使能 |
wrdata[7:0] | FIFO写数据 |
full | FIFO写满标志 |
通道采样数据输入 | ㅤ |
ch0_data[7:0] | 0通道采样数据 |
flag_ch0_data | 当flag_ch0_data==1表示ch0_data[7:0]有效 |
ch1_data[7:0] | 1通道采样数据 |
flag_ch1_data | 当flag_ch1_data==1表示ch1_data[7:0]有效 |
2.2 验证

Loading...