The Pixie QRPp (very low power, less than 1W output) transceiver is a very popular DIY project among hams as it is very easy to build, test and operate from the electronic standpoint, yet able to perform some actual limited communications (QSO) over the air.
Although really small power can be enough to sustain communications over great distances and therefore not being a per se limiting factor there are other factors in the basic implementation which makes difficult to carry communications except on very favorable conditions.
An explanation of how the transceiver work can be found here.
This project starts with a working Pixie transceiver (a cheap kit bought at eBay or other sellers) and to integrate it with a Raspberry Pi to provide the signal generation and other functionality.
Instead of a crystal based signal generation the Raspberry Pi itself can be used by meas of the librpitx library (by Evariste Courjaud F5OEO acting as a DDS, which is thus the technical core of the project. A carrier generation function has been modelled largely using the tune.cpp program available at the package also by Evariste Courjaud F5OEO. Some modifications has been introduced to allow the carrier frequency to be varied during the operation.
The rest of the code deals mostly with the user interface and operating features, among others:
-
Receive over an entire ham radio band.
-
Dual VFO setup, split mode, controllable step.
-
RIT operation.
-
Frequency can be shift during transmission to implement CW.
-
Transmission controlled by processor.
-
Display LCD & Rotary Encoder.
-
Built-in iambic keyer, with variable speed.
-
Variable DDS drive level.
-
Capable of operating other digital modes, specially FT8 and WSPR, with very small modifications.
-
Full or Partial Break-In in transmit.
-
Open source firmware allow the adaptation to other simple DIY QRP/QRPp projects.
-
With some limitations able to be used in linear modes (USB).
This is a pure, non-for-profit, project being performed in the pure ham radio spirit of experimentation, learning and sharing. This project is original in conception and has a significant amount of code developed by me, it does also being built up on top of a giant effort of others to develop the base platform and libraries used. Therefore this code should not be used outside the limits of the license provided and in particular for uses other than ham radio or similar experimental purposes. No fit for any purpose is claimed nor guaranteed, use it at your own risk. The elements used are very common and safe, the skills required very basic and limited, but again, use it at your own risk. Despite being a software enginering professional with access to technology, infrastructure and computing facilities of different sorts I declare this project has been performed on my own time and equipment.
Raspberry Pi is a marvel.
Hamradio is the best thing ever invented.
¡So don't ruin either by connecting GPIO04 directly to an antenna!
You'll make life of others in your neighboor unsormountable, and even could get your Raspberry Pi fried in the process.
Google "raspberry pi rpitx low pass filter" to get some good advice on what to put between your Raspberry and your antenna Or go to https://www.dk0tu.de/blog/2016/05/28_Raspberry_Pi_Lowpass_Filters/ for very good and easy to implement ideas
Remember that most national regulations requires the armonics and other spurious outcome to be -30 dB below the fundamental.
Headless operation is feasible by not connecting the Encoder, AUX switch and LCD display, however the power supply and keyer circuit are still required for proper operation.
When used in Headless mode the transceiver behaviour can still be controlled by using CAT commands see FLRig and RigCtl usage in the incoming sections.
The Raspberry Pi Zero pinout assignments are:
Assignments are established as follows:
pin 1 3V3 Encoder Vcc
pin 2 5V LCD Vcc
pin 3 GPIO2 LCD SDA
pin 4 5V +5Vcc supply (external)
pin 5 GPIO3 LCD SCL
pin 6 Ground LCD ground
pin 7 GPIO4 RF out (DDS)
pin 8 GPIO14 N/C
pin 9 Ground RF ground (DDS)
pin 10 GPIO15 Keyer Paddle Right
pin 11 GPIO17 Encoder Clk
pin 12 GPIO18 Encoder DT
pin 13 GPIO27 Encoder Push (SW)
pin 14 Ground N/C
pin 15 GPIO22 N/C
pin 16 GPIO23 N/C
pin 17 3V3 Not used
pin 18 GPIO24 Cooler Fan Enable
pin 19 GPIO10 N/C
pin 20 Ground N/C
pin 21 GPIO9 N/C
pin 22 GPIO25 N/C
pin 23 GPIO11 N/C
pin 24 GPIO8 N/C
pin 25 Ground N/C
pin 26 GPIO7 N/C
pin 27 ID_SD N/C
pin 28 ID_SC N/C
pin 29 GPIO5 N/C
pin 30 Ground Controller I/F Ground
pin 31 GPIO6 N/C
pin 32 GPIO12 PTT
pin 33 GPIO13 Keyer Paddle left
pin 34 Ground Encoder Ground
pin 35 GPIO19 N/C
pin 36 GPIO16 N/C
pin 37 GPIO26 N/C
pin 38 GPIO20 N/C
pin 39 Ground Aux push Ground
pin 40 AUX Aux push
This is a snapshot of the current prototype used to develop and debug this project:
A typical circuit for the kit might be:
Some minor modifications are needed while building the Chinese DIY Pixie kit, other versions might vary.
The following components needs not to be placed when building the kit
* D2 - Diode 1N4001
* R6 - R 100K
* C8 - C 100nF
* W1 - R 47K (var)
* D3 - Diode 1N4148
* Y1 - Cristal 7.032 MHz
* Connect Cx=100 nF on the same place than Y1 on the kit.
* Connect negative side of D3 diode to the interface board PTT line
* Cut trace from R5 to KEY socket, connect both keyer legs to the socket going into GPIO15 and GPIO13.
* Assure all three boards (interface, Pixie and Raspberry Pi) share a common ground.
* Extract +12V from the Pixie +12V socket, feed LM7805 with it, then feed the Raspberry Pi Zero board with it.
All additional interface circuitry might be constructed on a prototype perfboard or using the Manhattan technique.
Operating with a 12V supply the final transistor might become quite hot and indeed fail if the keydown period is long enough (as it might be with FT8 or WSPR, even for slow CW). A small heatsink is recommended. Space is very limited on typical kits but a small piece of aluminum might be enough, be aware not to short either L1 nor L3 with it.
The keyer transistor Q1 will benefit from a heat sink as well if long keying times are expected.
A cooler can be activated using the GPIO24 line, feed the cooler not from the Raspberry Pi board but from the +5V regulator or external power supply if used.
At some locations the Chinese DIY Pixie kit might be subject to heavy BCI, in order to minimize try to replace R3 from 1K to 47-100 Ohms.
An interesting set of low cost modifications to increase the power, improve efficiency and other enhancements to the original DIY Kit can be found at link.
Even if the Pixie schematic is used for the project the software could be used directly with other DIY or homebrew popular designs, among others:
Lots of good QRPp projects can be found at link or SPRAT magazine link.
This project isn't a serious alternative to some excellent DIY Kits available in the market, which deliver tons of good features at reasonable cost. This project must be seen as a learning platform enabling a very cheap DIY kit with tons of features their intrisic limitations can not be extended to cover. In particular this kit is NOT a replacement nor an alternative to the following superb kits that I'm aware of:
- QRP Lab's (Hans Summers) OCX series.
- CRKits (Adam Rong's) D4D kit.
- QRPGuys's DSB Digital Transceiver.
- 4S QRP Group's Cricket 40.
- ... and other similar projects ...
For all of them do yourself a favor and buy a kit, assemble it and enjoy the experience.
Not to mention other relatively higher scale setups such as the BitX, mcHF or minion SDR transceivers.
The preliminar 3D design for a project case (with LCD) can be seen as follows
Warning
3D STL file is an unfinished work in progress (see pending at issues)
sudo apt-get install i2c-tools libi2c-dev
sudo apt-get install socat
sudo apt-get install telnet
git clone git://git.drogon.net/wiringPi
git clone https://github.com/F5OEO/librpitx && cd librpitx/src && make
Enable I2C and SPI with sudo raspi-config
Follow instructions to download and build the HamLib package from https://sourceforge.net/projects/hamlib/files/hamlib/ (hamlib-1.0.1.tgz at this moment, check it out for latest)
Follow instructions to download and buid the FLRIG package from [here](http://www.w1hkj.com/flrig-help/)
Enable PWM in your Raspberry Pi [tutorial](https://learn.adafruit.com/adding-basic-audio-ouput-to-raspberry-pi-zero/pi-zero-pwm-audio)
git clone https://github.com/lu7did/OrangeThunder
git clone https://github.com/lu7did/PixiePi
cd /home/pi/PixiePi/src
make
sudo make install
- This project requires a hardware board combining:
- Raspberry Pi Zero (W preferred).
- Pixie Transceiver
- Glueware simple electronics to switch transmitter, connect keyer and others.
This setup can be used with flrig as the front-end and CAT controller (headless mode), it should work with any other software supporting a Yaesu FT-817 model CAT command set.
WSPR can be operated either as a monitoring station or as a beacon.
- Plug the PHONE exit to the LINE-IN entry of a soundcard.
- Start the PixiePi program with ./bash/PixiePi.sh (correct frequency to 7074000).
- Use WSJTX to monitor, select Mode as WSPR
- Ctl-C to terminate.
Your mileage might vary depending on local CONDX, antenna available and overall noise floor at your location, some fairly strong signals can be decoded this way, after all it's just a very simple (tiniest imaginable) double conversion receiver at work. Follows an example of a report captured from a WSPR Beacon in PY-Land some 500+ miles North of me.
- Run ./bash/PiWSPR.sh (replace your call, grid and power before executing the program).
This program will run once, so call it repeatedely with a timing of your choice, WSPR frames align and fire on even minutes.
Follows a screen capture of some reports given by the WSPRNet monitoring networklink, a fair distance has been achieved considered the power output were in the order of 200 mW during the tests!
FT8 can be operated either as a monitoring station or as a beacon or as a stand-alone USB transceiver for digital modes (see operating as an USB transceiver below).
Same as WSPR monitoring station but selecting 7074000 as the frequency and FT8 at WSJTX, your mileage might vary depending on local CONDX, antenna settings and overall noise floor at your locations, it's just a very basic transceiver so probably relatively strong signals will be detected.
Sample of FT8 receiving:
Run pift8 from the rpitx package, simultaneous monitoring and beaconing will require a larger Raspberry Pi in order to accomodate the extra power to run WSJT-X. Sample script can be found at bash/PiFT8.sh
Follows a screen capture of some reports given by the PSKReporter monitoring networklink, a fair distance has been achieved considered the power output were in the order of 200 mW during the tests!
Configure settings accordingly either thru the command line switches or manually using the LCD GUI, all changes made thru the LCD GUI would persist accross operations. The command line arguments override the previous setup though.
The following settings can be configured using the CAT interface, most changes will be made permanent at the pixie.cfg file upon termination.
A typical configuration file would be:
[MISC]
TRACE=0
BACKLIGHT=0
[VFO]
POWER=4800
STEP=100
SHIFT=600
MODE=2
F=7030000
[CAT]
PORT=/tmp/ttyv1
[KEYER]
KEYER_MODE=0
KEYER_SPEED=15
If connected a LCD 16x2 display plus a rotary encoder can be used to control the operation of the CW transceiver using the PixiePi program there are two modes of operation
VFO mode
Menu mode
Option selection mode
The different modes of operation and features can be used by means of operating the available keys either stand-alone or thru combinations as follows
The main mode of operation is the VFO mode where the frequency or other essential information is expossed, the panel looks as
When activated the menu mode shows the different parameters that can be accessed for modification
The parameters which can be changed are:
Keyer (0-Straight,1-Iambic A,2-Iambic B)
Mode (2-CW,3-CWR)
Speed (5 to 50 wpm)
Step (10 Hz to 1 MHz)
Shift (500 to 800 Hz)
Drive (0 to 7)
Backlight (0 to 60 secs)
Cooler (On/Off)
Reverse Paddle (On/Off)
When enabled the option selection mode (shown as a little arrow next to the option) the different alternatives to the menu item can be rotated. A quick push of the Encoder Pushbutton exit the modification without saving any change whilst a long press commits it (a "Saving..." message appears when that happens).
Using the default configuration (KEYER_MODE=0) the keyer will work as a straight keyer, however the keying must be made thru the interface in order for the program to detect changes and shift frequencies in CW accordingly. Other keyer modes can be programed using (KEYER_MODE=1 and KEYER_MODE=2). When programmed as modes other than CW or CWR the keyer will basically become a PTT line (low=ON,high=OFF).
SSB transmission, as usually understood, requires a linear transmitter and the Pixie implementation (or any similar project) behaves as a class-C mode, which means non-linear big time. If used to transmit voice, or any other mode where the amplitude of the signal carries information, the result will be severely distorted and create many problems to nearby stations, let alone comply with technical specs all hams has to comply with.
However there are many modes which are created using a SSB signal, still the information is either PSK or FM modulated, as an example digital modes (i.e. RTTY or PSK31), image modes (SSTV) or weak signal modes (WSPR, FT8, etc). On these modes even a non-linear PA like the Pixie will do, as long as the generation of the signal itself is linear. And this is what the Pi4D program does.
This program works with the PixiePi setup as a "headless" configuration, so no LCD display nor encoder knob is handled, so the transceiver is setup on start to the typical frequency. The PTT line doesn´t exists but the transmitter can be turn on either using a CAT interface or a VOX system.
The Raspberry Pi Zero computer doesn´t have any sound input interface so an external USB card needs to be used, assuming the proper configuration is used the actual FT8 or PSK31 or SSTV signal can be feed and transmitted; the transceiver is set as a receiver while not transmitting therefore it can feed another computer. In this way the PixiePi configuration can be used as a stand-alone transceiver.
Theoretically the WSJT-X program can be used on the very same board used to implement the PixiePi platform, however a Raspberry Pi Zero is way too small to support both the taxing demand of creating the RF signal and the CPU intensive calculus needed to operate small signals.
For implementation see Pi4D.sh at the PixiePi/bash directory.
Some samples of reports using the WSJT-X program for both transmitting and receiving using the program Pi4D.
-
pirtty
- RTTY beacon
-
Optional hardware
- Rotary encoder
- LCD 16x2 display
- USB soundcard (optional)
**Work in progress, this code set has limited functionality, hardware has many issues, build experience needed at this point.
CAT control can be performed over the programs of this project as they implement a limited subset of the Yaesu FT-817 CAT Command set. Commands are carried thru an internal pipe (created using the socat package, see bash/pixie.sh script for details) which looks to the controlling program just like a serial port (usually /tmp/tty0).
Operated in "headless" mode, with no tunning control or LCD display, this feature can be used to operate the transceiver.
Two alternatives has been tested:
FLRig can be built on the Raspberry Pi and used to control the PixiePi rig just configuring it as a FT-817 with the serial port as /tmp/ttyv0. The PixiePi program must be up a running and the pipe established when this program is run. Being a graphic X-Window app FLRig is somewhat taxing on resources and might not perform well when using a Raspberry Pi Zero W, however it will run just fine on a Raspberry Pi 3 or higher.
RigCtl is a companion program of the HamLib library, it's main advantage is a console operation with a very low resources consumption, therefore it can be used on a Raspberry Pi Zero W to control the rig. See bash/pixie.sh in order to understand the way to configure it.
The rigctl interface is a server running in the background (rigctld) which can be accessed using a telnet interface at localhost port 4532.
See the docs/rigctl_commands.txt for a summary of the commands or visit the Hamlib page for complete documentation, the script PixiePi/bash/pixie.sh has sample on how to implement a pipe based to enable rigctl.
In general the hardware can be used to implement modulation modes proposed by the rpitx package. In some cases the RF chain after the Raspberry Pi needs to be activated, the hardware on this project uses the GPIO12 line as the PTT, some programs might require this line to be activated or deactivated externally.