笔墨苍炎 发表于 2023-11-19 07:55:34

便携式心电监护仪——LabVIEW心电信号采集系统设计

一、实验目的
1、加深对于普通仪表放大器的理解,同时也由此延伸到其它的放大器的理解;
2、学习、锻炼对于电子设计软件NI LabView2020的运用;
3、学习电子元器件的选择与替代。
   
二、实验器材
笔记本电脑、NI LabView 2020软件、ArduinoUNO开发板
   
三、实验内容
编写LabVIEW程序,通过USB转串口软件,完成Arduino开发板模拟信号的采集、处理和显示功能。实现便携式心电采集嵌入式设备——LabVIEW心电信号采集系统设计。
   
四、实验原理

[*]AD8232芯片:
                     
概述:
AD8232是一款用于ECG及其他生物电测量应用的集成信号调理模块。该器件设计用于在具有运动或远程电极放置产生的噪声的情况下提取、放大及过滤微弱的生物电信号。该设计使得超低功耗模数转换器(ADC)或嵌入式微控制器能够轻松地采集输出信号。
AD8232采用双极点高通滤波器来消除运动伪像和电极半电池电位。该滤波器与仪表放大器结构紧密耦合,可实现单级高增益及高通滤波,从而节约了空间和成本。AD8232采用一个无使用约束运算放大器来创建一个三极点低通滤波器,消除了额外的噪声。用户可以通过选择所有滤波器的截止频率来满足不同类型应用的需要。为了提高系统线路频率和其他不良干扰的共模抑制性能,AD8232内置一个放大器,用于右侧驱动(RLD)等受驱导联应用。
AD8232包含一项快速恢复功能,可以减少高通滤波器原本较长的建立长尾现象。如果放大器轨电压发生信号突变(如导联脱离情况),AD8232将自动调节为更高的滤波器截止状态。该功能让AD8232可以实现快速恢复,因而在导联连接至测量对象的电极之后能够尽快取得有效的测量值。
AD8232采用4 mm x 4 mm、20引脚LFCSP封装。额定温度范围为0°C至70℃,能在-40℃至+85℃的范围内工作。
   
2、心电采集模块:
AD8232单导心电说明书(Ver1.0)
产品描述: AD8232是单导,成本低廉,用来测量心脏的电活动心率监测器。这个电信号可以绘制一个心电图或心电图和作为模拟量的输出。心电信号很微小,容易有外界的干扰,AD8232单导心率监测器可以通过放大器来帮助获得PR和QT 间隔的一个明确的信号
注意:我们的产品不是医学的设备,所以不能作为辅助的配件去诊断与治疗医学。
   
物料清单;


[*]心电模块1 pcs


[*]医用电极3pcs


[*]导电联1pcs
   
产品特性:


[*]工作电压:3.3V


[*]模拟输出


[*]电极脱落检测


[*]停机检测(不用)


[*]LED


[*]3.5mm 导电连接线头
                                          
LabView编程设计主要针对于该采集信号的模块进行。
   
3、LabView编程部分原理:
电子表格文件的读写:
电子表格文件是一种特殊的文本文件,它将文本信息格式化,并在格式中添加了空格、换行等特殊标记,以便被Excel等电子表格软件读取。使用LabVIEW提供的电子表格函数可以方便地实现表格的生成和读写操作。
读取电子表格文件的函数节点如图2-110所示,输入/输出端口说明如下:
                     
格式:指定如何使数字转化为字符。如格式为%.3f(默认),VI可创建包含数字的字符串,小数点后有三位数字。如格式为%d,VI可使数据转换为整数,使用尽可能多的字符包含整个数字。如格式为%s,VI可复制输人字符串。
文件路径:表示文件的路径名。如文件路径为空(默认值)或为<非法路径>,VI可显示用于选择文件的文件对话框。如在对话框内选择取消,可发生错误。
行数:VI读取行数的最大值。对于该VI,行是由字符组成的字符串并以回车、换行或回车加换行结尾,以文件结尾终止的字符串,或字符数量为每行输入字符最大数量的字符串。如行数<0,VI可读取整个文件,默认值为-1。
读取起始偏移量:VI从文件中开始读取数据的位置,以字符(或字节)为单位。字节流文件中可能包含不同类型的数据段,因此偏移量的单位为字节而非数字。如需读取包含100个数字数组,且数组头为57个字符,需设置读取起始偏移量为57。
每行最大字符数:在搜索行的末尾之前,VI读取的最大字符数。默认值为0,表示VI读取的字符数量不受限制。
转置:其值为TRUE,VI可在使字符串转换为数据后对其进行转置。默认值为FALSE。
分隔符:用于对电子表格文件中的栏进行分隔的字符或由字符组成的字符串。例如,指定用单个逗号作为分隔符。默认值为lt,表明用制表符作为分隔符。
新建文件路径:返回文件的路径。
所有行:从文件读取的数据。
第一行:所有行数组中的第一行,可使用该输入使一行数据读人一维数组。
读后标记:数据读取完毕时文件标记的位置,标记指向文件中最后读取的字符之后的字符(字节)。
EOF ? :如需读取的内容超出文件结尾,则EOF?值为TRUE。
   
