NE555 por encima del problema de frecuencia de 100kHz

3

Al principio busqué en este problema y no pude encontrar nada con este específico.

Estoy usando NE555 para generar frecuencias. Estoy utilizando los cálculos de este sitio web . Estoy usando 10nf como dice. Mi problema es que no puedo generar frecuencias por encima de los 100kHz.

Estoy usando 0.1uF como C, 47ohm para R1 y R2. Según el sitio web, debería dar 102kHz pero NE555 no da eso. Lo medí con un osciloscopio y solo muestra ruido. Busqué [hoja de datos] [3] y descubrí que el NE555 debería alcanzar casi 1mHz.

¿Cuál crees que es mi problema? ¿Cómo puedo resolverlo y alcanzar las señales por encima de 100 kHz?

    
pregunta HVK

2 respuestas

3

Los valores R recomendados de "NE555" de Texas Instruments son 1k ohms y más, y la operación de 1 MHz de esa parte no está garantizada. 100kHz es la recomendación. Hoja de datos NE555

Los diseños de variantes más modernos pueden manejar 1 MHz fácilmente, incluyendo (de nuevo, de Texas Instruments) TLC555 hoja de datos de TLC555 y LA hoja de datos indica explícitamente la resistencia interna de descarga (aproximadamente 20 ohmios), lo que significa que R1 y R2 deberían ser mucho más altos (4k ohmios serían buenos).

    
respondido por el Whit3rd
1
  

¿Cuál crees que es mi problema?

no todos los 555 son iguales y algunos de ellos no pueden ir tan alto.

si tienes que ir tan alto, busca una parte que haga eso. Todos conectan el capacitor al pin de salida y usan una resistencia de bajo valor.

hay otras formas, a menudo más simples, de llevarte allí.

editar: armo una pequeña rutina rápidamente, para demostrar el concepto.

 //measure rc time to charge to '1' on RC_READ pin
uint32_t rctmr_get(uint8_t ch_pin) {
    uint32_t tmp;
    IO_IN(RC_DDR, ch_pin);                  //discharge. ch_pin idles high/input
    IO_OUT(RC_DDR, RC_READ);                //discharges the capacitor (RC_READ idles low/output)
    while (IO_GET(RC_PORTIN, RC_READ)) continue;    //until the capacitor is fully discharged
    IO_OUT(RC_PORT, ch_pin);                //start to charge through the ch_pin
    IO_IN(RC_DDR, RC_READ);                 //start to charge up the capacitor
    tmp = ticks();                          //time stamp tmp
    while (IO_GET(RC_PORTIN, RC_READ)==0) continue; //wait for READ pin to go high
    tmp = ticks() - tmp;                    //measure the time elapsed
    IO_OUT(RC_DDR, RC_READ);                //discharge the capacitor
    IO_IN(RC_DDR, ch_pin);                  //start to discharge from the charge pin (idles high / input)
    return tmp;
}

En una resistencia de 16Mhz PIC16F1936 @ 2.5v, 100K, obtuve un conteo de 183xx para un capacitor de 104; los últimos dos dígitos varían un poco.

  1. un condensador 472 obtuvo una lectura de 775 - 777. Una linealidad bastante buena.

Con un poco de filtrado, debería obtener mejores resultados.

Por lo tanto, tiene un rango de hasta 2 ^ 32/18350 * 0.1u = 24F, y una resolución de 5.5pf. Con las diferentes resistencias utilizadas para cargar el capacitor, puede ampliar ese rango aún más.

el código es bastante portátil y debería poder ejecutarse en casi cualquier mcu.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas