← На главную

Управление бистабильным реле при помощи одного пина микроконтроллера

Бистабильные реле, такие, как использованные нами ранее HFD2/012-S-L2, не сложнее в управлении, чем обычные. Пускаем ток через одну катушку, и реле переключается в первое положение. Пускаем ток через другую, и реле переключается во второе положение. Обесточиваем обе катушки, и реле держит свое последнее состояние. Вот только если делать это «в лоб», то понадобится два пина микроконтроллера. Спрашивается, а можно ли обойтись только одним?

Оказывается, что можно. Рассмотрим следующую схему:

Схема управления бистабильным реле при помощи одного пина микроконтроллера

Здесь применен сдвоенный компаратор LM393. Он имеет выход с открытым коллектором и по даташиту [PDF] может пропускать через себя до 20 мА. То что нужно для нашей задачи.

Когда на пине микроконтроллера низкое напряжение, верхний компаратор на схеме притягивает первую катушку к земле. Когда напряжение на пине высокое, нижний компаратор притягивает к земле вторую катушку. Когда пин находится в состоянии высокого импеданса (high-Z), обе катушки обесточены.

Соответствующий код:

void switchPinModeToInput() { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void switchPinModeToOutput() { GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void switchRelayToPositionA() { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); switchPinModeToOutput(); HAL_Delay(10); switchPinModeToInput(); } void switchRelayToPositionB() { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); switchPinModeToOutput(); HAL_Delay(10); switchPinModeToInput(); } void init() { switchPinModeToInput(); } void loop() { switchRelayToPositionA(); HAL_Delay(1000); switchRelayToPositionB(); HAL_Delay(1000); }

Для тестирования всего этого дела был использован макет на основе STM32F030:

Управление бистабильным реле одним пином МК

Все работает как часы. По площади схема занимает столько же, сколько и пара транзисторов в корпусе TO-92 с резисторами на базе. По деньгам получается дороже. Но учитывая общую стоимость самодельного трансивера (или для чего вы намерены применить схему), разница в итоге будет незначительной.

Дополнение: Описанные здесь идеи были применены в трансивере AYN/A.