大连民族学院机电信息工程学院自动化系单片机系统课程设计报告设计完成日期:2012年11月28日目录1任务分析和性能指标 (1)1.1任务分析 (1)1.2性能指标 (1)2总体方案设计 (2)2.1硬件方案 (2)2.1.1传感器 (2)2.1.2 信号处理 (2)2.1.3 单片机 (2)2.1.4 电源 (2)2.2软件方案 (2)3硬件设计与实现 (4)3.1前置放大电路 (4)3.2二阶有源滤波电路 (4)3.3波形整形电路 (5)3.4单片机接口电路 (6)4软件设计与实现 (7)4.1主程序 (7)5 调试及性能分析 (8)5.1调试分析 (8)总结 (9)参考文献 (10)附录1 元器件清单 (11)附录2 调试系统照片 (12)附录3源代码 (13)1任务分析和性能指标1.1任务分析医院的护士每天都要给住院的病人把脉记录病人每分钟脉搏数,方法是用手按在病人腕部的动脉上,根据脉搏的跳动进行计数。
为了节省时间,一般不会作1分钟的测量,通常是测量10秒钟时间内心跳的数,再把结果乘以6即得到每分钟的心跳数,即使这样做还是比较费时,而且精度也不高。
为了提高脉搏测量的精确与速度,多种脉搏测量仪被运用到医学上来,从而开辟了一条全新的医学诊断方法。
随着科学技术的发展,脉搏测量技术也越来越先进,对脉搏的测量精度也越来越高,国内外先后研制了不同类型的脉搏测量仪,而其中关键是对脉搏传感器的研究。
动态微压传感器是一种高性能、低成本的压电式小型压力传感器,产品采用压电薄膜作为换能材料,动态压力信号通过薄膜变成电荷量,在经传感器内部放大电路转换成电压输出。
该传感器具有灵敏度高,抗过载及冲击波能力强,抗干扰性好、操作简便、体积小、重量轻、成本低等特点,广泛应用于医疗、工业控制、交通、安全防卫等领域。
但人体的生物信号多属于强噪声背景下的低频的弱信号, 脉搏波信号更是低频微弱的非电生理信号,因此必需经过放大和后级滤波以满足采集的要求。
1.2性能指标系统能准确测量人的脉搏次数,一分钟误差不超过1次,有直观的显示系统。
系统要求有自己设计电路部分。
2总体方案设计2.1硬件方案本系统主要由动态微压传感器、脉搏信号调理模块、51单片机组成。
其中模块信号调理模块包括信号低通滤波电路、基于LM358的信号放大电路、基于LM339的信号整形电路。
2.1.1传感器SC0073脉搏传感器,该传感器采用压电复合材料作为换能元件,信号通过特殊的匹配层传递到换能元件上变成电荷量,再经传感器内部放大电路转换成电压信号输出。
该传感器是一种高性能低成本的振动传感器,具有灵敏度高、频率响应范围宽、抗过载及冲击能力强、抗干扰性好、操作简便等特点。
通过测试该型号传感器性能基本满足条件。
2.1.2信号处理由于从传感器输出的脉搏信号十分微弱而且有用信号容易淹没在噪声信号中,因此需要对采集到的原始脉搏信号进行放大和滤波等处理,将信号转化成TTL电平信号送给单片机处理。
2.1.3 单片机将处理好的信号接到单片机,通过定时器定时对脉冲信号计数,经过计算处理后送给数码管显示。
2.1.4 电源即向脉搏传感器、信号处理电路、单片机提供的电源,可以是5-12V直流的电源经过稳压电路送给系统。
2.2软件方案统主程序控制单片机系统按预定的操作方式运行, 它是单片机系统程序的框架。
系统上电后,对系统进行初始化。
初始化程序主要完成对单片机内专用寄存器、定时器工作方式及各端口的工作状态的设定。
系统初始化之后, 进行定时器中断、外部中断、显示等工作,不同的外部硬件控制不同的子程序。
3硬件设计与实现3.1前置放大电路前置放大电路对于脉搏波信号采集来说至关重要,考虑到脉搏信号的特点,为了放大噪声环境中传感器输出的弱信号,对于放大器要求具有:极高的共模和差模输入阻抗;很低的输出阻抗;精确和稳定的增益;极高的共模抑制比。
基于以上分析,低功耗、高精度放大器LM358作为前置放大的核心器件。
图3.1.1前置放大电路3.2二阶有源滤波电路噪声信号来源主要有工频干扰、人为运动肌电干扰、基线漂移等,其中50Hz 的肌电干扰最为严重。
为了消除这些干扰信号,在脉搏信号放大器电路中,应加入低通滤波器。
为了达到更好的滤波效果,采用二阶有源滤波器,将截至频率设为5Hz最为理想。
图3.2.1二阶有源滤波电路仿真电路图图3.2.2二阶有源滤波电路仿真幅频特性曲线3.3波形整形电路用LM393高精度电压比较器将信号整形为方波,与单片机接口相兼容。
图3.3.1电压比较器电路3.4单片机接口电路图3.4.1单片机接口电路信号处理后的电路接到单片机P3.0口,同过软件查询方式来对脉搏信号进行计数。
数据处理后送给数码管显示。
数码管采用静态显示方式,提高显示亮度。
4软件设计与实现4.1 主程序图2.2.1主程序流程图5 调试及性能分析5.1 调试分析由于程序调试是否成功,这是关键的一步,因为单纯的硬件无法实现预期的目的。
因此,对程序的调试就同样重要。
调试这阶段发生过的故障如:子程序在运行时破坏现场,缓冲单元发生冲突,零位的建立和清除在设计上有失误,堆栈区域有溢出等问题。
采用单步运行方式和断点运行方式对每个子程序进行调试,单步和断点调试后,再进行连续调试,这是因为单步运行只能验证该子程序的正确与否,而不能确定定时精度、CPU的实时响应等问题。
待全部完成后,应反复运行多次观察。
总结本设计主要是51单片机在脉搏测试系统中的应用。
重点介绍了单片机的最小系统,通过单片机最小系统实现了脉搏的测量系统,由动态微压传感器采集到脉冲信号,经过信号的滤波、放大和整形电路将输出的信号通过单片机的外部中断获取并最终在数码管上显示。
利用单片机自身的定时中断、外部中断、计数等功能,不仅能显示出此次脉搏测量的次数,还能自动储存这个数据。
本次所设计的测量仪系统实现简单、功能稳定、使用方便,应用广泛,具有实际意义。
由于时间比较短,同时本人掌握的知识有限,本次设计虽已完成,但其中有很多不足,如程序不够简练,动态微压传感器灵敏度不够高,数码管显示部分不够完美等,同时此次设计的测量仪功能比较单一,没有如语音系统实现自动读出脉搏次数等人性化功能,且在设计过程中使用的运放数量也较多。
然而科技的进步势必会使测量仪的功能日益强大和完善,其应用领域将不断扩大,将会给我们的生活带来更多的方便和精彩。
为了更好的进行电脉搏测量仪的设计,在近一个学期的时间里,认真收集有关资料,并做相关的整理和阅读,为这次的设计做好充分的准备。
经过这次课设,我收获了很多,具体总结如下:(1)通过此次的设计,使我知道了无论做什么事都应该事先做好充分的准备,不应该盲目的只为了完成任务而被动的学习。
(2)通过此次的设计,使我了解了脉搏测量仪在国内外发展之迅速、应用领域之广、市场前景之大。
(3)通过此次的设计,使我对硬件设计和各模块的功能有了更深的了解,同时提高了动手能力。
(4)通过次次的设计,使我体会到坚持不懈的毅力对完成一件事情起着巨大的作用。
(5)通过此次的设计,使我深刻的体会到团队合作精神的重要性及相互讨论过程中的乐趣。
参考文献[1] 郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009.[2]胡汉才.单片机原理与接口技术[M].北京: 清华大学大学出版社,2004.1-505.[3] 邢国泉. LM35温度传感器的温度特性及其应用[J]. 医疗设备信息.2007,11,25-28.[4] 薛国红,赵修斌,卢艳娥等.零漂与增益控制对量化的影响分析[J].西安:空军工程大学,2008.[5] 马忠梅,刘滨等. 单片机C语言Windows环境编程宝典[M]. 北京: 北京航空航天大学出版社. 2003.附录1 元器件清单名称数量(个)STC89C51 1LM358 1LM393 174HC04 1R=100k 4R=10k 5R=68k 10 SC0073脉搏传感器 1附录2 调试系统照片附录3源代码#include<reg52.h>#include<intrins.h>sbit START=P3^7;sbit MB=P1^0;UnsignedcharcodeLED7[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 F};int couter=0;unsigned char mb=0;unsigned char maibo=0;unsigned char k=0;unsigned char dis=0;unsigned char shi=0;unsigned char ge=0;void delay_ms(unsigned int i){unsigned char j;for(;i>0;i--){j=1500;while(j--);}}void Init(){ET0=1;TR0=1;TMOD=0x11;TH0=(65535-50000)/256;TL0=(65535-50000)%256;PT0=0;}void main(){P0=0x00;P2=0x00;Init();while(1){if(START==0){delay_ms(3);dis=1;mb=0;k=0;EA=1;}if(dis==1){if(MB==0){delay_ms(3);if(MB==0)mb++;while(!MB);}shi=mb/10;ge=mb%10;P2=LED7[ge];P0=LED7[shi];}if(k==1){maibo=mb+mb;shi=maibo/10;ge=maibo%10;P2=LED7[ge];P0=LED7[shi];}}}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;couter++;if(couter==560){couter=0;EA=0;dis=0;k=1;}}。