While tinkering with a homebrew GPSDO project, I spent a bit of time searching the depths of the internet for information and parts for my project. I found a PCB for a Symmetricom GPSDO (specifically the Symmetricom 089-03861-02 as per the PCB silkscreen in my case, although the firmware reports itself as 090-03861-03). The board was cheap because the OCXO was missing – I suspect it had aged beyond where the error voltage range was specified, making it unusable. But the board was around £15 GBP delivered from AliExpress, so I took a chance on it based on the fact it had a Furuno GT-8031F GPS receiver which is a GPS module specifically designed for timing applications which “delivers highly accurate GPS timing”. The module also had a CPU (Renesas F2317VTE25V-H8S/2317) with accompanying flash and RAM ICs as well as a Xilinx Spartan-3 FPGA (XC3S200).
Besides the missing OCXO module, my board worked perfectly. I was able to piece most of the information together from the following two resources:
I saw that some people had put their units into Hammond Manufacturing project boxes, and that gave me a few ideas. It would be nice to box the unit up with some ancillary electronics to share the UART (57600 baud, 8N1) over Ethernet TCP/IP. However, my experience of UART to Ethernet modules has always been poor and friends reported similar, so I opted for an FTDI-based USB interface (namely the FT232RL, as the cheapest/easiest part during the chip shortage of 2019-2022). I was tempted to use a Maxim MAX232 device to perform the necessary conversions, but, in the end opted for two NPN transistors – a bit hacky, but much cheaper. I may well come back to the Ethernet option in the future.
The carrier takes 5V at around 2A input on a 2.1mm x 5.5mm DC power socket, a USB-B connector and holds five LEDs: four main LEDs from the GPSDO (which are connected to test-points on the PCB, I can’t find the LED signals on any connector), plus one LED from the FTDI device showing USB activity.
The image below shows where the LED signals are taken from. For reference, the big IC in the centre is the Xilinx Spartan FPGA:
The LED signals are all common anode, fed from +3.3V taken from the board. The LEDs are fed through a resistor, and the individual cathodes connect back to either the CPU or FPGA through another of the wires:
RED: +3.3V supply used to power the LED anodes
YELLOW: Heartbeat (DS2)
ORANGE: Error (DS1)
There are two other LED signals (DS3 and DS4) which aren’t connected.
From here, I created a carrier board which had the correct mounting holes for the Symmetricom module, and offered front LEDs to show status, an easy 5V interface and a USB-UART interface to the module control port. The final board looks as below:
With the module fitted, the board looks more like the following. Note, this was an earlier version of the PCB:
The project was designed to fit inside a Hammond Manufacturing 1455N1601BK case which takes a 160mm long by 100mm wide PCB, and the designed PCB fits the case nicely. By default, the Hammond case comes with either aluminum or plastic end plates, but I went to the effort to make PCB front and rear plates to enclose the case. Using PCB meant I was able to use tools I was familiar with to create the end places, and use the same order as the main carrier PCB. The copper on the PCB could be used to create a metal Faraday screen to enclose any electrical switching noise, and the silkscreen could be use to add legends, logos and decals.
I prototyped the designs as below in the PCB package and then used my laser cutter to test them out for fit. A test fit of the front panel is shown below:
The below picture shows the PCB end boards as they arrived and the cardboard cutouts. There are some small tweaks, between the two, but overall the process worked well. One thing to note is that the internal cutouts for the BNC connectors are a little bit tight – in future I need to add an extra 0.5mm or so clearance (in addition to the 0.5mm clearance I left already). However, the connectors pushed in even if a little tightly.
Final assembly went well, and I am very pleased with the results:
While chatting to a friend recently about an old Z80 CP/M machine I built based on Grant Searle’s Z80 CP/M machine, I decided to fire the machine up for a demonstration and give it a try.
The machine had been in a shelf in my conservatory for well over a year since I last powered it, and when I connected the power, it was clear that there were signs of life, but, the machine was not happy at all! I could see bus conflicts on the data bus as well as very ‘broken’ behaviour.
After probing around, I decided to check a couple of logic gate (those controlling the address and read/write lines) using my TL866ii+ programmer which conveniently supports logic gate testing and RAM testing. All of the logic gate ICs confirmed to be working correctly, as did the 128Kx8 RAM chip. Checking the EPROM yield a different story!
Some of the bits towards the end of the ERPOM had been erased (with UV erased parts, this means a ‘0’ bit had become a ‘1’ bit). The snapshot below shows in red bytes that had failed the verification.
The first 0x2012 bytes were completely unaffected with 324 differences in total (just under 2% of the 0x3FFF bytes in the 16KB ROM) mainly concentrated in the end of the address range.
This teaches me to always cover the UV window with something opaque as per the datasheet’s advice. I know people say that sunlight can erase such devices, I never really believed them. As an aside, others have looked into this, which I had not seen until now: see this hack-a-day article for a timelapse of EPROM data when exposed to sunlight.
And, secondly, it left me in a quandary as to how I should restore the ROM code.
Initially I thought I should just be able to reprogram the device over the top of the existing code, since the changed bits would be reprogrammed back to ‘0”s from their current ‘1’ state. But, this turned out not to work. I’m not sure why, but the programmer would fail at 50% – just about the time the corrupt bits arrived.
I decided the next thing to do was to try and erase the IC – but how!?
Erasing UV EPROMs
I didn’t have one of the classic EPROM eraser boxes with a timer and a nice antistatic mat. I’d have to improvise. Essentially tinker around until the PROM was erased (reading 0xFF in all locations).
My first attempt was with a DSLR camera flash. I had seen these cheap EPROM erasers online that look like a xenon flash tube, so figured it was worth a shot. However it made no difference at all – I assume the camera flash has an UV filter.
My second attempt was with a UV LED, inspired Charles Ouweland‘s investigations along similar lines. Charles reports that this took 48 hours to erase the PROM. Like always, I was in a rush, so this didn’t really work for me. I could have driven a roundtrip to my parents (Dad has a proper UV eraser) in less then 4 hours including a cup of tea and a chat with Mum!
The third attempt was to use a UV insect-o-cutor which features UV fluorescent tubes as in the UV141 eraser pictured above. I placed the chip on the desk mat and put the UV insect-o-cutor directly on top such that the finger guard was on the top of the IC and the bars were not obscuring the window.
The scary part of this was that the high voltage aspect of the bug-zapper was popping on occasion with small insects – thankfully, the insects popping did not obscure the IC window nor cause ESD damage! After 20 minutes (the usual time I run the UV141 for) the IC was exactly the same. No additional bits had be cleared to logic ‘1’s. I suspect the output is UV-A and not the required UV-C.
Making a UV-C EPROM Eraser
I went back to the second approach with the LED, this time consulting the EPROM datasheet (extract below), and noted that the recommended wavelength for erasure is 2537Å (253.7nm). This puts the UV light required to erase the EPROM in the UV-C spectrum.
I set about trying to find an LED with the correct wavelength. Some more digging showed up the VLMU35CB20-275-120 UV-C (270-280nm peak) LED offering a typical 13.5mW. Such wavelengths are common for curing acrylic nails and for sterilising surfaces in medical applications. At the time of writing, one such LED costs around £4.50 with VAT.
Constant LED Current
These LEDs appear to require between 5.0 and 7.5V at 120mA. I opted to create a simple constant current device using an LM317 set to 120mA and the two LEDs in series. This should work fine when supplied with at least 18V (7.5V + 7.5V + 3V [LM317 dropout voltage]). A SOIC8 LM317 is capable of 200mA and low profile enough to allow the LEDs to be close to the EPROM without catching. R1 is chosen to cause a voltage drop of 1.25V (the LM317 reference voltage) at the desired current. See this TI flashback for more details.
R1 = 1.25V/I = 1.25/120mA = 1.25/120e-3 = 10.4Ω. The closest easily available value is 10Ω, which checking backwards would give a current of 125mA. Since the datasheet mentions 150mA supply giving increased power, I have chosen to go with 10Ω as this will not damage the LED.
We should also consider the size of R1. The power dissipated in the resistor is easily calculated:
P = I^2 x R = (125mA)^2 x 10Ω = 120e-3^2 x 10 = 0.144W = 144mW.
So, a standard ¼-Watt through-hole resistor would be fine. For surface mount, 0805 resistors are typically 100mW, so a combination of multiple resistors should be used to handle the power. This could be four 10Ω parts in series-parallel, two 22Ω resistors in parallel (making 11Ω [114mA in the LEDs]), or two 4.7Ω resistors in parallel (making 9.4Ω [133mA in the LEDs]). I’ll opt for two 4.7Ω resistors since this is still below the maximum recommended working current of 150mA.
Designing the PCB
Initially I had considered tacking two wires on the LED and using a lab power supply to power the LEDs. However, I figured if I was making a constant current supply – mainly to avoid a “oops!” moment and pop £8 worth of LEDs – I would make a PCB to house it all. This way, I could keep the board with the EPROM programmer in the programmer box. The design brief would be simple. The PCB should fit inside the EPROM programmer (TL866ii+) box. The PCB should be (maximally) 110x50mm. I figured 100x50mm would be a nice size. A 5.5×2.1mm DC jack would allow for easy connection to wall-wart PSU or other power source. The rest was just two LEDs, and LM317, two resistors and a decoupling capacitor or two!
Since the PCB is quite simple, I figured it would be a good candidate to make with a laser cutter. Above shows an overlay of the Gerber edges and the layer to be etched. The back areas are there copper is to be removed. The white areas will remain copper.
The board was created by coating a standard single-sided FR1 copper PCB blank with black paint from an aerosol can. This will be used as the etchant mask. The laser cutter is then able to remove the mask by burning away the paint layer, exposing the copper to the etchant.
Typically, I’d also cut a solder mask from mica sheet to help apply paste, but for such a simple board, it isn’t worth the extra effort and waste materials.
The next job is to etch the PCB in ferric chloride – you should strive to make a much better job than I did!
I completely over-etched by board by having the etchant too cold and leaving it far too long! But hey, it’s been 10 years since I last made a PCB in my (parents) kitchen sink!
From the image above you can see that my 10 thou track has completely disappeared in the right etch, and has almost completely disappeared in the left. I then proceeded to make a mess of drilling the connector holes, misreading a 4mm drill as a 2 mm. The board ended up as a total mess, but, I got it working!
My apologies for making such a mess of the board. However, as you can see, the two LEDs are lit and a current of 117.3 mA flows through the series LEDs. I may tweak the resistor values to get an extra 10mA or so, but for now, the result is good enough!
So, now to erase the EPROM
With the PCB made up, I eagerly put the EPROM back into the reader and loaded the old ROM code in. I reverified it to see that indeed 324 mismatches showed up, just as before. Confirmation that all my previous attempts had failed!
I held the newly made PCB above the UV window and gave the EPROM a 1 minute ‘blast’. I read the EPROM again, curious to see how many extra bytes failed verification. Too my surprise, 1088 byte failed verification – considerably more than before. I looked through the data and could see a pattern; the EPROM was blank. Sure enough, the 1 minute blast was enough to clear the EPROM!
I guess it just goes to show what having the right tools for the job can do!
Now will the computer boot?
Since I was on a roll, I reprogrammed the EPROM with the Z80 CP/M code and went for a test boot.
In the video, Mark explains how cold galvanizing zinc spray, when ‘excited’ by a laser, burns at a high temperature to permanently mark the surface of the material onto which the zinc was sprayed. Mark suggests that this only works on stainless steel, however, other videos show how it can be used on ceramics, glass and similar substrates to burn or melt the substrate. I’m not exactly sure of the process, but, it certainly does leave a controllable, visible mark on the surface, which is exactly what I was after!
The box above shows markings for the 144 MHz antenna, GPS antenna, and status LEDs for an APRS transmitter I happened to be working on at the time. The effect is to leave a darker surface on the Hammond diecast box, which (at least to my testing) is very hard wearing and does not come off with use of solvents…
Firstly you’ll need to coat the surface to be etched with a liberal spray of zinc cold galvanizing compound. I used MOTIP Zinc Spray because it was the cheapest I could find on eBay and it works just fine – perhaps I got lucky but I’ve seen several videos on YouTube each swearing by a different make of spray, and they all appear to work. The important thing is that it is high in zinc. It’s an epoxy based aerosol, so, spray outside using the appropriate precautions. The spray should be quite thick, I spray on about 4 heavy coats one over the other and then let it ‘dry’ for around 5 minutes, just until the main solvent has evaporated.
While the spray is drying, design your artwork. I’m making a line drawing of the car along with my callsign to put on the box, mainly to see how it comes out – I’m keen to see if the line drawing comes out well or not – so watch this space! My design looks like the following:
Next we get to put the metal into the laser cutter. I use a 60W CO2 laser cutter, with the power set to around 50%. Others have reported success using 10W diode lasers. I found that 50% was about right for my machine. Going slowly helped a lot, I reduced the machine to around 5mm/second. Where possible, vector engrave as the laser power is continuous and more controlled than raster scanning, but for large areas, such as the text, raster scanning works fine. I always reinforce text with a vector engrave around the outer.
You’ll need to focus the machine as you’d normally do in order to cut the surface.
Once focused, frame the metal on the cutter bed. My laser cutter has a spotting laser which really helps with this.
Once the engraving is done, leave the work in the cutter’s fume extraction for a short while to be sure that the chamber is clear of toxics, and then remove the work. Mine looks like this:
The final stage in the process is to use a paint remover to remove the paint from the metal to reveal the final design. I use cellulose thinners, which works well. Be sure to do this in a well ventilated space, otherwise you end up with a headache (like I have now, as I write this!).
I think you’ll agree that the final result looks very clean and tidy, and has retained all of the detail present in the original design.
This process is quick and easy to do if you have a laser cutter, uses a cheap-ish (around £6) can of zinc spray, and produces good, repeatable results with minimal fuss. It’s very useful for creating front panels and similar.
You may also find that spraying another colour of paint over the top, and then sanding down very lightly will further accentuate the design.
Some time ago I had reason to log the quality of air in a room. We needed to know what the levels of carbon monoxide and carbon dioxide were at a given time. I quickly produced a thing on a strip of veroboard that would use an ESP8266 to log over WiFi to the ThingSpeak platform. This proved to be useful, and so I made a couple more on a PCB for various other locations.
The sensor uses a CCS811 (a low-power digital gas sensor) , BME280 (sensor measuring relative humidity, barometric pressure and ambient temperature) and DHT22 (capacitive humidity sensing digital temperature and humidity) sensors, with an OLED display and a small 5V 40mm fan to waft some air around prior to taking a reading. In reality the project no longer needs the DHT22 sensor, since the BME280 device provides better temperature and humidity measurements and adds air pressure readings. But it is included for historical reasons on my project. Feel free to omit it!
The project is very simple, as it just hooks up modules purchased from eBay. The modules cost less than £2 each at the time of writing and came from eBay or AliExpress.
Since this time, others have asked me for the design files, and so I have now shared them on GitHub: github.com/m1geo/ESP8266-Air-Quality-Sensor. The link contains everything you need to create your own! PCB files, source code and schematic.
If you follow the GitHub link above, you fill find two folders. These are explained in the subsequent sections below.
The code folder contains the Arduino code which runs on the ESP8266 device. You’ll need to source libraries for the SSD1306 OLED, the DHT22 (or cheaper DHT11), the Adafruit BME280 module, and the Adafruit CCS811 module. All these are available inside the Arduino IDE.
The MCU board used is a ESP8266 NodeMCU 1.0. This, and all the modules are easily sourced from the usual places (eBay, AliExpress, etc.), and are cheap. You’ll need to create a ThingSpeak account and then enter your API Key and channel number into the source code, as well as your WiFi name and passcode.
The board folder contains an example schematic design and basic PCB gerber files. You can use these gerber files to have a PCB made. All the cheap PCB houses will produce this board fine. The board files supplied are for the board shown above.
A key part of a GPS disciplined oscillator is the oscillator itself. During earlier testing I had used two Trimble 34310-T2 OCXO units and one seemed to perform much better than the other. I later read that this may be due to their aging, and that they gradually drift away from their optimal frequency – in this case, 10.000000 MHz – which in turn makes the phase-locked loop (PLL) struggle to converge the frequencies (and thus phase) of the loop. I also have a couple of IsoTemp 143-141 OCXOs, which I will measure, too.
The PLL compares the incoming phase of a reference frequency (here, derived from GPS timings) and the oscillator we’re ‘disciplining’. The loop can work in many ways, but, a common technique is to use digital signals from a phase-frequency detector though an analogue loop filter to generate some kind of voltage control voltage. This voltage is then fed back to the control pin of the oscillator, and the frequency changes accordingly. My post on using a Lattice FPGA development board to create a phase-frequency detector can be found in my Experiments with Phase-Frequency Detectors post.
My first task was to characterise the relationship between frequency and control voltage. For this task, I used a networked spectrum analyser in frequency counter mode and power supply, writing a simple Python3 script to twiddle the control voltage and record the corresponding frequency. I settled on taking an average of 5 readings at each voltage, with the control voltage swept at 100mV intervals through the specified VCO range. I repeated this for each of the oscillators I was hoping to use.
The IsoTemp 143-141 units have a much wider tuning range when compared to the Trimble 34310-T2 modules. In practice this means that the Trimble devices will have greater frequency resolution since they cover a smaller tuning range for the same control voltage range.
Another practical aside is that the IsoTemp 143-141 is a single-ovened oscillator whereas the Trimble 34310-T2 is a double-ovened module. This means that the Trimble unit is much less prone to external thermal variation. However, the IsoTemp unit as a larger tuning range, which will help the PLL keep in lock when there are large temperature variations.
The nominal 10 MHz frequency is found at the following tune voltage for each unit:
Approx. Tuning Voltage (V)
Measured Frequency (Hz)
It is clear from this that “34310-T2 New” is skewed to a higher voltage than the older Trimble unit.
I also observed the warmup time for each of the oscillator modules and the frequency of oscillation without any control voltage applied. Each unit was correctly orientated, supplied with the correct supply voltage as per the datasheet , and without any extra thermal insulation. The room temperature was 21C.
Approximate Oven Warmup Time (m)
Power Requirements (W)
Natural Frequency (Hz)
~4 (sharp cut off)
Max: 8.60 Norm: 2.08
10000000.88 (ΔF: 0.88 Hz)
~4 (sharp cut off)
Max: 8.62 Norm: 2.00
9999996.80 (ΔF: -3.20 Hz)
~5 (more gradual)
Max: 2.63 Norm: 1.03
9999999.01 (ΔF: -0.99 Hz)
Max: 2.61 Norm: 1.10
9999999.87 (ΔF: -0.13 Hz)
An example of the data captured during the warmup is given below for the Trimble units below:
It is clear to see both Trimble units behave similarly, taking a similar time to warm up at around 4 minutes. The same data was obtained for both IsoTemp modules:
143-141 #1 – I suspect the first point at -1250 Hz is caused by measurement error and can be disregarded. This brings the unit inline with how #2 (below) responds
The next thing I would like to measure is the phase noise of both of the oscillator units. I have been playing around with scripting the measurement of phase noise of a signal using a spectrum analyser in clever ways. I am able to produce the following graphs. It is important to note that these graphs are not accurate!
A snippet from the IsoTemp 143 datasheet shows these measurements to be considerably distant from the expected results – again confirmation that the above graphs are not accurate.
For now, these are the best I am capable of producing. The numerical values are not absolute, although they should be comparable to those measured on a real noise analyser. However, they’re valid for an optician style “better-or-worse” comparison. I think it is fair to draw the conclusion that the phase noise of the Trimble unit is “better” than that of the IsoTemp unit. It is also worth noting that the output from the IsoTemp unit measured +13.5dBm (square wave), whereas the Trimble unit output only +5.3dBm (sine wave). This extra power required a slightly higher minimum attenuation in order to keep the spectrum analyser happy.
I also took the opportunity to look at the harmonic content for both types of oscillator. First the Trimble unit:
As expected, the IsoTemp produced high levels of odd-harmonics, which is to be expected given the square-wave output:
It seems that both the Trimble and IsoTemp parts are viable in the circuit I have been thinking of. The Trimble has a much more gentle Hz/Volt curve and as a result a smaller adjustment tolerance. Conversely the IsoTemp parts are considerably lower power (6W less, in fact, at peak), and also run at half the power (1W vs 2W) when at temperature.
Click image to enlarge. For transformer winding information, see below.
V100 – First edition
V101 – Second edition: Output transformer cores reduced to 14.
V201 – Third edition: Power supply voltage is raised to 24V.
What you will need
13.8V/24V 40A (or higher) power supply. It is better to have the function of current‐limiting protection. 6 square-mm (or more) wires for connecting the power to the amplifier board.
A signal source that is capable of outputting a 7 or 14 MHz signal at 10W.
A 50Ω dummy load rated for 200W (must be able to withstand continuous dissipation).
A heatsink suitable to dissipate the power of Q1 and Q3. (Recommended size: no less than 150x100x60mm).
A multi-meter that includes a 10A scale.
An oscilloscope capable of at least 20 MHz (or a spectrum analyser).
Before you start soldering
Wind the inductor (L1) and transformers (T1 and T2) in accordance with the information further on in this page.
Bend the legs on Q1 and Q3 (TO247 package) upwards, see the illustration below. Do not mount it to the top side of the board. Do not shorten the leads.
Tap the holes for Q1 and Q3. Screw should be M3 (3mm screw). Clean the heatsink, and remove any metal chips to avoid a short circuit.
Start with smaller components first, working up towards larger components and finally plugs.
SMT parts can be easily soldered with an iron by adding a small amount of solder to one pad, and using tweezers to push the SMT part into the molten solder on the pad. Once cooled, add a small amount of solder to the other pads.
L1 and C5/C12 are not fitted at this stage.
Preparation for Powering
Check for any solder splashes, and poor or missing solder joints.
Check the DC power supply resistance to ground – no short circuits. If you have not fitted L1 yet, test from the other side of L1 pad.
Check the LM78L06 regulator output resistance to ground – no short circuits.
Check the bias-set variable resistors. Rotate them as shown in the following diagram. Be careful, to rotate them to the correct end-stop. If you get this wrong, you will destroy the IRFP250N power MOSFETs. You are aiming for an initial bias voltage of 0V.
Mount the input transformer secondary load resistor (10Ω, 3W).
Solder in Q1 and Q3 and affix to the heatsink. Flow solder on the PCB trace between the MOSFET and the output transformer. This increases the current capacity of the track. See below.
Mount L1 as shown below.
Set bias currents
The aim of this section is to adjust the bias current to 100mA for each of the two transistors. When making adjustments, you must act slowly, and with great care – the current will do nothing for much of the adjustment range and then rise sharply. The transistors must be bolted to a heatsink during adjustment.
Double-check that the variable resistors are ‘zeroed’ as described above, such that when power is initially applied, there is no bias voltage present.
Connect a current meter in series with the positive power supply cable of the amplifier. Apply power.
Adjust the upper MOSFET quiescent (static) current using the upper variable resistor to cause an increase in current of 100mA (0.1A).
As before, now adjust the quiescent current of the lower MOSFET to further increase the current another 100mA. (A total increase of 200mA between both transistors.)
Solder in choke inductor L1 and mica capacitor C5/C12 if you have not already done so – the bias adjustment is complete.
Connect a 50Ω dummy load to J2. The load must be capable of handling 200W.
Use an oscilloscope on a suitable range (or spectrum analyser with suitable attenuation) to monitor the signal at the load.
Connect the power supply and monitor the supply current for a moment. If the current is gradually increasing, the power must be cut immediately and check for suitable thermal connection between the power transistors Q1 and Q3 and the heatsink.
With the amplifier powered and no input, check the oscilloscope for signals. If there signals, immediately power off and debug the cause of self oscillation.
Input a small signal, gradually increasing the input signal power.
Observe the output waveform and the DC input current. In general, 100Vpp output across the output load corresponds to a power output of 25W into 50Ω. A load voltage of 141Vpp is 50W output, 180Vpp load voltage gives an output power of 80W, and 200Vpp at the load is a power output of 100W. Using an efficiency of 55% as an approximation, the expected DC power input can be calculated.
Check the temperature of the heatsink. If it is too hot to hold, then you will need to use a fan to cool the amplifier.
Check the output power is stable over time, and that there are no large fluctuations in output power for a fixed input power.
Use a flux remover to clean any solder flux residue and tidy any poor solder joints.
Mount the amplifier into a box or case with suitable TX/RX switching.
Accompany the amplifier with a suitable low-pass filter board.
Transformer & Coil Winding
In the following diagrams process, please note:
To avoid scraping the enamelled wire, use needle nose pliers to smooth the edge of the ferrites. Hole edges may be sharp.
A “turn” on the coil is regarded as wire passing through the centre.
Transformer T1 primary should be 6 turns (black lines). The secondary of T1 should be 2 turns (red lines). The turns ratio is important, since if there are too many turns, the voltage on the gates of the MOSFETs will exceed the breakdown voltage and the parts will be destroyed.
Transformer T2 primary should be 1 turn made from the two end PCBs and copper pipe. The secondary of T2 should be 5 turns of high temperature wire.
In version 201 of the kit, the number of ferrite rings is reduced from 16 to 14. You will also need 2 ferrites for winding L1 (see below).
L1 is a high frequency RFC choke. The 7-10 turns should be wound around two ferrite rings as used in T2. I chose 10 turns as this provides the largest choke inductance.
Around a year ago a colleague mentioned to me the Luftdaten project (en: air data project). It is a sort of citizen science project which measures and records particulate matter in the air. They also have a newer project concerning acoustic noise levels (build notes for this in German here), but I’ll be concentrating on particulate matter here. Often the sensors are combined to collect data on airborne particulate levels, acoustic noise, temperature, humidity and air pressure to name a few. The images below show 24h graphs for some of the measured parameters from various sensors around Europe.
I have long had a fondness for collecting data and the Luftdaten project has plenty! Their website features an interactive map of the world where they plot measurements taken.
The particulates detected include dust, dirt, soot, smoke, and liquid droplets emitted into the air which are small enough to be suspended in the atmosphere. Airborne particulates may be a complex mixture of organic and inorganic substances. The type of sensor used does not differentiate between the particle types, it just gives a measure of how many are present.
I purchased all of the parts cheaply from AliExpress (no affiliation). You’ll find the same parts on eBay, BangGood, etc., so use what you prefer.
The particulate matter sensor is a Nova SDS011 PM sensor (datasheet), which can be purchased for around £14.
You’ll probably also want a DHT22 temperature & humidity sensor (datasheet) which will cost around £2.
Finally a NodeMCU V3 is required. This is a module based on the ESP8622 WiFi chip, which includes a USB-UART interface, some voltage regulators, etc. In a later step, we’ll program this with the Luftdaten code.
A short length of plastic pipe can help to draw air into the SDS011 sensor. The datasheet for the SDS011 suggests an inside diameter of 6mm and outside diameter of 8mm.
The photo below shows my assembled parts! You’ll notice int he bottom right of the image that I have an Influencair V1.2 PCB. Influencair are a spin-off group of Luftdaten based in Belgium. CivicLabsBelgium produced PCBs for project participants to use and made the PCB Gerber Files available here. You can send these off for manufacture using any PCB service you like (for example, in no order JLCPCB, PCBWay, DirtyPCBs, Elecrow, and so on).
Build notes & Programming
The build process is explained thoroughly on the Luftdaten website under the construction manual page. As I won’t be able to do a better job of explaining this, I suggest you go ahead and read their documentation. Below shows the parts mounted on my Influencair V1.2 PCB. I used 3mm screws to hold everything together.
Programming, Configuration & Registering
The default programming proceedure requires setting up the ESP8622 in the Arduino software environment, but Piotr Dobrowolski has created a very useful tool: airrohr-firmware-flasher for the Luftdaten project. I used the Linux variant of the program the NodeMCU in one click, but Windows and macOS versions exist too! Be sure to find the “releases” button on GitHub to download the pre-compiled ready-to-use binaries!
With the NodeMCU connected to the PC with a USB cable, I selected “latest_en.bin” from the version list (en being English), and pressed Upload. As you can see from the figure below, it took just over 8 seconds and it was done!
Power cycling the board resulted in a WiFi device being created by the newly created sensor! I connected my mobile phone to “airRohr-11189671” and was greeted with the following screen.
I tapped on my house WiFi “SmartLAN”, entered my super-secret passkey and we were away! The device power cycled and was then visible from the flasher once again.
From this, I was able to see the sensor was assigned an IP address on my network, and double-clicking on the entry whisked me off to my default web browser viewing the sensor’s internal webpages.
There are many configuration options, but the defaults were suitable for my hardware configuration. There are options for OLED and LCD screens, extra/different sensors and many other configurations which are out of the scope of this article. However you can click “Current Data” to see the sensors latest measurement data. The image below was taken with the sensor indoors.
The final thing to do is to create an account on the Luftdaten project website so your sensor can contribute measurements. There are already a reasonable number of sensors in the UK contributing data to Luftdaten. You can create your account and submit your sensor data here: https://meine.luftdaten.info
I have positioned my sensor in the garden shed with a short section of plastic pipe poking outside of the shed where the wind blows. I live near a busy roundabout and buy a petrol filling station, so it will be interesting to compare my measurements with other local sensor readings.
Over the past few evenings, I have been experimenting with phase-frequency detectors. I have an upcoming project that requires the use of one, and, I figured I’d refresh my memory on them. I ended up using my Lattice MachXO2 breakout board as the development platform.
The first step was to divide a 10 MHz crystal oscillator down to 10 kHz. That was easily done with a counter, counting from 0 to 499, and then resetting to 0. Every reset would simultaneously toggle an output bit, with the net result being a square-wave clock on the output bit, periodic every 1000 cycles of the input. A divide by 1000 counter.
Next was to understand the Phase-Frequency Detector (PFD). This is commonly referred to as a Type 2 detector, since it detects not only phase difference but frequency difference. This means that the PLL will only ever lock to the fundamental frequency, and not harmonics. It also means that when the loop is unlocked, the PFD knows which way to drive the VCO to regain lock. A Type 1 detector only uses phase information, and so drives the oscillator in the direction of the phase difference until the loop locks – as a result, Type 2 detectors lock quicker.
The Type 2 detector has two outputs, up and down, which pulse for the required direction with a duty cycle proportional to the phase difference.
I spent a few days designing and simulating the PFD using the Aldec Active-HDL simulator to confirm that my circuit did indeed perform as expected:
I then added a simple lock detector, which set a locked signal high if the phases were in lock for the past 10 cycles as a proof of concept. In reality, a much longer observation window will be used. It is possible to see the lock signal becomes high after 10 cycles.
The final stage of this project snippet was to test on real hardware. The Verilog code was pushed through synthesis, place and route, and a configuration file for the Lattice FPGA generated. This was then programmed into the board, and the board taken to the lab – you can see all the main parts of the setup in the photo below.
Below, you can see the scope traces from the probes in the lab bench photo. The yellow trace shows the 10 MHz VCO frequency from the Trimble 34310-T2 OCXO. The green trace is a debug from the FPGA output showing the 10 MHz signal divided down 10 kHz. The blue trace is GPS locked 10 kHz reference output. Finally, the purple is phase detector output, here from the ‘down’ output of the detector since we see that the divided VCO output (green) slightly leads the GPS reference (blue). The ‘up’ output is at logic-0 throughout.
The next part of the project was to create the charge pump circuit which converts the ‘up’ and ‘down’ pulsed signals into an analogue control voltage for the VCO.
The parts for the charge pump took a few days to arrive, and while waiting I contrived the following circuit. Since the OCXO generates a 6V reference voltage for use with the VCO input (actually 5.4V in my case), it seemed wise to use that. Some crude experiments had lead me to a tune voltage of around 3.5V. The circuit uses a PNP transistor (Q1) to put pulses of energy into the filter network via R1. Similarly, it uses an NPN transistor (Q2) to remove pulses of energy from the filter via R1. R5 and R6 serve as a current limit in case both Q1 and Q2 are both powered. A further NPN transistor (Q3) acts as a voltage interface between the ~6V on the base of Q1 and the FPGA IO at 3V3 maximum. Only the values of components in the filter section are critical (R1, R7, C1, C2, C3); the others were chosen from what I had laying around.
The loop filter was tested and tweaked in LTspice using the values above. The loop filter has around 62 dB of attenuation at 10 kHz (our reference [and thus up/down pulse] frequency).
A look in the time domain shows we can expect about 1.5mVp-p at 10 kHz from visual estimation. An output of 1.5mVp-p is approximately 0.53 mVrms, which gives us around -66 dBV of attenuation (similar to we saw above). The curve of the waveform is the DC levels settling out at the start of the simulation.
And finally the steady-state ripple; for a 1V square wave (0V-1V) input, a 1.23 mV ripple exists at the output (455.719-454.486).
The penultimate step was to build the circuit and confirm it worked in real life. I made the charge pump on a scrap of strip-board, with pin headers for the main signals. On the left, +6V VCO reference input, the up and down signals from the FPGA, and on the right, ground and the VCO tuning input. The circuit is pretty much laid out as per the schematic, with the addition of an LED.
The final step was to watch the PLL lock on the scope! In the short video clip below, you can see the yellow trace is the 10 kHz reference frequency from the GPS. The green trace is the 10 MHz from the VCO. The blue trace is the 10 MHz divided down to 10 kHz. The purple trace is the VCO tune voltage – the output of the charge pump.
Following on from my Receiving Es’Hail-2 GeoSat article, the obvious next thing to write something about transmitting. I created a draft of this article, but it seemed to mix heavily with the specifics of my station and was less generic. So I felt it better to create this page first, detailing my 2.4 GHz transmitting station, which I have just cobbled together in the time since writing the original article.
About the LimeSDR
Let me first start by saying that I’ll be using a LimeSDR USB which has a continuous frequency range of 100 kHz to 3.8 GHz. Clearly acceptable for our requirements of 2.4 GHz. The bandwidth the SDR can support is staggering 61.44 MHz. The SDR is based around an Altera Cyclone IV FPGA with 256 MB of DDR2 RAM and a Rakon RPT7050A reference clock at 30.72 MHz. It has 6 inputs and 4 outputs, and boasts a CW transmitter power of up to +10 dBm (10 mW).
Clearly the LimeSDR is nothing without some fancy software to drive it; and there are plenty of good offerings. I decided to opt for SDRConsole V3 by Simon Brown G4ELI, which at the time of writing was version 3.0.5 (Feb 2019).
SDRConsole with the LimeSDR
The process of setting the LimeSDR up was easy. I had to collect the LimeSDR drivers for Windows and install those. That process is nicely described on the Miriad RF LimeSDR USB Driver Install page, but the crux of it is: (a) download the drivers from their GitHub page [direct link to master here], (b) use Device Manager to find the LimeSDR, and replace the driver with that in the zip.
Once the driver is installed, you’re ready to set up SDRConsole. When the program starts, it will state that you do not have any radios defined, and give you the opportunity to define one. Simply select “Search” and then “LimeSDR” and it will find your radio. Accept the changes you’ve made.
Once you have defined your radio, you should select it from the box that pops up following the definition (and subsequently each time you start SDRConsole). Select the LimeSDR you have just defined, make sure you select a bandwidth that supports transmitting “(TX)” in the “Bandwidth” option, and “Start” will become clickable in the bottom left. You should see the console spring to life.
From the Receiving Es’Hail-2 GeoSat article, you will recall that the narrowband transponder input is 2400.050 MHz to 2400.300 MHz. Taking the middle of this band to be 2400.175 MHz. The screenshot below shows the radio on this frequency. I have put boxes and tails on some of the important settings.
From the figure above, you can see the receive frequency on the top left box, with the transmit frequency on the top right box. The “Sync RX” options for frequency and mode show that the TX frequency and more are locked to that of the receiver.
The “Drive” control on the top right box controls the RF power on the output and we shall try to characterise that later. Just above it is a “TX” button which causes the transmitter system to be engaged, and the receiver to be muted.
Finally, in the bottom left there are controls which select which of the LimeSDR’s 6 receive sockets and 4 transmit sockets are in use.
LimeSDR Output Power
The next thing to do is measure the LimeSDR’s TX power on the frequency of interest: 2400.175 MHz, the centre of the NB transponder uplink. A CW signal is used to generate a constant power level.
To achieve this, I have used a known calibrated R&S NRP18A, which will measure power from 100 pW to 200 mW. We are expecting a maximum of 10 mW, so we should be easily safe to use this.
The drive level is a percentage, ranging from 0 to 100. My basic plan was to take a reading every 10%, and if there is a large non-linearity, I’ll take further measurements in those areas. At this point, the LimeSDR is only powered via the USB bus, and has no external power source. With drive levels below 50%, the reading was noisy, so I concentrated on the linear part of the curve.
Drive Level (%)
EDUP 8W WiFi Power Amplifier
I purchased an EDUP 8W WiFi power amplifier for £35 in February 2019 for use with the LimeSDR and Es’Hail-2 uplink. There had been talk on Twitter of these amplifiers being suitable, so I decided to give one a go.
Without getting into details, the amplifier has a system which detects if the WiFi radio is transmitting, and enables the PA’s TX path, or if the radio is receiving, and enables a separate RX path. This is exactly like “VOX” on an amateur radio amplifier. However, since the packets are very short on WiFi, with guard times in the order of 400 nanoseconds, the hang time is very short, and thus not suitable for SSB. We thus need to modify this behaviour, so that the amplifier is in TX all of the time, or, even better, when the LimeSDR is transmitting – perhaps using a GPIO pin to drive the amplifier – but that’s unimportant for now.
PTT Modification: EDUP 8W Amplifier
Here’s a snap of the insides of the amplifier. It’s clear that there is some room for improvement in gain with this amplifier, such as removing the (likely lossy) TX/RX switching, etc., as we don’t need these parts. However, for now, we’ll leave it. Swapping the RF-OUT RP-SMA connector for a standard SMA connector is probably a wise decision for the radio amateur.
The mod, in its basic form, is just a solder bridge across pins 4 (VS) and 5 (+IN2) of the ADA4851-4 quad rail-to-rail op-amp on the opposite corner of the board to the DC power socket. The mod makes it appear that the diode detector is detecting a huge signal (5.787 V, the supply rail). The reference voltage (-IN2) is set at 0.189 V. When the voltage at +IN2 exceeds -IN2, the device enters transmit mode.
If the amplifier is in receive mode, the status LED illuminates red. Conversely, if the amplifier is in transmit mode, the status LED illuminates green.
Measurements with the EDUP Amplifier
In terms of the experiment, the EDUP amplifier input is connected with an SMA barrel to the LimeSDR output, and the EDUP amplifier output is connected (via RP-SMA on the included short RG174 patch cable) to a 20 dB attenuator which in turn connects to the power meter.
Using this configuration, I do not expect that the output power will be come very high, since their is not enough drive level from the LimeSDR at −1.62 dBm. I see about 13 dB of gain, with an output of around +11dB (~10mW) of RF output power.
At this point the EDUP amplifier is drive limited. Working backwards, to achieve a theoretical +39 dBm (8 W) output, we would need to input +26 dBm (0.4 W) input.
The amplifier draws around 170 mA in receive, and about 380 mA in transmit with no RF (just quiescent bias).
Clearly connecting the EDUP directly to the LimeSDR does not provide enough power. There is a need for some more gain. Looking around what options are available cheaply, you quickly come across some options.
The Qorvo SPF5189Z has a small signal gain of 11.9 dB at 2.2 GHz (the closest listed frequency to the required 2.4 GHz) and an output P1dB of 22.7 dBm. This output power is close to the 26 dBm input required for the EDUP, although it is not recommended to run the system close to the 1 dB compression point (P1dB). With the SPF5189Z in line, we see approximately 20 dBm output (100 mW) from the EDUP.
Adding another SPF5189Z following the first gives around 30 dBm (1 W). Adding another 10 dB of gain early on in the drive chain will get us closer to the goal of 8 W output, but the system was becoming unwieldy and would probably not be suitable for use on air without inter-stage filtering as the parts used are wide-band.
Analog Devices CN0417 Evaluation Board
Another part brought to my attention by @Manawyrm on Twitter is the Analog Devices CN0417 evaluation board (EVAL-CN0417-EBZ). It is a USB Powered 2.4 GHz RF Power Amplifier, and can be purchased for around £26 ($35 USD).
I have not used this part yet, but I know that others have with some success. The EVAL-CN0417-EBZ is based on the ADL5606 is a broadband, two-stage, 1 W RF driver amplifier which operates over a frequency range of 1800 MHz to 2700 MHz.
With some tidying of the interconnects, I was able to get to 32.98 dBm (1.95 W). More filtering will be required before letting this loose on air.
Getting it on air!
At this point I was pretty keen to see if I could make it to the Es’Hail-2 satellite. The day I tried, 2 March 2019, followed an announcement by AMSAT that the narrowband transponder gain had been reduced, so I was keen to
Balancing the amplifier and patch antenna on the back of a large reclining chair in the garden, I was able to align the patch antenna to the satellite’s location. Setting the TX frequency of the LimeSDR to the centre of the transponder band (2400.175 MHz), with an output power of around 1W of I was able to hear a single tone through the Es’Hail-2 narrowband transponder, I quickly added a CW paddle and was able to confirm my signal by sending “M1GEO TEST” several times, listening via the BATC NB WebSDR as discussed in my Receiving Es’Hail-2 GeoSat article.
First of all, let me say that I am in no way an expert with regard to satellites, microwave operations, or anything else. This is meant to be more of a crude beginners guide. Experts will probably cringe – that’s fine!
A little bit about Es’Hail-2
Es’Hail-2 (QO-100) is a geostationary satellite at 25.5° East which carries transponders (devices for receiving and re-transmitting signals) usable by radio amateurs. These two transponders are the first amateur radio transponders to be put into geostationary orbit and are expected to link radio amateurs from Brazil to Thailand.
Es’hail-2 will carry two such transponders, operating from the 2400 MHz band into the 10450 MHz band. A 250 kHz bandwidth linear transponder intended for conventional analogue operations (SSB, CW, etc.) and an 8 MHz bandwidth transponder for experimental digital modulation schemes and DVB amateur television. The operating guide provided by AMSAT-DL asks that users refrain from using FM on the narrowband transponder.
With these linear transponders, any signal that the satellite receives in the input frequency range will be linearly translated to the output frequency range. As a signal power increases, so will the signal at the output; as the signal frequency increases, so will the output signal. And so it goes.
Following Noel G8GTZ‘s talk on Es’Hail-2 at the RSGB Convention 2018, I started collecting the parts required to put together a receive system. At the time of Noel’s talk, I remember thinking how he’d made the process sound simple. It wasn’t until I started playing with the setup that I actually found how simple the process was. More on this later…
If you have used a WebSDR online before, then the narrowband SDR will be familiar to you. The wideband monitor will probably not be familiar, but it is very useful if you are looking to experiment with digital amateur television (DATV) transmissions – more on this later. Since we’re interested in doing the receiving ourselves, we just note is that such web SDRs and monitors are a fantastically useful resource. There are of course many other similar resources.
Ultimately, this is the page that I wish I had found when I started out on this path a couple of days ago… You are welcome to contact me if you spot errors, etc.
Antenna talk: Dishes, LNBs & Feeder
A satellite dish is a type of parabolic antenna that is highly directive and therefore has a high gain. In simple terms, the dish collects incoming radio-waves over a large area and focuses them towards a central point. This point is usually the front of an low-noise block (LNB). The larger the dish diameter the more gain the dish will have – but – the sharper the beam, and so the more critical the alignment. Common dish sizes for receiving Es’Hail-2 are in the range 80 centimetres to 1.2 metres diameter. My dish, pictured below, is 1.2 metres diameter. Because the dish is highly directive (i.e., it’s beam is very sharp, like a laser pointer is with light), it requires careful adjustment.
Where do I aim the dish?
The AMSAT-UK Es’Hail-2 website tells us that the satellite is at 25.5° East. This means that the satellite is at 25.5° East of the meridian line. You will need to find the azimuth and elevation, i.e., the direction and tilt of the dish, yourself, since this depends on your longitude (distance from the meridian line) and latitude (distance from the equator). I have used the SatLex tool (below image), but many other online tools exist (DishPointer, SatSig) to help you. When using such tools, if they don’t have Es’Hail-2 in their index, BADR4/5/6 or EutelSat25B are close enough for now.
As you can see, the top half of the above image shows you a view due south, and the satellite location in your field of view. You’ll see the elevation angle of 25.88°, which I’ve rounded to 25.9°. You’ll have to tweak a little for maximum signal, regardless of how well you do this step, but it really helps to get the alignment as good as you can before you start. You will also see the ‘true’ azimuth angle, here 150.50°, which is the angle your dish should point to, and corresponds to a simple calculation between your longitude, the satellite’s position in space, and the meridian line.
The only other point to note in the above figure is the “LNB Tilt” of −17.4° (note, minus). Without proper knowledge, it is tricky to set the LNB skew without the LNB receiving a signal, so for now, lets press on with getting the dish mounted. We’ll come back to LNBs later.
Getting the dish pointed at the satellite is, without doubt, the hardest part of the entire undertaking. On the right, you see Chris G8OCV helping to align the dish holding a spirit level. Since it is my policy to only ever do antenna work in the dark, on a cold evening, preferably in rain, he’s very enthusiastic! But he always helps!
For my QTH in Norfolk UK, the elevation worked out to be 25.9°. This is the elevation, i.e., the angle of the dish’s beam to the horizon. The dish’s beam points upwards 25.9°. We also know the azimuth of the satellite is 25.5° East, which corresponds to a true heading of 150.5°. These are the two coordinates we need to know to aim the dish.
Once the dish support pole was absolutely vertical, the elevation adjustment on the satellite dish can be done using the angle markers on the dish bracket. The azimuth 25.5° East is translated to 150.5° as taken from the satellite pointer website. I used a compass to initially align the dish. Some warning/disclaimer about the difference between ‘true’ North and ‘magnetic’ North belongs here. It didn’t cause me any trouble, but your experiences may be different. If you’re using a temporary post in the ground/umbrella stand, make sure it is heavy enough not to blow around in the wind. Mine wasn’t until we added some concrete weights.
Some words on LNBs
This section may sound a little scary, but I have tried to explain some of what is going on inside the LNB – don’t be put off! The low-noise block (LNB) is something that sits at the focus point of many commercial satellite dishes. The dish focuses the radio signals to a point – usually into the LNB. The LNB has a low noise amplifier to increase the level of the weak signals received by the dish. Since satellite downlink frequencies are well over 10 GHz, that would require some very fancy coax to get the signal into your house. So the LNB also mixes the received signal with a local oscillator (LO) frequency that it generates itself, in order to reduce the frequency of the received signal – this LO frequency is switchable to allow different frequency ranges to be received. Finally, the LNB has a polarisation switch, changing between horizontal and vertical polarisation. This is, of course, a gross simplification of what is going on, but is enough for now.
Without going into too much detail beyond what feels strictly necessary, the switching of LO frequency and polarisation are controlled by signals fed to the LNB from the shack-end of the coax. The LO frequency defaults to 9.75 GHz, but is switched to 10.6 GHz when the LNB receives a 22 kHz tone on the feeder. Since the LO is outside in the cold, the frequency reference is prone to thermal drift. You are strongly recommended to find an LNB that has it’s LO frequencies derived from a phase locked loop (PLL) as opposed to an dielectric resonator oscillator (DRO). A more advanced configuration is to purchase a dual-port LNB, and use one port for the feeder return to the shack, and ‘hack’ the LNB such that the second port serves to accept a frequency reference that can be provided. You do not need to do this, an off the shelf LNB will work, but a PLL variant is strongly recommended. If you hear very garbled or warbling sounding sideband or it is unresolvable altogether, it may be that your LNB is using a DRO as the frequency reference.
The polarisation is either vertical when the LNB is powered at 12V DC, or horizontal when powered at 18V DC. Often hams will only use the 9.75 GHz LO frequency, since then no 22 kHz tone is required. Some ham’s rotate the LNB physically to change polarisation, while others set the LNB between vertical and horizontal, thus receiving both simultaneously but with losses. I opted for supplying either 12V or 18V to the LNB and switching polarisation electronically from inside the shack. I have not, as yet, needed to change the LO frequency.
Everything on this page was done with a Goobay 67269 Single Universal LNB. There is lots and lots of information on LNBs if you search around online. The BATC has some information on LNBs, as does UHF-SatCom Ku Band PLL LNB’s page. The key point is get a PLL based LNB, as recommended by others. Some of the recommended ones carry a heavy price tag as at the time of writing there is a huge demand, and relatively small supply. A few years ago I bought an Octagon PLL-based LNB for less than £10 delivered; now they cost over £130! I would have used that, but it was in boxes packed for moving! Unfortunately for radio hams, sellers have realised that PLL based LNBs are more valuable to us, and so their price is gradually increasing.
I had a bit of discussion with friends online about what feeders were being used. Most people have, I guess obviously, opted for satellite coax. This is RG6 coax, and has a solid centre pin suitable for use in F-connectors. This is also available cheaply on eBay, often kitted with ten F-connectors. I paid around £9 for 50 metres. In an early instance, I got away with using RG213 (which is 50 Ohm, not 75 Ohm) and some F-connector adaptors, but the LNB gain makes up for a lot of small misdemeanours. RG6 satellite coax is the way to go! The image below shows my mash of connectors and adapters to overcome my lack of a solid centred feeder such as required by F-connectors.
Connecting it all up
Terminate the LNB end of the feeder with an F-connector, and seal it up to keep the rain out. Mount the LNB in the dish’s LNB mount. You need to be able to twist the LNB to adjust the LNB tilt, but don’t want anything to move of it’s own accord.
The next obstacle is to power the LNB. I did this by hacking about with an RTL-SDR dongle and building in a bias tee inside – details in the “LNB Bias inside an RTL-SDR Dongle” section, below. If you have a bias tee already, you may be able to use that provided it is suitable for use at around 740 MHz. Power the LNB with 12V to select vertical polarisation with 9.75 GHz LO, ideal for the narrowband transponder of Es’Hail-2.
The centre of the Es’Hail-2 narrowband transverter downlink is 10.489675 GHz. If we use the 9.75 GHz LO, we expect to see an intermediate frequency (IF) of 10.489675 − 9.75 = 0.739675 GHz = 739.675 MHz.
We are expecting to see signals in the 250 kHz bandwidth centred on 739.675 MHz. On an RTL-SDR dongle waterfall, you should see an increase in the noise floor between when the LNB is powered and when it is unpowered. If you do not, check your wiring. My LNB draws around 100 mA.
Tweaking the dish
As we alluded to earlier on in the dish section, we need to tweak the dish’s alignment. But to do this, we need to be receiving signals, and then take an opticians approach, of ‘better or worse’ with very tiny adjustments each time.
If you have followed these notes so far, you will have a receiver, or spectrum analyser or similar centred on 739.675 MHz, with your LNB in horizontal polarisation and a 9.75 GHz LO frequency.
The Es’Hail-2 narrowband transponder has will appear as a wide lump of raised noise floor, similar to what you see below. The raised bump is the transponder bandwidth, and the two signals present are the upper and lower band markers. They send CW and binary data, too. The transponder bandplan is outside the scope of these notes, but you can find it on the AMSAT-UK Es’Hail-2 website. It roughly follows the usual bandplans for all-modes, with CW at the lower end, then digital modes, then SSB at the top.
When tweaking the satellite dish, adjust for the largest (highest) bump above the noise floor. You equally want the two beacons to be high above the transponder noise floor. Very slowly, in small steps, adjust the azimuth (rotation) of the dish stopping at the point that maximises the signal. Then adjust the elevation (tilt) of the dish to further maximise the signal. If you do not see anything on the waterfall, then you may need to make larger sweeps of the dish to find the satellite in the first place. This is where your care previously helps. As mentioned before, this is the trickiest step.
Once you have a good signal-to-noise (high bump above the noise with large beacon signals), you should adjust the LNB within the dish mount.
If you can electrically switch polarisation to horizontal (by feeding the LNB with 18V) then you should do this. With the antenna now ‘cross-polarised’ to the narrowband transverter, rotate the LNB to receive the minimum signal you can. What you are doing is looking for the maximum amount of cross-polarisation. It is easier to adjust for the null than for the signal itself, and you will achieve a better adjustment this way. If you cannot switch the LNB polarisation electronically, then you should adjust for the maximum signal with rotating. Rotate the LNB towards the LNB tilt angle (for me this was −17.4°), going past that angle to ensure you find the minimum or maximum as appropriate.
You may also like to adjust your LNB backward and forward in the mount to try and find the optimum focal point, although this point is usually specified pretty clearly on the dish’s paperwork. Either way, with the LNB now in the correct polarisation (12V feed, vertical for the NB transponder), move the LNB backd and forth looking for the largest signal.
These steps may be difficult to do, as your body will cast an ‘shadow’ on the dish – either hide out of the way as you adjust, or, tweak and step back. You get the idea.
Once you’ve done that, bolt everything up tight and you’re good to go!
Receiving Narrrowband Modes
If we zoom in a little from the spectrum display we saw when aligning the dish; such that the markers are now on the outsides of the waterfall, we see more of a ‘band view’, and the transponder frequency response looks relatively flat. This screen-grab was also taken with several signals visible.
As with any other SDR you may have used, clicking on the signals will allow you to demodulate them.
Below, OH1ZAA calling CQ:
Receiving Digital Video Amateur TV
The Es’Hail-2’s wideband DVB-S2 beacon on 10.492,500 GHz is always transmitting video. This beacon was my very first reception of DATV. I am still finding out about this, so my experience here is minimal, but perhaps it is of some use. You should defer to the BATC’s Receiving DATV guide for detailed information.
Digital television has many different standards, as you might expect. The key factors are the modulation type (how data is encoded onto the RF carrier), sample rate (in samples per second), picture mode (DVB-S, DVB-S2, etc) and FEC (or forward error-correction). As well as this, streams have a PID (packet identifier) which identifies the program – all we need to do is set this correctly. The standard is set out in the ETSI EN300-468 specification if you want to learn more. You don’t need to.
Most amateur signals vary in the above listed parameters to what is used commercially. While a standard digital TV multiplex may be 8 MHz wide, radio amateurs typically use much smaller bandwidths, and what is called Reduced Bandwidth TV (RB-TV). Commercial receivers usually do not support these configurations, so a special receiver (the MiniTiouner by F6DZP and others) was developed from modules and allows fine control over all of the parameters associated with digital video transmission.
This remainder of this section concentrates on the MiniTiouner. However, there are two SDR based options available. I cannot offer any words on these, except to highlight their existence:
Lean SDR: A lightweight, portable software-defined radio (C++)
SDRAngel: SDR Rx/Tx software for Airspy, Airspy HF+, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube (C/C++)
The MiniTiouner by F6DZP and others is a USB tuner designed specifically for Amateur TV use which natively covers 143 MHz to 2450 MHz and is suitable to receive Es’Hail-2 and a number of other amateur bands with no modifications or additional up-converter. It is available from the BATC and other sources. See the BATC MiniTioune page for more details.
As a short note, the term ‘MiniTiouner’ with an ‘R’ at the end refers to the hardware PCB; the term ‘MiniTioune’ (no ‘R’) refers to the software.
Most amateur TV transmissions are made using Reduced Bandwidth DATV (RB-TV) with a bandwidth below 1 MHz. To date, 90% of the DATV transmissions on Es’Hail-2 (QO-100) have used RB-TV. The MiniTiouner comes as a kit from BATC, and took me roughly an hour to build. Follow the build notes on the BATC website.
I then had to register on the VivaDATV forum to obtain F6DZP’s MiniTioune software (post link here) – I’m not sure why I had to register, but, I did. At the time of writing, this is software version 0.8s. For instructions on how to install this, visit the BATC’s MiniTiouner Software page. Don’t forget to install the accompanying USRC and LAVFilters packages, too. I did; you get no video! 🙁
An issue that I faced is that the USB connection between my computer would drop randomly causing the MiniTioune software to crash. This is supposedly solved by using a Lindy Cromo Lindy cable USB 2.0 type A/mini-B 1m long, but after spending £10, the issue still persists.
Before you fire up the software, open the minitioune.ini file and edit the following fields: OM_ID (callsign), ForumPassword (forum password), Locator (QRA locator), Ville (location) and anything else you see fit. You’ll probably want to come back to this file from time-to-time.
The ‘MiniTioune’ Software
When the software first starts, you’ll see something like the image below – just wait a few seconds:
After a few seconds, you will see the main MiniTioune program window:
My advice would be to make sure you can receive the beacon before you move on to anything else, since the beacon has known parameters.
Receiving the Es’Hail-2 DVB Beacon
The first thing to note is that the wideband transponder is horizontally polarised, so you will need to supply 18V to your LNB to switch polarisation, or, rotate the LNB 90° in either direction. The MiniTiouner hardware has two jumpers which allow you to feed the input DC supply voltage into the LNB F-connectors via the Serit module. These are labelled LNB_A1 and LNB_A2 on the PCB, and can be found between by the DC input power jack. Then the whole MiniTiouner receiver is powered from either 12V or 18V as required.
Next look to the top-left of the main MiniTioune window; you’ll see a place to enter the sample rate (SR) and a frequency (in kHz). The beacon frequency is centred on 10.492,500 GHz, and transmits DVB-S2 with 2 MS/s QPSK modulation using 2/3 FEC forward error correction.
If we enter 10492500 kHz into the frequency box, we also need to tell the MiniTioune software to accommodate for the frequency translation the LNB is performing. It is enough to say that the LNB provides a frequency offset of −9.75 GHz, so we indicate −9750000 kHz (note, minuses).
We’re told the sample rate is 2 MS/s, so we can enter this as 2000 KS/s in the SR box at the top left. Make sure you have selected either AUTO or DVB-S2 for the mode, and that you have the checkbox for 2/3 FEC enabled.
Looking at the BATC’s Wideband Transponder Monitor, it is possible to see the beacon transmission on the left at 10.492,500 GHz. You may also see other transmissions besides the beacons and we’ll look at that those in the next section.
As you enter the sample-rate and frequency, you should start to see some of the indicators at the bottom left of the MiniTioune window turn from red to green. Once the Viterbi decoder error goes to 0% (bottom centre-right), you should see video and hear sound! If you do not, then toggle the Auto PID button in the top right. This makes MiniTioune decode the incoming stream to find the video and audio transport streams and understand their codecs.
The clip below is a short section of the Es’Hail-2 DATV beacon:
Receiving the Es’Hail-2 DVB Beacon
The process of receiving an amateur transmission is very similar to receiving the beacon. The only difference is that you may not know the properties of the signal being transmitted. In this case, I have found that using the BATC’s Wideband Transponder Monitor to look at the signals can be very useful to help guess. You can see from the spectrum that the signal is much narrower than the beacon, so we can take a guess at the sample rate by knowing a few commonly used values. 125, 333, and 500 kS/s seem to be common, while some use 1000 kS/s in the simplex DATV window.
If you leave the common FEC options ticked and use AUTO mode selection, the MiniTioune software will magically recognise things after a few seconds, if you have chosen the right combination of options. There is, of course, another way:
Using a mixture of trial and error, as well as watching others talk in the chat, I have been able to observe a considerable amount of amateur test transmissions via Es’Hail-2.
LNB Bias inside an RTL-SDR Dongle
In order to tweak the dish alignment and also to receive narrowband transponder signals, I needed to power the LNB for use with an RTL-SDR Dongle. I had heard that some dongles have a bias tee included, and I was hoping to repurpose some of this since clearly it would only supply 5V.
I opened the New Gen RTL2832 SDR I had to look inside and noticed a DC bypass inductor to ground for static discharge, with capacitors leading to a DC blocking capacitor, limiting diodes and on into the receiver.
By standing the DC bypass inductor on end, and adding a decoupling capacitor on the now unused pad, I could create a very crude bias tee. I used a 1000pF and a 47nF capacitor to create some further blocking and add mechanical stability, and then I soldered on two power wires.
It doesn’t look pretty at all, but it does work, and is small!