基于S的简易频率计设计.docx

上传人:b****4 文档编号:5292940 上传时间:2023-05-08 格式:DOCX 页数:16 大小:221.17KB
下载 相关 举报
基于S的简易频率计设计.docx_第1页
第1页 / 共16页
基于S的简易频率计设计.docx_第2页
第2页 / 共16页
基于S的简易频率计设计.docx_第3页
第3页 / 共16页
基于S的简易频率计设计.docx_第4页
第4页 / 共16页
基于S的简易频率计设计.docx_第5页
第5页 / 共16页
基于S的简易频率计设计.docx_第6页
第6页 / 共16页
基于S的简易频率计设计.docx_第7页
第7页 / 共16页
基于S的简易频率计设计.docx_第8页
第8页 / 共16页
基于S的简易频率计设计.docx_第9页
第9页 / 共16页
基于S的简易频率计设计.docx_第10页
第10页 / 共16页
基于S的简易频率计设计.docx_第11页
第11页 / 共16页
基于S的简易频率计设计.docx_第12页
第12页 / 共16页
基于S的简易频率计设计.docx_第13页
第13页 / 共16页
基于S的简易频率计设计.docx_第14页
第14页 / 共16页
基于S的简易频率计设计.docx_第15页
第15页 / 共16页
基于S的简易频率计设计.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于S的简易频率计设计.docx

《基于S的简易频率计设计.docx》由会员分享,可在线阅读,更多相关《基于S的简易频率计设计.docx(16页珍藏版)》请在冰点文库上搜索。

基于S的简易频率计设计.docx

基于S的简易频率计设计

 

题目:

基于S08的简易频率计设计

班级:

自动化1103

姓名:

学号:

 

目录

一、课题任务3

二、方案比较与选择3

1、方案比较3

2、方案论证4

3、方案选择4

三、系统设计原理5

四、S08AW简介5

五、电路设计6

1、显示电路6

2、电路图7

六、程序设计9

1程序流程图9

2程序清单9

七、功能分析13

1外围电路的理论分析13

2频率的测量 14

八、总结14

参考文献15

 

基于S08的简易频率计设计

一、课题任务

本设计是基于s08单片机设计的简易频率计。

技术指标:

频率(F)为:

1Hz~100MHz,周期(T)为:

1S~10E-7S,精度为:

10%。

二、方案比较与选择

1、方案比较

方案一:

本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。

其原理框图如图1所示

图1.方案一原理框图

方案二:

本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。

其原理框图如2所示

 

图2.方案二原理图

2、方案论证

方案一:

本方案使用大量的数字器件,被测量信号经过放大整形电路变成计数器所要求的脉冲信号,其频率与被测信号的频率相同。

同时时基电路提供标准时间基准信号,其高电平持续时间1s,当1s信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到1s信号结束闸门关闭,停止计数。

若在闸门时间1s内计数器计得的脉冲个数为N,则被测信号频率F(X)=NHz。

逻辑控制电路的作用有两个:

一是产生锁存脉冲,使显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。

方案二:

本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测正弦波或者三角波转换为方波,利用单片机的计数器和定时器的功能对被测信号进行计数。

编写相应的程序可以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。

3、方案选择

比较以上两种方案可以知道,方案二的核心是单片机,使用的元器件少,原理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测量,能自动选择测试的量程。

与方案二相比较方案一则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。

如要测量高频的信号还需要加上分频电路,价格相对高。

鉴于我们是第一次做与单片机有关的电子设计作品,为了减少一定的难度以及为今后更好的实现频率计的精细化和准确化,经过小组讨论,我们决定从基础的频率计出发。

该频率计是利用单片机内部的定时/计数器完成待测信号周期/频率的测量,测量范围相比与要求较窄,但具有一定的代表性和基础性。

三、系统设计原理

本频率计的设计以是S08AW为核心,利用它内部的定时/计数器完成待测信号周期/频率的测量,定时/计数器的工作可以由编程来实现定时,计数和产生计数溢出时中断要求的功能。

在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1,这样以机器周期为基准可以用来测量时间间隔。

在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。

外部输入在每个机器周期被采用一次,这样查测一次从1到0的跳变至少需要2个机器周期,所以最大计数速率为时钟频率1/24。

定时/计数器的工作有运行控制位TR控制,当TR置1,定时/计数器开始计数;当TR清0,停止计数。

当待测信号的频率>100HZ时,定时/计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,计数闸门宽度>1S时,即可满足频率测量结果为3位有效数字。

4、S08AW简介

S08AW系列是Freescale公司推出的新一代S08系列微控制器中的一款增强型8位微控制器,它不仅集成度高、片内资源丰富,接口模块包括SPI、SCI、IIC、A/D、PWM等,还具有很宽的工作温度范围:

-40℃~+125℃,它在汽车电子、工业控制、中高档机电产品等领域具有广泛的用途。

  S08AW微控制器采用8位S08CPU,片内总线时钟最高可达20MHz;片内资源包括2KRAM、将近62KFlash、串行接口模块(SCI、SPI和IIC)、定时器模块(TPM)、可选择宽范围时钟频率,它还提供一个8位/10位精度的A/D转换器,并支持后台调试模式BDM。

S08AW是Freescale首个基于高性能S08CPU内核并支持2.7~5.5V电源的微控制器。

它包含众多有应用价值的特性:

将近62K的flash存储器、高达2K的RAM、灵活而无需外部元件的内部时钟发生器、低电压检测、高性能模/数转换器(ADC)和串行通信模块等。

S08AW系列具有极佳的电磁兼容性能(EMC)并提供了不同的引脚数(64,48或44)、封装选项(QFP,LQFP或QFN)及宽温度范围(-40℃~+125℃),可适应各类恶劣环境,因此该微控制器适用于高可靠的工业与汽车电子领域。

5、电路设计

1、显示电路

我们测量的频率最终要显示出来,八段LED数码管显示器由8个发光二极管组成。

基中7个长条形的发光管排列成“日”字形,另一个圆点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。

LED数码管显示器有两种形式:

一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED数码管显示器。

共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。

当二极管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。

8个笔划段hgfedcba对应于一个字节(8位)的D7、D6、D5、D4、D3、D2、D1、D0,于是用8位二进制码就能表示欲显示字符的字形代码。

图4四位一体数码管

我们使用的是SM420564-32系列的共阴四位一体数码显示管。

4位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方),a、b、c、d、e、f、g、dp为段引脚,1、2、3、4分别表示四个数码管的位。

1af23b

eddpcg4

在单片机应用系统中,数码管显示器显示常用两种办法:

静态显示和动态扫描显示。

所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O接口用于笔划段字形代码。

这样单片机只要把要显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码。

因此,使用这种办法单片机中CPU的开销小,能供给单独锁存的I/O接口电路很多。

在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一,其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O线控制。

CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就能自行决定何时显示哪一位了。

而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。

在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

如图原理图5

图5显示电路原理图

2、电路图

图6S08AW电路

其中含有晶振、复位电路、138译码输出电路

6、程序设计

1程序流程图

2程序清单

#include

#defineuncharunsignedchar

voidinit_timer();//定时器初始化函数

voiddelay();//基础延时函数

voidmult_delay(unchartime);//基础延时函数整数倍延时

voidconvert_LED();//LED结果转换函数

voidLED_number_add(unsignedintadd);//加法函数

voidLED_display();//

voidLCM_display();

uncharcount=0;

unsignedinttemp_add=0;//加数add的临时赋值

uncharpoint=7;//定义小数点所在的位

uncharLED_number3,LED_number2,LED_number1,LED_number0;//显示在LED上的真实数字

