微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 医疗电子 > 基于ARM的脉象仪系统设计与实现

基于ARM的脉象仪系统设计与实现

时间:06-09 来源:互联网 点击:
本文介绍了一种基于ARM微处理器的脉象仪系统,该系统以S3C2410嵌入式芯片作为硬件平台。并且详细分析了基于uClinux嵌入式操作系统的软件设计方法。实践证明该系统有效地提高了诊断的精度与效率,具有成本低、可靠性高、操作简单等优点。

  1 引言
  脉象携带有丰富的人体健康状况的信息。在中医学中,脉诊占有非常重要的位置。由于中医是靠手指获取脉搏信息,在长期的医疗实践中也暴露出一些缺陷。脉诊的定性化和主观性大大影响了其精度与可行性,成为中医脉诊应用和发展中的制约因素。为了促进脉诊的应用和发展,必须与现代科技相结合,实现更科学、客观的诊断。随着嵌入式技术的飞速发展,我们研制出一种基于ARM920T处理器的新型脉象仪。它采用一款ARM920T核的高速处理器S3C2410。该新型脉象仪具有成本低,体积小,可靠性高和操作简单等优点,适用于个人和中小医院的脉象诊断用途。
  2 系统总体设计思想
  按照中医脉诊的理论,从左右手腕的寸、关、尺三部按不同的轻重可获知人体五脏六腑的病理变化,模拟中医脉诊过程,设计中医脉象仪。脉象仪原理图如图1所示。


图1 脉象仪原理图

  应变式传感器是脉象仪普遍采用的一类传感器。某些固体材料受到外力的作用后,其电阻率要发生变化,这种由于应力的作用而使材料电阻率发生变化的现象称为压阻效应。半导体应变片测量应变的原理是以半导体晶体的压阻效应为基础的。用此应变片制成的传感器称为半导体应变式传感器。传感器结构图如图2所示,上下各一片半导体应变片。


图2 传感器结构图

  应变式传感器的基本组成部件包括:应变片、弹性元件、测量电桥。本文中选用悬壁梁式压力传感器,应变片采用半导体应变片。
  3 系统硬件模块设计
  3.1 嵌入式处理器的选择
  系统采用了ARM920T作为系统与上位机沟通的桥梁。该实验箱如图3所示。


图3 ARM920T实验箱图

  ARM920T有如下几个主要特点:处理器有高性能的RISC构架;大量的内部寄存器让它的执行效率非常高,使它成为实时控制设备的理想选择。片上的Flash可在线编程。
  片上资源包括2个32位定时器;1个A/D输入接口;18个多功能I/O接口;1个CPLD;1个64M的SDRAM;1个4M的Flash;1个64M 的Nand Flash控制器;还有中断控制器和系统管理器。
  处理器采用芯片S3C2410。S3C2410有出色的内核性能,丰富的外部接口和低功耗。在系统中我们用到2种内存,一种SDRAM,一种Flash。
  SDRAM具有运行速度快的优点,但是掉电后不能保存数据。所以在系统主要是用来运行操作系统、应用程序和各类数据的缓存。
  Flash内存较SDRAM运行速度慢.但掉电后能保存数据。在该系统设计中选用一种通用的Flash (SST39VF1601),容量为2MB,主要用于固化启动代码和控制应用程序,并保存一些系统数据。
  3.2  A/D转换
  A/D转换电路采用MAXIM公司的MAX197,MAX197采用逐次逼近技术以达到快速变换和低功耗。如图4所示。


图4 MAX197

  预处理电路包括了电流电压互感器、隔离电路和同步采样电路,可以将信号转换成MAX197相匹配的量值。图4所示的电路采用了内部时钟。 和 逻辑输入端用于启动变换和从器件读出数据。
  4 系统软件设计
  为了满足系统对实时性和安全性的要求,系统采用了嵌入式操作系统uClinux。uClinux是针对微控制领域而设计的linux系统,是在linux的基础上添加了对没有内存管理单元的微处理器的支持。一方面它继承了linux的稳定性优点,另一方面其内核相当精简。因此在嵌入式领域得到广泛应用。
  该脉象仪系统的软件主要由三个部分组成,系统软件结构如图5所示,包括嵌入式linux操作系统,A/D驱动程序和应用程序。


图5 系统软件结构


  4.1 嵌入式uClinux的构建
  将嵌入式uClinux系统移植到特定的硬件平台上,大致需要完成建立叉编译环境,配置编译uClinux内核,制作根文件系统,下载和调试内核四部分的工作。
  4.2  A/D驱动程序的设计
  在uClinux系统下,驱动程序可以看成uClinux内核与外部设备之间的接口。驱动程序向应用程序屏蔽了硬件实现上的细节。可以使用和操作文件中相同的系统调用接口函数来完成对硬件设备的打开,关闭,读,写以及I/O控制操作。
  本系统中的A/D驱动程序主要结构包括:
  (1)数据类型定义文件
  #define U32  unsigned int
  #define U16  unsigned short
  #define S32  int
  #define S16  short int
  #define U8   unsigned char
  #define S8   char
  #define TRUE       1  
  #define FALSE      0
  #define ERROR      0
  (2)启动A/D转换文件
  void INT_ADC_Enable(int flag)
  {
       int temp;//定义临时变量
       if(flag == FALSE)
       {
              temp = rINTSUBMSK;
              temp |=(1<<10);
              rINTSUBMSK = temp;
              temp = rINTMSK;
              temp |=0x80000000;
              rINTMSK = temp;
       }
       else
       {
              temp = rINTSUBMSK;
              temp = 0x5ff;
              rINTSUBMSK = temp;
              temp = rINTMSK;
              temp &= ~(0x80000000) ;
              rINTMSK = temp;
       }
  }
  (3)主程序文件
  #include "2410addr.h"//调用S3C2410地址头文件
  #include "def.h"//调用数据类型头文件
  main()
  {
  clrsrc();//刷新操作
  INT_ADC_Enable(int flag);//启动A/D转换
  … …
  }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top