Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Странное поведение АЦП


Автор: baldman88 16.1.2015, 12:31
Доброго всем времени суток. Нужно оцифровывать напряжение с аналогового датчика и передавать данные в ПК для дальнейшей обработки. Есть плата (даже три) на STM32. АЦП, вроде, настроил -- в прерывании UART запускается однократное преобразование. Данные по UART запрашиваются каждые 50 мс.  Решил проверить. Датчика самого нет, так как этой частью образовательного проектика занимается одногрупник, поэтому решил проверить с помощью переменного резистора.
Подключил. Запускаю ... Кручу движок резистора ... АЦП начинает менять данные только секунд так через 10-15. Перестаю крутить -- тоже самое, данные меняются еще секунд 10-15. Думал, может с UART чего не так, так нет, с ним все в порядке: в его прерывании вызываю функцию-заглушку, в которой инкрементируется статическая переменная, вместо запуска АЦП, и получаю то что и должно быть (такая себе пила).
Попробовал другую плату -- опять та же ерунда. Возникает ощущение, что где-то есть довольно большая паразитная емкость, которая сначала долго заряжается, а потом долго разряжается. Вопрос где? Провода по дороге к переменному резистору? Сам переменный резистор? Заранее благодарен любому совету.

Автор: Romikgy 16.1.2015, 16:03
я думаю что ошибка в коде ..... особенно после 
Цитата(baldman88 @  16.1.2015,  11:31 Найти цитируемый пост)
в прерывании UART запускается однократное преобразование


Автор: baldman88 16.1.2015, 17:03
Цитата(Romikgy @ 16.1.2015,  16:03)
я думаю что ошибка в коде ..... особенно после 
Цитата(baldman88 @  16.1.2015,  11:31 Найти цитируемый пост)
в прерывании UART запускается однократное преобразование

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

Автор: tzirechnoy 16.1.2015, 17:47
Притом, скорее всего, в коде приложэния на компьютэре.

Поскольку Вы, наверное, вместо того, чтобы воспользоваться для начала каким-нибудь известным терминалом -- написали своё не Delphi, и теперь удивляетесь, почему оно неработает.

Автор: baldman88 16.1.2015, 21:58
Цитата(tzirechnoy @ 16.1.2015,  17:47)
Притом, скорее всего, в коде приложэния на компьютэре.

Поскольку Вы, наверное, вместо того, чтобы воспользоваться для начала каким-нибудь известным терминалом -- написали своё не Delphi, и теперь удивляетесь, почему оно неработает.

Зря Вы так. Да, приложение самописное, на Qt, но написано и отлажено больше года назад, и за это время с ним проблем не возникало.

Автор: tzirechnoy 17.1.2015, 17:21
Цитата
Зря Вы так.


Что -- зря? Оскорбил писателя на Qt предположэнием, что он пишэт на Delphi?

Ничего, походишь оскорблённым, не переломишься.

Автор: baldman88 18.1.2015, 11:08
Цитата(tzirechnoy @ 17.1.2015,  17:21)
Цитата
Зря Вы так.


Что -- зря? Оскорбил писателя на Qt предположэнием, что он пишэт на Delphi?

Ничего, походишь оскорблённым, не переломишься.

А вот хамство не есть хорошо. Ну да ладно, дело Ваше, ведь хамить легче, чем давать дельные советы.
А ошибка оказалась банальной. Сброс флага прерывания на прием в обработчике UART стоял не в том месте.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)