generador de impulsos de 1Hz - salida LVCMOS 1.8

0

Soy bastante nuevo en diseño electrónico, lo siento mucho si la pregunta es demasiado ingenua.

Necesito construir un pequeño generador de pulsos portátil de 1Hz y conectarlo a un pin de entrada FPGA, configurado en LVCMOS 1.8V. Se supone que esto emula una señal GPS PPS para propósitos de prueba, sin requerir una señal / antena GPS.

Actualmente mi plan es usar una batería de 9V y usar un temporizador 555 para generar los pulsos. Esta parte está bien, y la he simulado con éxito con LTSpice para verificar que las resistencias y los valores de los condensadores cumplan con la frecuencia y el ciclo de trabajo deseados.

El paso en el que estoy atascado es cómo conectarlo limpiamente con el FPGA, y estar 100% seguro de que no lo dañaré. He intentado con un LDO (LT3021-1.8) después del 555, pero la simulación indica que el flanco ascendente sube a 3V durante una pequeña cantidad de tiempo antes de estabilizarse a 1.8V. Recordando mis lecciones de electrónica, probé un divisor (con dos resistencias) y un LM358 configurado en seguidor. Los resultados son un poco mejores, pero la simulación aún muestra un aumento de 2.4 V durante el ascenso.

Descubrí que hay un componente específico llamado "cambiador de voltaje" que podría ser apropiado para lo que estoy cuidando, pero me cuesta mucho encontrar uno con salida de LVCMOS 1.8V, y puedo soldarlo por mi cuenta. ¿Tiene alguna sugerencia para un componente que se ajuste al propósito? ¿Un diodo Zener ayudaría a limitar la salida a 1.8 V?

También, para ejecutar la simulación necesito simular la carga del pin de entrada FPGA, pero no puedo encontrar dicha información en la hoja de datos (este es un Xilink Z7000). ¿Cuál sería una forma correcta de simular esta carga (qué impedancia)?

    
pregunta jmk

3 respuestas

1

Podrías usar algo como un 74LVC541 con 1.8V Vcc como un búfer. Sus entradas son 5 V tolerantes.

Alternativamente, construya un oscilador alrededor de un 74LVC14A y deshágase de los voltajes 555 y superiores en su totalidad.

    
respondido por el Colin
0

Si su FPGA no está finalizado, o si tiene un punto de prueba de repuesto disponible, intente sintetizar 1 Hz en el FPGA e impulsando una salida LVCMOS, luego puenteando los dos puntos para propósitos de prueba.

    
respondido por el WhatRoughBeast
0

Podrías intentar simplemente colocar un registro entre el +5 del temporizador y el amplificador operacional. El amplificador operacional tendrá diodos protectores incorporados que deben protegerse contra demasiada corriente de falla. Sin embargo, la corriente de falla máxima puede ser bastante alta. Verifique la hoja de datos y el tamaño del registro para limitar el pozo actual por debajo de eso.

    
respondido por el Robert Endl

Lea otras preguntas en las etiquetas

¿usb innecesaria protección? ___ método qstnhdr ___ para manejar fuentes de interrupción GPIO concurrentes? ______ qstntxt ___

Tengo dos fuentes de interrupción GPIO que se ejecutan en dos subprocesos separados:

  1. Pulsos GPIO siguiendo la línea de frecuencia (60 Hz)
  2. botón
  3. presionar

¿Cómo puedo usar estas dos interrupciones simultáneamente, considerando que mi controlador (ESP32) multiplexa todas las interrupciones del periférico GPI0 en una interrupción de la CPU?

Actualmente, el programa permite que solo uno de ellos funcione a la vez.

Gracias

    
______ answer370267 ___

Estoy escribiendo esto sin utilizar nunca un ESP32 (o cualquier otro núcleo dual) o FreeRTOS. Desde mi conocimiento de FreeRTOS (búsqueda muy rápida), implementas los controladores de interrupción por tu cuenta, pero tienes que llamar a algunas funciones del sistema operativo desde dentro.

Por lo tanto, independientemente de la GPIO en la que ocurra la interrupción, terminará en la misma función de interrupción, porque solo hay un vector de interrupción para GPIO.

Pero el ESP32 tiene algunos registros para decirle qué interrupciones están pendientes. Y tienes registros que te dicen qué interrupción está habilitada. La combinación de esos registros le permite decidir qué pines están causando una interrupción.

Por lo tanto, en función de esto, puede hacer diferentes cosas según el GPIO que haya provocado la interrupción.

Te voy a dar una idea, no una implementación, así que lo siguiente es pseudocódigo:

%pre%

De esta manera puede dividir la interrupción en múltiples funciones de ejecución. Prefiero la manera de usar las funciones, pero estoy programando en C ++ e intento evitar las variables globales.

    
______ answer370257 ___

Primero verifique si el firmware / SDK le permite dividir las interrupciones. Es posible que tengas que saltar algunos aros adicionales para poder hacerlo. Muchas veces, el SDK basado en arduino silenciará las opciones disponibles para que sea más fácil para los principiantes y unificar la experiencia en diferentes tableros. Y revise la especificación del microcontrolador para ver exactamente qué sucederá cuando entren las interrupciones mientras ya está manejando otra.

De lo contrario, puede comprobar qué provocó la interrupción dentro de la rutina de interrupción y luego establecer un indicador volátil para manejarlo en su bucle principal.

    
______ answer370293 ___

A menos que un dispositivo tenga un enganche por pin de eventos de interrupción, su mejor opción es probablemente rastrear el último estado reconocido de cada registro de puertos de E / S [en %code% , abajo], y luego hacer algo como:

%pre%

Si cualquier bit de interés se establece en %code% o %code% , el código debe borrar atómicamente el bit (tal vez al deshabilitar las interrupciones, usar la carga vinculada / almacenamiento condicional u otros medios) y manejar la condición apropiada. Tenga en cuenta que si el estado de un pin cambia y luego vuelve a cambiar antes de ser observado por el código anterior, la transición debería perderse.

Cada vez que el sistema vaya a estar inactivo en función de una interrupción de cambio de pin, debería borrar el indicador de interrupción de cambio de pin, luego verificar si el estado del puerto coincide con %code% , y solo irse a dormir si lo hace partido. De esa manera, si el pin del puerto cambia antes de leerlo, el código lo notará y, si cambia después de leerlo, el hardware lo notará. Algunas plataformas hacen que sea imposible evitar por completo las condiciones de carrera, pero las buenas plataformas garantizarán que los eventos que se producen entre el borrado de la bandera y la lectura del estado del puerto se activen por el hardware además de que se informen en el software. En consecuencia, incluso si un evento que ocurre precisamente cuando el puerto se está leyendo no aparece en la lectura, aún se registrará como una activación de hardware.

    
___