реклама на сайте
подробности

 
 
> Измерение периода сигнала, (MSP430f6736)
SasaVitebsk
сообщение Apr 16 2014, 07:34
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Пытаюсь мерить период сигнала на MSP430f6736. Процессор затактирован от 32768 с умножителем 610.
Сигнал измеряю захватом таймера 3. К сигналу претензий нет. Получается разброс ~ 3%. Вроде как сам таймер примитивный до ужаса и никаких не вижу подводных камней. Кто может что подсказать? Возможно ли что у меня как-то тактовая плавает? Потому, что погрешность при измерении сигнала разной частоты в процентном соотношении сопоставима.
PS: Инициализирую так. (Нашёл в примерах)
CODE
// Выбор источников тактового сигнала и настройка PLL
#if DCOCLK <= 8000 //Set VCore = 0 for 8MHz clock
PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 0);
#elif DCOCLK <= 12000 //Set VCore = 1 for 12MHz clock
PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 1);
#elif DCOCLK <= 20000 //Set VCore = 2 for 20MHz clock
PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 1);
#else //Set VCore = 3 for 25MHz clock
PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 3);
#endif
//Initializes the XT1 crystal oscillator with no timeout
UCS_LFXT1Start(__MSP430_BASEADDRESS_UCS__, UCS_XT1_DRIVE0, UCS_XCAP_3);
//Set DCO FLL reference = REFO
UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_FLLREF, 0, UCS_CLOCK_DIVIDER_1);
//Set ACLK = REFO
UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_ACLK, 0, UCS_CLOCK_DIVIDER_1);
//Set Ratio and Desired MCLK Frequency and initialize DCO
UCS_initFLLSettle(__MSP430_BASEADDRESS_UCS__, DCOCLK, MPLL);
//Set MCLK = REF3 (DCO)
UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_MCLK, 3, UCS_CLOCK_DIVIDER_1);
//Set SMCLK = REF3 (DCO)
UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_SMCLK, 3, UCS_CLOCK_DIVIDER_1);
// Enable global oscillator fault flag
SFR_enableInterrupt(__MSP430_BASEADDRESS_SFR__, SFR_OSCILLATOR_FAULT_INTERRUPT);
// Enable global interrupt


PPS: Может кто-нибудь приведёт пример инициализации, гарантировано работающей в принципе на любой частоте порядка 20 МГц? (14-24)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
rezident
сообщение Apr 16 2014, 09:41
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SasaVitebsk @ Apr 16 2014, 12:34) *
Возможно ли что у меня как-то тактовая плавает? Потому, что погрешность при измерении сигнала разной частоты в процентном соотношении сопоставима.

Конечно плавает. Точнее в тактовой частоте присутствует большой джиттер. Связано это с особенностями функционированием DCO и FLL. Если хочется стабильности, то следует тактировать таймер от встроенного или внешнего кварцевого генератора напрямую, без использования FLL.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 16 2014, 11:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Спасибо большое за ответ.
Уважаемый rezident, поясните мне пожалуйста несколько моментов, если не затруднит. А то я читаю, но пока в голове тёмный лес. Изделие работает, остался лишь этот хомут.
В моём процессоре, насколько я видел, нет возможности установить обычный кварц. Поэтому этот момент отпадает. Из остальных источников остался только DCO, насколько я понимаю.
А там таже FLL. И как выйти из этого положения?
Если Вы говорите, что причина лишь в джитере, то могу ли я умножить частоту значительно больше, а потом поделить, например на 4?
Либо мне запускать чистый DCO. Другой таймер запустить от кварца и расчитывать текущую частоту DCO относительно частоты кварца. И это значение применять в расчётах?
Заранее благодарю за ответ. tort.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 16 2014, 11:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SasaVitebsk @ Apr 16 2014, 16:10) *
В моём процессоре, насколько я видел, нет возможности установить обычный кварц. Поэтому этот момент отпадает.

Можно поставить внешний кварцевый генератор (осциллятор) и подать частоту с него на вход TAxCLK. Для целей энергосбережения нужно использовать осциллятор с входом выключения генератора.
Цитата(SasaVitebsk @ Apr 16 2014, 16:10) *
Если Вы говорите, что причина лишь в джитере, то могу ли я умножить частоту значительно больше, а потом поделить, например на 4?
Либо мне запускать чистый DCO.

Причина не в частоте DCO, а принципе работы его модулятора. Модулятор работает пропуская/вставляя импульсы тактовой DCO. Отсюда и возникает джиттер, величина которого определяется длительностью вставленных/пропущенных тактовых импульсов DCO. См. раздел 5.2 UCS Operation в MSP430x5xx and MSP430x6xx Family User's Guide (Rev. M)
Цитата
The five MOD bits switch between the frequency selected by the DCO bits and the next-higher
frequency set by {DCO + 1}. When DCO = {31}, the MOD bits have no effect, because the DCO is
already at the highest setting for the selected DCORSEL range.

Чтобы избежать джиттера нужно работать только на крайних значениях модулятора (max в регистре модулятора) DCO. Синхронизацию FLL от внешнего источника (32кГц) по этой же причине (изменение значения регистра модулятора DCO для/при синхронизации) использовать нельзя.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 16 2014, 12:52
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(rezident @ Apr 16 2014, 14:44) *
Чтобы избежать джиттера нужно работать только на крайних значениях модулятора (max в регистре модулятора) DCO. Синхронизацию FLL от внешнего источника (32кГц) по этой же причине (изменение значения регистра модулятора DCO для/при синхронизации) использовать нельзя.

В доке на свой контроллер я нашёл необходимые значения для нужной мне частоты. Я думаю что я запущу один таймер на ACLK который запрограммирую от часового кварца (XTAL1CLK), а остальные частоты пущу от DCO CLK (3,31). В фоновом режиме буду рассчитывать частоту DCO относительно моего часового кварца. Рассчитанное значение буду использовать в расчётах.
Читаю читаю - весь мозг уже сломал. Не могу въехать как мне запрограммировать UCS. Не въезжаю как. Как мне запустить DCO без синхронизации от XTAL1CLK?

Может подскажете, будете так любезны.
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 16 2014, 15:07
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SasaVitebsk @ Apr 16 2014, 17:52) *
Читаю читаю - весь мозг уже сломал. Не могу въехать как мне запрограммировать UCS. Не въезжаю как. Как мне запустить DCO без синхронизации от XTAL1CLK?

Аппаратное управление FLL регистра модулятора UCSCTL0 отключается установкой бита DISMOD в регистре UCSCTL1. При этом регистр модулятора DCO (UCSCTL0) будет управляться только программно.
Только еще раз повторяю, что это вам не сильно поможет, если бы будете для модулятора использовать значения отличающиеся от MOD = 0x1F. Подстройка частоты генерации только с помощью DCORSEL (UCSCTL1) дает изменение частоты DCOCLK примерно вдвое. Подстройка с помощью битов DCO (UCSCTL0) изменяет частоту DCOCLK примерно на 10%. Если вас такая точность устроит, то пробуйте.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Apr 17 2014, 06:05
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



В принципе меня это устроит. Мне не надо менять частоту. Мне надо просто знать эту частоту, для того чтобы рассчитывать относительно неё другие параметры. Например частоту измеряемого сигнала и частоту USART.
За ответы Вам спасибо. Возникли также проблемы со встроенным ADC SD24B. При прогоне в термошкафе наблюдается инструментальная погрешность. Причём линейность не уходит, а плывёт ноль, как я понимаю. Поскольку это лишь одно из группы изделий, а мы находимся накануне сертификации, то решено остановить данную разработку. Все остальные изделия на базе stm32f. Так получилось, что на этих изделиях никаких проблем не вылезло.
Думаю, что сказалось незнание мной процессора MSP и отсутствие опыта работы с ним. С наскока, увы, не получилось ... Впрочем, как обычно ... ))
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 10:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016