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

 
 
 
Reply to this topicStart new topic
> из ADC в DAC
Lancelot
сообщение Mar 7 2018, 06:25
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 7-03-18
Пользователь №: 102 197



Здравствуйте! По ряду причин хочу реализовать фильтр Винера на 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);
}

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

Сообщение отредактировал IgorKossak - Mar 7 2018, 08:56
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
Go to the top of the page
 
+Quote Post
megajohn
сообщение Mar 7 2018, 09:53
Сообщение #2


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Lancelot @ Mar 7 2018, 10:25) *
Как я наивно полагал хватит такого кода:


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


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 7 2018, 10:01
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(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
Go to the top of the page
 
+Quote Post
megajohn
сообщение Mar 7 2018, 10:05
Сообщение #4


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(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


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Lancelot
сообщение Mar 7 2018, 10:27
Сообщение #5





Группа: Новичок
Сообщений: 3
Регистрация: 7-03-18
Пользователь №: 102 197



Цитата(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 ?
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 7 2018, 13:57
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



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

Один должен уметь быть внешним запуском для ADC, а второй - событием для DMA.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Mar 7 2018, 17:06
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



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

Тут зависит от многих факторов.
Вы хотите это делать в реальном времени непрерывно и параллельно с другими задачами?
Я бы сначала время вычислений определила...
Go to the top of the page
 
+Quote Post
Lancelot
сообщение Mar 7 2018, 17:47
Сообщение #8





Группа: Новичок
Сообщений: 3
Регистрация: 7-03-18
Пользователь №: 102 197



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


решать буду только задачу фильтрации, по временем вычисления вы частоту дискретизации имеете или затраты машинных циклов на преобразование?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 15:13
Рейтинг@Mail.ru


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