DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1507|回复: 1
打印 上一主题 下一主题

[待整理] 基于CH371的USB接口虚拟示波器设计

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-5 12:21:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于CH371的USB接口虚拟示波器设计

摘要:本文介绍一款USB接口的虚拟示波器的设计方案,重点介绍了USB总线接口芯片CH371的原理及应用,降低了USB系统开发的门槛,并达到令人满意的效果。    关键词:USB接口,虚拟示波器,CH371,高速数据采集
    一、引言
    对于学校教学实验以及某些特定需求来说,目前市场上的模拟及数字示波器也许并不适用,价格高昂、体积较大且很多专业功能并不实用。而现在电脑的普及程度也达到了相当的规模,利用电脑以及附加的数采模块实现一个灵活便捷的虚拟示波器能够满足大多数的工作、学习和开发需要,并且可以通过较低代价的硬件和软件升级实现相当复杂的信号处理功能,能够以较低的成本、较小的体积实现配置灵活的智能仪器组合;完全可以与便携电脑结合,构成便携式检测维修工作站。目前已经有计算机并口通信的数据采集器,但是USB的应用日趋广泛和深入,如果将USB功能融合在里面则可以实现更高的数据传输率、更方便的使用方式,更为优越的体现出虚拟仪器的性能。
    二、硬件设计
    此虚拟示波器的数据采集器由以下功能模块组成:前端信号变换模块、高速模数转换模块、高速数据缓冲模块、单片机控制模块、USB接口模块和电源模块。前端信号变换、高速数据采集有成熟的方案并且可根据需要的指标,譬如采样率、量程控制、采样深度等进行设计,我们这里主要讨论USB接口部分的开发。
    USB接口的开发以往都是一个令人头痛的问题,尽管很多设计者向往USB接口高速传输、自主供电、即插即用的优点,但较难逾越它的协议固件开发和驱动程序开发的障碍。在这个方案里,笔者选用了一款不需要开发协议固件和驱动程序的USB总线接口芯片。
    南京沁恒公司(www.winchiphead.com)推出的CH371是一个USB总线的通用接口芯片,它利用硬件逻辑屏蔽了USB 通讯中的所有协议,在计算机应用层与本地端控制器之间提供端对端的连接。基于CH371,设计者不需要了解任何USB协议、固件程序以及驱动程序,可以轻松地将原来的并口、串口的产品升级到USB接口,以较低的风险和成本享用USB接口带来的优越性。
    使用时在本地端,CH371具有8位数据总线和读、写、片选控制线以及中断输出,就像操作一般外设芯片一样方便地挂接到DSP、MCU等控制器的系统总线上;在计算机端,CH371的配套软件包括通用驱动程序以及应用软件包,提供了简洁易用的操作接口,与本地端的单片机通讯就如同读写硬盘中的文件一样简单,开发者可以使用VB、VC、C++Builder等高级语言进行开发。一般情况下,基于CH371设计USB产品不必考虑USB通讯协议、固件程序、驱动程序、配置过程、底层数据传输过程。设计者所要做的工作与设计并口、串口的产品一样,包括两件事:一是从计算机的应用层发出数据传输请求并接收应答;二是当USB 产品的控制器被通知有数据传输请求时,作出应答。
    同时,CH371在提供了透明的USB协议的基础上还提供了I2C器件的直接管理、16个地址的直接读写以及复位、看门狗等功能,本地端甚至不使用单片机就可完成简单的控制功能,因此具有较强的功能适应性,能够满足不同场合的需要,有效的降低系统成本。
       根据不同的工作方式,芯片的接口类型可以有以下几种:被动并行接口、I2C主接口、主控方式接口。其中被动并行接口是最常用的方式,它提供单片机与计算机的连接,CH371作为单片机的一个被动外设;I2C主接口是CH371在计算机端程序的控制下不经过单片机直接读写一个EEPROM器件(譬如24C04等),经常用于USB外设的产品信息纪录;主控方式接口是不使用单片机,由计算机端程序直接控制CH371提供的16个地址的8位数据读写或者是十几根IO口线,此方式主要用于完成相对简单的外部控制任务。这几种接口方式并非完全对立的,可以根据需要灵活配置。在此虚拟示波器中则将其使用为单片机的一个外设器件,同时将A3~A0用于主控方式由计算机控制四只LED。
    单片机对于CH371的控制依靠对其内部的16个寄存器的操作来实现。这16个寄存器的地址有两种定义方式。一种是上电复位后默认为直接地址方式,A3~A0四个管脚为寄存器地址,这种方式较为简单,但是需要使用单片机较多的IO口资源;另一种是当CH371检测到ALE脚上的上升沿信号后,切换到复用地址方式,寄存器地址由数据总线的D3~D0来控制,根据ALE的跳变来判断是寄存器操作还是数据读写。在此设计中由于大容量数据缓冲需要使用到74373作为地址锁存,所以即使使用直接地址方式也无需多占用单片机资源,但是为了将A3~A0节省出来驱动LED所以选用复用地址方式。
    根据系统的要求我们设计硬件如下。
    USB接口提供数据交换及电源供应(经适当变换后供高速AD使用),CH371在12M晶振下倍频工作,提供与单片机接口的同时提供看门狗复位输出功能,I2C主控功能没有使用,A3~A0可以由计算控制驱动4只LED作为工作显示信号。单片机89C52的P1口组用于控制数据采集模块,包括量程转换控制、AD触发信号、采集数据溢出信号等;高速缓存62256通过低功耗的CPLD控制存放高速AD采集的结果,单片机定时将其中数据读出经CH371传送到计算机的数据显示和分析软件,实现虚拟示波器功能。
    三、软件设计
    单片机端软件:
    单片机端软件主要完成数据采集控制、数据报告这两个功能。其中数据采集控制根据计算机端软件设定的增益、时基、触发等参数控制数据采集模块,这里面要用到计算机向单片机发送少量的控制信息;数据报告功能则需要单片机将缓存中的一个采集周期的所有数据传送给计算机端软件,这属于大批量数据的传输。我们把介绍的重点放在单片机与计算机的通信上面。
    单片机与计算机通信是通过对CH371的寄存器操作实现的,有关其寄存器定义的具体情况请参考数据手册。
    在应用中需要注意的是,CH371提供的单片机接收缓冲区为8个字节,多于8个字节的计算机下传数据被切分;而单片机的发送缓冲区也是8个字节,多于8个字节的上传数据需要分多次上传。另外,CH371的中断包括了上传及接受成功,中断发生后具体的情况需要由传输状态寄存器来辨别;同时其中断电平是单稳态的,一个事件发生后中断信号跳变,但仅维持一个短暂的脉冲便恢复,这是为了配合不同速度的处理器而作的处理。

    单片机与计算机的USB通信主要功能子程序示例如下:(请在使用时加入CH371的相应寄存器的地址定义)
file://********** CH371初始化程序******************************
void ch371_init()   
{   
   CH371_INT_SET=0;  file://CH371中断数据设定寄存器的地址偏移   
   CH371_LENGTH=0X0F;  file://置上传数据长度寄存器为15,表示暂时没有数据上传
   save_length=0;   file://保存下传数据长度
   IT0=1;      file://外部信号为下降沿触发
   IE0=0;      file://清中断标志
   PX0=1;      file://置高优先级
   EX0=1;      file://允许中断
}
file://***********上传数据子程序********************************
void ch371_upload(unsigned char len) file://参数传入数据长度
{
   unsigned char i;
   unsigned char *up_buf;
   unsigned char *ch371_buf;
   if(len!=0)
{
     up_buf=&ret_buffer;    file://指向数据的地址                  
     ch371_buf=&CH371_BUFFER;  file://指向数据缓冲区
     for(i=0;i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-11-15 10:04 , 耗时 0.096794 秒, 17 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表