реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32F103RB6 необходимо получить сетку частот, необходимо получить сетку частот
vilkin
сообщение Mar 9 2016, 09:47
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 13-12-04
Из: Москва
Пользователь №: 1 466



Есть на плате STM32F103RB6 необходимо получить сетку частот.
Частоты нужны одновременно 48Мгц, 24Мгц, 12Мгц и 6Мгц.
Фазовые сдвиги между ними не принципиальны.
Можно ли требуемое получить средствами только STM32?
Желательно не отрывая её от основных задач.
Была мысль использовать DMA выкидывая в порт GPIO из RAM последовательность чисел от 0 до 15.
Но я так понял, не укладываемся по скорострельности... или я ошибаюсь?
Остается в уме только один вариант вывести мастер клок 48Мгц наружу и поделить его двоичным счетчиком.
Может есть варианты без лишних компонентов?
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2016, 09:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



А таймеров там нет что ли?
Go to the top of the page
 
+Quote Post
vilkin
сообщение Mar 9 2016, 10:09
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 13-12-04
Из: Москва
Пользователь №: 1 466



Цитата(scifi @ Mar 9 2016, 15:51) *
А таймеров там нет что ли?
Таймера есть... только не соображу как их использовать? Одним не справишься тут, а 4 штуки жалко тратить...
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2016, 10:15
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Один таймер способен выдавать две частоты: F и F/2. Чтобы получить F, на одном из каналов делаем, например, режим ШИМ. Чтобы получить F/2, на другом канале того же таймера делаем режим "toggle on match".
Короче, двух таймеров должно хватить.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 9 2016, 10:34
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(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.

Сообщение отредактировал KnightIgor - Mar 9 2016, 10:38
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Mar 9 2016, 10:36
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Может, поставить после выхода MCO (подать на него внутренние 48MHz) на три триггера в режиме счёта? На выходах как раз и будет
C = 48MHz, Q1 = 24MHz, Q2 = 12MHz, Q3 = 6MHz.
Go to the top of the page
 
+Quote Post
vilkin
сообщение Mar 9 2016, 10:41
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 13-12-04
Из: Москва
Пользователь №: 1 466



Три триггера, это равносильно внешнему двоичному счетчику.
Не хотелось бы внешних компонентов.
Если вариантов больше не будет, то буду тратить таймеры...
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2016, 10:45
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(vilkin @ Mar 9 2016, 13:41) *
Если вариантов больше не будет, то буду тратить таймеры...

Что за беда? Таймеры для того и сделаны, чтобы их тратить.
Вот у меня всё время лишние остаются - так переживаю, что сил нет biggrin.gif
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Mar 9 2016, 10:47
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(scifi @ Mar 9 2016, 14:15) *
Один таймер способен выдавать две частоты: F и F/2...

А как один Таймер может выдать на выходе контроллера 2 частоты? Что-то не понял пока что.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 9 2016, 11:06
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Один модуль сравнения (output compare) настраивается в режим TOGGLE и дает F/2, второй - в режим PWM и дает F. Точнее - F/4 и F/2 от входной.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2016, 11:12
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Сергей Борщ @ Mar 9 2016, 14:06) *
Точнее - F/4 и F/2 от входной.

А, ну да. И учитывая, что входная - не больше 72 МГц, выходит, что 48 МГц можно получить только через MCO.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Mar 9 2016, 11:22
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



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

Надо мне про режим TOGGLE у output compare еще почитать. Я пока новичок в СТМ контроллерах (3 месяца всего), а информации валом и все сразу не успеваешь прочитать/узнать. Крутой контроллер все-таки (по сравнению с др.)! А кого-то "тошнило" от его периферии.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 9 2016, 12:32
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(AleksBak @ Mar 9 2016, 14:22) *
Крутой контроллер все-таки (по сравнению с др.)! А кого-то "тошнило" от его периферии.

