Since off the shelf GPS modules are usually quite heavy, I'm building a very small and very lightweight GNSS/Magnetometer combo around the uBlox ZOE-M8Q and MMC34160PJ on a 10x12 mm PCB
This project actually isn't as bad as the board I had shown on that page, but still - proper tools are absolutely required for such a build. Like a stereo microscope.
Paste applied manually:
I spared the GNSS and the little BGA. The BGA doesn't need paste and I wanted to do the GNSS with low temp paste after testing everything else.
After soldering everything on my stove top:
Now the BGA. Added some tacky flux to the PCB with a brush, placed BGA and added a small inductor on top for extra weight:
After that was done I could test the BGA / magnetometer. I could measure the clamping diodes on SCL and SDA, and proceeded to run a little arduino test to see if it was working. Fortunately, there's a library with an example sketch for the MMC34160PJ so that was easy.
Next: ZOE-M8Q. I placed some paste on the PCB frame and picked it up with my soldering iron with a fine tip to pre-tin all pads. Then clean, add flux and level with hot air plus a few touch ups here and there for this result:
Clean again, add tacky flux, place GNSS and reflow at 220° C:
With a molex flex patch antenna we're at 1.1 g:
The GNSS worked as well and gives a cold-start fix with half of the sky in view after 34 seconds. Tested with https://pypi.org/project/PyGPSClient/.
I have made two layouts, one for 2 layer PCBs and one with 4 layers. There's not a huge difference, but power supply is a bit better with 4 layers.
Here's a 3D view:
The schematic is pretty simple since the design is pretty much just a breakout board for the two chips (power supply, magnetometer with I2C and pull-ups, GNSS with UART), so I'll leave that out for now. It will be included in a repo later on.
The I2C pull-ups are in the top left corner and can be disabled with a sharp knife, between the two dashed lines.
The chips operate at 3.3V nominal and the NCP160 regulator can provide these from a 5V rail. However, since the NCP160's dropout voltage is extremely low, the supply can even come from a 3V3 rail and nobody would notice. There was even enough space for a reverse polarity protection diode.
An LED was added to indicate that a fix was found (ZOE-M8Q's timepulse output).
The passives are 1206 (tantalum caps), 0402 (caps) or 0201 (resistors and caps). I have 7 of the GNSS chips around so that's the number of boards I plan to assemble (with low temp paste, see here: https://hackaday.io/page/10792-assembling-densely-populated-pcbs-with-0201-components). Regarding assembly, that GNSS LGA and the magnetometer in a 1.6 x 1.6 12-BGA is surely a treat. I'm looking forward to this.
I've added a schematic to the git repo. The capacitors are simply the type I usually add to supply rails (6V3, ESR 45 mOhm) and there's no simulation behind that choice.
Thanks, I'm thinking there might be room for larger components (0603 resistors/capacitors) if those two caps weren't there...and I don't think they are necessary.
Great project! Schematic? I'm interested to see why the 1206 electrolytics are needed.