Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103RB6 необходимо получить сетку частот
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
vilkin
Есть на плате STM32F103RB6 необходимо получить сетку частот.
Частоты нужны одновременно 48Мгц, 24Мгц, 12Мгц и 6Мгц.
Фазовые сдвиги между ними не принципиальны.
Можно ли требуемое получить средствами только STM32?
Желательно не отрывая её от основных задач.
Была мысль использовать DMA выкидывая в порт GPIO из RAM последовательность чисел от 0 до 15.
Но я так понял, не укладываемся по скорострельности... или я ошибаюсь?
Остается в уме только один вариант вывести мастер клок 48Мгц наружу и поделить его двоичным счетчиком.
Может есть варианты без лишних компонентов?
scifi
А таймеров там нет что ли?
vilkin
Цитата(scifi @ Mar 9 2016, 15:51) *
А таймеров там нет что ли?
Таймера есть... только не соображу как их использовать? Одним не справишься тут, а 4 штуки жалко тратить...
scifi
Один таймер способен выдавать две частоты: F и F/2. Чтобы получить F, на одном из каналов делаем, например, режим ШИМ. Чтобы получить F/2, на другом канале того же таймера делаем режим "toggle on match".
Короче, двух таймеров должно хватить.
KnightIgor
Цитата(vilkin @ Mar 9 2016, 11:09) *
Таймера есть... только не соображу как их использовать? Одним не справишься тут, а 4 штуки жалко тратить...

Если жалко внутренних таймеров, которых дофига, можно вернуться к Вашей же идее поставить одну микросхему счетчика (161 или 393) снаружи.
Если только таймеры, то:
1. Запустить процессор на 48MHz,
2. Разрешить выход MCO с тактом от SYSYCLK - будет 48MHz
3. Взять еще три таймера (например, TIM5, TIM9 и TIM14),
3.1. счетчик тактировать без деления (PSC=0),
3.2. перезагрузки счетчиков (ARR) сделать 0, 1 и 3 для соответствующих таймеров,
3.2. запрограммировать в каждом по одному каналу в режиме Output Compare Mode (Toggle Mode), который перекидывает выход при каждом совпадении CCRx регистра с CNT; все CCRx = 0.

Должно работать.

P.S. scifi прав - один таймер можно сэкономить, взяв в нем два канала, второй - в PWM.
AlanDrakes
Может, поставить после выхода MCO (подать на него внутренние 48MHz) на три триггера в режиме счёта? На выходах как раз и будет
C = 48MHz, Q1 = 24MHz, Q2 = 12MHz, Q3 = 6MHz.
vilkin
Три триггера, это равносильно внешнему двоичному счетчику.
Не хотелось бы внешних компонентов.
Если вариантов больше не будет, то буду тратить таймеры...
scifi
Цитата(vilkin @ Mar 9 2016, 13:41) *
Если вариантов больше не будет, то буду тратить таймеры...

Что за беда? Таймеры для того и сделаны, чтобы их тратить.
Вот у меня всё время лишние остаются - так переживаю, что сил нет biggrin.gif
AleksBak
Цитата(scifi @ Mar 9 2016, 14:15) *
Один таймер способен выдавать две частоты: F и F/2...

А как один Таймер может выдать на выходе контроллера 2 частоты? Что-то не понял пока что.
Сергей Борщ
Один модуль сравнения (output compare) настраивается в режим TOGGLE и дает F/2, второй - в режим PWM и дает F. Точнее - F/4 и F/2 от входной.
scifi
Цитата(Сергей Борщ @ Mar 9 2016, 14:06) *
Точнее - F/4 и F/2 от входной.

А, ну да. И учитывая, что входная - не больше 72 МГц, выходит, что 48 МГц можно получить только через MCO.
AleksBak
Цитата(Сергей Борщ @ Mar 9 2016, 15:06) *
Один модуль сравнения (output compare) настраивается в режим TOGGLE и дает F/2, второй - в режим PWM и дает F. Точнее - F/4 и F/2 от входной.

Надо мне про режим TOGGLE у output compare еще почитать. Я пока новичок в СТМ контроллерах (3 месяца всего), а информации валом и все сразу не успеваешь прочитать/узнать. Крутой контроллер все-таки (по сравнению с др.)! А кого-то "тошнило" от его периферии.
scifi
Цитата(AleksBak @ Mar 9 2016, 14:22) *
Крутой контроллер все-таки (по сравнению с др.)! А кого-то "тошнило" от его периферии.

Ну, по шкале "крутизны" он где-то не очень высоко и не очень низко biggrin.gif А "тошнота", как правило, возникает у эстетов. Это на тему "шашечки или ехать" laughing.gif
HHIMERA
Цитата(AleksBak @ Mar 9 2016, 13:47) *
А как один Таймер может выдать на выходе контроллера 2 частоты? Что-то не понял пока что.

Через DMAR... 4 частоты можно выплюнуть... одним таймером...
adnega
Цитата(HHIMERA @ Mar 10 2016, 11:20) *
Через DMAR... 4 частоты можно выплюнуть... одним таймером...

Можно и больше, только не на такой высокой частоте.
DMA-транзакция стартует не сразу, а со значительной задержкой (~12 тактов).
skripach
Поставьте 4 триггера в одной микросхеме за 3 копейки - железобетонное решение. 1111493779.gif
AlanDrakes
Во-первых, не всякая микросхема на входе эти самые 48МГц переварит, а во-вторых... этот вариант уже был.

Хорошо. Самый грубый вариант - включить DMA, закольцевать его, и больше на этом канале ничего не запускать.
Из минусов - теряется полностью канал DMA (т.к. более высокий приоритет будет перебивать фоновый, а менее высокий не получит возможности работать), доступ к шине данных так же может быть затруднён (ибо постоянно дёргать пинами - довольно-таки затратно). Так что, я бы не рекомендовал.
Таймеры - вроди бы, должны быть "напрямую" соединены с пинами - так что, вариант неплохой, да и работать они будут независимо, главное, чтобы внутреннее тактирование не менялось.
Но аппаратный мод, как по мне, был бы лучше. Либо вообще поставить внешний генератор и делители. На той же микросхеме, что уже советовалось. Единственное - придётся подобрать подходящую. У меня не вышло - вся логика 74HC* не вытягивает нужных 48МГц, либо едва-едва достаёт.
adnega
Цитата(AlanDrakes @ Mar 11 2016, 18:26) *
вся логика 74HC* не вытягивает нужных 48МГц, либо едва-едва достаёт.

Бывают и другие серии. 74LVC169.
scifi
Цитата(AlanDrakes @ Mar 11 2016, 18:26) *
Хорошо. Самый грубый вариант - включить DMA, закольцевать его, и больше на этом канале ничего не запускать.

Выше уже было сказано - не разгонится он до этих скоростей.
=GM=
Цитата(vilkin @ Mar 9 2016, 09:47) *
Есть на плате STM32F103RB6 необходимо получить сетку частот. Частоты нужны одновременно 48Мгц, 24Мгц, 12Мгц и 6Мгц.
Можно ли требуемое получить средствами только STM32? Может есть варианты без лишних компонентов?

Варианты есть, можно получить частоты 48 МГц, 24 МГц, 12 МГц и 6 МГц только средствами STM32F103RB6 следующим образом.
Выставляем тактовую частоту 48 МГц и выдаём её на пин МСО. Далее, берём TIM1 (или TIM8), ставим три его канала в режим COMPARE, ремапим соответствующие выходы TIM1_CH1, TIM1_CH2, TIM1_CH3. Затем записываем в регистры TIM1_CCR1, TIM1_CCR2 и TIM1_CCR3 значения 2, 4 и 8. Ву а ля. Само собой разумеется, надо настроить пины на выход, всё что надо и где надо разрешить и т.д.
Сергей Борщ
Цитата(=GM= @ Mar 13 2016, 17:42) *
Ву а ля.
И? Что запишем в ARR? Что заставит TIM1_CH1 дернуться, когда таймер досчитает до 4, 6, 8, 12, 14? Аналогично, что будет дергать TIM1_CH2, когда таймер досчитает до 8, 12?
vilkin
Спасибо всем!
Сделал как порекомендовал scifi.
1. Вывел MCO = 48Mhz
2. TIM3 OC1 Mode_PWM1 = 24Mhz
3. TIM3 OC2 Mode_Toggle = 12Mhz
4. TIM4 OC1 Mode_PWM1 = 6Mhz

Ну и что бы ноги в куче были сделал PartialRemap_TIM3
И JTAG на SWD переключил, что бы ногу освободить.
Все работает.Таймеров только не осталось. Тут их 4 штуки всего.
Да оно пока больше и не надо.
KnightIgor
Цитата(vilkin @ Mar 14 2016, 11:26) *
Спасибо всем!
Сделал как порекомендовал scifi.

Вообще-то, про MCO я был первым! crying.gif
vilkin
Цитата(KnightIgor @ Mar 15 2016, 01:29) *
Вообще-то, про MCO я был первым! crying.gif
Не надо плакать. Неправда ваша sm.gif Про MCO я в первом сообщении сам написал... В любом случае, KnightIgor персональное спасибо!
scifi
Цитата(KnightIgor @ Mar 14 2016, 22:29) *
Вообще-то, про MCO я был первым! crying.gif

Почётную грамоту сдаю. Всё равно лепить некуда - вся стена занята biggrin.gif
Aaron
хех, а я 3 года назад задание давал студенту - на дискавери платке сделать устройство с настраиваемыми выходами частот, чтобы получить как можно больше каналов. Ляпота получилась! sm.gif
Сам ЦП заводится от внутреннего генератора, а на кварце + PLL заводятся таймеры. Имеем:
* 1 высокоскоростной высокоточный канал до 100 МГц (на MCO)
* несколько низкоскоростных каналов. MCO/2 верхняя граница, а дальше чем ниже частота, тем выше точность установки (если дробные значения неровные)...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.