I hope You are fine and doing well .
I’m planning to make my first shield in KiCad. Before that, I need some help for the rough layout to avoid any beginners mistakes.
The aim is to design a shield for a robot rover operated with one 12V LiFePO4 battery.
The shield is getting several signals (distance sensor, rain sensor, GPS, buttons etc.)
and sending signals: control two motors via PWM, DIRA/B, LCD display, etc. Guidance required:
The full setup is running on only one 12V battery.
This can make some trouble, because the motors are 15A each (sum: 30A) and the common ground can effects the signal GND. So the motor GND and signal GND can’t be on the same board/Shield must be separated somehow !
To resolve this, I attached some solution (junction box), but I’m not sure this approach it is right or not.
The junction box distributing the power and measuring the voltage and current from the battery as well to able to calculate the state of charge.
For more clarity I attached a simple sketch.
I really appreciate any kind of recommendations and advice for better design
and really eager to get your valuable comments.
In case of question, please don’t hesitate to ask.
All my designs are 12V, but max current from 12V is about 100mA. I am surprised with 3mm traces for 30A. For 1A I would not use track narrower than 1mm. Calculate R of those tracks and voltage drop on them.
I would expect that at start motor can consume more current than in normal working. That max pulse should be used to calculate max voltage drop.
If between point of motor connection and Buck regulator there is no high current then voltage difference at GND would be only important at these vertical black wires from that point to motor controller. If from blue box at right (shield) to motor controller any signals will be send they have to be tolerant for voltage drop at that vertical wires.
Voltage drop to the left of that point are not important provided that they are not reducing the voltage so that Buck will be not able to regulate 5V. My guess is that with 3mm tracks and 30A there can be problems with that circuit.
But as I have written at the beginning I have no practical experience in such designs.
According to IPC-2221 a 3mm track would heat up by 60°K at merely 11A. 30A would lead to delamination or burning. In a series production, you might think of thicker copper layers (70u or 140u), copper pours may help if they are WIDE over the whole distance. For a hobby project, I would solder at least a 1.5mm² solid wire over the track (not only tin! The resistance of tin is much higher than that of copper).
If possible, I would keep the 12V terminals to the buck close to the battery or use separately isolated tracks that are away from the motor current.
The capacitor parallel to the voltage sensor (10u+0.1u) seems very high. The trick is to keep the ground of R3 close to the MCU (=ADC) ground.
In this context; what do you mean by a “shield”? Is this a mechanical shield or an electromagnetic shield or maybe something out of Star Trek? Except possibly for the third option, I do not understand how a shield would “get several signals.” Note I have the habit of sometimes “pulling peoples legs” on this forum but in this instance I am being completely straight.
@ Piotr: Thank You for Your feedback.
3mm required to be able to solder more tin on the copper trace (for more current conduction).
If I go with 30 Amps, 1 mm thickness (PCB copper + tin) then according this: https://www.4pcb.com/trace-width-calculator.html
the “Required Trace Width” will be 2.98 mm, but of course the tin thickness will be more -> safer side.
Regarding:
“If from blue box at right (shield) to motor controller any signals will be send they have to be tolerant for voltage drop at that vertical wires.”
Yes the PWM, and motor direction coming out from the shiled. (See in red “*** …” in this schematics.)
Go in the shield: current, volt measurement, encoder etc.
Kindly explain, how to make them “tolerant for voltage drop at that vertical wires” ? Thank You !
@ Robert_Loos: thanks a lot for the advises.
Regarding:
" … or use separately isolated tracks that are away from the motor current." I don’t fully understand. Kindly send some examples.
“The trick is to keep the ground of R3 close to the MCU (=ADC) ground.” How to do that ? Kindly explain and send some reference. Thank You !
copper pours: I’m planning to make top & bottom layer pours connected to the GND and stitched with vias.
@ BobZ: Yes, may be one day it can be used in Star Trek (I love the series.)
I didn’t want to give too much details at the first shot, so I attached the concept of the Shield now. It is showing like all in one board, but in my previous post I separated the 12V motor items to the junction terminal due to common GND (motor & signals). See “!” in yellow.
Thank You for all proposals for betterment.
In case of question, please don’t hesitate to ask.
So you are going for the Arduino MEGA form factor. Have you considered upgrading that to the M4 based Adafruit Grand Central? I haven’t checked the specialty interfaces to see if it is a fit, but it is a more powerful processor with actual hardware floating point support for a couple bucks less than a MEGA from Arduino. Note, however, it is a 3.3V board instead of 5V.
The formulas used on that calculator are not for adding thickness with tin. 1mm is “crazy thick” and would be very expensive to get fabricated. A more normal “high current” board would use maybe around 0.2mm copper on outer layers.
Why does the high current path need to be on a PCB? This section could be implemented in loose hookup wire - prob around 10 gauge (or 8g for longer runs). The sense resistors could be incorporated in the shield or in a very small separate PCB. This would probably be a more cost effective and flexible arrangement.
@ MuratUrsavas: Yes, the motor GND will be “manually soldering/welding/pouring tin” on a 3mm trace.
@ John_Pateman: Correct. This is why the motor GND moved to the junction terminal “small separate PCB”. (Green box on the attached picture with the voltage divider resistors).
I hope this will not disturb the signal GND (5cm distance) or is there any better solution ?
I mean you don’t really need the ‘pcb junction terminal’ board at all. Implement this with suitable gauge wire and tee off the connections you need i.e. to 12v and GND. Just imagine the green square isn’t there and it is all just 10g hookup wire. Then simply move the voltage divider resistors onto the shield or make a really small cheap one for the voltage sensor components alonr. Then you won’t have to make a very expensive thick pcb.
And it is a sign of helplessness. The resistance of tin is nearly ten times more than that of copper. Sure, it’s better than nothing but is also is not very much.
No. You set the copper thickness to 1mm and took the width for internal layers. But as I mentioned elsewhere, the resistance of tin is ten times the one of copper. You would have to built a 10mm high ‘wall’ of tin
I meant, keep the terminals for the buck close to those of the battery. If this is not possible, use separate tracks (for both GND and 12V) for buck and motor. Do not place the buck terminals at the end of the tracks to the motor terminals.
Place the voltage divider and the cap close to the arduino. Do not use the ground terminal from the battery for this. The voltage there will vary with the motor current and you won’t get a stable reading.
I would say, a ring of vias around the terminal would be enough. Stitching the whole plane gives no advantage.
First of all thank You for everybody for the very interesting and useful posts.
@ Robert_Loos: Thank You very much for Your very detailed comments. Those helped a lot.
I modified the Junction terminal and kept the voltage divider (just in case), but connected his GND to the MCU’s GND as suggested. (Already have in the junction box, due to current measurement.)
I changed the capacitors from 10µ & 0.1µ to 0.1µ and brought closer the screw terminals for the buck to the battery on a separated tracks. The vias are in ring “via fence”, connecting the top and bottom copper pours to the motor ground (not to the MCU’s GND !). Kindly suggest for further improvement if any. Thank You very much for any kind of help in advance.
I didn’t follow the whole discussion so I don’t know why you moved Buck there. I don’t wont to say it is good or bad. In each decision there are always pro and anty. As I understand your circuit the GND to uC comes through Buck. So your move made probably the differences between GND level of uC and GND level of Motor controller being bigger. As there are some lines from uC to Motor controller the requirement for those connections resistance to voltage difference between GNDs has increased.
Resistance means that when sender sends 0 (1) receiver sees 0 (1) even between sender and receiver reference levels (GNDs) are expected voltage difference.
In principle, this is much better than before. Let me give you an idea of my topological imagination, assuming all the parts (including the buck and the acs) should be mounted on a shield for an arduino or a raspi. I don’t know the pinning so here they end somewhere in the connector.
Here you have short tracks of high current, not flowing over the whole board. You can make them nearly arbitrary wide and have them in parallel on top and bottom. R3 and the cap are as close as possible to the MCU. The MCU gets a possibly clean supply directly from the battery terminals. You might use a LM7805 instead of the buck since if you have motors of 180 watts there is no need to save one for the regulator.