sobomd
|
|
1 | |
ADC на STM32 - получить амплитуду синуса неизвестной частоты15.07.2016, 21:55. Показов 5223. Ответов 12
Метки нет (Все метки)
Привет!
У меня такая задача: на вход ADC на плате STM32-H405 подаётся синусоидный сигнал неизвестной частоты, точнее, поочерёдно разных частот, в некотором диапазоне, и нужно определить, в каком случае имеет место быть наибольшая амплитуда. Собственно, я свожу задачу к определению амплитуды на каждой отдельно взятой частоте и их сравнению. Далее я застрял. Если попробовать просто читать данные с ADC подряд какое-то условно большое количество раз, то нет никакой гарантии, что мы попадём на пиковые точки синуса и корректно измерим амплитуду. Есть вариант делать между замерами некоторую паузу, чтобы попадать в разные участки синуса, но это тоже как-то ненадёжно выглядит. Сейчас рассматриваю вариант с AWD - можно начать с небольшого порогового значения, и при обработке прерывания его же повышать, таким образом, теоретически, можно получить верхнюю пиковую точку синуса, как таковую, выше которой напряжение не поднимается - то есть, если за какое-то разумное время прерывание от AWD не было сгенерировано, значит, последнее прерывание и было около пиковой точки. Разумен ли такой вариант? Возможно, есть более очевидные и простые способы, которых я, в силу малого опыта, не вижу? Благодарю :) |
15.07.2016, 21:55 | |
Ответы с готовыми решениями:
12
ADC STM32 Adc в stm32 Stm32, ADC Stm32 adc |
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 | |
17.07.2016, 21:50 | |
Помогаю со студенческими работами здесь
13
STM32, HAL & ADC Настройка ADC в STM32 STM32 Проблемы с ADC (АЦП) STM32 ADC Int to String STM32 F4 ADC+DMA+TIM Как работает ADC в STM32 ? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |