MSP430 comunicación en serie falla en clima frío

8

Tengo un producto que usa el microprocesador MSP430, que se viene vendiendo desde hace 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 fallos inaceptable (varios por ciento) en temperaturas frías. La investigación ha encontrado que la comunicación en serie con la radio está fallando. El generador de velocidad en 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 resolví el problema y publicaremos la respuesta pronto. Sugerencia: fue un error de software)

    
pregunta markrages

3 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 haciendo que la velocidad de transmisión de USART se desvíe de la especificación. 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 flash en la fabricación, pero 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 usaría esto en el ACLK. Para velocidades de transmisión de hasta 9600, se puede utilizar 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.

    
respondido por el uɐɪ
7

Así que aquí está la respuesta:

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

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

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

Estas tramas cuentan la historia:

Primero, la curva de temperatura DCO:

Ahoralacurvadespuésdelacalibraciónestáfuncionando:

    
respondido por el markrages
5

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

    
respondido por el W5VO

Lea otras preguntas en las etiquetas