Алексей ВМ1 1 18 ноября, 2023 Опубликовано 18 ноября, 2023 (изменено) · Жалоба Добрый день, Пытаюсь измерить период 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 мкс, это явно не задержка обработки прерывания, да и для периодического сигнала она не должна влиять на величину периода. Может кто-нибудь сталкивался с подобной проблемой, куда копать? Спасибо. Изменено 18 ноября, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
engel65536 12 19 ноября, 2023 Опубликовано 19 ноября, 2023 · Жалоба Доброго утра. С STM32MP не работал, но указанные вами числа наводят на простую мысль. Вы не могли настроить input capture так, что ловите обе полярности фронта? 0.5 мс, как по мне, вполне похожа на длительность PPS-сигнала. Тогда вы будет получать у себя при захвате не период, а период за вычетом длительность импульса. Правда, не знаю, куда тогда теряется второе измерение захвата, которое должно показать малую величину, равную длительности импульса. Ну и если проблема не в этом - вы проверяли, что ваша частота тактирования правильная? Маловероятно, но всё же - или PLL не так настроен, или частота переключается во время работы. Я бы сделал с какого-нибудь таймера PWM с периодом в 1 с, смотрел бы осциллографом PPS-сигнал и выхлоп PWM, вручную подогнал бы фазу PWM через отладчик и посмотрел бы, не разбегаются ли сигналы на ваши 0.06%. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 19 ноября, 2023 Опубликовано 19 ноября, 2023 · Жалоба Добрый день! 1 час назад, engel65536 сказал: Вы не могли настроить input capture так, что ловите обе полярности фронта? Пробовал все настройки фронтов. Если ловить оба фронта, то сумма длительностей опять магическое число 208877646. 1 час назад, engel65536 сказал: Ну и если проблема не в этом - вы проверяли, что ваша частота тактирования правильная? Маловероятно, но всё же - или PLL не так настроен, или частота переключается во время работы. Остается только эта причина, если это не аппаратный косяк. Больше ничего в голову не приходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 137 19 ноября, 2023 Опубликовано 19 ноября, 2023 · Жалоба Предделители N - 1 вместо N в регистрах? Обычно такого рода ошибки примерно тут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 19 ноября, 2023 Опубликовано 19 ноября, 2023 · Жалоба 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(); } . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Алексей ВМ1 1 20 ноября, 2023 Опубликовано 20 ноября, 2023 (изменено) · Жалоба На буржуйском форуме ответили: in starter package, the clock TIM5 is defined as 208877930Hz Скорей всего, в этом причина, хотя у меня М4 в режиме стандалоне. Но все равно непонятно. Я измерил PPS в клоках таймера, потом записываю это число в другой таймер, который сидит на этой же частоте, и ШИМ, сгенеренный этим таймером (тоже PPS) не совпадает с измеряемым сигналом. Изменено 20 ноября, 2023 пользователем Алексей ВМ1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться