|
|
  |
STM32F107. Проблема при работе АЦП с DMA., Странное явление - впервые столкнулся |
|
|
|
Jul 3 2018, 08:33
|
Местный
  
Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468

|
Использую АЦП в микроконтроллере STM32F107 в режиме сбора данных с 9 регулярных каналов. При сборе данные последовательно с каждого выхода (без DMA, по прерыванию от АЦП самостоятельно запускаю новое измерение) - никаких проблем нет. Но если я использую режим SCAN (сбор данных идет через DMA, обработка - в прерывании от DMA) - то периодически, при определенных условиях появляется сдвиг результатов на один канал. Эти условия - переключение в другое состояние некоторых выходов. Как и с чем это может быть связано - непонятно. Примечательно еще то, что в другом экземпляре (практически аналогичное устройство) - такой проблемы нет. В остальном - микроконтроллер ведет себя абсолютно также. Проблем с времени сэмплирования - тоже не должно быть, т.к. у меня время - более 10*тау. Знаю, что такое бывает при отладке - но я вижу это и при отладке и без нее. Проц сгорел? Я не встречал еще такого, чтобы так избирательно сгорал процессор. В чем может быть проблема? Ниже - настройки АЦП и DMA.
|
|
|
|
|
Jul 3 2018, 17:04
|
Местный
  
Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468

|
Цитата(Сергей Борщ @ Jul 3 2018, 11:56)  ПДП работает в циклическом режиме? Нет. Причем сразу после срабатывания прерывания - я выключаю DMA и перенастраиваю его. После этого, я запускаю DMA и запускаю АЦП. АЦП Работает в режиме SCAN: т.е. проходит группу и останавливается. Поэтому в принципе - не должно быть проблем с опаздыванием прерывания.
|
|
|
|
|
Jul 4 2018, 14:20
|
Местный
  
Группа: Свой
Сообщений: 445
Регистрация: 7-02-05
Из: Зеленоград
Пользователь №: 2 468

|
Цитата(Сергей Борщ @ Jul 3 2018, 23:03)  А поставьте точку останова в прерывании ПДП, сделайте шаг вручную и посмотрите, не взвелся ли флаг готовности данных АЦП. Может оно не останавливается, а продолжает молотить? Поставил. Сразу после сброса. Флаг EOC - равен единице, хотя только что сбросился. Делаешь шаг (внутри прерывания) - он сбрасывается. Циклически не стал делать только потому, что есть вероятность, что в прерывание придет не сразу, а через несколько микросекунд, т.к. есть более приоритетные прерывания. В этом случае - есть шанс одновременно получить и результат и обратиться к памяти. Хотя эти коллизии вроде как разведены на аппаратном уровне... Попробую сделать циклически. По результатам отпишусь !
|
|
|
|
|
Jul 5 2018, 09:20
|
Знающий
   
Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725

|
Цитата(Atridies @ Jul 3 2018, 09:33)  Использую АЦП в микроконтроллере STM32F107 в режиме сбора данных с 9 регулярных каналов. При сборе данные последовательно с каждого выхода (без DMA, по прерыванию от АЦП самостоятельно запускаю новое измерение) - никаких проблем нет. Но если я использую режим SCAN (сбор данных идет через DMA, обработка - в прерывании от DMA) - то периодически, при определенных условиях появляется сдвиг результатов на один канал. Эти условия - переключение в другое состояние некоторых выходов. Как и с чем это может быть связано - непонятно. Добро пожаловать в клуб! Такое явление я наблюдал, о чем даже писал здесь. Может Вам как заинтересованному удастся найти тему  . Явление возникало на F103 спорадически при внешних электрических помехах, - включении моторов и питания устройств в округе, - хотя общая работоспособность процессора не нарушалась, т.е. не было слётов, перезапусков, зависаний. Я сделал вывод, что имеет место особенность цепей в процессоре аппаратно "сглатывать" какие-то флаги, что приводит к рассинхронизации ADC и DMA. Бороться различными дополнительными фильтрами питания я посчитал нецелесообразным: на всякие аппаратные решения всегда найдется помеха с вихрево-заточенной левой резьбой, а уже примененная схемотехника была достаточно зрела. Поборол программно, перенастраивая DMA и ADC каждый раз. Конечно, нет гарантии, что в цикле преобразования между перезапусками не произойдет сбой. Я пытаюсь предотвратить неверные результаты путем фильтрации и вообще игнорированием результата, если анализ флагов периферии дает основание подозревать, что последний цикл сбойнул. Опасаюсь, что надежного решения на все случаи жизни нет, т.к. проблема заложена в аппаратуре процессора. P.S. Слабо всплывает в памяти, что на тему я писал не здесь, а в форуме ST. P.P.S. Пошерстил свои темы в ST - нет. Одна из тем здесь: https://electronix.ru/forum/index.php?showt...t&p=1269738
Сообщение отредактировал KnightIgor - Jul 5 2018, 11:24
|
|
|
|
Guest_Воложанин М.А._*
|
Jul 13 2018, 20:53
|
Guests

|
У меня недавно была подобная хиромантия на F746. Ничего не мог понять, ничто не помогало. Бред да и всё. Пишу уже втупую значение в память, читаю, а в памяти старое значение. Думал с горя напиться и переползать на другую платформу. Оказалось криво настроено кэширование. Отключил к чертям. Больше не использую.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|