Форум РадиоКот 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/ |