Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 PWM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
pitt
Имеется, например, F4 Discovery board. Берем, например, TIM13. Подцепляем пин и генерируем PWM. Все просто, понятно и без проблем. Теперь надо выдать постоянный 0 или 1.
- Вопрос с нулем: Записываем 0 в CCR1. Чтобы таймер понапрасну не крутился, хочу его выключить(CEN = 0 в CR1). Когда это можно сделать? Сразу не проходит. Можете убедиться сами.
- Вопрос с 1. Если не перепрограммировать пин на GPIO возможно ли такое вообще? Можно, конечно, как и с 0 ВОВРЕМЯ выключить таймер, ну и снова вопрос: когда будет вовремя?

Заранее спасибо.
mantech
Цитата(pitt @ Oct 18 2015, 19:38) *
- Вопрос с нулем: Записываем 0 в CCR1. Чтобы таймер понапрасну не крутился, хочу его выключить(CEN = 0 в CR1). Когда это можно сделать? Сразу не проходит. Можете убедиться сами.


Что значит "сразу"?? Мгновенный переход пина в 0 ?? Ясно дело не пойдет, счетчик должен обнулиться, сбросить пин и уже в 1 его никогда не поставит, равно, как и запись 0xffff мгновенно не переведет пин в 1.
Если нужно такое условие, то нужно переключить функцию пина, остановить таймер и обнулить регистр, чтоб потом он начал считать "правильно".
pitt
Цитата(mantech @ Oct 18 2015, 12:49) *
Что значит "сразу"?? Мгновенный переход пина в 0 ?? Ясно дело не пойдет, счетчик должен обнулиться, сбросить пин и уже в 1 его никогда не поставит, равно, как и запись 0xffff мгновенно не переведет пин в 1.
Если нужно такое условие, то нужно переключить функцию пина, остановить таймер и обнулить регистр, чтоб потом он начал считать "правильно".

Переключать пин не хочу. Время переключения в 0/1 терпит. Прерывание тоже не хочу использовать. Хочу просто выключить таймер, когда его выход уже в нужном состоянии. Т.е. почистить SR и ждать event?
mantech
Цитата(pitt @ Oct 18 2015, 19:55) *
Переключать пин не хочу. Время переключения в 0/1 терпит. Прерывание тоже не хочу использовать. Хочу просто выключить таймер, когда его выход уже в нужном состоянии. Т.е. почистить SR и ждать event?


Если при этом "выбег" регистра особого значения не имеет, то да. Только учтите, что нужно успеть обрабатывать евент как минимум 2 раза за период ШИМ.
adnega
Цитата(pitt @ Oct 18 2015, 19:38) *
Чтобы таймер понапрасну не крутился, хочу его выключить

А в чем проблема? Пусть крутится.
mantech
Цитата(adnega @ Oct 18 2015, 20:12) *
А в чем проблема? Пусть крутится.


Предположу, что ТС хочет уменьшить энергопотребление.
adnega
Цитата(mantech @ Oct 18 2015, 20:15) *
Предположу, что ТС хочет уменьшить энергопотребление.

F4 и энергопотребление? Выключенный таймер - капля в море.
Перепрограммировать функцию пина нельзя - тоже странное требование.
pitt
Все надо делать чисто. Таймер не нужен- отключи.
Это не требование, а, считайте, каприз, лень, неохота...
adnega
Цитата(pitt @ Oct 18 2015, 22:21) *
Все надо делать чисто. Таймер не нужен- отключи.

Связи нет, скорее наоборот. Чистейший вариант: это 0 или ARR+1 в CCR.
pitt
Цитата(adnega @ Oct 18 2015, 15:47) *
Связи нет, скорее наоборот. Чистейший вариант: это 0 или ARR+1 в CCR.

Верно, Ваше предложение - это как раз и есть наоборот: пусть крутится вхолостую...
RadiatoR
pitt, посмотрите в регистре CCMR1 есть биты OCxM, там есть выбор 100 и 101 - это то, что вы ищиете в правильном виде
adnega
Цитата(pitt @ Oct 18 2015, 22:53) *
пусть крутится вхолостую...

Там нет механических изнашивающихся деталей, поэтому ничего страшного в работе таймера нет.
Кроме таймера в МК еще много чего "крутится". Тоже все будете отключать?
Не забываем, что на отключение тоже нужно потратить несколько инструкций, а это и расход памяти,
и расход тактов, и расход энергии, и усложнение алгоритма.

Цитата(ЯadiatoR @ Oct 19 2015, 08:59) *
pitt, посмотрите в регистре CCMR1 есть биты OCxM, там есть выбор 100 и 101 - это то, что вы ищиете в правильном виде

Да, это один из вариантов манипулирования настройками: чуть лучше, чем заменить функцию пина.
Но при этом прозрачность теряется, и код начинает зависеть от данных - можно и себя запутать, и тех, кто после вас будет работать с кодом.
Помимо этого, теряется синхронность PWM, и возможны ситуации выдачи импульсов неконтролируемой формы.
mantech
Цитата(adnega @ Oct 19 2015, 10:20) *
Там нет механических изнашивающихся деталей,


Это отжег, дак отжег biggrin.gif

Сам, честно говоря, никогда его не отключаю, управляю пином по содержанию регистра совпадения. Недостатков не замечал...

RadiatoR
Цитата(adnega @ Oct 19 2015, 10:20) *
Да, это один из вариантов манипулирования настройками: чуть лучше, чем заменить функцию пина.
Но при этом прозрачность теряется, и код начинает зависеть от данных - можно и себя запутать, и тех, кто после вас будет работать с кодом.
Помимо этого, теряется синхронность PWM, и возможны ситуации выдачи импульсов неконтролируемой формы.


В принципе, учитывая, что это это обычный ШИМ, то неконтролируемая форма первого импульса не сделает ничего плохого
adnega
Цитата(ЯadiatoR @ Oct 19 2015, 11:22) *
неконтролируемая форма первого импульса не сделает ничего плохого

ТС у нас перфекционист. Может, ему так не понравится...
esaulenka
Что-то я не понимаю, откуда весь сыр-бор.
Таймер перестаёт тикать, если в ARR ноль.
У таймера есть штатная возможность обновлять внутренний ARR в начале нового цикла.

Что ещё надо?
adnega
Цитата(esaulenka @ Oct 19 2015, 12:01) *
Таймер перестаёт тикать,
Что ещё надо?

Видимо, отключать тактирование таймера в RCC, иначе все продолжит "крутиться".
RadiatoR
да и бог с ним, это же не какой-то там энергосберегающирй девайс...
Иначе вопросы были бы совсем другие...
pitt
Цитата(ЯadiatoR @ Oct 19 2015, 01:59) *
pitt, посмотрите в регистре CCMR1 есть биты OCxM, там есть выбор 100 и 101 - это то, что вы ищиете в правильном виде

Thank you.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.