电子装置与系统设计课程设计报告_第1页
电子装置与系统设计课程设计报告_第2页
电子装置与系统设计课程设计报告_第3页
电子装置与系统设计课程设计报告_第4页
电子装置与系统设计课程设计报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子装置与系统设计课程设计学院: 信息电子学院 班级: 08电子信息工程 学号: e08610308 姓名: 陈建能 指导老师: 陈科沈军民 日期: 20110704 目录1、课程设计目的32、课程设计工具及题目32.1、课程设计工具.3 2.2、课程设计题目.33、课程设计内容、步骤及电路原理图33.1、课程设计内容.33.2、课程设计步骤.33.3、整个系统的电路原理图.44、课程设计各模块工作原理5 4.1、红外心率计模块.54.1.1、负电源变换电路54.1.2、血液波动检测电路.64.1.3、放大、整形、滤波电路.74.2、pic单片机检测并显示模块84.2.1、定时器初始化及中断函

2、数.84.2.2、数脉冲个数程序.94.2.3、数码管显示程序.104.2.4、延时子程序.11 4.2.5、ds18b20温度采集程序.115、课程设计心得.146、参考文献.157、附录:源程序代码及注释16课程设计目的:单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮在全社会大规模地兴起。学习单片机的最有效方法就是理论与实践并重。系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力。培养一定的自学能力和独立分析问题、解决问题的能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案;课程设计工具及题目:

3、1、课程设计工具:pc机、pic单片机最小系统、红外心率计模块 2、课程设计题目:基于pic单片机的脉搏检测课程设计内容、步骤及电路原理图 1、学习pcb画图,选好课题,即脉搏检测。购买元器件材料,焊接pic最小系统版,搭建心率计模块,然后由心率计模块产生方波,用pic单片机数出一分钟的脉冲个数,然后在数码管上显示出来,即为脉搏。2、首先根据最小系统版的原理图,搭建好电路,调试下载线是否可以下载,复位开关是否可以工作。调试成功之后,开始搭建心率计模块,搭建好心率计模块之后,开始检测是否可以产生方波,用手指按在传感器上,然后用示波器观察是否出现方波脉冲。调试成功之后,就编写相应的程序,烧写进单片

4、机中,然后就可以检测相应的脉搏了。3、红外心率计模块电路图 4、pic单片机最小系统原理图各功能模块的工作原理:1、 红外心率计模块单元电路的工作原理 负电源变换电路负电源变换电路的作用是把+12v直流电变成-10v左右的直流电压,-10v 电压与+12v作为运算放大器的电源。负电源变换电路如图2所示,其中ic1(cd4069)为六非门集成电路,它的内部结构图如图3(a)所示。负电源变换电路工作原理:通电的瞬间,假设a点是低电位,则b点是高电位,c点是低电位,d点是高电位。b点的高电位通过r19给c7充电,当f点的电压高于ic1(cd4049)的电平转换电压时,b点输出低电位,c点(c7一端)

5、输出高电位,由于电容两端的电压不能突变,所以c7两端的电压通过r19放电。当f点电压低于ic1的转换电压时,b点输出高电位,此高电位通过r19对c7充电,如此循环。c点得到方波,经过后面四个反相器反相、扩流后,在d点得到方波。当d点是高电平的时候,v1导通c8被充电,大约充到11v左右,当d点变成低电平的时候,由于c8两端电压不能突变,g点电压被拉到-11v左右,此时v2导通, c9反方向进行充电,使e点电压达到-10v左右。由于带负载的能力不强,当带上负载后,e点电压大约降到9v左右。图2 电源电路 (a) cd4049 (b) lm741图3 集成电路的结构图 血液波动检测电路血液波动检测

6、电路首先通过红外光电传感器把血液中波动的成分检测出来,然后通过电容器耦合到放大器的输入端。如图4所示。图4 血液波动检测电路tcrt5000红外光电传感器的检测方法:首先用数字万用表的二极管档位正向压降测试控制端发射管(浅蓝色)的正、负极,将红黑表笔分别接发射管的两个引脚,正反各测一次,表头一次显示“1.05(0.9-1.1)”,一次显示溢出值“-1”,则显示1.05v的那次正确,红表笔接的是正极,黑表笔接的是负极。若两次都显示“1”,说明发射管内部开路,若两次都显示“0”发射管内不短路。然后再判断接收管的c、e极和光电转换效率,方法如下:将发射管的正负极分别插入数字万用表hfe档npn型的c

7、、e插孔,再将模拟万用表打到r1k档。红黑表笔分别接接收管的两个引脚,若表针不动,则红黑表笔对调,若表针向右偏转到15k左右,则黑表笔所接管脚为c,红表笔所接管脚为e。此时,再用手指或白纸贴近两管上方,表针继续向右偏转至1k以内,说明该红外光电断续器的光电转换效率高。血液波动检测电路工作原理:tcrt5000是集红外线发射管、接收管为一体的器件,工作时把探头贴在手指上,力度要适中。红外线发射管发出的红外线穿过动脉血管经手指指骨反射回来,反射回来的信号强度随着血液流动的变化而变化,接收管把反射回来的光信号变成微弱的电信号,并通过c1耦合到放大器。 放大、整形、滤波电路放大、整形、滤波电路是把传感

8、起检测到的微弱电信号进行放大、整形、滤波,最后输出反映心跳频率的方波,如图5所示。其中lm741为高精度单运放电路,它们的引脚功能如图3 (b)所示。ic2、ic3、ic4都为lm741。图5信号放大、整形电路因为传感器送来的信号幅度只有25毫伏,要放大到10v左右才能作为计数器的输入脉冲。因此放大倍数设计在4000倍左右。两级放大器都接成反相比例放大器的电路,经过两级放大、反相后的波形是跟输入波形同相、且放大了的波形。放大后的波形是一个交流信号。其中a1、a2的供电方式是正负电源供电,电源为+12v、-10v。a1、a2与周围元件组成二级放大电路,放大倍数auf为:由于放大后的波形是一个交流

9、信号,而计数器需要的是单方向的直流脉冲信号。所以经过v3检波后变成单方向的直流脉冲信号,并把检波后的信号送到rc两阶滤波电路,滤波电路的作用是滤除放大后的干扰信号。r9、v4组成传感器工作指示电路,当传感器接收到心跳信号时,v4就会按心跳的强度而改变亮度,因此v4正常工作时是按心跳的频率闪烁。直流脉冲信号滤波后送入a3的同相输入端,反相输入端接一个固定的电平,a3是作为一个电压比较器来工作的,是单电源供电。当a3的3脚电压高于2脚电压的时候,6脚输出高电平;当a3的3脚电压低于2脚电压的时候,6脚输出低电平,所以a3输出一个反应心跳频率的方波信号。2、 pic单片机检测并显示模块 定时器,定时

10、1s实现60秒的计时功能,用于检测的时间,并在数码管上显示出来。相应的初始化程序为:void time1_rtc_init(void) intcon = 0x20; /disable global and enable tmr0 interrupt intcon2 = 0x84; /tmr0 high priority rconbits.ipen = 1; /enable priority levels tmr0h = 100; /clear timer tmr0l = 0; /clear timer t0con = 0x85; /set up timer0 - prescaler 1:64

11、intconbits.gieh = 1; /enable interrupts定时器的中断函数为:#pragma code interruptvectorhigh = 0x08voidinterruptvectorhigh (void) _asm goto interrupthandlerhigh /jump to interrupt routine _endasm#pragma code#pragma interrupt interrupthandlerhighvoid interrupthandlerhigh () if(intconbits.tmr0if) /check for tmr0

12、 overflow intconbits.tmr0if = 0; /clear interrupt flag second+; /indicate timeout if(second = 60) second = 0;result = 1;/if(result != 1)/led = led; 由rb0采集脉搏的方波,计数方波个数,并在60秒后显示在数码管上。#define pulse portbbits.rb0采用上升沿触发来实现计数功能,从而实现了计数方波的个数的功能。 if(intconbits.int0if = 1)intconbits.int0if = 0; delay_ms(100

13、);fre+;位选和段选的数值和数码管的显示程序如下:const unsigned table10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; const unsigned bit_set4=0xfe,0xfd, 0xfb, 0xf7;void display(int time) portc = tabletime % 10;portd = bit_set3;delay_ms(20);portc = table(time / 10) % 10;portd = bit_set2;delay_ms(20); portc = tabletim

14、e / 100;portd = bit_set1;delay_ms(20);显示带小数位的,代码如下:void display1(int time) portc = tabletime % 10;portd = bit_set3;delay_ms(10);portc = table1(time / 10 )% 10;portd = bit_set2;delay_ms(10); portc = table(time)/ 100;portd = bit_set1;delay_ms(10);延时子程序如下:void delay_ms(unsigned int time)int n;for(;time

15、0;time-)for(n = 0; n 0)i-; ds=1; i=4; while(i0)i-;char tempreadbit(void) /读1位函数 int i; char dat; trisb = 1; ds=0;i+; /i+ 起延时作用 ds=1;i+;i+; trisb = 3; dat=ds; i=8;while(i0)i-; return (dat);char tempread(void) /读1个字节 char i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字

16、节在dat里 return(dat);void tempwritebyte(char dat) /向18b20写一个字节数据 int i; char j; char testb; for(j=1;j1; if(testb) /写 1 trisb = 1; ds=0; i+;i+; ds=1; i=8;while(i0)i-; else trisb = 1; ds=0; /写 0 i=8;while(i0)i-; ds=1; i+;i+; void tempchange(void) /ds18b20 开始获取温度并转换 dsreset(); delay_ms(1); tempwritebyte(

17、0xcc); / 写跳过读rom指令 tempwritebyte(0x44); / 写温度转换指令int get_temp() /读取寄存器中存储的温度数据 char a,b; dsreset(); delay_ms(1); tempwritebyte(0xcc); tempwritebyte(0xbe); a=tempread(); /读低8位 b=tempread(); /读高8位 temp=b; temp=8; /两个字节组合为1个字 temp=temp|a; f_temp=temp*0.0625; /温度在寄存器中为12位 分辨率位0.0625 temp=f_temp*10+0.5;

18、/乘以10表示小数点后面只取1位,加0.5是四舍五入 f_temp=f_temp+0.05; return temp; /temp是整型课程设计心得参考文献1 郭天祥。新概念51单片机c语言教程m 2009.121 孙安青。pic单片机使用c语言程序设计与典型实例m 2008.06附录:源程序代码及注释#include #define pulse portbbits.rb0#define ds portbbits.rb1void delay_ms(unsigned int time); const unsigned char table10=0x3f,0x06,0x5b,0x4f,0x66,0

19、x6d,0x7d,0x07,0x7f,0x6f; const unsigned char table110=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; const unsigned bit_set4=0xfe,0xfd, 0xfb, 0xf7;void time1_rtc_init(void);void timer1_rtc_isr(void);void interrupthandlerhigh (void);void display(int time);void display1(int time);void main(void);i

20、nt second, flag, fre, result, temp, count;float f_temp;void dsreset(void) /18b20复位,初始化函数 int i; trisb = 0xf1; ds=0; i=103; while(i0)i-; ds=1; i=4; while(i0)i-;char tempreadbit(void) /读1位函数 int i; char dat; trisb = 0xf1; ds=0;i+; /i+ 起延时作用 ds=1;i+;i+; trisb = 0xf3; dat=ds; i=8;while(i0)i-; return (da

21、t);char tempread(void) /读1个字节 char i,j,dat; dat=0; for(i=1;i=8;i+) j=tempreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节在dat里 return(dat);void tempwritebyte(char dat) /向18b20写一个字节数据 int i; char j; char testb; for(j=1;j1; if(testb) /写 1 trisb = 0xf1; ds=0; i+;i+; ds=1; i=8;while(i0)i-; else trisb = 0xf1; ds=0; /写 0 i=8;while(i0)i-; ds=1; i+;i+; void tempchange(void) /ds18b20 开始获取温度并转换 dsreset(); delay_ms(1); tempwritebyte(0xcc); / 写跳过读rom指令 tempwritebyte(0x44); / 写温度转换指令int get_temp() /读取寄存器中存储的温度数据 char a,b;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论