rcstick-f is a USB HID device which has 8 analog axis.
And this device is also a RF receiver which conplient with Futaba S-FHSS protocol.
This device is designed to be used to controll RC flight simulator by Futaba RC transmitter.
One of the most simple and common way to use RC transmitter as controller of RC flight simulator is handling PPM signal exported from the trainer port on a transmitter.
Some simulator software can recognize PPM signal through audio input, So in this case, you have to do is just connect cable between the trainer port on a transmitter and mic input port on a PC.
Or using USB dongle that convert PPM signal to USB HID device, such as these products, is also popular.
The advantages of these PPM signal based solution are inexpencive and compatibe with many transmitter products. The most disadvantages is that the cable between a transmitter and PC is very annoying.
On the other hand, in recent years, the products that behave wireless RF receiver and USB HID device have appeared in the world. For example, SPEKTRUM WS1000 for DSM2/DSMX protocol or FrSky XSR-SIM for FrSky protocol.
These products are designed for a specific protocol. So comatibility is lower than the PPM signal based solution. However, users can enjoy highly convenience due to wireless connection.
In addition, that is more responsive and higher precision than the PPM signale based solution since there is no unnecessary data conversion such as ADC data to PPM.
The reason why I determined to start this project is that I could'nt find a such kind of wireless device supported Futaba RC protocol. (As of the begging of 2019)
S-FHSS is a 2.4 GHz band based RC transceiver protocol designed by Futaba. It is not brand new protocol, However many Futaba transmitter suport this protolol. And this protocol is well analyzed. That's why I choose S-FHSS for my own receiver imprementation.
This commentary article and this C source code which impremens S-FHSS transmitter are very helpful to understand the protocol. I sincerely appreciate there effort.
I designed two types of PCB artworks for rcstick-f.
One is sufficiently small that QFP32 package of STM32 MCU is installed, the other one is very small that QFN32 package of MCU is installed.
Both artworks are optimized to enable hand soldering by using a soldering iron. You don't need a reflow oven or a hot air gun.
All pads and parts spaceing are designed to allow contacting soldering iron. grand pad located center of QFN package is also able to be soldered through a via from back side of PCB.
January 29th, 2023: USB Type-C connector version was added. |
---|
The design of USB Type-C version was completed in February 2022, but the production was put on hold because the Type-C plug could not be obtained due to the chip shortage from time to time. Recently, the availability of this part has improved, so I was finally able to manufacture it. This version is also capable of hand soldering, but this time I saved time and effort by using PCB assembly service. |
March 18th, 2023: QFN28 MCU version was added. |
---|
The situation of chip shortage has eased, and the market inventory of STM32 MCUs seems to have increased. However, they seem to be carefully selecting the SKUs they produce, and I received a message from someone that STM32F042K6U* QFN32 package is not available at all. So I made an artwork with STM32F042G6U* QFN28 package which is good availability. Unlike the other three artworks, this is not suitable for hand soldering. Because this MCU is a QFN package that does not have a pad in the center, so it is difficult to implement with a soldering iron. I manufactured it using JLCPCB's PCB assembly service. |
Board Type | Eagle design files | Gerber files | Files for JLCPCB PCB assembly service |
---|---|---|---|
QFP32 MCU version | pcb/small | rcstick-f-gerber.zip | - |
QFN32 MCU version | pcb/tiny | rcstick-f-tiny-gerber.zip | - |
QFN32 MCU and USB Type-C version | pcb/pico | rcstick-f-pico-gerber.zip | rcstick-f-pico-pcba.zip |
QFN28 MCU and USB Type-C version | pcb/pico2 | rcstick-f-pico2-gerber.zip | rcstick-f-pico2-pcba.zip |
Note:
Thickness of a PCB of the USB Type-c version should be 0.8mm. This constraint depends on the implementation conditions of the Type-C plug Molex 1054440001.
Components | Value / Product Number | Remarks |
---|---|---|
U1 | STM32F042K6T*, STM32F042K6U* or STM32F042G6U* | |
U2 | TI CC2500 | |
U3 | MCP1703AT-3302E/CB | SOT-23 LDO |
J1 | MOLEX 48037-0001 or MOLEX 1054440001 | USB Type-A or Type-C plug |
J2 | MOLEX 53047-0410 | OPTIONAL for debugging Firmware downloading can be proceeded by using DFU mode |
X1 | 16MHz Crystal (3225) | load capacitance: 10pF |
X2 | 26MHz Crystal (3225) | load capacitance: 9pF |
LED1 | OSBL1608C1A | |
SW1 | ALPS SKRPACE010 | |
C1, C2, C9 | 1uF (1005) | |
C3, C4, C10, C11, C12, C15, C16 | 0.1uF (1005) | |
C5 | 4.7uF (1005) | |
C6, C7 | 15pF (1005) | need to change value if X1's load capacitance is not 10pF |
C8 | 10nF (1005) | |
C13, C14, C17 | 220pF (1005) | |
C18, C19 | 12pF (1005) | need to change value if X2's load capacitance is not 9pF |
C20, C21 | 100pF (1005) | |
C22, C23 | 1pF (1005) | |
C24 | 1.8pF (1005) | |
C25 | 1.5pF (1005) | |
R1 | 10K ohm (1005) | |
R2 | 56K ohm (1005) | |
R3 | 100 ohm (1005) | |
R4 | 5.1K ohm (1005) | need for only USB Type-C version |
L1,L2,L3 | 1.2nH (1005) |
You can download STL data of case for tiny version of PCB. That is desined assuming that is printed by resin printer.
Note that PCB thickness should be 1.2mm if you apply this case design.
-
Requirements
GNU Arm Embedded Toolchain must be installed in a directory indecateed byPATH
environment variable. -
Downloading Source Codes
$ git clone https://github.com/opiopan/rcstick-f.git
-
Compiling
$ cd rcstick-f/firmware $ make all
You can choose two way to download firmware to rcstick-f board.
One is downloading firmware via SWD by using debugger. rcstick-f exports a SWD I/F at J2 connector.
The other one is downloading it via USB port in DFU mode. You can switch rcstick-f in DFU mode by inserting that to USB port with the button pressed.
-
Preparing Debugger
Make sure that a debugger is connected with rcstick-f J2 port and debugger controlling software which behave as GDB server such as OpenOCD is running. -
Downloading
You can download a firmware by makingflash
target withDEBUGSERVER
parameter. If debugger controlling software is running same PC, specifylocalhost
forDEBUGSERVER
parameter.$ make DEBUGSERVER=localhost flash
-
Install required software
Make sure that following software is installed. -
Switching rcstick-f in DFU mode
Insert rcstick-f to USB port with the button (SW1) is pressed. -
Downloading
You can download just by makingdfuflash
target.$ make dfuflash
-
Exsiting from DFU mode
Pull out rcstick-f from USB port, then re-insert that to USB port.
-
Make sure that the settings of transmitter are appropriate as next section.
-
Insert rcstick-f to USB port of your PC, and make sure that LED on rcstick-f flashes twice every two seconds.
-
Turn on the power of RC transmitter, and make sure that transmitter protocol is S-FHSS.
When rcstick-f detect that radio waves, LED flashing pattern is changed that flash once every one second. -
Wait until LED will light continuously that means rcstick-f is binded with RC transmitter.
-
Now you can use your RC transmitter as a joystick on your PC.
Each channel of S-FHSS transmitter is mapped to each USB HID axis as below.Channel USB HID usage CH 1 X CH 2 Y CH 3 Z CH 4 X rotation CH 5 Y rotation CH 6 Z rotation CH 7 Slider CH 8 Slider
I recommend you to register a dedicated model for rcstick-f in your transmitter. That model should be satisfy following conditions.
-
Communication Protocol (REQUIRED)
ChooseS-FHSS
for communication protocol since rcstick-f can recognize only S-FHSS protocol. -
End Point (RECOMMENDED)
Set end point for each channl as that rx PWM output pulse width will be in range between 1009us and 2031us.
In S-HFSS packet, each channel position is expressed as 12 bit number. And that values are equivalent of PWM pulse width output from rx in microsecond. So value of a channel which is on center position will be 1520.
rcstick-f generates values for each axis of USB HID by subtracting 1520 from value in S-HFSS packet, and clips values in range of 10 bit 2's complement number, that is between -511 to 511.
Therefore, the most efficient setting of end point is that each channel value will be in range between 1520 - 511 and 1520 + 511.In case of Futaba 10J, the end point settings satisfied above condition are 124% or 125% for channels 1 to 4 and 92% or 93% for channels 5 to 8.
rcstick-f provides a helper function to determine proper endpoint ratio. Refer the next section for the details.
-
Servo Reverse (RECOMMENDED)
In order to prevent runaway when flight simulate is started without a connection between rcstick-f and transmitter, rcstick-f set throttle axis value correspond to channel 3 as -511 that is minimum value in range of each axis.
For Futaba transmitter, the more you raise the throttle stick, the more transmitter shorten the PWM pulse width. So to align default value the above, enable servo reversing of channel 3.
As mentioned previous section, setting end point ratio as largest value within the range expressiblee by rcstick-f is important. To determine that appropriate end point ratio, rcstick-f has a mode to detect clipping value for channel.
Find the appropriate end point ratio as following steps.
-
Preparing
To ensure that movable area of servo exactly maches end point setting, make sure following settings for each channel.- Trim and Sub trim: should be reset
- Dual Rate: should be 100%
- No mixing with other channels
- Throttle curve and Pitch curve: should start from 0% and end to 100%
Then, make position of all sticks, slide levers, and switches associated with channels 1 to 8 center.
If that is impossible due to association with 2 position switch, reduce end point ratio significantry for that channel. -
Binding rcstick-f and transmitter
Bind transmitter with rcstick-f according to steps described in the section "How to use rcstick-f". -
Changing mode of rcstick-f
Press a button on the rcstick-f in order to enable a function to detect value clipping. LED on the rcstick-f will flash three times in one second.
If LED still light continuously, a channel vallue is larger than 1520 + 511 or less than 1520 - 511 at least. Make sure that all channel settings are satisfied conditions mentiond in step 1. -
Determining enb point ratio
Choose any one channel, then move the stick, the slide bar, or the switch assosiated with taht channel to the maximum position or minimum position.
If LED is still flashing, the value of cahnnel is in range and is not clipped. In this case, increase end point ratio by 1% until LED is flashing.
If LED flashing pattern is changed that it light continuously, the value of channel is out of range and is clipped. In this case, decrease end point ratio by 1% by LED start to flash.Usually, you can apply same ratio determined above for all other channels. However you should be careful if your transmitter is entry model such as 10J.
It's well known taht servo angle in 100% end point for channels 5 and later is wider than the servo angle for channels 1 to 4 in some Futaba transmitter. If you use that kind of transmitter, you need to determine for two channels at least.