latching-relay-single-pin-control/

Бистабильные реле, такие, как использованные нами ранее 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 .

EnglishRussianUkrainian