Precisión de la fluctuación de fase en microsegundos: ¿qué usar?

5

Tengo cuatro señales de nivel TTL que deben cambiar de estado en un orden particular.

A partir de la señal de "ir" en una de las líneas, todos los cambios de las otras líneas se realizarán dentro de 100 us. Las otras tres señales se alternarán como máximo un par de veces. El inicio, el final y la duración entre el cambio de estado que estas otras tres señales cambiarán varían según las métricas en el sistema que se conocen bien antes de que se produzca la señal de avance. Pero el tiempo es variable, por lo que la secuencia de pulsos y sus duraciones deben ser programables. El tiempo y la duración se conocen antes de que comience la secuencia.

Aquí está el problema, necesito precisión de fluctuación de sub microsegundos. El micro ARM de 120 MHz que estoy usando no puede garantizar esos perfiles de tiempo deterministas debido a la canalización y una serie de otras razones para mejorar el rendimiento. Podemos hacer nuestro mejor esfuerzo para diseñar el sistema para minimizar el jitter, pero quiero saber si utiliza un micro o DSP o CPLD más rápido, los PAL, etc. son una forma típica de obtener la precisión y la resolución que estoy buscando.

En el pasado, con un micro de 8 bits a 8 MHz con una instrucción por ciclo de reloj, podría escribir un ensamblador, poner el micro en reposo, despertar en la interrupción, contar algunos ciclos de reloj y tener una precisión de 0.25 us

¿Qué tecnología debo investigar para lograr esta resolución y precisión?

    

7 respuestas

15

No está claro qué son exactamente las señales que necesita generar y su tiempo en relación con las señales entrantes.

Sin embargo, 250 ns no es realmente tan difícil de lograr con algo como un dsPIC de la serie EP, por ejemplo. A una velocidad de instrucción de 70 MHz, eso le da hasta 17 ciclos de instrucción de fluctuación de fase permitida. Eso es mucho.

Si su señal entrante causa una interrupción, la generación de las señales de salida a partir de la temporización de instrucciones fijas le dará mucho menos de 17 ciclos de jitter. Sería aún mejor si la señal de entrada puede activar un generador PWM o similar. Sin embargo, no ha proporcionado suficiente información sobre la naturaleza de las señales de salida para saber si el hardware específico disponible en dichos micros sería aplicable.

    
respondido por el Olin Lathrop
6

Por lo general, puede lograr este tipo de tiempo real siempre y cuando la salida no dependa del software / interrupciones. Es decir, los pines no se configuran desde un ISR o similar, en cuyo caso tendrá fluctuación de microsegundos. La latencia de interrupción puede ser un tiempo estático, pero no contaría con ello, en caso de que se dispare una vez más de una interrupción a la vez, etc.

Es posible que pueda resolver esto con la función de comparación de salida del temporizador de hardware. Es decir, todos los pines relevantes se configuran cuando transcurre un temporizador, como por ejemplo cuando se usa PWM. Esto a menudo se puede hacer con el reloj del sistema o el reloj del sistema / 2 de precisión. Otras alternativas son DMA, si son compatibles con los pines específicos.

Esto puede funcionar hasta 50-100ns en algún lugar, donde estarás a merced de las características analógicas de los pines.

Y, por supuesto, no podrá obtener una mayor precisión de la que permite su oscilador. Ciertamente, no puede usar un oscilador RC incorporado, pero necesita usar un cristal de alta precisión o un oscilador externo.

    
respondido por el Lundin
5

¿DMA y un temporizador?

¿Un par de buses SPI y solo use los pines de datos (posiblemente de nuevo con DMA si necesita más de 32 intervalos de tiempo)?

Mi sensación es que debería ser factible si eliges tus pines IO correctamente y estás preparado para jugar algunos juegos de bajo nivel.

100ns tendría que pensar, pero tal vez sea un error con la carga de un chip ram QSPI y luego marcar el patrón de bits utilizando un temporizador como el reloj?

10ns es territorio FPGA.

    
respondido por el Dan Mills
4

Verifique si tiene temporizadores que puedan manejar múltiples pines, que generalmente se usan para el control del motor (generalmente 4 o 6, para puente H y trifásico respectivamente). En muchos casos, dichos temporizadores tienen registros de "precarga" que le permiten modificar sin problemas el período y el ciclo de trabajo, lo que significa que esencialmente puede generar una forma de onda arbitraria con ellos. Si se hace correctamente, estas formas de onda son precisas hasta la resolución del temporizador.

    
respondido por el Dmitry Grigoryev
2

Tal vez algo como un PSOC de Cypress con las células lógicas programables. Creo que Microchip tiene partes con capacidades similares. Son como microcontroladores con una funcionalidad FPGA pequeña y limitada que puedes personalizar. Parece que necesitará algún tipo de DMA o FPGA para cumplir con sus requisitos.

    
respondido por el gregb212
2

Los dispositivos STM32 tienen periféricos temporizadores muy potentes y configurables. Se pueden encadenar o sincronizar y ofrecer salidas con precisión de ciclo. Es posible que desee pasar un tiempo leyendo las hojas de datos de los dispositivos STM32L4 y H4 para comenzar, y tal vez revisar algunos de documentación específica .

Personalmente estoy usando los temporizadores junto con un FPGA para darme cronometraje y secuenciación de microsegundos para 32 salidas digitales. El FPGA no está haciendo nada específico de tiempo, sino que simplemente está MANDO los excelentes y configurables temporizadores del STM32 a una de las 32 salidas. El hardware final eliminará el STM32, pero para la creación de prototipos y el desarrollo no se puede superar.

    
respondido por el akohlsmith
1

Estoy haciendo algo muy similar en el trabajo con un DSP. Tengo un FPGA que lleva a cabo la parte de sincronización de precisión. Esperaba usar una onda cuadrada del DSP para probar el PLL para sincronizar dos FPGA. De hecho, descubrí que aunque las tolerancias de tiempo de FPGA se establecieron en alrededor de 0.01 en base a las tolerancias de reloj, mi DSP tenía muchas otras cosas que hacer mejor que 0.1us.

Aunque este es un bucle de procesamiento bastante completo. Con un bucle menos intensivo, podría ser mejor, por supuesto. Para las partes que realmente necesitaban ser deterministas, ejecutarlas desde el principio del bucle puede ayudar. Tenga en cuenta que, aunque la latencia de interrupción es predecible, ¡es muy distinta de cero! Para mi plataforma es de 91 tics de reloj a 456MHz. Fácilmente puedo obtener jitter sub-us de interrupciones, pero los retrasos de microsegundos necesitan que la latencia de interrupción se incluya en los cálculos.

    
respondido por el Graham

Lea otras preguntas en las etiquetas