前言

在医疗领域常常使用的心电图仪并不是很复杂的仪器。其原理跟示波器非常相似,只不过,心电图仪测量的是低频小信号。心电信号(也叫ECG信号)的幅值一般在0.05mV-4mV之间,要求分辨力至少为0.1mV,其频率在0.05-100Hz之间,主要的频率成份集中在5~20Hz之间。一般的示波器垂直刻度最小为10mV/div,分辨力约为0.4mV。其次,把探头接在左右手,在示波器上只会观察到50Hz的工频干扰。所以,示波器并不适合测量心电信号。我们选用ADS1298芯片,可以很好的完成心电信号的采集。本文不涉及硬件设计,只梳理一下芯片的操作及如何用FPGA实现芯片的控制。硬件设计可参考官网的DEMO板

芯片操作

ADS1298芯片是通过SPI接口与控制芯片进行交互数据。ADS1298作为从端,控制芯片(FPGA)做为主端。ADS1298重要管脚列表功能如下:

名称

类型

说明

DRDY_N

数字输出

数据就绪,低电平有效

DAISY_IN

数字输入

菊花链输入,若未使用与DGND短接

RESET_N

数字输入

系统复位,低电平有效

CS_N

数字输入

SPI片选,低电平有效

DOUT

数字输出

SPI数据输出

SCLK

数字输入

SPI时钟

DIN

数字输入

SPI数据输入

CLK

数字输入或输出

外部主时钟输入或内部时钟输出

START

数字输入

开始转换

CLK_SEL

数字输入

主时钟选择

芯片控制流程

芯片的控制流程我们主要按照数据手册上的应用信息来设计控制程序。

java怎么获取心电图机子的数据 心电图采集方法_心电信号采集


java怎么获取心电图机子的数据 心电图采集方法_心电信号采集_02

程序编写

按照芯片的控制流程,我们采用状态机的形势来完成芯片的配置及数据采集。状态机定义如下图:

java怎么获取心电图机子的数据 心电图采集方法_Verilog_03


java怎么获取心电图机子的数据 心电图采集方法_FPGA_04


写寄存器SPI接口时序图如下:

java怎么获取心电图机子的数据 心电图采集方法_FPGA_05


读数据SPI接口时序如下:

java怎么获取心电图机子的数据 心电图采集方法_java怎么获取心电图机子的数据_06

FPGA仿真波形

整体的写读时序波形

java怎么获取心电图机子的数据 心电图采集方法_心电信号采集_07


读数据时序波形,总共9个24bit数据,第一个数据为状态数据,后面依次是采集到8个通道的数据

java怎么获取心电图机子的数据 心电图采集方法_Verilog_08


最终将代码在Quartusii中综合编译,下载到开发板里,可以通过SIGNALTAP抓取到数据。

注意事项

  1. SPI的模式为CPOL=0且CPHA=1
  2. 在读数据时,CS需要一直保持低电平

结语

到此,我们可以正常的配置芯片的工作状态,同时读取采集到的数据,如果想用该芯片实现心电信号的采集并显示,还需要做的工作还比较多,需要我们仔细阅读数据手册,和官方的DEMO板资料,了解硬件的设计及采集探头的接法。由于个人能力,精力有限,如果文中有误还请谅解,同时希望能告诉我,共同交流学习,一起进步,谢谢!