Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/34: Рейтинг темы: голосов - 34, средняя оценка - 4.50
3 / 3 / 0
Регистрация: 13.06.2016
Сообщений: 36

Обработка синусоидального сигнала ардуино

15.05.2019, 16:55. Показов 7254. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Стоит такая задача:

1) Есть синусоидальный сигнал, частота которого может меняться (медленно, минуты) в пределах 10% и амплитуда может меняться (гораздо быстрее частоты, за десятые, может сотые доли секунды) в два-три раза.

2) Необходимо организовать счётчик импульсов - для расчёта текущей частоты, далее, необходимо замерять время каждой вершины синусоиды и амплитуду каждого импульса, то есть фиксировать время и амплитуду каждой синусоидальной макушки (положительная часть, отрицательную не надо).

3) сразу после фиксации вершины синуса программа выполняет некоторый код, генерирующий управляющие сигналы, а именно, проверяет условия на текущую амплитуду (пачка if-ов), синхронно с вершиной синуса генерит меандр с длительностью импульса, зависящей от длительности между соседними вершинами исследуемого синусоидального сигнала.

На данный момент задача решена по рабоче-крестьянски: Каждый главный цикл программы МК опрашивает аналоговый вход АЦП analogRead(), и в зависимости от полученного значения, решает (опять блок if-ов), попали мы на вершину синуса или нет. Если нет, то следующий цикл, если попали, то фиксирует текущее время, амплитуду и запускает часть программы по генерации меандра.

Вся эта весчь тратит примерно 200 - 250 мксекунд на один цикл (получаем, что если на один период синусоиды надо потратить минимум 50 точек измерений и времени 50 * 200 = 10 000, то есть 0.01 сек), то есть максимально с приемлемой точностью определить частоту (точность необходима не ниже 0.01%, отсюда и минимальное число в 50 точек на период, все числа взяты на глаз, для качественной оценки) возможно на частотах сигнала не более 100 Гц (реально наверное около 80 Гц).

Хорошо было бы расширить возможности до порядка 10 кГц. Думаю, что для этого надо не мониторить постоянно сигнал с помощью analogRead(), а организовать прерывание.
Пока что дошёл до идеи, как сделать прерывание на начало синусоиды - пропустить синус через компаратор МК-ра, который как раз выдаст меандр, у которого фронты будут по нулевым точкам синуса. Потом этот меандр слушать прерыванием - правда, тут не знаю, как быть с пинами - выход компаратора один пин, а прерывание может быть на этот пин повесить нельзя, хотя может эти пины и совпадают, пока не углублялся в тему (хотя может можно просто с одного пина на другой перемычку кинуть и настроить OUTPUT и INPUT, если пины не совпадают).

Потом по каждому прерыванию включать счётчик и частота готова. Но для фиксации амплитуды вершины синуса надо запустить analogRead() с задержкой на четверть периода, для этого надо после срабатывания первого прерывания по нарастанию фронта меандра с компаратора запустить второе прерывание по таймеру, которое просигналит как раз через четверть периода. Период - величина, измеряемая в реальном времени и постоянно меняется.
Далее, после измерения амплитуды вершины синуса, необходимо включить свой, управляющий, меандр длительностью 0.15 - 0.3 периода (величина подбирается опытным путём, и подобранная один раз потом на протяжении программы не меняется, хотя можно менять, это не суть), то есть на каком-то цифровом пине подать HIGH и через определённое время подать LOW. Получается, что необходимо ещё одно, третье в общем и второе по таймеру, прерывание.

Вопрос - правильной ли дорогой я иду??? А можно ли как-то организовать прерывание не по нулю синуса, а по его вершине??? В таком случае на одно прерывание меньше.

Можете ли озвучить, какую аппаратную часть может необходимо допилить (со схемой куда какие проводки и детали, с номиналами), какие есть аппаратные возможности самой ардуины (ардуино уно), какие функции по прерываниям лучше использовать, какие тонкости работы с таймерами, одновременной работы с двумя прерываниями по таймеру, надо ли это вешать на разные таймеры, или на одном можно???

Может ссылки на статьи.

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.05.2019, 16:55
Ответы с готовыми решениями:

DDS-генератор синусоидального сигнала
Приветствую всех! Долго репу чесал и понял, что без "звонка другу" мне не обойтись. Навыков в программировании нет вообще, разве что...

Обработка изображений и ардуино
Всем доброго времени суток! У уважаемых экспертов хочу спросить - можно ли обрабатывать изображения микроконтроллером ардуино? Например,...