Ну, по шкале "крутизны" он где-то не очень высоко и не очень низко biggrin.gif А "тошнота", как правило, возникает у эстетов. Это на тему "шашечки или ехать" laughing.gif
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Mar 10 2016, 08:20
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(AleksBak @ Mar 9 2016, 13:47) *
А как один Таймер может выдать на выходе контроллера 2 частоты? Что-то не понял пока что.

Через DMAR... 4 частоты можно выплюнуть... одним таймером...
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 10 2016, 09:33
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



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

Можно и больше, только не на такой высокой частоте.
DMA-транзакция стартует не сразу, а со значительной задержкой (~12 тактов).
Go to the top of the page
 
+Quote Post
skripach
сообщение Mar 10 2016, 15:55
Сообщение #16


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Поставьте 4 триггера в одной микросхеме за 3 копейки - железобетонное решение. 1111493779.gif


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
AlanDrakes
сообщение Mar 11 2016, 15:26
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 101
Регистрация: 2-05-15
Из: Россия, Омск
Пользователь №: 86 474



Во-первых, не всякая микросхема на входе эти самые 48МГц переварит, а во-вторых... этот вариант уже был.

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

Сообщение отредактировал AlanDrakes - Mar 11 2016, 15:32
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 11 2016, 15:41
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(AlanDrakes @ Mar 11 2016, 18:26) *
вся логика 74HC* не вытягивает нужных 48МГц, либо едва-едва достаёт.

Бывают и другие серии. 74LVC169.
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 11 2016, 17:24
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



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

Выше уже было сказано - не разгонится он до этих скоростей.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Mar 13 2016, 15:42
Сообщение #20


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(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. Ву а ля. Само собой разумеется, надо настроить пины на выход, всё что надо и где надо разрешить и т.д.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 13 2016, 19:45
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(=GM= @ Mar 13 2016, 17:42) *
Ву а ля.
И? Что запишем в ARR? Что заставит TIM1_CH1 дернуться, когда таймер досчитает до 4, 6, 8, 12, 14? Аналогично, что будет дергать TIM1_CH2, когда таймер досчитает до 8, 12?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
vilkin
сообщение Mar 14 2016, 10:26
Сообщение #22


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 13-12-04
Из: Москва
Пользователь №: 1 466



Спасибо всем!
Сделал как порекомендовал 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 штуки всего.
Да оно пока больше и не надо.
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Mar 14 2016, 19:29
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(vilkin @ Mar 14 2016, 11:26) *
Спасибо всем!
Сделал как порекомендовал scifi.

Вообще-то, про MCO я был первым! crying.gif

Сообщение отредактировал KnightIgor - Mar 14 2016, 19:30
Go to the top of the page
 
+Quote Post
vilkin
сообщение Mar 14 2016, 20:03
Сообщение #24


Участник
*

Группа: Свой
Сообщений: 66
Регистрация: 13-12-04
Из: Москва
Пользователь №: 1 466



Цитата(KnightIgor @ Mar 15 2016, 01:29) *
Вообще-то, про MCO я был первым! crying.gif
Не надо плакать. Неправда ваша sm.gif Про MCO я в первом сообщении сам написал... В любом случае, KnightIgor персональное спасибо!
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 14 2016, 20:58
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(KnightIgor @ Mar 14 2016, 22:29) *
Вообще-то, про MCO я был первым! crying.gif

Почётную грамоту сдаю. Всё равно лепить некуда - вся стена занята biggrin.gif
Go to the top of the page
 
+Quote Post
Aaron
сообщение Mar 15 2016, 14:16
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



хех, а я 3 года назад задание давал студенту - на дискавери платке сделать устройство с настраиваемыми выходами частот, чтобы получить как можно больше каналов. Ляпота получилась! sm.gif
Сам ЦП заводится от внутреннего генератора, а на кварце + PLL заводятся таймеры. Имеем:
* 1 высокоскоростной высокоточный канал до 100 МГц (на MCO)
* несколько низкоскоростных каналов. MCO/2 верхняя граница, а дальше чем ниже частота, тем выше точность установки (если дробные значения неровные)...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01568 секунд с 7
ELECTRONIX ©2004-2016