Mobo 4.3 Project - The continuing Saga of the all band SDR HF Transceiver based on the SR RXTX v6.3 kit

Back to main page  

For context, this page should be read in connection with the Softrock 6.3 Project page

Introduction
 
An all singing and all dancing all band 5W HF Software Defined Transceiver based on the popular Softrock 6.3 RxTx kit.

The Motherboard, or Mobo v.4.3 is an addon board to plug onto the Softrock v6.3 RxTx, to transform it into an all band (160-10m) HF SDR transceiver electronically controlled via USB.  This project, which started in mid 2009  has now been through the initial development phase, the result being a nicely performing all band transceiver, with an exceptionally linear transmitter output.  Measured IMDR is of the order of 48dB at 1W PEP and a respectable 31dB at 5W. 

This transceiver was developed by a team of radio amateurs which I was lucky enough to to be a part of,  and it is now being made available in a kit form on a non-profit basis (Art, KY1K, who produces the kits is hopefully getting enough to compensate for his time)


The picture below shows the Mobo 4.3 alpha version, mostly finished and already operational, plugged into a SR6.3 RxTx board (underneath the Mobo, barely visible on picture).  On this picture, eight bandpass minifilters have been plugged in, as well as a driver amp module (is included on the motherboard itself in the final version).  To the left of the Mobo there is the Power/SWR head.  The big black knob below the Power/SWR head is the Variable Speed VFO, underneath the knob is a 256 pulse optical encoder (other resolutions also supported).  The 20x4 display shown is but one of many possibilities supported by the firmware (16x2, 20x2, 20x4 or 40x2).  The only thing missing on the picture to make this a fully functional transceiver, is a bank of switchable low pass filters on the output, and a PC or a laptop with a decent soundcard and running the appropriate SDR software of course:
(click on picture to enlarge)
 
 
The spectrum analyzer plot below shows an IMDR measurement of the transmitter, two tone test, 1.2W output, PA in class-A, 650mA bias.  Here the IMDR measures at -47dB carrier (difference between carrier on left hand side and the first IMD product on the left hand side). 
 (click on picture to enlarge)
Kit Status:
 
 [2010-04-20] The first production run of the kit is now well under way, and over 100 Mobos have been kitted and shipped by Art, KY1K.  All further information, schematics and details on the Mobo 4.3 project can be found on the Mobokits webpage:

http://groups.google.com/group/MOBOKITS

 
The SR63ng is a replacement board for Tony Parks' recently retired SR63 RXTX board which the Mobo 4.3 uses. The board has the same physical dimensions and connector registration as the original. It differs from the original in the use of surface mount components (SMT) rather than axial leaded resistors/caps.  Further information available here:

http://www.yoyodyneconsulting.ca/pages/SR63ng Information.html

One of the outputs of the Beta build phase is documentation of the project.   Robby, WB5RVZ, with the help of the beta builders, has developed initial building instructions for the Mobo 4.3.  These instructions have already reached the amazing level of useability that Robby is so famous for with his building instructions for the Softrock kits.  See:
 

 
I am but one of several contributors to the Mobo 4.3 project, a project inspired and very ably managed by Alex, 9V1AL.  The major improvements of Mobo 4.3 over Mobo 3.6 (see Softrock 6.3 Project page) include 8 narrow band Band Pass filters for better receiver performance and a very linear transmitter output stage designed by KF4BQ.  An 8 to 16 band high quality switchable Low Pass Filter bank, and an adjustable RF attenuator designed by F6ITU are also a part of this project, as well as a simplified version (no op-amps) of the Power/SWR bridge depicted on my Softrock 6.3 Project page.  The Mobo 4.3 includes a number of additional bells and whistles, intended to transform the Softrock 6.3 RxTx into a very capable SDR transceiver when used with software such as FlexRadio PowerSDR (various versions, PE1NNZ, SV1EIA), VE3NEA's Rocky (current version 3.6)PowerSDR, Quisk (for Linux) etc... 
 
 
This webpage is mainly dedicated to my own contribution to the Mobo 4.3 project, the firmware development for the on-board AT90USB162 or the ATmega32u2 microcontroller, providing for control of the essential functions of the transceiver.  A secondary contribution was the P/SWR board used for Power/SWR measurements and the hi-SWR protection function.

  • Project: - Simplified Power/SWR meter head

For this project, the Power / SWR head shown on the SR 6.3 page was simplified, eliminating the opamps and schottky diode compensation, as this compensation could be done just as easily in the firmware.  Here is a picture of the Power / SWR meter head:

 (click on picture to enlarge)

The Power / SWR meter head is intended as an optional module to support the Mobo 4.3, enabling the hi_SWR protect function and using the [Optional] LCD display for Power and SWR readout.

The single critical part of the Power / SWR meter is the dual transformer (two separated transformers, ideally with no common interaction).  Performance of the head relies on how the two 13 turn secondaries are wound.  See picture below:
 (click on picture to enlarge)

  • Project: - Firmware for an AT90USB162 based microcontroller to control the Mobo 4

Introduction: 
AT90USB162 (or ATmega32U2) was selected as the microcontroller of choice for the Mobo 4.3 project.  The microcontroller is integrated into the Mobo itself, no need for an external controller (the Mobo 4.3 hardware can also accept control from an external microcontroller).

In principle, while the AT90USB162 (ATmega32U2) firmware is developed for use with the Mobo 4.3, it might just as well be used with any Softrock based transceiver or similar.  The firmware is open source and can be downloaded from a link further down this page.  Anyone is welcome to modify and adapt it for HAM Radio purposes.  The code could be run with little or no change on a number of commercially available AT90USB162 based boards, typical cost for these is about $20 - $25 USD.  Alternately, it would be a minor task to adapt it to other microcontrollers in the AT90USB family.

One of the reasons for selecting the AT90USB162  was that it is seen as an exercise project on a natural growth path towards a larger microcontroller, the new AT32UC3A3, a not very distant, 32 bit relative to the AT90USB .  A development project using the AT32UC3A3256 paired with an AK5394A has now [2010-04-30] already reached the state of a "state of the art" audio input device, with a sampling rate of up to 96kHz and a dynamic range of between 120 and 130dB, while at the same time providing a subset of the functions of the AT90USB162 firmware.  The end goal is to provide integrated 192kHz/24bit audio card functionality in addition to control of the SDR hardware (SDR-Widget project).  Further description of the SDR-Widget project can be found here:
 
 
 
History & Acknowledgements:
 
To support the Mobo 4.3 hardware in the best ways possible, I wrote the Mobo 4.3 firmware under the close supervision of the Mobo 4.3 core development team. The firmware is a further development of my ATMega168 code (see my Softrock 6.3 Project page), which in turn is based on the firmware initially developed for the ATtiny45 by Thomas Baier, DG8SAQ, and then much refined by F.W. Krom, PE0FKO.  To cater for the functions needed for  a "full featured" SDR transceiver, the code has by now been bloated upto about four times its original size, however it still retains the original core command structure (extended) and is compatible with version 15.12 of the PE0FKO code. All USB command set extensions have been coordinated between Fred, Alex and myself, and moreover, Fred has added support for many of the Mobo 4.3 extensions, in his CfgSR software, Thanks Fred!!!


(The full Mobo 4.3 USB command set API description is included in the source code distribution of the firmware, which can be found on this page.  Further examples in how to communicate with the firmware over the USB can easily be derived from the MoboControl Python script, also found on this page)

 
 Mobo4.3 firmware functionality highlights description:
 
  1. Control of the Si570 Programmable Crystal Oscillator,  including "smoothtune" for seamless tuning between small frequency steps (<3500ppm)
  2. Variable speed VFO, using a Rotary Encoder, and 9 short/long term memories,  using a push button (cycle with short pushes, store with long)
  3. CW Paddle inputs
  4. Accomodate different Encoder Resolutions (PPT) through a User command
  5. PTT output
  6. PTT2 output (connected to SWR protect function)
  7. Automatic selection between 8 Bandpass filters, with user selectable switch points
  8. Automatic selection between [Default] 8 or 16 Lowpass filters, with user selectable switchpoints, by controlling 2x external PCF8574 8 bit GPIO extenders. Alternately, it can also provide direct control of 4 to 8 Lowpass filters through a 3 bit directly connected GPIO port  (Mobo 4.3 P1 pins 4-6).
  9. Measurement of Input voltage, PA current, Power forward and Power reflected (uses external Power/SWR bridge)
  10. Hi-SWR protect function, when using an external Power/SWR bridge (automatically lower PA bias and assert an external signal)
  11. PEP indication for power output, showing the highest value measured within an adjustible time window of up to 2 seconds (10 samples per second) 
  12. PA Temperature measurement and automatic Transmit Disable on a high temperature condition
  13. Cooling FAN control, using two temperature trigger settings, one for on and another one for off.
  14. Manual PA Bias setpoint control, switching between different bias setpoints (such as between classes A and AB), and automatic calibration of the PA bias current
  15. 20x4 LCD or 40x2 display with analog-style bargraphs for enhanced power output and SWR visualisation
  16. optional 16x2 and 20x2 LCD display alternatives with analog-style bargraphs for power output and SWR visualisation
  17. an alternative optional 16x2 LCD display without the bargraphs, providing Frequency readout, Power/SWR metering and status diplay (RX/TX/hi-SWR/hi-TMP/Mem-store...
  18. LCD frequency display offset option, for readout of the actual transmit/receive frequency, when using PowerSDR-IQ
  19. Read/Write a byte from/to external I2C connected General Purpose IO extenders PCF8574 (filters, attenuators, amplifiers)
Some of the items described above, such as the Rotary Encoder VFO, the PTT2 output, the Power/SWR bridge and the LCD, while not necessary elements for the Mobo 4.3, are optional available features.  There is also a good number of features not mentioned in this highlights list.
 
Firmware Download and Firmware Compile Information:
 
 
The first "official" release of the firmware is now ready.  It has been tested back and forth and no bugs found.  The Autobias function has been implemented.  The Hi SWR protect function works very well, switching the bias to the lower setting (and reducing the power output) if the SWR gets to high.  Fred's latest improvements (15.12 release) have been incorporated.  The variable speed Rotary Encoder VFO has been added as an user option, including 9 memories, one for each of the HF bands.  The USB command set has been expanded to supplement the VFO/Memory functions, and new USB commands have been added to support a scrambled order of filters.  Power output and SWR are now shown on an LCD by using analog style bargraphs.  See LCD display pictures further down this page.
 
 
Version 1.07 (2011-01-15) is now available and can be found at the bottom of  this page in both AT90USB162 and ATmega32u2 versions.  Both firmware releases (zip files) contain 12 precompiled HEX files to accommodate different configurations.  All source code is included.  The AT90USB162 version works for both the AT90USB162 and the ATmega32u2, while the ATmega32u2 specific version has some additional options enabled (frequency add/subtract and multiply, scrambled or flexible order of filters and legacy commands).  Firmware functionality description, including an API description for the complete USB command set can be found on this page as well.

(To keep a similar version scheme as used by Fred PE0FKO, this version is numbered 1.07-16.12, where the second number denotes the USB functionality version)
 
The source is open and freely available for non-commercial use - i.e. for research and experimentation only.  I would be most interested in hearing of any use/experimentation which makes use of elements from this code.

If you want to modify and recompile the code:
 
If compiling for the AT90USB162, then WinAVR-20080430 needs to be installed (usually as C:\WinAVR-20080430).  Newer versions of WinAVR need to be avoided as they generate larger code and the space is pretty tight as is.  The LUFA library, version 10 August 2009 needs to be installed at the same subdirectory level as your working directory... as LUFA090810.  If installed elsewhere, then no problem... just change the path indicated in the makefile.  In the default install, the LUFA directory name contains a space: LUFA_space_ 090810.  Rename the directory to LUFA090810, without the space.

If compiling for the ATmega32u2, then select the latest WinAVR package (I used 20100110 which had to be tweaked a bit, as the support for ATmega32u2 is still new in this package and a bit spotty).  The ATmega32u2 version uses version 20091223 of the LUFA package, directory needs to be renamed in a similar manner as described above.

It is useful to have Python and the Python USB (PyUSB) library installed for debug and test purposes (to use scripts similar to SetFrqByValue.py file included in source).  And of course, the ATMEL AVR-Studio 4 (free download from ATMEL, need to register) is technically not a must, but a very nice environment to work with.  All the above referenced software is freely available (although certain license conditions may apply).
 
  • Project: - MoboControl GUI Widget

CfgSR, by Fred, PE0FKO is a great tool to set most of the various firmware parameters, such as default startup frequency and BPF/LPF switchpoints.  It can even be used for many of the Mobo specific functions such as setting the PA bias and reading Power/SWR.  Fred has been very kind in co-ordinating with us the USB command extensions of the Mobo project, and to incorporate support for many of those in the CfgSR tool.  Below is a description of a similar tool, MoboControl.

MoboControl is the result of a Python script that Alex, 9V1AL and I have been bouncing between us.  The script provides access and control of most of the essential firmware parameters.  It reads frequency, temperature, voltage as well as PA current during transmit.  It can be used to control or adjust the PA bias settings.  It provides a visual Power/SWR gauge, and it can be used to control all major features of the Mobo 4.3 firmware.  The Python script is easily editable and is cross platform capable, runs on both Linux and Windows computers.  Because of its simplicity and easy readability, it also provides clear examples for any would-be programmers that would like to support the USB command protocol used by the Mobo. 
 

 
This is a "growing" script, and any input for improvements or added functionality are most welcome.  To run the script on a Windows Computer, Python v 2.6.4 needs to be installed, the PyUSB package (v 0.4.2), wxPython for Windows as well as the PythonCard package.  An alternate method is to download and install the precompiled Windows Installer Package, which includes all the elements necessary, but is not editable.  The latest version of MoboControl (python scripts and Win Installer) can be found on this page.

  • Build history of the Alpha version of the Mobo:

This picture shows the underside of the alpha version printed circuitboard, mostly assembled.  Very few little issues of note, remarkable for an alpha build of this complexity.  Note the little blue jumper in the lower left corner, and the funky way the big chip is mounted, bending the legs underneath it.  A few decoupling capacitors and a couple of reroutes have been added since this picture was taken:
 (click on picture to enlarge)
 
 
I should not forget the one part that I have not started building yet, Marc's Low Pass MegaFilter Mobo.  Marc is busy doing the final tweaks, this is turning out to be a very impressive design, providing up to 100dB of attenuation.  Here is a link to Marc's (F6ITU) webblog.
 
 
Here is a link to Mike's (KF4BQ) report on his prototyping tests, using a single RD16HHF1.  Note that you have to be member of the Yahoo Softrock40 group, and logged onto Yahoo for the link to work.   Highly recommended reading.  Mike has also a wealth of other interesting writeups accessible in the Yahoo Softrock40 group, files section, KF4BQ.
 
 
Art, KY1K, has selflessly contributed great many hours of his time and expertise to the Mobo 4.3 project, providing components guidance and developing the project into a low cost kit.  Not a small feat for a project of this magnitude.
 
 
This picture shows the alpha kit as received from Art on 7 August 2009.  All the components  beautifully packaged, and a sheer joy to see the prototype PCBs for the first time, a true work of art by Alex, Marc and Mike.  My own little contribution to this is the Power/SWR board (lower left):
 
 
 (click on picture to enlarge)
 
 
In the upper row, to the left, there are 10 minifilter boards for the Mobo and the component kit bag that goes with them.  In the middle of the upper row there is the Mobo 4.3.3 board, and next to it is the big bag of components that comes with it.  Lower row, left, is the Power/SWR head and components.  Then there is the Mega filter Mobo and the daughter cards that come with it.  Missing on the picture are the components for the Mega Filter.
 
 
Below is a picture showing the text fixture used during the initial development of the firmware:
 
(click on picture to enlarge)
 
 
The Mobo 4.3 uses a number of I2C connected devices, such as a 4 channel 12 bit A/D converter, a D/A converter, a Temperature sensor and several GPIO extenders. 
 
In the test fixture depicted above, most of those I2C devices have been implemented.  The row of 3mm leds below the uC are connected to Port D, currently  available for "old-style" BPF/LPF switching .  The larger red and green leds are connected to Port B,  pins PB2 and 3, same as the two leds on the Mobo 4.3 schematic.
 
The lone chips to the right and at the bottom are the two PCF8574 GPIO extenders, one for the on-board BPF switching and TX signaling etc, the other one  for switching the external 8 band LPF board. 
 
The little PCB on the upper right is my AD7991 test fixture, enabling test of the 4 A/D inputs.
 
The tiny bug suspended in the air on four wires,  is the I2C connected temperature sensor TMP100.  To test the temperature alarm function, this little bug gets the heat gun treatment :)
 
The LCD to the left provides visual output such as frequency readout, TX/RX status, Temperature and SWR Alarm status, Power/SWR readout, etc. 
 
The LCD to the right is an I2C connected device that I've been using for debugging.
 
On the picture you can also see a SR6.3 and a PO/SWR measuring head.  Missing from the picture are a Tuner and a dummy load, used to test the Power/SWR measurement and the SWR alarm functionality
 
I got a bit sidetracked by the detailed review by K8ZOA of the Si570 controller kit developed by K5JHF and K5BCQ, a very useful tool.  The review can be found here:
 
Here is my build of this excellent kit.  My ugly home construction chassis does not do it justice :)
 
 
(click on picture to enlarge)
Anyway, to get to the point, I got sidetracked into playing with a shaft encoder, adding a variable speed VFO and a push button controlled bandswitcher to the AT90USB microcontroller firmware.  Works great, feels and "sounds" just like turning the VFO knob on any transceiver.  This kind of breaks the "Need no stinkin' knobs" approach :)  Ahh well...
 
 
 (click on picture to enlarge)
 
Here is yet another pic by request of Alex, 9V1AL, just a bit more clutter.  A cheap shaft encoder, a couple of pullup resistors and two caps for debouncing (takes precious bytes to do it in software). This shaft encoder also has a builtin pushbutton that I haven't connected yet on this picture.  As this developed further, I eventually purchased an Optical type rotary encoder on eBay.  This encoder gives a resolution of 1024 clicks per revolution (256 pulses).  Now, it is hard to beat that performance :))
 
 
Following are a few 16x2 and 20x4 LCD display snapshots:
 
 
20x4 Receive: 21.020000 MHz, RX filter 6 selected (automatic selection, filters numbered 0-7), TX filter 7 selected (automatic selection, filters numbererd 0-15 shown as 0-F), PA temperature is 33°C (can also be displayed in F), Power Supply voltage is 12.6V and Bias setting 'H'igh (High/Low/Reduced):
 

