测频法和测周法转速测量的课程设计报告.docx

上传人:b****5 文档编号:4806959 上传时间:2022-12-09 格式:DOCX 页数:16 大小:160.27KB
下载 相关 举报
测频法和测周法转速测量的课程设计报告.docx_第1页
第1页 / 共16页
测频法和测周法转速测量的课程设计报告.docx_第2页
第2页 / 共16页
测频法和测周法转速测量的课程设计报告.docx_第3页
第3页 / 共16页
测频法和测周法转速测量的课程设计报告.docx_第4页
第4页 / 共16页
测频法和测周法转速测量的课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

测频法和测周法转速测量的课程设计报告.docx

《测频法和测周法转速测量的课程设计报告.docx》由会员分享,可在线阅读,更多相关《测频法和测周法转速测量的课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。

测频法和测周法转速测量的课程设计报告.docx

测频法和测周法转速测量的课程设计报告

一、任务要求

1.性能要求:

测量范围:

5~5000rpm;

2.功能要求:

采用MCS51系列单片机完成测量,并将测量值显示于数码管上。

分别采用测频法和测周法进行设计,并比较不同速度段的测量精度。

二、方案论证

系统组成:

图1-1系统组成框图

如图1-1所示,本次设计的系统主要由以下几个部分组成,即:

传感器、单片机以及显示部分组成。

各个部分的方案论证如下:

2.1传感器的选择

目前,可用于测速的传感器有很多,例如:

光电传感器,开关型霍尔传感器,电涡流传感器以及光电编码器等。

方案一:

采用光电传感器

光电传感器是通过光电二极管和光敏三极管把光输入信号转化为磁输入信号的器件。

光电传感器的优点是响应速度快、测量精度高,能够直接输出高低电平,缺点是容易受外来光线、灰尘等的影响,即对周围环境的要求比较高。

方案二:

采用开关型霍尔传感器

开关型霍尔传感器是利用霍尔效应把磁输入信号转换成电信号的器件。

开关型霍尔的优点是能够直接输出高低电平,属于大信号传感器,对外部的信号调理电路要求不高,缺点是响应速度不如光电传感器。

方案三:

采用电涡流传感器

电涡流传感器是利用电涡流效应来工作的传感器,具有长期工作稳定性好,抗干扰能力强,但是输出信号比较弱,后续处理电路比较复杂,且一般价格比较高。

在灰尘和粉尘较少而要求频率响应范围比较宽的情况下,可以采用光电传感器。

而在灰尘和粉尘比较多的情况下,则选用开关型霍尔传感器。

由于本次设计主要针对自行车和汽车的测速,故选用开关型霍尔传感器。

2.2显示模块的选择

方案一:

采用LED数码管

LED数码管只可以显示数字和简单的字母,其优点是价格便宜,程序编写比较简单,功耗低,缺点是亮度不高,在要显示数字多的场合下,体积较大,比较占空间。

方案二:

采用LCD1602液晶显示

LCD1602液晶显示模块具有体积小、功耗低,对比度可调且能够显示ASC

码和简单的汉字等优点,其缺点是成本比数码管高,而且程序编写相对复杂。

方案三:

采用LCD12864液晶显示

LCD12864液晶显示屏优点是能够显示汉字,且功耗比较低,其确定是软件编程比较复杂。

2.3测速原理论证

2.3.1测频法原理:

测频法原理图如图1-2所示,即测量一段时间t内,所计的脉冲数为N,则所测得的频率为f=t/N,其“

1误差”为

由此可见,在t一定时,所测频率f越高,则“

1误差”越小。

因此测频法适用于测低频。

图1-2测频法原理图

测周法原理:

测周法原理图如图1-3所示,即对信号的周期T进行测量,然后根据f=1/T就可以得到频率。

在本设计中就是通过对单片机内部时钟脉冲计数得到两个脉冲之间的时间间隔T。

假设单片机内部时钟为

,所计得的脉冲数为N,则时间间隔T=N/

,即频率f=

/N。

其“

1误差”为

由此可知,在时钟脉冲

一定时,所测的时间间隔T越大,即所测频率越低,则“

1误差”越小,精度越高。

图1-3测周法原理图

综上所述,为了提高所设计的测速仪的精度,因此本次设计采用测频法和测周法相结合的方法,即低频时采用测周法,高频时采用测频法。

三、硬件设计

总的原理框图:

图1-4总的硬件原理框图

如图1-4所示,即为整个系统的原理框图,该智能测速仪是利用霍尔传感器来采集信号,当磁粒靠近霍尔传感器时,霍尔传感器向单片机输出一个脉冲,经过单片机的处理,将频率和转速送到LCD1602中显示。

3.1单片机最小系统

图1-5单片机最小系统原理图

单片机的最小系统电路如上图1-5所示,主要由单片机、晶振电路、复位电路三部分组成。

其中晶振电路由一个12MHz的晶体振荡器和两个瓷片电容组成,为单片机提供时钟频率,本次设计采用12M晶振是为了使定时能够更精准,计算更方便。

复位电路由上图中的S1,R3,R4和C1所组成,具有上电复位和按键复位两种复位方式。

由于要使用P0口作为数据传送端,所以需要在P0加上拉电阻。

本次设计选用的单片机是STC89C54RD+。

3.2霍尔传感器电路

图1-6霍尔传感器电路原理图

霍尔传感器电路如上图1-6所示,本次设计选用的霍尔型号为44E开关型霍尔传感器,当小磁粒靠近时,霍尔输出低电平。

图中D2为电源指示灯,D1为小磁粒靠近霍尔的指示灯。

LM393为电压比较器,2脚输入电压为2.5V,此处加个电压比较器使输出信号更稳定,能够输出比较稳定的脉冲信号。

3.3液晶显示模块电路

图1-7液晶显示电路原理图

液晶显示电路如右图所示,其中1脚VSS和2脚VDD为电源地和电源正极,3脚VO是用来调节液晶屏幕显示的对比度的,4脚RS为数据/命令选择端,5脚R/W为读写端,6脚E为使能端,7~14脚的DB0~DB7为数据端,15脚BLA和16脚BLK为背光电源端。

四、软件设计

4.1软件实现功能

软件主要实现功能是完成测频法和测周法的算法实现,并且能够进行自动的根据频率范围进行两种方法之间的转换。

4.2主程序框图

图1-8主程序框图

主程序框图如图

4.3定时器中断程序框图

4.4外部中断程序框图

三、模拟调试部分

5.1模拟装置简介

本次设计所使用的

5,2模拟调试方法

5.3结果

四、小结

6.1实验中所遇到的问题

、在编程时,采用测周法时始终无法得到正确的频率,所显示的频率值始终在4000到5000左右变化,而定时器的计数值(用来计算两个脉冲之间的时间的量)始终只有几百,即时间为几百微秒。

、在实际测量时,发现测得的频率值与实际的频率值相差很大,且相对误差在10%左右,例如实际值为325r/min,而测得值为354r/min,即相对误差为(354-325)/325*100%=8.9%,误差比较大。

、采用测周法时,当频率为0时,其实际显示值不为零,始终停留在之前的值,保持不变。

6.2分析、解决

6.3设计结果评价

 

附录1

 

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitLCD_RS=P2^6;//液晶控制端

sbitLCD_RW=P2^5;

sbitLCD_EP=P2^7;

ucharcodetab1[]={"freq0000Hz"};//液晶第一行默认显示数据

ucharcodetab2[]={"n0000r/min"};//液晶第二行默认显示数据

longspeed_count=0;//计数值

uintfreq=0;//频率值

uintspeed=0;//转速值

uinttimer_count=0;//定时器计数值

uintint_t0_count=0;//M法时外部中断计数值

ucharintt0_count=0;//T法中用来平均的

bitm_flag=1;//M法标志位

bitt_flag=0;//T法标志位

bitfirst_flag=0;//第一个测频值显示的标志

voiddelay(ucharms);//延时子程序

voidinit_interuppt();//定时器0初始化

voidlcd_init();//液晶初始化

voidwrite_1602_wcmd(ucharcom);//液晶写入指令函数

voidwrite_1602_wdat(uchardat);//液晶写入数据函数

voidwrite_speed(ucharaddress,uintdat);//1602写速度值

