Problemas con el GPS del módulo Honeywell Dead Reckoning

1

Esto se publicó anteriormente en el foro de Stack Exchange y me remitieron aquí.

Actualmente estoy intentando conectar un Honeywell DRM4000L a un módulo GPS. El DRM es un dispositivo de reconocimiento directo que toma una entrada de GPS y emite la ubicación por serie. Actualmente, tengo un módulo GPS GS407 conectado al DRM. Cada vez que pruebo la función de paso de GPS en el DRM, obtengo una salida fantasma.

También tengo un cable FTDI conectado al GPS y obtengo los datos NMEA correctos. Los datos provenientes del GPS están formateados correctamente cuando se conectan directamente a la computadora. Los datos DRM también están ingresando correctamente, pero no ven un flujo de datos NMEA y, por lo tanto, no se inicializan con los datos GPS. Solo tiene información de seguimiento basada en los sensores inerciales (INS).

El GPS está configurado en 9600 baudios y el puerto de host DRM está configurado en 9600, por lo que el DRM debería ver todos los datos GPS correctos. La velocidad en baudios desde el DRM a la computadora también es 9600.

¿Alguien está viendo algo que yo no veo? Gracias!

    
pregunta KK6FSL

1 respuesta

2

Parece que la solución se ha encontrado bastante en los comentarios, pero la repetiré aquí para la posteridad.

El problema es que uno de los dispositivos es un dispositivo serie de nivel de voltaje TTL y el otro es un dispositivo serie de nivel de voltaje RS-232. Los niveles de voltaje TTL son (esencialmente) 0V para un '0' y 5V para un '1'. Para la mayoría de las personas, esto es sencillo: lo bajo es bajo y lo alto es alto.

Los niveles de voltaje RS-232 son diferentes. Donde TTL tiene '0' y '1', RS-232 tiene (respectivamente) 'espacio' y 'marca'. 'Marca' se define como una tensión entre + 3V y + 15V y 'espacio' se define como una tensión entre -3V y -15V. Notará que estos son el inverso de los niveles TTL: un '1' o una señal verdadera es un voltaje negativo y el '0' o una señal falsa es un voltaje positivo.

KK6FSL observó (correctamente) que los datos en serie que estaba recibiendo parecían ser una inversión de los datos en serie adecuados. Dada la discrepancia de los dos niveles de voltaje, es sorprendente que este sea el caso, ¡los niveles de voltaje no deberían ser muy compatibles en absoluto! Estrictamente hablando, esto sería cierto, pero en el mundo real hay una sorprendente compatibilidad en los niveles de voltaje entre TTL y RS-232.

Por ejemplo, si un chip de nivel TTL está intentando leer una señal RS-232, entonces los niveles de voltaje funcionan bastante bien (aparte del hecho de que los niveles se invierten de lo que TTL espera). Suponiendo que la entrada TTL esté protegida de modo que no pueda ir más allá de 5 V y no más baja que 0 V (¡lo que puede no ser siempre el caso! ¡El chip TTL puede estar en peligro!) Una 'Marca' será 0 V y una 'Espacio' será 5V. Estos son niveles TTL perfectamente válidos y el chip podrá interpretarlos, ¡pero no reproducirá los datos originales!

En el caso inverso, un receptor RS-232 que lee señales de nivel TTL, un '1' sería 5V que está por encima del umbral de + 3V para un 'Espacio' que se registraría como un '0' lógico. Una señal de 0 V no debe registrarse como nada, ya que está fuera del rango RS-232 válido: no está por encima de +3 V o por debajo de -3 V. No está definido de acuerdo con el estándar y no debe ser nada en absoluto. Lamentablemente, muchos dispositivos de nivel de voltaje RS-232 son muy indulgentes con los voltajes fuera de rango y con mucho gusto asumirán que 0V es un valor válido. Creo que una de las razones anteriores fue que puede ahorrar dinero conectando directamente una línea de transmisión serial TTL a una línea de recepción RS-232 sin un chip especial en el medio. Un grupo de ingenieros baratos y perezosos pensaron que parecía una buena idea y lo mantuvieron en marcha, por lo que ahora tenemos chips de interfaz "estándar" RS-232 que en realidad no implementan el estándar.

Hay otra arruga aquí que es confusa. En RS-232 cuando no ocurre nada, el estado de la línea se llama inactivo. RS-232 define Inactivo como un 'Espacio' - este es un voltaje positivo. Cuando comienza un mensaje, el bit de inicio es una 'Marca' que es un voltaje negativo; por lo tanto, se produce una transición descendente y se utiliza para identificar cuándo comienza un mensaje. Se podría suponer que, dado que los niveles de voltaje se invierten para los mensajes seriales de nivel TTL, la línea estará inactiva a 0 V y el bit de inicio será 5 V. Eso sería coherente y tendría sentido, por supuesto, no se hace de esa manera. La serie TTL también está inactiva (generalmente) a 5 V y el bit de inicio es un '0' que es 0V. Por lo tanto, tiene la misma transición de flanco descendente para marcar el inicio del mensaje y luego todos los bits de datos se invierten correctamente. Si el valor Inactivo para TTL se invirtió simplemente de RS-232, entonces los datos no se invertirían sino que también se retrasarían en un bit o más (ya que la primera transición del flanco descendente sería un tiempo después del bit de inicio). Gracias a esta arruga, hay una inversión simple entre el nivel RS-232 y la serie TTL que tiene mucho sentido al principio, menos sentido después de un rato y luego simplemente te rindes y lo aceptas.

No asumas, sin embargo, que el párrafo anterior es definitivo. Los protocolos seriales son como opiniones: cada uno tiene uno y nadie realmente está de acuerdo. Hay dispositivos por ahí que tendrán inactivo en el '0' lógico en lugar de '1'. Las razones relacionadas con el diseño para esto se pierden con el tiempo, pero al final la razón es la misma: para hacer su trabajo más difícil.

    
respondido por el AngryEE

Lea otras preguntas en las etiquetas