Tagged: PWM Controller Toggle Comment Threads | Keyboard Shortcuts

  • schoolie 8:03 pm on May 22, 2013 Permalink | Reply
    Tags: , Arduino Compatible MC-2100 Controller, , DIY Arduino, , Lathe Tachometer, , PWM Controller   

    Arduino Compatible MC-2100 Controller and Lathe Tachometer 

    The completed circuit in operation

    After getting the simple 555 based MC-2100 driver circuit working, we moved on to a controller with more features. I’d been looking for an excuse to make an arduino-compatible board (here’s a description if you’re not familiar), and this seemed like the ticket.

    The initial spec for the controller included the following functions:

    • Read user input from potentiometer
    • Send the 50ms period PWM signal to the MC-2100
    • Sense the lathe’s spindle speed using a magnetic reed switch or equivalent
    • Display the spindle speed on a 7 segment LED display

    At this point, the controller meets the requirements laid out above. I’ll discuss the implementation of each feature into the controller in the order listed above.

    (Read the rest of this post…)

     
    • Grant Brown 8:44 am on May 28, 2013 Permalink | Reply

      Hey, thanks for this. I had a broken treadmill in my basement with one of these controllers in it, and your blog was the only info I could find on the pinout of the MC2100.

    • richard caput 4:05 pm on September 2, 2014 Permalink | Reply

      Excellent job on all this man, ive been hunting alot of similar topics to you as i have seen your digital “breadcrumbs” all over the web from you hunting down a burnt out resistor to your footpedal mod and now this work of art up there, looks awesome man but i suck at electronics and all i want to do is get my effn atlas 10″ spinning on this 2.5hp, i ran it on an mc60 for awhile, fried after a month, ran another mc60 burnt in 2 weeks, stumbled across an mc2100, circuit board got cracked in my backpack leaving the dump B^D , ordered arduino and as soon as it got here hooked it up to the mc2100 (arduino to wall wart, uploaded all your code to arduino and jujst deleted multiplexing call the kept halting compile, hooked both to common ground, red wire to 100k pot, wiper to A0, .47ceramic wiper to G, and like magic the arduino temporarily dissapeared in a puff of smoke. threw it in corner and ordered another. so here i sit with another arduino a whole lot of parts and im hoping you will tell me a very simple way i can hook a pot to this arduino andthe mc2100 and fill my atlas with no more than 120vDC Brush burning Fury! seriously though real paranoid to screw this up again, just need my damn lathe running so i can start hammering out my todo list.

      • schoolie 1:37 pm on September 8, 2014 Permalink | Reply

        I think this circuit should work with the code you’ve already used. You should be able to run it by simply commenting out the multiplex7seg library as you have before. You’ll notice the arduino is getting its power and ground from the MC2100 directly, it shouldn’t be plugged in to the wall or the USB port any time the MC2100 is plugged in.

        Simple Arduino Circuit
        Bigger Version…

        The on/off switch on pin 13 should be optional, I’m pretty sure it defaults to ON if nothing is connected.

        In an attempt to diagnose your earlier problem, when you say you hooked the red wire to the pot, do you mean the red wire from the MC2100? If so, depending on the position of your potentiometer, you may have applied 12v to the analog pin of the arduino, which could cause the smoke you mentioned :). The pot needs to be hooked up between a 5v source and ground, as shown in my schematic.

        Let me know if you have any more questions. Good luck!

        • Richard Caput 7:09 pm on September 10, 2014 Permalink | Reply

          Wow, thanks man this actually worked without me frying anything, i think it also goes down as my first time being truly thankful to anyone whos schooled me over the internet. My best regards to you and if you ever need a part run thats too big for your RF i work for a machinist who gives me time on his jet bridgeport clone shoot me an email and ill try to repay the favor.
          btw, i did hook the red from mc2100 to the arduino, i think the chip is fine but the board is shot, got a cheap chinese knockoff for $4.00 on ebay and other than the $26 still in my wallet it seems to me identical… Cheers!

          • Richard Caput 7:25 pm on September 10, 2014 Permalink | Reply

            Also! i have a few real pretty SKF AC (reversible) gearmotors from an invacare hospital bed identical to this http://tinypic.com/r/dxflup/8 do you see any reason why i couldnty drive this motor with the incline circuit from the mc2100 and can you think of a way i could control the speed? i would like to use it to drive my leadscrew instead of this prehistoric rubics cube of a gearbox with the atlas? I use two of these motors for powerfeed on my RF clone at home with the hospital bed controller 🙂 so they are more than powerful enough i just dont want to fry the MC by putting too much (current)? through it. thanks again!

            • schoolie 11:25 am on September 11, 2014 Permalink | Reply

              I’m glad that worked for you! Happy to help.

              I’d guess you could simply connect your motor to the incline motor terminals. The incline motor on the treadmill is a small reversible AC motor (I think). Current rating… no idea. If it does fry something, that part of the circuit is independent of the main motor circuit, so you should be OK. Never tried it though, so do so at your own risk 🙂

              To control the motor direction, I’m pretty sure applying 5v to pin 5 or 6 of the MC2100 connector (orange and yellow wires) one at a time will select fwd or rev. You can see the incline motor circuit in the MC2100 schematic (left-center) at the bottom of this post.

              • chris 5:18 am on June 16, 2017 Permalink | Reply

                hi as a new arduino user, can you explain what you mean by comment out multiplex 7seg? do i find all headings with this and erase? thanks chris

        • Patrick Nolan 4:18 pm on May 29, 2016 Permalink | Reply

          This circuit worked great with my 2100E board, i used a very chopped down code, variable pot, works perfectly to control on off state of relay in my emi device, and speed, thanks very much for this post, i was a bit frustrated with trying to get the board to operate. hope this helps somebody else.

          #include

          /*
          MC-2100 Treadmill Motor Controller Interface
          Lathe Motor Controller via PWM
          Seven Segment Tachometer
          ON/OFF Toggle

          Joe Schoolcraft
          Brian Schoolcraft
          May 2013
          https://sonsofinvention.wordpress.com*/

          #define POT_READ A0 //Wiper of pot connected as voltage divider (Speed Command)
          #define PWM_OUT 9 //Connected to blue wire of MC2100 (50ms period PWM out)
          #define ON_OFF 13 //On/Off Switch Input

          #define PWM_CYCLE 50.0 //Output Signal PWM Period (50ms)

          #define POT_DIF 4 //Change detection threshold on pot
          #define MAX_DUTY 869 //Max Duty Cycle expected by MC-2100 (85% of 1023)
          #define MIN_DUTY 0 //Min Duty Cycle expected by MC-2100 (0% of 1023)

          int potTemp;
          int potValue;
          int lastPotValue;
          int potCheck;
          int speedLevel;

          byte onOffState = 0;

          void setup()
          {
          pinMode(POT_READ, INPUT);
          pinMode(PWM_OUT, OUTPUT);

          Timer1.initialize(PWM_CYCLE*1000); //Set pin 9 and 10 period to 50 ms
          Timer1.pwm(PWM_OUT,25); //Start PWM at 0% duty cycle
          }

          void loop()
          {
          //Read and condition pot value
          potTemp = analogRead(POT_READ);
          potCheck = abs(potTemp – potValue);
          if(potCheck >= POT_DIF) { //Only accept new value if it’s far enough from the current accepted value
          potValue = potTemp;
          }

          speedLevel = map(potValue,0,1023,0,MAX_DUTY); //Convert Pot input to pwm level to send to MC-2100

          if (onOffState == LOW){ //Off
          Timer1.setPwmDuty(PWM_OUT, speedLevel); //Shut down MC-2100
          }

          if (onOffState == HIGH){ //ON
          Timer1.setPwmDuty(PWM_OUT,speedLevel); //Send speed command to MC-2100
          }
          }

          • FaMan 7:52 pm on January 22, 2017 Permalink | Reply

            I tried the above with an Uno board and the simplified circuit farther above, except I moved the switch connection from pin 13 to pin 12, and used a 0.22uF cap on the speed control pot (because that’s what I had). As written, the switch doesn’t work; it needs onOffState from the debounce function and both on and off are running the motor. I was pretty happy, it was my first ever Arduino project but it certainly won’t be the last. The working code is below:

            /////////////////////////////////////////////////////////////////////////////////////////////////
            #include

            /*
            MC-2100 Treadmill Motor Controller Interface
            Lathe Motor Controller via PWM
            ON/OFF Toggle

            Original from
            Joe Schoolcraft
            Brian Schoolcraft
            May 2013

            Arduino Compatible MC-2100 Controller and Lathe Tachometer

            Updates to make it work and add debounce FanMan 170122
            */

            #define POT_READ A0 //Wiper of pot connected as voltage divider (Speed Command)
            #define PWM_OUT 9 //Connected to blue wire of MC2100 (50ms period PWM out)
            #define ON_OFF 12 //On/Off Switch Input
            #define TO_LOW_DELAY 50 //Debounce time for HI to LO switch transition
            #define TO_HIGH_DELAY 50 //Debounce time for LO to HI switch transition

            #define PWM_CYCLE 50.0 //Output Signal PWM Period (50ms)

            #define POT_DIF 4 //Change detection threshold on pot
            #define MAX_DUTY 869 //Max Duty Cycle expected by MC-2100 (85% of 1023)
            #define MIN_DUTY 0 //Min Duty Cycle expected by MC-2100 (0% of 1023)

            int potTemp;
            int potValue;
            int lastPotValue;
            int potCheck;
            int speedLevel;

            byte onOffState = 0;
            byte lastonOffState = 0;
            unsigned long lastOnOffTime = 0;

            void setup()
            {
            pinMode(POT_READ, INPUT);
            pinMode(PWM_OUT, OUTPUT);
            pinMode(ON_OFF, INPUT_PULLUP); //Enable internal pullup resistor to simplify external circuit

            Timer1.initialize(PWM_CYCLE * 1000); //Set pin 9 and 10 period to 50 ms
            Timer1.pwm(PWM_OUT, 25); //Start PWM at 0% duty cycle
            }

            void loop()
            {
            //Read and condition pot value
            potTemp = analogRead(POT_READ);
            potCheck = abs(potTemp – potValue);
            if (potCheck >= POT_DIF) { //Only accept new value if it’s far enough from the current accepted value
            potValue = potTemp;
            }

            speedLevel = map(potValue, 0, 1023, 0, MAX_DUTY); //Convert Pot input to pwm level to send to MC-2100

            onOffState = debounce(ON_OFF, &lastonOffState, &lastOnOffTime, TO_LOW_DELAY, TO_HIGH_DELAY);

            if (onOffState == LOW) { //Off switch to ground is closed
            Timer1.setPwmDuty(PWM_OUT, 0); //Shut down MC-2100
            }

            if (onOffState == HIGH) { //ON switch to ground is open
            Timer1.setPwmDuty(PWM_OUT, speedLevel); //Send speed command to MC-2100
            }

            }

            ////////////////////////////////////////////////////////////////////////////////////////////
            /* Function for debouncing digital inputs

            Arguments:
            _debouncePin – ID of pin to be read/debounced
            lastReading – pointer to variable storing the previous reading (HIGH/LOW) of the input pin
            lastDebounceTime – pointer to variable storing the last time (ms) the input changed (not debounced)
            _toLowDelay – debounce time for HIGH to LOW transition
            _toHighDelay – debounce time for LOW to HIGH transition

            Returns:
            _state – debounced state (HIGH/LOW) of _debouncePin
            */
            ////////////////////////////////////////////////////////////////////////////////////////////

            byte debounce(byte _debouncePin, byte * lastReading, unsigned long * lastDebounceTime, int _toLowDelay, int _toHighDelay)
            {
            byte _reading = digitalRead(_debouncePin);
            byte _state = *lastReading;

            if (_reading != *lastReading) { // pin state just changed
            *lastDebounceTime = millis(); // reset the debouncing timer
            }

            if ((millis() – *lastDebounceTime) >= _toLowDelay && _reading == LOW) {
            // whatever the reading is at, it’s been there for longer
            // than the hold delay, so take it as the actual current state for use in the rest of the script
            _state = _reading;
            *lastReading = _reading;
            return _state;
            }

            if ((millis() – *lastDebounceTime) >= _toHighDelay && _reading == HIGH) {
            // whatever the reading is at, it’s been there for longer
            // than the hold delay, so take it as the actual current state for use in the rest of the script
            _state = _reading;
            *lastReading = _reading;
            return _state;
            }
            *lastReading = _reading;
            return _state;
            }
            ///////////////////////////////////////////////////////////////

            • twmaster 8:37 pm on February 2, 2017 Permalink | Reply

              When I try to compile this I get an error about missing includes. I’m assuming the Timer1 library is needed? What else?

              • FaMan 8:53 pm on February 2, 2017 Permalink | Reply

                Yes, you need the timerone library. Looks like wordpress stripped out anything with angle brackets in my code above thinking it’s html? The line should be (replace the parentheses with angle brackets:

                #include (TimerOne.h)

                You can download it from https://code.google.com/archive/p/arduino-timerone/downloads then you have to install it into your development environment.

                • twmaster 2:22 pm on February 3, 2017 Permalink | Reply

                  Any chance you could repost the code with code tags? Seems the HTML has loaded the code when copied with formatting stuff and breaks the compile. (sorry to be a pain)

    • Raff 11:57 am on October 9, 2014 Permalink | Reply

      Hi schoolie,

      been using these MC2100 posts as a guide for building a belt sander/grinder using a 2.5hp 90VDC motor and i snagged an MC2100-LS board to go with it, as the Livestrong board the motor had on the treadmill doesn’t seem to easy to reverse-engineer.. Seems to run beautifully using the bit-banging code from a previous post, but I am wondering about the reed-switch setup.

      You see…. the motor I have is an amazing little Johnson DC unit that actually has a reluctor wheel and sensor on the unit itself- the tone ring is mounted to the rear threaded hole on the motor spindle, and the sensor unit is attached to the side of the motor casing. It’s a 5vdc sensor- I believe it’s optical, and I can get more information on it, but how would you go about modifying your code or what can I do to use that instead of having to resort to a magnetic reed switch setup for finding motor speed?

      The MC2100 does have a “tach” pin header for the spindle speed sensor as far as I remember (it’s not with me at the moment, but I can verify soon).

      It would be awesome to have a similar setup, and in the future I would like to utilize a similar motor for something that requires reverse/dynamic braking as well. I have a metal fabrication business that I can find a ton of uses for these cheap (used) motors. Heck, the one I got was new and I picked it up for 50 bucks. Can’t beat that! Heck, I’d buy them new if I could get them to all work similarily. It’d be great to have a bunch of uses for the same motor on a bunch of tools and keep some backups/spares incase anything goes wrong.

      Thanks for all your open-source help on this great controller/motor combo.

      • schoolie 5:32 pm on October 10, 2014 Permalink | Reply

        That sounds like a nice little motor!

        If you can get the output of the speed sensor to pull a pin of the Arduino either LOW for each tooth passing by, you’re good to go. There are a few ways to do this, depending on how the sensor’s set up. If you can tell me a bit more about the sensor, I might be able to help.

        Once you’ve got the pulse train going into pin 2 of the Arduino, all it takes is modifying the following line of code with the number of teeth on the tone wheel:

        rawSpindleSpeed = 60000/(avgInterval*NUMBER_OF_TEETH)//convert to RPM

        On another note, the tach header on the MC-2100 doesn’t necessarily have to be hooked up, but if you can get a sensor that shorts to ground (like a reed switch) once for every ~2 motor revs (mount a single magnet on a step down pulley, etc.), the MC-2100 will perform closed loop control on the motor speed, maintaining a fairly constant RPM regardless of how hard you load it. Again, it will work without this, but it’s nice if you can swing it.

        • Raff 11:31 pm on October 30, 2015 Permalink | Reply

          Wow, almost a year since getting around to actually utilizing this thing now. I have some SSR’s on the way to configure an H-Bridge for reverse rotation and dynamic braking. I will update you on that in the near future. I didn’t want to use the arduino I had been using for another project, so I just got around to buying another Arduino that fits into the case.

          The speed sensor doohicky I spoke of earlier is an 80 tooth wheel rotating through an optical sensor (opto interrupter) that uses on 5v power. It has what looks to be two ground connections (which are pinned out individually, but have continuity and are right next to one another), a 5V connection, and an “OUT” connection on the board. Looking at most of the similar breakout board solutions available for arduino, they look identical, except those have 3 pins. so I’m guessing only one GND is required to have arduino interface with it.

          I’m going to send it the proper signals and see if I can get arduino to give me back a serial output of on/off and then transpose the code into your motor control code to see if i can get spindle speed. Once I get that working, Is it possible to just take the rawSpindleSpeed reading and then divide it by 2, and have one of the arduino pins pulled to ground in relation to that number so that the MC2100 gets the signal it wants for RPM control?

        • Raff 1:04 am on November 1, 2015 Permalink | Reply

          Ok, so i got the speed sensor working. If i spin it by hand, I can get it up to about 30rpm and its fine. I can do it endlessly. If I attempt to do the same by turning the motor up to 7% duty cycle, it will read the RPM and output it (using Serial.write) about 0-10 times before it stops refreshing the serial console. It’s almost as if the buffer overflows.

          The speed control still works, but the readout does not adjust/change. Any ideas what would cause that?

          • Raff 1:06 am on November 1, 2015 Permalink | Reply

            Adding to that, I have to physically unplug the arduino unit from USB and plug it in again and re-upload the sketch to get it to reset the serial console. I am not feeding the arduino with 9Vin power from the MC2100 because I am using the serial console to view the speed for now, so I am using USB to power the arduino at the same time.

            • schoolie 10:08 am on November 2, 2015 Permalink | Reply

              Do you have anything connected to Digital Pin 2? The way my code is written, Pin 2 is set up with an interrupt to look for the reed switch closing (line 90). If you leave it floating, static charges will trigger the interrupt randomly and mess up your serial communication. That might not be it, but it’s definitely worth checking.

              Dividing the spindle speed reading by two and sending to the MC2100 should allow it to do it’s internal closed loop control. The MC2100 functioned without it for me as well, but it doesn’t control itself quite as well.

              Check out the MC2100 schematic for details on how it expects to receive the speed signal. You’re looking for HD7 pins 1&2 in the middle of the page. If I’m reading it correctly, the output from the arduino should pull the HD7 pin2 to ground through about 2kohms resistance. However, the ground that’s being referenced is the floating ground the microcontroller uses (open triangle in the schematic), not the earth ground that’s fed out through HD2. I think you’ll need to use an optoisolator or something like that to get that working correctly, but I’m really not 100% sure.

              Again, I don’t think having the speed feedback is 100% necessary, so you can just skip it for now if you have to.

              • Raff 6:53 am on November 15, 2015 Permalink | Reply

                Hey again.

                I understand what you’re saying about the speed control not being neccessary. I thought I would just say to hell with it as well… but I’d really like to get these sensors to work even for RPM display instead of rigging up a set of magnets/reed switches. It’s so elegantly integrated into the motor housing, it would be a shame not to use.

                So since I have two wheels and two sensors I tried the following:

                I removed the decoupling capacitors from the little circuit board for the optical sensor, as it is the same sensor I’ve seen on multiple schematics for arduino, and the resistors were the same values, but this one had decoupling caps. On one sensor, I removed them. And tried both- still same issue. I figured perhaps the caps were sending some sort of feedback to pin 2 via the sense line, but that doesn’t seem to be the issue.

                I made sure that the schematic for those other optoisolators reflected the schematic for the one on this little sensor board, and also checked with a DVOM to match the pinout and wire it up accordingly.

                Serial monitor still stops.

                I also tried an 8 tooth wheel (by bending and flattening 72 of the teeth on one of the encoder wheels since I had two wheels and two sensors) to see if resolution was an issue, but it doesn’t seem to make a difference.

                Right now all i’ve been doing is attempting to comment out a bunch of code to see if the issue lies within an area that has nothing to do with the sensor itself.

                I am going to detach the sensor and see if I can figure it out. but it only seems to stop the serial monitor once the motor receives a PWM signal from the MC2100. If I spin it by hand, the sensor seems endlessly ok with it! odd!

                I’ll report back soon. And my SSR’s should be here tomorrow as well! 😀

                Thanks for all your help.

                • Raff 7:37 am on November 15, 2015 Permalink | Reply

                  ok… small update:

                  I removed the DC motor case ground (which is shown on the motor label that it “must be grounded”), and the signal doesn’t cut out anymore.

                  however, even with the speed sensor wire disconnected, I am getting feedback somehow because i’m getting a speed of 60-75rpm with no speed sensor if i use pin 2.

                  I changed to pin 3 and used interrupt 1 accordingly, and i reduced the number of teeth on the encoder wheel to 4 and have gotten it to read about 1000RPM at 30% duty cycle.

                  For a 3250rpm motor, it sounds about right.

                  Just to make sure, while it was running i plugged the motor ground back into the MC2100 case ground terminal and it cut off the signal again.

                  Any ideas on what to do? should I put a filter of some sort on the ground pins that go from the header to the arduino grounds?

      • ScottG 2:30 pm on January 9, 2022 Permalink | Reply

        Did you ever figure out the dynamic braking?

    • Raff 6:06 pm on October 28, 2014 Permalink | Reply

      schoolie,

      I can post pictures of the motor and setup once I tweak your code to run and display tach output onto the adafruit LCD shield, as well as PWM and whatnot. I’ll test with and without attaching the unit to the board. If I can’t get a tach output from the main header on the board with everything plugged in as is for treadmill use, I will feed the reluctor wheel sensor its power using the onboard pin header that’s there for it, and then draw the feedback signal by back probing the pin that feeds back into the board and send that to the arduino.

      One issue I’ve seen with the MC2100-LS (because that’s all I have to test with right now) is that if I ramp up the bit-banging duty cycle rapidly, it will go into overload protection and shut itself down until the controller POT is brought back down to 0% DC. Is this normal for all MC2100’s?, or part of the -LS series boards?

      I’ll be tackling this set up soon, perhaps next weekend- and I’ll post here for others to see as well. Then I’ll be creating the grinder base.

      These motors are going cheaaaaaaaap everywhere, as long as you take the treadmills away from the owners who can’t repair them. Sometimes for free!

      Thanks for all your documentation on this amazing combination of useable goodies.

      • Raff 6:06 pm on October 28, 2014 Permalink | Reply

        i meant for that to be a reply to your previous message. sorry!

    • Roy 12:14 am on November 26, 2014 Permalink | Reply

      First of all awesome build. I am looking to do the same thing but I am putting mine on a Harbor Freight knee mill (hopefully my lathe some day too).
      I am hoping you have a complete parts list for this. I already have the major parts- motor, 2100, arduino, display- but I need to know what caps and resistors you used. Such as the voltages…etc of c4, c5, c6…
      Also it looks like you used 2 reed switches- did you mount them in the same place on the spindle? (I was not sure if the double magnet would wreak havoc on the 2100 reed sensor- I am guessing not since I believe that is simply a movement sensor).
      Once I get it setup to the point of writing software I know I will have to mod yours since I have a single 4 digit 7 segment display and mine is 12 pin common anode, as well as wire my display a accordingly.
      On your arduino mc2100 schematic- it looks like all the items to the left of the ATmega box is all the items that would be built “into” an premade arduino.
      This is my first arduino build so it has been quite the learning experience. Thank for all the information so far!

      • schoolie 4:31 pm on December 1, 2014 Permalink | Reply

        The schematic I described in this comment should be all you need to get the MC2100 to operate. The parts required for this are simply a 220 ohm resistor, a potentiometer (any value will do, I used a 10k), and a capacitor for smoothing the reading from the pot (I used a 0.47 uF).

        Only one reed switch goes to the arduino for sensing speed. I put 2 magnets directly on the spindle of the lathe, so the speed sensor pulses twice per spindle revolution. The second reed switch is used to give the MC2100 the signal it needs for closed loop control of the motor speed. It’s not necessary for operation, but it’s nice if you can find a good place to put it. I’ve found through trial and error that the MC2100 is expecting 1 pulse for approximately every 2 revolutions of the motor, so find a place in your drivetrain where you can get close to that and stick a magnet (or more if it’s slower) and a sensor.

        From there, just figure out how to hookup your 7 segment display, and change the pin definitions at the top of the file accordingly. 4 of the pins on your display should be “digit select” and 8 should be “segment select”. Because your display is common anode, you should be able to use this library to drive it, just follow the instructions for hooking it up. Edit: got the anode/cathode thing wrong… you’ll have to use my modified version of that library to get your common anode display working

    • Malcolm 2:38 pm on December 19, 2014 Permalink | Reply

      Holy COW! You guys saved me so much time! I was thinking I was going to have to figure this all out on my own and here it all is! I quick and dirtied the LED RPM free version of this and it worked on the first try! Now I just need to figure how to set the magnets, and wire the display to get the RPM working. I believe I have a 4 digit common anode display in my stuff, but I’ve never wired it up.

      One question. Why power the 7 segment LED from the 12V with a regulator instead of using the 5V from the controller? Anyway, thanks soooo much!!!

      • schoolie 1:30 pm on December 20, 2014 Permalink | Reply

        Awesome, glad it’s working for you!

        The 5v reg in the schematic is the power supply for the entire circuit, not just the 7 seg display. The schematic inlcudes the arduino compatible circuit built “from scratch.” If you’re using an off the shelf Arduino and the current requirements of the display are within the Arduino’s limits, you’ll be fine just using the onboard regulator. Good luck!

    • Roy 11:50 pm on December 21, 2014 Permalink | Reply

      Thanks for the update, I do have a few more questions. I think I wasn’t completely clear. I am using an off the shelf arduino and not building it from scratch. So I am trying to figure out what parts I will still need from your schematic. I am using recycled parts from my crap bin and think I have gathered all the needed parts. Above you said you used a .47uf capacitor for the pot, but in the “gut shot” pic I see a black 4.7uf cap but do not see that on the schematic- I just want to make sure it was not a typo.

      Also I noticed something in the body that was confusing- talking about common anode/cathode displays:

      “Display Spindle Speed on LED Display

      For the display portion of the build, I used a couple two digit 7 segment displays from a treadmill’s dash panel. A brief overview of interfacing 7 segment displays with Arduino can be found here. Like most microcontroller topics, this one has two parts: the hardware and the software. For the hardware, I built a fairly standard 7 segment display circuit, with one exception. “”””””My displays were common ANODE (all the LED’s in the display share their positive pin), while most are common ANODE””””””.”

      I read that part to be a typo and that yours really were common cathode since you had to modify code and most are common cathode. I now understand that yours are actually common anode like mine. Thanks for the info so far, I will update as I progress.

      • Malcolm 12:26 pm on December 22, 2014 Permalink | Reply

        Hi Roy. I’m exactly where you are at the moment, mocking it up with a stock Arduino Uno and seeing what extra parts I need. My plan is to use a Pro Mini when once I’ve got it working. I also have a common anode display. Depending on your display, you may be able to use the 5V output from the Uno to power it with only a single resistor on each of the segment’s cathode legs. Do you have the data sheet for your display? Failing that, you could do some quick experiments lighting just a single segment from your Uno’s 5V. You can get a ballpark idea for the resistor if you know what color the display is. I’m actually going to use the transistor set up as shown in the project’s schematic as I don’t want to tax the Uno’s output. I just began wiring it all up last night, so I’ll let you know how it goes today.

        • Roy 12:42 pm on December 22, 2014 Permalink | Reply

          According to what I had read trying to power the display off the Arduino would be too much for it to handle, we need to make the power circuit. I have a ton of transistors but not the ones listed above, so I will be at a stand still until I can get those.

          • schoolie 1:07 am on January 2, 2015 Permalink | Reply

            There’s nothing special about the transistors I chose to use, at least not that I know of. My knowledge of transistor selection is minimal, but most PNP transistors should work. The right kind of JFET or MOSFET would work as well, you just need something that can handle switching the current of the leds.

            Making the power circuit is definitely not a bad idea 🙂

      • schoolie 1:05 am on January 2, 2015 Permalink | Reply

        Yes, Roy, you’re correct. My display is common anode. I’ve edited the post to fix that mistake. Sorry I keep messing that up…

    • John 1:44 pm on January 29, 2015 Permalink | Reply

      Hey schoolie,

      I have a MC2100 REV B board on my Golds Gym 450 Treadmill. Everytime I turn on the power switch the R1 (10 Ohm) resistor start smoking. I checked C2 and the transformer but they are fine. Can you give me some advice on what could be the problem. The incline motor works but the treadmill console does not.

      Thanks!
      John

      • Dan Kahn 1:03 pm on March 31, 2017 Permalink | Reply

        If the R1 is as depicted on the schematic between two ground locations, there should be very little if any current through ot. I suspect the hard ground shown on the schematic is loose or missing and all the current is going through the 10 ohm resistor..
        Regards,
        wings515

    • tumoheat 6:30 pm on May 21, 2015 Permalink | Reply

      Great information. I was stuck till I saw your post about the missing 240 ohm resistor coming from the control panel. Now I can run the motor via PWM from my Arduino! Quick question, can I run two DC motors off of the MC-2100 controller? I’m building a pitching machine for my nephew and probably won’t crank it any where near the maximum voltage. Or do you think I’ll overload the board?

      • schoolie 10:29 pm on May 21, 2015 Permalink | Reply

        I can’t say for sure, but I’d guess running two motors in parallel would be OK. The board has a current sense resistor, so it self limits when overloaded. At least it does to some extent… I’d be interested to see how it works out!

    • Junior 9:39 am on August 12, 2015 Permalink | Reply

      Has anyone come up with code for using the LCD keypad shield + MC2100 / Reed switch for simeple lathe operation and tach? Ive been trying to do it but it might be a bit too much for me, ive been trying to hack together Schoolies code with the lcd keypad code but i havent gotten anytihing but the lcd printing “Lathe RPM” hehe, so please if anyone reading this out there can help please do or email me at keyser1soze6@gmail.com . Not to hijack your project schoolie but this site seems to be a repository of MC2100 info

      • Junior 9:12 am on August 14, 2015 Permalink | Reply

        Can anyone help me figure out what im doing wrong? ive been just trying to modify (hack) schoolies code to work with this 16,2 Sainsmart LCD Keypad to have up + pwm and down button – but im getting nowhere.

        /*

        Modified from

        MC-2100 Treadmill Motor Controller Interface
        Lathe Motor Controller via PWM
        Seven Segment Tachometer
        ON/OFF Toggle

        Joe Schoolcraft
        Brian Schoolcraft
        May 2013
        https://sonsofinvention.wordpress.com/

        And Sainsmart LCD Shield

        This program demonstrates button detection, LCD text/number printing,
        and LCD backlight control on the Freetronics LCD & Keypad Shield, connected to an Arduino board.

        After powerup, the screen looks like this:

        ——————
        |Freetronics 16×2|
        |Btn: 0 | <- This time value counts up the number of seconds since reset (overflows at 99)
        ——————

        When a button is pressed, a label appears for it:

        ——————
        |Freetronics 16×2|
        |Btn:RIGHT 0 |
        ——————
        Labels are LEFT, UP, DOWN, RIGHT and SELECT-FLASH.
        SELECT-FLASH makes the LCD backlight flash off and on when held down.

        Pins used by LCD & Keypad Shield:

        A0: Buttons, analog input from voltage ladder
        D4: LCD bit 4
        D5: LCD bit 5
        D6: LCD bit 6
        D7: LCD bit 7
        D8: LCD RS
        D9: LCD E
        D3: LCD Backlight (high = on, also has pullup high so default is on)

        ADC voltages for the 5 buttons on analog input pin A0:

        RIGHT: 0.00V : 0 @ 8bit ; 0 @ 10 bit
        UP: 0.71V : 36 @ 8bit ; 145 @ 10 bit
        DOWN: 1.61V : 82 @ 8bit ; 329 @ 10 bit
        LEFT: 2.47V : 126 @ 8bit ; 505 @ 10 bit
        SELECT: 3.62V : 185 @ 8bit ; 741 @ 10 bit

        /*————————————————————————————–
        Includes
        ————————————————————————————–*/
        #include
        #include
        #include // include LCD library
        /*————————————————————————————–
        Defines
        ————————————————————————————–*/
        // Pins in use

        #define ON_OFF 13 //On/Off Switch Input

        #define PWM_CYCLE 50.0 //Output Signal PWM Period (50ms)
        #define MAX_DUTY 869 //Max Duty Cycle expected by MC-2100 (85% of 1023)
        #define MIN_DUTY 0
        #define PWM_OUT 11
        #define BUTTON_ADC_PIN A0 // A0 is the button ADC input
        #define LCD_BACKLIGHT_PIN 3 // D3 controls LCD backlight
        // ADC readings expected for the 5 buttons on the ADC input
        #define RIGHT_10BIT_ADC 0 // right
        #define UP_10BIT_ADC 145 // up
        #define DOWN_10BIT_ADC 329 // down
        #define LEFT_10BIT_ADC 505 // left
        #define SELECT_10BIT_ADC 741 // right
        #define BUTTONHYSTERESIS 10 // hysteresis for valid button sensing window
        //return values for ReadButtons()
        #define BUTTON_NONE 0 //
        #define BUTTON_RIGHT 1 //
        #define BUTTON_UP 2 //
        #define BUTTON_DOWN 3 //
        #define BUTTON_LEFT 4 //
        #define BUTTON_SELECT 5 //
        //some example macros with friendly labels for LCD backlight/pin control, tested and can be swapped into the example code as you like
        #define LCD_BACKLIGHT_OFF() digitalWrite( LCD_BACKLIGHT_PIN, LOW )
        #define LCD_BACKLIGHT_ON() digitalWrite( LCD_BACKLIGHT_PIN, HIGH )
        #define LCD_BACKLIGHT(state) { if( state ){digitalWrite( LCD_BACKLIGHT_PIN, HIGH );}else{digitalWrite( LCD_BACKLIGHT_PIN, LOW );} }

        int speed1(0);

        /*————————————————————————————–
        Variables
        ————————————————————————————–*/
        byte buttonJustPressed = false; //this will be true after a ReadButtons() call if triggered
        byte buttonJustReleased = false; //this will be true after a ReadButtons() call if triggered
        byte buttonWas = BUTTON_NONE; //used by ReadButtons() for detection of button events
        /*————————————————————————————–
        Init the LCD library with the LCD pins to be used
        ————————————————————————————–*/
        LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 ); //Pins for the freetronics 16×2 LCD shield. LCD: ( RS, E, LCD-D4, LCD-D5, LCD-D6, LCD-D7 )
        /*————————————————————————————–
        setup()
        Called by the Arduino framework once, before the main loop begins
        ————————————————————————————–*/
        void setup()
        {
        Timer1.initialize(PWM_OUT*1000); //Set pin 9 and 10 period to 50 ms
        Timer1.pwm(11,0,1000); //Start PWM at 0% duty cycle
        //button adc input
        pinMode( BUTTON_ADC_PIN, INPUT ); //ensure A0 is an input
        digitalWrite( BUTTON_ADC_PIN, LOW ); //ensure pullup is off on A0
        //lcd backlight control
        digitalWrite( LCD_BACKLIGHT_PIN, HIGH ); //backlight control pin D3 is high (on)
        pinMode( LCD_BACKLIGHT_PIN, OUTPUT ); //D3 is an output
        //set up the LCD number of columns and rows:
        lcd.begin( 16, 2 );
        //Print some initial text to the LCD.
        lcd.setCursor( 0, 0 ); //top left
        // 1234567890123456
        lcd.print( “Lathe Speed” );
        //
        lcd.setCursor( 0, 1 ); //bottom left
        // 1234567890123456
        lcd.print( “Speed = (speed1) “);
        }
        /*————————————————————————————–
        loop()
        Arduino main loop
        ————————————————————————————–*/
        void loop()
        {
        byte button;

        //get the latest button pressed, also the buttonJustPressed, buttonJustReleased flags
        button = ReadButtons();
        //blank the demo text line if a new button is pressed or released, ready for a new label to be written
        if( buttonJustPressed || buttonJustReleased )
        {
        lcd.setCursor( 0, 0 );
        lcd.print( “Lathe Speed”);
        lcd.setCursor(8 , 1 );
        lcd.print(“Press Up/Dwn”);
        }
        //show text label for the button pressed
        switch( button )
        {
        case BUTTON_NONE:
        {
        break;
        }
        case BUTTON_RIGHT:
        {
        lcd.setCursor( 0, 0 );
        lcd.print( “RIGHT” );
        break;
        }
        case BUTTON_UP:
        {
        lcd.setCursor( 0 , 0 );
        lcd.print( “Increasing” );
        speed1 = (speed1 + 3);
        Timer1.setPwmDuty(PWM_OUT,speed1);
        Timer1.pwm(PWM_OUT, 0);
        lcd.setCursor( 0 , 1 );
        lcd.print(speed1);

        break;
        }
        case BUTTON_DOWN:
        {
        lcd.setCursor( 0 , 0 );
        lcd.print( “Decreasing” );
        speed1 = (speed1 – 100);
        Timer1.setPwmDuty(PWM_OUT,speed1);
        lcd.setCursor( 0 , 1 );
        lcd.print(speed1);
        }
        case BUTTON_LEFT:
        {
        lcd.setCursor( 0 , 0 );
        lcd.print( “STOP” );
        Timer1.setPwmDuty(PWM_OUT , 0);
        speed1 = (0);
        lcd.setCursor( 0 , 1 );
        lcd.print(speed1);
        }
        case BUTTON_SELECT:
        {
        lcd.setCursor( 0, 0 );
        lcd.print(PWM_OUT);

        /* an example of LCD backlight control via macros with nice labels
        LCD_BACKLIGHT_OFF();
        delay( 150 );
        LCD_BACKLIGHT_ON(); //leave the backlight on at exit
        delay( 150 );
        */

        /*
        // an example of LCD backlight control via a macro with nice label, called with a value
        LCD_BACKLIGHT(false);
        delay( 150 );
        LCD_BACKLIGHT(true); //leave the backlight on at exit
        delay( 150 );
        */

        break;
        }
        default:
        {
        break;
        }
        }
        // print the number of seconds since reset (two digits only)

        /*
        //debug/test display of the adc reading for the button input voltage pin.
        lcd.setCursor(12, 0);
        lcd.print( ” ” ); //quick hack to blank over default left-justification from lcd.print()
        lcd.setCursor(12, 0); //note the value will be flickering/faint on the LCD
        lcd.print( analogRead( BUTTON_ADC_PIN ) );
        */
        //clear the buttonJustPressed or buttonJustReleased flags, they’ve already done their job now.
        if( buttonJustPressed )
        buttonJustPressed = false;
        if( buttonJustReleased )
        buttonJustReleased = false;
        }
        /*————————————————————————————–
        ReadButtons()
        Detect the button pressed and return the value
        Uses global values buttonWas, buttonJustPressed, buttonJustReleased.
        ————————————————————————————–*/
        byte ReadButtons()
        {
        unsigned int buttonVoltage;
        byte button = BUTTON_NONE; // return no button pressed if the below checks don’t write to btn

        //read the button ADC pin voltage
        buttonVoltage = analogRead( BUTTON_ADC_PIN );
        //sense if the voltage falls within valid voltage windows
        if( buttonVoltage = ( UP_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage = ( DOWN_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage = ( LEFT_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage = ( SELECT_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage <= ( SELECT_10BIT_ADC + BUTTONHYSTERESIS ) )
        {
        button = BUTTON_SELECT;
        }
        //handle button flags for just pressed and just released events
        if( ( buttonWas == BUTTON_NONE ) && ( button != BUTTON_NONE ) )
        {
        //the button was just pressed, set buttonJustPressed, this can optionally be used to trigger a once-off action for a button press event
        //it's the duty of the receiver to clear these flags if it wants to detect a new button change event
        buttonJustPressed = true;
        buttonJustReleased = false;
        }
        if( ( buttonWas != BUTTON_NONE ) && ( button == BUTTON_NONE ) )
        {
        buttonJustPressed = false;
        buttonJustReleased = true;
        }

        //save the latest button value, for change event detection next time round
        buttonWas = button;

        return( button );
        }

    • Steve 11:06 am on September 3, 2015 Permalink | Reply

      I finally got a used treadmill to use for my lathe. Only problem is that its controller is a model MC5100DTS-50W. Its looks the same but all so ha s a big wire wound resistor plugged onto the board. I have an Arduino and was thinking of trying your sketch to see if it will work. The treadmill still works its just that the display is over half dead. Any thoughts?

    • Mark 1:08 am on December 28, 2015 Permalink | Reply

      Thanks so much for sharing this project and documenting it so well. This was extremely helpful in my upgrade to my Harbor Freight mill. I have shared a link to this post on my blog about the build. You can see it at http://www.mendingthings.com/?page_id=783

    • Paul Tinguely 6:19 pm on June 14, 2016 Permalink | Reply

      Excellent blog! wondering if you have found a schematic diagram for the MC-2100? I’m a retired digital engineer and would like to get involved in some similar projects.
      Any help would be greatly appreciated!
      Paul

    • Chris 9:30 am on July 4, 2016 Permalink | Reply

      What is the type of fuse on the mc2100e board please? Have 2 of these boards but no fuses! Have Looked everywhere but can’t find value, many thanks.

      • john 10:45 am on October 10, 2016 Permalink | Reply

        13 amp, my board rev is the B. The motor is a 1900 watt monster. There is a huge XSFRM with this board mounted separately. Blew several 5 – 7 amp fuses experimenting.

    • Jimmy 11:37 am on August 2, 2016 Permalink | Reply

      Thanks so much for sharing your work! I have a treadmill with the MC2100LT and this will be so helpful in repairing it and looking for others for future projects with the Arduino. Great job

    • twmaster 7:46 pm on October 8, 2016 Permalink | Reply

      Ok. This is just what I need. I picked up free treadmill today and it has an MC2100 inside. I used to toss those controllers as I could not figure out their signal needs. Thank you.

    • Tim 12:03 pm on March 24, 2017 Permalink | Reply

      Hi Schoolie and anyone else …

      I hope that this is not a stupid question. I have an endex dcmd57 treadmill controller board and not a mc2100. Can your 555 based pwm circuits drive these boards? I have looked everywhere for this but…

      I have attached a photo here.
      Thanks, Tim
      https://www.google.com.au/search?client=firefox-b&biw=1920&bih=986&tbm=isch&sa=1&q=dcmd57+circuit+diagram&oq=dcmd57+circuit+diagram&gs_l=img.3…3890462.3891019.0.3891634.2.2.0.0.0.0.222.442.2-2.2.0….0…1c.1.64.img..0.0.0.tHxZQH3hoxQ#imgrc=xDKqTEJq6JbFgM:

    • Dan Kahn 12:42 pm on March 31, 2017 Permalink | Reply

      Hello,
      I have done almost the same PWM using an NE556. Selected parts for 50msec PRF and PW between 15 and 40 msec. Seemed to work OK until I mounted it onto my wood lathe. It will run for about a minute and then slow down and finally stop. The Red LED on the board is also constantly ON. I checked the D8 voltage and it is 15 VDC, my zener is a 1N4744 so it is correct for this type. Both 5 volt regulators are at 5.04 volts. The output of the bridge is 108V, seems low to me. Checking with diode function on DVM appear all good but bridges are misleading.
      Any thoughts on the problem?
      Have an HP1740 but reluctant to connect scope ground to bridge common. Will this connection cause problems? Not to knowledgeable on SCR and tiracs and micro controllers.
      regards,
      wings515

      • Dan Kahn 7:35 pm on April 1, 2017 Permalink | Reply

        Well I put an isolation transformer on the device input and was able to use my scope. After about a minute there are no pulses at the base of Q5. As a test I grounded pin 2 of U4 expecting the motor to run at full speed. It did not. I see a half wave signal at pin4 of U4. I did see about 120 VDC on pin 6 of U4. I removed Q1 since the gate to cathode measured about 56 ohms in both directions but if I do the test pulsing the gate while measuring the A to C resistance it operates correctly. I ordered another S4025L. I am not sure if the TD3052 is defective.
        Any clues as to my next step?
        Regards,
        wings515

    • Christian Vargas 2:20 am on June 30, 2017 Permalink | Reply

      I have almost got this running I think, 100k potentiometer, .10uF capacitor, 200ohm resistor. between 5-50 I get the motor to run at less than full speed, anything higher and it just goes full speed, it sounds like the motor is turning on and off but no significant speed control is obtained, I can’t run 10mph.

      With the original code 100 to max duty would all just all be full speed so adjusted to 0 – 50,

      Before I started this project the treadmill would run full speed once turned on. Suspected the console was jacked, tell I tried this, now I think it’s the MC2100. What do you think?

      #include

      #define POT_READ A0
      #define PWM_OUT 10
      #define ON_OFF 2

      #define PWM_CYCLE 50.0

      #define POT_DIF 1
      #define MAX_DUTY 869
      #define MIN_DUTY 0

      int potTemp;
      int potValue;
      int lastPotValue;
      int potCheck;
      int speedLevel;

      byte onOffState = 0;

      void setup()
      {
      pinMode(POT_READ, INPUT);
      pinMode(PWM_OUT, OUTPUT);
      pinMode(ON_OFF,INPUT_PULLUP);
      Timer1.initialize(PWM_CYCLE*1000);
      Timer1.pwm(PWM_OUT, 0);
      Serial.begin(9600);

      }

      void loop()
      {
      potTemp = analogRead(POT_READ);
      potCheck = abs(potTemp – potValue);
      if (potCheck >= POT_DIF){
      potValue = potTemp;
      }

      speedLevel = map(potValue,0,1023,0,50);

      Timer1.setPwmDuty(PWM_OUT, speedLevel);
      Serial.println(speedLevel);
      }

    • Norman R Harrison 6:11 am on January 3, 2020 Permalink | Reply

      Hi – This thread has been quiet for a while but is providing a lot of useful information – thank you. I initially made your 555 based PWM generator and that worked but was a bit tricky in the initial set-up. Inspired by your Arduino system I have done a development using an Arduino for the PWM but I have replaced the potentiometer and switch with a Raspberry Pi controlled touch screen. The first version has been running for about a year with no problems. I am just finishing a version 2 which adds: servo controlled gates and control of a relay for dust extraction, as well as control of the elevation motor for a lift system. You can see a bench demo here https://youtu.be/YR1K_yBrWR8 . There are a couple of extra videos (belt noise issue now solved!).
      The PWM is off-loaded to the Arduino, the Pi is programmed with Python 3 and PyQt5. The touch screen is not the official Raspberry Pi one but a cheaper 7″ 1024×600 one. The serial port sends the requied speed setting to the Arduino and receives the rpm value. I have a DPDT switch for reverse and indicator lights for direction.

    • Norman Harrison 6:18 am on January 4, 2020 Permalink | Reply

      Hi -posted few days ago but hadn’t subscribed. Trying again.
      I know that there has not been a lot of recent activity on this thread – but it does provide a lot of useful information, thank you. I first made your 555 based controller which worked fine but was a bit was a bit tricky in initial set-up (probably component tolerances).
      Inspired by your Arduino solution I have used an Arduino Uno R3 to provide the PWM but I have replaced the potentiometer and switch with a Raspberry Pi controlled touch screen (not the official Raspberry Pi one but a cheaper 1024×600 one). This is programmed with Python 3 and PyQt5. I have used the first version for about a year without any issues and now have a second version on the bench that uses the spare capacity on the Pi to control an SSR to switch the dust extractor on/off and control servo activated gates. It also controls the lift motor for another function I intend to add. You can see it here:
      https://youtu.be/YR1K_yBrWR8 . There are a couple of other videos of the first version as well – the noise from the belt tensioner has now been cured. Thanks again for your work which has been so helpful in getting this going.

    • paco 9:57 pm on April 15, 2020 Permalink | Reply

      Schoolie, does your solution use the tach signal from the MC2100 green wire or from an external sensor? I’m not clear on that.
      I ask because in my experience using the MC2100 tach signal, I get gibberish values when connected to digital D2 or D3 (so I can try an interrupt-based rpm algorithm); but it works fine with an analog pin (using pulseInLong()-based algorithm). I tried your sketch, but got the same result. Thanks.

    • Chip Stewart 5:21 pm on November 2, 2020 Permalink | Reply

      I’ve built this, and it works . . . kinda. The segments on the display are scrambled, so I’ve used the wrong pins for the cathodes. The code refers to S1 to S8, but the schematic shows a to g, P, A & A. Would someone share which segment is S1 .. . S8?

    • Chip Stewart 6:31 pm on November 2, 2020 Permalink | Reply

      Nevermind. Figured it out.

    • Ralph 1:53 pm on January 31, 2021 Permalink | Reply

      Great posts on MC2100 treadmill controller. I have one on a treadmill that I want to repair. Every time I plug the treadmill in, the motor runs briefly and the circuit breaker opens. There is excessive arcing at the motor brushes. With the motor disconnected, the waveform at the motor red lead is half wave rectified and not smoothed. I replaced the bridge rectifier with no improvement. Any ideas on the root cause?

    • Olaf Borowski 4:56 pm on December 29, 2021 Permalink | Reply

      Nice work schoolie, converted my Smithy Lathe to run on 2.5 HP treadmill motor with an MC2100 and Arduino. I used an external tach, which I had already so I modified your code to strip all the tach stuff.
      Added a couple of LEDs for on/off state and everything works perfect. I have one question though: The lathe has a mechanical switch (three position) which controls forward, neutral and reverse. The switch basically switches the positive and negative terminals for the motor (or off, middle position). I am used to controlling the lathe with this switch. This is no longer possible. When I turn on the pulse on the Arduino and then engage the switch, the lathe won’t start. I have to have the Arduino in off position (no pulse), switch the mechanical switch to whatever direction I want, and then turn Arduino pulse on. The switch on the Arduino basically controls the lathe now. I prefer the mechanical switch since it physically disconnects power to the motor. I think it is safer disconnecting power to the motor instead of just not sending pulses. If for some reason the code in the Arduino goes haywire, I might get hurt :-). My question: Is there any way I can trick the controller into generating output without always going back to zero? It seems like it measures the resistance of the motor before it starts. I used to have a MC60 controller connected to the lathe and it didn’t care. I was able to operate the lathe with just the mechanical switch. The MC60 controller didn’t really work that great with this motor. When I engaged the mechanical switch, it always rev’ed up and then slowed down. MC2100 starts the motor much smoother and I am much happier with how it controls the motor. If I could get is working with only the mechanical switch, that would be great. If I have to generate some kind of signal with the Arduino and feed it to the controller to make that work, I’d figure out the code to do just that.
      Appreciate any recommendations and guidance on this…..

    • Paul Fowler 11:52 am on March 22, 2023 Permalink | Reply

      I am wondering if anyone has figured out how to run the 3 HP motor controller of a Bowflex Series 7 treadmill? The model # of the driver is ASM-MEE6N-2F, but I can find no schematics or other useful data. I’ve discovered that is a Variable Frequency device (VFO) running from 0 to 20 Hz (0 to max RPM), but has interlocks that prevent motor enabling if cables are not connected to the original command console, of if tachometer data is not feed back exactly right.

      • Paul Fowler 5:16 pm on April 10, 2023 Permalink | Reply

        Additional discoveries on the Bowflex Series 7 Treadmill controller, ASM-MEE6N-2F:
        On connector P5:

        Red = GND,
        BLK = Stepper Motor UP,
        YEL = Stepper Motor DOWN,
        BRN = ENABLE,
        GRN = Vcc (15 vdc).

        By connecting a 470 uF cap’s negative side to GND (RED wire) in series with the GRN Vcc and a 3.3K resistor, then connecting the resistor/cap junction to the BRN ENABLE I could get enough time delay to allow the Power Relay (K1) to work, thus removing the need for a switch to enable the controller.

      • Paul Fowler 9:27 pm on April 10, 2023 Permalink | Reply

        I have figured it out. The ASM-MEE6N-2F is not a VFO, it is a PWM. The pink wire is a feedback (1 to 1) of the tachometer which tells the main control (human interface) to shut down if the feedback signal goes awry. The PWM input is the green wire on connector P6. It seems to run well with the base frequency anywhere from 20 Hz – 300 Hz (the limits of my testing). The high-voltage output is enabled by the Brown wire on connector P6, which energizes the large relay (K1) with an audible click. However there must be a delay between the power up of the driver board and the enable of the brown wire on P6. I have found that about a 1 second delay will suffice. All indicating marks have been removed from the IC’s making it difficult to determine how the circuit works, however I suspect the Enable and PWM are opto-isolated and need limited current to operate without destroying the opto’s. To get things working I connected a Chinese XY-KPWM module to P6-Blue (GND), P6-White (15 vdc), and the PWM output to the drivers PWM input (P6-Green) via a 3.3K resistor. To enable the power relay (K1) I connected the P5-Green wire (15 vdc) through a 3.3K resistor, to a switch, to the Enable (P5-Brown wire). This resulted in about 1.5ma driving the opto’s. It works fine, however the driver has built-in acceleration and deceleration controls such that, regardless of how fast the PWM changes, the acceleration and deceleration remain soft. Thus, response is not fast.

  • schoolie 12:06 pm on May 22, 2013 Permalink | Reply
    Tags: , , , PWM Controller   

    An update and simplification of the original MC-2100 PWM Circuit 

    The circuit. Left connector goes to MC-2100 (GND, 12V, Signal). Right connector goes to speed control pot.

    After discussion with Terry in the comments of previous posts, we came to the conclusion that the MC-2100 wasn’t expecting a full 5V signal at the control signal input (blue wire). As shown in the MC-2100 schematic, the optoisolator on the input (U1) has a 22ohm resistor (R2) in series with it. Applying 5V to the blue wire results in 170mA flowing through the optoisolator, higher than its 50mA rating.

    This lead to the conclusion that there must be another resistor in the circuit at the dash panel end of the blue wire. Upon inspection, there is a 240ohm resistor in series with the control signal output on the treadmill’s dash panel PCB. With the series resistance at 262ohms, the current through U1 is now 15mA, a much better current level for reliable operation.

    Taking things a step further, it’s possible for the circuit to operate on higher voltage if a larger series resistor is used. This allows us to eliminate the 5V regulator from the circuit, as well as the transistor from the output, which was mistakenly added to allow the higher output current the circuit required without the current limiting resistor.

    Here’s the resulting circuit (keep reading, not done yet!):

    MC-2100 PWM Driver v6 – No Filter

    (Read the rest of this post…)

     
    • John Tappan 9:38 am on February 3, 2015 Permalink | Reply

      Guys,

      This is really interesting stuff, and although I don’t understand any of the technical jargon, I am hoping I can replicate your controller for my MC-2100. I’m sure I’ll have many questions throughout the process, although your detail and explanation is top-notch. I lam a bit confused at the beginning, though. Is the “original MC-2100 PWM circuit” incorporated into the Arduino compatible “MC-2100 Driver V 6” or are they two separate components of the overall controller. I guess I’m asking if the 555 timer circuit is necessary in additon to the Arduino controller. Thanks.

      • schoolie 3:04 pm on February 9, 2015 Permalink | Reply

        The two circuits are independent, and produce the same basic function. The arduino based circuit is just a fancier way of doing it that provides a digital speed readout among other things. The simplest approach is to build the circuit in this post, and ignore the arduino stuff entirely. Good luck!

    • 7upman 4:43 pm on September 15, 2015 Permalink | Reply

      Hi there,

      Your posts on this subject are exactly what I was looking for – I have a treadmill that’s a few years old but hardly used … and now that we actually want to use it more, the console has given up the ghost, and I’m not prepared to spend an extra $300 to replace it.

      Anyway … since I haven’t played with putting together circuits since university (i.e. many years ago), could you let me know what the voltage ratings are on the capacitors you used? I understand it’s not a big deal to have a higher voltage rating on the ceramic caps but the aluminum ones should be closer to the actual voltages they will be seeing – correct?

      Thanks!

    • Doug 12:27 pm on October 30, 2015 Permalink | Reply

      Hi and thanks for the great article and your work on the MC2100.

      I have your circuit constructed on a breadboard. I have double checked everything twice and made sure all values are correct. I checked continuity between all points to make sure the breadboard contacts were ok.

      The red led on the MC2100 comes on and stays solid, which means it’s not receiving a pulse from the external circuit. I don’t have a scope to check to see if I am getting a proper square wave. You don’t show any DC voltages on your schematic, so I am not sure what voltages I should be reading on the external circuit?

      The previous owner said the treadmill control panel got wet and it stopped working properly. I tested the Motor and it works. The DC2100 board looks to be in good shape. I am wondering if the U1 opto is bad on my MC2100?

      I am at a standstill now until I figure out what to do next
      Any help would be appreciated
      Thanks, Doug

      Here’s a link to a pic of my setup

    • Doug 1:30 pm on October 30, 2015 Permalink | Reply

      I measured voltages on my external board and added them to your circuit diagram

    • Doug 12:07 pm on October 31, 2015 Permalink | Reply

      Update.
      I was able to get Terry’s dual 555 timer circuit to work with my MC2100.
      Details on my build are here.

      An alternative MC-2100 dashboard replacement circuit

    • schoolie 10:15 am on November 2, 2015 Permalink | Reply

      It probably doesn’t matter now that you’ve got Terry’s circuit working, but was the 1.2 to 1.4v at the output measure with the blue wire plugged in to the MC2100? Did you adjust the R1 pot?

      Glad you got it working either way, thanks for sharing!

      Brian

      • Doug 10:25 am on November 2, 2015 Permalink | Reply

        Hi Brian, I don’t remember now. That was a few days ago. I did play with both pots for quite a while until I gave up and built Terry’s circuit. I am not sure why I could not get your circuit to work properly?
        I set up a build page here for other people and there is a link to a you tube video of my build in action
        Check out my finished build here.
        http://el34world.com/Misc/Cnc/TreadmillMotor1.htm

      • Doug 10:27 am on November 2, 2015 Permalink | Reply

        And by the way Brian, thanks for posting your blog. I would have just chucked the MC-2100 board in the trash and bought a MC-60 if it was not for finding your info 🙂
        Here’s my you tube video link for those that are interested.

    • Bryan 3:54 pm on November 17, 2015 Permalink | Reply

      I have a quick question – I’ve got the NE555/LM393 circuit built that works, but anytime I disconnect the power to the unit, it takes quite a bit of fiddling with the trimmer pot to get the motor to run again. I seemed to remember reading something about this issue, but I can’t recall where in the various threads on this topic. For most of the time, I can leave it plugged in and leave the main power circuit on, and just use a switch in line with the rheostat. Is there a way to get the unit to restart reliably when the power is completely turned off?

      • Bryan 8:37 pm on November 17, 2015 Permalink | Reply

        Correction: it’s been a while since I worked on this project, and had forgotten that I couldn’t get the 555/393 circuit to work, so built the twin 555 circuit (just like Doug). Going to try the momentary contact and see if that solves my issue.

        • Bryan 10:07 pm on November 17, 2015 Permalink | Reply

          Well… I seem to have solved my own problem just by reading a little more carefully – Doug’s solution works well for me. I’ve added an on/off switch in line with the hot side of the speed controller so I won’t normally have to turn it off at the circuit breaker.

    • Doug 6:42 am on November 18, 2015 Permalink | Reply

      Cool, glad that worked out for you!

    • earl kitover 4:36 pm on May 15, 2016 Permalink | Reply

      i have a https://www.youtube.com/watch?v=VArBLmZGpx0 which has ‘MC2100-12A Motor Controller’ controlling the dc motor. I tried messing around with it to bypass the 60s timer and I ended up killing the control circuit in order to bypass the logic. Is there anyway to replace, or I send it to you and you fix it (for which I pay you) but bypass the timer and just make it manual? i really like it and Proform doesn’t support it anymore. Thx Earl 773.419.7112

    • JD Combs 5:30 pm on November 13, 2016 Permalink | Reply

      I realize this is an older post but I am just getting into building a treadmill motor powered 2×72″ belt grinder using a MC-2100 control from the tread mill I scavenged. I found the V6 interface circuit and was in the process of bread-boarding it but noted what looks like a discrepancy in the schematic. I am really old school electronics, late 60s Navy electronics, but it appears to me that a component is missing from the “A” side of the LM393. Either that or it is intentional “grounded” out of the circuit so as not to be used. Pins 1 thru 3 all go to ground effectively grounding pin 4 of the “B” side. Is this correct?

      • schoolie 9:38 pm on November 13, 2016 Permalink | Reply

        You’re reading it correctly, the A side of the LM393 isn’t used in this circuit. The LM393 has two independent comparator circuits, and we only need one here, so the three pins associated with circuit A are just tied to ground. Pin 4 is the main ground reference that is used by both circuits. Good luck!

    • Alex 3:10 am on January 6, 2017 Permalink | Reply

      I am trying to build this to see if I can get this treadmill back to use and I seem to be getting the same results as Doug did when he tried to build it. Similar voltage at R5 and R9. Parts list has R1 as the trimpot and R5 as potentiometer is this correct? If so around what value am I looking for on R1 when adjusting it?

    • Mike 11:16 pm on August 29, 2017 Permalink | Reply

      I hate to resurrect an old thread, but I have a technical question for Doug or Schoolie, or anyone that has good electronics knowledge. I got this circuit working with a 556 instead of 2 555’s. I used a few of Doug’s ideas. I added the momentary normally closed switch between R2 and v+. I did need a cap between v+ and v- also, but .22uf was enough. I didn’t need .68uf, but it wouldn’t start without the cap. I put a momentary normally closed switch between cb1 and cb2 on the mc2100 to have an instant stop-start with the other mom switch if doing multiple start stops. Here’s my problem and question, the momentary start switch between R2 and v+, when you press it, you have to hold it for about a second and then release. It you just tap it and release, it won’t start. You need to hold it for longer than you would normally press a “start” button. Now I’m only slightly electrically inclined, and it will take someone with more knowledge than me, but it seems that there should be a way to add a cap or resistor or diode or something to make the momentary switch work with just a tap. Unless it’s in the mc2100 that it needs to see 0 volts on that pin for a specified time. I’m just assuming it takes a second for the voltage to dissipate, and that’s why I need to hold the button for longer than I need to. Any comments are more than welcome. I woul go fiddling myself with limited knowledge, but I’d rather not burn a board thanks!

      • Doug 8:10 am on August 31, 2017 Permalink | Reply

        I don’t know why, but I have to hold my switch down longer also. It’s not instant on. It may be something in the 2100 circuitry. It may be a safety factor that someone on a tread mill would not want to accidentally hit the panel and have the machine take off?

    • Mike 9:44 pm on August 31, 2017 Permalink | Reply

      I think your right. I’d rather a regular push start it, but I’ll just think of it as a safety feature as well.

  • schoolie 10:14 pm on May 21, 2013 Permalink | Reply
    Tags: , , , PWM Controller   

    An alternative MC-2100 dashboard replacement circuit 

    Terry’s dual 555 circuit

     

    As discussed in the comments of earlier MC-2100 related posts, Terry has been working in parallel to create a circuit capable of generating the variable duty cycle PWM signal that the MC-2100 requires to operate. He’s written up a very thorough summary of his design process (click for the PDF file).

    Terry’s circuit uses two 555 timers (or a single 556), two potentiometers (one is a trimmer), and various capacitors and resistors. This is a great way to get the MC-2100 working without the dash panel if you don’t have a comparator on hand.

     
    • Doug 12:04 pm on October 31, 2015 Permalink | Reply

      Hi Terry,
      Hope you see this post here
      I built Schoolie’s 555 – LM393n circuit but was not able to get it to work with the MC2100

      Then I built your dual 555 timer board and was able to get my MC2100 to run my motor

      A couple of notes on my build using your PDF build document

      The circuit would not respond until I added a .68uf cap across the Black and Red wires coming from the MC2100. See my picture
      Once I added a cap across the incoming 12v voltage supply, the circuit began to send pulses to the MC2100
      I only discovered this because I hooked up my multi meter to measure the 12volt supply and the circuit started working. When I removed my meter, the circuit stopped working. I unhooked my meter and touched a .68 cap across the voltage supply and the circuit starting work. I saw Schoolie had a .47 on his circuit and so it looked like a good thing to add to your circuit

      The optimal resistance I found on my build for the combo of R3 + R2 was 31k

      Terry, as you noted in your PDF build document, turning off the MC2100 and then turning it back on resulted in the circuit no long working. I added a momentary switch between R5 pot and the 12 volt power supply
      Tapping the momentary switch and breaking the voltage to R5 and then releasing the momentary switch works like a charm.
      After breaking and restoring the 12 volt supply to R5 pot, the circuit starts up and pulses the MC2100

      I am open to any modifications that may be needed on my build
      Does the circuit need a filter on the blue wire to prevent the motor from messing up the pulses from the 555 board like schoolie di on hi circuit?
      I was curious if you have made any changes to your original circuit since creating your PDF document?

      Thanks, Doug
      Here’s a pic of my breadboarded circuit using Terry’s dual 555 timer circuit

      • Bryan 7:53 pm on November 17, 2015 Permalink | Reply

        Minor correction to your wording – you installed the momentary switch on the R2 (not the R5) pot. Wondering if this will work on the 555/LM393 circuit…

    • Doug 10:33 am on November 2, 2015 Permalink | Reply

      Thanks to you Terry and Schoolie for posting this info. I would have chucked my MC-2100 in the trash and purchased a MC-60 if it were not for the info posted here and on Schoolies blog.
      My finished project can be found on my web site here.
      http://el34world.com/Misc/Cnc/TreadmillMotor1.htm

    • Doug 10:34 am on November 2, 2015 Permalink | Reply

      And here is a you tube video of my MC-2100 and your 555 timer circuit in action.

      • Doug 10:36 am on November 2, 2015 Permalink | Reply

        Oooops, sorry, that was the wrong video link posted above
        You can delete that link.
        This is the correct you tube video link

    • Bryan 12:03 am on November 25, 2015 Permalink | Reply

      Attempted to share a write-up of my resurrected treadmill, but apparently WordPress didn’t like it… to summarize, my treadmill control panel fritzed out and the dual-555 circuit saved me from having to buy a completely new treadmill (>$1000). My out-of-pocket was well below $100, so the return on that effort was very high. Thanks for sharing your know-how with us DIY kindred spirits…

    • Wesley 1:20 am on January 3, 2016 Permalink | Reply

      Great stuff all of you are doing here. I’ll admit right up front that I don’t have near the knowledge you guys do when it comes to these sorts of things. I’ve been trying for days now to hook this Mc-2100 Rev B up and get it running, but no luck. Not entirely knowing how the pots are hooked up might help as this is the only thing at the moment that I am pretty unsure of. Would one of you mind helping me out with this? I’m needing to get this onto a wood lathe next week so that I can turn some big posts with it. Thanks in advance for any help.

    • Doug 8:46 am on January 3, 2016 Permalink | Reply

      This is the project that I used my Treadmill motor on. It’s a dual action aluminum can crusher

    • john weaver 1:56 am on October 22, 2016 Permalink | Reply

      Hey hi, have two different MC-2100 Rev B boards. One handles an 2.5 hp 1800 watt (0-95Vdc) motor from a Nordic C2420 treadmill, the other from a 1100 watt dc motor treadmill (?). My project needs the PWM circuit to control the rpm function on the 2.5 hp motor/main board for a lathe conversion. The problem I am having is the PWM circuit described herein will only vary speeds on the 2.5 hp motor between 1100 and 1250 rpm and only in conjunction with the 1100 watt main board. The PWM circuit herein does NOT function at all for the 1800 watt main board. Both main boards require identical PWM signal control for the speed function. I need a greater range on the speed control i.e., 0-1800. The 2.5 hp motor and mb were pulled from a good system. When attached to the 1800 watt board the PWM circuit has no effect. On the smaller 1100 W mb the PWM circuit only yields an rpm range of only 1100 – 1250. What changes will enable the speed ctrl on the 1800 watt mb? Also the PWM circuit herein will only function with the 1100 W mb when the momentary (NC) switch is KEPT open. Not as a momentary switch. ?? Is that a simple error??

    • John 6:56 pm on October 23, 2016 Permalink | Reply

      Hey hi hope this is still reviewed. I’m having problems getting this PWM circuit to work with the MC-2100 Rev. B CB I took out with the 95VDC motor 2.5hp 1800W. Motor only surges to max rpm then off if the momentary switch is pumped 5-6 times. Motor then speeds up to about max 2700 rpm. The huge console allowed good speed control, torque etc. So motor/MC-21200 were working. The led on the MC-2100 blinks on/off about once per sec. as it should. Do not know why its surging. Possible yanking the parts out during a failed re-calibration of the speed control is the problem. Not sure if that calibration data stays with the CB??

    • Norman Harrison 5:40 pm on August 25, 2018 Permalink | Reply

      Thanks to Doug, Terry, Schoolie and other contributors for the great help here. Built my version of Doug’s circuit but no joy driving MC 2100 E. Changed the R1/R2 combination for a 50k muti-turn trimmer and quickly found sweet spot around 34.5 k. As you say some variations to be expected so probably not a bad idea to start with the 50k trimmer set around 28k and adjust from there?

    • pankaj 7:17 pm on March 27, 2020 Permalink | Reply

      Hello, Please can someone help, i am sure you guys know more than me on this. I have a Weslo compact SL treadmill with a circuit board named Motor speed controller model U-MC 2100 ENI . The treadmill suddenly stopped working one day and wife needs it working ASAP. i checked the motor is working fine using a 12v battery, the red light on the PCB is always Red and not blinking, it seems the motor is not getting the power supply or signals from the pcb, the display is coming up but nothing happens when i click the start button on the treadmill , please can you suggest what else i can check and troubleshoot.

  • schoolie 7:14 pm on February 19, 2013 Permalink | Reply
    Tags: , , , Oscilloscope, Oscilloscope alternative, piezo, PWM Controller   

    Analyzing PWM Period and Duty Cycle without an Oscilloscope 

    Now that I have an oscilloscope, I’ve been able to learn a lot more about the circuit I’ve been designing for the MC-2100, as well as the MC-2100 itself. However, a lot of people don’t have access to a scope (even one as old and crappy as mine :)). I’ve had an idea for a method of analyzing a PWM signal without a scope for a while now. Last night, I got some time to test my idea and it worked fairly well, so I figured I’d share it here.

    (Read the rest of this post…)

     
    • littleschoolie 9:50 am on April 6, 2013 Permalink | Reply

      Dude that is awesome.

    • Brian 12:10 pm on April 25, 2013 Permalink | Reply

      This is pretty great. I’m building a PWM that may or may not be capable of 100% duty cycle, and I’d love to confirm it one way or the other but I don’t have an oscilloscope. I figured there would be a way to somehow generate an output that could be measured audibly. Visual wouldn’t really work as an LED could pulse faster than visible detection.

      • schoolie 3:41 pm on April 25, 2013 Permalink | Reply

        Cool! I think if you get to 100% duty cycle, the buzzer will be silent. You can probably confirm that without even analyzing the signal. I’d love to hear if this ends up working for you.

  • schoolie 11:59 pm on February 17, 2013 Permalink | Reply
    Tags: , , , , PWM Controller   

    MC2100 Dashboard Replacement Control Circuit Update 2 

    MC-2100 PWM Controller Circuit v5

    In response to Terry’s comment on my previous MC-2100 post, I got the breadboard circuit hooked back up for some testing. In doing so, I found a couple things missing in my previous schematic. I also may be backing off calling this version of the circuit done. It looks like there may still be a bit to learn :).

    (Read the rest of this post…)

     
    • Terry 1:25 pm on February 18, 2013 Permalink | Reply

      Interesting that you had made those changes. Unfortunately, I have virtually no test equipment (only an analog multimeter). I don’t even have the MC-2100 board as a friend simply wanted a PWM circuit provided. Anyway to simulate the output I have the base of an NPN transistor attached to the output of the comparator. The emitter attached to ground and collector has a DC motor attached connected to the +12Vdc to somewhat separate the voltage rails between it and the PWM circuit. Adjusting pot R6 as per your circuit does indeed slow down / speed up the DC motor I have. As mentioned, however, I cannot get specific readings. As far as my earlier overheating of the 7805 , all is well now. I had some extra circuitry on my bread board which could have been the issue. My 7805 is quite comfortable to touch.

      I have not tried your new changes to the circuit. Not to speak less about your design (which I do like) but I keep switching between yours and the following to try to get a working solution: http://www.dprg.org/tutorials/2005-11a/index.html.

      I am not sure if I provided you any useful information but I just wanted to let you know where I am at.

      Thank you

      • schoolie 11:44 am on February 19, 2013 Permalink | Reply

        Good to hear you’ve got the overheating sorted. As far as test equipment, there are still ways to get some meaningful data without an oscilloscope. The motor is a good first impression that you’re able to change the duty cycle of a square wave, but doesn’t tell you much else, as you know. Testing on the MC-2100 will tell you if your period is correct, but won’t tell you a value or whether the period is too high or too low.

        Here’s a little tip to help avoid one of the traps I fell into: the indicator LED on the MC-2100 will flash quickly indicating that a signal is received only if the motor is connected across the Motor + and – terminals. This lead to lots of confusion and frustration when testing on the bench without the motor hooked up. I kept thinking my circuit wasn’t working, when it was actually fine. This was before I got the oscilloscope, so I was in the dark as well.

        I tested a make shift method for measuring the signal last night using a piezo buzzer and an android spectrum analyzer app. I’ll try to get the details written up soon.

        Regarding the cicruit on dprg.org, I think I had looked at that earlier. Reviewing it yesterday, it looks like the only way to change the frequency in small steps is by modifying the value of C1 by adding capacitors together in parallel/series, right? You could change R1, but there aren’t many options to choose from when it comes to potentiometers. If I did the math right, you’d need a 0.72uF cap with a 100k pot to get 20Hz. If R1 isn’t exactly 100k, C1 would shift a little. In the circuit I’m using, the frequency is adjusted with a potentiometer (R1), making it a lot easier to fine tune. The part count on mine is a little higher though.

        • Terry 12:16 pm on February 19, 2013 Permalink | Reply

          Excellent. Thanks for the update. It will certainly save me time knowing that the motor needs to be connected to get the proper LED indication. I am definitely interested in the write-up regarding the Android Spectrum Analyzer App.

          Regarding the circuit on DPRG.org. I also noticed it had a set frequency based on R1 and C1. I was thinking of placing a 20k trimpot between pin 3 of the 555 and the R1 pot. I think theoretically this additional trimpot will allow me to adjust the frequency while R1 will allow for the duty cycle to be altered.

          Not to worry though. I still have your design in mind for possible final solution.

          • Terry 2:51 pm on February 19, 2013 Permalink | Reply

            I realize now, with the 20k trimpot included that will most likely affect the outer bounds of the duty cycle that can be attained. We shall see if it will be something that can be lived with.

            • schoolie 9:13 pm on February 19, 2013 Permalink | Reply

              I think you’re right on the trimpot limiting the duty cycle. However, I think it may work if you placed it in between D1 and R1. In that position, it would limit the minimum off time, while still allowing zero on time. This would work better than placing it after R1 because the MC-2100 only accepts 0 to ~85% duty cycle. Driving it over 85% shuts it off, I assume this is a failure mode prevention, wouldn’t want the treadmill taking off if a wire gets shorted high!

              There’s also the max speed calibration pot on the MC-2100. I haven’t messed with it, but I think it should be able to compensate somewhat even if your max duty cycle ends up under 85%.

    • Christopher 10:35 am on March 8, 2013 Permalink | Reply

      Hello, finding this thread very useful. I’ll be building one of these controller boards soon…could someone tell me the id of the two components on the MC2100e rev c board please,they are the two pieces attached to the heat sink on the left, Q5 and D13 I have G4PC40K for Q5 but I can’t identify the diode (I presume?). Many thanks

      • schoolie 7:22 pm on March 8, 2013 Permalink | Reply

        On mine (MC-2100 WA, one of the US versions), the two large components on the left of the heat sink are labeled Q2 and D13. Are these the components you’re asking about? I’ve noted them in the following picture: Q2 and D13 Identified

        Here’s a closeup shot of the two components, showing their labels: Q2 and D13 Closeup

        The components in question on my board are Q2: IRFP250N, and D13: HFA15PB60. They match the reverse engineered schematic I’ve posted previously. They’re the switching transistor and flywheel diode for the main motor current.

        The MC2100e may be different, I’m curious to see if your components match this.

    • Terry 7:13 pm on April 13, 2013 Permalink | Reply

      I am still working on this. I managed to obtain an oscilloscope to check my circuit. I switched to a different circuit:

      https://docs.google.com/viewer?a=v&q=cache:vW4M9Vp1GCgJ:www.cnczone.com/forums/attachments/general_electronics_discussion/174479d1357493353-treadmill_motor_control_questions-mc-2100_manual_control.pdf+&hl=en&gl=ca&pid=bl&srcid=ADGEEShdQPhtzoNEzeHsSpGM37y_bSOMLcjEVnpUxR6rPj_8BHDZm4wBZDwB84ZjlomXC-gTEyjooHnh8CcnHEzp0f8dgHNGRR0h9-TXCBn7wGfUbKqQCPtWdIV7ULzSApFr_LCXUWyu&sig=AHIEtbRSMJWVHsMoadhGeNFwI2N2GD30kw

      simply because I had the parts for it.

      I added a 7805 voltage regulator to power the above circuit since the specs on the MC-2100 states there is 9VDC on the red wire and a 5VDC signal is required on the pulse (blue) wire. On the test bench with a 12VDC power supply the output signal looks good frequency-wise. When attached to the MC-2100 with the cable that came with it I can get the on-board LED to blink but the motor is erratic. I found the 7805 to also get very hot. While on the test bench the 7805 does not get hot at all!!! Removing the cable and using some of my own jumpers instead, the results were better and the 7805 was much cooler. Testing the original cable for continuity shows good so this does not make sense.

      Attaching the scope on the ‘pulse’ line at the board shows a decent signal other than the fact that the highs are around 3VDC. Which led me to believe that it was too low to allow the MC-2100 to function properly. I am thinking that the MC-2100 is not receiving a high enough voltage. So, since the above circuit did not include a voltage regulator I decided to bypass it and apply the full voltage from the red wire of the MC-2100. The motor appeared to work much better. I thought I had found my solution until I started to smell smoke.

      After quickly disconnecting the cable, looks like I burnt out a 22 ohm SMD at the connector’s ‘pulse’ signal. I figure I can replace with a regular resistor of same value. Hopefully, that will be the extent of what has burnt out.

      Just wondering if you noticed or had issues due to the signal voltage level as well.

    • Terry 9:35 am on April 14, 2013 Permalink | Reply

      In my further research I found the following:

      https://docs.google.com/viewer?a=v&q=cache:uyJl0hcT9U8J:www.maritv.net/Public/data/dicaspas/2013131124817_MC2100_rev_engrd.pdf+&hl=en&gl=ca&pid=bl&srcid=ADGEESijUyUueuScx-NntEDDNO_nKdQKWaHg4Jc9uoEl3Hmil2IQeYvV_ysnr00kSuvFJQqRE9WvKFatfkB2dbNWkL9j16wEaSysJJ-v0j4XbXDtFeGajSQYLtbY2i9YsPho7K-LngVj&sig=AHIEtbT3xAB-J3LScdvmB8PM4XFAeyBUxQ

      which is stated to be for the REV B. board. Which happens to be the board I have. What luck!!! And it confirms the 22 ohm resistor at the ‘pulse’ (blue) wire. A lot of other useful comments on the schematic as well that other people might find handy.

      Cheers.

    • schoolie 10:20 pm on April 14, 2013 Permalink | Reply

      Regarding the low voltage measured at the MC-2100 control input, I noticed that as well. Everything I checked seemed OK, so I’ve left it alone. Upping the voltage to try to overcome the voltage drop burned the resistor out as you suspected.

      I’m as stumped as you are on the regulator overheating.

      I wonder if your inconsistent operation when plugged in is due to the noise from the motor signal I described in the post above. Putting a capacitor from ground to the wiper on the potentiometers may help, but I haven’t studied your schematic well enough to say for sure. I’d put the scope on the output when you turn the motor on. Watch for the signal to break up when the motor starts turning. If it’s interference from the motor signal, it’ll be at a much higher frequency than the control signal (60 usec period).

      Hope you didn’t look too far for the schematic, I had it posted here, lol 🙂

      • Terry 10:42 pm on April 14, 2013 Permalink | Reply

        I managed to get some more testing done today. With a little research I found that placing a 100uF on the input of the 7805 improved the voltage level on the output. A 0.01 uF on the 7805 output really cleaned up the 5V rail and the signal. This also really ended up raising the signal highs to 5V. Once I fix up the 22 ohm resistor on the MC-2100 I am theorizing that the motor will work much better.

        I probably saw your copy of the MC-2100 schematic when I first saw your blog months ago because I had a printout but just forgot where I got it. Didn’t think to check here again, but no worries it didn’t take me long to find it. The nice thing is that it shows the external PWM circuit is isolated from the rest of the MC-2100 via the optocoupler. An additional resistor on the PWM output to the MC-2100 may be a good idea to limit current through the 22 ohm and optocoupler.

    • Terry 10:41 am on April 16, 2013 Permalink | Reply

      Well, interesting, very interesting.

      I write this to potentially assist anyone else trying to get the MC-2100 working and maybe offer a different perspective. Not to take away from this original blog because it has certainly helped me greatly.

      If you have read any of my previous posts, I managed to burn out a 22 ohm resistor. Well, I have replaced that resistor and did some testing again. With the scope attached I found the signal from my circuit greatly affected when I attached it to the MC-2100. With the PWM circuit attached I paid close attention to any smoke or overheating. I think now that the output of the circuit I am using is really not designed for direct input to the MC-2100… First is the voltage I used which blew the 22 ohm resistor so I definitely advise the addition of the 7805 voltage regulator. And now as I pay closer attention to it, I find that the optocoupler is also getting very warm. Although I haven’t yet found max ratings for the anode-to-cathode of the optocoupler it appears that I am exceeding the maximum current rating. Reviewing this document: http://preher-tech.com/documents/optoisolators suggests that the forward resistance on a good optocoupler which matches the device on the board (F817), there should be around 20 ohms. In conjunction with the external 22 ohm that means a direct 5V signal would set the current at 125 mA…seems a little much and may also explain why my 7805 voltage regulator gets warm only when the MC-2100 ‘pulse’ (blue) wire is connected to the PWM circuit. I will be removing the optocoupler to properly test it to see if it is still good and I have to rethink the link between my circuit and the MC-2100. Maybe adding an additional resistor in series would be a good start to limit the current through the optocoupler.

      Cheers.

      • schoolie 8:10 am on April 17, 2013 Permalink | Reply

        Terry,

        You’re correct on the need for an additional resistor. I hadn’t noticed it previously, but now that you’ve brought it up, it’s definitely necessary.

        The LED in the optocoupler (like all LEDs) has a constant voltage drop regardless of current (unlike a resistor). According to this datasheet, the forward voltage drop of the LED in the F817 optocoupler (U1 on the schematic) is 1.2V. This leaves 3.8V to be dropped by the resistor(s) in series with it when 5V is applied. With only the 22ohm R2 resistor, that results in a current of 172mA, much higher than U1’s 50mA max rating. It’s not continuous, so it doesn’t cause instant failure, but it’s definitely not good.

        I looked at the circuit board from the treadmill’s dash panel, and sure enough there’s a 240ohm resistor in series with the control signal output. This brings the total resistance to 262ohms, and the current through the optocoupler to 12mA. Much better!

        With that understood, it’s likely ok to drive the circuit without the regulator, just using a larger series resistor to compensate for the increased voltage. For example, assuming the MC-2100 outputs 9v, the resistor needs to drop 7.8V. A 620ohm + 22ohm resistor pair would result in the same 12mA current through the optocoupler .

        I haven’t tested this at all, but I’m confident that it’s the right direction to head.

        Good catch!!

    • Terry 7:52 pm on April 20, 2013 Permalink | Reply

      schoolie,

      I added in a 680 ohm resistor in series on the output of my circuit into the MC-2100. Works well and no more overheating. And with the addition of this resistor I was able to remove the voltage regulator and its associated capacitors to increase much needed realty on my prototype board. Thanks for the suggestion.

      I am running into a problem now which I didn’t see in any of your blog posts and I was wondering if you encountered a similar issue. This is the situation:

      1) With all pieces hooked up (PWM, MC-2100 and motor) and powered up, the frequency on the PWM is adjusted until the MC-2100 LED is blinking and the motor runs.
      2) The motor is left to run for a 1/2 hour to check for any overheating issues.
      3) Power is switched off which of course turns everything off.
      4) Power is switched back on.

      Now, at this point since the motor was running and the MC-2100 LED was blinking just before power was removed, it is expected that everything would just start up again when power was turned on again. However, it does not. The LED does not blink and the motor does not run until the trimpot on the PWM circuit is once again adjusted which gets everything going again. It is as if the MC-2100 needs to be manually reset until it can once again recognize the required frequency. I was thinking that once the frequency on the PWM circuit was set I wouldn’t need to adjust the trimpot ever again.

      Any suggestions or ideas from your testing?

      • Terry 9:30 am on April 21, 2013 Permalink | Reply

        Turns out the MC-2100 has a safety that requires ‘user input’ from the treadmill before it starts, to be sure it is not starting at full speed. Adding in a switch gets around this. All is good now.

        • schoolie 8:39 am on April 22, 2013 Permalink | Reply

          Yep. When the MC-2100 powers up, it doesn’t act on the control input until it sees a zero speed signal. I’m curious, what are you using the controller for? Sounds like a fixed speed application?

          • Terry 8:45 am on April 22, 2013 Permalink | Reply

            Actually it is not even mine but a friends. He just didn’t have a way to control it. He is attaching the whole thing to a lathe.

        • Robin Midgett 1:50 pm on February 13, 2022 Permalink | Reply

          I have the same issue..where is the added switch connected in the MC-2100 circuit?

    • Raymond 8:54 pm on May 13, 2013 Permalink | Reply

      Hi Guys, I plan on building the PWM that you guys worked out. I was wondering if you could put together a complete parts list. If you could I would appreciate it

      • Terry 9:43 am on May 14, 2013 Permalink | Reply

        Hi Raymond,

        My final circuit differs from schoolie’s simply because I didn’t have all the parts for his design. I believe you can find everything you need here about schoolie’s design but I am putting a full document together (start to finish) of all the work I have done as well to help others whether they want to use the same circuit or not. I should have that completed over the following weekend. With schoolie’s permission maybe I can post that document here as well for you to obtain.

        Terry

        • schoolie 10:20 am on May 14, 2013 Permalink | Reply

          Raymond, I’ve got a few changes that need to be made to the circuit to simplify and correct the output current. I’ve built the circuit, but haven’t had time to test it. Once I’m happy with it, I’ll post up the parts list and schematic.

          Terry, I’d love to have your solution documented as well. Whenever you get around to it, write something up and I’ll post it here for future reference.

          Thanks!

          • Raymond 2:17 pm on May 14, 2013 Permalink | Reply

            Terry & schoolie

            Sounds great I’ll be patient & await the completion of the PWM project.
            Just to let you guys know I am so green at this Electronics stuff, but am learning allot.
            I think I should not have a problem putting one together.
            I wish I had the knowledge that you guys do.

            Thanks Again
            Raymond

          • Terry 9:44 pm on May 18, 2013 Permalink | Reply

            schoolie, I couldn’t find a way to upload my document (PDF) here. Maybe only you can do it. Let me know.

            • schoolie 2:58 pm on May 20, 2013 Permalink | Reply

              If you email it to me, I’ll include it in my next post. I think I’ve got the final version of my circuit ready to go as well. My address is brian(dot)p(dot)schoolcraft(at)gmail(dot)com

              Thanks!

            • Amir 3:59 pm on June 28, 2015 Permalink | Reply

              Hey Terry & Schoolie,

              I’m having some weird issues with the MC 2100 control board, if you don’t mind me throwing a few questions at you guys I’d greatly appreciate it!

              Thanks

    • Mike Dimond-Jones 10:11 am on April 11, 2020 Permalink | Reply

      Hello

      Do you have any idea where I could find some info on the Icon Healthcare MC2000-E? I’ve come across a few articles about the newer 2100 but nothing for the 2000. The only external control “circuit” it has is simply a variable resistor so I don’t think it would work with your 555 based pulse generator.

      For what it’s worth: when powered up, the +15V LED comes on but none of the other LEDs do. The connection between the control resistor and the board looks OK with a multimeter and I think the motor is OK because my meter registers a voltage when I spin the motor by hand.

      Mike

  • schoolie 11:38 am on February 12, 2013 Permalink | Reply
    Tags: , , , , PWM Controller   

    MC2100 Dashboard Replacement Control Circuit Update 

    This is another quick update on the MC-2100 PWM controller project. I’ve tweaked the schematic a bit to put the 5v regulator at the beginning of the circuit, which I think is a better configuration. This circuit is currently on a breadboard, and worked great until the connections in the breadboard started wearing out (around a month of occasional use, including our paintball gun build day). Here’s the latest (and probably final) revision:

    MC-2100 PWM Controller Circuit v4

    When I started this project, I wanted to get this circuit working without a microcontroller for the sake of education and simplicity. At this point, I’m comfortable with calling that goal achieved. Now it’s time to move on to more features, like a tachometer and possibly closed loop control!

    My current direction with this project is to develop a combined tachometer/speed control for the MC-2100 and my lathe. I plan to use an arduino to measure speed, display the speed via 4 digit 7 Segment modules (salvaged from the treadmill control panel), and send the PWM signal to the MC-2100. At this point, Joe and I have a working version of the code put together, and the circuit prototyped on a breadboard. I’ll update with progress once we’ve got something more final.

     
    • Terry 11:03 am on February 17, 2013 Permalink | Reply

      I am using your latest circuit to connect to an MC-2100 board. Did you find the 7805 voltage regulator to get extremely hot? I am finding the current on the output of the 7805 to be in excess of 250ma… With a 7V drop (12 – 5) that works to a minimum of 1.75W to dissipate at the regulator.

      • schoolie 12:04 am on February 18, 2013 Permalink | Reply

        Hey Terry, I hooked up the circuit to take some measurements today, and mine was only drawing around 80mA. I also noticed a few things I’d left out of the schematic, and made a change that reduced the noise being picked up from the motor. I wrote up the changes here:

        MC2100 Dashboard Replacement Control Circuit Update 2

        I’d love to hear how this works out for you!

    • ajcharles 5:43 pm on April 3, 2014 Permalink | Reply

      I tried the circuit it work well except I haf to make some modification tp it. I had problems keeping the speed constant so I hsd to add a diode frpm output to controller input. Also the frequency of my controller was 57.7

  • schoolie 12:15 pm on November 12, 2012 Permalink | Reply
    Tags: , , , , PWM Controller,   

    MC2100 PWM Controller Schematic 

    Just a quick update. I haven’t finished the permanent driver board, but thought I’d upload a better version of the schematic. I’m currently trying to decide if I’ve messed up the MC-2100, or if my soldering just sucks. At this point, I’m getting the motor to come on, but not consistently like it was with my breadboarded circuit. The indicator LED will flash 5 or six times, and the motor starts turning, then the LED goes back solid like it’s not getting signal, and the motor slows back down. I’ve had a couple of occasions where the motor will run up to full speed, so it’s at least close. I can at least confirm that this circuit worked on the breadboard, as shown in the previous post.

    Schematic of PWM Driver

    I also wanted to post a few of the relevant files I’ve found pertaining to the MC2100.

    Here’s the document that describes how the controller is interfaced with the treadmill, and the function of each pin of HD2 on the MC2100.  This is essentially the same file that James linked to in the comments on my previous post.

    The following file has been extremely helpful in troubleshooting the MC2100 itself as I’ve messed it up along the way.  The file was provided by a member of the Home Shop Machinist forums in this thread.

    Reverse Engineered Schematic

     

    Check out the rest of the MC-2100 Project Here

     
    • Darrel 12:01 pm on February 6, 2013 Permalink | Reply

      You might have opened my eyes now with this cheers

      • schoolie 12:06 pm on February 6, 2013 Permalink | Reply

        Great. Hopefully it’s helpful. Let me know if I can clear anything up!

    • chris 1:40 pm on March 30, 2014 Permalink | Reply

      hey, i’m trying to do the same thing. wondered if i could ask you a couple questions… chris

    • Ian Grant 11:57 am on April 1, 2014 Permalink | Reply

      Hi,
      Very impressed by your expertise and wondered if you’d be kind enough to help me.
      I have a treadmill with the MC2100.
      The belt motor is definitely OK and I think the MC2100 is ok too.
      It seems that the console is not sending the right signals.
      Occasionally I will get it to run and the led blinks as it should.
      The only functionality I’m trying to achieve is control of the motor and even 0-5mph would be OK.
      What inputs to HD2 are required to make this happen?
      Any help would be hugely appreciated – the wife is desperate to get back on her treadmill and I need the brownie points!
      Thank you
      Ian

      • schoolie 9:23 am on April 2, 2014 Permalink | Reply

        Hi Ian, the best simple circuit I’ve come up with to replace the console is in this post. It uses a 555 timer and a comparator to generate a ~50ms period variable duty cycle 5v square wave. The HD2 connections are shown on the schematic. The circuit uses a potentiometer as the user input.

        Let me know if you have any questions, or if the schematic doesn’t make sense to you.

        Brian

        • Ian Grant 8:42 pm on April 3, 2014 Permalink | Reply

          Hi Brian,
          Many thanks for your reply – much appreciated.
          Prior to your reply, I’d drilled down a bit deeper and came across Terry’s circuit which I’ve bought the bits for and have started to build, but maybe I should have gone for the one you suggested – or maybe either will work Ok.
          I’m very rusty on all this stuff. I’m a 65yr old Brit currently in America – where are you located out of interest?
          I’m immensely grateful for this blog (without which I wouldn’t have been able to get started!) and for the input of you fine folks
          Ian

    • schoolie 10:38 pm on April 3, 2014 Permalink | Reply

      Terry’s circuit should work fine as well, they’re just two different ways to accomplish the same basic goal. I’m in central Indiana. Let me know if you run into any problems asking the way. It’s cool to see people using this stuff 🙂

      Brian

    • earl kitover 4:29 pm on May 15, 2016 Permalink | Reply

      i have a https://www.youtube.com/watch?v=VArBLmZGpx0 which has ‘MC2100-12A Motor Controller’ controlling the dc motor. I tried messing around with it to bypass the 60s timer and I ended up killing the control circuit in order to bypass the logic. Is there anyway to replace, or I send it to you and you fix it (for which I pay you) but bypass the timer and just make it manual? i really like it and Proform doesn’t support it anymore. Thx Earl 773.419.7112

    • carlos 7:24 am on August 24, 2018 Permalink | Reply

      preciso do codigo do diodo da placa mc 2100 lt dido d1 e d 2

    • Mateo 4:07 pm on October 19, 2018 Permalink | Reply

      Hi, could you tell me what the Q4 component is?

    • Mark Henrikson 3:27 pm on July 4, 2020 Permalink | Reply

      Hi all, I apologize for resurrecting an ancient thread but you seem to know more about these cards than anywhere else I have found.
      I have two of the MC2100 Power Supplies that were replaced during troubleshooting and since that didn’t fix the issue, I believe they are fine.
      I don’t have the treadmill anymore, I am wondering if it would be possible to turn these into variable or even fixed DC power supplies for benchwork.
      If anyobe has ideas of how to do this, or if it is pointless, please drop me a line at yumadome@hotmail.com. I don’t know if wordpress will notify me of replies here.

      Thanks!!

    • Bob 2:56 pm on January 15, 2022 Permalink | Reply

      I am wondering if you have a solution to a MC-2100 rev b controller where the computer chip blew up?
      Can I just use the power supply system to drive the motor with the proper signals injected at the points of micro pin 12 ( 2 KHZ rep rate with a 20 usec pulse ) for the charge pump to control the +95 volt supply and micro pin 8 ( 60 usec fixed rate period with a starting pulse width of 4 usec and speeding up the motor with steeping rate of 0.25 usec increases of the pulse width) I believe I do not need to use micro pin 1,2,3, and 4 since I am not using this for a tread mill. I do not care about max speed, data from the console, or the motor current since I won’t be using it on a very heavy load. if this is possible is there any circuit designs you have to apply the proper signals at both input points that the micro computer would have been given from pin 12 and pin 8 of the micro computer?
      Thank you for your time to respond to my question.
      Bob
      toolsrbob@frontier.com

  • schoolie 10:34 pm on September 26, 2012 Permalink | Reply
    Tags: , , , , , PWM Controller   

    PWM Board for MC-2100 Treadmill Motor Controller 

    Free treadmills from Craigslist are a great source of DC motors and motor controllers for machine tools.  A quick search will yield several examples of people repurposing these motors and drive for drill presses, lathes, and various other equipment.

    From what I’ve seen, the MC-60 type controller is by far the most common in low end treadmills (the type you typically can get for free).  Three out of the four treadmills that have passed through my garage have had the same MC-60 controller, and nearly identical permanent magnet DC motors.  This controller is relatively easily repuroposed as a machine tool drive, as the input is a simple voltage divider circuit driven by a potentiometer.  Just take the pot off the treadmill’s dash, mount it to your bench, and you’re up and running.

    The MC-2100 proved to be a bit more complicated.  My first clue was the all digital dash on the treadmill it came out of.  A quick google concluded that the MC-2100 required a 5v PWM signal with ~50ms period.  I found a good reference circuit on the All About Circuits forum (Link):

    This circuit has two stages.  The first is an astable 555 vibrator.  Tapping off the capacitor charge pin (Pin 6 on the 555) results in a sawtooth output, with the frequency set by R1, R2, and C.  This sawtooth is then fed into a LM393 voltage comparator to convert the sawtooth wave into a square wave.

    Here’s my final circuit sketch:

    And a quick first test video:

    In my opinion, it was worth the effort to figure out because the MC-2100 is a high frequency PWM controller, as opposed to the MC-60 which is an SCR based controller that operates at line frequency.  This results in a much quieter motor.  Also, based on a couple quick test cuts, the MC-2100 seems to have a higher current capacity.

    Check out the rest of the MC-2100 Project Here

     
    • James 2:17 am on October 22, 2012 Permalink | Reply

      Hi,
      I have the same treadmill motor controller with a motor that I’m planning on using on a metal lathe (I recently had to sell my old Atlas 618 and I’m planning to buy a smaller taig lathe and want to have the motor & controller resolved before I buy it). Your hand drawn schematic is a little difficult to read in some parts and I was wondering if you could provide a higher resolution image. I have some basic electronics experience and a few 555 timers laying around, though I certainly would not be able to engineer this circuit on my own. If you don’t mind too much, I may ask for some advice along the way as well if I run into any problems.
      Thanks,
      James

      • schoolie 8:44 am on October 22, 2012 Permalink | Reply

        I’m working on getting this design soldered onto protoboard, and making a few tweaks along the way. I’ll get a better schematic put up once I get everything checked out and verifed working. I wouldn’t mind answering a few questions along the way either.

        • James 1:35 pm on October 22, 2012 Permalink | Reply

          I’ll stay tuned. Thanks.

        • James 2:55 pm on October 25, 2012 Permalink | Reply

          I had a few old Arduino boards laying around. I relearned how to program them and came up with this simple code (pasted below for anyone looking to do this in the future) to run the motor off of a trim pot. It works perfectly. I had read that the controller likes a frequency of 51ms, mine likes 49 or 50ms, which is what I used for my code. I had also read that the maximum duty cycle is 85% on, which is why I scaled the pot value from 0 to 42.

          Necessary parts:
          1 – Potentiometer
          1 – Arduino Board (around $30)

          This code creates a PWM signal with 0-85% duty cycle and 50ms frequency on the MC 2100 treadmill motor controller

          int ledPin = 11; //this is the PWM signal out
          int pot = A0; //Potentiometer (connected from 5v+, A0, Grnd)
          int potValue = 0; //Tells Arduino there will be a # named potValue

          void setup()
          {
          pinMode(ledPin, OUTPUT); //tells arduino pin 11 is output
          Serial.begin(9600); //arduino counts. only necessary if you want to pint (below)
          }

          void loop() //the following cycle will repeat every 50ms
          {
          potValue = analogRead(pot); //reads potentiometer value
          potValue = map(potValue,0,1023,0,42); //scales potValue to 0-42 (85% duty)
          digitalWrite(ledPin, HIGH); //turn duty on
          delay(potValue); //time duty is on
          digitalWrite(ledPin, LOW); //turn duty off
          delay(50 – potValue); //time duty is off (50 – on time)
          Serial.println(potValue); //not necessary. shows duty on computer
          }
          The analog out pin (11, named ledPin) is connected to the blue wire, and the black wire is connected to the arduino’s ground. The arduino is powered by the red and black wires from the controller. I also found this wiring diagram of the controller:

    • treadmillmarketing 3:18 am on January 11, 2016 Permalink | Reply

      The MC type controllers follow the same logic of operation, and they could be replaced by MC2100 Astek, that is a very reliable and cheap controller.
      http://www.partsfortreadmill.com/catalog/product/gallery/id/165/image/1209/
      http://www.partsfortreadmill.com/catalog/product/gallery/image/1210/id/165/

c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
Reply
e
Edit
o
Show/Hide comments
t
Go to top
l
Go to login
h
Show/Hide help
shift + esc
Cancel