Comunicação serial MSP430 com falha no tempo frio

8

Eu tenho um produto usando o microprocessador MSP430, que está sendo vendido há alguns anos. Um dos trabalhos do MSP430 é se comunicar através de uma série assíncrona em um rádio de baixa potência.

Com o início deste inverno, houve uma taxa inaceitável de falhas (vários por cento) na temperatura fria. A investigação descobriu que a comunicação serial com o rádio está falhando. O gerador de taxa de transmissão para a porta serial é alimentado pelo SMCLK, que é dividido do oscilador controlado digitalmente (DCO) do MSP430.

Por que a comunicação serial está falhando a baixas temperaturas?

(Nota: eu já resolvi o problema e postarei a resposta em breve. Dica: foi um bug do software.)

markrages
fonte

Respostas:

8

Qual MSP430 você está usando? As diferentes famílias têm diferentes estruturas e capacidades de relógio.

O DCO mudará de frequência com a temperatura, fazendo com que a taxa de transmissão USART se desvie das especificações. O MSP possui um sensor de temperatura (não muito preciso). Você pode alterar os valores nos registros de controle do DCO para trazer a frequência do DCO de volta à faixa, mas isso exigiria tabelas de consulta calibradas cobrindo a faixa de temperaturas que você espera ver. Alguns dos dispositivos MSP possuem tabelas de calibração de DCO programadas em um dos setores de flash na fabricação, mas são úteis apenas se cobrirem a frequência que você deseja usar e não acho que possuam valores de compensação de temperatura.

Você possui um oscilador de cristal de referência que possa ser usado como fonte de calibração? Eu sempre projetaria em um cristal de 32kHz e usaria isso no ACLK. Para taxas de transmissão de até 9600, isso pode ser usado diretamente. Para taxas de transmissão mais altas, você precisará calibrar o DCO contra o sinal ACLK. As peças mais recentes têm uma FLL de hardware que fará isso automaticamente.

uɐɪ
fonte
7

Então aqui está a resposta:

O produto possui um cristal de 32 kHz e eu havia codificado uma rotina para ajustar a frequência do DCO. O ajuste de frequência usou dois temporizadores, um do DCO e outro do ACLK de 32kHz. Foi acionado por uma interrupção do sistema de captura / comparação, para que pudesse se recalibrar periodicamente durante a operação.

Infelizmente, inseri a calibração inicial na parte errada do meu código de inicialização, onde as interrupções foram desativadas. Portanto, a calibração não ocorreu antes do primeiro uso da porta serial e a inicialização seria interrompida aguardando uma resposta na porta serial.

A frequência do DCO começa no valor calibrado de fábrica, e é por isso que estava trabalhando em temperatura ambiente.

Esses enredos contam a história:

Primeiro, a curva de temperatura do DCO: texto alternativo

Agora a curva após a calibração está realmente funcionando: texto alternativo

markrages
fonte
1
Boa história! Custou muito para consertar? : D
tyblu
É interessante que a inclinação mude do primeiro gráfico para o segundo gráfico. Alguma teoria? O ajuste do DCO em frequência mais baixa gera um coeficiente de temperatura pior?
W5VO
Observe que o eixo y muda entre os dois gráficos. E não leia muito sobre eles em geral. A peça foi congelada em um freezer doméstico e a temperatura foi medida durante o aquecimento até a temperatura ambiente com um termopar em um MAS-345 barato ( elexp.com/tst_s345.htm ) que lê apenas graus inteiros. Então eu interpolava linearmente entre as mudanças de grau inteiro para fazer o enredo.
markrages
5

As baixas temperaturas fizeram com que a frequência do DCO aumentasse o suficiente para fazer com que a taxa de transmissão do UART subisse muito alto? Você mediu a temperatura e depois compensou o oscilador no software?

W5VO
fonte