Existen dos métodos de medición de frecuencia comúnmente utilizados: el método de medición de frecuencia y el método de medición de ciclo.
La idea básica del método de medición de frecuencia es dejar que el contador cuente durante 1 segundo bajo el control de la señal de puerta. El resultado del conteo es el número de ciclos de la señal medida en 1 segundo. es decir, la frecuencia de la señal medida. Si la señal medida no es un pulso rectangular, primero debe convertirse en un pulso rectangular de la misma frecuencia. En la figura se muestra el diagrama de bloques principal del método de medición de frecuencia.
En la figura, el segundo pulso se utiliza como señal de puerta. Cuando es de nivel alto, el contador cuenta; cuando es de nivel bajo, el contador deja de contar. Obviamente, bajo la misma señal de puerta, cuanto mayor sea la frecuencia de la señal medida, menor será el error de medición. Cuando la frecuencia medida es constante, cuanto mayor sea el tiempo de alto nivel de la señal de puerta, menor será el error de medición. Sin embargo, cuanto más largo sea el período de la señal de puerta, mayor será el tiempo de respuesta medido.
2. Cuando la frecuencia de la señal medida es baja, para garantizar la precisión de la medición, a menudo se utiliza el método de medición cíclica. Es decir, primero mida el período de la señal que se está midiendo y luego conviértalo en frecuencia. La esencia del método de medición del ciclo es utilizar la señal medida como señal de puerta.
Durante su tiempo de nivel alto, se utiliza una fuente de señal de frecuencia estándar como pulso de reloj del contador. Si el resultado del conteo es N y la frecuencia de la señal estándar es f1, entonces el período de la señal medida es: T = T1·N. La frecuencia de la señal medida es: f = 1/T1·N = f1/N.
El error absoluto máximo producido por el método de medición del período es obviamente igual a ±1 período de señal estándar. Si el valor verdadero del período de señal medido es Ttrue = T1·N, entonces Tmeasure = T1·(N±1)σmax= (fmeasure-ftrue)/ftrue=Ttrue/Tmeasure – 1=±1 /(N±1) De la fórmula anterior se puede ver que para una determinada señal medida, cuanto mayor sea la frecuencia de la señal estándar, mayor será el valor de N y, por lo tanto, menor será el error relativo.
3. Para la medición de bandas de baja frecuencia, en vista de las dificultades anteriores, se deben adoptar algunos métodos especiales para señales de baja frecuencia para lograr la precisión especificada. Por ejemplo, puede considerar multiplicar la frecuencia de la señal que se está midiendo y luego medirla utilizando el método de medición de frecuencia.
O ampliar la señal de puerta. Dado que el circuito de duplicación de frecuencia es relativamente complejo, generalmente se utiliza el último método. De hecho, los efectos de la ampliación de la señal de puerta y la duplicación de frecuencia de la señal medida son los mismos.
La ampliación de la señal de puerta es relativamente fácil de lograr; por ejemplo, se puede lograr utilizando un circuito divisor de frecuencia. Si el tiempo de alto nivel de la señal de puerta se amplía de 1 segundo a 10 segundos, el error relativo se puede reducir proporcionalmente, pero el tiempo de respuesta también aumenta en la misma proporción.
4. Modo de visualización: *** Utilice cuatro tubos digitales a la derecha, tres a la izquierda para mostrar datos y una unidad de visualización en el extremo derecho. Cuando es 0, la unidad es Hz. cuando es 1, la unidad es Khz
5 Código:
//#include
#include
#include
#define uint unsigned int
uint a,b,c,d;
unsigned long? x;
recuento largo sin firmar;
bandera de caracteres sin firmar=0;
void Timer0_Init()interrupción 1
{
TH0=(65535- 10000)/256;
TL0=(65535-10000)%256;
if(++count==40)
{
cuenta=0 ?
TR1=0;
x=TH1*256+TL1; >
TH1=0;
TL1=0;
TR1=1;
bandera=1;
}
}
void show(void)
{if(x>=10&&x<100)
{
a=0;
b=x*10%100;
c=x/10;
d=x%10;
ZLG7289_Descargar(1,7,0,a);
ZLG7289_Descargar(1,6,0,b);
ZLG7289_Descargar(1,5,1,d);
ZLG7289_Download(1,4 ,0,c);
}
else if(x>=100&&x<1000)
{
a=0;
b=x/100;
c=x%100/10;
d=x %10;
ZLG7289_Descargar( 1,7,0,a);
ZLG7289_Descargar(1,6,1,d);
ZLG7289_Descargar(1, 5,0,c);
ZLG7289_Download(1,4,0,b);
}
si no(x>=1000&&x<10000)
{
a=x/1000;
b=x%1000/100;
c=x%100/10 ;
d=1;
ZLG7289_Descargar(1,7,0,d);
ZLG7289_Descargar(1,6,0,c); p>
ZLG7289_Descargar(1,5,0 ,b);
ZLG7289_Descargar(1,4,1,a);
}
}
principal(void)
{
system_init();
systemclk_init();
port_init( );
ZLG7289_Init(40 );
ZLG7289_Reset();
timer_init();
>
mientras(1)
{
si(flag==1)
{
mostrar();
bandera = 0;
}
}}
#include
#include
void system_init()
{
PCA0MD&=~0x40;
}
void systemclk_init()
{
OSSCICL=OSSCICL+42; //Establece el oscilador interno en 24MHZ
OSSCICN|=0x01; //Interno Oscilador dividido por 4
}
void port_init()
{?
P0SKIP=0x00;? //Omitir P0 .0 hace INT0.P0.1 hace INT1 (la salida analógica P0.6, P0.7 no salta)
P1SKIP=0x00; //Saltar P1.2, P1.3, P1.4 p>
XBR0=0x00; //El interruptor de barra transversal habilita UART0
XBR1=0x60; //Abre el interruptor de barra transversal
//IT01CF=0x10; .0, INT1 está configurado en P0.1
P0MDIN=0xFF; //Entrada digital
P1MDIN=0xFF;
P0MDOUT=0xFF; -pull
P1MDOUT=0xFF;
}
void timer_init()
{
TMOD= 0X51 ;
TH0=(65535-2500)/256;
TL0=(65535-2500)%256;
EA=1;
ET0=1;
TR1=1;
TR0=1;
}
#ifndef __port_H_ p >
#define __port_H_
void system_init(void);
void systemclk_init(void);
void port_init(void);
void timer_init(void);
#endif