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

 
 
 
Reply to this topicStart new topic
> STM32 таймеры, максимальная частота подсчёта
IgorAVR2
сообщение May 26 2018, 15:54
Сообщение #1


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

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Взял STM32F207 у которого частота таймеров до 120 мГц как и частота ядра. Запустил таймер на подсчёт от внутреннего тактирования. Все пределители на 0. Частота самого процессора 120 мГц. А таймер только 60 млн за секунду насчитывает, а не 120 как я ожидал и как мне надо. Запустил аналогичный проект на STM32F4 и там аналогичная ситуация, так же в два раза меньше.
Что делаю не так?

P.S. Задача стоит генерировать частоты с шагом примерно 1 Гц на частотах около 20 кГц.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение May 26 2018, 16:06
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Код в студию. Желательно без всяких там HAL-ов и кубов.
Go to the top of the page
 
+Quote Post
IgorAVR2
сообщение May 26 2018, 16:36
Сообщение #3


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

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Проект по STM32F4 DISCOVERY как раз таки в Кубе. Загрузил на Яндекс диск
https://yadi.sk/d/RXhNVbK93WZeeQ
Go to the top of the page
 
+Quote Post
Arlleex
сообщение May 26 2018, 17:33
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Да потому что Вы поленились зайти в Datasheet/Reference Manual и посмотреть, на какой шине висит TIM2, и какая максимальная частота синхронизации этой самой шины...
Даже Ваш "калокуб" (с)jcxz может показать, на какой частоте соответствующая шина работает.
Go to the top of the page
 
+Quote Post
IgorAVR2
сообщение May 27 2018, 07:46
Сообщение #5


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

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Ничего я не ленился. Я просто не заметил что таймеры могут сидеть на двух шинах.
Хорошо, но тогда опять же вопрос - я тоже самое делал и для таймера 1, который сидит на APB2. И заявлено что на таймеры идёт удвоенная частота APB2. Но результат подсчёта был аналогичный. Почему?

Всё, спасибо. Разобрался. TIM1 считает правильно и сидит на нужной мне шине. Изначальный мой косяк в том что я не заметил в кубе что таймеры сидят на обеих шинах. Спасибо что ткнули носом.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 28 2018, 09:38
Сообщение #6


Гуру
******

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



QUOTE (IgorAVR2 @ May 26 2018, 18:54) *
P.S. Задача стоит генерировать частоты с шагом примерно 1 Гц на частотах около 20 кГц.
Выдавайте синус на ЦАП методом прямого синтеза (DDS), после ЦАПа фильтр и компаратор. Сможете получить большие частоты с гораздо меньшим шагом на гораздо более медленном проце.


--------------------
На любой вопрос даю любой ответ
"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
IgorAVR2
сообщение May 28 2018, 21:01
Сообщение #7


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

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Цитата(Сергей Борщ @ May 28 2018, 12:38) *
Выдавайте синус на ЦАП методом прямого синтеза (DDS), после ЦАПа фильтр и компаратор. Сможете получить большие частоты с гораздо меньшим шагом на гораздо более медленном проце.

Спасибо за совет. Я уже и сам к этому варианту пришёл. Но к сожалению тут у меня вторая проблема возникает: мне нужно знать начало фазы каждого периода. У меня стоит задача каждый период этой частоты выдавать на один из 10 каналов по кругу. И вот ничего не могу пока придумать, кроме как, каким то аналоговым способом искать переход фазы через 0, а дальше его на логику пускать.
И ведь меандер мне тоже не совсем подходит, т.к. мне потом эти импульсы нужно на аналоговые усилители пускать.
Go to the top of the page
 
+Quote Post
IgorAVR2
сообщение May 29 2018, 06:57
Сообщение #8


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

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Цитата(Сергей Борщ @ May 28 2018, 12:38) *
и компаратор.

Не заметил сразу что вы про компаратор тоже пишете. Но вот точность определения начала периода на мой взгляд так будет не великая.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 29 2018, 07:45
Сообщение #9


Гуру
******

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



QUOTE (IgorAVR2 @ May 29 2018, 09:57) *
Не заметил сразу что вы про компаратор тоже пишете. Но вот точность определения начала периода на мой взгляд так будет не великая.
В вопросе было "нужно генерить частоты". Раз речь шла о таймере - значит, на выходе прямоугольник. Компаратор с этим справляется, от его точности зависит лишь степень приближения прямоугольника к меандру. Идеальный меандр нужен крайне редко. Про определение начала периода никто не спрашивал.


--------------------
На любой вопрос даю любой ответ
"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
IgorAVR2
сообщение May 29 2018, 09:52
Сообщение #10


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

Группа: Участник
Сообщений: 153
Регистрация: 29-05-08
Пользователь №: 37 901



Я не спрашивал, т.к. не хотел всей задачей всех грузить. Но за совет вам всё равно спасибо, т.к. он был по существу.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th April 2024 - 01:33
Рейтинг@Mail.ru


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