몇 달을 붙잡고 있던 DMX-512 디밍 유닛 메인보드가 드디어 테스트까지 끝났습니다. MCU는 89C51과 ATMega8 두 개를 썼습니다.

디밍 유닛은 조명 콘솔에서 오는 DMX-512 신호를 받아서, 채널마다 전구 밝기를 0~100%로 조절해 주는 장비입니다. DMX-512는 무대 조명에서 쓰는 직렬 통신 규격으로, RS-485 선로 하나에 최대 512채널의 밝기 값을 계속 실어 보냅니다. 유닛은 그중 자기에게 할당된 시작 주소부터 필요한 채널 수만큼 값을 읽어 각 출력에 반영합니다.

제로크로싱 회로에서 가장 오래 막혔다

교류 전구의 밝기는 보통 위상 제어로 조절합니다. 교류 파형이 0V를 지나는 순간(제로크로싱)을 기준으로, 얼마나 늦게 트라이액을 켜느냐에 따라 전구에 들어가는 전력이 달라지는 원리입니다. 그래서 0V 지점을 정확히 잡아내는 회로가 디머의 출발점인데, 여기서 여러 번 실패했습니다. 처음 만든 회로들은 열이 심하게 났고, 그때마다 다시 짜는 일이 반복됐죠.

결국 자료를 계속 찾아보다가 방식을 바꿨더니 발열이 거의 없어졌고, 회로 구성도 훨씬 단순해졌습니다. 아래가 그 과정을 거쳐 나온 보드입니다.

DMX-512 디밍 유닛 메인보드를 완성해 테스트하는 모습

이게 문제의 제로크로싱 회로입니다. 사연이 많은 부분이에요.

발열 문제를 해결하고 간소화한 제로크로싱 회로

타이머 동기 신호와 EEPROM

제로크로싱 신호가 들어오면 그때부터 시간을 재서 각 채널의 점화 시점을 맞춰야 합니다. 이 동기 신호부는 8MHz 내부 클럭을 쓰는 타이머로 구현했습니다.

8MHz 내부 클럭 타이머로 만든 동기 신호부

또 하나 애먹은 게 EEPROM입니다. 유닛의 DMX 시작 주소를 EEPROM에 저장해 두는데, 이 주소를 자꾸 잃어버려서 한동안 원인을 찾느라 시간을 썼습니다. 현장에서 전원을 껐다 켰을 때 주소가 날아가면 콘솔과 채널이 어긋나 엉뚱한 조명이 켜지기 때문에, 디머에서는 가볍게 넘길 수 없는 부분입니다.

제로크로싱 발열 문제도 해결책을 찾기까지 며칠이 걸렸습니다. 같이 붙어서 고생해 준 동생들과 형님께 고맙다는 말을 남겨 둡니다. 1년 가까이 이어진 작업이었는데, 이제 일상으로 돌아갑니다.

비슷한 디머를 만들 계획이라면 제로크로싱 회로부터 따로 떼어 충분히 검증해 두기를 권합니다. 이 부분이 흔들리면 밝기가 떨리거나 깜빡이는 증상이 나오고, 그 원인을 MCU 코드에서 찾느라 시간을 버리기 쉽습니다.