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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Модулированный сигнал на STM32f407, желательно на 1м таймере...
mantech
сообщение Jan 31 2014, 18:27
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Есть такая задача, получить аппаратно модулированный сигнал - 1000Гц промодулированный 48КГц.

Желательно на одном таймере (tim8) или если никак не получается, то на 2х (tim14 или tim3) Остальные все заняты biggrin.gif

Пока мысли запутались, может кто знает, можно-ли получить прерывание от канала таймера 8, который работает в режиме ШИМ? Тогда можно попробовать этим прерыванием "торкать" DMA, который будет циклически крутить буфер из 48 элементов, половина которых =0, а вторая 128...

ЗЫ. Хотя может есть проще варианты??
Go to the top of the page
 
+Quote Post
maksim-starcity
сообщение Feb 1 2014, 18:53
Сообщение #2





Группа: Участник
Сообщений: 11
Регистрация: 25-01-13
Пользователь №: 75 348



Можно так сделать.
Вариант 1: гуглите TIM DAC DMA (или что-то вроде синтезатора звука) - т.е. это реализация на ЦАПе, таймере и DMA. У меня там работает wav плеер. Делается он на TIM7, потому что он на ЦАП заточен.
Вариант 2: что Вам мешает сделать ШИМ?
Вариант 3: DMA Memory to memory, где 1 инкрементится адрес, другой не инкрементится. в качестве точки назначения указываете GPIOx->ODR. Минусы: занят весь порт.
Вариант 3а: 2 потока ДМА: один в BSRR, другой в BRR

На мой взгляд, по трезвости вариант 2 в Вашем случае лидирует.
Что касается таймеров и DMA. Если мне не изменяет память, то чтобы таймер пинал DMA, нужно, чтобы они сидели на одной ветке клока (AHB и тот и тот или APB1)
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 1 2014, 19:07
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(maksim-starcity @ Feb 1 2014, 22:53) *
Можно так сделать.
Вариант 2: что Вам мешает сделать ШИМ?


Ничего не мешает! Только шим должен включаться и выключаться с частотой 1КГц, вот в чем проблема. Пробовал включать и выключать его по прерыванию другого таймера - дрожжание частоты(загрузка проца под 80% с лишним), особенно во время работы с усб - оттого задачу нужно решить каким-либо аппаратным способом...
Go to the top of the page
 
+Quote Post
maksim-starcity
сообщение Feb 1 2014, 20:21
Сообщение #4





Группа: Участник
Сообщений: 11
Регистрация: 25-01-13
Пользователь №: 75 348



Зачем такие сложности? у Вас 180 МГц?
В прескейлер 17999 записываете, в arr 9, в нужный ccr то ли 4, то ли 5, не помню и всё 1 КГц
У вас достаточно большая частота, чтобы 2 таймера использовать. Минимальная частота на одном таймере 0,042 Гц. Хотя, скорее всего, на некоторых таймерах еще раза в 4 меньше или в 16.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 1 2014, 20:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



он же модулирует,
я так понимаю ему надо чтобы было то ноль
то 48 КГц, при этом длительность частоты и длительность 0 как у сигнала 1 КГц...

а внешнего генератора не поставить, вкл - выкл по таймеру?

или же хотя бы может логику "И", тогда 2 таймера
1 КГц, и 48 КГц, и поендить их?

и еще вариант ДМА, по таймеру 2КГц , писать в регистр вкл-выкл выхода таймера, если так можно. Или же в регистр 48КГц шима, скважность 50%-0%
Go to the top of the page
 
+Quote Post
maksim-starcity
сообщение Feb 1 2014, 20:35
Сообщение #6





Группа: Участник
Сообщений: 11
Регистрация: 25-01-13
Пользователь №: 75 348



Сорри, неправильно понял суть вопроса) Тогда ЦАП и таймер с ДМА
Могу код выложить в понедельник, под себя подредактируете немного и всё
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 2 2014, 05:46
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(maksim-starcity @ Feb 2 2014, 00:35) *
Сорри, неправильно понял суть вопроса) Тогда ЦАП и таймер с ДМА
Могу код выложить в понедельник, под себя подредактируете немного и всё


ЦАП уже занят, а вот таймер с дма - это интересно, буду очень рад, если поможете с кодом rolleyes.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 2 2014, 06:04
Сообщение #8


Гуру
******

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



Цитата(mantech @ Jan 31 2014, 22:27) *
Пока мысли запутались, может кто знает, можно-ли получить прерывание от канала таймера 8, который работает в режиме ШИМ? Тогда можно попробовать этим прерыванием "торкать" DMA, который будет циклически крутить буфер из 48 элементов, половина которых =0, а вторая 128...

ЗЫ. Хотя может есть проще варианты??

Отличный вариант, я бы так и сделал. Конечно, прерывание или запрос DMA можно получать и в режиме ШИМ. Проще, мне кажется, и не придумать.
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 2 2014, 15:30
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(scifi @ Feb 2 2014, 10:04) *
Конечно, прерывание или запрос DMA можно получать и в режиме ШИМ.


Какой бит настраивать в качестве запускающего для дма, который срабатывает при совпадении или при переполнении таймера? В аврках раньше помнится, использовал факт совпадения, а тут?

Сообщение отредактировал mantech - Feb 2 2014, 15:32
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 2 2014, 16:39
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(scifi @ Feb 2 2014, 12:04) *
Отличный вариант, я бы так и сделал. Конечно, прерывание или запрос DMA можно получать и в режиме ШИМ. Проще, мне кажется, и не придумать.

Придумать rolleyes.gif
Это получается: таймер+DMA и ещё + 48 байт(слов?) в ОЗУ.
ТС-у ведь нужен цифровой сигнал: 0, 1, 0, 1, .... как я понял.
Не знаком с периферией STM32, но думаю проще сделать по-другому:
SPI(master)+DMA. Если не понятно, поясню:
Настраиваем SPI на битовую частоту 48*2 кГц.
DMA настраиваем в flip-flop режиме (первый буфер - передача 6 раз байта 0x55, второй буфер - передача 6 раз байта 0 (или 0xFF по желанию)).
Сигнал получаем с MOSI.
Пересылок по шине в 8 раз меньше, а так как у ТС CPU и так загружен (>80%) то это важно. Если использовать 16-битный режим SPI, то можно ещё в 2 раза уменьшить кол-во пересылок.
К тому-же - при связке таймер+DMA, так как состояние пина должно быть изменено в тот момент, когда таймер формирует событие, то любые задержки из-за загрузки шины будут также
приводить к дрожанию фронтов сигнала. В связке-же SPI+DMA, в SPI имеется буферизация, поэтому такая связка гораздо устойчивее к загрузке шины.
Всё
Go to the top of the page
 
+Quote Post
SSerge
сообщение Feb 2 2014, 17:16
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(jcxz @ Feb 2 2014, 23:39) *
Это получается: таймер+DMA и ещё + 48 байт(слов?) в ОЗУ.

У TIM8 есть регистр RCR, поэтому можно обойтись буфером DMA на два слова (4 байта).
Через каждые 24 периода (0.5мс) перезагружать регистр CCRx.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 2 2014, 19:23
Сообщение #12


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(SSerge @ Feb 2 2014, 21:16) *
У TIM8 есть регистр RCR, поэтому можно обойтись буфером DMA на два слова (4 байта).
Через каждые 24 периода (0.5мс) перезагружать регистр CCRx.


Это я понял, мне больше интересно, как "подопнуть" дма этим-же таймером...
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 2 2014, 19:33
Сообщение #13


Гуру
******

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



Цитата(mantech @ Feb 2 2014, 23:23) *
Это я понял, мне больше интересно, как "подопнуть" дма этим-же таймером...

Предлагаю почитать мануал. Точно помню, что там есть ответ на этот вопрос :-)
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 3 2014, 05:00
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(scifi @ Feb 2 2014, 23:33) *
Предлагаю почитать мануал. Точно помню, что там есть ответ на этот вопрос :-)

Придется...Просто думал, что кто-нить этим уже занимался laughing.gif
Go to the top of the page
 
+Quote Post
Axel
сообщение Feb 3 2014, 05:34
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(maksim-starcity @ Feb 2 2014, 00:35) *
...ЦАП и таймер с ДМА
Могу код выложить в понедельник, под себя подредактируете немного и всё


Буду весьма признателен - у меня с первого раза криво полетело, а время поджимает...
Go to the top of the page
 
+Quote Post

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

 


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


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