Перейти к содержанию
    

из ADC в DAC (фильтр Винера на STM32F103)

Здравствуйте! По ряду причин хочу реализовать фильтр Винера на F103ZE, с точки зрения реализации мне показалось не сложным (АЦП -> ПРЕОБРАЗОВАНИЕ -> ЦАП). Но проблема возникла уже в самом начале не могу вывести входной массив из АЦП в ЦАП (т.е. подать на АЦП какой либо периодический сигнал и снять его с ЦАП). Как я наивно полагал хватит такого кода:

 

HAL_TIM_Base_Start_IT(&htim6);
uint16_t ADC_BUF[64];

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
HAL_ADC_Start_DMA(&hadc1,(uint32_t*) &ADC_BUF,64);
HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1,(uint32_t*)ADC_BUF,64, DAC_ALIGN_12B_R);
}
 

Но чего-то вразумительного с ЦАП вывести не удалось. Прошу помощи в этой задаче, готов заплатить за подробную консультацию.

Изменено пользователем haker_fox
Переименовал тему в более понятную. Переместил в раздел STM32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как я наивно полагал хватит такого кода:

 

посмотрите эти примеры ADC_DMA_Transfer и DAC_Signals Generation

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с точки зрения реализации мне показалось не сложным (АЦП -> ПРЕОБРАЗОВАНИЕ -> ЦАП).

Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру. Правда для F407.

Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд.

Настраиваем ADC1 на запуск по внешнему событию TIM1CH1.

Настраиваем DMA2Stream0 на кольцевой буфер АЦП, куда по запросам от ADC1 будем складывать данные.

Настраиваем DMA1Stream0 на кольцевой буфер ЦАП, откуда по запросам от TIM4CH1 будем копировать данные в DAC.

В обработчике прерывания от DMA2Stream0 обрабатываем полу-кольцо от АЦП и заполняем полу-кольцо для ЦАП.

Уверен, что-то подобное можно сделать и в F103.

 

У ТС F103, а примеры

for STM32L4 Series and STM32L4+ Series

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру

ну можно и попроще, запустить DAC DMA по первому ADC HalfBuffCplt ( видел такое применение в примере DFSDM_AudioRecord, но может в других примерах или для F103 делают и по другому )

 

У ТС F103, а примеры for STM32L4 Series and STM32L4+ Series

дык я же не советую залить bin в f103, а посмотреть как сделано на обще-употребимом HAL

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру. Правда для F407.

Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд.

Настраиваем ADC1 на запуск по внешнему событию TIM1CH1.

Настраиваем DMA2Stream0 на кольцевой буфер АЦП, куда по запросам от ADC1 будем складывать данные.

Настраиваем DMA1Stream0 на кольцевой буфер ЦАП, откуда по запросам от TIM4CH1 будем копировать данные в DAC.

В обработчике прерывания от DMA2Stream0 обрабатываем полу-кольцо от АЦП и заполняем полу-кольцо для ЦАП.

Уверен, что-то подобное можно сделать и в F103.

 

 

У ТС F103, а примеры

 

"Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд." Подойдут ли более простые таймеры TIM6 и TIM7 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд." Подойдут ли более простые таймеры TIM6 и TIM7 ?

Один должен уметь быть внешним запуском для ADC, а второй - событием для DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте! По ряду причин хочу реализовать фильтр Винера на F103ZE, с точки зрения реализации мне показалось не сложным (АЦП -> ПРЕОБРАЗОВАНИЕ -> ЦАП). Но проблема возникла уже в самом начале не могу вывести входной массив из АЦП в ЦАП (т.е. подать на АЦП какой либо периодический сигнал и снять его с ЦАП). Как я наивно полагал хватит такого кода:

Тут зависит от многих факторов.

Вы хотите это делать в реальном времени непрерывно и параллельно с другими задачами?

Я бы сначала время вычислений определила...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут зависит от многих факторов.

Вы хотите это делать в реальном времени непрерывно и параллельно с другими задачами?

Я бы сначала время вычислений определила...

 

решать буду только задачу фильтрации, по временем вычисления вы частоту дискретизации имеете или затраты машинных циклов на преобразование?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...