您当前的位置:首页 > 公司动态

单片机-一个简单频率测量

时间:2015-03-09  来源:扁平线圈电感厂家  点击:

单位由一个信号源的项目,其中由一个功能,即实现一个方波信号频率的测量。实际情况中,信号的频率一般在15-25Hz。占空比在10%-90%之间。可以说频率非常低。因为单位使用STC89C54的时间比较长,所以单位要求使用该单片机。这个项目非常简单。因为时间很久了,所以我稍微回忆一下。

电路图逻辑上是这样的:

我将信号经过比例缩小跟随后直接接到INT0管脚。具体想法是这样的,设定一个10uM的定时器计时。每两秒中作为一个测量周期。方波最会有下跳沿的,每一下跳沿作为一个周期的开始。两秒计时结束后查看一共采集到K个下跳沿。那么该方波的周期就是电感厂家T=2/K秒。频率f=K/2。

有一个同事提供了频率测量的思路。在三秒中时间范围内统计INT0下跳沿出现的个数,即可统计出方波脉冲的频率。因为下跳沿会触发外部中断,所以只需统计程序进入中断程序的次数。我们来看看代码实现的方法。

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

//定时器初始化

//每1毫秒中断一次

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

#define SYS_CLK 12000000L

#define TIME0_LOAD -(SYS_CLK/12/1000)

typedef struct FREQ

{

unsigned char start;

unsigned int timer;

unsigned int int_Count;

unsigned int T;

}FREQ;

FREQ freq={0,0};

void Timer0_Init( )

{

TMOD = TMOD 工字电感| 0x01;

TH0 = TIME0_LOAD>>8;

TL0 = TIME0_LOAD&0x00FF;

EA =1;

ET0 =1;

TR0 =1;

}

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

//定时器串口中断程序

/***********************大功率电感贴片电感器**************/

void Timer0_isr( ) interrupt 1

{

TH0 = TIME0_LOAD>>8;

TL0 = TIME0_LOAD & 0x00FF;

if(freq.start)

{

freq.timer++;

}

else

{

freq.timer=0;

}

}

void exint0_init( )

{

IT0 =1; //下降沿产生中断

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

EA =1; //使能全局中断

}

void exint0( ) interrupt 0

{

if(freq.start)

{

freq.int_Count++; //开始统计下跳沿

}

else

{

绕行电感freq.int_Count=0;

}

}

广州电感厂

void main( )

{

Timer0_Init( );

exint0_init( );

freq.start=1;

while(1)

{

if(freq.timer>=3000)

{

freq.T=freq.timer/freq.int_Count;

freq.int_Count=0;

freq.timer=0;

display_freq( ); //显示周期的值

}

}

}

以上是该项目部分代码,主要可以看看定时器和外部中断的使用方法。

大电流电感

电感详解及设计规范磁性元件的设计是开关电源设计中的重点和难点,究其原因是磁性元件属非标准件,其设计时需考虑的设计参数众多,工艺问题也较为突出,分布参数复杂。为帮助硬件工程师尽快了解磁性元

一文搞懂输入阻抗和输出阻抗阻抗匹配(impedance matching)是指信号传输过程中负载阻抗和信源内阻抗之间的特定配合关系。一件器材的输出阻抗和所连接的负载阻抗之间所应满足的某种关系,以免接上负载后对器

电子罗盘在车载卫星天线寻星解决方案

注塑加工厂


上一篇基于嵌入式Linux下串口应用编程的研究

下一篇基于实验系统采用电路可动态重组的设计方案


  
  温馨提示
网站首页 | 产品展示 | 科技前沿 | 行业资讯
本公司专业研发、设计、生产、销售贴片电感、插件电感、功率电感、大电流电感、扁平线圈电感、一体成型电感。
专业电感生产制造商,品质优异、交期快。
在线客服
热线电话