数据采集在信息处理系统中占有不可替代的地位,它是以传感器、信号测量与处理、微型计算机等技术为基础而形成的,主要研究信息数据的采集、存储、处理以及控制等作业,具有很强的实用性。数据采集技术已经在雷达、通信、水声、遥感、语音处理、智能仪器、工业自动化以及生物医学工程等众多领域得到广泛的应用。数据采集器一般包括数据采集部分和数据处理传输部分。前者包括信号的滤波、放大、采样、保持、转换、存储等部分,后者包括数据读取、传输及微机接口部分。
1 系统结构及硬件电路设计
1.1 系统的结构框图及工作原理
本系统主要由四个模块构成:flash存储器模块、fpga控制模块、usb接口控制模块及电源模块。如图1所示。
其工作原理是:flash模块存储数据,作为记录器的数据源;fpga模块作为读数装置的控制器,读取flash的数据并传输给usb控制接口模块;usb控制芯片接收来自上位机的命令,并与fpga通信来执行用户需要的操作;电源模块为各模块提供稳定电源。
1.2 电源管理模块
本系统中芯片的工作电压有5 v、3.3 v、2.5 v。由于计算机的usb接口可以提供5 v电源,最大为500 ma的电流,对于此系统已足够,所以本系统的5 v电源直接由usb供电,并利用5 v电源经过电压调节器ams1117调整出3.3 v和2.5 v电源。
1.3 fpga模块
本设计的fpga采用xilinx公司的spartan-2系列的xc2s50,包括fpca配置电路和fpga时钟电路及接口配置。
fpga的配置方式灵活多样,本设计根据芯片是否能够自己主动加载配置数据以及比特流的位宽,利用主串模式进行配置fpca,如图2所示。在fpga的输出端口上为每个端口连接了一个电阻,起到耦合限流的作用,使外部接口与fpga进行匹配,防止电流过大等不良影响而烧坏芯片。
1.4 usb接口模块
一般usb的接口芯片种类大致可分为:主控制器、根集线器、接口芯片以及具有usb接口的微控制器。本设计利用的是ez-usb fx2lp系列的cy7c68013a-128pin芯片。
本设计采用0xc0的eeprom启动方式。即在eeprom中首字节写入0xc0,并将vid、pid、did和配置字节写入eeprom。芯片上电后,将这些数据复制到片内存储器,并将其发送给主机,由主机根据id数据选择合适的固件程序下载到usb芯片内。本设计使用具有i2c总线接口的串行eeprom芯片at24c64。at24c64具有8192 x 8位容量,可重复擦除100万次。
1.5 flash存储器模块
flash存储器存储着记录器的数据,本设计的目的就是从flash中读取数据并传入计算机进行保存。本设计采用samsung公司的k9f5608uo d nand flash存储器。其特点如下:存储单元阵列为(32m+1024k)bit×8bit;总共64k的块,每块含32页,每页为512+16字节;以页为单位编程(200μs典型编程时间),以块为单位擦除(2ms典型擦除时间);命令、地址、数据复用端口;提供硬件数据保护功能。
本设计的硬件连接电路如图3所示。其中max1658为k9f5608uod提供电源,排阻起到耦合限流作用。
2 软件程序设计
2.1 fpga各模块程序设计
本设计的fpga程序采用xilinx公司的ise软件。它提供给用户一个从设计输入到综合、布线、仿真、下载的全套解决方案,并可以很方便的与其他eda工具接口。
本设计中原理图输入采用其中的第三方软件ecs,hdl综合使用xst,测试台输入是图形化的hdl bencher,仿真使用modelsim se。简要的流程如下:
建立工程项目;综合;仿真;定义输入输出管脚约束;布局布线;下载配置。
flash模块程序设计中flash控制模块对flash存储器k9f5608uod执行各种操作。k9f5608uod芯片提供了8种命令,即8种操作:①读1操作;②读2操作;③读id操作;④复位操作;⑤页编程操作;⑥复制回读操作;⑦块擦除操作;⑧读状态操作。
2.2 cy7c68013固件程序开发
usb功能设备的硬件功能主要由硬件上的微处理器来实现,因此需要为usb设备编写固件程序。本设计的usb固件程序开发中,使用keil software公司推出的51系列兼容单片机软件开发系统keil μvision3。
图4所示为68013a的固件程序流程图,下面介绍如何编程。本设计采用固件框架中的dscr.a51文件,修改设备描述符中的id码和字符串描述符,并修改相应的端口配置,其余保持默认状态。主机发送8字节的setupdat数据包后,68013a将其进行解码存入setupdat寄存器中。
setupdat[1]中存储着usb发出的请求码。在固件程序中使用switch-case语句对不同的请求码进行分析,分别进行相应的响应。
对于标准usb请求,在cy3684开发包内已有完善的函数框架,本设计在保持其默认状态下,修改其中的处理函数,使其符合本设计的要求。在fw.c文件中,最主要的两个函数为main( )函数和setupcommand( ),其中main( )函数控制整个68013a的程序流程,setupcommmad( )则对不同的设备请求进行分析,并调用响应的执行程序。
在本设计需要使用自定义请求来介绍上位机的flash操作命令,因此需要在usb固件程序中声明自定义请求。自定义请求和标准usb请求放在一起,但不能和已有的请求号相冲突。同时还需要编写自定义请求对应的处理函数。程序框架如下:
此请求包处理放在setupcommand(vdd)函数内。
对于对应的处理函数则在pefiph.c文件中进行定义。所有的usb设备请求响应函数,中断函数都在此文件中定义。同时设备初始化函数td_init( ),用户功能函数td_poll( ),挂起函数td_suspend( )和usb复位函数( )也都在此文件中定义。
本设计采用在上位机发送自定义请求a1,并在自定义请求中包含对flash操作的命令字,68013a在分析得到自定义请求a1后,在自定义请求a1中把命令字保存入一个全局变量,在用户功能函数td_poll( )中执行对命令字的分析并调用相应的flash操作函数。对于传输到上位机上的数据通过自定义请求a2、a3来执行。
3 结论
本设计根据usb总线技术、fpga技术及面向对象程序设计方法,对电路的组成原理、接口电路设计、系统控制信号的设计及usb上位机程序的设计做出详细的说明,设计出基本符合课题要求的usb读数装置及上位机程序,基本完成了工作要求。当然本设计在usb接口的速度方面还需考虑更完善的方案。希望在以后的学习工作中能够改进。
基于物通博联数据采集网关的闸泵站远程监控运维系统
NVIDIA高性能AI计算和高级算法助力解决停车难题
自下而上设计,精细合成硬碳微结构—高效碱金属负极!
云南电信携手中兴通讯打造出了首家5G智慧医疗示范医院
跑步运动耳机哪个好用,蓝牙运动跑步耳机推荐
USB读数装置及上位机的设计
产品抄数逆向抄数产品三维3D扫描检测蓝光高精度三维扫描仪手持式三维扫描仪便携式
美云智数交出了一份不一样的答卷——全价值链企业云MeiCloud
SD NAND:儿童玩具的多功能存储神器
什么是电隔离?USB 电源隔离解决方案
氮气吹干仪氮气吹扫仪有什么区别吗?
吸尘器哪个牌子好?做你无微不至的朋友
学习单片机外围器件,选择开发板很重要
一文看懂苹果造车史
磁场效应的火车道报警信息采集系统设计详解
中国锂电的全球机遇有哪些
无人机茶树病虫防治智能技术省时省力 预计明年将大面积推广
行业 | 功率半导体需求旺,预计2030年SiC增长10倍,GaN翻至60倍
不同的物联网无线技术其应用场景也不一样
KD101磁粉离合驱动器