MSPF测频法测量信频率
测频率的方法
测频率的方法在科学研究和工程实践中,测量频率是一项非常重要的工作。
频率是指单位时间内某一周期性事件发生的次数,通常以赫兹(Hz)为单位。
测量频率的方法有很多种,下面将介绍几种常用的方法。
首先,最常见的测量频率的方法是使用频率计。
频率计是一种专门用于测量频率的仪器,它可以直接显示待测信号的频率值。
频率计的工作原理是利用输入信号的周期性特征,通过计数或者计时的方式来得到信号的频率。
频率计可以分为数字频率计和模拟频率计两种类型,数字频率计通常具有更高的精度和稳定性,而模拟频率计则更适合于一些特定的应用场景。
其次,除了使用频率计外,还可以通过频谱分析仪来测量频率。
频谱分析仪是一种能够将信号的频率分布情况显示在频谱图上的仪器,通过观察频谱图可以直观地得到信号的频率信息。
频谱分析仪通常可以提供更加详细和全面的频率分布信息,对于复杂信号的分析更加有效。
另外,对于周期性信号,还可以使用示波器来测量频率。
示波器是一种能够显示信号波形的仪器,通过观察信号的周期性波形,可以得到信号的周期,从而计算出频率。
示波器通常能够提供更加直观的波形显示,对于频率的初步估计和观测非常有帮助。
除了上述几种常用的方法外,还有一些其他的测频率方法,比如利用计数器进行频率测量、使用锁相环进行频率跟踪等。
不同的方法适用于不同的应用场景,选择合适的方法可以提高测量的准确性和效率。
总的来说,测量频率是一项非常重要的工作,在实际应用中有很多种方法可以选择。
选择合适的方法需要根据具体的测量要求和条件来进行,同时也需要结合实际经验和技术水平来进行判断。
希望本文介绍的几种方法能够对大家有所帮助,同时也希望大家在实际工作中能够根据具体情况选择合适的方法进行频率测量。
STM32F103频率测量方法
频率测量可以用测周法和测频法:1.测周法:通过一个方波的两个上升沿或下降沿触发中断,然后定时器计数,计数的总个数乘以计数单位时间即该方波的周期。
实际程序如下:void TIM3_Encoder_IN_Init(u16 arr,u16 psc){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟配置RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin= GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Prescaler=psc; //TIM时钟频率100kHz,10us//56M//24M//TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD-1; //ENCODER_TIM_PERIOD=(u16)(65000)TIM_TimeBaseStructure.TIM_Period=arr; //测频范围在1.6Hz到100kHzTIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //计数模式向上TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//定时器初始化//通道1TIM_ICInitStructure.TIM_Channel =TIM_Channel_1; //通道选择TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿触发TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //管脚与寄存器对应关系TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //输入预分频。
使用频率计测量频率的技巧
使用频率计测量频率的技巧在现代科技高度发达的时代,频率计已经成为各行各业中不可或缺的工具。
频率计的作用是测量信号的频率,从而帮助我们更好地了解和控制信号的特性。
然而,频率计的使用并不是一件简单的事情,需要掌握一些技巧才能正确地进行测量。
在本文中,我将介绍一些使用频率计测量频率的技巧,希望对读者有所帮助。
首先,我们需要了解频率计的基本原理。
频率计通常是通过计算信号周期的倒数来得到频率的。
在测量之前,我们需要确保信号的波形是稳定和规律的。
如果信号波形不稳定,测量结果可能会出现较大的误差。
因此,在测量之前,我们应该先观察信号的波形,确保其稳定性。
其次,我们需要选择适当的测量范围。
频率计通常有多个测量范围可供选择,我们需要根据信号的频率范围来选择合适的测量范围。
如果选择的测量范围过大,可能会导致测量精度降低;如果选择的测量范围过小,可能会导致测量结果超出范围。
因此,在选择测量范围时,我们需要根据实际情况进行合理的选择。
另外,我们还需要注意信号的幅度。
频率计通常是通过检测信号的上升沿或下降沿来计算信号周期的。
如果信号的幅度过小,可能会导致频率计无法正确地检测到信号的沿。
因此,在测量之前,我们需要确保信号的幅度足够大,以保证测量的准确性。
此外,我们还需要注意信号的噪声。
噪声是指信号中的随机干扰,可能会对测量结果产生影响。
为了减小噪声对测量的影响,我们可以采取一些方法,如增加信号的采样点数、使用滤波器等。
通过这些方法,我们可以提高测量的精度,减小测量误差。
最后,我们需要注意频率计的校准。
频率计在使用一段时间后,可能会出现测量误差的情况。
为了保证测量的准确性,我们需要定期对频率计进行校准。
校准的方法可以是使用标准信号进行比对,或者使用校准仪器进行校准。
通过校准,我们可以及时发现并纠正频率计的测量误差,保证测量结果的准确性。
总结起来,使用频率计测量频率需要掌握一些技巧。
我们需要了解频率计的基本原理,选择适当的测量范围,注意信号的波形、幅度和噪声,以及定期对频率计进行校准。
MPF测周法测量信频率完整版
M P F测周法测量信频率HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】M S P430F5529测量频率-----测周法信号变换电路过零比较器,lm393输出上拉电阻,两电阻分压程序#include <>#include ""#include ""//测周法,在捕获过程中,定时溢出不能被检测出,选择时钟频率为低频时能测出低频,频率高能测出频率高的部分/***/long long start=0;//long long int stop=0;double fre=;unsigned char i=0;unsigned char over=0;void SetVcoreUp (unsigned int level){// Open PMM registers for writePMMCTL0_H = PMMPW_H;// Set SVS/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;// Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;// Wait till SVM is settledwhile ((PMMIFG & SVSMLDLYIFG) == 0);// Clear already set flagsPMMIFG &= ~(SVMLVLRIFG + SVMLIFG);// Set VCore to new levelPMMCTL0_L = PMMCOREV0 * level;// Wait till new level reachedif ((PMMIFG & SVMLIFG))while ((PMMIFG & SVMLVLRIFG) == 0);// Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;// Lock PMM registers for write accessPMMCTL0_H = 0x00;}void init_clock(){SetVcoreUp (0x01);SetVcoreUp (0x02);SetVcoreUp (0x03);UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFO__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7; // Select DCO range50MHz operationUCSCTL2 = FLLD_0 + 609; // Set DCO Multiplierfor 25MHz// (N + 1) * FLLRef = Fdco// (762 + 1) * 32768 = 25MHz// Set FLL Div = fDCOCLK/2__bic_SR_register(SCG0); // Enable the FLLcontrol loop__delay_cycles(782000);do{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flagsSFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag}void send_char(char sc){UCA0TXBUF=sc;while(!(UCA0IFG&UCTXIFG));}void send_string(char *s){while(*s!='\0'){send_char(*s++);}}init_uart(){P3SEL |= BIT3+BIT4; // ,4 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSWRST; // **Put state machine in reset**UCA0CTL1 |= UCSSEL__SMCLK; // SMCLKUCA0BR0 = 173; // 1MHz 115200 (seeUser's Guide)UCA0BR1 = 0; // 1MHz 115200UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**UCA0IE |= UCRXIE; // Enable USCI_A0 RX interruptsend_string("CLS(0);\r\n");}int main(void) {char buf[60]="\0";WDTCTL = WDTPW + WDTHOLD; // Stop WDTinit_clock();init_uart();P1DIR &= ~BIT2; // inP1SEL |= BIT2; //捕获输入TA0CTL = TASSEL_2 +ID__8 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。
TMS320F28335在电网频率测量中的应用
TMS320F28335在电网频率测量中的应用本文提出了一种基于TMS320F28335 的频率测量方法,用于监测电力系统的电能质量。
该方法采用DSP 的eCAP 模块和通用定时器对输入信号的上升沿进行捕捉,通过记录两个上升沿的触发时间得到输入信号的频率。
与软件测频方法相比,其硬件电路简单,可靠性高、实时性好。
理论分析和实验测试表明,该方法测频精度高,很好的满足了电能质量监测装置的要求。
引言:频率是衡量电能质量的重要指标,也是判断电力系统故障的重要依据。
一般情况下,电力系统的频率会随着负荷的波动而有所变化。
在正常情况下电网频率变化缓慢,即使发生系统事故,在很短的时间内( 如一个工频周期) 电网频率的变化量也是较小的。
频率测量若能不断实时地测量电网频率,所测量的频率误差可减小到很小的程度。
数字频率的测量方法主要有: ( 1) 测量电压波形某一整数周波的时间,从而计算频率; ( 2) 利用波形识别或曲线拟合技术来估算频率。
后一种方法不能很好的抑制谐波分量,计算量偏大,要对每一周波都进行一次计算,将会占用过多的处理器时间,其不能兼顾计算精度与实时性。
而前者的测量精度受电压过零点的影响较大。
本文提出通过过零检测电路将电网基波整型成方波,用TMS320F28335( DSP) 的捕捉模块对方波上升沿进行捕捉的频率测量方法,在一定程度上抑制了电压过零点的影响,有很好的测量精度和实时性。
1 通用定时器与捕捉模块TMS320F28335 是指令周期为6. 67 ns。
主频达150 MHz; 高性能的32 位CPU , 单精度浮点运算单元( FPU ) , 采用哈佛流水线结构,能够快速执行中断响应。
并具有统一的内存管理模式。
本文提出的测频方法主要应用TMS320F28335 中的捕获单元( eCAP) 和通用定时器( GPT ) 单元。
1. 1 通用定时器通用定时器是TMS320F28335 常用的PIE 接口,其核心是计数器, 32 位计数。
基于MSP430F149的频率计的设计
基于MSP430F149的频率计的设计/***本例程是利用定时器A的捕获功能,从P1.2引脚捕获被测量信号的上升沿,从而计算出其频率值,并显示在1602液晶屏上。
测量的频率范围为1Hz~100kHz,若频率在1KHz 以下,以Hz为单位显示整数部分,若频率大于1KHz,显示2位小数***/#include "msp430x14x.h"#include "LCD1602.c"unsigned int old_cap=0;//捕获的旧值unsigned long int period=0;//信号周期unsigned char TA_ov_num=0;//定时器计数溢出次数/*****系统时钟配置****/void init_MCLK(){ uchar i;WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗BCSCTL1&=~ XT2OFF; //msp430f149 选择XT2频率,一般为8MHz do//do这个循环不能删除,否则下载到硬件电路上没法实现测温功能{IFG1 &= ~OFIFG; //清除晶振失败标志for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振}while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?BCSCTL2 |= (SELM_2 + DIVM_0 + SELS+DIVS_0); // SMCK=MCLK=8MHz}/*********//****捕获方式设置****/void cap_init(){P1SEL|=BIT2; // 设置P1.2为第二功能引脚TA1P1DIR&=~BIT2; // 设置P1.2为输入引脚TACTL = TASSEL_2 + MC_2+ID_3+TAIE; //计数时钟为1MHz,计数方式为连续计数CCTL1 |= CAP+CM_1 + SCS + CCIS_0+ CCIE;// 上升沿捕获,同步,CCI0A(P1.2信号源),捕获功能,中断允许TACCR1=0;}/****频率计算及显示****/void display_freq(){uchar lcdbuf[8];unsigned long temp;temp=period;if(temp>1000)//表示频率小于1KHz{temp=1000000/temp;//定时器的计数时钟为1MHz,且以Hz为单位只显示整数部分lcdbuf[0]=temp/100+0x30;lcdbuf[1]=(temp%100)/10+0x30;lcdbuf[2]=temp%10+0x30;lcdbuf[3]='H';lcdbuf[4]='z';lcdbuf[5]=' ';lcdbuf[6]=' ';lcdbuf[7]=' ';if(lcdbuf[0]==0x30){if(lcdbuf[1]==0x30)LCD_Write_String(5,2,&lcdbuf[2]);elseLCD_Write_String(5,2,&lcdbuf[1]);}elseLCD_Write_String(5,2,&lcdbuf[0]);}else//表示频率大于1KHz{temp=10000/temp;//定时器的计数时钟为1MHz,以KHz为单位显示,且显示2位小数//1000/period再扩大10倍以显示小数lcdbuf[0]=temp/1000+0x30;lcdbuf[1]=(temp%1000)/100+0x30;lcdbuf[2]=(temp%1000)%100/10+0x30;lcdbuf[3]='.';lcdbuf[4]=(temp%1000)%10+0x30;;lcdbuf[5]='K';lcdbuf[6]='H';lcdbuf[7]='z';if(lcdbuf[0]==0x30){if(lcdbuf[1]==0x30){LCD_Write_String(5,2,&lcdbuf[2]);LCD_Write_String(11,2," ");}else{LCD_Write_String(5,2,&lcdbuf[1]);LCD_Write_String(12,2," ");}}elseLCD_Write_String(5,2,&lcdbuf[0]);}}/****主程序*******/void main(void){volatile unsigned int i;init_MCLK();//初始化系统时钟for (i=0; i<20000; i++); // 延时等待晶振稳定cap_init();//捕获初始化_EINT(); // 开总中断LCD_Init();//液晶初始化LCD_Write_String(0,1,"freq:");//从第一行第0列开始显示while(1){display_freq();//脉宽计算及显示}}#pragma vector=TIMERA1_VECTOR//捕获中断子程序__interrupt void TimerA1(void){switch(TAIV){case 2://比较/捕获模块1中断period=TA_ov_num*65536+TACCR1-old_cap;old_cap=TACCR1;TA_ov_num=0;break;case 4:break;//比较/捕获模块2中断未用case 10:TA_ov_num++;break;}}。
单片机测量信号频率的方法
单片机测量信号频率的方法
1.基于定时器的频率测量方法:
这是最常见的测量信号频率的方法之一、单片机内部的定时器可以作为频率计数器,通过设定定时器的预定数值,开始计数,当计数溢出时,说明已经计满一个周期,从而可以根据溢出的次数计算出信号的频率。
2.基于输入捕获的频率测量方法:
这种方法是通过输入捕获功能来测量信号频率。
单片机的输入捕获功能可以用于捕获外部信号的上升沿或下降沿,并记录下捕获到的时间。
通过连续捕获两个上升沿或下降沿之间的时间差,可以计算出信号的周期,从而获得信号的频率。
3.基于计数器的频率测量方法:
这种方法一般用于高频信号的测量。
通过将信号输入到单片机的一个计数器引脚,设置计数器在一定时间内累加该信号的脉冲数,然后通过计算脉冲数与时间的比值来获得信号的频率。
4.基于软件延时的频率测量方法:
这种方法适用于信号频率较低的情况。
通过在程序中使用软件延时的方式来计算指定时间内信号的脉冲数,并通过脉冲数与时间的比值来计算信号的频率。
需要注意的是,测量信号频率还需要考虑到一些细节问题,例如时钟的精度、测量时间的长度以及测量结果的误差等。
在实际应用中,还需要结合具体需求来选择合适的测量方法和相应的参数设置。
同时,根据不同的单片机型号和功能,可能还有其他特定的测量频率的方法,因此在实际应用中,需要根据具体的单片机型号和数据手册来选择合适的方法和配置参数。
MSP430F5529测频法测量信号频率
UCA0BR0=173;//1MHz115200(seeUser'sGuide)
UCA0BR1=0;//1MHz115200
UCA0MCTL|=UCBRS_5+UCBRF_0;//ModulationUCBRSx=1,UCBRFx=0
UCA0CTL1&=~UCSWRST;//**InitializeUSCIstatemachine**
__no_operation();//Fordebugger
return0;
}
voidmeasure_fre()
{
if(fre>=500)
sprintf(buf,"DS16(0,60,'频率:%1.1f',4);\r\n",fre*1.008);
if(fre<=52)
sprintf(buf,"DS16(0,60,'频率:%1.1f',4);\r\n",(fre)*1.0);
//(762+1)*32768=25MHz
//SetFLLDiv=fDCOCLK/2
__bic_SR_register(SCG0);//EnabletheFLLcontrolloop
__delay_cycles(782000);
do
{
UCSCTL7&=~(XT2OFFG+XT1LFOFFG+DCOFFG);
default:break;
}
}
SVSMHCTL=SVSHE+SVSHRVL0*level+SVMHE+SVSMHRRL0*level;
MSPF测频法测量信频率
MSP430F5529测量频率-----测频法信号变换电路过零比较器,lm393输出上拉电阻,两电阻分压程序#include <msp430f5529.h>#include "stdio.h"//测频法,上限1Mhz//看门狗定时1s,开门狗中断处理程序开启捕获器,捕获1s中所有的上升脉冲,脉冲个数即为频率/*优化的反向可以将开门够定时1S使用定时器去定时1s* main.c*/long fre=0;char buf[60]="\0";void SetVcoreUp (unsigned int level){// Open PMM registers for writePMMCTL0_H = PMMPW_H;// Set SVS/SVM high side new levelSVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;// Set SVM low side to new levelSVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;// Wait till SVM is settledwhile ((PMMIFG & SVSMLDL YIFG) == 0);// Clear already set flagsPMMIFG &= ~(SVMLVLRIFG + SVMLIFG);// Set VCore to new levelPMMCTL0_L = PMMCOREV0 * level;// Wait till new level reachedif ((PMMIFG & SVMLIFG))while ((PMMIFG & SVMLVLRIFG) == 0);// Set SVS/SVM low side to new levelSVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;// Lock PMM registers for write accessPMMCTL0_H = 0x00;}void init_clock(){SetVcoreUp (0x01);SetVcoreUp (0x02);SetVcoreUp (0x03);UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFOUCSCTL4 |= SELA_2; // Set ACLK = REFO__bis_SR_register(SCG0); // Disable the FLL control loopUCSCTL0 = 0x0000; // Set lowest possible DCOx, MODxUCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation UCSCTL2 = FLLD_0 + 609; // Set DCO Multiplier for 25MHz// (N + 1) * FLLRef = Fdco// (762 + 1) * 32768 = 25MHz// Set FLL Div = fDCOCLK/2 __bic_SR_register(SCG0); // Enable the FLL control loop__delay_cycles(782000);do{UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags}while (SFRIFG1&OFIFG); // Test oscillator fault flag}void send_char(char sc){UCA0TXBUF=sc;while(!(UCA0IFG&UCTXIFG));}void send_string(char *s){while(*s!='\0'){send_char(*s++);}}init_uart(){P3SEL |= BIT3+BIT4; // P3.3,4 = USCI_A0 TXD/RXDUCA0CTL1 |= UCSWRST; // **Put state machine in reset**UCA0CTL1 |= UCSSEL__SMCLK; // SMCLKUCA0BR0 = 173; // 1MHz 115200 (see User's Guide) UCA0BR1 = 0; // 1MHz 115200UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** //UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt send_string("CLS(0);\r\n");}int main(void) {WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timerinit_clock();//初始化系统时钟为20MHzinit_uart();//串口波特率为115200bpsWDTCTL=WDT_ADLY_1000 ;//开门狗定时1sP1DIR &= ~BIT2; // P1.2 inP1SEL |= BIT2; //捕获输入SFRIE1|=WDTIE; //开看门狗定时器中断__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts__no_operation(); // For debuggerreturn 0;}void measure_fre(){if(fre>=500)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",fre*1.008);if(fre<=52)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre)*1.0);else if(fre<=208)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre+1)*1.0);else if(fre<=496)sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre+3)*1.0);send_string( buf);fre=0;TA0CTL = TASSEL_2 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。
频率测量方法参考(多个参考值)
频率测量方法参考(多个参考值)简介本文档提供了多个频率测量方法的参考值。
这些方法适用于测量不同类型信号的频率,包括电子设备、机械装置以及其他各种领域中的频率测量需求。
方法一该方法适用于测量稳定的周期性信号的频率,如交流电信号。
- 步骤1:将信号连接到频率计。
- 步骤2:选择适当的时间窗口,并将此窗口内的信号周期数计数。
- 步骤3:通过将周期数除以时间窗口的持续时间来计算频率。
方法二该方法适用于测量不稳定的周期性信号的频率,如机械装置的震动信号。
- 步骤1:将信号连接到振动传感器。
- 步骤2:记录在一定时间内信号产生的周期数。
- 步骤3:通过将周期数除以记录的时间来计算频率。
方法三该方法适用于测量非周期性信号的频率,如随机噪声信号。
- 步骤1:将信号连接到频谱分析仪。
- 步骤2:进行频谱分析,确定信号中的主要频率成分。
- 步骤3:将最大幅值的频率视作信号的频率。
方法四该方法适用于通过计数信号周期数来测量频率,如脉冲信号。
- 步骤1:将信号连接到计数器。
- 步骤2:计数一定时间内信号产生的脉冲数。
- 步骤3:通过将脉冲数除以计数时间来计算频率。
请注意,以上提供的方法仅作为参考,实际使用时应根据具体情况进行适当调整和验证。
以上是多个频率测量方法的参考值。
根据不同的测量需求和信号类型,选择适当的方法来获得准确的频率测量结果。
*此文档提供的信息仅供参考,不代表法律意见。
在实际应用中,请遵循相关法律法规和实践准则。
*。
物理实验技术中的频率测量方法与技巧
物理实验技术中的频率测量方法与技巧频率是指单位时间内发生的事件或波动的次数。
在物理实验中,频率测量是非常重要的一项技术,它帮助我们了解和研究各种现象和过程。
本文将介绍几种常用的频率测量方法和一些实用技巧,帮助读者更好地进行物理实验。
1. 静态测量法静态测量法是最简单直接的测量频率的方法之一。
它的原理是在实验过程中,我们通过观察待测现象在一定时间内出现的次数来推算频率。
例如,我们可以用秒表记录一个摆动中的物体在30秒内摆动的次数,然后通过简单的计算得到频率。
这种方法适用于现象变化较慢的实验,但对于频率较高或变化较快的实验,并不适用。
2. 分频法分频法是一种常用的频率测量方法,在物理实验中广泛应用。
它的原理是将待测信号进行频率分频,将高频信号转换成低频信号,从而方便测量。
常见的分频器有二分频、四分频、十分频等。
例如,如果我们使用一个十分频器,将待测信号的频率从100Hz降低到10Hz,然后再用秒表测量10Hz信号出现的次数,最后乘以10就得到了待测信号的频率。
分频法的优点是适用于高频信号的测量,并且比较简单易用。
3. 调谐法调谐法是一种精确测量频率的方法,适用于需要高精度测量的实验。
它的原理是通过调节待测信号的频率,使其与一个已知频率的参考信号产生共振,然后测量参考信号的频率即可得到待测信号的频率。
这种方法常用于频率计等精密测量设备中。
但是需要注意的是,在使用调谐法时,要避免干扰和误差的影响,保持实验环境的稳定和准确。
4. 相位计数法相位计数法是一种常见而且比较准确的频率测量方法。
它的原理是测量信号的相位差,然后根据相位差的变化来计算频率。
通常使用的设备是相位测量器或频率计。
相位计数法的优点是适用于频率范围较宽、变化较大的实验,并且可以实现高精度的测量。
但其缺点是需要较为专业的设备和技术支持。
在物理实验中进行频率测量时,还有一些实用技巧可以帮助提高测量的准确性和精度。
首先是避免干扰,尽量消除外界和系统内部的噪音和干扰,以保证测量结果的可靠性。
基于TMS320F2812事件管理器的一种测频方法
temp = capnum2+(0xFFFF-capnum1);
pinlvf[fnum++] =temp;
if(fnum>4) fnum=0;//取5个数值后回零
f= 2343750.0/(float)temp;//f= 150M/64/temp
基于TMS320F2812事件管理器的一种测频方法C2000例程
基于TMS320F2812事件管理器的一种测频方法
摘要
TMS320F2812是TI公司新推出的一款主要应用于工业控制的DSP芯片。它集成了EV、AD、串口等的片内外设,具有强大的事件管理能力和嵌入式控制功能。文章利用其片内外设事件管理器的捕获功能,给出了一种简单的测频方法,实现了电力系统中电网频率的测量。有较强的实用性。
EvaRegs.T1CON.bit.TMODE=2; 1CON.bit.TPS=5; //4分频
EvaRegs.T1CON.bit.TENABLE=1; //使能定时器
= 时基T1的频率/
t,这里时基T1的频率为时钟主频除以分频系数,即fT1=150M/64,因此所测频率f=150M/64t。下面为捕获中断子程序。
unsigned int capnum1;
unsigned int capnum2;
float f;
EvaRegs.EVAIMRC.bit.CAP1INT=1; //捕获1中断使能
}
3.2 捕获中断子程序
进入捕获中断子程序时,保护现场后首先清CAP1中断标志位,从2级深度FIFO中依次读出两次捕获的计数值capnum1和capnum2。如果capnum2大于capnum1,则直接相减,之差即为在被测频率的一个周波内记的定时器T1脉冲数t。若capnum2小于capnum1,则说明在计数过程中有计数溢出,即计数到周期寄存器T1PR内写入的0xFFFF后回零重新计数,因此在求脉冲数t时要在capnum2与capnum1之差上加上0xFFFF。被测的信号频率:f
用MCS_51系列单片机测量频率的方法研究
第20卷第5期辽宁工学院学报V o l.20 N o.5 2000年10月JOU RNAL O F L I AON I N G I N ST ITU T E O F T ECHNOLO GY O ct.2000α文章编号:100521090(2000)0520015202用M CS-51系列单片机测量频率的方法研究洛家华(辽宁工学院信息科学与工程系,辽宁锦州 121001)关键词:频率测量;单片机;测量误差中图分类号:TM930.9 文献标识码:BResearches on the M ethod of Frequency M easur i ng w ithM CS-51Ser iesM onolith ic Com puterLU O J ia2hua(Info r m ati on Science&engineering D ep t.of L iaoning Institute of T echno logy,J inzhou121001,Ch ina)Key words:frequency m easu ring;m ono lith ic com pu ter;erro r in m easu rem en t 频率测量一般都是由计数器或定时器来完成的。
M CS-51系列单片机内部均含有两个16位定时器 计数器,可直接用来进行频率测量。
本文拟对M CS-51系列单片机进行频率测量时的测量误差、测量范围和测量时间进行讨论,并给出进行快速、高精度测量的方法。
1 M CS-51测量频率的方法和误差频率测量一般有两种方法,一种是测频法,即将被测信号加到计数器的计数输入端上,计数器在标准时间T s1内进行计数,所得的计数值N1与被测信号的频率f x1有如下关系:f x1=N T s1=N1f x1 另一种方法是测周法,该方法是将标准频率信号f s2送到计数器的计数输入端,而让被测频率信号f x2控制计数器的计数时间,所得的计数值N2与f x2有如下关系:f x2=f s2 N2 无论用哪种方法进行频率测量,主要误差源都是由于计数器只能进行整数计数而引起的±1误差Ε=∃N N.对于测频法有:Ε1=∃N1 N1=±1 N1=±1 (N s1f x1)=±f s1 f x1 对于测周法有:Ε2=∃N2 N2=±1 N2=±f x2 f s2=±T s2f x2 可见在同样的T s下,测频法在f x1的低频端误差远大于高频端,而测周法在f x2的高频率的误差远大于低频端,理论研究表明,如进行n次重复测量取平均,则±1误差会减小n倍。
测频率的方法
测频率的方法在日常生活和科学研究中,测量频率是一项非常重要的工作。
频率是指在单位时间内发生的事件次数,它可以用来描述各种周期性现象,如声音的频率、电磁波的频率等。
在不同的领域,测量频率的方法也各有不同,下面将介绍几种常见的测频率的方法。
首先,最常见的测频率的方法之一是使用频率计。
频率计是一种专门用来测量频率的仪器,它可以通过不同的传感器或探头来接收信号,并将其转换成频率显示在仪器的屏幕上。
使用频率计可以快速、准确地测量信号的频率,适用于各种频率范围的测量任务。
其次,另一种常见的测频率的方法是使用示波器。
示波器是一种可以显示信号波形的仪器,通过观察波形的周期来确定信号的频率。
示波器可以直观地显示信号的频率特征,适用于需要观察信号波形的测量任务。
此外,还可以使用频谱分析仪来测量频率。
频谱分析仪是一种可以将信号分解成不同频率成分的仪器,通过观察信号的频谱图来确定信号的频率。
频谱分析仪可以帮助我们了解信号的频率分布特征,适用于需要分析信号频谱的测量任务。
除了以上介绍的仪器外,还可以通过数学方法来测量频率。
例如,可以利用傅里叶变换将信号从时域转换到频域,通过观察频谱图来确定信号的频率成分。
数学方法可以帮助我们深入理解信号的频率特征,适用于需要进行信号处理和分析的测量任务。
综上所述,测量频率是一项重要的工作,在不同的测量任务中可以选择不同的方法来进行测量。
通过使用频率计、示波器、频谱分析仪以及数学方法,可以快速、准确地测量信号的频率,为科学研究和工程应用提供有力的支持。
希望以上介绍的测频率的方法对大家有所帮助。
信号频率的测量方法与误差
信号频率的测量方法与误差【摘要】本文介绍了几种信号频率的测量方法,并对实现电路的构成和特点进行比较,探讨了误差引起的原因。
【关键词】电桥;谐振;差拍;时标信号信号频率的测量在电子测量技术领域中具有重要的地位,深入了解信号频率的测量方法可以帮助我们掌握其它物理量的测量。
1.直接法直接法是利用电路频率响应特性的可调无源网络测量频率值。
如果电路的频率特性为:(式中为己知参数),根据函数关系式可以求出频率。
这种测频方法的优点是简单、价廉,但精确度不高。
无源测频法常用的有电桥测频法和谐振测频法,主要用于频率粗测。
1.1 电桥测频法电桥法测频是利用交流电桥平衡条件和电桥电源频率有关这一特性来测量频率的,原理电路如图1.1所示,调节电桥平衡的可变电阻和电容的调节旋钮,电桥指示平衡时,被测频率值为。
在高频时,由于电阻或电容带来的寄生参数影响比较严重,会大幅降低测量精度,所以电桥法测频一般只适用于低频段10kHz以下的音频范围的测量。
1.2 谐振测频法谐振法测量频率的原理和测量方法都比较简单,可作为频率粗测,误差来源主要有:(1)实际中电感、电容损耗越大,品质因数越低,不容易找出真正的谐振点。
(2)面板上的频率刻度是在规定的标定条件下刻度的,当环境温度和湿度等因数变化时,将使电感、电容的实际值发生变化,从而使回路的固有频率变化。
(3)由于频率刻度不能分得无限细,人眼读数常常有一定误差。
2.比较法利用标准频率与被测频率比较测量,测量是要求标准频率连续可调,并能保持其准确度。
比较法可以为差拍法、差频法、示波器法。
2.1 差拍法差拍法是利用已知的参考频率和被测频率进行差拍,产生差频,再精确差频来确定频率值,拍频法通常只用于音频的测量,而不宜用于高频测量。
差拍法通过提取待测信号相对于参考信号的相位差信息作为差拍信号,差拍信号的频率值远小于原待测信号,较之直接测量待测信号,差拍法提高了测量的分辨率,但不能测量两个频率的相位差。
测量频率的方法与工具
测量频率的方法与工具时光荏苒,人类在科技和工业的发展中取得了巨大的进步。
电子技术作为现代社会中不可或缺的一环,频率的测量在电子领域中扮演着重要的角色。
本文将探讨测量频率的方法与工具,介绍其原理和应用。
一、频率的定义与常见单位频率是指在单位时间内发生的周期性事件的次数。
在电子学中,我们通常使用赫兹(Hz)作为频率的单位,以表示每秒发生的周期性事件的次数。
例如,一个频率为100 Hz的信号表示在一秒钟内该信号重复100次。
二、频率测量的原理和方法频率测量的原理基于周期性事件的计数,其中时间是关键的因素。
下面将介绍几种常用的频率测量方法。
1. 使用示波器测量频率示波器是一种能够显示电信号波形的仪器,它通常带有时间基准电路来测量信号的周期性和频率。
示波器的原理是将待测信号与基准信号进行比较,通过计算两者之间的差异来得出频率的测量结果。
2. 利用计时器测量频率计时器是一种可以测量时间间隔的仪器。
为了测量频率,可以使用计时器来测量一系列周期性事件之间的时间间隔,然后通过计算来得出频率。
这种方法适用于频率较低且变化缓慢的信号。
3. 使用频率计测量频率频率计是一种专用的仪器,用于直接测量信号的频率。
它通过将待测信号转换成数字形式,并使用计时器来测量信号的周期,从而得出频率的测量结果。
频率计通常具有较高的测量精度和稳定性,适用于频率较高的信号。
三、常用的频率测量工具除了上述介绍的测量方法,还有一些常用的频率测量工具可以用于实际应用。
以下是其中的几种工具。
1. 频率计频率计是一个专门用于测量频率的仪器。
它一般通过数字显示频率的数值,并具有一定的测量精度和测量范围。
频率计可以广泛应用于电子设备、通信系统以及科学研究等领域。
2. 频谱分析仪频谱分析仪是一种能够将信号分解成不同频率分量的仪器。
它可以提供信号的频谱信息,包括频率和幅度。
频谱分析仪通常用于测量信号的谐波含量、频率响应以及干扰等,广泛应用于通信、音频等领域。
3. GPS接收器GPS(全球定位系统)接收器是一种用于接收卫星信号并测量时间和位置的设备。
频率测量方法
频率测量⽅法0引⾔随着⽆线电技术的发展与普及,"频率"已经成为⼴⼤群众所熟悉的物理量。
⽽单⽚机的出现,更是对包括测频在内的各种测量技术带来了许多重⼤的飞跃,然⽽,⼩体积、价廉、功能强等优势也在电⼦领域占有⾮常重要的地位。
为此.本⽂给出了⼀种以单⽚机为核⼼的频率测量系统的设计⽅法。
1 测频系统的硬件结构测量频率的⽅法⼀般分为⽆源测频法、有源测频法及电⼦计数法三种。
⽆源测频法(⼜可分为谐振法和电桥法),常⽤于频率粗测,精度在1%左右。
有源⽐较法可分为拍频法和差频法,前者是利⽤两个信号线性叠加以产⽣拍频现象,再通过检测零拍现象进⾏测频,常⽤于低频测量,误差在零点⼏Hz;后者则利⽤两个⾮线性信号叠加来产⽣差频现象,然后通过检测零差现象进⾏测频,常⽤于⾼频测量,误差在±20 Hz左右。
以上⽅法在测量范围和精度上都有⼀定的不⾜,⽽电⼦计数法主要通过单⽚机进⾏控制。
由于单⽚机的较强控制与运算功能,电⼦计数法的测量频率范围宽,精度⾼,易于实现。
本设计就是采⽤单⽚机电⼦计数法来测量频率,其系统硬件原理框图如图1所⽰。
为了提⾼测量的精度,拓展单⽚机的测频范围,本设计采取了对信号进⾏分频的⽅法。
设计中采⽤两⽚同步⼗进制加法计数器74LS160来组成⼀个100分频器。
该100分频器由两个同步⼗进制加法计数器74LS160和⼀个与⾮门74LS00共同设计⽽成。
由于⼀个74LS160可以分频⼗的⼀次⽅,⽽当第⼀⽚74LS160⼯作时,如果有进位,输出端TC便有进位信号送进第⼆⽚的CEP端,同时CET也为⾼电平,这样两个⼯作状态控制端CET、CEP将同时为⾼电平,此时第⼆⽚74LS160将开始⼯作。
2 频率测量模块的电路设计⽤单⽚机电⼦计数法测量频率有测频率法和测周期法两种⽅法。
测量频率主要是在单位定时时间⾥对被测信号脉冲进⾏计数;测量周期则是在被测信号⼀个周期时间⾥对某⼀基准时钟脉冲进⾏计数。
基于MSP430F5438A单片机测量频率的程序实例
基于MSP430F5438A单片机测量频率的程序实例基于MSP430F5438A单片机测量频率的程序实例/*****************************************************程序描述:利用Timer_A捕获脉冲宽度利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量程序用到了定时器A的CCI1A端口(MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,start,end,两个个变量来计算脉冲宽度*****************************************************/#include"msp430x14x.h"#include"lcd12864.h"uint start,end;uint width;//==用于存放脉宽==uint period;//==用于存放周期==uint frequency;//==用于存放频率==uint fy[7];//==用于存放频率显示数据==uint pd[7];//==用于存放周期显示数据==uint wh[6];//==用于存放脉宽显示数据==const unsigned char zhouqi[]={"周期为:(us) "};const unsigned char us[]={"us "};const unsigned char pinlv[]={"频率为:(Hz) "};const unsigned char hz[]={"HZ "};void process(void);//==函数声明==void delay();//==延时函数==void InitSys(); //==初始化时钟==/****************************************************主函数****************************************************/int main(void){WDTCTL = WDTPW + WDTHOLD;//==关狗==InitSys();//==初始化时钟,SMCLK,MCLK均为8M==P1DIR&=~BIT2;P1SEL = BIT2;//==设置P1.2端口为功能模块使用,即:做捕获源==TACTL = TASSEL_2+ID_3+TACLR+TAIE+MC1;//==定时器A时钟信号选择SMCLK,8分频,同时设置定时器A计数模式为连续增计模式==CCTL1 =CM_1+SCS+CAP+CCIE;//==输入上升沿捕获,CCI0A为捕获信号源==_EINT();//==开全局中断允许==Ini_Lcd();//==初始化液晶==Clear_GDRAM();//==清屏==Disp_HZ(0x80,zhouqi,8);Disp_HZ(0x88,pinlv,8);while(1){process();Write_Cmd(0x90);//==写地址==Write_Data(0x30+pd[6]);Write_Data(0x30+pd[5]);Write_Data(0x30+pd[4]);Write_Data(0x30+pd[3]);Write_Data(0x30+pd[2]);Write_Data(0x30+pd[1]);Write_Data(0x30+pd[0]);Write_Cmd(0x98);//==写地址==Write_Data(0x30+fy[6]);Write_Data(0x30+fy[5]);Write_Data(0x30+fy[4]);Write_Data(0x30+fy[3]);Write_Data(0x30+fy[2]);Write_Data(0x30+fy[1]);Write_Data(0x30+fy[0]);delay();}}/*****************************************************初始化时钟*****************************************************/ void InitSys(){unsigned int i;//--- 使用XT2振荡器---BCSCTL1&=~XT2OFF;//==打开XT2振荡器==do{IFG1 &=~OFIFG;//==清除振荡器失效标志==for(i = 0xFF; i > 0; i--);//==延时,等待XT2起振==}while((IFG1 & OFIFG)!= 0);//==判断XT2是否起振== BCSCTL2 =SELM_2+SELS;//==选择MCLK、SMCLK为XT2,8M== }/*****************************************************延时函数*****************************************************/void delay(){unsigned int i;unsigned int j=10;for(i=10;i>0;i--){while(j--);}}/***************************************************数据处理***************************************************/void process(void){while(end<start);< bdsfid="155" p=""></start);<>//while(endstart width = end-start;//==实际脉冲宽度的计算==period = 2* width;frequency=1000000/period;pd[6]=period/1000000;pd[5]=(period-1000000*pd[6])/100000;pd[4]=(period-1000000*pd[6]-100000*pd[5])/10000;pd[3]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4])/100 0;pd[2]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-1000*pd[3])/100;pd[1]=(period-1000000*pd[6]-100000*pd[5]-10000*pd[4]-100 0*pd[3]-100*pd[2])/10;pd[0]=period%10;fy[6]=frequency/1000000;fy[5]=(frequency-1000000*fy[6])/100000;fy[4]=(frequency-1000000*fy[6]-100000*fy[5])/10000;fy[3]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4])/10 00;fy[2]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-100 0*fy[3])/100;fy[1]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-100 0*fy[3]-100*fy[2])/10;fy[0]=frequency%10;}/***************************************************中断处理函数***************************************************/#pragma vector=TIMERA1_VECTOR //==定时器A中断处理==__interrupt void timer_a(void){switch(TAIV)//==向量查询=={case 2://==捕获中断==if(CCTL1&CM0)//==捕获到上升沿=={CCTL1=(CCTL1&(~CM0))|CM1;//==更变设置为下降沿触发== start=TAR;//==记录初始时间==}else if(CCTL1&CM1)//==捕获到下降沿=={CCTL1=(CCTL1&(~CM1))|CM0;//==更变设置为上升沿触发== end=TAR;//==用start,end,overflow计算脉冲宽度==}break;default: break; } }。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M S P430F5529测量频率
-----测频法信号变换电路
过零比较器,lm393输出上拉电阻,两电阻分压
程序
#include <msp430f5529.h>
#include "stdio.h"
//测频法,上限1Mhz
//看门狗定时1s,开门狗中断处理程序开启捕获器,捕获1s中所有的上升脉冲,脉冲个数即为频率
/*优化的反向可以将开门够定时1S使用定时器去定时1s
* main.c
*/
long fre=0;
char buf[60]="\0";
void SetVcoreUp (unsigned int level)
{
// Open PMM registers for write
PMMCTL0_H = PMMPW_H;
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDL YIFG) == 0);
// Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
// Set VCore to new level
PMMCTL0_L = PMMCOREV0 * level;
// Wait till new level reached
if ((PMMIFG & SVMLIFG))
while ((PMMIFG & SVMLVLRIFG) == 0);
// Set SVS/SVM low side to new level
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
// Lock PMM registers for write access
PMMCTL0_H = 0x00;
}
void init_clock()
{
SetVcoreUp (0x01);
SetVcoreUp (0x02);
SetVcoreUp (0x03);
UCSCTL3 = SELREF_2; // Set DCO FLL reference = REFO
UCSCTL4 |= SELA_2; // Set ACLK = REFO
__bis_SR_register(SCG0); // Disable the FLL control loop
UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
UCSCTL1 = DCORSEL_7; // Select DCO range 50MHz operation UCSCTL2 = FLLD_0 + 609; // Set DCO Multiplier for 25MHz
// (N + 1) * FLLRef = Fdco
// (762 + 1) * 32768 = 25MHz
// Set FLL Div = fDCOCLK/2 __bic_SR_register(SCG0); // Enable the FLL control loop
__delay_cycles(782000);
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
}
void send_char(char sc)
{
UCA0TXBUF=sc;
while(!(UCA0IFG&UCTXIFG));
}
void send_string(char *s)
{
while(*s!='\0')
{
send_char(*s++);
}
}
init_uart()
{
P3SEL |= BIT3+BIT4; // P3.3,4 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL__SMCLK; // SMCLK
UCA0BR0 = 173; // 1MHz 115200 (see User's Guide)
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
//UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt send_string("CLS(0);\r\n");
}
int main(void) {
WDTCTL = WDTPW | WDTHOLD;// Stop watchdog timer
init_clock();//初始化系统时钟为20MHz
init_uart();//串口波特率为115200bps
WDTCTL=WDT_ADLY_1000 ;//开门狗定时1s
P1DIR &= ~BIT2; // P1.2 in
P1SEL |= BIT2; //捕获输入
SFRIE1|=WDTIE; //开看门狗定时器中断
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, enable interrupts
__no_operation(); // For debugger
return 0;
}
void measure_fre()
{
if(fre>=500)
sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",fre*1.008);
if(fre<=52)
sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre)*1.0);
else if(fre<=208)
sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre+1)*1.0);
else if(fre<=496)
sprintf(buf,"DS16(0,60,'频率:%1.1f ',4);\r\n",(fre+3)*1.0);
send_string( buf);
fre=0;
TA0CTL = TASSEL_2 + MC_2 + TACLR+TAIE; // SMCLK, 连续mode, clear TAR 8分频下限可以测到8Hz。
上限200K左右
TA0CCTL1 =CM_1 +SCS +CAP +CCIE;
}
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
{
measure_fre();
}
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))
{
case 0: break; // No interrupt
case 2: //CCR1
fre++;
break;
case 4: break; // CCR2 not used
case 6: break; // CCR3 not used
case 8: break; // CCR4 not used
case 10: break; // CCR5 not used
case 12: break; // CCR6 not used
case 14: break; //定时器溢出
default: break;
}
}。