Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: из ADC в DAC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Lancelot
Здравствуйте! По ряду причин хочу реализовать фильтр Винера на 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);
}

Но чего-то вразумительного с ЦАП вывести не удалось. Прошу помощи в этой задаче, готов заплатить за подробную консультацию.
megajohn
Цитата(Lancelot @ Mar 7 2018, 10:25) *
Как я наивно полагал хватит такого кода:


посмотрите эти примеры ADC_DMA_Transfer и DAC_Signals Generation
adnega
Цитата(Lancelot @ Mar 7 2018, 09:25) *
с точки зрения реализации мне показалось не сложным (АЦП -> ПРЕОБРАЗОВАНИЕ -> ЦАП).

Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру. Правда для F407.
Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд.
Настраиваем ADC1 на запуск по внешнему событию TIM1CH1.
Настраиваем DMA2Stream0 на кольцевой буфер АЦП, куда по запросам от ADC1 будем складывать данные.
Настраиваем DMA1Stream0 на кольцевой буфер ЦАП, откуда по запросам от TIM4CH1 будем копировать данные в DAC.
В обработчике прерывания от DMA2Stream0 обрабатываем полу-кольцо от АЦП и заполняем полу-кольцо для ЦАП.
Уверен, что-то подобное можно сделать и в F103.

Цитата(megajohn @ Mar 7 2018, 12:53) *

У ТС F103, а примеры
Цитата
for STM32L4 Series and STM32L4+ Series
megajohn
Цитата(adnega @ Mar 7 2018, 14:01) *
Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру

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

Цитата(adnega @ Mar 7 2018, 14:01) *
У ТС F103, а примеры for STM32L4 Series and STM32L4+ Series

дык я же не советую залить bin в f103, а посмотреть как сделано на обще-употребимом HAL
Lancelot
Цитата(adnega @ Mar 7 2018, 10:01) *
Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру. Правда для F407.
Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд.
Настраиваем ADC1 на запуск по внешнему событию TIM1CH1.
Настраиваем DMA2Stream0 на кольцевой буфер АЦП, куда по запросам от ADC1 будем складывать данные.
Настраиваем DMA1Stream0 на кольцевой буфер ЦАП, откуда по запросам от TIM4CH1 будем копировать данные в DAC.
В обработчике прерывания от DMA2Stream0 обрабатываем полу-кольцо от АЦП и заполняем полу-кольцо для ЦАП.
Уверен, что-то подобное можно сделать и в F103.


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


"Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд." Подойдут ли более простые таймеры TIM6 и TIM7 ?
adnega
Цитата(Lancelot @ Mar 7 2018, 13:27) *
"Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд." Подойдут ли более простые таймеры TIM6 и TIM7 ?

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

Тут зависит от многих факторов.
Вы хотите это делать в реальном времени непрерывно и параллельно с другими задачами?
Я бы сначала время вычислений определила...
Lancelot
Цитата(Tanya @ Mar 7 2018, 17:06) *
Тут зависит от многих факторов.
Вы хотите это делать в реальном времени непрерывно и параллельно с другими задачами?
Я бы сначала время вычислений определила...


решать буду только задачу фильтрации, по временем вычисления вы частоту дискретизации имеете или затраты машинных циклов на преобразование?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.