Category (Click)
개발보드 덕질하기

[LEXON MOD] 2. 기존 PCB 리버스 엔지니어링 및 신규 PCB 설계

 차완기 - @9/16/2022, 7:03:00 PM
LEXON MOD 프로젝트
21년 말 즈음 구매해 1년만에 죽어버린 무드등을 되살려 IoT 조명으로 혹사시키는 프로젝트입니다.
#HW #PCB #리버스 엔지니어링 #FW #ESP-IDF #HomeAssistant #MQTT
이번 포스팅에서는 기존 PCB를 분석하고 바꿔줄 PCB를 설계하는 과정을 다룹니다.

기존 회로 분석

메인보드를 들어내고 IoT 기능이 내장된 보드로 바꾸면 완벽할 것 같습니다. 일단 회로를 설계하기 전에 기존 회로를 분석했습니다.
LEXON 버섯 무드등은 버튼을 눌러 2가지 색으로 변경이 가능하고 길게 눌러 밝기 조절이 가능합니다. 색만 바꾼다면 간단한 논리회로로도 구현이 되는데, 밝기 조절은 논리회로만으로는 구현이 불가능하죠. 아마 마이크로컨트롤러가 달려있는 것 같습니다.
USB 오른쪽의 SOIC 패키지 IC가 uC인 것 같습니다. 따로 파트 넘버가 마킹되어있지는 않네요.
한편, IC의 5, 6번 핀에는 트랜지스터의 베이스가 각각 10k 저항을 통해 연결되어 있습니다. 그리고 트랜지스터는 모스펫의 게이트에 연결되어 있네요. P 채널 모스펫을 사용해 GND가 묶인 두 LED를 High-side Switching 하는 것 같습니다. 딱히 두 LED의 작동 전압이 다르지 않아 보이는데 굳이 이렇게 설계한 이유는 모르겠습니다.
LED에서 내려오는 케이블의 GND를 묶어버렸으니 어쩔 수 없이 똑같이 회로를 설계하기로 했습니다.
다음으로 LED의 작동 전압을 측정했습니다. 실제 출력전압은 2.9V, 파워서플라이로 테스트해 보니 3.2V 정도가 적당할 것 같습니다. LED가 200mA나 먹는데다가 MCU 소비전류까지 생각하면 배터리로는 절대로 안되겠죠. 충전식은 포기하고 USB 상시전원을 고려해야겠습니다.
LED 전류 제한 저항은 10옴 정도가 적당해 보이는데요, 배터리 전원을 LED로 공급하는 기존 회로에서는 15 옴을 사용하고 있고 이번에는 5V를 공급하는 점을 감안해 20옴 정도를 사용해 보기로 했습니다. 안 맞으면 바꾸면 되겠죠.
이 정도면 회로 설계에 필요한 건 다 얻은 것 같습니다. 마지막으로 배터리를 죽여버린 원인 정도만 더 알아보기로 했습니다.
우선 배터리 전원이 uC로 직결되는 걸 보아 USB 위쪽의 부품은 배터리 충전과 관련이 있는 것 같습니다. 다행히 대부분의 중국산 조명에서나 하는 USB 5V를 배터리에 바로 때려 박도록 설계하지는 않은 것 같습니다.
찾아보니 LTC4054라는 배터리 충전 IC네요. 5V 전원을 공급받아 1S 리튬 배터리를 충전해 줍니다. TP4056 대비 크기가 작아 유용하게 써먹을 수 있을 것 같습니다. 여기까지만 보아서는 완벽해 보이는데요, 단 한 가지 이상한 부분이 있습니다.
uC에서 배터리 전압을 측정하지 않는 것 같습니다. 이게 맞다면 배터리 방전 컷을 보호회로에 의존하게 되는데요, 그다지 좋지 않은 방법입니다. 대략 3V쯤에서 미리 절전모드로 넘겼더라면 그나마 덜하지 않았을까 싶네요. 물론 풀 충전 상태에서 24/7 사용한 제 탓도 있겠죠? ㅋㅋ

PCB 형태 카피

이제 충분히 알았으니 PCB를 설계하기로 했습니다. 워낙 공간이 좁아 조금이라도 PCB가 맞지 않으면 조립이 불가능합니다. 고로 우선 PCB의 외형을 정확하게 측정해 도면화하였습니다.
앞서 촬영한 사진을 퓨전 360에 올려 그대로 따라 그렸습니다. 측정이 가능한 부분만 실측치로 맞추고 이미지의 배율을 조절하니 대충 맞는 것 같습니다. 중요한 부위인 USB 측 호의 반지름과 마운팅 홀의 위치, 그리고 tactile switch의 위치를 마킹했습니다.
RF IC에 안테나, 레귤레이터까지 추가로 박아야 하기 때문에 공간이 부족할 것 같습니다. 옆구리에 살을 조금 더 붙여 최대한 공간을 마련해 보았습니다. 혹시 모를 간섭을 방지하기 위해 3D프린터로 출력해 가조립까지 진행하였습니다.
DXF로 저장한 후 이글에서 불러오면 이렇게 됩니다. 일단 여기까지 진행하고 Schematic으로 넘어갔습니다.

Schematic 설계

지난 LED 스트립 디머 프로젝트에서 너무 잘 써먹은 ESP32-PICO-D4... 와 유사한 ESP32-PICO-V3를 사용했습니다. JLCPCB에서 Economic PCBA에서 D4를 사용하지 못해 V3로 선택했는데요, 몇몇 핀의 위치가 다른 점과 PSRAM을 사용하지 못하는 점을 제외하면 모두 동일합니다.
LED 제어는 기존과 동일하게 P-채널 모스펫을 사용합니다. Vgs를 음전압으로 만들어주기 위해 NPN 트랜지스터가 붙어있습니다. TR이 켜지면 모스펫의 Vgs가 대략 -5V 정도가 되어 켜집니다.
이외에도 수동 조작을 위한 스위치, 상태 확인용 흰색 LED를 달아주었습니다.

Board pattern 디자인

비슷한 느낌의 보드를 이미 이전에 만들어보았기 때문에 딱히 특별한 건 없습니다. 공간이 조금 좁을.. 뿐입니다.
처음 설계했던 옆구리에 튀어나온 부분은 거추장스러워 잘랐고 레귤레이터는 뒷면에 배치했습니다. 굴러다니는 LM1117 하나 때어다가 붙일 계획입니다.
이번에 보드를 설계하면서 전원부 패턴을 조금 신경 써보았습니다. 2-Layer 보드를 사용하다 보니 항상 전원 라인이 골치 아팠는데, 이번에는 운 좋게(?) 잘 설계되었습니다. 이제 진짜 2-Layer 그만 고집하고 4-Layer를 사용해야겠습니다.
PCB가 먹음직스럽게 생겼네요.

PCB 주문

주로 JLCPCB를 사용하고 있어 이에 맞게 제조사에 넘길 파일을 준비했습니다.
우선 거버 파일과 bom, cpl 파일을 만들었습니다.
무드등을 분해하고 PCB를 끄집어냈을 때 유난히 얇아 보였는데요, 실제로 측정해 보니 0.9mm였습니다. 일반적인 PCB의 두께인 1.6mm보다 대충 2배 정도 얇았습니다.
당연하게도 JLCPCB에서는 0.4~2.0까지 다양한 두께의 PCB를 지원하고 있습니다. 두께의 오차가 (-10~+10)%인 점을 고려했을 때 1mm PCB로 선택하는 게 좋을 것 같습니다. 마침 Economic PCBA에서 1mm 두께까지만 검은색 솔더마스크를 지원하네요!
배송비를 제외하고 대략 50달러 정도 발생했습니다. 만드는 김에 5개 만들어 써먹기로 했습니다.
PCB가 도착했습니다. 주문 후 JLCPCB측에서 MCU의 footprint에 조금 문제가 있다 해서 걱정했지만 다행히도 문제없이 납땜된 것 같습니다.
기존 PCB와 비교해 보았습니다. 설계 실수인지 tactile 스위치의 위치가 약간 앞쪽에 있는 것 같은데, 버튼 크기가 커 문제는 없을 것 같습니다.
가장 중요한 부분인 앞쪽도 매끄럽게 잘 가공되었습니다.
혹시나 싶어 가조립까지 진행해 보았습니다. PCB와 본체가 끼워 맞춤으로 결합되는지라 구멍 크기로 도박을 했는데, 다행히 딱 맞네요. 닫았을 때 USB 단자도 적당하게 맞습니다.

전원 입력 테스트

일단 조립은 잘 되니 산 하나는 넘은 것 같습니다. 이제 다음.. 회로가 잘 설계되었는지 테스트할 차례입니다. 지난번에 제작한 ESP32용 지그에 물리고 시리얼 모니터를 켰더니…
잠시 진정하고 오류 문구를 읽어보았습니다.
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) invalid header: 0xffffffff invalid header: 0xffffffff invalid header: 0xffffffff ...
Plain Text
복사
어.. 그러니까 0xffffffff 위치가 유효하지 않다는 거겠죠? 아마도 flash에 펌웨어가 들어있지 않아 발생하는 것 같습니다. 예제를 업로드해 다시 테스트해 보았습니다.
잘 작동하네요 다행입니다. 겸사겸사 온보드 상태 확인 LED를 테스트하였습니다.

뒷 레이어 부품 결합

문제가 없는걸 확인했으니 진도를 빼야겠죠. 다음은 납땜 시간입니다.
USB로부터 공급되는 5V 전원을 MCU에 공급할 3.3V로 강압할 LDO입니다. 공간이 좁아 뒷면에 배치했고 Economic PCBA로 진행하기 위해 한쪽만 SMT를 쳤다 보니 뒷면을 직접 납땜하게 되었습니다. 마침 남는 AMS1117이 있어 바로 붙여주었습니다.
혹시나 테스트하다가 태워먹을까 싶어 전부 납땜했습니다. AMS1117의 방열 리드에 납이 잘 퍼지지 않아 열을 가하다가 IC를 태워먹는 게 아닌가 걱정했는데, 나중에 테스트하니 전부 잘 작동했습니다.

MCU 테스트

웜화이트, 쿨화이트를 순차적으로 켜도록 코드를 작성해 테스트를 진행했습니다. LED의 전류 제한용 저항을 기존 15옴에서 20옴으로 5옴 올려 어둡지 않을까 걱정했는데, 괜찮은 것 같습니다.
매번 새로운 걸 시도하다 보니 PCB를 주문할 때마다 도박하는 느낌이네요 ㅋㅋ
잘 작동하는 걸 확인했으니 안심하고 펌웨어 작업을 시작해야겠습니다.