· 톺아보기

취미/음식

PCB떠서 키보드 만들어 보기 (회로도) (2)

skqlffpfk · · 수정

조회 12,219 · 공감 7 · 댓글 13

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



31.jpg


제가 주문한 보드의 회로도는 이와 같다고 합니다. 사실 확실하진 않아요. 알리익스프레스 물건에 대해서는 믿음이 없으니까요. 그래도 일단 중요한건 소켓이 몇 칸 짜리인지이므로 그것만 확인하겠습니다. 17칸짜리 핀헤더 소켓이면 되겠네요. 왼쪽 아래에 JP3과 JP4가 17칸짜리 핀헤더입니다.



핀헤더 심볼을 추가합니다. a를 누르고 ‘conn’이라고 검색하면 종류가 엄청 많이 나옵니다. 현시점에서 뭐가 맞는건지 저도 모르겠습니다. 일단 위에 있는 보드 회로도와 같은 모양인 심볼을 찾아서 넣겠습니다. 뭔가 아닌것 같으면 나중에 바꾸면 될 테니까요.


32.png


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


33.png


회로도에서 와이어 라인이 이쁘게 보이게 하기 위해서 눕혔습니다. 그리고 보드 회로도랑 같은 핀 순서가 되게 하려고 r과 y 단축키로 적당히 심볼을 배치했습니다.


이제, 키보드 스위치 매트릭스에 col과 row를 각각 어느 핀에 연결할 지 조사해야 합니다.


34.jpg


이 그림은 그냥 구글링해서 찾은 건데, 알리익스프레스에서 파는 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을 쭉 쓰면 될것 같네요.



35.png


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


36.png


위 그림처럼 와이어를 연결합니다. 레이블을 써서 더 깔끔하게 그리는 방법도 있는것 같은데, 나중에 PCB로 그릴 때를 상상하면서 이렇게 하면 될랑가 싶어 선으로 연결해 봤습니다. Row 라인 5개는 PA0부터 PA4에 연결했습니다. 핀 번호로는 12번부터 8번입니다. 그리고 나머지 1번핀부터 7번핀은 Col라인 7개에 연결했습니다.



여기까지하면 왼쪽 파트 회로도 완성입니다. 별거 없네요. 이제 고려할 것은 오른쪽 파트와 연결을 어떻게 할지입니다. 지금 세 가지 정도 방식이 머릿속에 떠오르네요.


첫 번째 방법은 완전히 분리해서 오른쪽 파트에도 컨트롤러를 별도로 달아서 그쪽에서는 그쪽이 알아서 처리하는 것입니다. 어차피 컴퓨터에 키보드 여러개 붙을 수 있으니까요. 그러면 컴퓨터에는 키보드가 두 개가 붙어 있는 걸로 인식됩니다. 각 키보드가 반쪽짜리로 동작하는 것이지요. 이 방식도 나쁘지 않아 보입니다. 다만 컨트롤러를 두 개 써야 하고 펌웨어도 각각 코딩해서 넣어야 하겠네요. 장점은 왼쪽, 오른쪽 파트의 PCB가 완전히 분리된다는 것입니다. 깔끔해지죠.



두 번째 방법은 왼쪽 파트의 와이어를 어떤식으로든 연장해서 오른쪽 파트로 전달하는 것입니다. Row 라인 5개를 오른쪽 파트로 전달하고 오른쪽 파트에서 오는 Col 라인을 받아서 컨트롤러에 연결하면 됩니다.



세 번째 방법도 왼쪽 파트와 오른쪽 파트를 연결하는 것인데, 두 번째 방법과 다르게 오른쪽 파트에도 컨트롤러를 두고 간단한 펌웨어를 넣어서 시리얼 신호로 오른쪽 파트의 입력 결과를 왼쪽 파트에 있는 컨트롤러로 전달하는 것입니다. 두 번째 방법보다 왼쪽 파트와 오른쪽 파트를 연결하는 와이어링이 간단해지겠네요.



저는 두 번째 방법을 선택하겠습니다. 이리저리 생각해봐도 제일 쉽습니다. 일단 Row라인 5개를 보내야 합니다. 어떻게 보내는게 제일 편할까 생각하다가 그냥 소켓에 와이어 납땜해서 뭉쳐서 보내기로 결정했습니다.


37.png


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


38.png


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



오른쪽 파트에서는 col라인이 몇 개가 오는지 세어 보죠.


39._re.png


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


40.png


이 그림을 다시 보면 여기서 핀 9개를 쓸 수 있을 것 같네요. PB3부터 PB7까지와 PB12부터 PB15까지 핀이 딱 9개입니다. 핀 번호는 3번부터 7번까지 5개와 14번부터 17번까지 4개입니다.



먼저 Conn_01_09_Female을 추가합니다. 아까 5개짜리 추가한것과 같은 과정으로 추가하면 됩니다. 그런 다음 이번에는 레이블을 붙여 보겠습니다. 와이어를 그리니까 공간이 안나와서 예쁘게 안그려지더라구요.


41.png


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


42.png


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



레이블을 핀 헤더 소켓에 연결하겠습니다.


43.png

이러고 나니, 아까전에 ROW도 이렇게 레이블로 할껄 하는 생각이 드네요......


아무튼,

대략 이와 같은 모양으로 연결합니다. 레이블이 제대로 될지 모르겠네요. 이 글을 쓰고 있는 시점에서 저도 해 본적이 없거든요..



여기까지해서 키보드 매트릭스의 연결이 모두 끝났습니다. 아직 만들지 않은 미지의 오른쪽 파트와의 연결까지 고려해서 회로도를 그렸습니다.



마지막으로 핀 세 개만 더 연결해야 겠네요. UART 선입니다. 디버깅할 때랑 펌웨어 다운로드 할 때 쓰는데 미리 핀을 뽑아 놓으면 편하니까요.


44.png


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


45.png


완성한 왼쪽 파트 회로도입니다. 제대로 맞게 했는지는 확신이 없네요. 아무튼 이 회로도를 기반으로 해서 PCB를 만들 것입니다.


다음편에서는 PCB를 디자인 하겠습니다.


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

댓글 13

  1. 루이레드 · · 공감 1
    제가 뭘 본건지 모르겠는데 대단하시네요 ㄷㄷㄷ
  2. skqlffpfk ·
    @루이레드님 감사합니다 :)
  3. 밀리 ·
    와 대단하십니다 ㅎㅎ

    예전에 키보드매니아 랑 OTD에서 사람들이 모여서 자작 키보드 개발하고 그랬는데요

    마이컴에 키보드용 펌 만들고 pcb 단체로 떠서 키보드나 키패드 만들고 그랫네요.

    요새는 오픈소스로 gmk? 같은 좋은 것도 공개되고

    자작 키보드 만들기 더 좋아진것 같습니다 ㅎㅎ
  4. skqlffpfk ·
    @밀리님 참고는 하는데 저는 전부다 제가 만들 예정입니다. 펌웨어도요.
  5. amos · · 공감 1
    이렇게 물리적으로 분리한 기기를 만들 땐 양쪽의 데이터를 전달할 때 지나치게 많은 선을 필요로 하면 좋지 않습니다. 한쪽에 74HC195 등과 같은 시프터를 2개 정도 써서 그쪽을 전담해 처리하고 실제 선은 3개 정도만 연결하면 분리 된 기기 간의 배선을 좀 더 단순화시킬 수 있습니다. 내친 김에 나머지 한쪽도 시프터로 처리하면 실제 MCU에선 GPIO 3개 정도만 필요로 하게 되고, 양쪽을 별도로 처리하기 위한 펌웨어도 필요 없죠. (시프터는 몇개를 연결하든 체인 방식으로 연결되기에 3개의 선만을 필요로 합니다.)
  6. skqlffpfk ·
    @지천무하님 조언 감사합니다. 다음에 또 만들일 있으면 써 봐야겠네요. ㅎㅎ
  7. RaphKay ·
    대단한 열정은 박수를 드립니다.
    다만 ... 키보드에 한해서는 내가 만들때 보단 기성품이 더 좋을때도 있습니다.
    아니면 기성품을 개선하는 정도도 ...
  8. skqlffpfk ·
    @견족자K님 아니요. 기성품이 언제나 늘 항상 더 좋습니다!
  9. HotCrispy ·
    ㄷㄷ 빌게이츠세요?
  10. skqlffpfk ·
    @HotCrispy님 빌게이츠 재산의 천분의 일 정도만 있었으면 좋겠습니다.
  11. Hes ·
    정말 좋은 강좌네요. pc와 sw적으로 어떻게 연결되는지 까지 강좌에서 다뤄 주시면 좋을 것 같습니다.
  12. skqlffpfk ·
    @Hes님 다룰 예정입니다. ㅎㅎ 일단 PCB가 제대로 된다면요...
  13. skqlffpfk ·
    @plaintext님 저도 PCB 떠 보는게 처음이라 잘 될지 모르겠습니다..

팁과강좌 최근 글

팁과강좌 목록 더 보기