变频器与传动 | 高压变频器 | 运动控制 | 机器人技术 | 机械传动 | 电力电子 | 传感器 | 嵌入式系统 | PLC
  | 工业以太网 | 人机界面 | 工业计算机 | 现场总线 | 仪器仪表 | 低压电器 | 自动化软件 | DCS
首页 | 企业专栏 | 产品中心 | 新闻动态 | 商业机会 | 技术园地 | 展会媒体 | 人才交流 | 论坛 | 有奖调查 | 帮助 
  论坛首页 → 运动控制 → USB-GPIB控制器的硬件电路设计
发表新的主题 发起新的投票 发起新的交易 发起新的任务 回复话题
标题:USB-GPIB控制器的硬件电路设计
gigabyte
等级:风云使者
权限:普通用户
积分:2160
金钱:1782
声望:3
经验:1044
发帖数:1061
注册时间:2007-7-30
收藏 编辑 删除 楼主
1  系统总体设计方案
    硬件电路的设计分为硬件和固件两部分。硬件要实现PC机与USB芯片的通信以及USB与GPIB接口逻辑之间的通信;同样,固件也要满足USB接口和GPIB逻辑协议。设计思路就是USB接口与PC机实现通信,并且提供给GPIB的信号线,最终建立两者之间的通信,硬件总体框图如图1所示。

    USB主芯片选取了Cypress公司CY7C68013控制芯片,芯片结构如图2所示。CY7C68013集成了以下特性:USB2.0收发器、SIE(串行接口引擎)和增强型8051微处理器;8051程序从内部RAM开始运行;4个可编程BULK/INTERRUPT/ISOCH-RONOUS端点;8位 16位外部数据接口;通用可编程接口(GPIF);3.3V电源系统;矢量USB中断;独立的数据缓冲区供SETUP和DATA包控制传输;集成I2C控制器,频率可达100或400 kHz;4个FIFO,可与ASIC和DSP等无缝连接;专门的FIF0和GPIF自动矢量中断。
    美国NI公司推出的TMS9914控制芯片是一款高性能CMOS的GPIB接口专用芯片,满足IEEE488协议的要求;工作在TMS9914模式下,能够将GPIB母线上的信号按照GPIB协议进行解码和译码转换为用户可用的格式,同时将用户发过来控制GPIB的信号进行处理,按照协议要求发送到GPIB母线上;内部有16个寄存器,分成两组,一组是只写寄存器,有8个;另一组是只读寄存器,有8个。TMS9914内部各个寄存器的状态决定或标志着芯片及GPIB的工作状态。在GPIB接口设计中,只有通过编程对寄存器进行正确编排,才能实现对GPIB的各种操作。

2 硬件设计
2. 1供电方式

    设计中采用了USB总线供电方式。USB接口从PC机能获取的电压为5V,而USB控制芯片CY7C68013的工作电压为3.3V,GPIB控制芯片TMS9914的工作电压为5V,所以本设计中选用了Maxim公司的MAX882进行电压变换。从PC经USB电缆到B端口来的5V电源,
经去耦合和滤波电路后直接提供给系统中要求在5V正常工作的芯片,如TMS9914、75LS160、75LSl62等;而经MAX882分压后得到3.3V则提供给USB控制芯片CY7C68013以及LVC245。这样就可保证整个控制器正常工作。电路中的SN7524,是专门为USB接口电路设计的,抑制USB数据线的瞬时电气噪声,如图3所示。

2.2 外接EEPROM电路
    系统上电后,USB内核首先检查I2C总线上是否有EEPROM。如果有,并且其第一位数据是0xC2,则EZUSB FX2将EEPROM中的内容全部拷贝到内部RAM中,然后重列举,并开始执行RAM中的固件程序。由于CY68013芯片已经将I2C总线集成,设计转化为对I2C总线上挂接的EEPROM的设计;由于采用的是24LC64的EEPROM,整个串行I2C总线电路实现的原理如图4所示。


3 固件程序设计
    本设计针对的主芯片CY7C68013是以软件为框架的IC。CY7C68013芯片的固件开发所使用的集成开发环境为KEIL μVision2,编程语言为德国Keil公司的C51。把编辑、编译、汇编、连接、调试等各阶段都集成在一个程序内,先用编辑器编写程序,接着调用编译器进行编译、连接后直接运行,因此可以缩短开发周期。
    固件程序负责处理PC机发来的各种请求,主要负责设备与外围电路进行数据传输。完成一个完整的事务传输,除了开发环境Keil包括的文件,还需要Fw.c(固件架构原是程序代码)、Dscr.a51(USB描述符表)、Ezusb.lib(EZUSB函数库对象程序代码)、Periph.c(用户函数,也就是设计中实现GPIB功能要编写的函数)以及相关的中断跳转函数USBjmpTB.OBJ。功能函数里的TD_Poll()负责完成用户指定的功能,应该包括一个执行用户外围功能的状态机。从这个函数返回的话,高优先级的任务应该首先执行。
    void TD_Poll(void)
    if(!(EP2468STAT&bmEP2EMPTY)){
    if(!(EP2468STAT&bmEP6FULL))//判断端点2的FIFO缓冲区是否满
    {APTRlH=MSB(&EP2FIFOBUF);//自动指针1
    APTRlL=LSB(&EP2FIFOBUF):
    AUTOPTRH2=MSB(&EP6FIFOBUF);//自动指针2
    AUTOPTRL2=LSB(&EP6FIFOBUF);
    count=(EP2BCH<<8)+EP2BCL;
    for(i=0x0000;l<count;i++){
    EXTAUTODAT2=EXTAUTODAT1;//将端点2中断的数据复制到端点6
    }
    EP6BCH=EP2BCH;//设置端点6的字节数
    SYNCDELAY;
    EP6BCL=EP2BCL,
    SYNCDELAY:
    EP2BCL=0x80;} //设置端点6的字节数

2007-8-17 11:52:24IP: 保密
 快速回复
  • 支持UBB,HTML标签

  • 高级回复
  • 内容

    操作选项: 加精 解精 奖惩 设专题 设公告 解公告 固顶 总固顶 解固顶 结帖 解结帖 锁帖 解锁 移帖 删帖
       
    中国传动网版权所有
     粤ICP备05100281号 经营许可证编号:粤B2-20060497
    客服电话:0951-5671761 5036968 5051058