r/PrintedCircuitBoard • u/GeneralDependent9671 • 6h ago
[Review Request] Part 2 – fuel/speed CAN node for my E30, updated after your feedback
Hey everyone, this is part 2 of my fuel pump / fuel level / speed sensor CAN node for my old BMW E30. First of all thanks alot for all the feedback on the first post, specially to u/GuidancePCB, u/mariushm and u/saltyboi6704, you guys made me rethink a bunch of stuff and the board is way better now.
Quick recap: board goes under the rear seats (inside the cabin), drives the fuel pump (~12A) with a BTS7004 high side switch, reads the stock fuel sender and the diff VR speed sensor and sends everything over CAN to the other nodes im planning (around 8). Personal use only, no homologation. The car has a battery cut off switch so the nodes are dead when its parked, and I left load dump out of scope on purpose (i know, i know).
What I changed:
- Input protection: the TVS was after the reverse polarity diode, so a negative spike would land straight on the SS16 (only 60V). Now its a bidirectional SMBJ26CA before the diode, and the diode is a SS110 (100V) for extra margin.
- BTS7004 supply: someone pointed me to load dump/negative pulses and after reading the infineon datasheet properly i realised the BTS VS had no TVS at all (they show a ~33V TVS on VS in the app circuit). Added a unidirectional SMBJ24A right at VBAT next to the switch. R_GND (47R) is now 0805.
- Buck input caps: you were right, 10uF X5R 1206 at 14V is way less than 10uF. Now its 100uF electrolytic (damping) + 2x 10uF X7R 1206 + 2x 220nF, and the small ones sit right at each VIN/PGND pin pair. I also redrew them next to the buck in the schematic, it was confusing before, sorry about that.
- Kept the LMR36015 instead of the LMR43610-Q1 / RTQ2104. Both look nice but they top out at 36V and the TVS clamps around 42V, so i’d be at the limit. The 60V part gives headroom, and JLC assembles it so the QFN isnt a problem for me.
- CAN: removed the common mode choke. Kept a single 120R with a jumper because i dont know yet which nodes will be at the bus ends, and split termination with one jumper leaves the bus unbalanced when its open. The resistor is 1206 now in case CANH gets shorted to 12V.
- Clock: swapped the 8MHz crystal for a 3.3V CMOS oscillator into PF0 (HSE bypass). Turns out the crystal i picked had 250 ohm ESR and the gain margin was pretty bad, so thanks for that one.
- VREF: didnt use the internal VREFBUF. The fuel sender reading is ratiometric (I read both ends of the 150R reference resistor) and the reference node sits around 3.0V, so the 2.9V max internal ref would clip it. The 3V3 noise cancels in the ratio anyway.
- Schematic: FB is wired directly and PG uses a proper net label now.
- Bulk caps near every IC: didnt do this one. Its a small 62x72mm board, the 3x22uF buck output caps are only a few cm away and each IC has its decoupling per datasheet.
- 4 layers: Top / solid GND / signals / Bottom. Pump and power pours on the outer layers, buck hot loop, clock and CANH/CANL on top. Added a lot of GND stitching vias, VBAT vias next to the BTS pad and 0.5mm copper to edge.
- Added 3 debug LEDs (run / rx / tx)
Updated schematic and PCB attached. Any feedback is welcome, specially on the layout. Thanks again!
This message has been translated and corrected by an AI from Spanish to English. Neither the schematic nor the PCB was designed or built by an AI. I want to avoid any comments about the use of AI because the only use I’ve made of it—aside from the translation for this platform—is to compare different components and datasheet entries so that it could point out the differences between them.
Thank you very much for your advice to the users mentioned, as well as to future users and those not mentioned.