voidmain()

{

lcd_init();//液晶初始化

init_interuppt();//中断初始化

while

(1)

{

if(first_flag==1)

{

if(freq>1000)//频率大于1000则采用测频法

{

m_flag=1;

t_flag=0;

}

else

{

m_flag=0;

t_flag=1;

}

}

write_speed(0x45,freq);//显示频率值

write_speed(5,speed);//显示转速值

}

}

/******************************************************************/

/*延时函数*/

/******************************************************************/

voiddelay(ucharms)

{

uinti,j;

for(i=ms;i>0;i--)

for(j=150;j>0;j--);

}

/******************************************************************/

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

/******************************************************************/

voidinit_interuppt()

{

TMOD=0x01;//设置为工作方式1,16位计数方式

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

ET0=1;//使能定时器0中断

EX0=1;//使能外部中断

IT0=1;//下降沿触发

EA=1;//使能总中断

TR0=1;//开定时器0中断

}

/******************************************************************/

/*定时器中断函数*/

/******************************************************************/

voidtimer0()interrupt1

{

TH0=(65536-50000)/256;//每50毫秒进一次中断

TL0=(65536-50000)%256;

if(m_flag==1)

{

timer_count++;

if(timer_count==20)//每1秒钟更新一次速度

{

freq=int_t0_count;

speed=freq*10;//频率转换为转速

int_t0_count=0;

timer_count=0;

if(first_flag==0)

first_flag=1;

}

}

if(t_flag==1)

{

timer_count++;

if(timer_count==10)

{

speed=0;

freq=0;

}

}

}

/******************************************************************/

/*外部中断函数*/

/******************************************************************/

voidint_t0()interrupt0

{

if(m_flag==1)

{

int_t0_count++;

}

if(t_flag==1)

{

intt0_count++;

speed_count+=TH0*256+TL0+timer_count*65536;

if(intt0_count==2)

{

freq=(unsignedint)(2000000.0/(speed_count));

speed=(unsignedint)(2000000.0/(speed_count)*10);

speed_count=0;

intt0_count=0;

}

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

timer_count=0;

}

}

/******************************************************************/

/*LCD初始化设定*/

/******************************************************************/

voidlcd_init()

{

uchari;

write_1602_wcmd(0x38);//16*2显示,5*7点阵,8位数据

write_1602_wcmd(0x0c);//显示开,关光标

write_1602_wcmd(0x06);//移动光标

write_1602_wcmd(0x01);//清除LCD的显示内容

write_1602_wcmd(0x82);//第一行字符写入的位置

for(i=0;i<13;i++)

write_1602_wdat(tab2[i]);

write_1602_wcmd(0xc0);

for(i=0;i<12;i++)

write_1602_wdat(tab1[i]);

}

/******************************************************************/

/*写指令到LCD*/

/******************************************************************/

voidwrite_1602_wcmd(ucharcom)

{

LCD_RS=0;//置为写入命令,低为写指令

LCD_RW=0;

P0=com;//送入数据

delay

(1);

LCD_EP=1;//拉高使能端

delay

(1);

LCD_EP=0;//完成高脉冲,传入数据到LCD

}

/******************************************************************/

/*写数据到LCD*/

/******************************************************************/

voidwrite_1602_wdat(uchardat)

{

LCD_RS=1;//置为写入数据,高为写数据

LCD_RW=0;

P0=dat;//送入数据

delay

(1);

LCD_EP=1;//拉高使能端

delay

(1);

LCD_EP=0;//完成高脉冲,传入数据到LCD

}

/******************************************************************/

/*写速度值到LCD*/

/******************************************************************/

voidwrite_speed(ucharaddress,uintdat)

{

uchargw,sw,bw,qw;

qw=dat/1000;

bw=dat%1000/100;

sw=dat%1000%100/10;//分出十位数据

gw=dat%1000%100%10;//分出个位数据

write_1602_wcmd(0x80+address);//在第二行对应位置显示

write_1602_wdat(0x30+qw);

write_1602_wdat(0x30+bw);

write_1602_wdat(0x30+sw);

write_1602_wdat(0x30+gw);

}

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

当前位置:首页 > 高中教育 > 其它课程

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

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