Tag Archives: Proform

MC-2100 Motor Controller Board

MC-2100 Motor Controller Console for Arduino Uno

My fancy NordicTrack iFit treadmill recently greeted me with a blank screen when I switched it on. (No, it wasn’t a victim of the iFit bricking debacle. The console just up and croaked). I was saddened (but not entirely shocked) that neither a replacement console nor parts for it were available. The motor controller board checked okay when tested with a PWM source and 1.5V battery (see below).

I first tried to repair the fried console. Aside from some community created reverse-engineered schematics, I could not obtain service manuals or any other technical documentation for it. I traced the issue to a bad Android MCU that I couldn’t fix or source a replacement for.

Anyway, I was never a big fan of iFit, preferring to run the treadmill in manual mode 99% of the time. So I decided the better course of action was to build my own console, with the following goals:

  1. Full support for the popular MC-2100 motor controller, which is used in NordicTrack, Icon and Proform exercise equipment
  2. Buildable for < $25. Runs on Arduino Uno R3 or compatible MCU.
  3. Open source
  4. Fully customizable controls
  5. Future support for FTMS (FiTness Machine Service) protocol, allowing integration with numerous fitness applications like Zwift. I would welcome some collaboration for this part.

There are generic treadmill controllers available from sites like Aliexpress that replace both the console and motor controller board as a set. The disadvantage of this solution is cost ($150+ for a decent unit) and lack of flexibility. I’m also guessing the genuine MC-2100 boards are more robust.

Assembly

Before I jump into build details, please note that this is experimental pre-production software. The user is responsible for implementing safety controls, including an emergency stop switch.

That said, let’s jump right into a build. These instructions assume you’ve already installed the Arduino IDE:

  1. Download the MC-2100_Treadmill_Controller_Console.ino sketch from Github.
  2. Install the TimerOne, Wire and LiquidCrystal_I2C libraries in your Arduino IDE
  3. Upload the sketch to an Arduino Uno or other compatible board with 5V logic.
  4. Follow this wiring diagram for connections:
MC-2100 Motor Controller Console Wiring Diagram
MC-2100 Motor Controller Console Wiring Diagram

Parts list:

IDDescriptionUno PinsNote
UnoArduino Uno R3Or compatible 5V board
LCD12-line I2C LCDA4, A5Adjust address in sketch if necessary. Default 0x27
R1, R22.4K resistor2, 3Pull-up to +5V. Use instead of internal pull-up resistor.
R3, R5, R6, R7220 ohm resistor4, 10, 11, 13
R41K resistor9
LED1, LED2LEDOptional, but helpful for troubleshooting
SW2, SW3Momentary switch7, 8Incline up/down. Can use one SPDT switch instead if desired. Auto style switches work nicely.
SW1Toggle switch12
POT110K PotentiometerA0Can be either slide or rotary style
PCB1Proto ShieldRecommended for wiring convenience
HD1JST-XH ConnectorOptional. For connecting to treadmill wire harness, if desired.
MC-2100 Motor Controller Console Bill of Materials
PinColorFunction
1Blackground
2Red12V
3Green5V PWM belt speed control
4Bluebelt tach to console (2.4K pullup resistor required; see wiring diagram)
5Orangeincline up (1.5 – 5V relative to pin 6, not ground!)
6Yellowincline down (1.5 – 5V relative to pin 5)
7Violetincline pulse (when moving, 3 pulses per degree of incline. Use a 2.4K pullup resistor.)
8Blk/Whground (unconfirmed reports say this also carries signal info on some models)
MC-2100 HD2 Connector Pinout

Build notes:

  1. If you build the circuit on a proto board, there’s plenty of room to include test controls, if desired. Note that the development board I built has incline and run/stop switches, test points and a speed pot in addition to connectors for external controls.
  2. The LEDs and associated resistors R3 and R7 are optional. R4, R5 and R6 current limiting resistors are recommended even though the circuit will work without them.
  3. R1 and R2 pull-up resistors connect to the transistor side of opto-isolators on the MC-2100. You will need to stay close to these values to get a good pulse signal.

Operation

The current software has these limitations, which will be addressed in a subsequent release:

  1. The speedometer is slow to respond to changes and may intermittently display an incorrect speed.
  2. Incline position is not saved to EEPROM. You must return the treadmill to zero degrees incline before switching it off.
  3. Incline and speed calibration functionality needs to be added. Currently, settings need to be changed in the sketch.

Here’s how my assembled console looks now. Not pretty, but it works! I want to try reverse engineering and utilizing the stock controls when time permits.

Budget Treadmill Console
Budget Treadmill Console