Project Big Cat - A newbie learns to make a keyboard

Hello everyone! Thanks for stopping by this post. Hope you are having a great day :laughing:

Before we jump into the keyboard, a bit of background:

  • This is a personal learning project. I’m a complete newbie to keyboard design (and basic electrical engineering principles). If I look like I don’t know what I’m doing, that is because I don’t know what I’m doing…
  • The purpose of this post is to document my journey into keyboard design as well as share lessons learned along the way. So any feedback and advice will be greatly appreciated!
  • I was heavily inspired by a lot of excellent members in this community, especially @Rico. Also, for anyone who starts as green as I am, I highly recommend the 5-episode series by Mr. Keebs and Gondolindrium on YouTube when they streamed making a PCB from scratch.

All right, with those out of the way, let’s get to the board:

Key Features

  • Semi-compact 1800 southpaw
  • Hotswap with some ISO layout support (for learning purposes)
  • Utilizes Ai03 unified daughterboard
  • LED indicator lights for Caps, Num, and Scroll Lock
  • Aluminum case (top mounted or gasket mounted, tbd)

PCB Schematics


PCB in KiCAD



Questions still needs to be resolved

  1. Ground Planes and Ground Pours: I only have two ground planes (front and back) surrounding the crystal. Is this sufficient? I’ve seen people making ground pours on front and back, but I’ve also seen that this might not be necessary for a two-layer PCB?
  2. Routing: I know that I’m supposed to keep stuff away from the differential pair and the crystal, but real estate is at a premium. Am I keeping enough clearance?
  3. Any other glaring issues that a newbie just wouldn’t see?

Next Steps

  • Order PCB and components
  • Learn to compile firmware in QMK
  • Learn to design case in Fusion 360

If you are still with me at this point, thank you for your patience! I will be back with another update (hopefully) soon…

13 Likes

I can’t speak to the circuitry as I’m a beginner when it comes to PCB design as well. The one issue that did stand out is in regards the the layout - the blocker between right Shift and Up isn’t connected to anything else, so you’ll just have a gap there showing through to the plate.

1 Like

Aha, thank you for pointing that out! I made the color-coded layout in the post separately. In the original layout I used to develop everything else, the arrow cluster was fully separated from everything else. The correct layout should look something like this:

2 Likes

Oh, a compact southpaw !
I sometimes miss a numpad on my 75% board, this is a really nice idea :slight_smile:

I did not noticed anything bad in your design but I am AFK, looking at the schematics and PCB images from my cellphone so take that with a grain of salt :wink:

Saw that the only trace that is crossing the USB lines is the 3v3 trace, you may have an easy way to route it on the right and then below the MCU.
And the trace on the left could be moved a bit further away?
Other than that it is a good USB routing and should work even without those modifications.

For your first PCB you did a really good job!

Can’t wait to see it working;)

1 Like

Wow the man himself!! :star_struck: Thank you so much for your advice and encouragement!! I will adjust those routings as you suggested :smile:

1 Like

Just another thing about the crystal, more precisely the capacitors around it.
I saw that you had 22pf value selected, but please be aware that the correct value should be computed based on the crystal model your select, more precisely the crystal load capacitance.
The formula to do that is:
C1 = C2 = 2 *( CL - CStray).
CStray is the stray capacitance of the traces connecting your crystal to the MCU and is usually approximated to 5pf.
CL is the crystal load capacitance, you will easily find it’s value in the datasheet of the model you selected.
C1 and C2 are the capacitors you have close to your crystal on your schematic.

Depending on the selected model of the crystal C1 and C2 can be as low as 6pf or as high as 30pf. No need to be very precise, but be close to the calculated value is recommended.

If you already know that, please disregard my message :wink:

I didn’t know this, so thank you for taking the time to explain this!

When I was watching the tutorial, Gondo did mention at the very beginning, that there was some equations to calculate the capacitance. I should have looked it up…

The crystal I selected has a load capacitance of 18pF, so C1 and C2 should both be 26pF instead of 22pF. Oooops :sweat_smile: Time to go shop at Digi-Key again :rofl:

1 Like

Gondo is our master :wink:
This is not exact science, 22pf could also probably work, but if you can be closer to the ideal value it is always better .

1 Like

Hello! Hope everyone is having a great day :smiley: Life got super busy last week, but I’m back with some quick late night updates:

Preliminary case design is done. I ended up with gasket mounting, for two reasons:

  1. The plate will likely have to be aluminum because I can’t find a place to cut FR4 plates near me… Given that plate and PCB are both rigid, I’d like some amount of give in the system.
  2. KBD Fans sells poron gaskets for D65, and those are pretty nice and easy to find.

Some potato renders and section cut from Fusion 360

The next key step for me is to figure out tolerance. Otherwise, these are just pretty pictures and nothing more. Based on my very preliminary research, it seems that tolerances are typically specified on 2D drawings, and those drawings are submitted to the prototyping service along with the 3D model?

Speaking of prototyping service, does anyone have recommendations for a machine shop? There are a couple of local ones near me, but they all want a company email. I can use my work email, but this is an indication to me that they are not inclined to work with individuals who order small quantities… But I’m sure that there are other services out there!

6 Likes

Keep up the good work! You are doing really great!

1 Like

Great design, simple and nice to look at.

As for tolerances, what you usually add in the 2d drawing for specific parts are tolerances that are tighter than the tolerancing standard that you selected for manufacturing.
And in the 2d drawing I always add a note with the general tolerancing standard that I want for manufacturing.

But for the play you want to add between the top and bottom part (for example) you’d do that by dimensioning either the top or bottom part to create the play you want.

There are quite a few Chinese manufacturers out there, including recently PCBWay.
Beware that low price and quality don’t go well together.
There is a Discord server that discuss about keyboard design in general and CNC manufacturers(mostly Chinese), called Keyboard Atelier.
I personally uses Xometry,
They. can make mistakes, they are a bit expensive, but I found the quality to be consistent.
I don’t know much about Chinese ones, but I am pretty sure good ones must exist (and they may be expensive).

1 Like

As always, thank you so much for the pointers, Rico!! I will look into Xometry and also Keyboard Atelier :smile:

1 Like

On another note, I didn’t want to take up too much of your time, but I do want to ask about the play you mentioned between the top and bottom case. When you said play, did you mean the tolerance on the xy-plane to make sure that the top and bottom case lineup? For example, if the nominal length of the top case is 404.3mm, I would specify that dimension on the top piece to be 404.3mm +/- 0.8mm, and leave the bottom case dimension to be 404.3mm?

My apologies if I completely misunderstood what you meant… Spatial thinking isn’t necessarily my strong suit :sweat_smile:

1 Like

This is exactly that.
If top an bottom part have the same dimensions they will not fit together.
The amount of play depends on your confidence in the CNC manufacturer to have good machining precision and also the type of finish your want (type III anodize don’t add much, but powder coat do).

1 Like

Yay, glad that I got it on the first try haha! Jokes aside, thank you so much for keep answering my questions and giving me advice :smile:

The PCBs have arrived yesterday, but I’m still waiting on one part that should arrive next Tuesday. Hopefully I will have a more meaningful update soon :crossed_fingers:

1 Like

The last component I was waiting for came in earlier than expected, so I started building (destroying) my PCBs today :joy:

One main deviation I made from my original schematic is the MCU: AT90USB128 is out of stock everywhere. I didn’t trust the sellers on eBay, so I ended up ordering AT90USB64 from a more reputable website. AFAIK, the main difference between the two model is the onboard memory. The pinout should be the same. Based on the QMK firmware size check, 64would do…

Now back to the progress report:

Initially the PCB was not recognized by my PC at all. After some reflowing solder at the JST connector, it got worse :rofl: When plugged in, the daugherboard started overheating. A sign of short circuit.

After some troubleshooting with a multimeter, turned out that there two pins were bridged on the MCU. With that sorted out, I plugged the PCB into the computer again. Voila, the AT90USB64 showed up in the Device Manager! But wait, why is there a yellow exclamation mark in front of it?!
image

After another couple of hours of debugging, I think there is something wrong with my D+ and D-. I measured the voltage drop between 5V and MCU Pin 4 (D-) and MCU Pin 5 (D+). Voltage drop between 5V and Pin 4 (D-) is about 4.93V, and that between 5V and Pin 5 (D+) is 1.85V. I think they should have similar voltage drop given that they have same tracer length and resistance. But I’m not sure if my guess is correct.

When unplugged, the resistance between JST Pin 2 and the MCU Pin 4 (D-) is 22.3 Ohm, and that between JST Pin 3 and MCU Pin 5 (D+) is 22.2 Ohm. Or long story short, when unplugged, the total resistance on D+ and D- appear to about the same. So this furthered my suspicious about their voltage difference when plugged in…

Other factors that have been ruled out include: USB cable or daughterboard, because this combo worked fine on Bakeneko65. Probably also not the device driver. I tried installing the driver that came with Amtel Flip, and that didn’t resolve this issue.

So at this point, I either risk ruining my 3rd PCB and try soldering that one, or continue to troubleshooting this current one…

Well, if nothing else, at least it looks cute. Now I just need to make it work :rofl:

TBC tomorrow…

1 Like

After some more hours of researching, debugging, and asking around on Discord, the heart of the issue was that AT90USB’s factory bootloader has a bug with Windows 10, which lead to Windows not being able to enumerate the chip correctly.

I ended up pulling out my 2013 MacBook Pro and that piece of engineering marble successfully flashed the firmware for me.

Another issue surfaced from flashing firmware is that my reset switch is not connected to the reset pin on the MCU… Ooops… I can still manually reset it by grounding the reset pin, but that is kind of a risky business.

The next steps are:

  1. Finish soldering the rest of the components and see if I made any more mistakes;
  2. Debugging firmware - it doesn’t show up in VIA even though I flashed the VIA firmware and made a .json file for the layout. I can upload the json in design tab, but the keyboard doesn’t show up under the configure tab.

But eventually I think I will need to redesign the PCB to fix the reset pin issue and maybe use a completely different MCU.

1 Like

The pain is part of the experience, and increases the pleasure to have something working in the end :wink:

Great work!

Haha that’s so true. There was a small celebration when I finally flashed the firmware :joy:

1 Like

Deym. Looking good! Can I have one? I’ll pay for it :grimacing: