Die serielle MSP430-Kommunikation schlägt bei kaltem Wetter fehl

8

Ich habe ein Produkt mit dem Mikroprozessor MSP430, das seit einigen Jahren verkauft wird. Eine der Aufgaben des MSP430 besteht darin, über eine asynchrone serielle Verbindung mit einem Funkgerät mit geringem Stromverbrauch zu kommunizieren.

Mit Beginn dieses Winters gab es eine inakzeptable Ausfallrate (mehrere Prozent) bei kalten Temperaturen. Die Untersuchung ergab, dass die serielle Kommunikation mit dem Radio fehlschlägt. Der Baudratengenerator für die serielle Schnittstelle wird von SMCLK gespeist, das vom digital gesteuerten Oszillator (DCO) des MSP430 getrennt ist.

Warum schlägt die serielle Kommunikation bei niedrigen Temperaturen fehl?

(Hinweis: Ich habe das Problem bereits gelöst und werde die Antwort bald veröffentlichen. Hinweis: Es war ein Softwarefehler.)

Markrages
quelle

Antworten:

8

Welchen MSP430 verwenden Sie? Die verschiedenen Familien haben unterschiedliche Uhrstrukturen und -fähigkeiten.

Der DCO ändert die Frequenz mit der Temperatur, wodurch die USART-Baudrate von der Spezifikation abweicht. Der MSP verfügt über einen Temperatursensor (nicht sehr genau). Sie können die Werte in den DCO-Steuerregistern ändern, um die DCO-Frequenz wieder in den Bereich zu bringen. Dies würde jedoch kalibrierte Nachschlagetabellen erfordern, die den erwarteten Temperaturbereich abdecken. Einige der MSP-Geräte verfügen über DCO-Kalibrierungstabellen, die bei der Herstellung in einen der Flash-Sektoren programmiert wurden. Diese sind jedoch nur dann nützlich, wenn sie die Frequenz abdecken, die Sie verwenden möchten, und ich glaube nicht, dass sie Temperaturkompensationswerte haben.

Haben Sie einen Referenzkristalloszillator, den Sie als Kalibrierungsquelle verwenden können? Ich würde immer in einem 32-kHz-Kristall entwerfen und dies auf dem ACLK verwenden. Für Baudraten bis 9600 kann dies direkt verwendet werden. Für höhere Baudraten müssen Sie den DCO gegen das ACLK-Signal kalibrieren. Die neueren Teile haben eine Hardware-FLL, die dies automatisch erledigt.

uɐɪ
quelle
7

Hier ist die Antwort:

Das Produkt hat einen 32-kHz-Kristall, und ich hatte eine Routine zum Einstellen der DCO-Frequenz codiert. Bei der Frequenzanpassung wurden zwei Timer verwendet, einer von DCO und einer von 32 kHz ACLK. Es wurde durch eine Unterbrechung des Erfassungs- / Vergleichssystems ausgelöst, so dass es sich während des Betriebs regelmäßig neu kalibrieren konnte.

Leider habe ich die Erstkalibrierung im falschen Teil meines Startcodes eingefügt, wo die Interrupts deaktiviert wurden. Daher wurde die Kalibrierung nicht vor der ersten Verwendung der seriellen Schnittstelle durchgeführt, und die Initialisierung blieb hängen und wartete auf eine Antwort an der seriellen Schnittstelle.

Die DCO-Frequenz beginnt beim werkseitig kalibrierten Wert, weshalb sie bei Raumtemperatur arbeitete.

Diese Handlungen erzählen die Geschichte:

Zunächst die DCO-Temperaturkurve: Alt-Text

Jetzt funktioniert die Kurve nach der Kalibrierung tatsächlich: Alt-Text

Markrages
quelle
1
Gute Geschichte! Hat die Reparatur viel gekostet? : D
Tyblu
Das ist interessant, dass sich die Steigung vom ersten zum zweiten Diagramm ändert. Irgendwelche Theorien? Gibt eine niedrigere Frequenz des DCO einen schlechteren Temperaturkoeffizienten?
W5VO
Beachten Sie, dass sich die y-Achse zwischen den beiden Diagrammen ändert. Und lesen Sie im Allgemeinen nicht zu viel hinein. Das Teil wurde in einem Haushaltsgefrierschrank eingefroren und die Temperatur wurde während des Aufwärmens auf Raumtemperatur mit einem Thermoelement auf einem billigen MAS-345 ( elexp.com/tst_s345.htm ) gemessen, das nur ganzzahlige Grad anzeigt . Dann interpolierte ich linear zwischen Änderungen des gesamten Grades, um die Darstellung zu erstellen.
Markrages
5

Die niedrigen Temperaturen führten dazu, dass die DCO-Frequenz so stark anstieg, dass die UART-Baudrate zu hoch stieg. Sie haben die Temperatur gemessen und dann den Oszillator in der Software kompensiert?

W5VO
quelle