Алексей ВМ1 1 November 18 Posted November 18 (edited) · Report post Добрый день, Пытаюсь измерить период GPS PPS сигнала. Используется ядро М4 в режиме стандалоне. Тактовая частота М4 209 МГц. Сигнал формируется GPS модулем с точностью не хуже 100 нс. Для измерения использую модуль захвата таймера TIM5. Борда тактируется генератором TXO с точностью 2.5ррм. TIM5 CCR1 выдает значение 208877646 +- несколько единиц вместо 209000000. Причем, если загрузить значение 208877646 в таймер TIM2, который тоже одноразово сбрасывается от GPS PPS сигнала, то видно, что на каждое прерывание TIM5 по захвату значение счетчика TIM2 смещается на величину примерно 122000. Разность между периодом GPS PPS сигнала и измеряемым около 122000 тиков, что соответствует примерно 580 мкс, это явно не задержка обработки прерывания, да и для периодического сигнала она не должна влиять на величину периода. Может кто-нибудь сталкивался с подобной проблемой, куда копать? Спасибо. Edited November 18 by Алексей ВМ1 Quote Share this post Link to post Share on other sites More sharing options...
engel65536 5 November 19 Posted November 19 · Report post Доброго утра. С STM32MP не работал, но указанные вами числа наводят на простую мысль. Вы не могли настроить input capture так, что ловите обе полярности фронта? 0.5 мс, как по мне, вполне похожа на длительность PPS-сигнала. Тогда вы будет получать у себя при захвате не период, а период за вычетом длительность импульса. Правда, не знаю, куда тогда теряется второе измерение захвата, которое должно показать малую величину, равную длительности импульса. Ну и если проблема не в этом - вы проверяли, что ваша частота тактирования правильная? Маловероятно, но всё же - или PLL не так настроен, или частота переключается во время работы. Я бы сделал с какого-нибудь таймера PWM с периодом в 1 с, смотрел бы осциллографом PPS-сигнал и выхлоп PWM, вручную подогнал бы фазу PWM через отладчик и посмотрел бы, не разбегаются ли сигналы на ваши 0.06%. Quote Share this post Link to post Share on other sites More sharing options...
Алексей ВМ1 1 November 19 Posted November 19 · Report post Добрый день! 1 час назад, engel65536 сказал: Вы не могли настроить input capture так, что ловите обе полярности фронта? Пробовал все настройки фронтов. Если ловить оба фронта, то сумма длительностей опять магическое число 208877646. 1 час назад, engel65536 сказал: Ну и если проблема не в этом - вы проверяли, что ваша частота тактирования правильная? Маловероятно, но всё же - или PLL не так настроен, или частота переключается во время работы. Остается только эта причина, если это не аппаратный косяк. Больше ничего в голову не приходит. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 103 November 19 Posted November 19 · Report post Предделители N - 1 вместо N в регистрах? Обычно такого рода ошибки примерно тут. Quote Share this post Link to post Share on other sites More sharing options...
Алексей ВМ1 1 November 19 Posted November 19 · Report post 4 часа назад, Arlleex сказал: Предделители N - 1 вместо N в регистрах? Обычно такого рода ошибки примерно тут. Для измеряющего таймера задан период, в два раза больший чем секундный интервал в клоках таймера. Остальные предделители нулевые htim_measure_pps.Instance = TIM5; htim_measure_pps.Init.Prescaler = 0; htim_measure_pps.Init.CounterMode = TIM_COUNTERMODE_UP; htim_measure_pps.Init.Period = TIM_PPS_WINDOW - 1; htim_measure_pps.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim_measure_pps.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim_measure_pps) != HAL_OK) { Error_Handler(); } sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0x00; if (HAL_TIM_IC_ConfigChannel(&htim_measure_pps, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } . Quote Share this post Link to post Share on other sites More sharing options...
Алексей ВМ1 1 November 20 Posted November 20 (edited) · Report post На буржуйском форуме ответили: in starter package, the clock TIM5 is defined as 208877930Hz Скорей всего, в этом причина, хотя у меня М4 в режиме стандалоне. Но все равно непонятно. Я измерил PPS в клоках таймера, потом записываю это число в другой таймер, который сидит на этой же частоте, и ШИМ, сгенеренный этим таймером (тоже PPS) не совпадает с измеряемым сигналом. Edited November 20 by Алексей ВМ1 Quote Share this post Link to post Share on other sites More sharing options...