Как я могу запрограммировать переключатель (на основе полупроводникового реле или симистора), который запускает питание при пересечении нуля?
Для тех, кто не знаком с предметом: Включите питание 230 В, когда синусоида линии электропередачи пересекает ноль - в результате минимизируются электромагнитные помехи, вызванные быстрым скачком тока.
В частности, я бы предпочел перенести как можно больше в программное обеспечение. Схема обнаружения, состоящая из небольшого трансформатора, диода и пары резисторов для контроля уровней и токов, выдает «1», когда входная мощность переменного тока находится в положительной половине, «0» - в отрицательной, подключенной к входному выводу GPIO. Выходной сигнал состоит из нескольких твердотельных реле и базовых элементов, необходимых для их работы (подтягивания и т. Д.), Подключенных к выходным выводам GPIO.
Проблема заключается в синхронизации: при 50 Гц переменного тока мы получаем 100 пересечений нуля в секунду, один полупериод равен 10 мс. Чтобы добраться до разумного расстояния от пересечения нуля, чтобы поддерживать низкий уровень электромагнитных помех, мы не должны активировать выход более чем на 10% после (или до) события пересечения нуля, что означает допуск + -1 мс. Это не означает, что время реакции составляет 1 мс - мы можем разумно ожидать, что следующий переход через ноль произойдет ровно через 10 мс после первого или четвертого - 40 мс. Речь идет о гранулярности - если мы допустим 20 мс для реакции, это должно быть между 19 и 21 мс, а не 18 или 22.
Как я могу реализовать такой выход GPIO с триггерным таймером либо в пределах 1 мс, поскольку вход обнаруживает фронт, либо в пределах фиксированного кратного 10 мс с тех пор - предпочтительно с учетом некоторого отрицательного смещения (скажем, трансформатор и реле вводят задержку 1,6 мс; поэтому я хочу, чтобы триггер сработал через 8,4+ (n * 10) мс с момента входного импульса, таким образом, смещение нейтрализует задержку, вносимую схемой.) - все это, конечно, «по требованию пользователя», скажем, пользователь пишет «1 msgstr "в файл / sys / class / ... и при ближайшей (грубо) возможности вывод будет" включен ". Пользователь пишет «0», и когда наступает переход через ноль, конкретное реле отключается.
Я считаю, что это потребует написания или взлома модуля ядра. Не могли бы вы указать мне, что обрабатывает выводы GPIO Raspberry Pi в ядре, и какие таймеры я могу подключить к нему (если они еще не установлены), чтобы получить такую функциональность?