Проекты GitHub SourceForge |
BtMesh /
ScreenControllerКонтроллер проекционного экранаВ качестве основы был взят экран с электроприводом Sakura Printing Cinema S'OK SCPSM-266x150FG-ED60 Pro 120. У экрана есть довольно большое вертикальное нерабочее (черное) поле, что позволяет регулировать высоту рабочего (белого) поля в широком диапазоне. Поэтому хотелось бы иметь возможность выдвигать экран на определенно настроенный уровень автоматически. С точки зрения BT Mesh, хотелось бы сделать реализацию двух моделей: Generic On Off и Generic Level. On/Off дает команду на открытие/закрытие экрана, а Level - на степень открытия в процентах. Но для этого, нужно придумать механизм, как контроллер узнает степень открытия экрана. Возможны два варианта:
Первый пункт можно считать верным, если учитывать то, что в экране используется синхронный двигатель переменного тока, и частота его вращения зависит от частоты тока в сети, которая, как известно, стабилизируется очень точно. Но, в любом случае, еще необходимо иметь датчики положения полностью закрытого и полностью открытого экрана. Такие датчики присутствуют штатно в виде концевых выключателей, которые отключают двигатель, если эран находитсяв одном из крайних положений. Добавление энкодера.Выяснилось, что удодобнее вего установить энкодер на вал концевых датчиков. Для этого пришлось изготовить специальное колесо энкодера. Конечный автомат управления экраном.Основной идеей алгоритма управления экраном является то, что в любой момент внутренне представление контроллера о текущем физическом состоянии экрана может разойтись с реальностью, и необходимо сделать так, чтобы контроллер мог вернутьься в рабочее состояние самостоятельно, без специальных действий пользователя. Для этого был разработан конечный автомат (вернее, несколько конечных автоматов) для осуществления управления экраном, его синхронизацией с физическим состоянием и калибровкой. Существуют 6 стабильных состояний для экрана:
С самого начала, устройство находится в первом состоянии. Следующим шагом, необходимо определить максимальное значение позиции, которое получается при полном открытии экрана. Данное значение запоминается в энергонезависимой памяти и в последующие включения, котнроллер инициальзируется уже во втором состоянии. Состояния 3 и 4 - аварийные или промежуточные, и в нормальной ситуации контроллер перейти в них не может. На самом деле, их вообще можно убрать из схемы, так как в случае ошибки, проще перейти снова в первое состояние. Определить текущее положение экрана контроллер может только двумя способами: полностью открыв или полностью закрыв экран. В первом случае, текущая позиция будет равно 0, во втором - максимальному значению. С этого момента, контроллер межет определять позицию экрана с помощью датчика движения (энкодера). Однако, при длительной работе, энкодер может накапливать ошибки и значение текущей позиции будет расходится с фактическим положением полотна экрана. Поэтому, текущее значение всегда корректируется, если экран полностью открывается или закрывается. Всделствии этого, были реализованы три команды управления эераном:
Последовательность команд: Full Close - Full Open должна приводить к перекалибровке максимального значения позиции (а то, мало ли чего). Full CloseВыполнение этой команды приводит к определению текущей позиции как нулевой. Значение максимальной позиции никак не меняется. Full OpenСледует отметить различие между действиями: "Find MAX" и "Move to MAX". Оба действия приводят к тому, что экран открывается на максимальную позицию до срабатывания концевого датчика. Однако, в действии "Find MAX", текущее значение позиции записывается в энергонезависимую память, как максимальное значение позиции. "Find MAX" вызывается только тогда, когда максимальное значение позиции неопределено, за исключением, если текущая позиция равно нулю. В этом случае, должно выполнятся описанное в предыдущем разделе условие перекалибровки максимального значения при поступлении последовательности команд: Full Close - Full Open. Partial OpenСсылки
|