首页 分享 NE555模块与频率测量

NE555模块与频率测量

来源:花匠小妙招 时间:2025-02-20 18:09

                                                NE555模块

NE555模块简介:

NE555内部结构及应用电路 - 百度文库  这是NE555分析比较详细的一篇文章,可以仔细看一下,当然蓝桥杯要求没有那么严格,总归来说蓝桥杯的设计就是将它作为了一个可变频率脉冲发生器,不过,NE555对以后的帮助很大 还是需要认真学习的。本篇文章就只是解决设计到蓝桥杯CT107D板子上的NE555电路做出分析,和代码设计分析。

下面来看一下蓝桥杯板子上NE555模块

 蓝桥杯这个NE555频率发生计其实设计的挺鸡肋的,和我之前在数电书上看到的都不太一样,为了便于分析,我们先来看一下NE555模块的内部结构图

蓝桥杯板子上NE555原理

 NE555是因为它内部三个电阻为5k的电阻而命名的,其实根据原理来说只要是三个电阻一样的都可以用,比如内部为三个6k的电阻,不过早期的设计出来的时候就用的是5k,所以名字也就没有变过。首先来看一下基本原理,蓝桥杯板子上,26脚相接,5脚接电容后接地,4脚和8脚接VCC,3脚接一个滑动变阻器后再加一个100Ω的电阻接到26脚上,7脚悬空。好了看了连接后,我们来看一下原理,(注意测量的时候是板子上右边排针SIGNAL和P34两个用跳帽相连)单片机启动后,3脚为高电平,通过滑动变阻器和固定电阻来给电容C14充电,当充电电压大于2/3VCC时,Vc1为0,Vc2为1,这时Q为0,G3为1,G4为0,输出V0也为0即低电平,这个时候C14通过滑动变阻器和固定电阻来放电,当其电压低于1/3VCC的时候,Vc1为1,Vc2位0,Q为1,G3为0,G4为1,输出V0为1即为高电平,这个时候C14又来进行充电,以此往复,形成脉冲,可以得出这是一个频率可变,而占空比不变的振荡信号。

那么可变频率的范围是多少呢?这个频率的改变是通过滑动变阻器Rb3来改变的,通过改变充电和放电的总时间而改变周期从而改变频率,最小频率对应为最大周期,是滑动变阻器和固定电阻和和最大的时候产生的即50100Ω,最大频率也就是为100Ω,因为我计算出来始终和正确值有所偏差,所以,我直接进行了测量,这是很准确的范围。看图

最低为57HZ左右

 最高为24kHZ左右

 这里知道了范围大家也没必要去算了,测出来后对照一下就知道是不是正确的了。关于官方说的

频率范围为500-20K我还是保持怀疑的,毕竟是测过的,我想官方的这个题的意思应该是,用500Hz-20KHZ作为标准来检验吧。

 NE555代码分析

说完了这个我们来说一下代码具体如何去测量,既然我们是计算频率,那么我们能够通过测量周期然后换算为频率,毕竟我们是能够在时域上去下功夫,频域上我们都是通过换算得到的。

我们先来看一下P34的管脚功能有哪些

 从这我们可以看出P34有4个功能,第一 :普通IO口、第二 :作为T0定时器/计数器的外部输入,第三  :作为T1时钟输出(可分频)、第四 :作为PCA模块的计数器外部脉冲输入脚。这里面一眼看去只有2功能和4功能可以使用,其中的原理也都差不多,不过值得注意的是,P34作为PCA输入,是需要初始化切换的,因为它不是默认的输入脚

 所以我们还是用定时器0来的方便些,而配置思路也比较清晰,让T0工作在计数模式下,而计数的引脚就是我们的P34,进行频率测量的时候,将定时器计时初值设为0,然后利用另外一个定时器来限定时间在1S或者几秒内,在规定时间完后,停止计数,将定时器0的值取出来,看有多少个脉冲,然后用总脉冲量/总时间,得出的即为脉冲的周期。

继续更-----2020/3/1

更一下程序方面怎么写

文章写得很明白了。NE555是没有驱动程序的,总结一下就是NE555是一个模块,它提供了一个脉冲的接口,就是P34接口,当然,这个接口不是默认连接的,需要将跳帽连接板子最右边那列排针的signal和P34,这样就连接好了。然后先将定时器0作为计时器输入

//定时器0用作测量频率(计数模式)

void Timer0Init(void)

{

    AUXR |= 0x80;

 TMOD |= 0x05;    

    TL0 = 0x00;        

    TH0 = 0x00;        

    TF0 = 0;

    TR0 = 0;

    ET0 = 0;

}

然后定时器1设一个1s的定时

(1)

//定时器1

void Timer1Init(void)        

{

    AUXR |= 0x40;        

    TMOD &= 0x0F;        

    TL1 = 0x40;        

    TH1 = 0xA2;        

    TF1 = 0;        

    TR1 = 1;        

    ET1 = 1;

}

因为我的数码管显示用的定时器扫描,用了一个2ms的定时器1,要1s钟直接在里面设一个500的判断就行了,因为如果只用1s钟取出来的数据就可能误差很大,所以我时间设置为2s钟,即为1000,然后取出总脉冲数x,所以频率为x/2(注意脉冲频率是1s钟有多少个脉冲,如果1s中取出x个脉冲,则频率就为x,如果是2s取出x,则频率就为x/2)

void Timer1Handle(void) interrupt 3

{

if(GlobalState == STATE_FREQMEASURE)  

    {

if(AllTime == 0)          

        {

            TR0 = 1;                

            AllTime++;

        }

else if(AllTime < 1000)  

        {

            AllTime++;

        }

else                    

        {

            AllTime = 0;            

            TR0 = 0;                

            FreqCnt = (((uint)TH0 << 8) |(uint)TL0)/2;

            TH0 = 0;                

            TL0 = 0;

        }

这里我为了方便就将有些处理写在了定时器里面,其实最好是不要写在定时器里面的,里面只用给计时,然后到时间了给标志,最后在主循环while(1)中去处理。最后将脉冲频率用串口或者数码管显示出来就行了。

有什么问题欢迎咨询哦!

相关知识

NE555模块与频率测量
555定时器频率计算器
盆花的自动浇水系统的设计与实现开题报告.doc
MQ135空气质量传感器原理图与模块资料解析
EMS62包裹式植物茎流(液流)测量系统
光照强度传感器模块
使用BH1750测量激光发射器的强度
螺纹测量解决方案
arduino测量土壤湿度自动浇水提醒
土壤墒情测量设备:有效调控土壤湿度&2024简介

网址: NE555模块与频率测量 https://www.huajiangbk.com/newsview1681209.html

所属分类:花卉
上一篇: 《硬件相关》AD18快速放置引脚
下一篇: 配合物的组成和命名配合物的价键理

推荐分享