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

 
 
> STM32F107. Проблема при работе АЦП с DMA., Странное явление - впервые столкнулся
Atridies
сообщение Jul 3 2018, 08:33
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Использую АЦП в микроконтроллере STM32F107 в режиме сбора данных с 9 регулярных каналов.
При сборе данные последовательно с каждого выхода (без DMA, по прерыванию от АЦП самостоятельно запускаю новое измерение) - никаких проблем нет. Но если я использую режим SCAN (сбор данных идет через DMA, обработка - в прерывании от DMA) - то периодически, при определенных условиях появляется сдвиг результатов на один канал. Эти условия - переключение в другое состояние некоторых выходов. Как и с чем это может быть связано - непонятно.
Примечательно еще то, что в другом экземпляре (практически аналогичное устройство) - такой проблемы нет. В остальном - микроконтроллер ведет себя абсолютно также.
Проблем с времени сэмплирования - тоже не должно быть, т.к. у меня время - более 10*тау.
Знаю, что такое бывает при отладке - но я вижу это и при отладке и без нее.

Проц сгорел? Я не встречал еще такого, чтобы так избирательно сгорал процессор.

В чем может быть проблема?

Ниже - настройки АЦП и DMA.
Прикрепленное изображение
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jul 3 2018, 08:56
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



ПДП работает в циклическом режиме? Если нет - возможно из-за запрета прерываний или более приоритетного обработчика вы не успеваете настроить ПДП на следующую порцию данных, за это время АЦП успевает сделать два измерения и все остальные данные получаются сдвинуты на один канал. В этом случае имеет смысл делать буфер для результатов удвоенного размера, запускать ПДП в циклическом режиме и делать обработку заполненной половины буфера в прервании ПДП по флагам заполнения половины и всего буфера.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Atridies
сообщение Jul 3 2018, 17:04
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468



Цитата(Сергей Борщ @ Jul 3 2018, 11:56) *
ПДП работает в циклическом режиме?

Нет. Причем сразу после срабатывания прерывания - я выключаю DMA и перенастраиваю его. После этого, я запускаю DMA и запускаю АЦП. АЦП Работает в режиме SCAN: т.е. проходит группу и останавливается. Поэтому в принципе - не должно быть проблем с опаздыванием прерывания.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 3 2018, 20:03
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Atridies @ Jul 3 2018, 20:04) *
АЦП Работает в режиме SCAN: т.е. проходит группу и останавливается.
А поставьте точку останова в прерывании ПДП, сделайте шаг вручную и посмотрите, не взвелся ли флаг готовности данных АЦП. Может оно не останавливается, а продолжает молотить?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


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


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