La comunicación en serie MSP430 falla en climas fríos

8

Tengo un producto que utiliza el microprocesador MSP430, que ha estado vendiéndose durante un par de años. Uno de los trabajos del MSP430 es comunicarse a través de una serie asíncrona a una radio de baja potencia.

Con el inicio de este invierno, ha habido una tasa de falla inaceptable (varios por ciento) en la temperatura fría. La investigación ha encontrado que la comunicación en serie con la radio está fallando. El generador de baudios para el puerto serie es alimentado por SMCLK, que se divide del oscilador controlado digitalmente (DCO) del MSP430.

¿Por qué falla la comunicación en serie a bajas temperaturas?

(Nota: ya he resuelto el problema y publicaré la respuesta pronto. Sugerencia: fue un error de software).

markrages
fuente

Respuestas:

8

¿Qué MSP430 estás usando? Las diferentes familias tienen diferentes estructuras y capacidades de reloj.

El DCO cambiará la frecuencia con la temperatura, causando que la velocidad de transmisión de USART se desvíe de las especificaciones. El MSP tiene un sensor de temperatura (no muy preciso). Puede cambiar los valores en los registros de control de DCO para que la frecuencia de DCO vuelva a estar dentro del rango, pero esto requeriría tablas de búsqueda calibradas que cubran el rango de temperaturas que espera ver. Algunos de los dispositivos MSP tienen tablas de calibración de DCO programadas en uno de los sectores de flash en la fabricación, pero estos solo son útiles si cubren la frecuencia que desea utilizar, y no creo que tengan valores de compensación de temperatura.

¿Tiene un oscilador de cristal de referencia que podría usar como fuente de calibración? Siempre diseñaría en un cristal de 32 kHz y lo usaría en el ACLK. Para velocidades en baudios de hasta 9600, esto se puede usar directamente. Para velocidades de transmisión más altas, tendrá que calibrar el DCO contra la señal ACLK. Las partes más nuevas tienen un FLL de hardware que lo hará automáticamente.

uɐɪ
fuente
7

Así que aquí está la respuesta:

El producto tiene un cristal de 32 kHz, y yo había codificado una rutina para ajustar la frecuencia de DCO. El ajuste de frecuencia usó dos temporizadores, uno del DCO y otro del ACLK de 32 kHz. Fue impulsado por una interrupción del sistema de captura / comparación, para que pudiera recalibrarse periódicamente durante la operación.

Desafortunadamente, inserté la calibración inicial en la parte incorrecta de mi código de inicio, donde se desactivaron las interrupciones. Por lo tanto, la calibración no se realizó antes del primer uso del puerto serie, y la inicialización se colgaría esperando una respuesta en el puerto serie.

La frecuencia de DCO comienza en el valor calibrado de fábrica, por lo que funcionaba a temperatura ambiente.

Estas tramas cuentan la historia:

Primero, la curva de temperatura DCO: texto alternativo

Ahora la curva después de la calibración realmente está funcionando: texto alternativo

markrages
fuente
1
¡Buena historia! ¿Costó mucho arreglarlo? : D
tyblu
Es interesante que la pendiente cambie del primer gráfico al segundo gráfico. Alguna teoria? ¿Ajustar el DCO a una frecuencia más baja le da un coeficiente de temperatura peor?
W5VO
Observe que el eje y cambia entre las dos gráficas. Y no leas demasiado en general. La parte se congeló en un congelador doméstico y la temperatura se midió durante el calentamiento a temperatura ambiente con un termopar en un MAS-345 barato ( elexp.com/tst_s345.htm ) que solo lee grados enteros. Luego interpolé linealmente entre cambios de grado completo para hacer la trama.
markrages
5

¿Las bajas temperaturas hicieron que la frecuencia de DCO aumentara lo suficiente como para que la velocidad de transmisión UART aumentara demasiado? ¿Midió la temperatura y luego compensó el oscilador en el software?

W5VO
fuente