|
STM32 DAC, организация DDS |
|
|
|
Jul 13 2011, 14:06
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
DMA у STM умеет выдавать прерывание на каждую половинку буфера. Пока DMA занят пересылкой из одной половины Вы должны успеть заполнить вторую половину. 100 тактов на отсчёт более чем достаточно, и таблица нужна всего одна - таблица синусов. Рекомендую: DDS: прямой цифровой синтез частоты © Ридико Леонид Иванович
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Jul 15 2011, 06:48
|

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%
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Jul 15 2011, 08:48
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 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 мегах + горы глюков и внутренней жизни. на вопрос что давайте поставим один мелкий армик - неееетт!!!! мы не сможем проконтролировать что ты там сделал ! а если ты уйдеш от нас??? - ну дык давайте вместе со мной изучим новую элементную базу... - !!???###%%% ...нах в результате я ушел, а старые деды у котрых моск засох остались, задачи со временем меняются а методы работы и решения остались там прежние по сей день.
|
|
|
|
|
Jul 15 2011, 11:01
|

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

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

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

|
Цитата(klen @ Jul 15 2011, 12:48)  товарищи которые рекомендуют tiny могут идти тудаже куда они арм послали... тоест в кружок пиоНЭров ! серьезных людей нечего баламутить. Дык , озвучте параметры. А пока на пиоНЭров больше вы смахиваете. Может и пойдем, а пока это постройка очередного титаника. "На меге48 можно получить 2500 квыб/с", а у вас? Плюс четыре формы(на тини), включ. ПСП, и управление энкодером. Цитата(klen @ Jul 16 2011, 09:20)  2, да. период дискретищации будет менятся. Выходит тогда нада буффер при измениннии частоты синуса пересчитывать. А вот и он , маленький пушистый зверек.  Сумеем непрерывно генерить синус вовремя перестройки? Цитата(klen @ Jul 15 2011, 12:48)  ну дык давайте вместе со мной изучим новую элементную базу... Дык , давайте. Но применять ее там где требуется, а не для самоудовлетворения своей крутизны. ПС Единственный плюс -наличие встроенного DAC
|
|
|
|
|
Jul 16 2011, 16:17
|

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

|
Цитата(muravei @ Jul 16 2011, 11:57)  А пока на пиоНЭров больше вы смахиваете. шестое слово пишется с большой буквы. Цитата Может и пойдем, а пока это постройка очередного титаника. "На меге48 можно получить 2500 квыб/с", а у вас? Плюс четыре формы(на тини), включ. ПСП, и управление энкодером. на меге много чего можно, можно еще штаны через голову надеть. если уж такая пьнка пошла - тогда сообщите нам пожалуйста количество эффективных бит результата при '2500 квыб/с", не нада окружающих идиотами считать. энкодеры на stm32 аппаратно энкодятся без проца, ПСП тоже аппаратно. мах частота преобразования АЦП 1мгц на 11.5 бит Цитата А вот и он , маленький пушистый зверек.  где? невижу, у Вас глюки. Цитата Сумеем непрерывно генерить синус вовремя перестройки? однако не только умеем а даже денно и нощно это делаем, в текущем проекте часть ресурсов отдана на MSK-модулятор. Цитата Дык , давайте. Но применять ее там где требуется, а не для самоудовлетворения своей крутизны. ну это вообще без камментов.....
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|