Skip to content

ChrGri/DIY-Sim-Racing-FFB-Pedal-Mechanical-Design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DIY-Sim-Racing-FFB-Pedal-Mechanical-Design

If you're used to standard spring or damper-based pedals with rumble motors attached, a force-feedback pedal is the next step. It uses a high power servo attached to a linear rail to control the motion of the pedal. This allows you to change how the pedal feels with a few changes on your PC, whether that's braking pressure, response or travel or the thottle weight or stiffness. You can even use profiles to build different "feels" for different cars, switching profiles between cars to give each vehicle a different driving experience. Additionally, since the pedal movement is controlled, the feedback it can produce is totally different - imaging feeling ABS feedback moving the pedal, the kick of the gear change through the throttle or feedback from road bumps through the pedals. It's an experience like no other! If that sounds like something you want to build for yourself, then read on! This project documents people who want to design and/or build their own force-feedback pedal.

Tip

Disclaimer This repository documents my research progress. I wanted to understand the necessary signal processing and control theory algorithms behind such a device.

Warning

The FFB pedal is a robot and can be dangerous. Please watch The Terminator before continuing. If not interacted with care, it may cause harm. I'm not responsible for any harm caused by this design suggestion. Use responsibly and at your own risk.

Project repositories

This project has been divided into multiple repositories, each with differt purposes. The mechanical design repository provides the information you need to build the mechanics of ChrGri's pedal. It's not the only design, but it's strong and reliable. There are more options on the Wiki, and you can find even more designs on the Discord server. The Software repo (this repo) discusses how to select, order and connect the electronics, flash the firmware and get the pedal up and running. The final repo, contains designs for the recommended circuit boards that control the pedal.

Description Link
ChrGri's mechanical and electrical design https://github.com/ChrGri/DIY-Sim-Racing-FFB-Pedal-Mechanical-Design
Software (firmware, SimHub plugin, ...) https://github.com/ChrGri/DIY-Sim-Racing-FFB-Pedal
Control Board and Power Board design https://github.com/gilphilbert/DIY-Sim-Racing-FFB-Pedal-PCBs

Support the team

We ❤️ doing research. New hardware (e.g. oscilloscopes, logic analyzers, servos, PCBs) is very expensive. Feel free to support us and thus fasten up the research activity.

Dev captainchris tcfshcrw gilphilbert
Buy me a coffee
Ko-fi ko-fi ko-fi ko-fi

License

Shield: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

CC BY-NC-SA 4.0

The reason for that license selection is that at some point in time, individuals start

  • to steal the sources and binaries and sell them on the internet
  • mass production of FFB pedals in their living rooms to make money by taking parts from this project and Simucubes design files.

All that, without contributing anything to this project.

Motivation

Originally, I built my DIY FFB pedal from metal parts. After using it some time, I got curious whether I can come up with a mechanical design that can be mostly 3d printed and is still rigid enough to withstand the heavy loads accuring in simracing. Furthermore, I wanted to reduce the weight of the components, hopefully seeing a positive impact in the pedal response time. This repo documents the journey of doing that.

The 3D printed design is in use since 07/2024 and doesn't show any signs of wear on my side.

Problem

Usually metal is much stronger than plastic and FDM 3d printed parts are weaker than injection molded counterparts.

Solution

Create a mechanical design, which takes into account the weaknesses of using FDM 3d printed pedal parts and make them strong at weak spots.

Here is a description of the design choices:

To minimize torsional force on the vertical pedal arms arising through pedal activation, the upper loadcell joint is placed at similar height as the pedal face plate centrum. A deeper analysis of the pedal kinematics can be found here.

Since the upper loadcell joint is located rather high, a SFU1610 spindle with 10mm pitch was selected to allow fast pedal movement. Lower pitch spindle could provide more torque and thus axial force but at the cost of reduced movement speed. Also, the SFU1610 spindle typically emmits less noise and feel smother than 1605 spindles.

The linked linear guide was selected, since it has 30mm M4 bold pattern, which works perfectly fine with the SK12 blocks (32mm spacing, 6mm holes). 100mm stroke length is more than needed. 75mm or even 50mm might be sufficient for some users. Alternatively these linear guides are really nice too and even can be ordered with covers, but are more expensive and use 30mm M5 bold pattern which cannot be used out of the box with the SK12 blocks.

The loadcell joints are from off-the-shelf SK12 shaft supports. They are easy to source, reasonably cheap and therefore a good buyout option. Since they are made from matel, they are likely stronger than your bones.

The beefy loadcell was choosen, as it has a M12 thread, which allows easy connection with the M12 ball joint. These loadcells are nice too, but would require adapters or redesign of the loadcell arm.

The pedal arms have a certain width to it, to reduce flex, when pedal force is applied off-centre.

As a base-plate a 2080 aluminium extrusion was chooses as it allows easy screw on of attachments as well as easy and flexible attachment to the simrig.

As a FDM material I choosed PETG-CF, since the carbon fibre particales make the parts supper stiff and the PETG gives good layer bonding while having a better heat resistance than PLA.

Overview

Mechanical design

The mechanical design is depicted below
DiyFfbPedalAssembly v61

image

Electronics

Control PCB

The embedded code of this DIY FFB pedal runs on an ESP32 S3 microcontroller. The PCB design was developed to prove the concept. It holds the ESP32, the ADC, a RS232 transceiver, brake resistor circuit and connectors. Currently, version 5 of this PCB design is used.

Here are images of the plain PCB:

Here is an image of the assembled PCB:

The biggest changes over the previous board generations are listed below.

Waveshare ESP32 S3:
The V3 PCB was designed to hold a regular ESP32 dev board. The V4 PCB was designed to hold a ESP32 S3 dev board, which can output native USB HID reports. The S3 required to use two USB cables for stable serial and USB HID output, see.

Since using two USB cables isn't nice, the switchover to the waveshare ESP32 S3 was taken, since it features a integrated USB hub.

RS232 communication:
In previous board iterations, a simple level shifter was used to transform the RS232 voltage to the TTL voltrage levels of the ESP. This selection requires to follow a specific boot order sequence (first servo, second ESP) to not trigger servo alarms. It was later found, that using a proper RS232 tranceiver is the better choice. Changing to the tranceiver removed the servo alarms. No specific boot sequence is necessary.

The interested reader can find additional information about the iSV RS232 communication here.

Brake resisor design:
Depending on the load direction, the servo will act as a generator. It will produce an additional (reverse) current flow from the servo to the PSU, which could trigger the over-voltage protection of the PSU and the servo. To prevent this, a two stage brake resistor design was developed

  1. The iSV57 has a "bleeding/braking resistor" method to dissipate the current flow as heat and thus reduce voltage spikes causing overvoltage protection trigger. The method will be activated when a predefined bus voltage is exceeded (currently 40V). A plot of the voltage fluctuations can be found below:

2) Especially at long pedal strokes, the dissipation capacity of the iSV's "bleeding/braking resistor" can be exceeded. To prevent overvoltage triggers, an additional external brake resistor was introduced. The external brake resistor is automatically triggered by the ESP, whenever the voltage of the bus exceeds a certain threshold, thus dissipating additional electrical energy. The brake resistor circuit is closed with the help of a FR120N mosfet. The mosfet activation is indicated by a red led, as depicted below

Alt Text

To order the PCB, follow the instructions.

HINT: The proposed PCB is easy to source, but requires manual soldering. The awesome user gilphilbert designed a PCB assembly of the control board which can be found here. It's currently beeing tested. The current status is published on the discord channel.

Wiring

The wiring is depicted in the image below
Wiring

The Stepperonline documentation suggests to use AWG16 wiring.

BOM

Given prices are just indicators. Sellers regularly offer discounted prices, e.g. I paid for the iSV57 60€, for the linear rail 46€.

Disclosure: Some of the links below are affiliate links, which means we may receive a commission at no cost to you if you make a purchase. By using the provided links, you help me buy tools or hardware for further investigations.

Mechanical parts

Larger parts

Part Info Quantity Price Amazon link Aliexpress link
SK12 4 pieces 4,50€ link link
608zz bearing 2 pieces 5€ link link
Linear guide SFU1610, 100mm stroke 1 piece 60€ link
2080 profile 400mm length 1 piece 15€ link link
M12 ball joint All right handed thread 2 piece 11€ link
M8 threades rod one piece ca. 110mm length 2€ local hardware store link
M12 threades rod two pieces a 45mm + two pieces a 55mm 2€ local hardware store link
M8 self locking nut 2 pieces 0,50€ local hardware store
M5 t-nut 8 pieces 3€ link link
FDM filament ca. 300g 25€ link

Srews/bolts:

Size Info Quantity Price Link
M4x10mm 8 pieces 0,50€
M4x15mm 8 pieces 0,50€
M5x10mm 4 pieces 0,50€
M5x25mm 4 pieces 0,50€
M5x30mm 10 pieces 0,50€
M4 washer 4 pieces 0,50€

Electronics:

Apart from the mechanical parts, more electronical parts have to be ordered. Please conduct the software/electronics repo and the discord for help first, to see if electronic parts are still up to date.

Generic parts:

Part Info Quantity Price Primary link Secondary link
iSV57T-130S shorter version ("130s") is prefered. If the longer version ("130") is cheaper, buy this and cut the motor shaft to appropriate length with a metal handsaw. Alternatively the 180s servo is a bit stronger and not selled out that often. 1 piece 90€ 130s link 180s link
PSU 1 PSU can power multiple pedals (2 at least) 1 piece 25€ link
Loadcell 200kg 1 piece 20€ link link
Servo debug port connector Female, 5P 1 piece 1€ link

Control PCB:

The components for the V5 PCB are listed below.

Part Info Quantity Price Amazon link Aliexpress link
Control PCB Ordered from JLCPCB 1 unit per pedal 18€ link
ESP32 S3 waveshare 8MB-Not Soldered 1 13€ link link
ADS1256 1 unit per pedal 4€ link link
SP2323 Single channel 20x16 1 1€ link link
SR5100 Schottky diode 1 diode per pedal 1€ link link
FR120N mosfet 100V 1 per pedal 1€ link link
5 Ohm 5W resistor select 5R 1 per pedal 1€ link link
Wire (AWG 18) power wire 0.2m 5€ link link
Wire (AWG 30) to connect the control electronics 0.2m 5€ link link
2.54mm pitch screw terminals 5 pin (2pin + 3pin) for loadcell to board 1 per pedal 6€ link link
XT30 connector angled 1 male connector per pedal link link
Pin header optionally, select female 1€ link link

Alterations

Here are some nice upgrades.

608zz to KP08 bearing

Instead of the 608zz bearing, one can also buy two KP08 bearing blocks and take the bearings from there. The benefit is, that they have a screw flange to remove any play between bearing and axis. An example assembly is depicted below:

image.

JKK rail

I'm currently using a JKK60-10-P-150-A1-F4-C-M on my trottle. It's noticeably quieter than the Aliexpress guide. However, it was almost 5 times as expensive inlcuding shipping and taxes. To hold the JKK rail, a 3d printable adapter is used, which can be found [here](CAD/JKK_rail_chris/Jkk_to_2080_adapter v1.stl).

DYLY-107 loadcell

Instead of the beefy loacell, smaller ones can be found here. No immediate performance upgrade was observed.

The thread of the DYLY-107 loadcell is M8. The beefy loadcell has a M12 thread.

Needed changes:

  • Instead of using a SK12, a SK8 block fits well, e.g. link
  • balljoints: switch to M8 type balljoints, e.g. link
  • The remaining M12 rods have to be exchanged by M8 versions.

List of printed parts

The print orientation was choosen manually. Support was activated only for the part PedalArmLowerBar.stl.

Part Quantity Required
608zzHolder 2 yes
CncModuleHolder 2 yes
CncModuleHolderLeft 2 yes
Faceplate 1 yes
PedalArmLeft 1 yes
PedalArmRight 1 yes
PedalArmLowerBar 1 yes
PedalArmUpperAdapter 1 yes
PedalSideGuard 1 no

To close the 2080 extrusion front/back, the following part was printed twice:
2080 profile cap

To cover the PSU channels, thr following thing was used (recommended to print at 101% scale, since it was designed with 0% tolerance):
https://www.thingiverse.com/thing:5158578

An adapter to mount the PSU to 4040/4080 aluminium extrusions can be found here:
STL
CAD

It requires the following screws:
4x M4x8mm
2x M5x15mm
2x M5 t-nut for 4040 profile

Print settings

I printed with 10 perimeters, 10 top/bottom layers, 20% infill. 270°C hotend temperature, 70°C heated bed temperature.

Assembly instructions

Mount CNC guide to 2080 profile with:
4x M4x10mm
4x M5x25mm
2x printed "CncModuleHolder"
2x printed "CncModuleHolderLeft"

Mount pedal plate to pedal arms:
8x M5x30mm
2x SK12

Mount 608zz adapter to 2080 profile:
2x printed "608zzHolder"
2x 608zz bearing
M8x100 rod
4x M5x10mm

Mount SK12 to linear guide:
4x M4x15mm
4x M4 washer
2x SK12

Mount iSV57 to linear guide:
4x M4x15mm

Loadcell:
2x M12x55mm threaded rod
2x M12 nut

Loadcell to SK12:
2x M12x45mm threaded rod

Tips

To reduce any play in the system, I wrapped some layers of teflon wrap around the threaded rods and pushed the 608zz bearings and ball rods over it.

Analysis results

To test the mechanical design, following test were conducted:

Strength test

To be done!

Perhaps FEM analysis

Control loop test

To be done!

Compared to the stainless steel pedal plate, the pedal feels more responsive. Need to verify that by e.g. plotting the closed loop step response here.

Todo:

  1. Weight the parts/pedals.
  2. Draw dimensions
  3. Capture step respose

CAD resources

Linear guide
https://grabcad.com/library/sgx-linear-module-1

608zz
https://grabcad.com/library/608-skate-board-bearing-1

iSV57
https://www.omc-stepperonline.com/de/nema-23-integrierter-easy-servo-motor-130w-3000rpm-0-45nm-63-73oz-in-20-50vdc-buerstenloser-dc-servomotor-kurze-welle-isv57t-130s

SK12
https://grabcad.com/library/sk08-shaft-support-1

2080
https://grabcad.com/library/2080-aluminium-extrusion-european-standard-t6-1

M12 female rod end
https://grabcad.com/library/female-rod-end-m12-1

Loadcell
https://grabcad.com/library/m12-threaded-s-type-tension-compression-load-cell-1000kg-1

Order PCB

  1. Download the control and power PCB, e.g. control PCB V3
  2. Navigate to https://jlcpcb.com/
  3. Upload the gerber files
  4. Leave the standard settings (2 layers, FR-4, 1.6mm, PCB color of your choice, see image below), check which delivery options is the cheapest
    image
  5. Oder the PCB
  6. Wait for the delivery. Typically 10 days to europe.
  7. Solder the electrical compontens onto the PCBs. Refer to the assembled PCB images from above. A good soldering iron makes your life easier. I like TS80 and [TS101]https://s.click.aliexpress.com/e/_DkVMKwN) soldering irons.
  8. Soldering tips can be found here.

Star History

Star History Chart