波形图:
波形图在外观上和波形图表非常相似,唯一不同的是波形图默认带有主网格。在程序框图中,波形图表和波形图默认数据类型为双精度,并且不易从外观上来区分。在数据格式上的区别,波形图的数据源是数组,波形图表的数据源是数值。图2-98的例子可以充分说明波形图和波形图表之间的区别。
                                          
波形图表放在循环内显示数据,因此在程序运行时就可以看到波形图表显示的波形。波形图放置于循环外,数据源与循环的连接点选择“启用索引”,运行时波形图没有任何显示,当循环结束之后,波形图才有显示,而且横坐标从“0”开始。
在控件显示上,波形图显示项也与波形图表有不同之处。分别在两个不同的控件上右键单击,在弹出的快捷菜单中分别选中“显示项”,对比两个不同的显示菜单,快捷菜单中的显示项分别如图2-99a、图2-99b所示。波形图表有个选项“数字显示”,而在波形中的显示项分别如图2-99a、图2-99b所示。波形图表有个选项“数字显示”,而在波形图该位置的选项为“游标图例”。这很容易理解,因为波形图表显示的是随时间变化的数值,而波形图显示的是运行全部完成后的数组,所以波形图表需要一个即时显示信息,而波形图需要的是在运行完毕后的回放功能。
下面通过一个示例来说明波形图的应用方式,实现两个曲线的显示。前面板和程序框图如图2-100所示,利用循环产生两个周期的正弦和余弦曲线,并在循环外利用创建簇数组函数节点将两条曲线合成为一个簇数组,用波形图显示出来。
                     LIAT函数库及使用:
当LabVIEW安装LabVIEW Interface forArduino工具包之后,在前面板和程序框图中的函数栏目中就会出现Arduino控件和操作函数库。Arduino控件包含模拟IO、数字I/o、Pin Mode、Board Type和连接方式等,如图3-6所示;操作函数库包含有ArduinoINIT、Arduino CLOSE、Low Level、Sensors、Examples等,如图3-7所示。其中,Arduino INTT和Arduino CLOSE是每个程序必备的,即与Arduino控制器建立连接,完成对Arduino预先设定的操作之后,断开与Arduino控制器的连接,释放Arduino控制器的串口资源。
                     
另外,Low Level为Arduino初级应用,Sensors为经过封装的传感器函数库,Examples包含有大量的应用示例。由于Sensors和 Example是将LowLevel函数封装构建成的函数库,所以使用较为方便,但是其兼容扩展性不如Low Level好,所以本小节主要讲解 ArduinoINIT、Arduino CLOSE、Low Level 以及 Sensors中部分函数库的使用。
1.Arduino INIT 与Arduino CLOSE函数节点
( 1 ) Arduino INIT
Arduino INIT函数节点如图3-8所示,输入参数有VISA resource、波特率、Arduino板的类型、连接方式(USB/Serial),输出参数为Arduino资源号,提供给后续函数对Arduino进行操作。它的功能是连接Arduino控制器,以使得Arduino板进入受LabVIEW控制的状态。除了VISA之外,其他的输入参数可以不给定,即使用默认参数,波特率115200,Arduino Uno板,USB/Serial连接方式,每个包15个字节。
( 2 )Arduino CLOSE
Arduino CLOSE函数节点如图3-9所示,输入参数为Arduino资源号,只有错误输出。其功能是断开Arduino与 LabVIEW的连接,释放Arduino控制器的串口资源。
                     
