Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по синхронизации таймеров
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Sprite
Доброго всем времени суток.

Имеется 2 таймера, скажем 1 и 2. Период одного таймера всегда в 2 раза больше периода второго.
Требуется получить вот такие сигналы:
Нажмите для просмотра прикрепленного файла
Можно ли сделать с помощью синхронизации таймеров так, чтобы при изменении периода одного сигнала (черного) автоматически менялся период второго (синий)? Программирую на stm32f103. Заранее спасибо.
Dog Pawlowa
Какое требование к "синхронности"?
Может, проще триггер снаружи поставить?
Sprite
Цитата(Dog Pawlowa @ Feb 4 2011, 22:44) *
Какое требование к "синхронности"?
Может, проще триггер снаружи поставить?


Таймеры должны работать синхронно - фронты (восходящий и ниспадающий) полупериода таймера 1(синего) такт в такт должны совпадать с восходящими фронтами таймера 2(черного). Если период таймера 2 увеличивается на 1 такт, то соответственно период таймера 1 увеличивается на 2 такта. Насчет внешней логики думал - но хотелось бы обойтись без нее.
DpInRock
Совпадать два фронта не будут НИКОГДА в жизни. Поэтому вас и спросили о точности.

Из одного таймера с максимальной частотой можно это сделать программно. По прерыванию делаем делитель. И все.
Примерно так.

Процедура обработки прерывания (таймер на частоте в два раза большей, чем самая максимальная частота на выходе портов)
volatile unsigned int a;
...
{
a++;
*PORT=a;// вывод в порт
}

Получаем синхронные ногодрыганья нужных частот.
Только все это будет с точностью реакции на прерывание (плюс другие прерывания, если нет влложенных) и прочая...
Sprite
Цитата(DpInRock @ Feb 5 2011, 11:55) *
Совпадать два фронта не будут НИКОГДА в жизни. Поэтому вас и спросили о точности.


Тут я с Вами не согласен. Если периоды таймеров одинаковы - то это возможно и лично проверено. В прерывании одного таймера я корректирую значние счетчика другого и выставляю равные периоды. Таймеры работают синхронно такт в такт (разумеется других прерываний нет). А вот если периоды отличаются в 2 раза, то не получается, поэтому я и спросил о возможности синхнонизации таймеров, хотелось бы решить этот вопрос на аппаратном уровне, не прибегая к внешней логике.
rezident
К сожалению я не специалист по таймерам STM32, но в MSP430 требуемый режим делается элементарно. Причем именно аппаратно. Один compare-канал таймера (CCR0 Timer_A) работает в режиме TOGGLE, а второй (CCR1) в режиме RESET/SET. Значение CCR0 определяет общий период.
Извините, что не совсем в тему laughing.gif
sergeeff
Цитата(Sprite @ Feb 5 2011, 15:06) *
Тут я с Вами не согласен. Если периоды таймеров одинаковы - то это возможно и лично проверено. В прерывании одного таймера я корректирую значние счетчика другого и выставляю равные периоды. Таймеры работают синхронно такт в такт (разумеется других прерываний нет). А вот если периоды отличаются в 2 раза, то не получается, поэтому я и спросил о возможности синхнонизации таймеров, хотелось бы решить этот вопрос на аппаратном уровне, не прибегая к внешней логике.


Если вы это делаете программно, то совершенно очевидно, это невозможно. Вы не можете одной командой одновременно загрузить оба таймера.
rezident
Цитата(sergeeff @ Feb 5 2011, 18:20) *
Вы не можете одной командой одновременно загрузить оба таймера.
Вообще-то значение регистра compare или match не обязательно загружается напрямую программной записью. Есть режимы с синхронной загрузкой этих значений. По крайней мере в LPC17xx и MSP430 такой режим имеется. Опять извиняюсь, что встрял, не имея конкретных знаний, о таймерах именно STM32.
Sprite
Sergeeff
Цитата(sergeeff @ Feb 5 2011, 19:20) *
Если вы это делаете программно, то совершенно очевидно, это невозможно. Вы не можете одной командой одновременно загрузить оба таймера.

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

rezident:
Спасибо Вам за наводку, Ваш совет всегда в тему (не раз уже выручали), попробую покопать в сторону расширенного таймера (TIM1), может там что-нибудь найду.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.