APP下载

基于嵌入式的多路肌电信号采集系统的设计

2017-10-18王梦葛斌朱政康师岩琳

生物医学工程研究 2017年1期
关键词:双口肌电电信号

王梦,葛斌,朱政康,师岩琳

(上海理工大学医疗器械与食品学院,上海 200093)

1 引 言

肌电信号(electromyographic signal, EMG)是产生肌肉力的电信号根源,是肌肉中许多运动单元动作电位在时间和空间上的叠加,反映了神经、肌肉的功能状态,在基础医学研究、临床诊断和康复工程中有广泛的应用[1]。它在人机工效学领域肌肉工作的工效学分析,康复医学领域的肌肉功能评价以及体育科学中的疲劳判定、运动技术合理性分析、肌纤维类型和在无氧阈值的无损伤性预测等方面均有重要实用价值[2-4]。

早期肌电信号的研究主要集中在对少数独立通道进行时域和频域的研究[3]。近年来随着对人体神经肌肉系统的认识进步和研究的深入,对肌电信号的研究朝多通道、阵列式方向发展。目前通用的单路肌电信号采集仪已经不能满足医疗诊断的发展要求。肌电信号采集系统的性能瓶颈在于高速采样数据的实时存储和上下位机间的数据传输能力[4]。多通道的肌电信号要求更高的ADC的采样吞吐,目前一般采用的微控制器以指令方式控制其执行时序,但微控制器的速度优先,而且一般需要3~4条指令完成一次数据采样工作,制约了ADC的采样吞吐[5]。而FPGA具有较高的运行主频,用于控制底层期间的执行时序,具备良好的接口能力,能最大限度地保证ADC的采样率[6]。为减少上位机数据存储处理的时间消耗,提高整体系统的实时性,本研究采用一种独立于CPU的后台批量数据传输技术(DMA),实现底层数据采集单元与上位机之间的数据交互,解决了多路信号大量采集并实时传输的问题。

2 系统的总体设计

系统以Samsung 公司的S3C2440A 微处理器为核心,包含了多路A/D转换、现场可编程门阵列FPGA、电源电路及其他接口电路等,系统结构见图1。本研究中FPGA模块选择了EP4CE10E22C8N芯片,该芯片的可编程逻辑单元为10kLE。ARM选用了目前性能很高的嵌入式处理器S3C2440A,可在400 MHZ高速频率下工作,提供4个DMA通道,用于系统总线内部或与外围总线直接的数据交换,实现了核心板和数据采集部分等硬件电路设计及整个模块功能测试。

输入的肌电信号经过放大电路后,通过A/D转换模块将模拟肌电信号转换成16位的数字信号,FPGA对数字信号进行预处理并存储到双口RAM中,FPGA同时响应ARM,处理器以DMA方式将数据存储到RAM中,再通过USB2.0接口依照系统通信协议接受上位机的命令进行相应的数据处理及传输。本研究的主要工作集中在ARM与FPGA的实时高速数据传输在肌电信号采集的应用上,下面对这部分的设计与实现做一详细说明。

图1 多路肌电信号实时传输流程图

2.1 硬件电路设计

S3C2440A芯片开发采用了由ARM公司研发的先进的ARM920T 核心,ARM920T 实现了MMU,AMBA 总线和哈佛结构高速缓冲体系结构。这一结构具有独立的16KB 指令高速缓存和16KB 数据高速缓存。S3C2440A提供8个Bank,每个Bank 有128M 字节。S3C2440A与外部存储器相连时,必须先给其分配在一个固定的Bank,本研究将bank1作为FPGA内部RAM映射的空间。ACTEL公司的EP4CE10E22C8N芯片提供对ADC器件的采样时序控制,将其作为特殊的内存设备挂接到ARM的内存地址空间。FPGA与ARM之间的接口逻辑关系见图2。S3C2440A通过写信号线(TXD)向FPGA发送上位机命令,FPGA控制A/D采样并将采集到的数字信号缓存在双口RAM中,RAM中写满510个字节后,FPGA发出满信号作为中断F_INT信号,同时S3C2440A响应中断F_INT,向FPGA发送片选信号nGCS1。

图2FPGA与ARM之间的接口逻辑关系图

Fig2InterfacelogicdiagrambetweenFPGAandARM

为提高总线利用率,需设计数据缓冲来实现不同速率数据传输之间的要求。双口RAM是共享式多端口存储器,一个存储器配备两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步地访问存储单元,大大提高了通信效率。本研究采用FPGA来实现双口RAM的功能可以很好的解决并行性和通信速度问题,前段肌电信号在写入的同时,ARM可以进行数据的读取。双口RAM与ARM总线连接图见图3。EP4CE10的数据总线宽度为16位,S3C2440A的数据总线宽度为32位,因此将双口RAM的地址线addr[8..0]与ARM的地址线的低九位相连,双口RAM的数据总线与ARM 的数据总线相连。FPGA读取信号convst高电平有效,双口RAM的数据输出q经过一个十六位的三态缓冲器输出。

图3 双口RAM与ARM总线连接图

Fig3DualportRAMwithARMbusconnectiondiagram

2.2 软件设计

在以S3C2440A芯片为主控的肌电信号采集系统中,S3C2440A除了要与上位机进行数据传输外,还要接受上位机指令进一步对数据进行处理。由于采样指令数据人为发送,不具有规律性,为了充分利用CPU,提高数据传输速度,本系统在使用DMA方式进行肌电数据传输的同时,使用USB完成与上位机的数据交换(主要是上位机发送给S3C2440A的采样指令,见表1)。USB通信的软件设计主要是通讯数据格式、波特率等的设置,采用中断模式, 使能FIFO 缓冲区(使用16 字节的接收缓冲区)。

表1 采样指令

设备驱动程序是操作系统内核和硬件之间的接口,DMA驱动程序设计是控制FPGA与ARM与上位机的数据交换,是一个典型的字符设备驱动程序。DMA驱动程序初始化主要设置相关寄存器,在初始化时要正确设置目标(缓冲区的)首地址、数据传输的方向、源寄存器的首地址、地址指针是否递增以及递增方向等等。相关代码以及注释如下:

#define BUF_SIZE (510) //定义缓存FIFO大小

#define XDREQ0_RD_SRC_ADDR 0x08000000//定义读取FPGA中数据的缓冲区地址

系统加载后,驱动程序进行初始化,完成相关寄存器及存储空间的映射。当FPGA采集并存储在RAM中的肌电数据达到一定数量时,为了避免缓存溢出,ARM要从FPGA模块中的缓冲区中读取数字化的肌电数据。本系统中申请IRQ_DMA0中断服务程序,用来响应FPGA模块的DMA中断请求。应用程序响应中断请求,启动DMA,发出读命令将目的地址中的数据取走后,一次读取操作结束,进行下一次读取并重复上述过程。部分代码如下:

staticstructfile_operationsdev_fops = {

.owner = THIS_MODULE,

.open = s3c2410_ad_open,

.release = s3c2410_ad_close,

.read = s3c2410_ad_read,

};

if (request_irq(IRQ_DMA0, s3c_dma0_irq, 0, "DMA0_FPGA", NULL))//申请中断函数

{

printk("can't request_irq for DMA0 ");

return -EBUSY;

}

/* 分配SRC, DST对应的缓冲区*/

dst0 = dma_alloc_writecombine(NULL, sizeof(unsigned short int)*BUF_SIZE, &dst0_phys, GFP_KERNEL);//目的

if (NULL == dst0)

{

free_irq(IRQ_DMA0, NULL);

dma_free_writecombine(NULL, sizeof(unsigned short int)*BUF_SIZE, dst0, dst0_phys);

printk("can't alloc buffer for dst0 ");

return -ENOMEM;

}

dma0_regs = ioremap(DMA0_BASE_ADDR, sizeof(struct s3c_dma_regs));//将DMA控制寄存器映射到内核空间

dma0_regs->disrc= XDREQ0_RD_SRC_ADDR ;//源的物理地址

dma0_regs->disrcc = (0<<1) | (0<<0); //源位于AHB总线, 源地址递增 (1<<0)

dma0_regs->didst = dst0_phys; //目的的物理地址

dma0_regs->didstc = (0<<2) | (0<<1) | (0<<0); //目的位于AHB总线, 目的地址递增

dma0_regs->dcon=(1<<30)|(1<<29)|(0<<28)|(1<<27)|(0<<23)|(0<<22)|(0<<21)|(1<<20)|(BUF_SIZE<<0); //使能中断,单个传输,软件触发

dma0_regs->dmasktrig = (1<<1) | (1<<0);//启动DMA

3 实验设计与结果分析

3.1 实验设计

