×

基于USB2.0的16bit数据采集系统

消耗积分:1 | 格式:rar | 大小:0.4 MB | 2017-10-27

分享资料个

 摘 要:介绍了一种利用USB2.0的高速传输特性,基于USB和DSP的数据采集系统。详细论述了系统的总体结构、部分硬件设计,并简要叙述了相应固件程序的实现。
  关键词:USB DSP FPGA 高速传输
  测量仪器一般由数据采集、数据分析和显示三部分组成,而数据分析和显示可以由PC机的软件来完成,因此只要额外提供一定的数据采集硬件就可以和PC机组成测量仪器。这种基于PC机的测量仪器被称为虚拟仪器[1]。而在一些数据量比较大、采集时间比较长的场合,就需要采用高速的数据传输通道。基于虚拟仪器的思想和高速传输通道的要求,设计了一种基于DSP和USB2.0的高速数据传输接口。
  1 数据采集系统硬件
  数据采集系统由A/D数据采集单元、USB从接口单元、U盘读写单元组成。硬件原理图如图1所示。被测信号经A/D转换后写入FIFO中;当FIFO数据半满后,产生中断,通知DSP进行数据压缩处理;DSP把压缩好的数据依次写入USB接口芯片的4个从FIFO中,4个从FIFO对应USB的4个端点,DSP一边写入数据,已写满的从FIFO就一边通过相应端点由SIE把数据发送到上位机,上位机一边把收到的数据通过多线程存储到硬盘中,一边把数据解压并把波形实时显示出来。对于少量的数据,可以存储到U盘,送回PC机进行分析显示。
  基于USB2.0的16bit数据采集系统
  1.1 A/D采集模块
  作为单通道输入的MAX1189,主要控制信号有CS、R/C(Read/Conversion)、EOC(End of Conversion)。图2为MAX1189的时序图[2]。如图2所示,每个采样周期长达CS信号的三个周期。在第一个CS信号的下降沿,如果R/C为低电平,也就进入了应答模式,这是开始采样前必须的准备工作。为了适应不同的输入极性要求,MAX1189的内部参考电压可以在每次转换结束后进行设置,这是通过在第二个CS下降沿时,R/C的高低电平变化来控制的,非常简便。低电平时,ADC内部参考电压无需进行转换,这样在开始下一个周期的转换时无需等待电压的变化。高电平时,内部参考电压会进行调变,这样在开始下一周期的转换时需要等待大约12?滋s的时间。在CS信号的第三个下降沿,EOC信号变为低电平,表示采样结束,此时R/C信号为高电平,会把采样数据放到总线上,这样就完成了一个周期的采样。采样模块的控制信号是由FPGA控制的。
  基于USB2.0的16bit数据采集系统
  1.2 DSP与FIFO的连接
  主处理器DSP既要控制采集,又要完成数据的处理和传输,因此数据采集模块采集来的数据不能直接传送给DSP,这会极大影响DSP的处理效率。解决办法是利用数据缓冲器如双口RAM、FIFO等,对数据进行适度缓存,当缓存的数据量达到一个设定值时,可以通知CPU进行一次高速数据传输,将缓存的数据一次性地读入。在设计中采用了缓冲,较好地解决了采集端与处理端的速度匹配问题。
  FIFO的读写由各自的控制时钟FIFOR和FIFOW控制,写时钟与采样时钟同步,读时钟与DSP处理数据的时序有关。当FIFO半满后,FPGA会根据FIFOHF、FIFOE/F、FIFOPAFE的相应位判断FIFO是否半满,FPGA便向DSP发出中断请求。本设计中采用外部中断的EXTINT3来作为FIFO缓冲数据的DMA传输触发事件。DSP响应FPGA中断请求,读取数据进行数据压缩。当DSP数据处理速度跟不上采集数据速度时,FIFO就会全满,FPGA根据FIFOHF、FIFOE/F、FIFOPAFE相应位状态判断到FIFO已全满,于是向USB接口芯片单片机发出最高级中断请求,通知系统数据己溢出,采集发生严重错误。
  1.3 USB从接口电路
  USB从接口单元采用CYPRESS的CY7C68013芯片。如图3所示,USB接口芯片CY7C68013由3.3V电源供电。PAO/INTO#选择INTO工作方式,其中断级别最高,当FIFO全满造成数据溢出导致数据采集发生严重错误时,该中断请求发生,系统通知数据溢出错误,并停止数据采集。RESET#为USB接口芯片复位输入。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.jibsdb.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于USB2.0的16bit数据采集系统',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"https://www.elecfans.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);