Skip to content

MPF config file reference: FAST Pinball Servos

MPF 0.57 Configuration Reference for FAST Pinball Hardware

This page is parrt of the reference material for users of the Mission Pinball Framework and FAST Pinball hardware. If you're new to MPF and FAST, read the MPF + FAST overview first. If you are a programmer writing your own software, see our Developer's Reference Guide.

Note that this guide only applies to MPF 0.57. If you're using MPF 0.56 or older, then the FAST Pinball configuration section of the Mission Pinball website has everything you need.

The FP-EXP-0071 expansion board has 4 servo ports. This guide explains how to configure servos connected to FAST Pinball Expansion Boards in MPF.

Expansion Board Servo config in MPF 0.57
# config_version=6

                model: FP-EXP-0071

        number: playfield-1 # (1)!
            min_us: 500
            home_us: 1500
            max_us: 2500
            max_runtime: 2s
        number: playfield-3 # (2)!
  1. "playfield" exp board, servo 1
  2. "playfield" exp board, servo 3

All of the standard MPF servo settings work as expected and are not covered here. What is covered here are the settings specific to FAST Pinball servos.


The servo number is simple. It's the expansion board name, a dash, and the port number (1-4). So if you have a servo connected to the "playfield" expansion board, and it's connected to port 1, then the number is playfield-1.

Using the platform_settings: section:

All of the MPF servo settings use floating point numbers from 0.0 to 1.0. The specific settings you can dial in via the platform_settings: section relate to how those limits are translated to the actual servo's pulse width which is measured in microseconds. (The microsecond character is µ which is hard to type, so most people use us instead.)

Your servo documentation will probably be wrong

We played with a lot of different servos while developing the FAST expansion board and MPF support. We found that the documentation for the servos we used was often wrong. For example, the docs would say a servo uses a range of 1000-2000 for the full 180 degree motion, but in reality it was 500-2500. etc. So if you're having trouble getting your servos to move the way you want, try playing with these settings.


The microsecond pulse width used to send this servo to its minimum position. The default is 1000.


The microsecond pulse width used to send this servo to its home position. The default is 1500.


The microsecond pulse width used to send this servo to its maximum position. The default is 2000.


How long this servo will run before it's automatically stopped. After this amount of time, the servo will be de-powered which will generally extend its life. (What happens under the hood is when a servo position is changed, the expansion board will send a continuous stream of pulses which will cause it to move to that position, and then it will stop sending pulses when this limit is reached. For example, if you set max_runtime: to 2 seconds, the pulses will stop after 2 seconds.)

So figure out how much time it takes for your servo to move from its minimum position to its maximum position, and then set max_runtime: to a little bit more than that.

The default is 2 seconds. Max is 65525ms (65.5 seconds).

N or > jump the next page, P or < for previous, search with S or ?