基于MSP430G2553和MATLAB Appdesigner的心电信号复现和心率显示

发布者:码字探险最新更新时间:2022-09-22 来源: csdn关键字:MSP430G2553  MATLAB 手机看文章 扫描二维码
随时随地手机看文章

总的来说很简单,MSP430只需要完成一个AD转换和串口发送的任务,剩下的扔给MATLAB处理。


对于心电信号的采集,用的是AD8232套件。(下图来自于商家给的手册)

         

 右边插口用套件连接身体部位(这里用的是一次性氯化银医用电极,淘宝上20多块钱一大包),左边除了GND和3.3V和MSP430相连后(当然其他单片机也一样),OUTPUT就能够直接输出一个放大后的心电信号(芯片内置的有放大器)


F连接的位置还有待商榷,商家给的说明也不太一致,有说连的小腹左侧,也有说连右腿的。不过是小问题。

 至于剩下的LO-和LO+是用于脱落检测的,作者水平有限就没用、、


MSP430配置好ADC10的输出端口,将OUTPUT输出与其相连即可。


具体的方案是:用G2553的定时器Timer_A产生一个200Hz的输出(用Output Mode)来控制AD转换,让ADC10每1s等间隔采样200个数据。


UART波特率设置成9600,每采集完一个数据后就立即发送。(所以是在ADC的中断里写的串口发送)


当然,串口一次只能发送8位数据,而ADC转换结果是10位,所以最后分成了两次发送。(计算了所需时长,是OK的)


具体这样实现(应该不是最好的):


void UART_send(unsigned short data)

{

    unsigned short temp1=0,temp2=0;

    temp1 = data>>8;    //temp1是高2位

    temp2= data-temp1*0x100;   //temp2是剩下的8位

    UCA0TXBUF=temp1;

    while(UCA0STAT&UCBUSY);  //UART忙

    UCA0TXBUF=temp2;

    while(UCA0STAT&UCBUSY);

}


之后就是MATLAB的问题了。


MATLAB的serial()函数系列在2019b版本后不再被推荐使用,改成了serialport()函数,据说之后用serial可能会报错什么的。。


虽然但是,新旧两个版本的函数语法都差不多,下面给一段例子。


delete(instrfind);

Baudrate=9600;

s=serialport('COM5',Baudrate);

flush(s);

a=read(s,5,'uint8');

delete(s);


flush()可以用来清空缓冲区的数据,不然接收到的可能就是之前转换未被读取的电压值而不是当下时刻的值。。


MATLAB appdesigner做一个简单的APP也肥肠简单。学会串口操作之后就可以基本上没什么问题地复现波形了。

如果你想要把数据弄到Workspace里,可以尝试assignin函数:


·assignin('base','Voltage',voltage);  


srds,这玩意性能好像不太行,很容易卡。


建议采集一定数量的数值之后再统一画图,不要每采集一个点画一个图,不然必然卡爆。


这边是1s钟画一个图,有时候依然卡、、


之后闲的没事情做,顺带测试了一下警告窗口的功能、、感觉对于软件专业的同学来说这种东西非常重要。用户就是上帝、、

 try

                dis_com=serialport(COM1,Baudrate1,'Timeout',3);

                msp_com=serialport(COM,Baudrate,'Timeout',5);

                Screen_Init(app,dis_com);

          catch

                questdlg('Can''t open the port',...

                    'Error',...

                    'Yes','Yes');

                delete(app.UIFigure);

                return;


end


顺带一提心率的测量,基本上是网上找的资源,然后弄过来测试了一下,发现能行,就串起来用了。在外面写好.m文件之后直接在app里调用即可。


下面给一个波形很糟糕的例子的处理(测量时长15秒)。感觉效果一般般,适不适用于所有场合也不确定,多多见谅、、


其实就是本人信号与系统学的和shi一样,滤波什么的窗函数什么的那些已经完全看不懂、、还得找时间去复习、、

 


 上面识别结果用的是findpeaks()函数,推荐根据实际情况自定义检测阈值。后面小小地取相邻几个峰的平均就可以算出心率啦。。(当然上面那些图在app里不展示,只是平常测试的时候看看而已)


顺带提一嘴,上面GUI界面共有两个串口设置,其实还有一个使是用去给USART-GPU串口屏发命令的。


这个东西上手很容易,得也非常有趣,这次只是简简单单做了一个小东西,可以同时显示一些波形什么的,,效果见下:

差不多就这样。对于ECG,还有小波变换或者神经网络的更高级的东西去识别,甚至能够搞定其他的特征峰值什么的、、作者大学是个混子,水平有限、、加上很懒,就只搞了以上的东西、、

关键字:MSP430G2553  MATLAB 引用地址:基于MSP430G2553和MATLAB Appdesigner的心电信号复现和心率显示

上一篇:MSP430 & 4x4 矩阵键盘测试
下一篇:MSP430利用定时器捕获功能,计算脉冲间隔和频率

推荐阅读最新更新时间:2024-10-29 21:38

电设工作小结之——MSP430G2553学习笔记——3
接上一篇继续: 二,MSP430G2553的应用设计 (一),频率计的设计 1,频率计的实现方法有:测频法,测周法,等精度测频。一般是低频用测周法较准,高频用测频法较准。等精度测频是比较准的。 2,测周法: (1)可以使用定时器的输入捕获功能,捕获上升沿或下降沿,然后就可以计算出信号的周期,从而得出频率。 (2)也可以把待测信号接到IO上,然后用无限循环不停的查询电平的高低,从而得出信号的周期。丁老师建议:以丁老师的经验,这种方法测量的精度比用捕获中断的精度要高,因为中断的进入和退出都要占用时间。 (3)但这种侧周法适用于低频信号频率的测量,对于高频信号精度不好。 3,测频法: (1)可以定时一定的时间,然后计算
[单片机]
基于Matlab GUI的PC机与智能车的无线通信
引言   在以速度决定优劣的飞恩卡尔智能车比赛中,任何因素都可能影响小车的运行。为了满足对小车在赛道中各种状态精确分析的需求,上位机的效据采集与处理要求通信波特率高、信号传输稳定、不丢包、数据处理量大、数据处理及时等。在基于Matlab环境下的串口通信中,查询方式下的非实时串行通信技术对实时性要求很高的智能车通信有很大的局限性。而在目前普遍采用的中断机制下的通信虽然可以满足实时性的需要,却需要修改Matlab自带的instrcallback回调函数。程序调试过程中惨改了回调函数后,需要重新启动Matlab才能使得新的回调函数文件生效。由此可以看出,其操作复杂易出错,且instrcallback函数接收到保存在工作空间的数据不能被
[模拟电子]
基于<font color='red'>Matlab</font> GUI的PC机与智能车的无线通信
MSP430G2553学习笔记 DAY1 知识储备及设备初始化
寄存器 方向寄存器PxDIR 指定IO口输出/输入,0:input 1:output PxDIR = BIT0; PxDIR = 0x01;//两种形式等价,定义Px.0为输出; 输出寄存器PxOUT 指定IO口输出高电平或低电平 0:low 1:high P1OUT = BIT0;//P1为0xFF; P1OUT |= BIT0;//P1.0为1,P1为0x01; P1OUT &= ~BIT0;//P1.0为0; 输入寄存器PxIN 指定IO口输入状态 0:low 1:high 内部电阻上/下拉控制寄存器PxREN 控制单片机IO口内部电阻上拉或下拉,固定IO口初始状态 P1REN = BIT0;//P1
[单片机]
MSP430G2553电子时钟实验
用msp430g2553控制1602液晶显示时间,并可以通过按键设置时间,我做了正计时和倒计时两种模式 /********************************************************************* msp430g2553与1602引脚连接情况 * PIN1 -- 地 * PIN2 -- VCC(一定要接+5V) * PIN3 -- 仿真时悬空,实际电路 2K电阻-- 地 (电阻可以是500-2k的,改变电阻可以改变字符显示的亮度,电阻接不好会导致什么都不显示) * PIN4 -- RS -- P1.6 * PIN5 -- R/W -- GND * PIN6 -- EN -- P1
[单片机]
VB调用Matlab在WEDM仿真系统中的应用
基于BP神经网络的电火花线切割(WEDM)工艺仿真系统需要具有工艺数据库管理、工艺效果预测、加工参数优化等设计功能。借助Matlab的神经网络工具箱,可以建立良好的工艺效果预测模型和参数优化模型,这正是工艺仿真软件最主要的功能要求。VB是Windows操作系统下优秀的可视化编程工具软件,在用户界面设计和快速开发等方面具有独特的优势。同时,Matlab仿真软件以其强大的科学计算功能和开放式开发思想使其成为当前最为流行的仿真计算工具。综合两种开发环境各自的优势,可采用VB与Matlab混合编程的方法实现工艺仿真软件的编程开发。 在VB开发环境下制定前台用户界面,利用Matlab强大的计算功能实现后台模型的实时仿真。为了实现前台
[工业控制]
MSP430G2553(一)IO外部中断说明
这一篇文章将说明MSP430G2553的IO中断配置,整个P1的IO都可以配置IO中断,但中断处理函数只有一个,MSP430和大多数MCU一样提供上升沿、下降沿选择。 在Launchpad上有按键S2,接在P1.3口,当按下后P1.3将接入高电平,从而触发中断。 所有寄存器的具体名称和地址,可以查看M430G2553 datasheet 第 21页中对于P1的寄存器定义 在实例代码中,配置了P1.3和P1.6的LED灯,当按下P1.3的按键产生中断,LED灯将切换点亮 1.按键的中断配置 要配置按键中断,需要先设置P1.3口为输入,并且设置上拉电阻以保障稳定性, P1DIR &= ~BIT3;//设置P1.
[单片机]
MathWorks 发布 2013b 版 MATLAB 和 Simulink 产品系列
中国北京– 2013 年 9 月 10 日–MathWorks 近日宣布发布2013b 版 (R2013b) 的 http://www.mathworks.com/products/new_products/latest_features.htmlMATLAB 和 Simulink 产品系列。在 R2013b 版的 MATLAB 和 Simulink 中不仅新增了分析、设计、代码生成和实现以及其他功能,同时该版本还新添了两款 Polyspace 产品以及其他 79 款产品的更新。这一版本的技术亮点如下: MATLAB 产品系列  MATLAB:提供了适用于混合类型的表格数据以及有序和无序分类数据的数据类型  MATLAB C
[嵌入式]
全国大学生数学建模竞赛再度颁发MATLAB创新奖
近日,第19届全国大学生数学建模竞赛于广州华南农业大学理学院举行颁奖仪式,对本次竞赛的优秀组织及参赛队伍进行了表彰和鼓励。大会同时宣布,通过对全国一等奖获奖名单的甄选,组委会向本科组的大连海事大学,参赛队员为毋岩斌、赵宝强、王嘉宁,以及专科组的深圳职业技术学院,参赛同学为黄盈、张林善、卢忠钏颁发了MATLAB创新奖,以表彰这两组队伍在比赛过程中的创新表现。MATLAB创新奖作为该竞赛最高的奖项之一,继去年首次为建模竞赛设置该奖项后,今年再次为鼓励大学生在建模竞赛中的创新思维颁发该奖项。 本届竞赛题目均来自社会、经济、工程等领域的热点问题,具有很强的实用性。本科组的两个赛题分别为“储油罐的变位识别与罐容表标定”和“20
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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