¿Qué tan críticas son las frecuencias UART?

16

Voy a usar un cristal de 8 MHz para ejecutar mi microcontrolador a 16 MIPS (PLL 4x, instrucciones de 2 ciclos). Sin embargo, 8 MHz no se divide en ninguna frecuencia UART AFAIK ... ¿qué tan críticos son? estas frecuencias? Planeo usar 115.200 baudios.

¿Se puede ejecutar UART dentro de ± 1%? Si esto no funciona, ¿qué frecuencia debo usar? (Me gustaría acercarme lo más posible a 16 MIPS, para lograr la máxima velocidad de procesamiento). Si importa, estoy usando un PIC24FJ64GA004.

    
pregunta Thomas O

4 respuestas

12

Si estás dentro del 1%, deberías estar bien.

Supongamos que su UART utiliza un reloj de sobremuestreo de 16x, por ejemplo, puede configurarlo en 1,843,200 Hz a 16x de sobremesa de 115,200 bps. (el sobremuestreo de este tipo es bastante común) Esto permite que el UART cuente 8 relojes en exceso desde el flanco descendente del bit de inicio, para que pueda ubicar el centro de las celdas de bit dentro de +/- un período del reloj adicional, después de que cuenta con 16 períodos del reloj para determinar cuándo muestrear datos.

Si asume que puede golpear el centro del bit de inicio, entonces para mantener el muestreo de datos en serie en las celdas de bits correctas en 8 bits de datos, la frecuencia del reloj debe permanecer entre (8-0.5) / 8 y ( 8 + 0.5) / 8, o +/- 6.25% de la tasa de bits deseada. Un mayor overclocking se acerca a la condición ideal de golpear el centro del bit de inicio, pero 8x o 16x es generalmente lo suficientemente cerca como para suponer que funcionará una falta de coincidencia del 5%.

Sin embargo, no se puede contar con que el otro lado esté perfectamente en frecuencia. Si conecta un dispositivo que es 4% rápido a un dispositivo que es 4% lento, tendrá un problema. Me he topado con al menos un caso en el que una PC se estaba ejecutando un poco lenta, y un dispositivo un poco rápido, y las dos solo podían comunicarse de forma marginal, aunque el mismo dispositivo estaba bien con otras PC, y la PC estaba bien con otras dispositivos (O-scoped estos a aproximadamente 112kbps y 119kbps) Por esa razón es bueno tratar de alcanzar la frecuencia nominal lo más cerca posible. Nunca he visto nada dentro del 2% de los problemas nominales nominales.

Lo habitual es usar una frecuencia de reloj maestra que proporcione un número entero múltiple de la frecuencia de sobre muestreo de UART deseada por la velocidad de transmisión. Por ejemplo, si desea que una CPU funcione a unos 8MHz, puede usar un oscilador de 7.3728MHz, que puede dividirse por 4 para obtener 1.8432MHz, que es exactamente 16 veces 115200.

    
respondido por el JustJeff
4

Las menciones de 1% @JustJeff no son necesarias. La mayoría de los UART permiten un error de medio bit en el último bit. La mayoría de las veces, una trama consta de 1 bit de inicio, 8 bits de datos y 1 bit de parada, para un total de 10 bits. La mitad de un bit en 10 bits es del 5% (el 6.25% de JustJeff no toma en cuenta los bits de inicio y parada).

    
respondido por el stevenvh
1

JustJeff olvidó el bit de inicio, pero Stevenh agregó el bit de parada. Asumiendo el protocolo común de 8 bits de datos, 1 bit de inicio y ningún bit de paridad (el número de bits de parada no importa), hay 8 1/2 bits de tiempo desde el borde anterior del bit de inicio hasta el centro de la Último bit de datos. En general, desea que el receptor muestree este último bit dentro de un tiempo de 1/4 bit. Tenga en cuenta que 1/2 bit es el umbral garantizado para fallar. Cualquier cosa cerca de allí se vuelve irrealizable ya que siempre hay un poco de ruido eléctrico y fluctuaciones.

1/4 dividido por 8 1/2 = 2.94%.

Como mencionó JustJeff, la mayoría de las implementaciones de UART muestrean los datos entrantes con un reloj asíncrono de 16x. Eso agrega otra incertidumbre de tiempo de 1/16 bit ya que ese es el error con el cual se puede medir el borde inicial del bit de inicio. 1/16 bit tiempo fuera de 8 1/2 bits es otro .74%. Eso sale del presupuesto de error calculado anteriormente. Usted termina con un 2,2% de desajuste de reloj permitido para que el receptor muestree el último bit dentro de 1/4 bit de su centro.

Como han dicho otros, el uso de un cristal de 7.3728 MHz es una práctica común cuando se requiere una velocidad de transmisión precisa. Por lo general, puede hacer que la CPU se ejecute cerca de su velocidad máxima mientras alcanza la velocidad en baudios de UART dentro del error Crystal.     

respondido por el Olin Lathrop
1

Un punto que aún no se menciona es que algunos dispositivos esperan transmitir un byte de datos por cada byte de datos que reciben. Si un dispositivo de este tipo recibe datos de forma continua, su velocidad de transmisión es incluso un 0,1% más lenta que la del dispositivo de transmisión, y no tiene la capacidad de enviar bits de parada ligeramente reducidos, su salida se retrasará un byte por cada 1000 consecutivos bytes que ingresan. Si el dispositivo está limitado a 16 bytes de almacenamiento en búfer, eliminará un byte de datos después de pasar aproximadamente 16,000 y luego perderá aproximadamente un byte por mil. Vale la pena observar que los llamados módems "1200 baudios" realmente funcionan a una velocidad ligeramente superior a 1200 bits / segundo (creo que es aproximadamente 1202) precisamente por este motivo (de modo que incluso si el transmisor es un 0,15% más rápido de lo que debería) ser, el módem todavía pasará a través de todos los datos).

    
respondido por el supercat

Lea otras preguntas en las etiquetas