I’m working on a Eurorack compatible step sequencer driven by an Arduino. I got to the point where I was pulling my hair out breadboarding and soldering to strip board. I’m attempting to make my own PCB and was hoping I could get some feedback, or at least if someone sees something obviously wrong. I have tried to do research and reading, I’m not looking for someone to design my project for me.
What should I post, screen shots or also the project file?
And of course you can experiment a bit with wider or narrower searches.
Also, this forum is intended for helping with problems with how KiCad works and not for general electronics or projects. There are other forums better suited for that.
Paul, thanks for that link. Sorry I was unclear in my post but I’m actually working on an analog step sequencer with an Arduino as a controller. I am using it to get reaquianted with C/C++ after 25 years and learn electronics and 3d printing. I also noticed there were no similar (analog) designs on Reporecon anyway.
I’ve already written the code, designed a schematic and wired up a front panel (after 3d printing that). It was getting to be a hassle though with the bread and perf boards, some external I2C stuff, etc… So I designed my first PCB and was hoping to have someone take a look at that.
I saw another design review post in this forum, however if there is a better place for that can you direct me? Obviously I don’t know where that is already, or I would have posted there.
I’d like to see a screenshot of your schematic and pcb to see where you are. Sounds kinda interesting. Sometimes these posts get shutdown as not-kicad-specific enough and sometimes they lead into good discussions. The ones that fail badly are when the poster clearly has no idea of electronics, and even when offered suggestions the same questions are asked over and over. Analog music circuits are always pretty cool. Welcome to the kicad forum!
Sure, here’s what I have. I’m including a shot of the panel so it makes more sense. I know the pcb is pretty spread out, I had everything packed very tight my first tempt and got way too bogged down with routing.
16V electrolytics on 12V rails really should be higher voltage. In cans it is easy to source 50V parts. They will be happier and have more capacitance generally (as effective capacitance generally goes down as dc bias goes up).
C4 polarity needs to be reversed (neg to -12 rail and pos to ground) else it may smoke and pop spectacularly when you apply power.
My OCD goes crazy when I see a schematic that does not have positive up, and ground/negative down. So +5 facing up not down, ground facing down not up… Does not affect function, but looks so much better. Likewise, signal flow generally left to right on a schematic, when practical, though in a case like this where you have separate chunks that is not really applicable.
4067 mux enable is active-low so I would label it MUX_ENABLE/ or MUX_DISABLE, but that’s just me.
The ancient TL072 is still an awesome opamp for audio circuits and is a good choice. You have clock-in/out and gate-in/out running through opamps – are those digital signals running on +/-12V levels? I am unfamiliar with Eurorack stuff.
On your pcb, you have a nice ground plane, but try not to break for long runs – that is, try to just have shorter jumper traces as needed on the bottom, and try to keep signals up top as much as practical. I would probably use fatter traces as well. Not critical, but you don’t need thin traces here.
C4 looks OK. For the most part you have put higher voltages to the top of the schematic, and lower voltages to the bottom, except for the arduino board and for C5. In general I try to use a long straight horizontal line for GND, to put more emphasis on all the connections to it. This would also put C4 directly below C7 and C6 directly below C9, D1 directly below D3 etc. and this puts even more emphasis (and thus easier reading) on the flow of voltages “from top to bottom”, and it makes it easier to spot mistakes in the schematic.
Usage and placement of decoupling capacitors also looks OK. I would not make the signal tracks wider as teletype guy suggests. Even a 0.2mm wide track is enough for several hundred mA. In general the recommendation is to make it a bit wider then the minimum your PCB manufacturer recommends. I would make the power nets wider though. Partly to give those a lower impedance, partly out of habit, and partly because it makes it easier to recognize them on the PCB. It is also good for you to practice with net classes. Create a new net class, give it some relatively wide setting (maybe 1mm for copper) and then put all the power nets in that net class.
Usage and design of a GND plane is a big topic. Rick Hartly (from Altium) made a very good two hour long video over the importance and use of GND planes. It mostly focuses on high speed digital designs, but the two hours do show how important the GND plane is. You also have some decent separation between your uC and the analog section and that is also good. Making all those slots through the GND plane is not good though. In general, it’s better to use a bit longer tracks to avoid cutting though the GND plane. Especially the routing of the two power tracks from the power supply to the opamps is bad. These should not even come close to the arduino. I would probably put the arduino more in a corner, and put most of the power supply more to the center of the board. This also separates GND currents (which generate noise) of the analog and digital sections.
Have you drawn the PCB outline itself? These should be lines on the Edge.Cuts layer.I also see the edges of your GND zone are not perfectly perpendicular. I usually draw the GND zone as an irregular pentagon and then let the edge of the PCB clip it to the right size (you can set a clearance in PCB Editor / File / Board Setup / Design Rules / Constraints / Copper to edge clearance. (For a while the default for this was 0, which is not good. 0.5mm should be plenty). Perpendicular lines are also very easy to draw on a coarse grid.
Consider adding mounting holes. Normally these are added to the schematic first, and assigned footprints, just like all other parts. KiCad has libraries for this.
Add some texts. Project name, date, revision number, your own and/or KiCad logo etc. This makes it easier to find your project again if you want to modify it a few years later.
I still don’t like the wires going through the connector, but you have to place a compromise somewhere.
Also note I put the values of the resistors inside their symbols. This is the default location, but it gets messed up by Schematic Editor / Preferences / Preferences / Schematic Editor / Editing Options / Automatically place symbol fields. I always turn off this checkbox, because I find the default locations better chosen than this automatic thing.
Layout is pretty good. If it were mine (or from one of my team) I would suggest:
Consider ESD on any unprotected Input or output. The Nano board has no I/O protection.
Consider using an ATTiny85 instead of the Nano. I am using it in a specialized LED driver and it was a breeze getting it up and running. It has a built in 8 Mhz clock so all you have to do is add power supply and bypass caps.
I prefer to use thicker traces when there is no need to go thin. I usually double the min trace width and increase the min clearance by 50%. I also up the vias to 0.8 hole and 1.4 pad od. There is no need to have them at the “minimum” for your layout. Besides if you have / wish to make a mod they are a good place to connect.
Your analog pot wipers has no filtering (aka capacitors). Any noise picked up will be reflected in the outputs. I would also add a cap at the nano “analog input”.
Not sure where the LED output goes but I would put a resistor in series.
Consider, this is a development board, hopefully the only one you will have to make. Area seems to be not at a premium so I would add extra caps and test pads etc. You can always not populating them.
Although it meets design rules I would not run traces near pads unless forced to do so.
I would move C8, C9 and C6 to as close to the connector as possible. No need to let any RF get on the board.
Not sure what you plan for the output “jacks” J7,8,9 etc. I did this and was very sorry. The 2 terminal versions have no other mechanical interface than the solder pins. When you tighten them they twist horribly.
Since then I have changed to spring loaded wire terminals. Many folks find them to be more reliable.
In digging into Bart Dring’s sixpack cnc controllers (link) I liked the removable-plug terminal blocks he used, and got a variety of them from LCSC. The prices are hard to beat compared to the well-regarded-but-pricey offerings from Phoenix Contact and Wurth.
For signal wires I like 2.54mm pitch – go to lcsc.com and search for “KF2EDGR-2.54” and “KF2EDGV-2.54” for terminal headers in 2P to 10P sizes, and “KF2EDGK-2.54” for the plugs. As an alternate, Wurth has a similar family in 2mm which drops into most of these footprints.
For medium size stuff in a 3.5mm family check out “KF2EDGR-3.5” and “KF2EDGV-3.5” headers and “KF2EDGK-3.5” plugs.
Bigger wires on 5.0mm, “XY2500R-B-5.00” “XY2500F-A-5.0” “XY2500F-AV-5.0”
Wow, thanks for all of the feedback! This is even more than I had hoped for. It’s given me a lot to think about, I’ll redo the layout and clean things up a bit over the weekend and post something reflecting your advice.
I haven’t ordered the board yet, this was just my first attempt after starting on it Monday and I wanted a sanity check. There is a PCB outline, it is slightly bigger than the ground plane. I’ll try it the other way when I redo the layout. I’ll also adjust the trace thickness, move the power traces around and shorten them and enlarge some of the other items mentioned
Test and mounting holes make a lot of sense. I’ll look at the different connection types as well.
I’ll research ESD, I had not considered that before. I don’t think I had seen that as a topic on any of the forums I’ve visited. I’ll also look into the ATTiny85, though from a quick glance it may not have enough RAM for my code. Filtering…makes sense. The LED I was using had a resistor soldered in-line, though I will make a pad for a resistor since that won’t always be the case.
As for the I/O… the gate is basically a trigger, anything from 3.3-15V seems acceptable as an output (from testing some old synth stuff I have and reading about gear), CV is 0-5V analog and the clock is a series of pulses (generally 1,2 or 24/48/96 per beat, depending on the equipment). Outputting 5V should work, I haven’t written my own code to test this but I have scoped some other gear that outputs that signal. I should have some sort of voltage limiting on the input since I think things like old drum machines can output 10V and I don’t want to send that into my MCU. Perhaps using a transistor to trigger the interrupt signal, I’ll have to look up some circuits. That would free up an op amp for an optional part of the clock signal. Some equipment uses a stereo jack, the tip carries the pulses and the ring goes between low/high for stop/start.
Well, that was quite the jigsaw puzzle to put together. I’ve rearranged my board based on the advice I received here and this is the new version. The schematic is essentially the same I think, I did rearrange some of the outputs of the mux to make running traces easier, I just have to change my code to reflect that.
I did have a few follow up questions on some of the advice I didn’t know how to implement.
For track width, my Kicad was set for 6 mils for everything. I’ll probably use PCB way and that was within their specs. I didn’t know if and of the power traces should be wider.
As far as ESD goes, I have a resistor and a diode on the input. I can also add diodes tot he outputs, which do have resistors. Do I need to go further than that?
For filtering the potentiometers, would that be a high or low pass filter that I should build? Do I need to do all 16 or can I just put that on the output of the mux?
I minimized traces under the pads and vias as much as I could. There were a few spots I had to run something under a surface mount component, though in all but one case they were mostly ground wires.
Do I need to worry about limiting the voltage coming in? I have a piece of gear that uses 10V clock signals, another uses 3.3 and a 3rd 5V so I can’t just put a voltage divider on the input.
As far as the MCU, so far my program is using much of the 2K of working memory in the nano. I also already wrote a bunch of interrupt code that I don’t know if I want to rewrite.
This borders on philosophy. Just because you can, should you? Many will state “I’ve never had a problem with small traces”. Personally for a prototype (or any analog board) I prefer to have wider copper. At 6 mils you trace is about the same width as a med pen line. Go ahead an draw a line on paper and see if you think its robust? Also note the most commercial boards are 2 oz copper. The default (and cheap) China boards are 1 oz copper. This means you copper cross section is 6 mils by 1.4 mils. Good luck if you have to cut an jumper a trace.
For filtering the potentiometers, would that be a high or low pass filter that I should build? Do I need to do all 16 or can I just put that on the output of the mux?
The filter is a low pass. A single capacitor at each pot can be put on the bottom of the board and only populated if needed. I would do the same with the output of the mux.
Again, you will find my approach somewhat conservative. However I’ve designed a lot of boards (as and engineer not PCB designer). Many times I’ve found I would have been better off adding parts that may or may not be needed than wishing I had after the boards were build. This is especially true for prototypes.
150um (6mil) is indeed quite narrow. I am not worried about mechanical strength (Try to scrub it off with your nail when under solder mask) nor current handling (Already 600mA for 35um (1oz) copper thickness and 10 degrees centigrade temperature rise), but it is getting into the region that not all PCB manufactures can make it, or the costs rise.