这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » 经USB端口的模拟和数字I/O

共1条 1/1 1 跳转至

经USB端口的模拟和数字I/O

助工
2008-04-25 16:21:55     打赏
本文给出通过计算机USB端口得到16位数字I/O和12位模拟I/O。用Gigatechnology USB 模块和 LTC1286ADC、LTC1451DAC 实现本设计。

USB模块

 

 

  USB模块

  USB模块(图1)接入USB总线,它提供字节宽的双向信号。4个其他信号控制数据流。为了从PC得到数据,等待直到*RXF输出为高态和*RD输入为低态为止,然后数据呈现在双向引脚。在*RD变化状态之后,*RXF输出变高态。重复此过程直到读出所有数据为止。在*WR输入的负沿送数据到PC,*TXE输出应变高态。当它再次变低态时,可以发送更多数据。

数字I/O寄存器

 

 

  数据输出

  从PC送数据到USB模块,过程为:

  ·打开器件;

  ·从PC发送代表数据的字符串;

  ·关闭器件。

  当从PC发送数据到模块时,Visual Basic程序检测代表数字数据的检查单元中的变化或定义ADC输出的区域中设置变化。程序汇编字符串,每个字符的bit5和bit2表示被发送的模拟和数字数据。Bit3表示选通数据进入74HC595输入寄存器(图2)和LTC1451寄存器的时钟信号(图3)。在数据正确地放送后,后跟两个字符。Bit1选通数据进入74HC595输出并驱动LTC1451门*CS输入。

模拟I/O电路

 

 

  尽管DAC是12位器件,但它可以接收16个时钟脉冲,它仍然能正确工作,这是因为恰当地选通*CS输入。因为它首先接收数据MSB,所以,bit0必须在数字输出字bit16相同时间发送,bit11与数字输出字bit4的相同时间发送,这靠软件实现。

  ADC具有内部2.048V基准和倍数2放大器,因此,毫伏输出是方便的等效码。

  数据输入

  数据输入过程如下:

  ·打开器件;

  ·从USB模块中读表示数据的字符串;

  ·关闭器件。

  为了从USB模块中读数据到PC,程序汇编锁存在74HC589输入寄存器中的字符中,此时再次用bit1。字符串其后的字符再次选通bit7低态和高态,选通U3a(图1)并送其Q输出为1。U3a的Q和*Q输出信号控制74HC589器件的*SLOAD输入和LTC1286的*CS输入。它也去除来自U4的复位信号,允许工作直到其Q9输出变逻辑1为止,通过U3b复位U3a。当U4工作时,其Q4输出提供16个时钟沿来选通来自LTC1286的数据输入。此信号经反相器也选通74HC589(图2)和USB模块的*WR输入。74HC589和LTC1286 ADC(图3)在时钟沿的不同极性转换数据,而电路能确保USB模块在有效时钟沿之间的中间状态接收数据。

  来自USB模块的模拟和数字数据分别从模块返回字符串中bit6和bit4获得。在*CS有效之后,ADC在第4个时钟脉冲给出其输出的最高有效位(D11),其他位紧随其后,在第15个时时脉冲输出最低有效位(D0)。为了与数字输入具有共性,电路中给出第16个时钟脉冲;在第16个脉冲期间,ADC再一次输出D1。因此,软件除去USB所接收的转换数据最后1位,并转送剩余的其他正确位。

  因为时钟率必须低于单纯数字情况下的时钟率,所以,不需要来自USB模块的*TXE信号。在此采用4MHz振荡器连率,需要选择U4的不同输出以获得ADC所用的低于200KHz时钟率。

  在ADC之前有一个1增益运放,提供高输入阻抗并使ADC所产生的噪声与输入隔离。电位器(图3)补偿放大器漂移并设置到零输入电压时ADC读出零。本文所用ADC是12位器件,其输出码是:4096×Vin/Vref,其中Vref是由LM3852-2.5提供的2.5V电压。

  软件

  软件分为三部分:

  ·专用于本系统的Visnal Basic码;

  ·码编译版本;

  ·包含动态链路数据库(DLL)的.Zip文件,这可使Visual Basic存取需要控制USB模块的函数并能驱动此模块。这可从Future Technology Devices International公司的网站

 




关键词: 端口     模拟     数字     模块     数据     输出     输入    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]