新闻中心

EEPW首页>消费电子>设计应用> 基于USB和便携式医疗设备的数据采集系统实现

基于USB和便携式医疗设备的数据采集系统实现

作者: 时间:2012-04-30 来源:网络 收藏

引言

本文引用地址://m.amcfsurvey.com/article/165726.htm

  传统的,特别是的监护、心电、血压测量等设备均是采用标准的RS232串行接口进行数据的通信与传输,已越来越不能满足高速据传输,高数据存储以及频繁的等要求[1,2]。而通讯弥补了这些不足,它有着传输速度快、可靠性高、易于连接、可热插拔等许多优点。此,本文就介绍了一种总线接口芯片CH375PC机与医学信号的实时和传输的方法,并给出了相应的源程序。经测试,工作稳定可靠。

  1 CH375芯片简介

  CH375 是一个总线的通用接口芯片,支持USB-HOST主机方式和USB-DEVICE/SLAVE 设备方式。在本地端,具有8 位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片/DSP/MCU/MPU等控制器的总线上。CH375 芯片内部集成了 PLL 倍频器、主从 USB 接口 SIE、数据缓冲区、被动并行接口、异步串行接口、命令解释器、控制传输的协议处理器、通用的固件程序等。

  CH375 芯片内部具有 7 个物理端点。端点 0是默认端点,支持上传和下传,上传和下传缓冲区各是8B;端点1包括上传端点和下传端点,上传和下传缓冲区各是 8B,上传端点的端点号是81H,下传端点的端点号是 01H;端点2 包括上传端点和下传端点,上传和下传缓冲区各是 64B,上传端点的端点号是 82H,下传端点的端点号是 02H。主机端点包括输出端点和输入端点,输出和输入缓冲区各是64B,主机端点与端点2合用同一组缓冲区,主机端点的输出缓冲区就是端点2的上传缓冲区,主机端点的输入缓冲区就是端点2 的下传缓冲区。本就是利用批量端点2来下传数据到缓冲区,利用主机端点和端点1来上传数据到缓冲区。

  CH375芯片内置了标准的USB通讯协议,这就免去了开发人员因编写通讯协议而耗费的大量时间,方便了通讯的。尤其是其动态链接库提供的文件级接口,更是方便了数据的读写。

  2 系统硬件结构

  系统的工作过程是嵌入式即下位机(PC104)于DOS状态下采集医疗信号送显示器显示,然后通过USB接口送上位机(PC主机)处理,上位机工作在Windows环境下[3,4]。

  系统选用带USB接口的PC104工业计算机主板,在开发过程中通过电源接口外接5V直流电源,通过显示器接口外接显示器,多功能接口外接键盘。为方便软件的更新,我们把下位机的工作程序写在优盘,外接于PC104主板的USB接口。

CH375芯片的系统还设计了PC104-USB转接板,并把其作为PC104主板的扩展模块通过PC104总线接口与主板相连接。转接板上有两个USB接口,任选其中一个通过 USB转接线与上位机相连即可。这样系统的硬件平台便建立起来了,系统硬件连接如图1所示。下面详细介绍系统通讯的软件

系统硬件结构图

  图1 系统硬件结构图

  Figure 1 system hardware structure drawing

3 下位机中的程序设计

  USB协议规定任何传输过程都是由主机端发起并控制的,CH375在接收到主机发来的数据时产生中断,为此下位机要做的工作就是等待CH375的中断并作相应的处理。

  下位机工作在DOS状态,软件程序采用BORLANDC语言。主要工作是初始化CH375、查询中断及中断处理。相关程序代码如下:

 (1)处理接收数据的中断服务程序

  void interrupt USB(__CPPARGS)

  {

   unsigned char len,i;

   //获取中断状态并取消中断请求

  CH375WriteCmd(0x22);

   d0=CH375ReadData(); //读回状态

  if((d0==0x02)||(d0==0x01)) //批量端点2接收到PC机发送的数据

  {//读取数据}

   inportb(0x21);

   outportb(0x20,0x20); //发EOI命令,

   清除中断

  }

(2)写数据子程序

  void CH375WriteData( unsigned char dat )

  {

   /* 写数据口 */

  outportb( PortBaseAddr + 0, dat );

   DelayuS( 1 );

  }

  (3)读数据子程序

  unsigned char CH375ReadData( void )

  {

   unsigned char d;

   DelayuS( 1 );

   /* 读数据口 */

   d = inportb( PortBaseAddr + 0 );

   return( d );

  }

 (4)主程序

  int main(int argc,char *argv[])

  {

   ..................

   for(;;) //等待

   {//软件进入主循环,处理突发事件

   while(kbhit()) ch=getch();

   if(ch==27) break;

   if(ch==59){.//向PC机发送数据}

   if(ch==60){//写中断特征数据}

   readbufUSB(); //读USB接口缓冲区数据

   }

   ..................

  }

  4上位机中的程序设计

  因为CH375的动态链接库DLL提供了许多API接口函数,所以应用程序只需通过几条简单的文件操作API函数,就可以实现与下位机的通信。

助听器原理相关文章:助听器原理



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