基于STC15单片机的频率计及方波发生器设计.docx

上传人:b****3 文档编号:3063567 上传时间:2022-11-17 格式:DOCX 页数:30 大小:1.12MB
下载 相关 举报
基于STC15单片机的频率计及方波发生器设计.docx_第1页
第1页 / 共30页
基于STC15单片机的频率计及方波发生器设计.docx_第2页
第2页 / 共30页
基于STC15单片机的频率计及方波发生器设计.docx_第3页
第3页 / 共30页
基于STC15单片机的频率计及方波发生器设计.docx_第4页
第4页 / 共30页
基于STC15单片机的频率计及方波发生器设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

基于STC15单片机的频率计及方波发生器设计.docx

《基于STC15单片机的频率计及方波发生器设计.docx》由会员分享,可在线阅读,更多相关《基于STC15单片机的频率计及方波发生器设计.docx(30页珍藏版)》请在冰豆网上搜索。

基于STC15单片机的频率计及方波发生器设计.docx

基于STC15单片机的频率计及方波发生器设计

课程设计论文

课题:

基于STC15单片机的频率计及方波发生器设计

 

基于STC15单片机的频率计及方波发生器设计

 

基于STC15单片机的频率计及方波发生器设计

一、设计要求

一)基础部分

1.数字频率计设计要求:

1)被测信号为正弦波或方波,频率围为1Hz~5MHz;

2)测量相对误差的绝对值不大于百分之一;

3)门限电压2V-5V;

4)测量数据刷新时间不大于2s,测量结果稳定。

2.方波发生器设计要求:

1)方波发生器可以分为低频和高频2个端口产生,频率围1Hz-6MHz;

2)通过不同按键实现频率的粗调和微调。

二)发挥部分

1.频率计围为大于5MHz;

2.测量相对误差的绝对值不大于千分之一;

3.增加脉冲信号占空比的测量功能。

 

二、课程设计的意义与目的

1.在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。

2.在通信技术中,波形的发生和频率的控制是最基本的要求,也是通信技术的基础,因此设计波形的发生与控制器就显得尤为重要。

3.单片机数字频率计与可调方波发生器,具有可靠性高、体积小、价格低、功能全,广泛应用与各种职能仪器中,能使在测量过程的控制中达到自动化,省掉很多繁琐的人工操作,同时也提高了测试精度。

4.其次,课程设计以学生自主学习为主,是课堂容的扩展和延伸,巩固前序教学容,提升学生设计能力,使学生掌握小规模单片机系统的软硬件设计,培养学生的自主学习能力,自主学习掌握单片机相关的新知识,自主解决问题的能力。

 

三、方案设计

单片机数字频率计与可调方波发生器程序设计流程图

四、硬件设计原理图:

五、硬件设计实物图:

 

六、程序框架:

USER:

用户区main

Driver:

驱动区keypwmdigital(数码管)

Apply:

应用区measure(测量)

Sys:

系统区globaldelayusart

七、功能说明:

开机后默认进入方波发生器状态,输出引脚为P3.7,此时K2切换粗调细调,K4,K4分别为粗调和细调模式下的增加、减少频率按钮;

按下K1,此时切换为频率计测量,P3.4为测量输入口,注意和测量信号之间的共地。

测量围为1Hz-8MHz,精度误差稳定达到千分之一,附误差分析。

可以用P3.7产生方波给P3.4测量,两个函数从机器上电开始就一直运行,互不干扰。

 

八、测量:

低频测量:

高频测量:

 

九、误差分析:

第一次误差分析:

小结:

频率计可以突破5M,平均误差为千分之二。

第二次误差分析:

由于不能稳定达到千分之一的测量设计误差值,并且从上图的测试表中得到误差满足线性关系,因此加入补偿值,第二次误差测试如下:

由上图可知,低频、中频、高频部分误差分别万分之五、万分之一、万分之二,整体平均误差为0.00030759,即万分之三,大幅度超过课程设计要求的误差值。

十:

实现功能情况表:

数字频率计设计要求

课程设计要求

实现情况

结论

1.被测信号为正弦波或方波,频率围为1Hz~5MHz;

频率测量围为1Hz~8MHz

完成,并且大幅度超过设计要求

2.测量相对误差的绝对值不大于百分之一;

测量相对误差的绝对值为万分之三

完成,并且大幅度超过设计要求

3.门限电压2V-5V;

门限电压2V-5V

完成

4.测量数据刷新时间不大于2s,测量结果稳定;

测量数据刷新时间为1s,测量结果稳定

完成,并且大幅度超过设计要求

方波发生器设计要求

课程设计要求

实现情况

结论

1.方波发生器可以分为低频和高频2个端口产生,频率围1Hz-6MHz;

方波发生器可以产生70Hz~8MHz频率围的方波

完成,基本满足设计要求

2.通过不同按键实现频率的粗调和微调。

可通过不同按键实现频率的粗调和微调

完成

发挥部分

课程设计要求

实现情况

结论

1.频率计围为大于5MHz;

频率计测量围上限为8MHz

完成

2.测量相对误差的绝对值不大于千分之一;

测量相对误差的绝对值为万分之三

完成,并且大幅度超过设计要求

3.增加脉冲信号占空比的测量功能。

能完成500Hz以的测量功能

未完成

自行发挥部分

1.方波发生器可调占空比输出,调节围为5%~100%

完成,通过按键调节

2.方波发生器和频率计可同时运行

完成,通过按键切换

十一、心得与体会

十二、参考资料

 

十三、附录:

附录一:

源程序

Main主函数:

#include"STC15Fxxxx.H"

#include"global.h"

#include"measure.h"

#include"pwm.h"

#include"key.h"

#include"delay.h"

#include"Digital.h"

voidmain()

{

while

(1)

{

PWM_Work();//打开测量功能函数

}

}

按键扫描函数

#include"global.h"

#include"delay.h"

#include"key.h"

UINT8KEY_Scan(UINT8mode)

{

staticUINT8key_up=1;//按键按松开标志

if(mode)key_up=1;//支持连按mode=1的时候连按,mode=0时不支持连按

if(key_up&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))

{

Delay10ms();//去抖动

key_up=0;

if(KEY1==0){while(!

KEY1);returnKEY1_PRES;}//当key1按下,返回KEY1_PRES的值

elseif(KEY2==0){while(!

KEY2);returnKEY2_PRES;}//当key2按下,返回KEY2_PRES的值

elseif(KEY3==0){while(!

KEY3);returnKEY3_PRES;}//当key3按下,返回KEY3_PRES的值

elseif(KEY4==0){while(!

KEY4);returnKEY4_PRES;}//当key4按下,返回KEY4_PRES的值

}elseif(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1;

return0;

}

数码管显示相关函数:

#include"global.h"

#include"digital.h"

#include"STC15Fxxxx.H"

UINT8codeLedChar[]={//段码

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E

};

UINT8LedBuff[8]={

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF//数码管显示缓存区

};

voidDigital_Init()

{

P0M0=P0M1=P1M0=P1M1=P2M0=P2M1=P3M0=P3M1=0;//配置IO口模式

Timer2Init();//定时器2初始化

IE2|=0x04;//开启定时器2中断

EA=1;//开启总中断

}

voidDigital_New(UINT32num)//数码管显示数值的更新函数

{

LedBuff[0]=LedChar[num%10];

LedBuff[1]=LedChar[num/10%10];

LedBuff[2]=LedChar[num/100%10];

LedBuff[3]=LedChar[num/1000%10];

LedBuff[4]=LedChar[num/10000%10];

LedBuff[5]=LedChar[num/100000%10];

LedBuff[6]=LedChar[num/1000000%10];

LedBuff[7]=LedChar[num/10000000%10];

}

voidTimer2Init(void)//1毫秒33.1776MHz

{

AUXR&=0xFB;//定时器时钟12T模式

T2L=0x33;//设置定时初值

T2H=0xF5;//设置定时初值

AUXR|=0x10;//定时器2开始计时

}

voidInterruptTime2()interrupt12//数码管显示的更新

{

staticUINT8i=0;

P0=0xFF;//关闭残影

switch(i)

{//动态扫描显示

case0:

P2=0x01;i++;P0=LedBuff[0];break;

case1:

P2=0x02;i++;P0=LedBuff[1];break;

case2:

P2=0x04;i++;P0=LedBuff[2];break;

case3:

P2=0x08;i++;P0=LedBuff[3];break;

case4:

P2=0x10;i++;P0=LedBuff[4];break;

case5:

P2=0x20;i++;P0=LedBuff[5];break;

case6:

P2=0x40;i++;P0=LedBuff[6];break;

case7:

P2=0x80;i=0;P0=LedBuff[7];break;

default:

break;

}

}

 

PWM发生器函数:

#include"global.h"

#include"STC15Fxxxx.H"

#include"pwm.h"

#include"key.h"

#include"digital.h"

#include"intrins.h"

#include"measure.h"

#include"delay.h"

voidDigital_Init(void);

voidDigital_New(UINT32num);

sbitBELL=P4^5;

#defineTick0.08179L//时间片长度

#defineLTick0.30864L//16分频后的时间片长度

#definestepH5000//粗调步进值

#definestepL100//细调步进值

#definestepD5//占空比步进值

doublefreq=50000;//PWM波频率

UINT32Duty=50;//定义占空比50%

//计算,根据PWM频率计算出15位增强型PWM发生器装载值

doubleCalculate(doublen)

{

doublei;

BELL=0;

if(n<=150

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1