心电信号采集模块的设计与开发课程设计 - 图文

更新时间:2024-07-02 10:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计报告

设计题目:心电信号采集模块的设计与开发

班 级: 学 号: 姓 名: 指导教师: 设计时间:

信息学院电科专业课程设计报告

摘 要

针对心电信号的特点进行心电信号的采集、数据转换模块的设计与开发。本文设计一种用于心电信号采集的电路,然后进行A/D转换,使得心电信号的频率达到采样要求。人体的心电信号是一种低频率的微弱信号,由于心电信号直接取自人体,所以在心电采集的过程中不可避免会混入各种干扰信号。为获得含有较小噪声的心电信号,需要对采集到的心电信号做降噪处理。本文通过滤波的方法将噪声从信号中分离。并将采集到的小信号放大约1000倍,送入数模转换模块,让单片机处理。

关键词: 心电信号采集,降噪,A/D转换放大

信息学院电科专业课程设计报告

目 录

1. 课程设计任务及要求 .............................................................................................. 1

1.1 设计任务 ......................................................................................................... 1 1.2 设计要求 ......................................................................................................... 1 2. 理论设计 .................................................................................................................. 1

2.1 方案论证 ......................................................................................................... 1 2.2 电路原理框图说明 ......................................................................................... 2 2.3 单元电路设计 ................................................................................................. 2

2.3.1 前置放大及反馈电路 .......................................................................... 2 2.3.2 带通滤波电路 ...................................................................................... 3 2.3.3 50Hz陷波电路 ..................................................................................... 4 2.3.4 电压放大电路 ...................................................................................... 4 2.3.5 电平抬升电路 ...................................................................................... 5 2.4 整体电路图仿真 ............................................................................................. 6 3. 硬件调试 .................................................................................................................. 6

3.1 焊接及调试过程 ............................................................................................. 6 3.2 心电信号采集 ................................................................................................. 7 3.3 故障分析 ......................................................................................................... 7 4. 嵌入式软件设计 ...................................................................................................... 7

4.1 开发软件CCS简介 ......................................................................................... 7 4.2 软件总体设计框图 ......................................................................................... 8 4.3 软件分步配置: ............................................................................................... 9

4.3.1 配置ADC12: ....................................................................................... 9 4.3.2 配置LCD: ........................................................................................... 9 4.4 软件主程序 ..................................................................................................... 9 5. 整体效果 ................................................................................................................ 14 6. 结论 ........................................................................................................................ 15 7. 参考文献 ................................................................................................................ 16

信息学院电科专业课程设计报告

1. 课程设计任务及要求

1.1 设计任务

⑴ 了解心电信号特点,设计心电信号调理电路,调理电路包括前端放大和右腿 驱动电路、带通滤波和50Hz陷波电路、主放大和电平抬高电路等。

⑵学习MPS430单片机原理,通过对心电信号采集,实现对脉搏率的测量及显示。 ⑶ 焊接相应电路,完成调试。

1.2 设计要求

在设计中了解心电信号特点,设计心电信号调理电路,调理电路包括前端放大和右腿驱动电路、带通滤波和50Hz陷波电路、主放大和电平抬高电路等。

2. 理论设计

2.1 方案论证

将整个设计分成硬件部分和软件部分,在硬件设计部分又可细分为如下几个部分:前置放大、带通滤波、陷波、电压放大、电平抬升以及反馈。

根据已有的器件,本设计使用AD620作为前置放大级。带通滤波部分,分成了高通与低通两部分,为了提高滤波的效果,高通部分采低通部分采用了二阶切比雪夫低通滤波器,带通纹波为3dB。

50Hz滤波陷波电路考虑了Fliege结构点阻滤波器和“双T”型陷波电路,实际焊接后发现后者的效果明显更稳定,故改为采用了“双T”型陷波电路。

-1-

信息学院电科专业课程设计报告

2.2 电路原理框图说明

图2-1 系统结构图

如图2-1所示,本系统硬件部分主要由前置放大、带通滤波、陷波、电压放大、电平抬升等电路构成;软件部分由基于Msp430 Launchpad的AD采集和液晶显示等程序编写构成。

2.3 单元电路设计

2.3.1 前置放大及反馈电路

由于人体心电信号的特点,加上背景噪声较强,采集信号时电极与皮肤间的阻抗大且变化范围也较大,要求前级放大电路应满足高输入阻抗;高共模抑制比;低噪声、低漂移、非线性度小;合适的频带和动态范围等特点。

为此,选用仪用放大器AD620作为前级放大。该放大器有较高的共模抑制比(CMRR),温度稳定性好,放大频带宽,噪声系数小且具有调节方便的特点,是生物医学信号放大的理想选择。根据小信号放大器的设计原则,前级的增益不能设置太高,因为前级增益过高将不利于后续电路对噪声的处理。

仿真过程采用O.5 MV,1.2 Hz的差分信号源为模拟心电输入来模拟电路的放大过程,结果满足要求,如图2-2所示。

-2-

信息学院电科专业课程设计报告

图2-2 前置放大及反馈电路

2.3.2 带通滤波电路

心电信号频带主要集中在0.05--100 Hz,因此带通滤波器用高低通滤波器来构成,以滤除干扰信号。

fH?1?0.1Hz2?R11C5

f1l??116Hz

2?RC3经过高通滤波后,可以大大削弱0.1 Hz以下因呼吸等引起的基线漂移程度,经过低通滤波后,也可以较好的削弱100Hz以上的干扰信号。

图2-3 带通滤波电路

-3-

信息学院电科专业课程设计报告

2.3.3 50Hz陷波电路

在我国采用的是50hz频率的交流电,所以在对信号进行采集处理和分析时,会存在50hz的工频干扰,对我们的信号处理造成很大干扰,因此要设计一个50hz双T陷波器来滤除工频干扰。滤波器的中心频率f0和抑制带宽BW之间的关系为:

中心频率:

f10??50Hz

2?RC

图2-4 50Hz陷波电路

2.3.4 电压放大电路

心电信号通常比较微弱,至多为mV量级,需要用较大增益的放大电路将信号放大到方便分析和采集的量级。

该放大电路放大倍数为:A?Rf?100(倍) R-4-

信息学院电科专业课程设计报告

图2-5 电压放大电路

2.3.5 电平抬升电路

由于Msp430 Launchpad不能采集负电压,直接采集放大后的心电信号将会使液晶屏上波形失真,因此设计该电压抬升电路并通过电位器调节信号整体电平。

图2-6 电平抬升电路

-5-

信息学院电科专业课程设计报告

2.4 整体电路图仿真

图2-7 整体电路图仿真

3. 硬件调试

3.1 焊接及调试过程

为了使作品更加具备实用性和观赏性,焊接电路时采用双面面包板并在不影响电路性能前提下尽可能减小电路面积。

考虑“飞线”过多过长可能降低电路稳定性、增加干扰,焊接过程尽量少使用引线,缩短导线长度。

将VCC,VEE,GND及各级输入输出用一定量排针引出,方便调试,降低出错率。

图3-1 硬件部分

-6-

信息学院电科专业课程设计报告

3.2 心电信号采集

经过采集电路在示波器显示的心电信号如图3-2所示,信号无明显失真,经

测量和计算,该同学心率此时约为1.4Hz。

图3-2 成功采集的心电信号

3.3 故障分析

心电信号因人而异,不同的人测量,效果可能会出现较大差异,可以选择信号明显波形较好的人做实验。

实验中使用了3种运放,都采用双电源接法,焊接时要注意不要短路,焊接完毕,应先检查后通电。

Msp430 Launchpad采集电压范围为0至5V,需调节抬升电路电位器使其输出电压值合适的心电信号。

4. 嵌入式软件设计

本设计软件部分的设计用Msp430 Launchpad来实现。

4.1 开发软件CCS简介

CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、跟踪和分析等工

-7-

信息学院电科专业课程设计报告

具。

CCS有两种工作模式,即

软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。

硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。

CCS的开发系统主要由以下组件构成: ① TMS320C54x集成代码产生工具; ② CCS集成开发环境;

③ DSP/BIOS实时内核插件及其应用程序接口API; ④ 实时数据交换的RTDX插件以及相应的程序接口API; ⑤ 由TI公司以外的第三方提供的各种应用模块插件。

CCS的功能十分强大,它集成了代码的编辑、编译、链接和调试等诸多功能,而且支持C/C++和汇编的混合编程。

4.2 软件总体设计框图

F5529 显示logo 模拟信号 ADC12 显示工程相关 数据处 LCD

-8-

信息学院电科专业课程设计报告

4.3 软件分步配置:

4.3.1 配置ADC12:

F5529内部ADC为8位12通道模数转换器。实验中将P6.4作为模拟 信号的输入端口。时钟源为MCLK的3分频。

ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on ADC12CTL1 |= ADC12SSEL0 + ADC12DIV2;

ADC12IE = 0x01; // Enable interrupt ADC12CTL0 |= ADC12ENC;

P6SEL |= 0x10; // P6.4 ADC option select

//ADC12SSEL 0:mclk 1:smclk

ADC12CTL1 |= ADC12SHP; // Use sampling timer ,0 clock

4.3.2 配置LCD1602:

采用F5529内置的点阵屏,相关详细配置参见F5529官方“HAL_Dogs102x6.c”

4.4 软件主程序

//******************************************************************************

// MSP430F552x // ----------------- // /|\\| | // | | | // --|RST | // | | // Vin -->|P6.4/CB0/A0 | //

//******************************************************************************

#include #include \ #include\ #include

-9-

信息学院电科专业课程设计报告

int read;

volatile unsigned int x = 0; volatile unsigned int flag = 0; volatile unsigned int value = 0; volatile unsigned int count = 0; volatile float freq = 1.4; volatile unsigned int i; #define Num_of_Results 2

volatile unsigned int results[Num_of_Results];

// Needs to be global in this // example. Otherwise, the // compiler removes it because it // is not used for anything. uint16_t timeoutCounter;

void init_lcd() {

// Dogs102x6_setBacklight(brightness); //设置初始背光值 // Dogs102x6_setContrast(contrast); //设置初始对比度值 }

int main(void)

Dogs102x6_clearScreen(); //显示文字说明:

//Dogs102x6_stringDraw(3, 0, \ // Brightness not programed in Flash Yet

if (brightness == 0xFF) //若当前FLASH中无背光值,则 // Set Default Brightness brightness = 0x11;

uint8_t contrast = *((unsigned char *)contrastSetpointAddress); uint8_t brightness = *((unsigned char *)brightnessSetpointAddress); // Set up LCD

Dogs102x6_init(); //初始化LCD Dogs102x6_backlightInit(); //背光初始化 // Contrast not programed in Flash Yet

if (contrast == 0xFF) //若当前FLASH中无对比度值, // Set Default Contrast contrast = 11; //读取FLASH中对比度值 //读取FLASH中背光值

则将对比度值设为11(默认)

将背光值设为11(默认)

-10-

信息学院电科专业课程设计报告

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT //Board_init(); //初始化GPIO // Globally enable interrupts

ADC12CTL0 = ADC12SHT02 + ADC12ON; // Sampling time, ADC12 on ADC12CTL1 |= ADC12SSEL0 + ADC12DIV2; 1:smclk

ADC12CTL1 |= ADC12SHP; // Use sampling timer ,0 clock

ADC12IE = 0x01; // Enable interrupt ADC12CTL0 |= ADC12ENC;

P7DIR |= 0x01; // P7.0 output

P6SEL |= 0x10; // P6.4 ADC option select P1DIR |= 0x01; // P1.0 output

TA1CCTL0 = CCIE; // CCR0 interrupt enabled TA1CCR0 = 2040;// (1/32768)*205 =5 ms ??

TA1CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, upmode, clear TAR init_lcd(); //logo_init();

__enable_interrupt(); //使能全局中断 //info_init();

Dogs102x6_clearScreen(); buttonsPressed = 0;

//__disable_interrupt(); //关闭全局中断 while (1) {

ADC12CTL0 |= ADC12SC; // Start sampling/conversion __bis_SR_register(LPM0_bits + GIE); // LPM0, ADC12_ISR will force exit __no_operation(); // For debugger

//Dogs102x6_stringDraw(8, 0, \ } }

// Timer0_A5 Interrupt Vector (TAIV) handler #pragma vector=TIMER1_A0_VECTOR __interrupt void TIMER1_A0_ISR(void) {

P7OUT ^= 0x01; // Toggle P1.0 }

#pragma vector = ADC12_VECTOR __interrupt void ADC12_ISR(void) {

//ADC12SSEL 0:mclk -11-

信息学院电科专业课程设计报告

static unsigned char index = 0; if(x<103) { } else {

x++;

if (buttonsPressed){

if(freq>1.0 && freq <1.5) {

ADC12IE = 0x00; // Enable interrupt __bic_SR_register_on_exit(LPM0_bits); // Exit active CPU } else { flag = 0; value = 0; count = 0;

buttonsPressed = 0; Dogs102x6_clearScreen(); x=0; }

} else {

Dogs102x6_clearScreen(); x=0; } {

case 0: break; // Vector 0: No interrupt case 2: break; // Vector 2: ADC overflow case 4: break; // Vector 4: ADC timing overflow case 6: // Vector 6: ADC12IFG0

if (index == 2) {

index = 0; }

Dogs102x6_pixelDraw(x,41-ADC12MEM0/100 + 10,DOGS102x6_DRAW_NORMAL); read = ADC12MEM0;

results[index] = ADC12MEM0; // Move results

index++; // Increment results index, }

switch(__even_in_range(ADC12IV,34))

modulo; Set Breakpoint1 here

if( x>1 && abs(results[0]-results[1]) > 200 && x < 102/*the last line don't draw*/)

-12-

本文来源:https://www.bwwdw.com/article/uvz.html

Top