Например TDA7294

Форум РадиоКот :: Просмотр темы - Программный детектор нуля используая АЦП
Форум РадиоКот
https://radiokot.ru/forum/

Программный детектор нуля используая АЦП
https://radiokot.ru/forum/viewtopic.php?f=59&t=147518
Страница 1 из 1

Автор:  MIFus [ Вс авг 13, 2017 09:03:24 ]
Заголовок сообщения:  Программный детектор нуля используая АЦП

Здравствуйте!!!
Уважаемые объясните пожалуйста, как правильнее реализовать программно детектор нуля синусоидального сигнала 50Гц-10кГц на мк стм32 на HAL. Начиная от алгоритма до реализации, до меня самого до конца не доходит. Используя АЦП, Таймеры либо АЦП, ДМА, таймеры

Пробовал:
1) использовать оконный компаратор АЦП (Типо в референсе он как раз применяется для детектирования), задаю окно, но получается, что каждый раз, когда значение выходит за min или max у меня вызывается флаг и прерывание я считываю и проверяю значение АЦП и так постоянно это не то что нужно и ресурсно-затратно, мне нужно наоборот чтобы когда значение ацп было в окне (тоесть около нуля+ учет на дребезг) я вызывал функцию единожды, считывал ещё раз значение АЦП убеждался то что это переход через 0 с + на - или наоборот и далее делал уже то что мне нужно и опять это нужно делать единожды до следующего перехода.

2)По таймеру через каждые ххх мкс запускаю ацп, считываю значение, вычитаю середину и смотрю получился переход через ноль или нет?

3) Использую АЦП+ ДМА по набору буфера считаю среднее делаю вычисления и выводы

Но до правильного результата так и не дошел

Алгоритм нужен исходя из условий, то что одновременно переходов через ноль нужно считать до 5 штук ( пять сигналов) Ну и минимально ресурсно и трудозатратно для контроллера.

Может кто поделится опытом

Спасибо! :)

Автор:  AVI-crak [ Вс авг 13, 2017 17:17:35 ]
Заголовок сообщения:  Re: Программный детектор нуля используая АЦП

Для компараторов значения мин/мах нужно менять после срабатывания. Значение нуля просчитывается через сумму значений буфера, но можно и аппаратно - что кстати более точно.
цикл:
1 прерывание мин (0+1), после срабатывания меняем значение мин на (0-1)
2 прерывание мин (0-1), после срабатывания вырубаем прерывание мин, и включаем прерывание мах со значением (0-1)
Произошёл переход через ноль.
3 прерывание мах (0-1), после срабатывания меняем значение мах на (0+1)
4 прерывание мах (0+1), после срабатывания вырубаем прерывание мах, и включаем прерывание мин со значением (0+1)
Произошёл переход через ноль.

Этот вариант предназначен для идеального синуса, чистого как слеза.

Для грязи лучше использовать аппаратное решение. Вариантов схем великое множество, первая попавшийся ссылка
http://www.rlocman.ru/shem/schematics.html?di=125698

Автор:  MIFus [ Ср окт 04, 2017 15:58:27 ]
Заголовок сообщения:  Re: Программный детектор нуля используая АЦП

Для компараторов значения мин/мах нужно менять после срабатывания. Значение нуля просчитывается через сумму значений буфера, но можно и аппаратно - что кстати более точно.
цикл:
1 прерывание мин (0+1), после срабатывания меняем значение мин на (0-1)
2 прерывание мин (0-1), после срабатывания вырубаем прерывание мин, и включаем прерывание мах со значением (0-1)
Произошёл переход через ноль.
3 прерывание мах (0-1), после срабатывания меняем значение мах на (0+1)
4 прерывание мах (0+1), после срабатывания вырубаем прерывание мах, и включаем прерывание мин со значением (0+1)
Произошёл переход через ноль.

Этот вариант предназначен для идеального синуса, чистого как слеза.

Для грязи лучше использовать аппаратное решение. Вариантов схем великое множество, первая попавшийся ссылка
http://www.rlocman.ru/shem/schematics.html?di=125698

Спасибо, а как бы выглядел вариант решения без использования компаратора ацп?
В моём случае - аппаратное решение не подходит

Автор:  MIFus [ Чт окт 05, 2017 17:40:01 ]
Заголовок сообщения:  Re: Программный детектор нуля используая АЦП

Для компараторов значения мин/мах нужно менять после срабатывания. Значение нуля просчитывается через сумму значений буфера, но можно и аппаратно - что кстати более точно.
цикл:
1 прерывание мин (0+1), после срабатывания меняем значение мин на (0-1)
2 прерывание мин (0-1), после срабатывания вырубаем прерывание мин, и включаем прерывание мах со значением (0-1)
Произошёл переход через ноль.
3 прерывание мах (0-1), после срабатывания меняем значение мах на (0+1)
4 прерывание мах (0+1), после срабатывания вырубаем прерывание мах, и включаем прерывание мин со значением (0+1)
Произошёл переход через ноль.

Этот вариант предназначен для идеального синуса, чистого как слеза.

Для грязи лучше использовать аппаратное решение. Вариантов схем великое множество, первая попавшийся ссылка
http://www.rlocman.ru/shem/schematics.html?di=125698

+ не уточнил, что надо детектор на три фазы на одном ацп на разных каналах, и в такой реализации он не будет работать

Автор:  AVI-crak [ Ср окт 11, 2017 10:52:41 ]
Заголовок сообщения:  Re: Программный детектор нуля используая АЦП

+ не уточнил, что надо детектор на три фазы на одном ацп на разных каналах, и в такой реализации он не будет работать

Логично что не будет, да и не должен при таком применении.
Для промышленного выпрямления напряжения симисторами применяются датчики направления тока, ну это как измерение напряжения десяти ватным резистором. Вся суть в том что симистор должен включаться в момент когда через него может течь ток в нагрузку, а не наоборот.
Нагрузка бывает разной, особая весёлость - трёхфазный двигатель. Чуть проще - трансформатор, и ещё проще - получение постоянного напряжения. Регулировать симисторами резистивную нагрузку в фазовом режиме - просто глупо, там проще применить реле.

В целом подобное управление собирается на аналоге, но если очень хочется - то можно и на мк. Датчики направления тока строго аналоговые, ущерб от фейерверка намного выше копеечной стоимости мк. Сам мк может участвовать в синхронизации процессов переключения и регулировке. Это уже чисто программный код. На таймеры можно скинуть подсчёт временных интервалов и фазы. На ацп: измерение активного напряжения фаз и нагрузки, токов каждой фазы и нагрузки. Здесь тремя линиями не обойтись, да и разрядность мала.

Но для начала нужно выяснить характер нагрузки.

Автор:  Galizin [ Пт окт 13, 2017 20:17:43 ]
Заголовок сообщения:  Re: Программный детектор нуля используая АЦП

Посмотрите в сторону вейвлет преобразования. Если подобрать подходящую функцию, то по ее минимуму или максимуму можно определить где был переход через 0, но с задержкой. Но это не для очень широких диапазонов частот. И вычислительные ресурсы использоваться будут немеряно - нужно считать сумму 8-16 произведений для каждого отсчета АЦП.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/