20x4 Transmit:
21.020000 MHz, RX filter 2 selected (0-7), TX filter 2 selected (0-15 as 0-F), PA temperature is 41°C (can also be displayed in F), Power Supply voltage is 12.8V, PA current is 0.57A, Bias setting 'H'igh (High/Low/Reduced), and bargraphs showing power output and SWR (full scale set at 4W and 5.0):
 

20x4 Transmit
during an SWR-Alarm situation: Similar to above, except now the SWR is very high, SWR-Alarm function has kicked in and reduced the PA bias, see R at end of second line.  The A at the end of the fourth line is blinking:
 

20x4
Power Amplifier Over-temperature has been detected: PA over temperature situation has resulted in an automatic Temperature Shutdown of the transmitter:
 

20x4
PA Bias Calibrate function: This display function is also implemented with the 16x2 display, the words "PA BiasCalibrate" being shown in the first line and the second line showing temperature, voltage and PA current.  The PA bias Calibrate function takes less than 2 seconds:
 

20x4
"VFO Memory Stored" function:  Used with the Rotary Encoder VFO.  This display, active for 2 seconds, indicates memory being stored, through a long push action.  This display function is also implemented with the 16x2 display, the words "VFO MemoryStored" being shown in the first line for 2 seconds.  Just to make the point, this display shows the Bias set to Low:  (Just noticed the 255 degC displayed.  This would be a glitch caused by a bad connection in the setup I used during the firmware development  :-)))
 

16x2 Receive Display: 7.020000 MHz, Bias setting 'H'igh (High/Low/Reduced), RX filter 2 selected (automatic selection, filters numbered 0-7), TX filter 2 selected (automatic selection, filters numbererd 0-15 shown as 0-F), Power Supply voltage is 13.1V and PA temperature is 38°C (can also be displayed in F):
 
 
16x2 Transmit Display: Power Output measured at 2.161W, SWR is 1.16.   Bargraph fullscale is set at 4W out and SWR=5.0:
 
 
16x2 Transmit during a SWR-Alarm situation: (default SWR alarm trigger is set at 3.0)  The 'A' at the end of the second line is blinking, indicating SWR Alarm.  Power has automatically been reduced by switching to the lower PA bias setting:
 

16x2 Power Amplifier Over-temperature has been detected:
Transmit has been shut down:
 
 
 Back to main page
 
 
 

Web Site Hit Counter
Comments