개요
이전 글에서는 단상 AC 동기모터(AC Synchronous Motor) 의 정회전 및 역회전 배선 방법을 알아보았습니다.
이번 글에서는 이를 한 단계 발전시켜, MCU(STMicroelectronics사의 STM32) 를 이용하여 프로그램적으로 단상 AC 동기모터의 회전 방향을 제어하는 방법을 살펴봅니다.
특히 릴레이 제어 회로를 통해 모터의 정·역회전을 구현한 실제 예제를 중심으로 설명하며, 하드웨어 제어와 소프트웨어 로직의 연계를 이해하는 데 중점을 두었습니다.
Relay 의 종류
릴레이는 내부 접점의 구성 방식에 따라 여러 형태로 분류됩니다.
대표적인 종류는 다음과 같습니다:
SPST(Single Pole Single Throw), SPDT(Single Pole Double Throw), SP3T(Single Pole Three Throw),
DPST(Double Pole Single Throw), DPDT(Double Pole Double Throw), DP3T(Double Pole Three Throw)
여기서 Pole(극) 은 입력선, Throw(투) 는 출력선을 의미합니다.
즉, SPDT(Single Pole Double Throw) 는 입력 1개, 출력 2개를 갖는 릴레이를 뜻합니다.

릴레이의 기본 구조와 동작 원리에 대한 자세한 설명은 아래 링크에서 참고하실 수 있습니다.
https://m.blog.naver.com/ycpiglet/222173220362
회로 구성
이번 회로에서 필요한 릴레이는 SPDT(Single Pole Double Throw, 단극 양투) 형입니다.
이 릴레이는 하나의 공통 단자를 기준으로 두 개의 접점을 전환할 수 있어,
단상 AC 동기모터의 회전 방향을 제어하기에 적합합니다.
AC 220V 전원 중 Neutral(중성선) 은 모터의 공통선(Common) 에 직접 연결합니다.
그리고 Live(전원선) 은 릴레이를 통해 콘덴서가 연결된 두 단자 중 하나에 인가합니다.
릴레이가 어느 쪽 단자에 전원을 공급하느냐에 따라,
콘덴서의 위상 연결 방향이 바뀌면서 모터의 회전 방향이 반전됩니다.

즉, 위의 그림에서 처럼
-
릴레이가 한쪽 접점(①) 에 연결되면 → 정회전(Forward)
-
반대쪽 접점(②)에 연결되면 → 역회전(Reverse) 이 됩니다.
이와 같은 방식은 구조가 간단하고,
릴레이 하나만으로도 단상 AC 동기모터의 정·역회전 제어를 MCU로 구현할 수 있다는 장점이 있습니다.
MCU 제어회로
단상 AC 동기모터와 릴레이를 이용한 회로 구성을 완료했다면, 다음 단계는 MCU를 통해 릴레이를 제어하는 것입니다.
릴레이의 코일을 MCU에서 제어하게 되면, 프로그램 명령만으로도 모터의 정회전과 역회전을 자유롭게 전환할 수 있습니다.
이번에는 MCU 출력 핀과 릴레이 코일을 연결하는 회로 구성, 그리고 FET를 이용한 릴레이 구동 방식을 중심으로 살펴보겠습니다.
아래 회로는 STM32 MCU를 이용하여 릴레이(RY1) 를 제어하고, 이를 통해 단상 AC 동기모터의 회전 방향을 결정하는 구성입니다.
릴레이는 SPDT(Single Pole Double Throw) 형으로,
접점 ①과 ② 중 어느 쪽에 콘덴서(C1)가 연결되느냐에 따라 모터의 정회전 또는 역회전이 결정됩니다.
릴레이의 공통(COM) 단자에는 모터의 보조권선이,
그리고 각 전환 접점에는 콘덴서 양단이 연결되어 있습니다.
릴레이 코일은 DC 24V로 구동되며,
MCU의 GPIO 핀을 통해 N채널 MOSFET(Q1, 2N7002E) 으로 스위칭 제어합니다.
MOSFET이 ON 되면 코일에 전류가 흐르며 릴레이가 동작하고,
접점이 전환되어 모터의 위상 연결이 반대가 됩니다.
릴레이 코일에는 역기전력 방지용 다이오드(D1) 가 병렬로 연결되어 있으며,
MCU와 MOSFET 게이트 사이에는 1kΩ 직렬 저항(R1),
게이트 풀다운용으로 10kΩ 저항(R2) 이 연결되어 있습니다.
이 구성은 MCU 출력 핀이 High 상태일 때만 MOSFET이 도통되도록 하여,
전원 인가 시의 오동작을 방지합니다.

프로그램 제어로직
이제 회로 구성이 완료되었으므로,
MCU의 GPIO 핀을 이용해 릴레이를 제어하는 프로그램 코드를 작성해 보겠습니다.
이 예제에서는 STM32 HAL 함수를 이용하여 간단히 정회전과 역회전을 제어합니다.
/* ==============================================
* AC Synchronous Motor Direction Control Example
* MCU : STM32 (HAL Library)
* ============================================== */
#include “main.h”
#include <stdbool.h>
// 릴레이 제어용 핀 정의
#define RELAY_GPIO_Port GPIOA
#define RELAY_Pin GPIO_PIN_5
// 함수 프로토타입
void Motor_Forward(void);
void Motor_Reverse(void);
void Motor_Forward(void)
{
// GPIO Low → 릴레이 OFF → 접점② 연결
HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_RESET);
}
void Motor_Reverse(void)
{
// GPIO High → 릴레이 ON → 접점① 연결
HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_SET);
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
// 정회전 동작
Motor_Forward();
HAL_Delay(3000); // 3초 동안 정회전
// 역회전 동작
Motor_Reverse();
HAL_Delay(3000); // 3초 동안 역회전
}
}
위의 예제 코드는 STM32 MCU를 이용하여 릴레이를 제어하고,
이를 통해 단상 AC 동기모터의 정·역회전을 프로그램적으로 전환하는 방법을 보여줍니다.
먼저, CubeMX에서 릴레이 제어용 GPIO 핀을 출력 모드(Output Push-Pull) 로 설정합니다.
이 핀은 릴레이 코일을 구동하는 MOSFET의 게이트에 연결되어 있으며,
GPIO의 출력 상태에 따라 릴레이가 동작하거나 해제됩니다.
코드는 두 개의 함수로 구성되어 있습니다.Motor_Forward() 함수는 릴레이를 OFF 상태로 유지하여
접점이 기본 위치(②번)에 머물도록 하고, 모터는 정회전(Forward) 방향으로 동작합니다.
반대로 Motor_Reverse() 함수는 릴레이를 ON 상태로 만들어
접점이 ①번 위치로 전환되며, 모터는 역회전(Reverse) 방향으로 회전하게 됩니다.
HAL_GPIO_WritePin() 함수는 STM32 HAL 라이브러리에서 제공하는 표준 GPIO 제어 함수입니다.
이 함수를 이용하면 MCU의 출력 핀을 간단히 High 또는 Low 상태로 설정할 수 있으며,
그 결과 릴레이의 코일 전류를 제어하여 모터의 회전 방향을 프로그램 명령으로 바꿀 수 있습니다.
main() 함수에서는 일정 시간 간격으로 정회전과 역회전을 반복하도록 설정했습니다.
예제에서는 3초마다 방향을 바꾸도록 되어 있지만,
실제 응용에서는 모터의 기계적 반응이나 안전 여유를 고려해
500ms~1초 정도의 완충 시간을 두는 것이 좋습니다.
이처럼 MCU가 릴레이를 제어함으로써,
별도의 스위치 조작 없이 코드 한 줄로 모터의 방향을 자유롭게 제어할 수 있습니다.
다음 글은 Triac과 SPDT 릴레이를 결합한 단상 AC 동기모터 정·역회전 제어 회로에 대해 알아 보겠습니다.
[3편] Triac + Relay를 이용한 단상 AC 동기 모터 정·역회전 제어 회로 설계