Problemas con el GPS del módulo de navegación a estima de Honeywell

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

Actualmente estoy tratando de conectar un Honeywell DRM4000L a un módulo GPS. El DRM es un dispositivo de navegación a estima que toma una entrada de GPS y emite la ubicación en 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 un resultado incomprensible.

También tengo un cable FTDI conectado al GPS y obtengo los datos NMEA correctos. Los datos que provienen del GPS tienen el formato correcto cuando se conectan directamente a la computadora. Los datos DRM también ingresan correctamente, pero no ven un flujo de datos NMEA y, por lo tanto, no se inicializa con los datos GPS. Solo tiene información de seguimiento basada en los sensores de inercia (INS).

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

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

¡Bienvenido a EE.SE! Proporcione un enlace a las especificaciones del hardware en cuestión porque la mayoría de nosotros no lo conocemos. Además, no use palabras como "galimatías", díganos exactamente lo que ve.
@Joe Hass - Está bien; gracias por la bienvenida y gracias por la respuesta. El enlace para la hoja de datos es: www51.honeywell.com/aero/common/documents/…
@Joe Hass: lo que parece que estoy obteniendo es q_qgg............c.............Q...........}.w.....}que parecen ser datos en serie invertidos. Espero que el código NMEA estándar se parezca a algo $GPGGA,024542.00,3417.37510,N,11834.07255,W,2,10,1.16,449.6,M,-32.6,M,,0000*61, pero de alguna manera cuando pasa a través del módulo de cálculo de muertos, se invierte.
Estoy pensando ahora que podría ser que se necesita un inversor de serie, pero no un convertidor de nivel entre el GPS y el DRM. ¿Alguien podría verificar si este es el caso y si podría o no obtener un GPS diferente para resolver este problema? El GPS que estoy usando ahora es el GS407 de Sparkfun.com
¿Cómo estás conectando el GPS al DRM? Su GPS especifica una interfaz de nivel lógico TTL mientras que el DRM especifica una interfaz RS-232. Además de los diferentes niveles de señal, se invierte una interfaz serial de nivel lógico, en comparación con una señal RS-232. Los convertidores de nivel RS232 estándar, como el MAX232, invierten automáticamente las señales.
@DoxyLover - Sí; Me acabo de dar cuenta de eso también. Tuve que decirle al chip FTDI conectado desde el DRM a la computadora que invirtiera la señal. Conecté la salida GPS directamente a la entrada DRM. Acabo de leer la hoja de datos nuevamente y me di cuenta de que decía que era RS-232. Envié un correo electrónico para verificar eso con el fabricante, ya que su versión del kit de desarrollo usaba un chip FTDI para conectarse al USB, pero creo que podrían tener un convertidor RS-232 a TTL en la placa de desarrollo. Actualizaré la publicación mañana y creo que esto puede resolver mi problema. ¡Gracias por toda tu ayuda!
¿Alguien ha oído hablar de un módulo GPS RS232 que es RS232 directo? En este punto, voy a necesitar dos MAX232 si voy a usar un microprocesador TTL GPS y TTL.
¿Creo que los MAX3232 también funcionarían? Esos son los únicos que Sparkfun ha desglosado en PTH.
Sí, el MAX3232 funcionará igual de bien. Casi cualquier traductor de nivel lógico/RS-232 funcionará.

Respuestas (1)

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

El problema es que uno de los dispositivos es un dispositivo serial de nivel de voltaje TTL y el otro es un dispositivo serial de nivel de voltaje RS-232. Los niveles de voltaje TTL son (esencialmente) 0V para un '0' y 5V para un '1'. Esto es sencillo de entender para la mayoría de la gente: bajo es bajo y 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 un voltaje entre +3V y +15V y 'espacio' se define como un voltaje entre -3V y -15V. Notará que estos son los inversos de los niveles TTL: una señal '1' o verdadera es un voltaje negativo y la señal '0' o falsa es un voltaje positivo.

KK6FSL notó (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 cantidad sorprendente de compatibilidad en los niveles de voltaje entre TTL y RS-232.

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

Para el caso inverso, un receptor RS-232 que lee señales de nivel TTL, un '1' sería 5 V, que está por encima del umbral de +3 V para un 'Espacio' que se registraría como un '0' lógico. Una señal de 0V no debería registrarse como nada porque está fuera del rango RS-232 válido: no está por encima de +3V ni por debajo de -3V. No está definido según el estándar y no debería ser nada en absoluto. Lamentablemente, muchos dispositivos de nivel de voltaje RS-232 son muy indulgentes con los voltajes fuera de rango y con gusto asumirán que 0V es un valor válido. Creo que una razón anterior para esto 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 perezosos y baratos pensaron que sonaba como una buena idea y la mantuvieron, así que ahora tenemos RS-232 'estándar'

Hay otra arruga aquí que es confusa. En RS-232, cuando no pasa nada, el estado de la línea se llama Idle. 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 esto se usa para identificar cuándo comienza un mensaje. Se supondría que dado que los niveles de voltaje están invertidos para los mensajes seriales de nivel TTL, la línea estaría inactiva a 0 V y el bit de inicio sería de 5 V. Eso sería coherente y tendría sentido, así que, por supuesto, no se hace de esa manera. La serie de nivel TTL también (generalmente) está inactiva a 5V 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 luegotodos los bits de datos están correctamente invertidos. Si Idle for TTL simplemente se invirtiera desde RS-232, los datos no se invertirían simplemente, sino que también se retrasarían un bit o más (ya que la primera transición de flanco descendente sería un tiempo después del bit de inicio). Gracias a esta característica, hay una simple inversión entre el nivel RS-232 y el nivel TTL en serie que tiene mucho sentido al principio, pierde sentido después de un rato y luego te rindes y lo aceptas.

Sin embargo, no asuma que el párrafo anterior es definitivo. Los protocolos en serie son como opiniones: todos tienen una y nadie está realmente de acuerdo. Hay dispositivos que tendrán Idle en '0' lógico en lugar de '1'. Las razones relacionadas con el diseño de esto se pierden en el tiempo, pero al final la razón es la misma: hacer su trabajo más difícil.

TTL y CMOS son estándares diferentes para los voltajes que se supone que deben ser las E/S digitales. interfacebus.com/voltage_threshold.html hace un buen trabajo al explicar cuáles son las características importantes y enumerarlas para varios estándares diferentes.
¡Gracias! Iba a cerrar la publicación, pero no sabía que tanta gente monitoreaba las publicaciones, así que estaba esperando para confirmar con el fabricante las diferencias entre CMOS y TTL. Como referencia, los valores predeterminados del módulo en RS-232 y CMOS se pueden cambiar cambiando los puentes. Dado que el GPS y Arduino son TTL, solo estoy usando un convertidor RS-232 a TTL (MAX3232). Gracias por toda la ayuda chicos!