Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
sobomd
1

ADC на STM32 - получить амплитуду синуса неизвестной частоты

15.07.2016, 21:55. Показов 5223. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет!

У меня такая задача: на вход ADC на плате STM32-H405 подаётся синусоидный сигнал неизвестной частоты, точнее, поочерёдно разных частот, в некотором диапазоне, и нужно определить, в каком случае имеет место быть наибольшая амплитуда. Собственно, я свожу задачу к определению амплитуды на каждой отдельно взятой частоте и их сравнению. Далее я застрял. Если попробовать просто читать данные с ADC подряд какое-то условно большое количество раз, то нет никакой гарантии, что мы попадём на пиковые точки синуса и корректно измерим амплитуду. Есть вариант делать между замерами некоторую паузу, чтобы попадать в разные участки синуса, но это тоже как-то ненадёжно выглядит. Сейчас рассматриваю вариант с AWD - можно начать с небольшого порогового значения, и при обработке прерывания его же повышать, таким образом, теоретически, можно получить верхнюю пиковую точку синуса, как таковую, выше которой напряжение не поднимается - то есть, если за какое-то разумное время прерывание от AWD не было сгенерировано, значит, последнее прерывание и было около пиковой точки. Разумен ли такой вариант? Возможно, есть более очевидные и простые способы, которых я, в силу малого опыта, не вижу?

Благодарю :)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2016, 21:55
Ответы с готовыми решениями:

ADC STM32
Здравствуйте! Изучаю ADC по руководству там пишут про то что каналы моно разделить на вде группы...

Adc в stm32
Нужно подключить аналоговый датчик и снять с него показания. Раньше делал это через ацп в атмеге,...

Stm32, ADC
Имеется отладочная плата с STM32F100RB. Немного поигрался, помигал диодиком по таймеру, теперь...

Stm32 adc
Столкнулся с таким проблемой, запускаю ацп 2-х канальная, работает только один канал если меняю...

12
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
15.07.2016, 22:34 2
БПФ ?
0
sobomd
15.07.2016, 23:04 3
По-вашему, это проще? :) Я загуглил и немного попробовал почитать, не понял практически ни слова, не говоря уже о том, чтобы как-то приложить это к задаче.
0 / 0 / 0
Регистрация: 18.04.2014
Сообщений: 4
15.07.2016, 23:11 4
Ещё как вариант, поскольку речь идёт о "поочерёдно разных частотах", использовать полосовые цифровые фильтры, натравленные на каждую из данных частот.
Правда, нет сведений об используемом железе - не каждый МК это потянет, но это гарантированно 100% рабочий способ.
0
0 / 0 / 0
Регистрация: 11.06.2010
Сообщений: 351
15.07.2016, 23:40 5
Не надо синхронизировать выборки с фазой сигнала. Аппроксимируйте сигнал по регулярным выборкам, наедете три параметра, частоту фазу и амплитуду. Можно сделать с помощью МНК (ФК) или упрошенного рекуррентного фильтра. Но вам наверно проще нужно.
0
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
16.07.2016, 02:55 6
Решение будет сильно зависеть от количества выборок, которое уложится на периоде входного сигнала. Если получится больше 8, то решение можно представить в виде какого-то несложного алгоритма и с известной точностью, а если меньше - то можно рассчитывать только на везение.
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
17.07.2016, 08:36 7
Автокорелляционной функцией определяем частоту, ну или если сигнал достаточно чистый - по переходам через ноль
Потом Гёрцелем или методом наименьших квадратов получаем амплитуду и бонусом фазу
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 1,031
17.07.2016, 13:38 8
если частота выборок ниже частоты сигнала, то это вообще слабо решаемая задача. частота работы Adc должна быть минимум в два раза выше измеряемой частоты. либо надо ловить переходы через ноль, но это уже не работа adc

ЗЫ теорема Котельникова в помощь :)
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
17.07.2016, 14:25 9
Котельников определению амплитуды ну никак не мешает, если известно что сигнал чистый синус.

если время наблюдения сильно больше чем один период (не важно какая там будет частота АЦП по сравнению с периодом, но чем выше тем лучше), для оценки амплитуды можно просто посчитать среднеквадратичное значение и помножить на корень из двух.
частоту можно так же оценить через среднеквадратичное значение от производной.

для этого даже памяти не надо, хранить нужно только сумму всех значний и сумму квадратов значний.
0
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 1,031
17.07.2016, 14:45 10
если решать частную задачу с синусом то можно обойтись диодом и конденсатором замеряя на нем напряжение, но все методы будь то физика или математика не дадут высокой точности если мерить реже чем полволны.
0
Vyty
17.07.2016, 14:48 11
можно транзистор 7805A заменить на KA7805 заранее спасибо!
Vyty
17.07.2016, 14:49 12
можно транзистор 7805A заменить на KA7805 заранее спасибо!
sobomd
17.07.2016, 21:50 13
Благодарю всех за ответы, буду пробовать.
17.07.2016, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.07.2016, 21:50
Помогаю со студенческими работами здесь

STM32, HAL & ADC
Подскажите, в чем проблема в следующем коде инициализации и вывода значений АЦП? Проект успешно...

Настройка ADC в STM32
Есть возможность использовать откоректированное значение опорного напряжения. VREFINT_CAL как я...

STM32 Проблемы с ADC (АЦП)
Здравствуйте, подскажите пожалуйста где ошибка. Была написана простая программа для...

STM32 ADC Int to String
Добрый вечер! В моем проекте необходимо отправлять данный с АЦП по USORT. Столкнулся со следующей...

STM32 F4 ADC+DMA+TIM
Доброго времени суток! Проблема достаточно стандартная: необходимо настроить АЦП и ДМА так, чтобы...

Как работает ADC в STM32 ?
Добрый день ! Я тут балуюсь с Нуклео бордом и хочу замерить напряжение через ADC. Недолго думая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru