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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> STM32 DAC, организация DDS
dimka76
сообщение Jul 13 2011, 12:49
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Не поможите с идеей как на STM32 с помощью встроенного DAC и возможно DMA организовать DDS.
Нужно получить синусоиду с плавно перестраиваемой частотой в диапозоне от 5 до 20000 Гц.
Частота дискретизации предпологается быть фиксированной и равняться 200 кГц. Частота ядра 20 МГц (0 wait state).

Если решать задачу в лоб без применения DMA с таблицей значений DAC, то для формировании нового номера ячейки этой таблицы в прерывании таймера уйдет достаточно большое время. Прерывание таймера будут каждые 100 тактов из них 24 это вход и выход из прерывания плюс какие-то действия в нем.
Если с DMA, то непонятно как должна быть организована таблица. Если ее формировать в после принятия команды смены частоты и переключать DMA на нее, то в худшем случе при требуемой частоте синуса в 5 Гц надо будет 40000 байт (для 8-ми битного ЦАП), а у меня нет столько памяти.

Нужет какой-то хитрый приемчик.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 13 2011, 13:00
Сообщение #2


Гуру
******

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



Есть предложение: зациклить DMA по таблице, покрывающей только часть периода, и на лету заполнять эту таблицу чем положено. Чтобы не нужно было считать синус на лету, делаем большую таблицу в ПЗУ и выдёргиваем значения из неё для заполнения буфера для DMA.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Jul 13 2011, 13:10
Сообщение #3


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Если с DMA, то непонятно как должна быть организована таблица
нужно 3 таблицы - 1 обычная как для программного DDS с отсчетами синуса, две других формируются на лету поочередно, по прерыванию выгрузки половины DMA заполняется следующая часть выборок и т.д.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jul 13 2011, 14:06
Сообщение #4


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

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



DMA у STM умеет выдавать прерывание на каждую половинку буфера.
Пока DMA занят пересылкой из одной половины Вы должны успеть заполнить вторую половину.
100 тактов на отсчёт более чем достаточно, и таблица нужна всего одна - таблица синусов.
Рекомендую: DDS: прямой цифровой синтез частоты © Ридико Леонид Иванович


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jul 14 2011, 04:14
Сообщение #5


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Спасибо всем принявшим участие )))

Мне понрвилась идея с прерывание на половинку буфера DMA.
По предварительным прикидкам на дописывания половинки буфера будет уходить примерно 10% процессорного времени, а это вобщем даже ничего ;-).

Буду пробовать.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 14 2011, 05:41
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А как будет при работе с DMA обеспечиваться частота дискретизации?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
muravei
сообщение Jul 14 2011, 07:36
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(dimka76 @ Jul 13 2011, 15:49) *
Нужно получить синусоиду с плавно перестраиваемой частотой в диапозоне от 5 до 20000 Гц.

Выкиньте СТМ, ДМА на другие три буквы sm.gif и возьмите тини 2313
Посмотрите тут.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jul 14 2011, 09:00
Сообщение #8


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(AHTOXA @ Jul 14 2011, 09:41) *
А как будет при работе с DMA обеспечиваться частота дискретизации?


Таймером.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jul 15 2011, 06:48
Сообщение #9


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Все замечательно получилось. Спасибо за идею.
Код в прерывании DMA
Код
#define DMA_BUF_SZ    (512UL)

void DMA1_Channel3_IRQHandler(void)
{
    uint32_t i, pos;
    uint32_t isr_status = DMA1->ISR;

    if( (isr_status & DMA_ISR_HTIF3) || (isr_status & DMA_ISR_TCIF3) )
    {
        GPIOA->ODR |= (1<<11);
        if(isr_status & DMA_ISR_HTIF3) /* half buffer */
        {
            pos = 0;
            DMA1->IFCR = DMA_IFCR_CHTIF3;
        }
        if(isr_status & DMA_ISR_TCIF3) /* full buffer */
        {
            pos = DMA_BUF_SZ/2;

            DMA1->IFCR = DMA_IFCR_CTCIF3;
        }
        for(i=0; i<(DMA_BUF_SZ/2); ++i)
        {
            DMA_buf[pos] = 127+sin_table[table_index >> 23]/amp;
            table_index += delta;
            ++pos;
        }
        GPIOA->ODR &= ~(1<<11);
    }
}


Компилятор GCC, оптимизация O3, получилось в прерывании находится 12.2% времени, т.е. сквжность по ножке PA11 составляет 12.2%


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 15 2011, 08:48
Сообщение #10


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



я тоже собираюсь делать похожее на dds но както у меня по другому идея складывается..

1. заполняем dma буффер период высококачественного 12 битного синуса с числом отсчетов = 2байта * максимальный допустимый размер буфера под синус в вашей задачи
2. говорим DMA источник - буфер в памяти, назначение - ЦАП, режим циклический с инкрементом адреса
таким образом дма будет по кругу лазить по периоду синуса и заряжать цап его отсчетами.
3, теперь про период синуса - говрим dma что он тригируется от таймера - таким образом , dma будет выпонтяь выборку из таблицы и запись в цап по сигналу с таймера.
4, заряжаем таймер на время равное преиод требуемого синуса * число отсчетов в таблице.

все будет работать. у ST есть appnotes как это деать http://www.st.com/internet/com/TECHNICAL_R.../CD00259245.pdf

тут же можно разом делать с двух каналов ЦАП квадратуры
тутже на лету меня период таймера можно делать частотную модуляцию/манипуляцию, а фазовую только модуляцию
для фазовой манипуляции прйдется остановить dma , переставить счетк позиции чтения и заново включить.

квадратуры у меня генерятся но менять на непрерывно на лету частоту я не пробывал - могу поробывать

никаких прерываний ненадо! это если только более сложноая модуляция или вообще случайный сигнал - тогда - половинки буфера, с одной читается, другая апдейтится.
для генерации синуса цап еще както сам умеет его генерить - у него такой режим есть, тогда нада наверно только таймер для задания интервала отсчетов и сам цап без ДМА. но это нада проверять я не включал его так

товарищи которые рекомендуют tiny могут идти тудаже куда они арм послали... тоест в кружок пиоНЭров ! серьезных людей нечего баламутить. я даже более скажу - работал в коллективе где ВСЕ делали на мегах, неважно - по задаче инструмент или нет. в результате были монстры на 4-5 мегах + горы глюков и внутренней жизни. на вопрос что давайте поставим один мелкий армик
- неееетт!!!! мы не сможем проконтролировать что ты там сделал ! а если ты уйдеш от нас???
- ну дык давайте вместе со мной изучим новую элементную базу...
- !!???###%%% ...нах

в результате я ушел, а старые деды у котрых моск засох остались, задачи со временем меняются а методы работы и решения остались там прежние по сей день.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Jul 15 2011, 11:01
Сообщение #11


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(klen @ Jul 15 2011, 12:48) *
4, заряжаем таймер на время равное преиод требуемого синуса * число отсчетов в таблице.
.........
никаких прерываний ненадо!


В этом случае частота дискретизации будет меняться с изменением периода синусоиды.
А мне необходимо, чтобы частота дискретизции оствалсь постоянной.


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 16 2011, 05:20
Сообщение #12


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(dimka76 @ Jul 15 2011, 15:01) *
В этом случае частота дискретизации будет меняться с изменением периода синусоиды.
А мне необходимо, чтобы частота дискретизции оствалсь постоянной.


1. то что цап умеет синус сам генерить это я загнул конечно, посмотрел - умеет шум и треугольник.
2, да. период дискретищации будет менятся. Выходит тогда нада буффер при измениннии частоты синуса пересчитывать.
Go to the top of the page
 
+Quote Post
muravei
сообщение Jul 16 2011, 07:57
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(klen @ Jul 15 2011, 12:48) *
товарищи которые рекомендуют tiny могут идти тудаже куда они арм послали... тоест в кружок пиоНЭров ! серьезных людей нечего баламутить.

Дык , озвучте параметры. А пока на пиоНЭров больше вы смахиваете.
Может и пойдем, а пока это постройка очередного титаника.
"На меге48 можно получить 2500 квыб/с", а у вас? Плюс четыре формы(на тини), включ. ПСП, и управление энкодером.


Цитата(klen @ Jul 16 2011, 09:20) *
2, да. период дискретищации будет менятся. Выходит тогда нада буффер при измениннии частоты синуса пересчитывать.

А вот и он , маленький пушистый зверек. sm.gif
Сумеем непрерывно генерить синус вовремя перестройки?
Цитата(klen @ Jul 15 2011, 12:48) *
ну дык давайте вместе со мной изучим новую элементную базу...

Дык , давайте. Но применять ее там где требуется, а не для самоудовлетворения своей крутизны.

ПС Единственный плюс -наличие встроенного DAC
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 16 2011, 16:17
Сообщение #14


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(muravei @ Jul 16 2011, 11:57) *
А пока на пиоНЭров больше вы смахиваете.

шестое слово пишется с большой буквы.

Цитата
Может и пойдем, а пока это постройка очередного титаника.
"На меге48 можно получить 2500 квыб/с", а у вас? Плюс четыре формы(на тини), включ. ПСП, и управление энкодером.

на меге много чего можно, можно еще штаны через голову надеть.
если уж такая пьнка пошла - тогда сообщите нам пожалуйста количество эффективных бит результата при '2500 квыб/с", не нада окружающих идиотами считать.
энкодеры на stm32 аппаратно энкодятся без проца, ПСП тоже аппаратно. мах частота преобразования АЦП 1мгц на 11.5 бит

Цитата
А вот и он , маленький пушистый зверек. sm.gif

где? невижу, у Вас глюки.

Цитата
Сумеем непрерывно генерить синус вовремя перестройки?

однако не только умеем а даже денно и нощно это делаем, в текущем проекте часть ресурсов отдана на MSK-модулятор.

Цитата
Дык , давайте. Но применять ее там где требуется, а не для самоудовлетворения своей крутизны.

ну это вообще без камментов.....

Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jul 16 2011, 17:04
Сообщение #15


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Давайте договоримся, господа, что раз уж тема помещена в этом разделе, то разговоры будем вести о реализации на ARM, в частности на STM32.
И ничего личного.
Модератор.
Go to the top of the page
 
+Quote Post

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

 


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


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