基于 ARM+FPGA+AD的高精度数据采集系统设计

随着图像处理 、 工业控制 、 无线通信等领域的飞速发
展 , 对数据采集系统的速度 、 精度等性能要求也越来越高 。
这些要求都对数据采集系统的设计和实现提出了新的挑
战 。 目前数据采集系统的设计方案通常分为以下几类 : 1 )
以微处理器单一控制芯片和 A / D 转换器形式为主 , 该设计
方案简单 , 在对性能要求不高的应用场合为了降低成本甚
至可以采用集成 A / D 转换器的微处理器 [ 1 ] 。 2 ) 采用通用
计算机配置数据采集卡的方式 [ 2 ] , 通常需要开发计算机端
应用程序 , 可以完成复杂的计算 ,但不同的采集卡相应的驱
动程序不同 , 如果需求改变需要更换采集卡时 , 相应的应用
程序也需要重新开发 。 因此 , 该设计方案通用性差 , 实时性
不高 。 3 ) 以 ARM 和 FPGA 或 DSP 和 FPGA 组合方式作为
采集系统的核心 [ 3 - 5 ] , ARM 处理器适合控制领域 , DSP 处理
器适合信号处理领域 , FPGA 器件由于其自身特点 , 适合高
速并行采集与处理领域 , 具有 ARM 或者 DSP 等处理器无
法比拟的优势 。 这类组合方式结合各自特点 , 处理能力强 ,
应用范围广 。 通过以上分析 , 设计了 ARM 处理器和 FPGA
器件作为数据采集系统的核心 , ARM 处理器使用 Marvell
公司的 PXA270 , FPGA 器件使用 Altera 公司的 Cyclone 系
列 EP1C6 , 前端采集芯片使用 Ti 公司的高精度 、 大动态 24
位 A / D 转 换 器 ADS1278 进 行 模 数 转 换 。 ARM 和 FPGA
之间的数据交换采 用 双 口 RAM 芯 片 来 实 现 FIFO 功 能 。
系统中 ARM 处理器作为系统控制核心 , 负责控制整个系
统工作时序 、 并将数据通过网络上传到服务器中进行存储 。
FPGA 负责 A / D 转换器的模式配置 , 数据传输 。 该组合方
式结合 ARM 在控制方面和 FPGA 在采集方面的优势 , 具
有通用性强 、 配置灵活的特点 。
2 系统设计
本系 统 硬 件 主 要 由 信 号 调 理 电 路 、 模 数 转 换 器
ADS1278 、 FPGA 器 件 Cyclone 系 列 EP1C6 、 双 口 RAM
IDT7205 和处理器 PXA270 及外围电路 [ 6 ] 组成 , 系统结构框
图如图 1 所示 。 输入信号经过信号调理电路后 , 进入 A / D
转换器进行数据转换 , 将模拟信号转换成 23 位尾数和一符
号位的数据 , FPGA 配置 A / D 转换器并将转换的数据按照
顺序存储到双口 RAM 中 , 当转换数据存储满后中断 ARM
处理器 , ARM 处理器将数据从双口 RAM 读出进行运算 ,
并通过网络接口将采集数据传输到服务器 。
2.1 24 位 A / D 转换芯片 ADS1278
ADS1278 [ 7 ] 是德州仪器 ( TI ) 公司推出的采样率高达
128KS / s 、 24 位 8 通道同步采样 Σ - Δ ADC 。 支持多种工
作模式 , 内部集成线性相位数字滤波器 , 数据输出接口支
持 SPI 或可选帧同步 , 便于与 FPGA 互连 。 可满足国防 、
航天和医疗应用 。
ADS1278 转换器内部集成的数字滤波器通过奈奎斯特
采样将输入信号抽取为长度为 1 比特的高分辨率数字信
号 。 8 通道输入信号分别进入独立的 8 个 A / D 转换器 , 它
内部由高阶斩波器 、 数字滤波器 、 调制器组成 , 可将输入模
拟信号经过高阶滤波器后得到数字信号 。
ADS1278 的 MODE [ 0..1 ]、 FORMAT [ 0..2 ]、
SYNC 、 CLK 、 SCLK 、 DRDY 、 DOUT [ 8..1 ] 引 脚 分 别 于
FPGA 的 IO 口 相 接 , 其 中 , MODE [ 0..1 ] 引 脚 状 态 决 定
A / D 的工作模式 , FORMAT [ 0..2 ] 引脚状态决定数据输
出格式选择 , CLK 引 脚 需 要 输 入 A / D 转换器工作时钟 ,
SYNC 、 SCLK 、 DOUT [ 8..1 ] 引脚是控制 A / D 转换的数据
串行输出帧同步 、 时钟 、 8 通道数据 。 图 2 为 ADS1278 的
SPI 格式下 , 时钟和数据时序图 。
2.2 ARM 与 FPGA 的接口设计
本 系 统 核 心 采 用 ARM 和 FPGA 的 组 合 方 式 , 在
ARM 和 FPGA 之 间 采 用 3 片 双 口 RAMIDT7205 进 行
24bit 数据传输 , 其中 , FPGA 器件控制 A / D 转换 , 并将转
换数据按照一定顺序存储到双口 RAM 中 , 当数据存储完
后将中断 ARM , ARM 将双口 RAM 中的数据进行读取 ,
比使用 FIFO 传输的方案降低了成本 、 提高了数据传输的
吞吐量 。
本系 统 中 FPGA 的设计作用如下 : 复 位 并 配 置
ADS1278 的工作 模 式 , FPGA 内部设置一个地址加法器
控制将 A / D 转换器的数据写入双口 RAM 中 , 当 双 口
RAM 写满 后 , 大 小 24 KB , 地址加法器复位 。 ARM 与
FPGA 的接口方式 有 很 多 种 , 如 IIc 、 spi 等串行接口或总
线等并行接口 , 串行接口由于本身的局限性限制了其在大
数据量 、 实时数据的传输的应用 , 而总线的形式更合理一
些 , 稳定性较之更好一点 。 但 ARM 与 FPGA 通 过 地 址 、
数据 、 控制总线直接连接的方式在大数据传输时会影响系
统的效率 , 因 此 , 在 ARM 与 FPGA 之 间 采 用 双 口 RAM
进行连接的方 式 , ARM 与 FPGA 异 步 工 作 , 提 供 了 系 统
的效率 。 其接口如图 3 所示 。
FPGA 的 控 制 信 号 WR 、 RD 、 nRESET 与 双 口 RAM
IDT7205 的复位信号 RS 、 读写信号 WR 和 RD 连接 , 数据
总线 D0 ~ D23 与双口 RAM 的数据总线连接 , FPGA 通过
内部地址加法器依次将将 A / D 转换器的数据串并转换后
写入双 口 RAM 中 。 双 口 RAM 的 EF 、 HF 信 号 分 别 与
PXA270 的 GPIO0 和 GPIO1 连接 , 接受数据写满后产生
的中断 。 PXA270 提 供 6 个分区的静态存储器 Bank0 ~
Bank5 , 设计将双口 RAM 的存储空间映射到 PXA270 的
Bank3 上 。
3 驱动程序设计
为了实现 ARM 与 FPGA 通过双 口 RAM 的 数 据 传
输 , 需要设计嵌入式 Linux 下的驱动程序 [ 8 ] 。 当 FPGA 将
数据写到双口 RAM 中 , 根据双口 RAM 中数据的状态中
断 ARM 处理器进 行 数 据 读 取 。 这一过程主要需要中断
和总线驱动程序配合 。
在中断驱 动 程 序 中 , 通 过 request _ irq () 函 数 为 双 口
RAM 的中断分配中断请求 ( IRQ ) 号 , 当处理器检测到这
一 IRQ 号对应的中断产生时 , 将启动该 IRQ 对应的中断
服务例程 [ 9 ] 。 IRQ 号与中断处理例程是一一对应的 , 在系
统 / porc / interrupts 文件中可以为设备选择 IRQ 号 。 FP -
GA 将 A / D 转换的数据写入双口 RAM 后 , 当数据写满后
会中断 ARM 处理器 , ARM 会响应中断处理例程 , 读取双
口 RAM 中的 数 据 。 中断处理例程首先要清除 PXA270
的中断寄存器相应的位 , 需要通过对状态寄存器相应位进
行写 操 作 , 这是为了能够继续响应双口 RAM 产 生 的 中
断 。 然后是设置数据传输标志位 , 当主程序中检测到标志
位 , 进而调用总线驱动程序进行数据传输 , 这种工作方式
可以避免中断处理例程的冗长 , 提高系统传输效率 。
由于应用程序工作在用户空间 , 它无法完成对总线的
操作 , 而驱动程序工作在内核空间 , 可完成对总线的操作 ,
因此 , 在总线驱动程序中 , 必须支持应用程序对总线的操
作 , 以完成数据的传输 。 传统的 Linux 应用程序需要通过
总线驱动程序完成对总线空间的访问方法是通过 2 个函
数完成用户空间与内核空间之间的数据传递 , 其中内核空
间向用户空间传输数据使用 copy _ from _ user 函数 , 用户空
间向内核空间传输数据使用 copy _ to _ user 函 数 。 copy _
from _ user , copy _ to _ user 等 。 这种方法虽然能完成 2 个空
间的数据传输 , 但是效率不高 , 最好的方法是将内核空间
能访问的物理地址直接映射到用户空间 , Linux 内核提供
了 remap _ page _ range 函数 , 应用程序对该用户空间的地
址访问相当于直接对物理地址的访 问 [ 9 ] 。 本 文 的 总 线 驱
动程序就是直接映射的方法 , 来完成快速的读写 。
下面是驱动程序代码段 , 它使用 remap _ page _ range ()
函数在驱动程序中完成 mmap 系统调用中物理空间到虚
拟空间的映射 , remap _ page _ range () 函数原型如下 :
intremap _ page _ range ( vma _ area _ struct * vma , un -
signedlongfrom , unsignedlongto , unsignedlongsize , pg -
prot _ tprot );
remap _ page _ range () 函数的调用需要初始化 。
虚拟内存空间指针 vma 、 起始地址 、 物理地址 、 映射区
域字节 数 等 参 数 。 首 先 计 算 物 理 地 址 , 然 后 通 过 右 移
PAGE _ SHIFT 位 , 本系统使用 PXA270 的 Bank3 的物理
空间 , 起始地址 0x0c000000 , 大 小 为 4KB 映 射 到 虚 拟 空
间 。 驱动程序中 , 还需要判断虚拟内存大小和偏移了指定
距离后物理内存的大小 , 如果虚拟内存过大 , 应该返回并
提示映射超出允许的内存空间 。
调用 remap _ page _ range () 函数过程如下 : remap _ page _
range ( vma , vma- > vm _ start , 0x0c000000 + vma- > vm _
pgoff << PAGE _ SHIFT , vma- > vm _ end- vma- > vm _
start , pgprot _ noncached ( vma- > vm _ page _ prot ));
应用程序中调用 mmap 系统就是对 mmap () 函 数 的
参数初始化 。 mmap () 函数原型如下 :
void * mmap ( void * start , size _ tlength , intprot , int
flags , intfd , off _ toffset );
首先将文件描 述 符 fd 指 定 的 设 备 文 件 与 start 处 开
始的内存空间关联 , 通常将 start 设为 0 , mmap () 函数返回
实际关联 的 内 存 地 址 。 length 为内存映射的字节长度 ,
prot 为内 存 保 护 类 型 , flag 为 映 射 类 型 , MAP _ SHARED
标识符表示与其他所有映射这个对象的进程共享内存区
域 。 本设计调用 mmap () 函数过程如下 :
base= ( unsignedlong * ) mmap ( 0 , 0X100 , PROT _
READ | PROT _ WRITE , MAP _ SHARED , fd , 0 );
4 系统实验结果分析
本系统中 , FPGA 外部晶振频率采用 32.768MHz , 经
过内 部 16 分 频 器 后 得 到 2.048 MHz 时 钟 频 率 作 为
ADS1278 的工作时 钟 。 ADS1278 完 成 8 通 道 24 位 精 度
的采样 传 输 大 约 需 24 μ s , 采 样 数 据 被 FPGA 写 入 双 口
RAM 基本在采样结束后同步完成 。 当双口 RAM 数据被
写满后 , 中断 ARM 处理器进行数据读取 , ARM 的工作频
率为 520 MHz , 外部总线时钟频率为 104 MHz , 配 置
PXA270 外部 Bank3 的 MSC 寄存器为 0x7ff4 满足系统对
双口 RAM 时序读写的需要 。
为了提高采集精度 , 首 先 需 要 对 A / D 转 换 器 进 行 零
偏校准 , 零偏校准后 , 通过动态范围计算公式 20×lg ( 信号
电压 / 噪声电压 ) 得到各通道实际动态范围如表 1 所 示 。
其中零偏电压以转换后的数字形式给出 。 从表 1 中动态
范围一列中可以看出 , 系统各通道实现的动态范围都接近
A / D 转换器 24 位采样精度时的理想动态范围 111dB [ 7 ] ,
测量结果表明本文设计的系统可充分发挥 A / D 转换器高
精度 、 大动态范围的特性 。
信迈提供ARM+FPGA+AD的设计与批量生产解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/news/122986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测(自注意力机制)

分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测(自注意力机制) 目录 分类预测 | Matlab实现KOA-CNN-BiGRU-selfAttention多特征分类预测(自注意力机制)分类效果基本描述程序设计参考资料 分类效果 基本描述 1.M…

【数据结构】数组和字符串(五):特殊矩阵的压缩存储:稀疏矩阵——压缩稀疏行(CSR)

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储b~c. 三角、对称矩阵的压缩存储d. 稀疏矩阵的压缩存储——三元组表e. 压缩稀疏行(Compressed Sparse Row,CSR)矩阵结构体创建CSR矩阵元素设置初始化打印矩阵销毁…

JVM——GC垃圾回收器

GC垃圾回收器 JVM在进行GC时:并不是对这三个区域(新生区,幸存区(from,to),老年区)统一回收,大部分时候,回收都是新生区 GC两种类:轻GC&#xff…

Linux多核CPU启动内核调试(详细)总结

目录 一、综述二、调试流程简介2.1 大体流程2.2 spin-table简介 三、uboot和内核配置3.1 uboot配置3.2 timer配置3.3 GIC中断配置3.4 驱动确认3.5 SMP配置3.6 内核config配置 四、其他相关链接1、[交叉编译linux内核总结](https://blog.csdn.net/Luckiers/article/details/1245…

Cesium 展示——动态绘制添加点

文章目录 需求分析1. 删除重画2. 动态增加需求 点的坐标是通过长连接通信进行实时更新,形成动态点的轨迹 分析 1. 删除重画 在接收到新值后,将新值 push 到数组 weatherRouteList 中,绘制时通过removeall删除所有实体重新绘制,具体如下: watch(){weatherRouteList(ne…

python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈现…

电脑监控软件哪些比较好用

电脑监控软件在当今信息化时代越来越受到人们的关注,它们可以用于保护公司的商业机密,防止员工在工作中做一些不恰当的事情,以及在家庭中监控孩子的上网行为等。 本文将介绍一些比较好用的电脑监控软件: 一、域之盾软件 这款软件…

浅谈Docker原理

文章目录 前言命名空间控制组分层存储镜像和容器Docker EngineDocker Registry 前言 Docker 是一种容器化技术,它通过利用 Linux 内核提供的虚拟化技术和隔离机制,实现了更轻量级的应用程序虚拟化方案 命名空间 Docker 使用了 Linux 的命名空间特性&a…

npm更新包时This operation requires a one-time password.

[访问我的npm包](mhfwork/yt-ui - npm) 更新npm包时出现 This operation requires a one-time password.是因为需要认证 解决办法 1. 点击红线处的链接 2. 进入npm官网获取指定秘钥 3. 再次填入 one-time password 即可

Linux进程地址空间

文章目录 背景进程地址空间分页和虚拟地址空间 写时拷贝 背景 研究背景:我们在之前通过fork函数创建子进程的时候,我们发现fork的返回值有两个,且值不相同但地址确实相同的,我们知道在物理空间上这种情况是不可能存在的&#xff…

conda相关的命令操作

准备切换conda环境 cd C:\ProgramData\Anaconda3\Scripts查看所有环境 conda info --envs选择环境 activate pytorch安装torch pip install D:\installPackage\torch-1.2.0-cp36-cp36m-win_amd64.whl安装torchvision pip install D:\installPackage\torchvision-0.4.0-cp3…

SQL中:语法总结(group by,having ,distinct,top,order by,like等等)

语法总结:group by,distinct ...... 1.分组group by、条件havinggroup byhaving 2.聚集函数count 3.order by4.对表中数据的操作:增insert、删delete、改update增insert删delete改update 5.对表中数据的操作:查select嵌套查询不相…

如何防范AI等技术带来的诈骗风险?从技术、法律、教育等多方面入手

文章目录 前言什么是AI诈骗案例案例一案例二 AI诈骗的特点如何预防和应对AI诈骗建议后记 前言 互联网是一把双刃剑,这是我们常说的一个问题。 随着人工智能技术的快速发展,AI诈骗成为当今社会面临的新兴威胁。不法分子利用人工智能技术,以更…

8.自定义组件布局和详解Context上下文

pages/index.vue layout布局运行在服务端 1、在项目的目录下新建layout文件夹,并新建一个blog.vue布局文件 2、在页面中的layout函数里,返回刚才新建布局文件的名字blog就可以使用了 export default {...layout (context) {console.log(context)retu…

在3分钟内使用AI-Chat生成精美PPT(附AI工具)

前言 在人工智能的大趋势下,AI-Chat是一款令人惊叹的技术。它用强大的自然语言处理技术帮助我们快速生成PPT,提高工作效率。本文将介绍使用ChatAI-Chat生成PPT的方法,以及使用Mindshow转换为炫酷的演示文稿。让技术为我们节省时间&#xff0c…

Ubuntu中使用yum命令出现错误提示:Command ‘yum‘ not found, did you mean:

Ubuntu中使用yum命令出现错误提示:Command ‘yum’ not found, did you mean: command ‘gum’ from snap gum (0.12.0) command ‘num’ from deb quickcal (2.4-1) command ‘yum4’ from deb nextgen-yum4 (4.5.2-6) command ‘uum’ from deb freewnn-jserver (1.1.1~a021…

Stable Diffusion系列(一):古早显卡上最新版 WebUI 安装及简单操作

文章目录 Stable Diffusion安装AnimateDiff插件适配sdxl模型适配 Stable Diffusion使用插件安装界面设置基础文生图加入lora的文生图 Stable Diffusion安装 我的情况比较特殊,显卡版本太老,最高也就支持cuda10.2,因此只能安装pytorch1.12.1&…

计算机网络【CN】介质访问控制

信道划分介质访问控制 FDMTDMWDMCDM【掌握eg即可】 随机介质访问控制 CSMA 1-坚持CSMA 非坚持CSMA p-坚持CSMA 空闲时 立即发送数据 立即发送数据 以概率P发送数据,以概率1-p推迟到下一个时隙 忙碌时 继续坚持侦听 放弃侦听,等待一个随机的时…

25-数据结构-稀疏矩阵-三元组

简介:三元组,意思是一个结构体里,有三个变量,存储矩阵信息。而三元组顺序存储,则是用顺序表,存储三元组,里面包含,三元组类型的一维数组,存储非零元素;总的行…

代码随想录算法训练营第23期day36|738.单调递增的数字、968.监控二叉树

目录 一、(leetcode 738)单调递增的数字 二、(leetcode 968)监控二叉树 一、(leetcode 738)单调递增的数字 力扣题目链接 状态:查看思路Debug后AC。 暴力方法肯定是超时,因此需要…