측정이 대상을 바꾸고 있었다 — 그리고 양산 보드에서 꺼낸 정답지
4부 마지막에 남긴 문제. 고쳐놓은 게 되살아난다.
선 굵기를 넷 규칙에 맞춰 통일해 놓는다. 다음 라운드에 재보면 다시 어긋나 있다. 직각을 10곳까지 줄여놓는다. 다시 재면 늘어나 있다. 몇 번을 반복해도 같았다.
같은 보드를 네 번 재봤다
의심이 든 건 검사 결과가 너무 자주 바뀐다는 점이었다. 그래서 아무것도 안 고치고 같은 보드에 DRC 만 연속으로 걸어봤다.
| 회차 | 위반(error) |
|---|---|
| 1 | 0 |
| 2 | 16 |
| 3 | 3 |
| 4 | 50 |
보드를 손대지 않았는데 결과가 이렇게 나온다. 파일 해시를 찍어보니 답이 나왔다.
kicad-cli pcb drc --refill-zones board.kicad_pcb
이 명령이 보드 파일을 덮어쓴다. 존(구리 포어)을 다시 채운 결과를 그 파일에 저장한다. 즉 검사할 때마다 검사 대상이 바뀐다.
그래서 무엇이 무너졌나
이게 단순히 “숫자가 흔들린다” 정도가 아니었다. 내가 만든 자동 보정 도구는 전부 이런 구조였다.
1. 현재 상태를 DRC 로 잰다 ← 기준선
2. 고친다
3. 다시 DRC 로 잰다
4. 나빠졌으면 되돌린다
기준선 자체가 매 호출마다 움직이면 이 판단은 전부 무의미하다. 좋아진 결과를 나빠졌다고 판정해서 되돌리고, 나빠진 걸 좋아졌다고 채택한다. “고쳐놓은 게 되살아난다”의 정체가 이거였다.
지금까지 “DRC 클린”이라고 기록해둔 숫자들도 실제 상태와 무관할 수 있다는 뜻이다.
고치는 법
보드와 프로젝트 파일을 임시 폴더에 복사해서 사본을 잰다. 원본은 손대지 않는다.
| 방식 | 1회 | 2회 | 3회 |
|---|---|---|---|
| 원본에 직접 | 0 | 16 | 3 |
| 사본에 (프로젝트 포함) | 0 | 0 | 0 |
세 번 모두 같다. 원본 해시도 그대로다.
여기서 함정이 하나 더 있다. 보드 파일만 복사하면 안 된다. 옆에 있는
프로젝트 파일(.kicad_pro)에 넷클래스와 커스텀 룰이 들어 있어서, 그게 없으면
같은 보드가 0건 → 40건 → 118건으로 뻥튀기된다. “사본으로 쟀으니 안전하다”가
아니라 “규칙까지 같이 복사했는가” 를 확인해야 한다.
측정이 대상을 바꾸면, 그건 데이터가 아니다.
새 검증 루프를 만들 때 제일 먼저 확인할 것 — 이 명령이 입력 파일을 쓰는가. 해시 비교 한 줄이면 된다.
두 번째 범인 — 선을 몰래 깎고 있었다
측정을 고치고 나서 선 굵기를 다시 봤다. 보드에 0.225mm 와 0.375mm 가 남아 있었다. 규칙은 신호 0.3 / 전원 0.5 인데, 정확히 그 0.75배다.
범인은 내가 만든 보정 스크립트들이었다.
| 파일 | 실제로 있던 코드 |
|---|---|
| 간섭 수정기 | SetWidth(GetWidth() - 0.05mm) |
| 마감 수정기 | SetWidth(w - 0.08mm) |
| 갭 연결기 | for w in (0.5, 0.4, 0.3) — 들어가는 폭으로 깔았다 |
| 마감 도구 | 0.2 하드코딩, 넷 이름 하드코딩 |
간섭(클리어런스 위반)이 나면 선을 깎아서 통과시키고 있었다. DRC 는 초록불이 되지만 설계 규칙은 이미 깨져 있다. 가장 나쁜 실패 형태다 — 검사기가 통과라고 말하는데 물건이 틀린 상태.
고친 방향은 두 가지다.
- 폭 규칙의 출처를 하나로. 프로젝트 파일의 넷클래스만 읽는 함수 하나를 만들고, 폭이 필요한 모든 스크립트가 그걸 import 한다. 스크립트가 스스로 폭을 정하는 코드는 전부 제거.
- 간섭은 경로를 바꿔서 없앤다. 폭이나 간격을 깎아서 숨기지 않는다. 규칙 폭으로 강제한 뒤 위반이 나면, 그건 폭 문제가 아니라 경로가 그 폭을 감당 못 한다는 신호다.
규칙대로 폭을 강제하니 간섭이 16건 나왔다. 전부 0.176~0.19mm 로, 필요한 0.2mm 에 0.02mm 모자란 것들이었다. 0.225mm 기준으로 벌어져 있던 이웃 선이 0.3mm 로 넓어지면서 붙은 것이다. 되돌리지 않았다. 고칠 대상은 그 구간의 경로다.
그리고 — 정답지가 회사 안에 있었다
여기까지 오면서 나는 “0.3mm 가 적당하겠지”, “비아는 0.8/0.4 정도면 되겠지” 하고 값을 정해왔다. 그러다 이미 만들어 팔고 있는 보드들의 설계 파일과 제조 데이터를 다시 꺼내봤다. 추측할 필요가 없었다.
| 항목 | 실측 |
|---|---|
| 기본 신호 선폭 | 0.25mm — 전체 배선 길이의 79~92% |
| 쓰이는 폭의 집합 | 0.15 / 0.20 / 0.25 / 0.30 / 0.50 / 1.00 |
| 배선 각도 | 0° / 45° / 90° 가 100.0% (임의 각도 0mm) |
| 층별 방향 | 상면 가로 60% / 하면 세로 59% |
| 비아 | 드릴 0.305mm / 패드 0.610mm |
| 서멀 스포크 | 4개, 폭 0.51(THT) / 0.25(SMD) |
세 가지가 인상적이었다.
첫째, 45° 규칙이 실측으로 증명됐다. 임의 각도가 정확히 0mm 다. 사람이 그린 보드가 100.0% 로 0/45/90 만 쓴다.
둘째, 층별 방향이 실제로 지켜지고 있다. 4부에서 “계단의 원인은 층 방향 부재”라고 썼는데, 우리 양산 보드가 그대로 하고 있었다.
셋째, 넷 안에서 폭이 섞이는 경우가 15% 있다. 다만 패턴이 있다 — 주 폭이 하나 있고 패드 진입부만 짧게 좁힌다. 핀 간격이 좁은 부품(RP2040 같은)은 0.25mm 로는 핀에서 선을 뺄 수 없어서 0.2mm 로 좁혀 빠져나온 뒤 다시 넓힌다. 그래서 규칙을 “넷당 폭 1개”가 아니라 “넷당 주 폭 1개 + 허용 집합 안의 짧은 네킹만” 으로 바꿨다. 판정은 부품 이름이 아니라 실제 핀 피치로 한다.
층이 모자랐던 걸지도
마지막으로 하나 더 나왔다. 지금 만들고 있는 16채널 IO 보드의 대응 양산품 (4채널 IO 보드)의 거버를 열어보니 구리층이 네 장이었다. 그리고 내층 두 장이 접지 평면이 아니라 진짜 배선층이었다 — 0.25mm 선이 344mm, 262mm 깔려 있다.
나는 채널이 4배인 보드를 2층으로 깔고 있었다.
계단·우회·간섭이 반복되는 게 알고리즘 문제가 아니라 층이 모자란 것일 수 있다. 배선 품질에 며칠을 쓰기 전에 “같은 계열 양산품은 몇 층인가”를 먼저 쟀어야 했다.
규칙을 전부 반영해서 다시 돌렸다. 비아를 0.6/0.3 으로 줄이고 전체 재라우팅을 걸었다. 그 배선이 순서대로 놓이는 과정을 영상으로 남겼다.
▶️ 6부 — 2층으로는 안 되는 거였다: 규칙은 다 지켰는데 배선이 나빴던 이유 — 4층으로 갈아엎기
🔧 이전 편: 1부 · 2부 · 3부 · 4부 — 배선이 말을 안 듣는다
댓글
로그인 없이 이름만 적고 남기실 수 있어요. 남긴 댓글은 바로 게시됩니다.
댓글을 불러오는 중…