做网站要坚持,阳江市商品房备案查询,响应式网站和,wordpress阿里云图片不显示文章目录 简介设计思路工作原理Proteus软件仿真软件程序实验现象测量误差和范围总结 简介
数字频率计是能实现对周期性变化信号频率测量的仪器。传统的频率计通常是用很多的逻辑电路和时序电路来实现的#xff0c;这种电路一般运行较慢#xff0c;而且测量频率的范围较小。这… 文章目录 简介设计思路工作原理Proteus软件仿真软件程序实验现象测量误差和范围总结 简介
数字频率计是能实现对周期性变化信号频率测量的仪器。传统的频率计通常是用很多的逻辑电路和时序电路来实现的这种电路一般运行较慢而且测量频率的范围较小。这篇文章介绍以单片机STC89C52为核心通过对输入的脉冲进行计数运用单片机的运算和控制功能并采用数码管将所测频率显示出来。软件方面采用C语言编程运用定时计数器测量频率再调显示函数将测得的结果显示在数码管上。系统简单可靠、操作简易能基本满足一般情况下的需要。既保证了系统的测频精度又使系统具有较好的实时性。
设计思路
本次设计主要分成两大方面硬件电路的设计和软件程序的设计。硬件电路方面采用STC89C52单片机最小系统便可实现要求。程序的设计方面采用C语言编写程序。其整体框图如图1所示
工作原理
此数字频率计是利用单片机的P3.4(T0)引脚作为被测矩形波信号输入端且单片机晶振FOSC12MHZ当外部脉冲信号即被测矩形波信号从P3.4进入单片机同时启动定时器T0和计数器T1T0是工作在计数状态下对输入的频率信号进行计数工作在计数状态下的T0的最大计数值为65535则T0的最大计数频率为65535HzT1是工作在定时状态下每定时1秒就停止T1的计数而从T1的计数单元中读取的计数值在进行数据处理后送到数码显示管显示出来因为T1工作在定时状态下的最大定时时间为65ms达不到1秒的定时所以采用50ms共定时20次即可完成1秒的定时功能。
Proteus软件仿真
如图所示是在proteus软件数字频率计的仿真。 将要测量的脉冲输入单片机的P3.4引脚。
软件程序 #include reg52.h
sbit L1 P1^0;
sbit S1 P3^2;
unsigned char code SMG_duanma[18]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
unsigned char count 0;unsigned int frequency 0;
unsigned char start1;
unsigned char flag 0;
void InitTimer()
{TMOD 0x15; //T1定时T0计数TH1 (65535 - 50000) / 256;TL1 (65535 - 50000) % 256;TH0 0x00;TL0 0x00;ET1 1;ET0 1;EA 1;TR1 1;TR0 1;}unsigned int i 0;
void ServiceTimer1() interrupt 3
{TH1 (65535 - 50000) / 256;TL1 (65535 - 50000) % 256;i; if(i20){i 0;TR00; //停止计数TR10; //停止定时frequency(TH0*256TL0); //求出频率值 就是1秒内脉冲次数TH00x00; //计数值清零TL00x00;TH1 (65535 - 50000) / 256;TL1 (65535 - 50000) % 256;start1; //启动定时器开启变量}
}void Init_INT0()
{IT0 1;EX0 1;EA 1;
}void ServiceINT0() interrupt 0
{ if(flag 0){ frequency 0;}if(flag!0)frequency;flag 1;}void DisplaySMG_Bit(unsigned char value, unsigned char pos)
{P0 0xff;P2 0x01 pos; P0 value;
}void DelaySMG(unsigned int t)
{while(t--);
}void Display_Dynamic()
{DisplaySMG_Bit(SMG_duanma[frequency/100000],0); DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%100000/10000],1); DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%10000/1000],2); DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%1000/100],3); DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%100/10],4); DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%100%10],5); DelaySMG(500);}void Delay(unsigned char t)
{while(t--){Display_Dynamic();}
}void DelayK(unsigned char t)
{while(t--);
}void ScanKeys_Alone()
{if(S1 0){DelayK(100);if(S1 0){TR00; //停止计数TR10; //停止定时if(flag 0){frequency 0;}if(flag!0)frequency;flag 1;while(!S1);}}
}
void main()
{ InitTimer();Init_INT0();while(1){ ScanKeys_Alone();if(start1){TR01; //启动定时器TR11; //启动计数器start0; //关闭启动变量位 保证1秒时间}Display_Dynamic();Delay(200);if(flag 1) {start 0;}}
}实验现象
双击器件DCLOCK对外部输入矩形脉冲的频率进行设置 50hz 100hz 500hz 1000hz
测量误差和范围
当测频时启动定时计数器时若从T0P3.4输入矩形波刚好为高电平而当1s定时到时刚好为高电平时此时测得的频率值最准确。若启动定时计数器时输入的矩形波刚好处于低电平而当定时1s到时矩形波刚好要发生负跳变时此时测得的频率误差最大。定时计数器的工作方式选择与初值的赋予不一定精准容易引起误差。定时计数器的工作方式选择不同最后的结果也会有所差异。工作方式2相比于工作方式0和工作方式1误差更小。其次采用中断或查询的方式也会影响实验结果。采用查询方式的误差比采用中断误差更小。
电子计数器测频法主要是将被测频率信号加到计数器的计数输入端然后让计数器在标准时间 Ts1 内进行计数所得的计数值 N1。与被测信号的频率 fx1 的关系如下 主要误差源是由于计数器只能进行整数计数而引起的±1 误差 工作在计数状态下的16位计数器T0的最大计数值为65535理论上可以测的频率范围是0-65535hz实际仿真测试最大为65.5KHz测量显示值为65530hz误差为0.04% 经过测试在一定误差允许和测量范围内数字频率计可以正常工作。下图是基于上述方案的数字频率计原理图设计参考。可实现下面功能 1将外部矩形脉冲输入T0引脚即将外部输入脉冲用导线连接到P3.4引脚可以做外部脉冲输入数字频率计。 2扩展功能当按下按键停止对外部矩形脉冲计数改为单脉冲计数。当按下一次按键计数值加1并显示到数码管上。(PSLED可作为其它功能扩展使用)。 总结
频率的测量可以采用数字逻辑电路来实现也可以采用单片机进行控制。前者不仅实现的电路复杂而且测量频率的范围较小而利用单片机的定时器可以很方便的进行信号频率的测量只需要在电脑上编写程序然后在相应的显示电路进行显示就可以了可以使用STC89C51单片机的定时器、计数器的定时和计数功能外部扩展6位LED数码管累计每秒进入单片机的外部脉冲个数用LED数码管显示出来实现基于单片机数字频率计的制作。