Join GitHub today
Gladiolus is the code name for an infrared neighbor under development. The concept is to execute IR RX and TX in the style of Software Defined Radio (SDR), enabling implementation of arbitrary IR protocols. In every known over-the-air IR implementation, only the amplitude of the optical signal is modulated, so we need to detect/modulate the amplitude with a single ADC/DAC.
- 20 to 60 kHz IR remote control systems
- IrDA up to 4 Mbps
- Bosch Integrus audio broadcast over IR (DQPSK over AM)
- proximity sensors
Though many IR-over-fiber implementations use longer wavelengths, all over-the-air targets we've identified use wavelengths between 850 and 950 nm. Gladiolus should be able to detect and produce IR over that range.
Getting Started with Gladiolus
Our host software is currently in another repo:
git clone https://github.com/dominicgs/GreatFET-experimental.git
You should see a firmware and a host directory in there. The host code is written in python, so you'll need to cd to host and then run
python setup.py build sudo python setup.py install
This will install a greatfet python library and some of the host tools. The one that you want for SDIR is greatfet_sdir (it may not be installed to your path, but it's also in that host directory). The input/output is a stream of unsigned bytes.
For receive, I like to use GNU Radio via a pipe. So:
mkfifo /tmp/fifo greatfet_sdir -r -S 10200000 -f /tmp/fifo
That's going to capture at 10.2 MSps. In GNU Radio Companion connect a file source (pointed at /tmp/fifo with Byte type) through UChar to Float and into visualization blocks such as a QT GUI Time Sink or QT GUI Frequency Sink. If they're too strong or weak, the blue potentiometer on the board is used for adjusting the RX gain (TX gain is always max, so you control power by scaling the values that you transmit). We'll have digitally controlled gain in the future, but it is manual for now.
To replay a capture: greatfet_sdir -S 10200000 -f
If you want to transmit from a GRC flowgraph: greatfet_sdir -S 10200000 -f /tmp/fifo
Parts have been selected, but I'm keeping these old notes for future reference in case we need to change anything. Cost is important for all components.
- Vishay VEMD11940FX01 SMT side-view 780-1050 nm (good except for slow response time)
- Everlight PD204-6B through-hole 840-1100 nm
- Vishay VBPW34FASR has very high sensitivity due to large surface area but is somewhat slow (used in IRis)
expensive wideband photodiodes if we ever have the need
- API SD002-151-001 SMT 800-1700 nm
- Marktech MTPD1346D-150 through-hole 800-1750 nm
Dynamic range of 8 bits is probably enough. Low power consumption would be neighborly.
- ADC08351 2 to 42 Msps, 8 bits, 2.7 to 3.6 V, 40 mW
- ADC08060 20 to 60 Msps, 8 bits, 2.7 to 3.6 V, 76 mW
- ADC10065 20 to 65 Msps, 10 bits, 2.7 to 3.6 V, 68 mW
- AD9283 1 to 50 Msps, 8 bits, 2.7 to 3.6 V, 80 mW (also available in 80 or 100 Msps)
- MAX1193 ? to 45 Msps, 8 bits, 2.7 to 3.6 V, 57 mW
- ADS931 10 ksps to 33 Msps, 8 bits, 2.7 to 5.5 V, 69 mW
AD9283 wins because of ease of interface.
- THS4520 transimpedance amplifier to interface with photodiode
- AD8330 variable gain amplifier to interface with ADC
LEDs are quite narrowband, but they are also inexpensive. Maybe have two or three at different wavelengths. On the other hand, IR receivers tend to have much wider bandwidth, so perhaps only one LED is necessary. Some investigation of receivers (and their optical filters) is required.
- Everlight IR12-21C/TR8, 940 nm, SMT side view
- Everlight SIR12-21C/TR8, 875 nm, SMT side view
- Vishay VSMG10850, 850 nm, SMT side view
Fast IR LEDs
For high speed applications, one of these would be nice:
- TSHF5210: PTH, 30 ns, 890 nm, 100 mA, 180 mW/sr, 20 deg
- TSMF10x0: SMT, 30 ns, 890 nm, 100 mA, 25 mW/sr, 34 deg
- TSHF6410: PTH, 30 ns, 890 nm, 100 mA, 70 mW/sr, 44 deg
- TSHF5410: PTH, 30 ns, 890 nm, 100 mA, 70 mW/sr, 44 deg
- VSMF3710: SMT, 30 ns, 890 nm, 100 mA, 10 mW/sr, 120 deg
- VSMF2893: SMT, 30 ns, 890 nm, 100 mA, 20 mW/sr, 50 deg
- TSSF4500: PTH, 30 ns, 890 nm, 100 mA, 20 mW/sr, 44 deg
- HSDL-44x0: SMT, 40 ns, 875 nm
ADC/DAC MCU interface
Use SGPIO similar to HackRF One implementation except we probably do not need an external clock signal.
Modify the SGPIO configuration to produce the clock signal. If that doesn't work, use a clock output from the LPC4330 audio PLL.
Automatic Gain Control
Would be nice for dealing with sunlight, etc.
Sample Rate Configuration
Maybe design for a fixed sample rate to avoid the cost of variable/switchable anti-aliasing filters. Decimation can be performed on the LPC4330 up to some rate. It can also be performed on the host computer.
Many applications use On-Off Keying (OOK), so a DAC is not needed. It should be possible to bypass the DAC and control the TX LED(s) with one pin.
EVAL-CN0272-SDPZ is an interesting evaluation board with similar capabilities.