NOTE: The following is provided for inspiration only. The source code and some details are proprietary information so sadly I can not share it at this time.
I was collaborating with my son who got a gig for some stage special effects.
The effects needed to be remote controlled and failure was _not_ an option…
We had some previous experience using WiFi where everything worked fine during the rehearsals but nothing worked during the show. Turns out that a lot of radio stuff goes into big productions and WiFi always seem to suffer.
The presence of a lot of transmitters at many different frequencies in close proximity tend to overwhelm badly constructed receivers.
It is a common misconception that bad radio communication under these circumstances is the result of lack of signal. More often it is the opposite.
CC1101 UHF module
Not wanting to use WiFi we settled on UHF ISM band (433MHz). Lately most commercial stuff have moved away from this band and we are licensed to operate in this band at high power. Our strategy was transmit rather loudly while limiting the receiver sensitivity. This way the receiver was less likely to be overloaded by out of band signals.
There are many options for transceiver devices for this band but we ended up choosing a module containing the CC1101 transceiver chip.
This chip is connected to a host micro controller via. SPI and handles all packet communication internally. All the host has to do is provide data packages and the transmitting module will apply redundancy check and the receiving module will check this and validate the package before notifying the host. Data rate, receiver bandwidth etc. is also handled by the module.
We did some experiment with these modules and they seemed pretty stable. The modules appeared relatively insensitive to most out of band interference but would still seize to operate if the interference was close enough to the frequency the module operate at.
The radio inside these modules are pretty agile so we thought we would try to use several radio channels to avoid this kind of interference.
Frequency hopping spread spectrum FHSS
We decided to go for a Frequency Hopping Spread Spectrum scheme where the radios would continuously hop between a pre agreed selection of channels.
We set up a system where a software key would generate a pseudo random pattern of channels. Then both the transmitter and receiver could use the same key to generate identical patterns.
The transmitter would transmit a packet of data on each channel before jumping to the next. The receiver could then use the generated pattern to jump to the same channels. If interfering signals were to render one ore several of these channels inoperable some data would still get through.
The receiver would need to be able to stay on track of which channel to jump to even if one or more packets were missing. To achieve this we used the following method:
The transmitter would transmit packets at a fixed rate. Each packet would be sent on the next frequency of the generated pattern. Once the pattern was complete it would start over.
A synchronizing mechanism would align the pattern timing in the receiver to match that of the transmitter. (Unfortunately it is proprietary information how this works).
The receiver would try to follow this pattern by looking for the timing of good packets. Once a good packet was received a timer would be set to time T1 where the next packet would occur plus a small margin. Every successive packet would do the same. If a packet failed to be received a timer event would happen after T1. In this case a different time T2 would be set. This time would generate a timer event in the future at the same time as if a good packet had been received.
This way a jump to the next channel in the pattern would be initiated either by the reception of a good packet or a timer event. In either case the synchronization of the packets would be maintained and remain so even if many packets were missing.
Spectrogram of test hop pattern:
Another way of increasing reliability is to add some redundancy on the receiver side.
When operating radio transmitters indoor the radio signals tends to bounce around and get scattered off walls and objects. Reflections may create spots where the signal cancels out completely and no amount of transmitter power will help.
Several diversity antennas can be placed in such a way that if one experience this cancellation others will be guarantied to receive some signal.
Since the modules we used already came with an antenna installed we opted to simply use more modules in place of more antennas:
The modules are connected to the host controller via a SPI bus. This serves to set up the functionality of the modules. In additional to the SPI bus a single signal can be configured to signal when a good and valid packet has been received:
To achieve diversity several modules would be set up to receive the same signal. All the packet ready signals was thn OR ‘ed together using diodes:
Once the host controller would receive a good packet signal it would just read the receivers one by one until a valid packet was found. In the end It doesn’t matter which receiver end up providing the packet.
The transmitter was built into a small flight case. To secure uninterrupted operation both a mains power supply and a lithium battery pack was built into the case. The battery pack would be charged , while operating, by either mains or a USB connection:
The transmitter would continuously send data. A small LED on the receivers would indicate that the system was active and locked.
Switches on the front panel would activate different functions on the receivers. For safety one large master switch would indicate that the functions in the receivers should be executed.
We started planning to transmit around 1-10W of RF power. We tested a selection of RF power amplifiers in this range.:
In addition to this we made a directional antenna to make absolutely sure that enough signal got delivered to the area where the receivers would be situated:
In the end the system turned out to be so reliable that only the modules built in +12dBm (~150mW) transmit power and a small rubber antenna was necessary.
The receivers were built into mechanical devices each powered by a 9V battery.
Once commanded a small servo would turn a plastic cup emptying its contents.
In the end we found that the extra diversity receiver wat not needed either.
There is no worse feeling than building up to a live performance with all the pressure and chaos that includes only to have your equipment fail at the most critical moment.
Having experienced this we were determined to make a system that was as tough and reliable as absolutely possible.
We started by going way over board with powerfull transmitters and large antennas. This initially gave us a good margin for success but was essentially the mentality that had created the RF pollution we started out to beat.
In the end using a clever spread spectrum technique turned out to be way more effective. During testing we were virtually unable to jam the system except in really extreme cases and the performance ended up going without any issues.
We plan to develop the system further and turn it into a general purpose remote control for mission critical applications.