2. Low Level函数库
Low Level函数库包含模拟输入、数字IO配置、数字输入、数字输出、PWM输出(模拟输出)、Tone、'c、SPI、模拟采样,如图3-10所示。其中,模拟输人、数字输出、数字输出和 PWM输出分为管脚和端口两种,端口操作适用于需要多个VO管脚进行操作的情况。由于笔者仅使用了模拟IO函数库,故下文只对其进行介绍。
(1)模拟IO函数库
模拟IO函数库共有5个函数,实现对模拟输入和PWM端口的基本操作,包括AnalogRead Pin、Analog Read Port、PWM Write Pin、PWM Configure Port和PWM Write Port
Analog Read Pin和Analog Read Port的函数节点如图3-16和图3-17所示。
                     
Analog Read Pin是读取指定管脚的电压值,输人参数为需要读取的模拟管脚号,默认值为A0,输出为所测管脚的电压值。
Analog Read Port是依次读取A0 ~ A5的电压值,不需要指定管脚号,输出即为一个一维数组,数组中的元素依次为A0 ~ A5的电压值。
PwM Write Pin ,PWM ConfigurePort和PWM Write Port的函数节点如图3-18、图3-19和图3-20所示。
                     
PWM Write Pin是在指定管脚的输出固定频率不同占空比的PWM波形,输入参数为指定的数字管脚号,默认值为3,占空比( 0 ~ 255 )。
PWM Configure Port是配置三路需要PWM输出的管脚,以提供给PWM Write Port使用。PWM Write Port是依次在三个带有PWM输出功能的管脚上输出固定频率、不同占空比的PWM波形,输入参数为需要输出PWM波形的管脚和占空比((0 ~ 255 ),同时输出PWM管脚,以便一次配置管脚之后,多次对PWM值进行调整。PWM ConfigurePort和PWM Write Port适用于需要多次对PWM值进行调整的情况,尤其适合RGB灯调光使用。
   
五、实验结果
1、前面板设计
                     
可以看到在前面板上有:


[*]切换模式 即时采集/读取已有数据:用于选择波形图显示的数据来源;


[*]OPEN:开始采集信号;


[*]STOP:停止运行;


[*]VISA资源名称(×2):用于选择串口;


[*]波特率(×2):用于选择采样速率(波特/秒);


[*]A0:模拟信号管脚选择;


[*]波形图:用于显示波形;


[*]数组:用于在设计程序框图时补足端口;
   
2、程序框图设计
总体思路:
                     最外层是一个while循环结构,包含了一个输入为合并信号的波形图;while循环结构中嵌套一个事件结构,通过对不同事件的不同响应来实现相应的功能。
   
事件“OPEN”值改变:
“OPEN”输入为真时:
                     此处采用了一个“Analog Init”函数,将VISA资源名称、波特率接入其输入端口,输出接入一个“Analog Read Pin”函数,设置A0为其信号管脚;将输出转换为数组输入至波形图的接口之一。
OPEN输入为假时:
                     此处采用了一个“Analog Init”函数,将VISA资源名称、波特率接入其输入端口,输出接入一个“Analog Close”函数,断开Arduino与 LabVIEW的连接,释放Arduino控制器的串口资源,并在输入出错时显示“Error”。用一个数组输入至波形图的接口之一,是因为条件结构的隧道需要在每种条件下均接入相应的元素。
   
事件“切换模式 即时采集/读取已有数据”值改变
                     此事件的设计是为了通过波形图显示已有的数据。在文件路径填入我们想要显示的表格文件,通过“读取带分隔符电子表格”函数后接入波形图的接口之一。
   
事件“STOP2”值改变
                     此事件是为了退出程序运行。通过点击“STOP ”,其布尔值发生改变,接至while循环的循环条件,退出循环。程序运行结束。
   
3、实验验证
由于没有相应的条件进行心电实时监测,故只测试了该设计的读取已有数据功能,以及是否能与Arduino开发板直接连接。
读取已有数据功能:
                     当点击切换模式后,出现选择读取文件的窗口。
                     成功显示图形。
与Arduino开发板直接连接
选择VISA与波特率:
                     通过USB插口接入Arduino UNO开发板:
                     点击“OPEN”:
                                          Arduino UNO开发板上的LED灯快速闪亮,说明程序成功烧入。
页: [1]
查看完整版本: 便携式心电监护仪——LabVIEW心电信号采集系统设计