1 votos

Comunicación RS485 - la placa se cuelga

Estoy utilizando RS485 aislado para la comunicación. La comunicación entre el MCU y el IC RS485 es a través de UART. IC soporta 500kbps datarate Configuración a) Velocidad en baudios - 460800 b) Cada 0.1s estoy enviando 288bits de datos desde la herramienta a la placa (RX), inicialmente funciona bien después de que a veces mis placas se cuelgan

¿Esto se debe a que la RX se está llenando y cuelga la placa o está relacionado con el hardware?

misma configuración si aumento el intervalo de tiempo a 1s, funciona bien sin ningún problema.

Por favor, ayúdeme a resolver el problema anterior, le agradecería su sugerencia.

2 votos

Necesitaríamos ver los esquemas de hardware y el código de software para adivinar siquiera dónde está el problema.

1voto

boss Puntos 71

Sospecho por tu pregunta que ya conoces la respuesta genérica :-) El trabajo que tiene que hacer tu código dentro de un bucle puede terminar de forma fiable en un segundo, pero posiblemente no en 100 ms. Al menos esa es una hipótesis inicial que vale la pena probar.

288 bits equivalen a 36 Bytes, ¿verdad? A 460800 bps deberías ser capaz de transferir 46 kB por segundo, o 4,6 kB por tu periodo de bucle más corto. Es decir, eso solo no explicaría los cuelgues. El código que se ejecuta en la placa que se cuelga puede tener otro trabajo duro que hacer, aparte de transmitir, o puede estar esperando a que el otro nodo RS485 responda, y los retrasos pueden sumar el período de 100 ms, y el software está escrito de tal manera que no es tolerante a esa situación... y realmente no importa si tienes interrupciones no manejadas o simplemente un código descuidado que se ejecuta en el "nivel de programación" básico (en primer plano). Si la placa no se cuelga inmediatamente, sino que tarda un tiempo aleatorio, quizás hay otras tareas / rutinas de servicio IRQ interfiriendo, que prolongan aleatoriamente la duración de su actividad en primer plano, o algo así. Las posibilidades son infinitas. Es difícil decir dónde está el fallo en un código que ni siquiera hemos visto.

Obviamente, el diablo está en los detalles, y usted no ha proporcionado ninguno.

Si quieres empezar a depurar a partir de los patrones de comunicación y los giros periódicos, te sugiero que consigas un osciloscopio o un analizador lógico o un PC con un puerto serie y capacidad de captura con marca de tiempo (¿ExtraPutty?) o incluso sólo un portátil con una entrada de audio HDA moderna, e intentes grabar el patrón de comunicaciones a ritmo de 1 s primero, para ver cuánto tiempo tarda realmente en completar cada ciclo. Para encontrar tu problema, necesitas medir, de alguna manera. Las sondas improvisadas no están prohibidas, siempre y cuando hagan el trabajo. Si tratas de usar una entrada de audio, ten cuidado de no dañarla con una sobretensión = presta atención a los niveles de señal y al aislamiento de la tierra cuando corresponda.

0 votos

Muchas gracias por el aporte

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X