基于ARM的脑电信号采集系统

发布者:美丽的1号最新更新时间:2011-07-02 关键字:ARM  脑电信号采集 手机看文章 扫描二维码
随时随地手机看文章

  1 引言

  在线监测系统中,待测信号幅值在50μV左右,而背景噪声幅值在50mV以上,用一般的采集和测量系统无法准确检测该信号。针对被背景噪声覆盖的微小信号,采用滤波降噪和差分放大手段,提高信噪比,保证待测信号能被准确采集;采用基于ARM核的32位微处理芯片S3C44B0X和基于μClinux操作系统的嵌入式图形用户界面MicroWindows,完成实时显示测量结果和实现故障自动报警,同时具有体积小、功耗低、操作灵活的特点,为实现微伏信号在线监测功能提供了一种良好的解决方案。

  2 系统硬件设计

  整个微伏信号在线监测系统硬件主要分为两个部分,即前置放大电路和基于ARM的数据采集与显示电路,如图1所示。

基于ARM的微伏信号在线监测系统设计

  图1 系统方案示意图

  2.1 前置放大电路

  待测信号幅值为50μV,而背景噪声幅值在50mV以上,SNR(信噪比值)在1/1000以下,所以必须根据信号特点进行降低噪声功率,提高信噪比。通过实验,发现信号与噪声频谱不重叠,噪声频率主要集中在高频段。利用滤波器的频率选择特性,可设置低通滤波器,其通带范围能够覆盖信号的频谱,使信号通过滤波器衰减很少,同时噪声频率处于通带之外,通过滤波器后功率大幅度衰减,因此信噪比得以提高。

  本设计采用二阶有源低通滤波器,经实验对比,取二阶有源低通滤波器的截止频率fH为200Hz,品质因数Q为0.707,可使SNR达10以上,SNIR(信噪改善比)达10000以上。

  在实际应用中发现,待测信号和监测系统之间的参考零电势点之间存在电势差,由于两者由同一电源供电,因而形成“地环流”。电流从电源地线流入被测信号的接地点,然后通过信号地线流入监测系统,又通过监测系统的接地点回到电源地线,导致在线监测的过程中地线上出现很高的共模干扰噪声。在这样的工作环境下,使用普通的低温漂高精度运算放大电路,不能准确放大和测量待测信号。因此本设计采用高增益、高输入阻抗和高共模抑制比的三运放差分放大电路,消除共模干扰,如图2所示。[page]

基于ARM的微伏信号在线监测系统设计

  图2 三运放差分放大电路

  集成运放A1和A2都接成同相输入、比例运算电路形式,这样电路输入阻抗很高。电路结构采用严格地对称形式,以使漂移、噪声、失调电压及失调电流等互相抵消。同时采用高精密电阻,以提高测量精度。将滤波后的信号线接入Vi+端口,而把信号地线接入Vi-端口,经过三运放差分放大电路输出电压为:

基于ARM的微伏信号在线监测系统设计

  经实验对比,本设计在强干扰环境下,对微伏信号有较好的放大效果。经过前置放大后的信号,有效地消除了干扰和噪声,具有良好的线性关系,实验结果如图3所示。经过差动放大后的信号,再经过普通运算放大器进行电压平移和放大,即可成为符合A/D采集要求的0~2.5V电压单极性信号。

基于ARM的微伏信号在线监测系统设计

  图3 前置放大电路的线性关系

  2.2 数据采集与显示电路

  本设计中数据采集和显示电路的核心器件采用32位ARM7内核嵌入式处理器S3C44B0X。S3C44B0X内置部件有8通道10位ADC(模数转换器)、8KB cache(高速缓存器)、内置SDRAM(同步动态存储器)、LCD控制器、2通道UART(通用异步收发器)、4通道DMA(直接存储器存取)、71个通用I/O端口等。

  本设计中使用S3C44B0X完成A/D数据采集、LCD控制液晶显示器、键盘输入和故障报警四个主要功能。经前置放大电路处理完成之后的0~2.5V电压电极性信号,由S3C44B0X的10位精度片上A/D采集到CPU中。S3C44B0自带LCD控制器,利用DMA控制器从系统RAM中的显示缓冲区读取显示数据,提供给LCD控制器刷新液晶显示屏。键盘和报警电路利用S3C44B0通用I/O端口进行控制。[page]

  3 系统软件设计

  本系统软件设计基于μClinux操作系统和MicroWindows图形用户界面。μClinux操作系统是从Linux内核派生而来,在标准的Linux基础上进行了适当的裁剪和优化,具有易配置、体积小、易移植的优点。用MicroWindows图形用户界面实现类似桌面电脑的视窗效果,易于实现人机交互。

  系统软件包括操作系统自带的设备驱动程序、操作系统运行环境、根据用户需要自定义的设备驱动程序、封装了底层驱动的中间层接口程序、高级应用程序几个部分。在本系统软件设计中,分别在驱动层和高级应用层程序中实现,其中高级应用层程序框图如图4所示。

基于ARM的微伏信号在线监测系统设计

  图4 高级应用程序框图

  高级应用程序的设计以控制算法为核心,多个任务为控制服务。系统内核定时将测得的数据通过回调函数传递给高级应用程序。高级应用程序为每个被测通道分配一个数据缓冲区,数据缓冲区是个含有10个无符号整型数的数组,GCC编译器默认无符号整型数长度为16位。测量电路中ADC为10位模数转换器,缓冲区中的每个单元的低10位存储数值,最高位为1表示该数据无效或者已经被处理,为0表示该数据有效并等待处理,第10~14位表示数据编号,用以区分不同通道的数据。内核驱动程序把测量数据按格式准备好后,回调函数把数据传送给高级应用程序。应用程序只要使用“与”、“或”操作就可以提取数据类型、实际数据等信息。

  3.1 自定义设备驱动

  设备驱动程序是操作系统和硬件设备之间的接口,它主要完成对设备初始化、实现内核和应用程序与设备之间的数据交换、检测处理设备错误等功能。在μClinux操作系统使用设备文件的方式来进行设备管理应用,一个具体的物理设备被映射为一个设备文件,用户程序可以像对其它文件一样对此设备文件进行打开、关闭、数据读写等操作。[page]

  系统软件设计中的驱动层部分,除了使用μClinux操作系统自带的设备驱动程序以外,需要对外部设备编写自定义的设备驱动程序,以满足操作系统的要求。以字符设备为ADC为例,主要对其编写自定义的驱动程序。使用结构体file_operations{}作为ADC字符设备的函数接口,内核通过这个函数接口来操作设备。自定义后的file_operations{}结构体如下:

struct file_operations ADC_fops = {
    read:           ADC_read,   //从设备中读数据操作
    poll:        ADC_poll,   //查询设备
    ioctl:       ADC_ioctl,   //进行读、写以外的IO控制操作
    open:       ADC_open,   //打开设备
    release:      ADC_release, //关闭设备
    ……};

  编写自定义的驱动程序完成后,内核调用相应的函数即对ADC设备文件进行open、ioctl等具体操作。

  3.2 图形用户界面设计

  图形用户界面(GUI)把图形视窗引入到嵌入式平台上,其友好的界面为大多数用户所接受,也得到越来越广泛的应用。本设计采用MicroWindows来实现图形界面,以窗口形式显示测量数据及其它参数。MicroWindows是一个较早出现的、开放源码的嵌入式图形用户界面软件,它提供了比较完整的图形功能,支持多种外部设备输入,具有占用空间小、可移植性好的优点。在μClinux操作系统上使用MicroWindows易于图形程序的开发。

  MicroWindows采用了层次化结构:在底层提供设备的驱动,在中间层通过一个可移植图形引擎实现绘制多边形、区域填充、使用颜色等,在顶层实现多种API以适应不同的应用环境。MicroWindows API 之间采用消息传递的基本通信机制。消息被储存在应用程序的消息队列中,不同消息对应不同的事件,核心的API通过传递对应相应事件的消息来实现各种功能,如窗口的创建、绘制、移动等等。[page]

  在本设计中,编写基于Microwindows的应用程序,基本结构为初始化、创建窗口与资源、进入消息循环三部分。主程序中相关部分如下所示:

int WINAPI WinMain()
{MwRegisterEditControl(NULL);  // 申明不使用控件
wndclass.style= CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndclass.lpszClassName = szAppName;  // 创建窗口属性的结构体变量
RegisterClass(&wndclass); 
hwnd=CreateWindowEx();  //创建窗口
while (1)
{if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))  //消息查询
{TranslateMessage(&msg);DispatchMessage(&msg);}  //传递消息至窗口处理程序
ScanKey_function();  //扫描键盘
RxKeyvalue(hedit_Param);
……}}

  在调用窗口创建函数CreateWindowEx()后,系统在内存中创建了一个虚拟的窗口,之后调用窗口显示函数ShowWindow()就可将虚拟窗口显示为可视窗口,成为Windows风格的视窗界面。在本设计中,主程序运行时不断调用提取消息函数PeekMessage(),查看消息队列是否收到任务信息,当有信息产生时,就执行对应的消息处理函数。同时,在消息循环里也反复调用键盘缓冲区查询函数RxKeyvalue (),查看是否有键盘输入,以便随时响应。

  4. 抗干扰措施

  在本设计中,采用低温漂的基准稳压电源为前置放大电路供电,并且在每个元件的电源管脚处加去耦电容。元器件选用高精度、漂移小的精密运算放大器;选用高精度、低温漂的精密电阻;信号线采用双绞线或屏蔽线。印刷板布线时,尽量缩短前置放大电路的信号线,并确保了电路接地、屏蔽良好。

  5  结语

  本文创新点在于设计和实现了一种基于ARM的微伏信号在线监测系统,以差动放大方式消除外界对测量信号的干扰,利用S3C44B0X微处理器和μClinux操作系统实现液晶屏显示数据、人机交互和故障自动报警功能,为实现微伏信号在线监测提供了一种体积小、功耗低、操作灵活的解决方案。本设计已投入使用,长时间工作稳定。

  参考文献:

  [1] Samsung公司,《S3C44B0 Microprocessor——Product overview》

  [2] 万沛霖等,低噪声宽频带弱信号前置测量电路的研制,电测与仪表, No.429: 26-27,2001,

  [3] 周立功等,《ARM嵌入式Linux系统构建与驱动开发范例》,北京:北京航空航天大学出版社,2006

  [4] 张进等,基于ARM7的嵌入式系统中频率数据获取与共享,微计算机信息,No.11: 82-83,2006

 

 

 

 

关键字:ARM  脑电信号采集 引用地址:基于ARM的脑电信号采集系统

上一篇:基于ARM的检波器特性测量仪设计与实现
下一篇:基于ARM的GSM远程监控系统

推荐阅读最新更新时间:2024-03-16 12:37

ARM体系结构与编程笔记
存储器映射基本概念 ARM处理器产生的地址叫虚拟地址,把这个虚拟地址按照某种规则转换到另一个物理地址去的方法称为地址映射。这个物理地址表示了被访问的存储器的位置。它是一个地址范围,该范围内可以写入程序代码。 存储器映射控制的必要性 为了让运行在不同存储器空间中的程序对异常进行控制。可以通过存储器映射控制,将位于不同存储空间的异常向量表重新映射至固定地址0x00~0x3F处,以实现异常向量表的来源控制。 APCS规定了子程序调用的基本规则,这些规则包括子程序调用过程中寄存器、数据栈的使用规则以及参数的传递规则。 异常向量表 对于每一个异常事件,都有一个与之相对应的处理程序,它们是关联在一起的,并以一张一维表的格式存储在存
[单片机]
怎样将STM32F4xx标准外围设备库与MikroC Pro for ARM集成
STM32F4xx系列微处理器比市场上同类产品先进得多。除了是快速的32位MCU,STM32F4还具有丰富的硬件外设支持以及DSP引擎优势。就功能和价格而言,STM32F4是全胜者。最近,STM32用户社区激增。 STM32 Discovery开发板正在以前所未有的速度增长。最近,我几次收到读者关于STM32F4xx标准外设库(SPL)与MikroC Pro for ARM集成的切实询问,因此,尽管这不是我关于STM32 ARM的主流文章之一,但我还是觉得我应该解决这个话题。之前,我展示了如何通过MikroC移植STM32F1xx系列设备的STM32F1xx SPL。这篇文章与以前的文章没有什么不同-只是微小的变化。我建议读者在阅
[单片机]
怎样将STM32F4xx标准外围设备库与MikroC Pro for <font color='red'>ARM</font>集成
Adobe为基于ARM的移动设备优化FPlayer
业界对于苹果公司(Apple)所力推的iPhone和美国电信业者T-Mobile推出的G1手机(第一款采用Google公司Android开放平台的设备)普遍存在一种批评──缺乏对于Adobe Flash的支持。造成这种现状的部份原因是解决此问题的难度太大。 “由于性能和储存能力受限,开发可在行动设备上播放Flash的软件难度很大。”Android公司(现为Google旗下子公司)共同创办人Rich Miner说。Miner指出,Adobe公司已经将其针对行动设备所开发的Flash Lite执行环境导入市场,但目前仍难确定行动设备将使用Flash还是Flash Lite来连接至网站。“目前的这些手机平台正逐渐具备足够的性能和内存,
[手机便携]
ARM裸机开发bootloader交叉工具链
今天跟随国嵌,初识linux下ARM的裸机开发全过程。现在总结如下: 首先说明为什么要学习裸机开发,一方面bootloader的编写要用到裸机开发的知识,另一方面就是驱动的开发。一般情况下我们进行系统上的开发,不会用到裸机开发。 学习要点 1、如何修改默认路径 用户 root #vim /root/.bashrc 添加:export PATH=$PATH:路径 生效路径:source /root/.bashrc 2、裸机开发流程:1编写裸机程序。2调试裸机程序。3生产二进制映像(编译、链接、格式转换)。4烧写/运行二进制映像。 led.lds led.SMakefile 编译:arm-linux-gcc -g
[单片机]
ARM移植OSGi框架
目前,嵌入式计算应用已经广泛运行在各种平台,普遍应用于各个领域。如何实现运行在动态环境,或不同平台的这些应用之间的相互发现和交互,或这些应用程序如何根据设备和服务环境的变化自动灵活的动态配置和扩充是近年来研究的一个热点。OSGI规范是嵌入式应用 智能化 发展所需求的一个开放、通用的解决方案。   1 OSGI介绍   OSGI是Open Servicc Gateway Initiative的简称,该组织建立于1999年,是一个非赢利机构,旨在建立一个开放的服务规范,为通过网络向设备提供服务建立开放的标准。OSGI规范为网络服务定义了一个标准的、面向组件的计算环境。软件组件可以从运行中被安装、升级或者移除而不需要中断设备的操作。软件组
[单片机]
arm linux 从入口到start_kernel 代码分析
分类: LINUX 本文针对arm linux, 从kernel的第一条指令开始分析,一直分析到进入start_kernel()函数. 我们当前以linux-2.6.19内核版本作为范例来分析,本文中所有的代码,前面都会加上行号以便于和源码进行对照. 例: 在文件init/main.c中: 00478: asmlinkage void __init start_kernel(void) 前面的 00478: 表示478行,冒号后面的内容就是源码了. 在分析代码的过程中,我们使用缩进来表示各个代码的调用层次. 由于启动部分有一些代码是平台特定的,虽然大部分的平台所实现的功能都比较类似,但是为了更好的对code进行说明,对于平台相关的代
[单片机]
基于ARM和CPLD的嵌入式视觉系统设计
目前,关于视觉系统的研究已经成为热点,也有开发出的系统可供参考。但这些系统大多是基于PC机的,由于算法和硬件结构的复杂性而使其在小型嵌入式系统中的应用受到了限制。上述系统将图像数据采集后,视觉处理算法是在PC机上实现的。随着嵌入式微处理器技术的进步,32位ARM处理器系统拥有很高的运算速度和很强的信号处理能力,可以作为视觉系统的处理器,代替PC机来实现简单的视觉处理算法。下面介绍一种基于ARM和CPLD的嵌入式视觉系统,希望能分享嵌入式视觉开发过程中的一些经验。 1 系统方案与原理 在嵌入式视觉的设计中,目前主流的有以下2种方案: 方案1图像传感器+微处理器(ARM或DSP)+SRAM 方案2图像传感器+CPLD/
[单片机]
基于<font color='red'>ARM</font>和CPLD的嵌入式视觉系统设计
基于ARM核的ADμC7024在医疗电子中的应用
0 引言 随着信息技术的迅猛发展和人民生活水平的提高,极大地推动了医疗电子设备的发展,当今医疗电子设备的发展趋势是高精度、实时性、低功耗和小尺寸,作为医疗电子设备中核心地位的MCU(微处理器)也随着这一发展趋势向前不断衍变着。由早期的8位MCU发展到目前的32位RISC(精简指令集计算机)MCU。美国ADI公司根据市场的需要最新推出了一款基于ARM(高级精简指令集计算机)核的微处理器ADμC7024便是目前32位RISC MCU的杰出代表。ADμC7024卓越的处理能力、集成众多片上外围器件和芯片低功耗的特点,完全胜任目前医疗电子设备的需求及未来的发展目标。 本文以ADμC7024在医疗电子中监护产品脉搏血氧计的
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved