基于单片机简易信号测量仪毕业设计报告1.docx
- 文档编号:5773678
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:21
- 大小:97.14KB
基于单片机简易信号测量仪毕业设计报告1.docx
《基于单片机简易信号测量仪毕业设计报告1.docx》由会员分享,可在线阅读,更多相关《基于单片机简易信号测量仪毕业设计报告1.docx(21页珍藏版)》请在冰豆网上搜索。
基于单片机简易信号测量仪毕业设计报告1
目录
摘要---------------------------------------------3
第一章方案比较及论证--------------------------------3
1.1方案比较---------------------------------3
1.2方案确定---------------------------------3
第二章基本测量原理-------------------------------3
2.1频率、周期测量---------------------------3
2.2峰峰值测量-------------------------------4
第三章系统设计-----------------------------------4
3.1.1信号整形电路---------------------------4
3.1.2峰峰值测量电路-------------------------5
3.1.3显示电路-------------------------------5
3.1.4电平转换电路---------------------------5
3.1.5系统控制电路---------------------------5
3.2.1系统程序流程---------------------------6
第四章系统指标测试-------------------------------7
4.1指标测试---------------------------------7
4.2设计与测试使用的仪器---------------------7
4.3测试数据---------------------------------7
4.4误差分析及措施---------------------------8
第五章心得体会-----------------------------------9
第六章参考文献---------------------------------10摘要
本系统以AT89S52单片机为核心设计了一种用于测量频率、周期、峰峰值、有效值的简易信号测量仪,其中还可分辩正弦波与方波,利用单片机的数学运算和控制功能,结合部分中规模数字电路,实现测量中的功能手动切换。
各项实测表明,设计原理正确合理,指标符合设计要求。
一、方案比较及论证
1、方案比较
方案一:
系统测频部分采用中小规模数字集成电路,对输入信号作分频整形处理后,再与1s脉宽的标准信号相与,其输出作为计数脉冲,由计数器计数,然后锁存、译码输出到数码管显示。
该方案的特点是硬件电路简单,但工作速度低,精度差,难以达到设计要求,而且不能测量周期与峰峰值。
方案二:
系统采用可编程逻辑器件作为信号处理及系统控制核心,完成包括计数、显示等一系列工作。
该方案集成度高,但可编程逻辑器件价格较高,在本题中使用,将导致系统性能价格比降低。
方案三:
系统采用MCS-51单片机AT89S52作为控制核心,由于单片机自带计数器的计数频率上限较低,输入时钟的频率通常只能是系统时钟频率的几分之一甚至几十分之一,因此采用外部计数器对输入信号进行计数,计数值再由单片机读取,单片机只完成运算、控制及显示功能。
该方案由于采用单片机技术,使其具有智能化的特点,简化了硬件电路,提高了测量精度,同时也能利用软件对测量误差进行补偿,并能方便地对系统进行功能扩展与改进。
2、方案确定
分析以上三种方案的优缺点,方案三具有更大的优越性、灵活性,因此我们采用方案三作为具体实施的方案。
二、基本测量原理
1、频率、周期测量
频率的测量按照频率的定义进行:
在某个已知的标准时间间隔T(如1s)内,测出被测信号重复的次数N,f=N/T就是信号频率。
基本原理框图如图1所示
控制电路
显示电路
被测信号
测量电路
起振电路
图1
图中起振电路由晶振提供测量的时间基准,经分频后产生准确的时间间隔T,作为基准时间去控制计数器。
有信号输入时测量电路对信号进行整形,再进入定时器1进行计数。
若在时间间隔T内,计数值为N,则被测信号的频率f=N/T。
2.周期测量
测量电路在检测到有脉冲的下降沿时打开计数器计数,再一次检测到下降沿时关闭计数器,所测周期为
,其中N为计数值,fs为计数器的工作频率。
3.峰峰值测量
测量正弦信号峰峰值的原理框图如下图所示
对电压进行比较运算
峰峰值电压采样保持
显示
被测信号
峰峰值电压采样保持电路由ADC0809芯片构成。
通过ADC0809芯片将各时间段的模拟量转化为数字量,然后用软件将其保存,再利用单片机的运算功能找出这一系列数中的最大值和最小值,相减便得到峰峰值。
再根据方波和正弦波的差异分别求出两种波的有效值。
。
三、系统设计
硬件部分设计
1.信号整形电路
电路原理图如下
单片机很难直接对正弦信号进行频率的测量,当正弦波和方波在同一输入端时就更难直接测量,其周期也无法直接测量,因而使用整形电路把正弦波变成占空比为50%,频率不变的方波,便可进行频率和周期的测量。
图中,正弦信号用四运算放大器LM324和2.75V的电压作比较,便可得到同频的方波,用于测量其频率。
进入单片机后可识别是否是正弦波.
2.峰峰值测量电路
电路原理图如下:
ADC0809芯片构成采样保持集成电路由。
3显示电路
其电路原理图如下;
显示电路由1602液晶构成,用于输出测量结果。
4电平转换电路
其电路原理图如下;
电平转换电路由MAX232芯片及电容构成,用于把计算机的RS-232C电平转化为TTL电平。
5系统控制电路
其电路原理图如下
此部分是系统的主要控制部分,要完成信号的数模转换和计数脉冲的分频,及显示数值功能。
软件部分设计
⑴系统程序流程
四、系统指标测试
1、指标测试
⑴频率、周期测试:
用函数信号发生器产生频率范围为1Hz~100KHz的方波信号(TTL电平,占空比50%,),用标准频率计测出标准频率,再用设计的测量仪测出频率,求出误差。
(2)峰峰值测量:
用函数信号发生器产生频率范围为1Hz~100KHz的正弦波信号,用标准交流毫伏表测出有效值,通过运算得到标准峰峰值,再用设计的测量仪测出峰峰值,求出误差。
2、设计与测试使用的仪器
EM32501DDS任意波形发生器HM1004-3双踪示波器(100M)
HC-F1000L频率计DT9205A数字万用表
WYK-303B2直流稳压源微型计算机
3、测试数据
⑴表1频率测量数据
标准输入频率(Hz)
本仪器测量值(Hz)
本仪器测量误差
1Hz
1Hz
0%
1000Hz
1000Hz
0%
10000Hz
10000Hz
0%
20000Hz
20020Hz
0.1
100000Hz
100200Hz
0.2%
⑵表2周期测量数据
标准输入周期(ms)
本仪器测量值(ms)
本仪器测量误差
0.100
0.100
0%
0.200
0.200
0%
1.000
1.000
0%
20.000
20.000
0%
1000.00
1000.00
0%
(3)标3峰峰值测量数据
标准输入频率(Hz)
标准峰值(mV)
本仪器测量值(mV)
本仪器测量误差
50
4000
4120
3%
500
4000
4220
5.5%
3K
4000
4160
4.0%
5K
4000
4080
2%
10K
4000
4080
2%
4、误差分析及措施
由于硬件的性能不够理想,信号经过器件时会有一些无法消除的迟延,这些迟延在高频率下引起的误差就尤为突出,系统使用的边沿触发器,其上升沿时间和其下降沿时间不相等,这信号的脉宽发生了一些变化,但这样的误差只能通过用性能更好的器件得到减小。
计数脉冲也是精度产生误差的一个方面,脉冲的精度直接影响了测量得到的频率,因此,我们在系统的设计时,使用了稳定度好的有源晶振。
因为测量频率范围比较大,因此,只用一个档难以达到高的精度,因而可以采用手动换档和不同频段用不同的测量方法来提高精度,减小误差。
单片机的计数器对计数脉冲频率最大只支持500K,扩展支持更高频的计数将能提高测量的精度。
五、心得体会
本次设计让我体味到设计电路过程中的苦与甜。
设计是我们将来必需的技能,这次恰恰给我们提供了一个应用自己所学知识的机会,从图书馆、网上查找资料到理论分析再到最后电路的设计,都对我所学的知识进行了检验。
在设计的过程中发现了以前学的数字电路的知识掌握的不牢。
同时在设计的过程中,遇到了一些以前没有见到过的元件,但是通过查找资料来学习这些元件的功能和使用。
最重要的是要熟练地掌握课本上的知识,这样才能对设计中出现的问题进行分析解决。
参考文献
[1]周良全.模拟电子技术基础.北京:
高等教育出版社,2009.08
[2]郭天祥.51单片机C语言教程.北京:
电子工业出版社,2009.1
[3]田淑清.二级教程————C语言程序设计(2010年版).北京:
高等教育出版社,2009.9
附:
简易信号测量仪的C语言程序和原理图
/********************简易信号测量仪的C源程序***********************/
#include
#defineuintunsignedint
#defineucharunsignedchar//宏定义
unsignedlongintresh_1;//保存波形的周期
ucharflag;//标号用于识别是正弦波还是方波
floatresh_3;//保存波形的占空比
sbitST=P3^2;
sbitEOC=P3^3;
sbitOE=P3^6;
sbitCLK=P3^7;//AD0809与单片机的接口
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;//1602液晶与单片机的接口
sbitp3_4=P3^4;//被测信号的输入接口
sbitS2=P2^4;
sbitS3=P2^5;
sbitS4=P2^6;
sbitS5=P2^7;//四个独立键盘
/*****用定时器0定时,计数器1计数测量频率*****/
unsignedlonginttime0()
{
unsignedlongintcount;
uinti;
ucharscount;
TMOD=0x61;//定时器0工作在定时方式1,定时器1工作在计数方式2
TH0=0xb8;
TL0=0x53;//定时20毫秒
TH1=0x38;
TL1=0x38;//计数200次
scount=50;//定时1秒
TR0=1;//启动定时器和计数器
TR1=1;
do
{
if(TF1==1)
{
i++;//计算经过了多少个200次
TF1=0;
}
if(TF0==1)
{
scount--;
TF0=0;
TH0=0xb8;
TL0=0x53;
}
}while(scount);//1S时间到
TR0=0;
TR1=0;//停止定时器和计数器
count=i*200;//被测信号的频率
returncount;
}
/*********计数器0测周期***********/
unsignedlongintcount()
{
uchara,b,i=0,j=0;
uintresh1,resh_2;
unsignedlongintresh2;
TMOD=0x01;//用定时器0计时
TL0=0x00;
TH0=0x00;
do{}while(p3_4);//刚到低电平就开启定时器0,以保证测量的是一个完整的周期
TR0=1;
do
{
if(TF0==1)
TF0=0;
i++;
j++;//测出低电平的时间,以便求出占空比
}while(p3_4==0);
a=TH0;
b=TL0;//将低电平的计数个数保存
do
{
if(TF0==1)
TF0=0;
i++;//测出波形的周期
}while(p3_4);
TR0=0;//停止定时器
resh1=TH0;
resh1=resh1<<8;
resh1=resh1|TL0;//将两个8位数合成一个16位数
resh2=i*65536+resh1;//算出波形一个周期内计数的个数
resh_2=a;
resh_2=resh_2<<8;
resh_2=resh_2|b;
resh_3=resh_2+j*65536;//算出波形低电平时计数的个数
resh_3=(resh2-resh_3)/resh2;//算出波形的占空比
resh2=resh2*1.09;//精确到个位
returnresh2;
}
/********ADC0809测量信号的电压********/
voidinit()//初始化函数
{
EA=1;//开总中断
TMOD=0x02;//设定定时器T0工作方式
TH0=0xec;
TL0=0xec;//利用T0中断产生CLK信号频率,约550KHZ
TR0=1;//启动定时器T0
ET0=1;
ST=0;
OE=0;
}
uintrun0831()//电压转换
{
uchari,max,min,t[50];
uintk,j;
floatv;
j=resh_1/50.0/10.9;//将波形周期平分为50段,每段经过的时间
init();
for(i=0;i<=49;i++)//每段的电压值存放在一个数组元素中
{
ST=0;//启动AD转换
ST=1;
ST=0;
while(EOC==0);//EOC为1则转换完成
OE=1;
t[i]=P1;
OE=0;
while(j--);//延时波形周期的1/50
}
if(t[0]==t[1]||t[1]==t[2])//成立说明是方波否则是正弦波
flag=1;
else
flag=0;
max=t[0];
for(i=1;i<=49;i++)//选出50个元素中的最大数
{
if(max max=t[i]; } min=t[0]; for(i=1;i<=49;i++)//选出50个元素中的最小数 { if(min>t[i]) min=t[i]; } v=(max-min)*(5.0/256.0);//将模拟信号转换为数字信号 k=100*v+0.5;//精确到百分位 returnk; } /*******1602液晶显示测量结果*******/ voiddelayms2(uintz)//延时 { uinti; for(i=0;i } voidwritedir(uchardir)//写指令 { RS=0; RW=0; P0=dir; E=0; E=1; E=0; } voidwritedat(uchardat)//写数据 { RS=1; RW=0; P0=dat; E=0; E=1; E=0; } voidreaddir()//读与检测状态 { uchardir; P0=0xff; do { RS=0; RW=1; E=1; dir=P0; E=0; }while(dir&0x80); } voidints()//初始化 { delayms2(1666);//延时15毫秒 writedir(0x38);//写指令 delayms2(555);//延时5毫秒 writedir(0x38); delayms2(555); writedir(0x38); readdir();//检测1602液晶是否为空闲状态 writedir(0x38); readdir(); writedir(0x08); readdir(); writedir(0x01); readdir(); writedir(0x06); readdir(); writedir(0x0c); } voidmain() { unsignedlongintcount1; ucharc1,c2,c3,c4,c5,c6,c7;//输出频率和周期的各位数 uintffz;//保存峰峰值 floatyxz;//保存有效值 P0=0xff; P2=0xf0; p3_4=1; while (1) { if(S2==0) { delayms2(1110); if(S2==0) { count1=time0();//测频率,单位为HZ c1=count1/100000; c2=(count1%100000)/10000; c3=(count1%10000)/1000; c4=(count1%1000)/100; c5=(count1%100)/10; c6=count1%10;//将频率的各位分开 ints();//输出频率 readdir(); writedir(0x84); readdir(); writedat(c1); readdir(); writedat(c2); readdir(); writedat(c3); readdir(); writedat(c4); readdir(); writedat(c5); readdir(); writedat(c6); readdir(); writedat('H'); readdir(); writedat('Z'); } } if(S3==0) { delayms2(1110); if(S3==0) { resh_1=count();//测周期,单位为uS c7=resh_1/1000000; c1=(resh_1%1000000)/100000; c2=(resh_1%100000)/10000; c3=(resh_1%10000)/1000; c4=(resh_1%1000)/100; c5=(resh_1%100)/10; c6=resh_1%10;//将周期的各位分开 ints();//输出周期 readdir(); writedir(0x83); readdir(); writedat(c7); readdir(); writedat(c1); readdir(); writedat(c2); readdir(); writedat(c3); readdir(); writedat(c4); readdir(); writedat(c5); readdir(); writedat(c6); readdir(); writedat('u'); readdir(); writedat('S'); } } if(S4==0) { delayms2(1110); if(S4==0) { ffz=run0831();//得到峰峰值 c1=ffz/100; c2=(ffz%100)/10; c3=ffz%10;//将峰峰值的各位分开 ints();//输出峰峰值 readdir(); writedir(0x85); readdir(); writedat(c1); readdir(); writedat('.'); readdir(); writedat(c2); readdir(); writedat(c3); readdir(); writedat('V'); TR0=0; EA=0; ET0=0; } } if(S5==0) { delayms2(1110); if(S5==0) { if(flag)//成立则是方波否则是正弦波 yxz=resh_3*ffz/100+0.5;//将方波的峰峰值转化为有效值 else yxz=ffz/282.8+0.5;//将正弦波的峰峰值转化为有效值 ffz=yxz*100+0.5;//精确到百分位 c1=ffz/100; c2=(ffz%100)/10; c3=ffz%10;//将方波或正弦波有效值的各位分开 ints();//输出方波或正弦波的有效值 readdir(); writedir(0x85); readdir(); writedat(c1); readdir(); writedat('.'); readdir(); writedat(c2); readdi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 简易 信号 测量仪 毕业设计 报告