ExacT force feedback steering wheel

The ExacT is an affordable precision force feedback sim racing wheel platform with open source hardware/software

Similar projects worth following
The ExacT is a sim racing wheel designed to provide the track-feel of an expensive direct drive wheel, without the price-tag of some of the other direct drive wheels on the market. The current Bill of Materials is currently at less than $400*. This project was inspired by this thread on*BOM not official until the project is complete, obviously. Unexpected cost may arise.

Here is a demo of what I have working so far

The motor drive system is composed of a 12NM NEMA32 stepper motor.,off the shelf TI development boards, a custom phase current sensing board, custom firmware,  and a US Digital 5000 PPR (20000 CPR) encoder. 

The software uses Field-Oriented Control to, with the help of the encoder, precisely control  the magnetic flux vector so that maximum torque with minimal ripple is achieved. 


Excel Spreadsheet for FOC of stepper motor

sheet - 26.81 kB - 02/08/2018 at 04:41


  • Plotting

    John Taylor05/04/2018 at 02:09 0 comments

    Today I finally got back to the project a little bit. I got the basic plotting functionality for the phase currents implemented and it looks pretty good. Hopefully later this week I can make the plots a little nicer and add labels, then start working on getting the controller math worked out and tuning. The github for the python plotting libraries can be found here :

  • Testing complete...on to firmware development

    John Taylor04/06/2018 at 22:31 0 comments


    Wow, it's been a while since this project has gotten an update. After a long hiatus, I have finally completed the assembly and testing of the current sensing booster-pack. The only problem i ran into was one of the tiny 0402 caps was shorted because of a poor soldering job. I was able to fix that easily enough, and since I tested for continuity between power and ground before actually powering the board I didn't break anything. I also modified the firmware to use the new ADC channels that the booster pack feeds into. To verify, I was able to apply voltages to each of the motor phases and see the correct current output in the ADC registers.  Over the last couple of days I have been working on a task-scheduler that I can use to do various tasks at fixed rates using one timer.  I used this blog post as a template, but since I am using C++ I am doing things a little differently. Check the github if you are interested. I will use this for my control loops as well as data transfer to a host-PC (more on that later...)

    Whats Next?

    The obvious next step is to start working on the controller. We very obviously need current controllers for both the A and B phases.  In my experience developing control systems, ones job becomes much easier if he/she is able to see an output of the control signals as well as the setpoint in order to do step-response test, see errors in real time, etc. My plan is to develop a GUI in Python that communicates with the motor control processor to facilitate this. This GUI will make tuning and validating the system much easier. I usually use Java for this sort of thing, so I am excited to see what Python brings to the table. Once the GUI is working I'll implement the PID controllers for the current control system and start testing. 

  • Current Sensing board 99% assembled + Test Plan

    John Taylor02/28/2018 at 19:52 0 comments

      I received the phase current sensing PCB from OSHPark on Monday. I finally got around to assembling it today. Here are some pics.

      If you look closely, you will notice that U2, one of the isolators, is missing. Unfortunately I forgot to order this part from digikey and I'll have to wait for it to come in.  There were a few problems with the board. I used really tiny 0402 resistors and capacitors and from an assembly perspective this made things tedious. I also forgot to put a package outline and a pin-1 callout on the current sense amps so I had to reference the Altium file to figure out which way they needed to go on the board. 

      Test Plan

      1. Make sure no power nets are shorted to ground (done)
      2. power board on (done)
      3. Check Vref (done)
      4. Apply i known current through the channels and make sure it shows up on the output of the op amp (done)
      5. Check all of the digital signals to make sure they are working (done)

      I probably wont get to this until late next week because I'm going to be out of town.

  • Current Sensing PCB is ordered

    John Taylor02/11/2018 at 21:44 0 comments

    After a few weeks of tinkering, I finally finished the PCB that will allow me to sense the phase currents of the stepper motor. The phase output wires of the motor driver board plug into one side and feed the motor current through 5mohm resistors. Special kelvin connections that I learned about from this article were used to improve the measurement accuracy at high-currents. INA240 current sensing amplifiers from TI were used for their enhanced PWM rejection. With these components I should be able to sense currents from -16.5-16.5A. Isolators were added to isolate the motor driver processor/power circuitry from the STM discovery board. I have also added connector ports to route the encoder and PWM signals to the STM discovery board. This board has a standard booster pack layout and will plug directly into the C2000 launchpad.

  • Update

    John Taylor02/08/2018 at 04:39 0 comments

    I have been working on the project for almost a month now and have accomplished a bunch, and also ran into a few problems.  


    • Sourced motor, encoder, motor driver,wheel rim, game controller interface board (STM32) and motor controller processorboard (TI C2000)
    • Mounted the encoder to the back of the motor with a 3D printed adapter. I had to machine a hole in the back of the motor case in order to have access to the shaft. I then drilled and tapped mounting holes and mated the encoder shaft with the motor shaft via an adapter. (pics)
    • Mounted the wheel rim to the motor output shaft with a 3D printed coupler (pics)
    • Wrote software to set up the Motor Controller Processor to talk to the Motor Driver/send PWMs and wrote a basic stepper motor algorithm to spin the motor up to about 300RPM
    • Researched Field Oriented Control for Stepper motors extensively and made an excel spreadsheet detailing and graphing the desired current in each of the motor coils in one electrical cycle. (Great PPT on the subject)
    • Got MMos set up on my STM32 dev board and got my FFB-less wheel to control a car in IRacing. (video

    I have however ran into one big challenge. The DRV8301 Motor Driver Booster pack from TI uses low-side current sensing. Because of the topology of the motor I am using, the sensors on the low-side of the inverter do not provide enough information to determine the phase currents. For this reason I have been working on a custom phase-current sensing booster pack that the motor leads will pass through on their way to the motor. This booster pack will plug directly into the launchpad dev board and provide the phase current information that I need for FOC. 

    The plan moving forward is to order the PCB in the next couple of days. As soon as i receive the PCB's I will test them and begin writing the FFB code. 

View all 5 project logs

Enjoy this project?



matthew.gregg wrote 05/01/2018 at 11:40 point

Hi John, I have been doing some investigation after reading this. A thought has struck me that maybe it could be possible to use this  BOOSTXL pack from ti It has inline current sense and is compatible with the launchpad eco system. I see that there would be a extra need for encoder input, but that should be a relatively simple circuit.  I have most components for this project now, Including a NEMA34 13NM stepper.  I'm currently having nightmares with TI CCS, but slowly this software stuff is coming back to me.

  Are you sure? yes | no

John Taylor wrote 05/01/2018 at 14:40 point

Matt, it would definitely be possible to use that booster pack. It is actually the same design I based my phase current sense board on. It seems like TI only recently started selling it however. Because when I found the reference design a couple months ago it was not avalilable for purchase. Feel free to message me with any problems you have with CCS. 

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates