I thought to give my Flysky TH9x TX a change to use it with silkopter so I made a new node called “CPPM Receiver”. This samples a CPPM stream on a GPIO and outputs the PWM streams that can be fed into the main node.
It uses the PIGPIO setAlertFunc which calls a user provided function for all level transitions on a certain gpio pin. The resolution is 5 microseconds which is waay more than needed for a standard CPPM stream. The gap between channels is 400 microseconds so way bigger than the minimum resolution of the library.
It started more of a proof of concept but in the end I think it’s perfectly usable.
Here’s a video with it in action, connected to a D8R-II receiver:
I finally finished the schematic and PCB and will send them to DirtyPCB today.
It is in HAT format ready to be used with the new (when it’s released) Raspberry PI A3.
It supports either a RF4463F30 or a RFM22B (on the back side) connected to SPI2, a MPU9250 IMU and MS5611 baro connected to SPI1 and/or another set of MPU9250 & MS5611 connected to I2C.
On the same I2C there is an ADS1115 for current/voltage sensing and 2 extra ADC pins broken out on a separate controller.
PIGPIO is connected to 6 PWM pins – 4 for motors and 2 for a gimbal.
In the end I also had sufficient space to include 3 NeoPixels (or WS2812b) RGB LEDs to show various status info. They are all driven by only one GPIO using a serial-like protocol and I think I can make this work with the PIGPIO wave functions.
In a future revision I might add a buzzer for alerting comm errors – like link lost – and expose 2 more PWM outputs.
First I have to check if the PCB will be manufactured ok.
Update July 14th:
I made some tweaks to the SCH and PCB to include a diode for the leds, according to Adafruit.
In the previous version I was powering the LEDs from 3.3V which is below their minimum voltage. Datasheet here.
To fix this I routed the led VCC to 5V but through a diode.
The WS2812b leds expect the high input voltage to be within 0.7 VCC. With a 5V VCC this results in a 3.5V high level. The raspberry pi provides a reliable 3.3V on the GPIO and there was the risk of the leds failing to understand the PI. There are 2 solutions – a level converter to increase the high level of the PI to 5v or lowering the VCC of the leds a bit. I choose the second ’cause it’s way simpler. A diode drops the voltage from 5V to ~4.3V which in turn drops the expected high level to a convenient ~3V.
Two other changes that I did are:
- Fixed some signal traces that were running parallel on the top and bottom sides – like the I2C and some PWM outputs. Not sure how important it is but just to avoid any nasty coupling
- Broken out the I2C to a pin header to eventually connect a PX4Flow.
The board is in production now and I really hope it gets here by Friday.
In the meantime I’m investigating a PPM input solution in case I want to use a standard RC system with this board.