Introduction
As promised in the teaser I am giving a detailed description on my version of the TruePosition GPSDO and releasing the design files.
This is the first part of a series, with the general description of the project, concentrating on the mechanical design. The next part will contain the electronics hardware and the third part the software component.
Why another GPSDO?
First let me give some justification for the project. There are already a ton of GPSDO projects on the net, and one can buy ready made units from all price segments. There are versions specifically for hobbyists, such as Leo Bodnar's unit or the BG7TBL frequency reference. So why create a new one?
Well, first because it is a fun project, and second, because it is a fun project. I had a TruePosition boards hanging around. I got it years ago from eBay and they are still available for cheap. I did use it for adjusting counters, but by itself it is a pain to use, as it needs power and it needs some kind of a computer to control. Initially I looked around for designs, which there are plenty, but then I decided to spin my own. I wanted to use as many components from my drawer as I could, but I also had the goal to create a standalone unit, which only needs power to run. So after looking around of what I have and what I can use for this project, I came up with the following list of requirement.
- Built in power supply. There are already more power bricks around than what I want, so let's not have even more. The case will be larger, and one needs to be careful with the line voltage, but that is OK. I already had a suitable transformer, voltage regulators and most important a case that seemed to be large enough to fit everything.
- Have a simple, but informative user interface. I had a 128x64 pixel graphical LCD, which is probably an overkill for this, but hey, it doesn't really make anything more complex, except for the software. But that can even be updated later and it looks cool. However, I also wanted some status LEDs to check the status at a glance.
- Be a standalone unit, it should just works without any external intervention or connection.
- Use an STM32 BluePill for controller. I have a bunch of these cheap units so why not use one. This looked to be a good learning project, as I have not really used the STM32 before.
- No computer interface. I just don't need it right now, but I did keep in mind to have the possibility of maybe later adding it in the form of a serial or USB port.
- No distribution amplifier. It would make sense, but I decided to build a separate amplifier once I need one. This is going to be a 10Mhz / 1PPS reference only.
General description
Let's go from outside to inside. Probably the hardest part of hobby projects is to have a nice casing for whatever one builds. At least for me it is definitely the case (no pun intended). I guess if I had a machine shop, this would make it easier, but I don't, so...
Not all is lost though, fortunately ready made cases can be bought in every shape and form or old instruments can be repurposed. I was lucky, I had an unused case, which was originally destined to host a small power supply, but it never happened. It is approximately a 20x20x8 cm size quite good quality aluminium case, so all components should fit comfortably.
It was important to find a case first, as it determines the PCB design so it is easiest to mount it inside.
The front contains the 10Mhz and 1 PPS outputs, two buttons for control and 4 LEDs for power (green), lock (green), holdover (yellow) and failure (red) and of course the LCD. Which required a lot of careful filing to fit. Sometime I will need to create labels for all of theses to have a really professional front panel.
The display, the LEDs, the buttons, and the connectors are all on the front pane. I used ready made cables with the proper SMB connectors.
And finally, the main topic of this blog post: the power and controller board, which is placed aft in the case. It is one board with the power supply on the left. There is the large black transformer, and the STM32 on the right with some additional components. I designed the board to fit into the remaining place, so there wasn't really any problem with component placement. The display, buttons and LEDs are connected with pieces of ribbon cable.
The two voltage regulators were originally go onto the back, but I found a heatsink in my junk drawer that fit perfectly between the profiles holding the TruePosition board, so the regulators went to the front right. The heatsink is a bit overkill, but one can never go wrong with larger than required cooling.
So that is about the mechanical aspects of the unit. Of course everyone will need to adapt to whatever case and components they have.
In the next part I'll describe the design of the power / controller boards. See you soon in Part 2.
Good morningh, Happy Engnieer =) I tried to build your circuit but I'm stopped at the LCD display. I got a LCD with the correct chipset, but it is a parallel (20 wires) LCD. How can I use it on your circuit and, if I can't, what kind of LCD should I buy? I have never seen these big LCDs with SPI/I2C/whatever2wire bus :\ Thanks! =)
ReplyDeletemy implementation uses the SPI version. I think many of the LCDs can be used in serial or parallel mode, depending on the PSB pin on the LCD. i'm using the hardware SPI on the STM32 here.
ReplyDeleteFor the pinouts, see for example this page, a random google find: https://www.electronicshub.org/interfacing-128x64-graphical-lcd-with-arduino/
However, the firmware uses the u8g2 library, which is able to handle a lot of different kinds of LCDs.
Good morning, very interesting project. Could you please explain me if the software can read the NMEA or TSIP protocol? Thank you in advance
ReplyDeleteHi, thanks. No, the software is specific to the TruePosition board. It has an NMEA like, but not exactly NMEA output format. However, I think it would be fairly simple to implement NMEA parsing. Mind you, the TruePosition is practically standalone, so except for the initialization command, it does not need to communicate. But in practice, I want to know the lock status, time, etc of the board, and all this is available in its output sentences. The majority of the code deals with displaying this info.
DeleteHi The Happy Engineer,
ReplyDeleteThank you for your answer.
I have a Trimble NTPX26AB unit whose protocol is TSIP.
I was just wondering if your great project was capable of decoding this protocol.
Thank you.
I'm not tool familiar with TSIP, as far as I know it is a binary protocol, but that should not make it any harder to decode.Most of the code in this project deals with the display of various information. A small portion is about decoding the sentences from the GPSDO, so I don't think it would be hard to implement.
DeleteThe only catch is that this program uses the very simple Arduino structure of a loop doing repetitive tasks. It was sufficient for this application, but if more complex control structure is required probably some RTOS, like FreeRTOS would be better.
I'm also trying to find a proper case for a GPSDO 10MHz reference... Do you have a reference for the case you used ?
ReplyDeleteThank's !
Hi. No unfortunately not. I can tell you its size, it is 19.5 x 20 x 8 cm (W x D x H) on the outside. Bit smaller in the inside. It is some generic project/instrument case, I got for some previous project, but never used.
ReplyDelete