Lancelot 0 7 марта, 2018 Опубликовано 7 марта, 2018 (изменено) · Жалоба Здравствуйте! По ряду причин хочу реализовать фильтр Винера на 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); } Но чего-то вразумительного с ЦАП вывести не удалось. Прошу помощи в этой задаче, готов заплатить за подробную консультацию. Изменено 15 ноября, 2022 пользователем haker_fox Переименовал тему в более понятную. Переместил в раздел STM32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 7 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба Как я наивно полагал хватит такого кода: посмотрите эти примеры ADC_DMA_Transfer и DAC_Signals Generation Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба с точки зрения реализации мне показалось не сложным (АЦП -> ПРЕОБРАЗОВАНИЕ -> ЦАП). Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру. Правда для F407. Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд. Настраиваем ADC1 на запуск по внешнему событию TIM1CH1. Настраиваем DMA2Stream0 на кольцевой буфер АЦП, куда по запросам от ADC1 будем складывать данные. Настраиваем DMA1Stream0 на кольцевой буфер ЦАП, откуда по запросам от TIM4CH1 будем копировать данные в DAC. В обработчике прерывания от DMA2Stream0 обрабатываем полу-кольцо от АЦП и заполняем полу-кольцо для ЦАП. Уверен, что-то подобное можно сделать и в F103. посмотрите эти примеры ADC_DMA_Transfer и DAC_Signals Generation У ТС F103, а примеры for STM32L4 Series and STM32L4+ Series Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 7 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру ну можно и попроще, запустить DAC DMA по первому ADC HalfBuffCplt ( видел такое применение в примере DFSDM_AudioRecord, но может в других примерах или для F103 делают и по другому ) У ТС F103, а примеры for STM32L4 Series and STM32L4+ Series дык я же не советую залить bin в f103, а посмотреть как сделано на обще-употребимом HAL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lancelot 0 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба Нужно засинхронизировать входной и выходной потоки. Я делал по таймеру. Правда для F407. Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд. Настраиваем ADC1 на запуск по внешнему событию TIM1CH1. Настраиваем DMA2Stream0 на кольцевой буфер АЦП, куда по запросам от ADC1 будем складывать данные. Настраиваем DMA1Stream0 на кольцевой буфер ЦАП, откуда по запросам от TIM4CH1 будем копировать данные в DAC. В обработчике прерывания от DMA2Stream0 обрабатываем полу-кольцо от АЦП и заполняем полу-кольцо для ЦАП. Уверен, что-то подобное можно сделать и в F103. У ТС F103, а примеры "Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд." Подойдут ли более простые таймеры TIM6 и TIM7 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба "Настраиваем TIM1CH1 и TIM4CH1 на генерацию нужной Fд." Подойдут ли более простые таймеры TIM6 и TIM7 ? Один должен уметь быть внешним запуском для ADC, а второй - событием для DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба Здравствуйте! По ряду причин хочу реализовать фильтр Винера на F103ZE, с точки зрения реализации мне показалось не сложным (АЦП -> ПРЕОБРАЗОВАНИЕ -> ЦАП). Но проблема возникла уже в самом начале не могу вывести входной массив из АЦП в ЦАП (т.е. подать на АЦП какой либо периодический сигнал и снять его с ЦАП). Как я наивно полагал хватит такого кода: Тут зависит от многих факторов. Вы хотите это делать в реальном времени непрерывно и параллельно с другими задачами? Я бы сначала время вычислений определила... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lancelot 0 7 марта, 2018 Опубликовано 7 марта, 2018 · Жалоба Тут зависит от многих факторов. Вы хотите это делать в реальном времени непрерывно и параллельно с другими задачами? Я бы сначала время вычислений определила... решать буду только задачу фильтрации, по временем вычисления вы частоту дискретизации имеете или затраты машинных циклов на преобразование? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться