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

 
 
> ADC Triple Mode + DMA + TIM
Connor
сообщение Jan 3 2018, 06:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 26-05-17
Пользователь №: 97 309



Добрый день! Создал проект в кубе, в котором хочу реализовать измерение АЦП в режиме Triple Mode по таймеру (триггеру) с DMA. Может кто-то работал с похожей задачей? Одиночный АЦП нормально работает по таймеру с DMA. Включение же АЦП в режиме Triple Mode с DMA с помощью функции HAL_ADCEx_MultiModeStart_DMA не работает, не идёт запись по DMA данных в заданный массив из регистров АЦП (в регистрах АЦП (DR) значения есть) + АЦП срабатывают только один раз, далее не работают, но счётчик продолжает считать.
P.S. Я в этом деле человек относительно новый и хотел бы уточнить правильно ли я понимаю сам процесс работы такой связки АЦП + DMA + TIM, в данном случае это DMA контроллер срабатывает по триггеру с таймера (хотя он является триггером для АЦП?) и в свою очередь запускает АЦП или нет?
Спасибо за ответы!
Привожу скриншоты своего проекта в кубе + кусочек кода из main();
P.S.2
1 Прерывания АЦП и таймера выключены
2 В настройках АЦП2 куб почему то дублирует два ранга, всякие попытки изменить число каналов ни к чему ни привели, он всё равно дублирует два ранга, не знаю баг это или нет.














А так я запускаю АЦП в режиме Triiple Mode
Код
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
volatile uint16_t ADC_buffer[9];
/* USER CODE END PV */
HAL_TIM_Base_Start(&htim3);
HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t*)&ADC_buffer, 3);




Сообщение отредактировал Connor - Jan 3 2018, 07:12
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Tanya
сообщение Jan 3 2018, 07:18
Сообщение #2


Гуру
******

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



Помнится, что сначала надо ведомый запустить. Точно не помню дома.
Go to the top of the page
 
+Quote Post
Connor
сообщение Jan 3 2018, 08:20
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 26-05-17
Пользователь №: 97 309



Цитата(Tanya @ Jan 3 2018, 01:18) *
Помнится, что сначала надо ведомый запустить. Точно не помню дома.

Я читал Вашу тему, Вы отвечали одному человеку по вопросу Dual Mode, я пробовал запускать вначале третий АЦП и вроде второй тоже, не получилось и вопрос как к такому решению пришли? Где-то в документации или опытным путём? Просто в документации я такого не нашёл

Теперь я осознал глубинный смысл включения ведомых АЦП
Нашёл на гитхабе такой код, переделал со своими хэндлерами и всё заработало, действительно надо было включить вначале оба АЦП, которые работают в slave режиме
Код
/*##-8- Start ADC3 conversion process ######################################*/
  if(HAL_ADC_Start(&AdcHandle3) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
  }
  
  /*##-9- Start ADC2 conversion process ######################################*/
  if(HAL_ADC_Start(&AdcHandle2) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
  }
  
  /*##-10- Start ADC1 conversion process and enable DMA #######################*/  
  if(HAL_ADCEx_MultiModeStart_DMA(&AdcHandle1, (uint32_t*)aADCTripleConvertedValue, 3) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
  }

Другое дело что значения теперь записываются в первые три ячейки массива, а не в девять, как я предполагал (первые три для первых каналов АЦП1-3, вторые три для вторых каналов АЦП1-3, последние для третьих каналов АЦП1-3). И дело в том что включен режим scan mode, и получается, что по идее значения в первых трёх ячейках массива должны меняться местами (как меняются местами каналы АЦП), но такого не происходит
Дополнено: Сейчас в первые три ячейки массива записываются только данные с третьего АЦП (т.е канал 3, 1, 2), почему так???


После бесконечных минут ко мне явилось озарение, луч света ударил мне прямо в лицо и я услышал "Что ты творишь, ирод?! HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t*)&ADC_buffer, 3); Три, Карл, три!"
Вот поэтому и считает три канала, а надо записать 9

Сообщение отредактировал Connor - Jan 3 2018, 08:20
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 00:40
Рейтинг@Mail.ru


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