1편 : https://www.clien.net/service/board/lecture/16405159?od=T31&po=0&category=0&groupCd=CLIEN

제가 주문한 보드의 회로도는 이와 같다고 합니다. 사실 확실하진 않아요. 알리익스프레스 물건에 대해서는 믿음이 없으니까요. 그래도 일단 중요한건 소켓이 몇 칸 짜리인지이므로 그것만 확인하겠습니다. 17칸짜리 핀헤더 소켓이면 되겠네요. 왼쪽 아래에 JP3과 JP4가 17칸짜리 핀헤더입니다.
핀헤더 심볼을 추가합니다. a를 누르고 ‘conn’이라고 검색하면 종류가 엄청 많이 나옵니다. 현시점에서 뭐가 맞는건지 저도 모르겠습니다. 일단 위에 있는 보드 회로도와 같은 모양인 심볼을 찾아서 넣겠습니다. 뭔가 아닌것 같으면 나중에 바꾸면 될 테니까요.

이름이 Conn_01x17입니다. 옆에 나오는 그림은 보드 회로도에 나온 핀헤더 심볼과 완전히 같진 않은데 그래도 제일 비슷합니다. 일단 이거로 하죠. 17개짜리 두 개를 배치합니다.

회로도에서 와이어 라인이 이쁘게 보이게 하기 위해서 눕혔습니다. 그리고 보드 회로도랑 같은 핀 순서가 되게 하려고 r과 y 단축키로 적당히 심볼을 배치했습니다.
이제, 키보드 스위치 매트릭스에 col과 row를 각각 어느 핀에 연결할 지 조사해야 합니다.

이 그림은 그냥 구글링해서 찾은 건데, 알리익스프레스에서 파는 STM32 Black Pill 보드는 핀아웃이 모두 동일한 것으로 보입니다. 그래서 아무거나 참고해서 써도 될것 같아요. 중요한 것은 USB 신호 핀이 PA11과 PA12입니다. 이 두 핀은 USB로 써야 하므로 키보드 스위치에 연결하면 안됩니다. 그리고 PA9와 PA10은 TX1, RX1이라고 써 있는데 아마도 UART입출력으로 보입니다. 디버깅하려면 UART도 써야 하므로 PA9, PA10도 쓰면 안됩니다.
키보드 스위치 매트릭스를 보면 왼쪽 파트는 col이 7개고 row가 5개입니다. 일단 핀 12개를 써야 합니다. 보아하니 위 그림에서 오른쪽 PA0부터 PA7과 그 위에 PB0, PB1, PB10, PB11을 쭉 쓰면 될것 같네요.

확대해서 캡춰하니 화질이 않좋네요. 아무튼 PA0부터 시작하는 핀은 JP4에 12번부터 역방향으로 1번핀까지 12개입니다. 여기에 연결하겠습니다.

위 그림처럼 와이어를 연결합니다. 레이블을 써서 더 깔끔하게 그리는 방법도 있는것 같은데, 나중에 PCB로 그릴 때를 상상하면서 이렇게 하면 될랑가 싶어 선으로 연결해 봤습니다. Row 라인 5개는 PA0부터 PA4에 연결했습니다. 핀 번호로는 12번부터 8번입니다. 그리고 나머지 1번핀부터 7번핀은 Col라인 7개에 연결했습니다.
여기까지하면 왼쪽 파트 회로도 완성입니다. 별거 없네요. 이제 고려할 것은 오른쪽 파트와 연결을 어떻게 할지입니다. 지금 세 가지 정도 방식이 머릿속에 떠오르네요.
첫 번째 방법은 완전히 분리해서 오른쪽 파트에도 컨트롤러를 별도로 달아서 그쪽에서는 그쪽이 알아서 처리하는 것입니다. 어차피 컴퓨터에 키보드 여러개 붙을 수 있으니까요. 그러면 컴퓨터에는 키보드가 두 개가 붙어 있는 걸로 인식됩니다. 각 키보드가 반쪽짜리로 동작하는 것이지요. 이 방식도 나쁘지 않아 보입니다. 다만 컨트롤러를 두 개 써야 하고 펌웨어도 각각 코딩해서 넣어야 하겠네요. 장점은 왼쪽, 오른쪽 파트의 PCB가 완전히 분리된다는 것입니다. 깔끔해지죠.
두 번째 방법은 왼쪽 파트의 와이어를 어떤식으로든 연장해서 오른쪽 파트로 전달하는 것입니다. Row 라인 5개를 오른쪽 파트로 전달하고 오른쪽 파트에서 오는 Col 라인을 받아서 컨트롤러에 연결하면 됩니다.
세 번째 방법도 왼쪽 파트와 오른쪽 파트를 연결하는 것인데, 두 번째 방법과 다르게 오른쪽 파트에도 컨트롤러를 두고 간단한 펌웨어를 넣어서 시리얼 신호로 오른쪽 파트의 입력 결과를 왼쪽 파트에 있는 컨트롤러로 전달하는 것입니다. 두 번째 방법보다 왼쪽 파트와 오른쪽 파트를 연결하는 와이어링이 간단해지겠네요.
저는 두 번째 방법을 선택하겠습니다. 이리저리 생각해봐도 제일 쉽습니다. 일단 Row라인 5개를 보내야 합니다. 어떻게 보내는게 제일 편할까 생각하다가 그냥 소켓에 와이어 납땜해서 뭉쳐서 보내기로 결정했습니다.

뭔지 모르겠는데 Conn_01x05_Female이라는 것도 있습니다. 이거도 한 번 써 봅니다. 아까 쓴거랑 뭔가 다른지는 나중에 PCB 나와보면 알겠지요.

이 그림을 보니 뭔가 Col과 Row가 반대로 된것 같아 보이는데… 사실 중요하지 않습니다. 그냥 회로도 상에 가로, 세로를 기준으로 col과 row라고 부르겠습니다. 아무튼 그래서 row 라인 5개를 Conn_01x05에 연결했습니다.
오른쪽 파트에서는 col라인이 몇 개가 오는지 세어 보죠.

두 번째 줄이 9개로 오른쪽 파트에서 넘어오는 col 라인 수는 9개입니다.

이 그림을 다시 보면 여기서 핀 9개를 쓸 수 있을 것 같네요. PB3부터 PB7까지와 PB12부터 PB15까지 핀이 딱 9개입니다. 핀 번호는 3번부터 7번까지 5개와 14번부터 17번까지 4개입니다.
먼저 Conn_01_09_Female을 추가합니다. 아까 5개짜리 추가한것과 같은 과정으로 추가하면 됩니다. 그런 다음 이번에는 레이블을 붙여 보겠습니다. 와이어를 그리니까 공간이 안나와서 예쁘게 안그려지더라구요.

레이블은 Ctrl+H 단축키로 추가합니다.

Ctrl+H 단축키를 누르면 위와 같은 창이 나옵니다. 이름과 방향, shape를 이리저리 바꿔가면서 원하는 모양을 만드세요. 넣어보고 원하는 모양이 아니면 지운 다음 다시 넣으면 됩니다.
레이블을 핀 헤더 소켓에 연결하겠습니다.

이러고 나니, 아까전에 ROW도 이렇게 레이블로 할껄 하는 생각이 드네요......
아무튼,
대략 이와 같은 모양으로 연결합니다. 레이블이 제대로 될지 모르겠네요. 이 글을 쓰고 있는 시점에서 저도 해 본적이 없거든요..
여기까지해서 키보드 매트릭스의 연결이 모두 끝났습니다. 아직 만들지 않은 미지의 오른쪽 파트와의 연결까지 고려해서 회로도를 그렸습니다.
마지막으로 핀 세 개만 더 연결해야 겠네요. UART 선입니다. 디버깅할 때랑 펌웨어 다운로드 할 때 쓰는데 미리 핀을 뽑아 놓으면 편하니까요.

UART의 TX1과 RX1이 각각 PA9와 PA10이고 핀 번호는 11번과 12번입니다. UART 통신하려면 호스트와 RX, TX, GND만 연결하면 되므로 GND는 1번핀에서 가져오고 11번, 12번핀 RX, TX를 연결합니다.

완성한 왼쪽 파트 회로도입니다. 제대로 맞게 했는지는 확신이 없네요. 아무튼 이 회로도를 기반으로 해서 PCB를 만들 것입니다.
다음편에서는 PCB를 디자인 하겠습니다.
3편 : https://www.clien.net/service/board/lecture/16408035?od=T31&po=0&category=0&groupCd=CLIEN
예전에 키보드매니아 랑 OTD에서 사람들이 모여서 자작 키보드 개발하고 그랬는데요
마이컴에 키보드용 펌 만들고 pcb 단체로 떠서 키보드나 키패드 만들고 그랫네요.
요새는 오픈소스로 gmk? 같은 좋은 것도 공개되고
자작 키보드 만들기 더 좋아진것 같습니다 ㅎㅎ
다만 ... 키보드에 한해서는 내가 만들때 보단 기성품이 더 좋을때도 있습니다.
아니면 기성품을 개선하는 정도도 ...