uncharLEDBUF[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//LED数据显示缓冲区

uncharled_point[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08};//定义带小数点的代码段

uncharleddata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08};//定义不带小数点的代码

/*******************************主函数*********************************/

voidmain()

{

init_timer();//定时器配置

LED_number0=0;

LED_number1=0;

LED_number2=0;

LED_number3=0;

while

(1)

{

convert_LED();//将频率值转换成显示在8段数码管上的数据

LED_display();//将前面转换出来的数字显示在LED上

}

}

/****************************LED显示函数**************************/

voidLED_display()

{

uncharindex=0;

uncharNOT_zero;

NOT_zero=0;

for(index=0;index<8;index++)

{

if(!

(((LEDBUF[index]==0)&(!

NOT_zero))&(index!

=point)))

{

NOT_zero=1;

//P0=index;

P1=0x00;

P0&=0xf8;

P0|=index;

if(point==index)

P1=led_point[LEDBUF[index]];

else

P1=leddata[LEDBUF[index]];

mult_delay

(1);

}

}

}

/*基础延时函数*/

voiddelay()

{

unsignedinttime_length;

time_length=0x0a;

while(time_length--);

}

/*//基础延时函数整数倍延时*/

voidmult_delay(unchartime)

{

while(time--)

{delay();}

}

/************************LED结果转化函数***********************/

voidconvert_LED()

{

if(temp_add!

=0)

{

LED_number_add(temp_add);

temp_add=0;

}

if(LED_number0>=100)

{

LED_number1+=LED_number0/100;

LED_number0-=(LED_number0/100)*100;

}

if(LED_number1>=100)

{

LED_number2+=LED_number1/100;

LED_number1-=(LED_number1/100)*100;

}

if(LED_number2>=100)

{

LED_number3+=LED_number2/100;

LED_number2-=(LED_number2/100)*100;

}

if(LED_number3>=100)

{

LEDBUF[0]=11;LEDBUF[1]=11;LEDBUF[2]=11;LEDBUF[3]=11;

LEDBUF[4]=11;LEDBUF[5]=11;LEDBUF[6]=11;LEDBUF[7]=11;

while

(1)

{

LED_display();

}

}

LEDBUF[7]=LED_number0%10;

LEDBUF[6]=LED_number0/10;

LEDBUF[5]=LED_number1%10;

LEDBUF[4]=LED_number1/10;

LEDBUF[3]=LED_number2%10;

LEDBUF[2]=LED_number2/10;

LEDBUF[1]=LED_number3%10;

LEDBUF[0]=LED_number3/10;

}

/**************************加法函数*****************************/

voidLED_number_add(unsignedintadd)

{

uncharaddH,addL;

addH=add/100;

addL=add%100;

LED_number0+=addL;

LED_number1+=addH;

}

/***********************定时器初始化函数***************************/

voidinit_timer()

{

EA=1;//开总中断

ET0=1;//允许定时器0中断

TMOD=0x51;//定时器工作方式选择

TL0=0x00;

TH0=0x4c;//定时器赋予初值

/*-------------------------------------*/

TL1=0x00;

TH1=0x00;//计数器赋予初值

/*-------------------------------------*/

TR0=1;//启动定时器

TR1=1;

}

/**********************定时器中断服务函数*******************************/

voidtimer0()interrupt1//50ms中断函数

{

unchartemp_TL1=0;

unchartemp_TH1=0;

unsignedlongtemp_number=0;

TH0=0x4c;//50ms初值晶振11.0592

TL0=0x00;

count++;

if(count==20)

{

count=0;

temp_TL1=TL1;

temp_TH1=TH1;

TL1=0x00;

TH1=0x00;

LED_number0=0x00;

LED_number1=0x00;

LED_number2=0x00;

LED_number3=0x00;

temp_number=temp_TH1*256+temp_TL1;

LED_number3=temp_number/1000000;

LED_number2=(temp_number%1000000)/10000;

LED_number1=(temp_number%10000)/100;

LED_number0=(temp_number%100);

}

}

7、功能分析

1外围电路的理论分析

信号输入幅值可能没有到斯密特触发器所能识别的幅值,所以要先由三极管进行放大。

放大后,由斯密特触发器(74ls14)进行整形,整形后输出相同频率的方波。

而脉冲部分电平约为4~5v,为高电平。

再根据单片机发出的信号是否要分频。

由于1M除以16为62500。

而单片机计数器可以计到65536.可以减少设计要求。

小频率在分频情况下,误差较大,所以直接送给。

而且由于普通单片机不能正确识别几百khz的频率。

大于60khz进行16分频。

设计中由于没及时买到三态门,只用手动控制。

2频率的测量 

先将最后要存储R0~R7 清零,过程中出现位标志等清零进行初始化。

然后将T0方式一赋初TH0=0B1H,TL0=0E7H.循环50次正好1S。

计数方式一TH1.TH0清零同时开启定时器T0和计数器T1。

如果定时50次(1s)到了,就停止计数器T1.将T1的计数的值转化十进制数(调用网上了二位BCD码转化),形成十进制的频率。

再判断是否有进行分频。

有的话,将十进制数用每位都乘以16进行移位相加,因为每一位最大为9.乘以16再加上进位,也不会超过三位数,所以可以用寄存器先进行储存。

再用每位相加再加上进位。

得到乘以16的十进制数,如果超出1Mhz,对置位认为超出量程。

至此已经得到在(1~1MHZ)的频率。

再进行判断频率是否超过1khz. 如果超过1KHZ,直接送给显示。

如果小于1khz,先进行测周期(见周期测量),再调用四字除法二字子程序。

用100000000除以周期得到的值,得到频率再转化十进制。

得到频率。

取四位有效数值,误差基本上达到

8、总结

通过这次设计,我们受益匪浅。

虽然与毕业设计和真正的电子设计大赛作品相比,这个作品比较简单,但这对于我们的大学生活来说,也是一笔宝贵的财富。

电子设计是一次综合性的实践,它将各种知识结合到一起综合运用到实践上来扩展、弥补、串联所学的知识。

通过本次毕业设计我们得到了很多收获。

首先,了解了单片机的基本知识和在各种产品中的应用。

其次掌握了C语言的编写程序,同时掌握了如何收集、查阅、应用文献资料,如何根据实际需要有选择的阅读书籍和正确确定系统所要使用的元器件的类型。

再次,在精神方面锻炼了思想、磨练了意志,面对存在的困难首先分析问题根据目的要求确定可实现的部分,定出那不准的方面找同学和老师讨论研究,再完善、再修改、再发现问题、再解决培养了自己的耐心、恒心及遇事不乱的精神。

总之,我们明白了理论和实践之间存在的距离只有靠不断的思考不断的动手才能将所学的知识真正运用到实践上来。

在电子设计中我们很多方面的能力都得到了提高,尤其在单片机软件编程方面让我们感触颇深。

我个人认为软件设计是个即灵活又细腻的工作,它要求耐心和细心去不断完善,同时还需要有良好的逻辑思维能力。

通过这次电子设计,我们分析问题和解决问题的能力有所提高,也巩固了所学的知识,加深了对理论知识的理解,更重要的是锻炼自己的独立性,为我今后的工作和学习打下坚实的基础。

参考文献

[1]李雷等编.《集成电路应用实验》.国防工业出版社2003

[2]李雷等编.《电子技术应用实验教程》.电子科技大学出版社,2006

[3]朱红等编.《电子技术综合实验》.电子科技大学出版社,2005

[4]冯熙昌编.《电子电话机集成电路手册》.人民邮电出版社,1996

[5]胡汉才编.《单片机原理及其接口技术》.清华大学出版社,2008

[6]徐惠民,《安德宁等编.单片微型计算机原理接口及应用》.北京邮电大学出版社,2000

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2