Обработка изображений (использование контроллеров Ардуино)
помогите пожалуйста, ибо я не смыслю ничего в этой теме. Нашел кучу статей, но ничего не понимаю. Если есть возможность напишите курсовую...

8
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
15.05.2019, 18:59
предлагаю:
во первых уйти от ардуино
во вторых задействовать БПФ ибо
Цитата Сообщение от Evgen80 Посмотреть сообщение
и амплитуда может меняться (гораздо быстрее частоты, за десятые, может сотые доли секунды) в два-три раза.
очень похоже на АМ(Амплитудную Модуляцию)
0
3 / 3 / 0
Регистрация: 13.06.2016
Сообщений: 36
15.05.2019, 21:10  [ТС]
нет там амплитудной модуляции и БПФ мне вообще ни к чему. Как раз ардуина призвана отслеживать амплитуду и в некоторые моменты времени приводить её в необходимое значение посредством выработки управляющих сигналов.

Сам вызов analogRead() занимает мало машинного времени, не помню сколько, но не более 10 мксек. Основная потеря времени происходит на проверке порядка двух десятков блоков if и манипуляциях с переменными внутри этих блоков. Применение прерываний избавит от монотонного опроса порта АЦП с проверкой этих условий каждый раз. Проверки будут происходить только по прерыванию, а это минимум в 10 раз будет быстрее, то есть 1 кГц получится достичь. Реально наверное и все 5 кГц.

Задача исходная описана конкретно, не надо придумывать БПФ и прочее и додумывать то, чего нет.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
16.05.2019, 00:37
Цитата Сообщение от Evgen80 Посмотреть сообщение
нет там амплитудной модуляции
ну нет, так нет
Цитата Сообщение от Evgen80 Посмотреть сообщение
то есть 1 кГц получится достичь. Реально наверное и все 5 кГц.
удачи
0
2 / 1 / 1
Регистрация: 14.10.2014
Сообщений: 13
24.05.2019, 12:05
Поставь детектор амплитуды (диод, резистор и кондендсатор), он выделит уровень амплитуды сигнала.
И тогда не нужно мерять всю синусоиду выискивая максимум, пореже мерять.

А частоту только компаратором и счетчиком.
0
3 / 3 / 0
Регистрация: 13.06.2016
Сообщений: 36
24.05.2019, 12:44  [ТС]
Цитата Сообщение от taraserker Посмотреть сообщение
Поставь детектор амплитуды (диод, резистор и кондендсатор), он выделит уровень амплитуды сигнала.
И тогда не нужно мерять всю синусоиду выискивая максимум, пореже мерять.
А частоту только компаратором и счетчиком.

Ок, попробую.
0
0 / 0 / 0
Регистрация: 08.07.2020
Сообщений: 2
08.07.2020, 13:16
Evgen80, Добрый день! Получилось у вас решить детектирование амплитуды? С уважением Дмитрий.
0
3 / 3 / 0
Регистрация: 13.06.2016
Сообщений: 36
10.07.2020, 01:25  [ТС]
Пока не было возможности заниматься той темой. Но, как указал товарищ, способ детектирования с помощью диода и RC цепочки должен сработать на 99%.
По факту не делал ещё. Однако не вижу здесь проблем.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
10.07.2020, 05:12
Цитата Сообщение от Evgen80 Посмотреть сообщение
способ детектирования с помощью диода и RC цепочки должен сработать на 99%.
Это и есть детектор АМ, но
Цитата Сообщение от Evgen80 Посмотреть сообщение
нет там амплитудной модуляции
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2020, 05:12
Помогаю со студенческими работами здесь

Как проверить реле к ардуино без ардуино
Собственно вопрос в названии. Дело в том что реле пришло по почте раньше чем само ардуино. Так как я начинающий электронщик, то возникли...

Цифровая обработка синусоидального сигнала
Здравствуйте, необходимо обработать синусоидальное напряжение, пускай пока что будет бытовое напряжение в 220В. На базе микроконтроллера...

Подача синусоидального сигнала
Доброго времени суток! С помощью контроллера нужно подать синусоидальный сигнал вида A*sin(w*t) на серву, чтобы она непрерывно двигалась....

Стабилизация амплитуды синусоидального сигнала
Добрый день. Пусть имеется синусоидальный сигнал. В процессе некоторых манипуляций его амплитуда меняется между несколькими стабильными...

Генератор синусоидального сигнала на STM32
Здравствуйте, реализую получить синус через ШИМ. Вроде все получилось, но нижняя полу волна отличается от верхней. Совсем не могу...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru