|
Измерение периода сигнала, (MSP430f6736) |
|
|
|
Apr 16 2014, 07:34
|
Гуру
     
Группа: Свой
Сообщений: 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)
|
|
|
|
|
 |
Ответов
(1 - 6)
|
Apr 16 2014, 11:10
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Спасибо большое за ответ. Уважаемый rezident, поясните мне пожалуйста несколько моментов, если не затруднит. А то я читаю, но пока в голове тёмный лес. Изделие работает, остался лишь этот хомут. В моём процессоре, насколько я видел, нет возможности установить обычный кварц. Поэтому этот момент отпадает. Из остальных источников остался только DCO, насколько я понимаю. А там таже FLL. И как выйти из этого положения? Если Вы говорите, что причина лишь в джитере, то могу ли я умножить частоту значительно больше, а потом поделить, например на 4? Либо мне запускать чистый DCO. Другой таймер запустить от кварца и расчитывать текущую частоту DCO относительно частоты кварца. И это значение применять в расчётах? Заранее благодарю за ответ.
|
|
|
|
|
Apr 16 2014, 11:44
|
Гуру
     
Группа: Свой
Сообщений: 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 для/при синхронизации) использовать нельзя.
|
|
|
|
|
Apr 17 2014, 06:05
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
В принципе меня это устроит. Мне не надо менять частоту. Мне надо просто знать эту частоту, для того чтобы рассчитывать относительно неё другие параметры. Например частоту измеряемого сигнала и частоту USART. За ответы Вам спасибо. Возникли также проблемы со встроенным ADC SD24B. При прогоне в термошкафе наблюдается инструментальная погрешность. Причём линейность не уходит, а плывёт ноль, как я понимаю. Поскольку это лишь одно из группы изделий, а мы находимся накануне сертификации, то решено остановить данную разработку. Все остальные изделия на базе stm32f. Так получилось, что на этих изделиях никаких проблем не вылезло. Думаю, что сказалось незнание мной процессора MSP и отсутствие опыта работы с ним. С наскока, увы, не получилось ... Впрочем, как обычно ... ))
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|