本届赛题的难点就在于NE555频率的测量。
目录
NE555定时器的概述:
在NE555内部,有3个5K的电阻分压,故称555定时器。
555定时器的基本原理:
低电平触发端TRIG和高电平触发端THR:
两者电压均小于各自的参考电压时,U0=1,放电管截至。
两者电压均大于各自的参考电压时,U0=0,放电管导通。
NE555是一个纯硬件的设计,一旦硬件电路确定了,其功能也确定了,没有可编程的部分。
在蓝桥杯的板子上,555定时器是一个信号发生电路,通过电位器Rb3可改变输出信号的频率。
以上来源:B站小蜜蜂老师
信号输出的频率放在了P34引脚,而P34引脚恰好对应着定时器0的计数信号输入引脚。
NE555周期、频率的测量:
需要两个定时器:一个定时器0来计数,计数P34引脚外面有多少脉冲信号;再用另一个定时器来实现计时功能(定时1秒,检测1秒内的周期)
频率方波图
测量周期方法:红色代表正周期(高电平 1),蓝色代表反周期(低电平 0)。测量正反周期就知道了整个周期的时间。
(1)规定多长的检测时间进入周期来分别检测正负周期的时长?
这个时间一定要比最小的周期短,否则就不会准确的分别检测到正负周期的时长
理论上来说:进行检测的时间=2倍 最高频率的周期 (至少)
在说明书中,NE555频率在200HZ—20KHZ之间,所以我们检测的时间就是40KHZ的周期,t=1/40000=0.000025秒=25微秒。也就是每25微秒检测一次。
以上是理论值,这个板子我们最低可以用5微秒的定时器0来进行检测。(这样检测会更加的精确)
(2)测量周期:
① zheng_now=0
flag由0变为1
反周期时间增加,fan++
② 正周期时间增加,zheng++
flag由1变为0
fan_now=fan
③ 反周期时间增加,fan++,一直加到图中绿点处
这一段的反周期的时间会等到下进入正周期的时候赋给fan_now
flag由0变为1
zheng_now=zheng;
这样反周期的时间就是fan_how,正周期的时间就是zheng_now
这样无论如何我们对于正反周期的数据测量都是从一个完整的周期开始的。
程序:
void timer0() interrupt 1
{
if(P34==0)//P34输出低电平
{
fan++;
if(t_flag==0)
{
t_flag=1;
zheng_now=zheng;
zheng=0;
}
}
else if(P34==1)//P34输出高电平
{
zheng++;
if(t_flag==1)
{
t_flag=0;
fan_now=fan;
fan=0;
}
}
}
(3)规定的检测时间多长才能检测出一整个周期?
这个时间一定比最长周期长,来确保能够完整地测量出一整个NE555信号的周期.
最低频率:200HZ,周期为5毫秒。以上只是理论值,实际情况下,最低频率可以达到100HZ,周期为10毫秒。(我们可以适当延长这个时间)所以我们可以规定使用30毫秒,也就是说每一秒钟内,花30毫秒的时间来进行周期的采集。
用1毫秒定时器1,每一秒钟进行 采集一次,采集时间为30毫秒。
在中断1中写30毫秒采集一次周期的程序:在一秒钟之内,到了969毫秒,开启定时器0;到999毫秒的时候关闭定时器0,读取周期数据。
注意:在stc软件上复制过来的时候,要把定时器1的开始计时注释掉。我们用的时候再打开。
程序:
void timer1() interrupt 3
{
intr++;
if(intr==969)//开始进行采集
{
TR0=1;ET0=1;//开启计时和中断
}
else if(intr==999)//采集完毕
{
intr=0;
TR0=0;ET0=0;
time=(fan_now+zheng_now)*5;
frep=1000000/time;
}
}
这样周期和频率就测量完毕了。