For the last 6 years I have been running on a NordicTrack C1750 treadmill. This is a great machine: sturdy, powerful, quiet and has an amazing ventilation system. Its weak point is the software: buggy, slow to boot and, worst of all, with basic features (such as customized programs) blocked behind a monthly iFit subscription.
Since the treadmill is now out of extended warranty I’ve decided to take a stab at replacing the software with my own. Hacking the on-board computer was not a real option, as I have no access to any technical information on it. Instead, I chose to replace it with a Raspberry Pi 4 running QNX.
Luckily, almost all treadmills are controlled by a few standard boards for which there is enough information to get started. Mine has an MC1648 model, which is pretty much the same as the more common MC2100. Note that the control board is separate from the console computer. The board is located at the head of the running deck and is responsible for powering and controlling both the belt motor and the incline motor. It also provides power to the on-board computer, which is housed in the central console, next to the touch screen. A header on the control board is used for connecting it to the computer via a multi-wire cable running through one of the arms holding the central console. These wires are (in order):
The motor speed is determined by a 20Hz PWM signal fed into the control board. When using the Raspberry Pi PWM generator it is important to select the M/S option to get a proper square wave at 20Hz, and not the default PWM option that is more adequate for simulating an analogue signal. To determine the PWM duty cycle values for various speeds I experimented by measuring the length of the belt, marking a white line on it, and then using an IR LED and receiver as a speedometer. This setup proved to be adequate for testing, but did not work properly once I tried running, due to what appears to be electrical interference that I couldn’t fix.