Программный детектор нуля используая АЦП

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
MIFus
Родился
Сообщения: 3
Зарегистрирован: Вс авг 13, 2017 08:38:47

Программный детектор нуля используая АЦП

Сообщение MIFus »

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

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

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

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

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

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

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

Спасибо! :)
Реклама
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: Программный детектор нуля используая АЦП

Сообщение AVI-crak »

Для компараторов значения мин/мах нужно менять после срабатывания. Значение нуля просчитывается через сумму значений буфера, но можно и аппаратно - что кстати более точно.
цикл:
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
Родился
Сообщения: 3
Зарегистрирован: Вс авг 13, 2017 08:38:47

Re: Программный детектор нуля используая АЦП

Сообщение MIFus »

[uquote="AVI-crak",url="/forum/viewtopic.php?p=3161664#p3161664"]Для компараторов значения мин/мах нужно менять после срабатывания. Значение нуля просчитывается через сумму значений буфера, но можно и аппаратно - что кстати более точно.
цикл:
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[/uquote]
Спасибо, а как бы выглядел вариант решения без использования компаратора ацп?
В моём случае - аппаратное решение не подходит
MIFus
Родился
Сообщения: 3
Зарегистрирован: Вс авг 13, 2017 08:38:47

Re: Программный детектор нуля используая АЦП

Сообщение MIFus »

[uquote="AVI-crak",url="/forum/viewtopic.php?p=3161664#p3161664"]Для компараторов значения мин/мах нужно менять после срабатывания. Значение нуля просчитывается через сумму значений буфера, но можно и аппаратно - что кстати более точно.
цикл:
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[/uquote]
+ не уточнил, что надо детектор на три фазы на одном ацп на разных каналах, и в такой реализации он не будет работать
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
AVI-crak
Прорезались зубы
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17
Контактная информация:

Re: Программный детектор нуля используая АЦП

Сообщение AVI-crak »

[uquote="MIFus",url="/forum/viewtopic.php?p=3199162#p3199162"]+ не уточнил, что надо детектор на три фазы на одном ацп на разных каналах, и в такой реализации он не будет работать[/uquote]
Логично что не будет, да и не должен при таком применении.
Для промышленного выпрямления напряжения симисторами применяются датчики направления тока, ну это как измерение напряжения десяти ватным резистором. Вся суть в том что симистор должен включаться в момент когда через него может течь ток в нагрузку, а не наоборот.
Нагрузка бывает разной, особая весёлость - трёхфазный двигатель. Чуть проще - трансформатор, и ещё проще - получение постоянного напряжения. Регулировать симисторами резистивную нагрузку в фазовом режиме - просто глупо, там проще применить реле.

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

Но для начала нужно выяснить характер нагрузки.
Реклама
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Программный детектор нуля используая АЦП

Сообщение Galizin »

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

Вернуться в «ARM»