Сбой последовательной связи MSP430 в холодную погоду

8

У меня есть продукт, использующий микропроцессор MSP430, который продается уже пару лет. Одной из задач MSP430 является связь по асинхронному последовательному каналу с маломощным радио.

С наступлением этой зимы была неприемлемая частота отказов (несколько процентов) при низкой температуре. Расследование показало, что последовательная связь с радио не работает. Генератор скорости передачи данных для последовательного порта питается SMCLK, который отделен от генератора MSP430 с цифровым управлением (DCO).

Почему последовательная связь не работает при низких температурах?

(Примечание: я уже решил проблему и скоро опубликую ответ. Подсказка: это была программная ошибка.)

markrages
источник

Ответы:

8

Какой MSP430 вы используете? У разных семейств разные часовые структуры и возможности.

DCO будет изменять частоту в зависимости от температуры, что приведет к отклонению скорости передачи данных от USART. У MSP есть датчик температуры (не очень точный). Вы можете изменить значения в регистрах управления DCO, чтобы вернуть частоту DCO в диапазон, но для этого потребуются откалиброванные таблицы поиска, охватывающие диапазон температур, который вы ожидаете увидеть. Некоторые устройства MSP имеют таблицы калибровки DCO, запрограммированные в одном из секторов флэш-памяти при изготовлении, но они полезны, только если они охватывают частоту, которую вы хотите использовать, и я не думаю, что они имеют значения температурной компенсации.

Есть ли у вас эталонный кварцевый генератор, который вы могли бы использовать в качестве источника калибровки? Я всегда проектировал бы в кристалле 32 кГц и использовал это на ACLK. Для скоростей до 9600 бод это можно использовать напрямую. Для более высоких скоростей передачи вам придется калибровать DCO по сигналу ACLK. Более новые детали имеют аппаратную FLL, которая будет делать это автоматически.

uɐɪ
источник
7

Итак, вот ответ:

Продукт имеет кристалл 32 кГц, и я кодировал процедуру настройки частоты DCO. Для регулировки частоты использовались два таймера, один из DCO и один из ACLK 32 кГц. Он был вызван прерыванием системы захвата / сравнения, так что он мог периодически перекалибровать себя во время работы.

К сожалению, я вставил начальную калибровку в неправильную часть моего кода запуска, где прерывания были отключены. Поэтому калибровка не проводилась до первого использования последовательного порта, и инициализация зависала в ожидании ответа на последовательном порту.

Частота DCO начинается с заводской калибровки, поэтому она работала при комнатной температуре.

Эти сюжеты рассказывают историю:

Во-первых, кривая температуры DCO: альтернативный текст

Теперь кривая после калибровки фактически работает: альтернативный текст

markrages
источник
1
Хорошая история! Это стоило много, чтобы исправить? : D
Тыблу
Интересно, что наклон меняется от первого графика ко второму. Есть теории? Приводит ли настройка DCO к более низкой частоте к худшему температурному коэффициенту?
W5VO
Обратите внимание, что ось Y изменяется между двумя графиками. И не читайте слишком много в них вообще. Деталь замораживали в домашней морозильной камере, и температуру измеряли во время прогрева до комнатной температуры с помощью термопары на дешевом MAS-345 ( elexp.com/tst_s345.htm ), который считывает только целые градусы. Затем я линейно интерполировал между изменениями на целую степень, чтобы составить сюжет.
markrages
5

Низкие температуры приводили к тому, что частота DCO возрастала настолько, что скорость передачи UART становилась слишком высокой? Вы измерили температуру, а затем компенсировали генератор в программном обеспечении?

W5VO
источник