为了验证本研究介绍的多路肌电信号实时传输系统的性能,建立了图4所示的实验平台。本研究设计为6路的肌电信号处理与采集系统,将三组双路肌电传感器与AD7976前端的6通道相连,多路数据采集卡通过USB与上位机连接。

图4 实验平台

本研究中,动作设计为双侧上肢弯举运动和双侧下肢的抬腿运动。具体动作顺序和内容如下:(1)弯举运动,要求受试者两臂平放于桌面,当听到指令后保持4 s不动,4 s后发力以肘关节为原点抬起双侧上臂,至上臂垂直于桌面为止;(2)抬腿运动,要求受试者正坐于椅面,当听到指令后保持4 s不动,4 s后发力以膝关节为原点平抬双侧前腿,至前腿平行于桌面为止。

肌电采集点为受试者两侧上肢的肱二头肌与肱桡肌和两侧下肢的腓肠肌。采集前使用75%的酒精和一次性电极片自带细砂纸进行预置电极部位皮肤的去屑去脂肪,再将一次性银/氯化银电极双极放在每一待测肌肉部位的隆起处并与肌纤维走向一致,在紧邻双极部位安放一同规格的参考电极。[9]

实验前实验人员先给受试者示范和讲解要完成的动作,并要求受试者练习若干次直到所做动作具有再现性,然后受试者听实验人员口令去执行本实验设计的动作。

3.2 数据分析

以本系统的采样定时倍率1,最高采样率120 kHz为例,设置采样时间为8 s。开始试验后8 s,从上位机得到的六路肌电信号图,见图5。其中通道1、通道3的采集点分别为上肢左、右侧肱二头肌;通道2、通道4的采集点分别为上肢左、右侧肱桡肌;通道5、通道6的采集点分别为下肢左、右侧腓肠肌。

图5六通道肌电信号图

Fig5Sixchannelselectromyographicsignal

实验过程中使用Agilent Technologies示波器观察FPGA发出的中断F_INT信号和ARM响应的DMA片选地址信号。FPGA控制AD采样频率为120 kHz,6个通道同时采样,FPGA设置每采满510个点就发出一次中断F_INT信号,周期t1=510×6*(1/120kHz)≈708 us。见图6,FPGA采集数字信号周期t1时间内,ARM完成数据的读取后仍剩余足够的空闲时间t2,可用于ARM对采集的肌电数据进行算法处理或用于对更多通道肌电信号的采集。

采用SignalTap工具获取的肌电信号数据存储时序,见图7。Convst为AD采样时钟,频率为120 kHz;busy为FPGA忙信号;cs为ADC采样的片选信号;rd为FPGA的读时钟信号;rdaddr为FPGA的读地址信号,即DMA响应中断请求后发出的片选地址信号;wrfull为满信号,即DMA中断请求F_INT信号;rdclock为ARM给FPGA 的读时钟信号。由测试结果可知,该系统操作完全符合AD采样时序和DMA操作时序要求,系统能正常工作。

图6中断信号和片选信号

Fig6Interruptsignalandselectsignal

图7 肌电信号数据存储时序

4 结论

针对多路肌电信号的采集和处理,本研究提出的基于嵌入式的多路肌电信号实时传输系统设计方案在采集肌电信息的同时,能进一步对肌电信息进行算法处理,大大提升了整个系统的数据处理能力和控制功能。采样时序由FPGA控制提供,确保了ADC器件的采样吞吐,保证了肌电信号的多路采集;主控器件ARM采用DMA方式与上位机进行数据交换,保证了ARM有足够时间空余对采集的肌电数据进行前期处理,减少了上位机的工作量,并最大限度地保证了采样数据的实时性。本研究对多通道肌电图机/诱发电位仪的开发有着重要意义。

猜你喜欢

双口肌电电信号
盆底肌电刺激联合盆底肌训练治疗自然分娩后压力性尿失禁的临床观察
基于联合聚类分析的单通道腹部心电信号的胎心率提取
双口形式的戴维宁定理在电路分析中的应用
基于Code Composer Studio3.3完成对心电信号的去噪
基于随机森林的航天器电信号多分类识别方法
Matching mechanism analysis on an adaptive cycle engine
经皮神经肌电刺激治疗上肢周围神经损伤的疗效
女生穿运动鞋与高跟鞋步行腰背肌电比较
双口RAM读写正确性自动测试的有限状态机控制器设计方法
双口RAM在无人机三余度飞控计算机数据交换中的应用