I had a power problem with the Taranis external module bay, it took a while, but it was fixed at last. I want to share this adventure of troubleshooting as it was quite a great learning experience. And it might actually help somebody in the future, who knows.
I couldn’t have done this without the help from Andrey Mironov (GitHub Profile), huge thank you to the man!
Are you still wondering what to buy, X9D-Plus, QX7 or X-Lite? Here’s my 2 cents.
External Modules stopped working in my Taranis X9D Plus radio transmitter. It wasn’t powering on anymore even when I have enabled external module in model setup. Same result on both R9M and Crossfire. These modules were tested working fine on a different radio.
The first thing I checked was the voltage to the module, it’s the 3rd pin from the top in the module bay. And I was getting 0V regardless the External Module setting.
So the first thing I did was taking the Taranis apart, and see where that external module power pin is connected to. You can see, it’s the output of two FET’s, which is controlled by a signal from a GPIO (a pin on the STM32F2 micro controller).
When the GPIO gives a low signal, the output should be 0V. When GPIO gives a high signal, the FET’s should supply a voltage to power the External module. First thought was that these transistors might have failed, but let’s look deeper.
Here is a similar schematic how this circuit works.
According to the GPIO assignment in OpenTX source code, we were able to trace down which pin it is in the MCU. PD08 is responsible for turning the external module power on and off.
So here is the STM32F2 processor in the Taranis, the brain of our Taranis, and where OpenTX runs on 🙂
According to the STM32F2 pinout diagram, we were able to find out where PD8 is.
So next, we checked if this GPIO pin is actually working: goes low when external module is disabled, and goes high when it’s enabled. Unfortunately, this pin is always 0V regardless the setting, and also has continuity to ground. It’s possible that the pin has an internal short to ground.
In summary, the pin that controls the external module power is dead (somehow).
Andrey suggested we should assign the external module power function to a spare pin in OpenTX code, then he could compile the custom OpenTX firmware for me.
There are quite a few spare pins we could use on the STM32F2. In the end we decided to go with PA14 because it’s right at the corner which should make soldering much easier. Initially it was used for debugging, but I don’t really use that personally so that isn’t a problem to remap it.
Only two lines need to be changed in the OpenTX code. From:
#define EXTMODULE_PWR_GPIO GPIOD #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PD.08
#define EXTMODULE_PWR_GPIO GPIOA #define EXTMODULE_PWR_GPIO_PIN GPIO_Pin_14 // PA.14, SWDP-CLCK
We spent a long time trying to find a good place to cut the copper trace from GPIO PD08. But because the trace vanishes in a via hole, and there is a screen glued to other side of the board, we didn’t have much success. In the end I just cut it right next to the MCU leg. It was quite a challenge because the traces are less than 1mm wide…
Then I scraped away the solder mask next to the cut, expose the copper trace that is connected to the FET’s, and soldered it to the new GPIO, PD14.
The traces are so thin, even a 30AWG wire looks huge LOL 😀
Finally, I flashed the custom OpenTX firmware from Andrey, and voila! External module works again!
Further Reading: How to flash OpenTX firmware.