Build Your Own STM32-DVM-MTR2K V2.0c

I’ve had a few requests from folks who want to build their own STM32-DVM-MTR2K boards. While it’s not for the faint of heart, I have decided to make the necessary files available. This article is just as much a story about making and selling a marketable product as it is “DIY” your own board, but before you dive into DIY instead of just paying for one completed, you might give this a thorough read!

Mostly assembled STM32-DVM-MTR2K, awaiting through-hole devices.

There have been six revisions to the STM32-DVM-MTR2K since I began the project – though not all of them saw the light of day. In the beginning I was making three PCBs at a time from OSH Park and assembling all of the SMDs in a toaster oven. I originally used Orange Pi ZEROs which required removing all of the pin-headers and re-installing new ones facing the other direction. I only sourced parts from DigiKey, which is my go-to for parts, but not the most cost-effective for my version of “production”. Plus I had to amortize the cost of board mistakes into the runs that worked. Those first few runs of boards had a hard cost of nearly $200 each – and those were V1s, without the extra I/O parts.

Those are just the “hard costs”. My time gets more nebulous. Time gets broken down into manufacturing time and development time. Manufacturing time is pretty easy to cost-allocate on a per-board basis, but development time is harder to quantify. On the one hand, if I’m going to build it for KS-DMR anyway, then that time is already spent. But there’s a big difference in the time I spend making something for me vs. making it for others. If I’m making it for me, it has to be just good enough to do exactly what I want, and I certainly wouldn’t spend dozens of hours writing documentation… Then there’s the matter of promising my family that all of those nights and weekends at the workbench would pay off for us somehow.

And finally, the most grim part… The failures and operator troubles. I have had a few board returned. In the early V1.0 days I got some bad mini360 DC-DC converters and that caused me to have to fix 2 boards and throw one away and replace it. Since the advent of the V2.0 (all versions), I have had zero failures from failed parts or manufacturing flaws, but I have had operator error-related failures. Despite continued warnings about not back-feeding the regulators, that the board isn’t running PiStar, etc., I’ve had a number of boards returned that “didn’t work”. I put that in quotes because blowing up the regulator by not following instructions really isn’t “didn’t work”, nor is installing PiStar and not setting DMR Delay to 165 in the MMDVM.ini… and a whole host of other reasons. Those all cost too. Sometimes it’s just fixing software, but other times it’s a user who literally destroyed the modem and expects a replacement. Warning, when you DIY, you’re subject to mistakes too! Just ask me. Some of those early V1.0 runs? Yeah. I made my mistakes too!

The author’s current “go to” for PCB manufacturing and SMD assembly

Over time I got more efficient. I moved PCB manufacture to JLCPCB, starting making ten at a time, and switched to the NanoPI NEO because it doesn’t have a temperature reporting error, is a little smaller, and because Friendly ARM will sell them to me direct without pin-headers installed (so I can put them in oriented as I need them).

Eventually, with the V2.0c, I started using JLCPCBs SMD assembly service and parts sourced from LCSC. Nothing against DigiKey, I still have to get a few pieces there, but LCSC is both legit (no counterfeit parts) and much less expensive. I’ve been able to get the hard cost per board down to about $50 each, including amortized shipping of parts, etc. (buying in bulk). On the soft side, it takes me about one hour per board to assemble. And I figure each board costs me an average of about two hours of time with testing packaging, post office trips, support e-mails, etc.

SMD Component Placement Rendering from JLCPCBs.

The question is, why now? Why am I publishing this now, not earlier? My board sales to date have been about making what KS-DMR needs and recovering my development costs. My development costs were pretty high. The V2.0 board in particular took weeks of my spare time just to figure out SPI communications with the MTR2000. I’ve now fully recovered my development costs, including paying myself a reasonable hourly wage for my time spent, I have no reason not to share this with the world.

You will find all of the necessary CAD/CAM files on the SMT32-DVM-MTR2K information page (at the bottom). They are divided into three different zip files:

The Eagle files are useful if you use Eagle. You’re free to break the board however you want – but please follow the Creative Commons BY-NC-SA 4.0 license. It’s pretty liberal, so just do the right thing. The Gerber & Excellon files are ready for upload at the PCB house of your choice. I use JLCPCB and know they work there. Same is true with the BOM and Placement files. The BOM includes the LCSC part numbers for JLCPCB’s assembly service, and rotation is correct for those part numbers. If you have to sub for something else, please check the rotation! These are usually based on the orientation of the part in the reel, and there is not much consistently between part manufacturers.

There are a few parts not on the BOM, including two SMDs. The parts you need to source elsewhere are:

  • 12.0MHz +/- 2.5PPM TCXO
  • Ferrite Bead
  • 96 Pin Eurocard Connector
  • Mini360 DC-DC Converter
  • .1″ Pin Headers & Jumpers
  • NanoPi NEO
  • 15mm x 15mm x 1.5mm Copper Shim

12.0MHz +/- 2.5PPM TCXO. I use: ECS-TXO-5032-120-TR and FT5HNBPK12.0-T1. This is an SMD part that JLCPCB does not have any equivalent for.

Ferrite Bead. I use Steward LI0805H151R-10 because a friend recommended it, but anything remotely similar will be fine. This is an SMD part that JLCPCB does not have any equivalent for.

96 Pin Eurocard Connector. I use the Amphenol 86093967113H55ELF and have sourced it exclusively from DigiKey (Part Number 609-4953-ND)

Mini360 DC-DC Converter. These I’ve bought a number of places – mostly on Amazon. At the recommendation of Scott Zimmerman, N3XCC, I replaced the pot with two fixed-value resistors to make it a fixed 5VDC regulator. Please be aware that many sellers use inductors that fail and the input & output capacitors are not values recommended by the chip manufacturer. In addition to the fixed resistors, I replace the inductors and the input & output capacitors.

.1″ Pin headers and jumpers. If you can’t source these without help, you shouldn’t be attempting to build your own.

NanoPi NEO. I buy them directly from Friendly ARM without pin headers soldered. Beware, in single quantities, the shipping will cost quite literally twice the amount of the NEO itself! The NanoPi NEO2 will also work.

15mm x 15mm x 1.5mm Copper Shim. These are usually sold as chip-to heatsink shims for GPUs, and can be bought from any number of sources. While it’s not absolutely necessary, it does provide significantly improved cooling. This shim should be placed between the H3 chip on the NanoPi NEO and the bare pad on the PCB with thermal paste/tape, etc. The pad on the PCB is designed to conduct the heat away from the H3 and divert it into the ground plane on the bottom of the modem board.

MicroSDHC Card. I recommend Class 10 and/or UHS-1 cards. I like using 32GB, but really, that’s overkill. Anything 8GB or bigger would work great.

The firmware on the STM32F4XX microcontroller can be burned from the NanoPi NEO, but the stock ATMega328P does not have an asynchronous serial bootloader on it. You’ll need to burn a bootloader with an AVR ISP. Which bootloader is somewhat up to you, but I tell the Arduino IDE that it’s a 5V/16MHz Arduino Pro Mini and use a Tiny ISP.

Typical generic USB Tiny ISP used for burning the bootloader on AVR microcontrollers.

That’s about it. If you’ve made it this far and you’re still interested, you’re probably ready to embark on a DIY adventure. But if this doesn’t sound like your cup of tea, you can always buy one ready to go!

Have a question or comment?

Leave a Reply

Your email address will not be published. Required fields are marked *