Tagged: Atlas Lathe Toggle Comment Threads | Keyboard Shortcuts

  • gumby3344 8:35 pm on December 16, 2014 Permalink | Reply
    Tags: Atlas Lathe, , , , ,   

    Looks like a valve build might be able to happen this weekend! We are pumped to get the Ion firing more effectively. As long as I can get to work on some design we should be able to turn it out this coming weekend!

  • gumby3344 7:21 pm on December 1, 2014 Permalink | Reply
    Tags: Atlas Lathe, , , ,   

    Making a Paintball Gun From Scratch – Hey! It's a Gun! 

    With our last build resulting in a gun that could be muzzle loaded to fire single shots, Brian was confident that we could attain semi-auto firing over the course of the coming weekend. The main problems and parts that needed to be addressed to get to that point were correcting the cycling issues in the bolt, rigging a sort of makeshift trigger system to fire the gun, and feeding paintballs into the system.

    The issue that had to be solved first was the issue of cycling. After our second build, we found that the bolt was not being forced forward by the firing pressure when the control pressure was released. To fire the gun, we had to assist the bolt by pushing on the back of it with something. We expected that the primary cause of this problematic friction was the surface finish of our internal parts. This appeared to be an easy fix after some fine grit sanding on the lathe. Another way that we helped the movement of the bolt was by deepening the o-ring grooves to relieve a little pressure on the bolt.

    After these two fixes, the bolt started to cycle the way it was intended. In order to achieve semi-automatic dryfiring, we had to rig up a hose system to imitate our future trigger. This is roughly what we came up with…

    Gun air rig sketch semiauto

    In this setup, pressure is supplied by separate hoses. The firing pressure is constant as it will be on the final version, and an air gun is used to dump pressure from the control chamber in place of a solenoid-actuated valve. We did have a problem off the start because the trigger pressure input was pumping air too fast for the air gun to dump it. this was causing the chamber to remain at too high a pressure for the bolt to cycle. to fix this, we basically jammed a plug into the input hose to slow the rate at which air could flow through it just enough to allow the bolt to cycle. With this setup, we achieved semiautomatic fire without ammunition.


    At this point I am returning to this post after over a year of absence, so my recollection may be a bit fuzzy. I apologize for any inconvenience.


    In order to feed paintballs into the gun, we decided to create a basic hopper feed system by boring a large hole in the top of the gun. We then threaded the hole and created another piece that fit tightly onto the neck of a hopper and threaded into place on the gun.

    Since this was the first time we had to do anything on a different axis than the firing axis, it meant we got to use a new toy. Brian had recently bought a four jaw chuck that was useful for this type of operation. The mount for this job is pictured below. The hole was started using a wood bore bit, and the hole was widened using a boring bar.

    2013-07-20 11.05.21


    After making both parts, we attached a hopper and voila! It is amazing how much that hopper makes it look like a gun.

    2013-07-20 14.39.03

    We rigged up our makeshift trigger system (partially pictured above) and took it outside to try firing it a few times.

    Now that the firing mechanism is operational, we need to set up a trigger mechanism. The primary phase of this process will be the design of the solenoid valve. A concept is shown below.

    First: A cross-section of the valve                     Second: A full image of the valve hammer



    This valve will be actuated like a solenoid. There will be a copper wire winding around the left end of the valve body which will pull the hammer back when charged.

    In the rest state, pressure will be routed through the valve as such:

    Valve_clip_air_diagram_restWith the valve in its rest state, constant pressure is applied to both the control chamber and the firing chamber. Due to the pressure in the control chamber, the gun does not fire. Once the valve is actuated by an electric current through the solenoid, the air pressure will behave as such:

    Valve_clip_air_diagram_fireWith the control pressure now dumped, the present firing pressure will be able to fire the weapon. After firing, the source pressure will return the hammer to its original position as soon as the solenoid is deactivated, allowing the recharge of the control chamber.

    Hopefully with some refinements to this design, and a free weekend to build, Brian and I can get a real paintball gun together. We still have to deal with making the gun run on CO2, which brings in a whole host of regulation and expansion issues, but I think we are fairly close to a workable product.

    I am sorry to anyone who was affected by my delay in posting this write-up, and I hope you enjoy its contents.


    • pan 5:08 pm on December 16, 2014 Permalink | Reply

      • gumby3344 8:07 pm on December 16, 2014 Permalink | Reply

        Hey! Looks good! Using the end-final position of sigma and everything 😉 <-(Not actually smart, just looked at Wikipedia) I am curious about the sigma in place of the Tau in invention, however. I think yours pronounces better, but for the sake of readability and direct letter translation I think am going to stick with the Tau for now, unless you feel like convincing me otherwise (which you probably could). Definitely smart to replace the omega with a beta though, I was a sophomore in high school when I made that logo and I think I just used whatever Word put in for me 😉 Thanks for the interest in the site and the helpful comment!!

  • schoolie 6:05 pm on February 7, 2014 Permalink | Reply
    Tags: Atlas Lathe, Evanut, , , ,   

    RF-45 Repair – Making a new Y-Axis Nut 

    The most recent success in my ongoing RF-45 mill repair project is the fabrication of a new Y-Axis lead nut. The stock nut was apparently lost somewhere along the way during the attempted CNC conversion that I’m partially reversing, so I had to come up with a replacement.

    My first thought at replacing the nut was to make a new one out of acetal plastic based on the method described at the Home Shop Machinist Forum. On second thought, I decided it would be much more practical to see if I could find a replacement part online. Like many of the chinese machine tools out there, this mill is one of many clones of an original design. In this case, the Rong-Fu 45 is the original, and my copy was produced by Penn Tools. Unfortunately, I was unable to find replacement parts through them, but Grizzly sells a similar mill along with replacement parts. I dug through the manual to find the part number, contacted Grizzly, and ordered the nut. Easy enough right?

    Unfortunately, the importer of my mill chose to use 8 TPI leadscrews, while the Grizzly version uses 10 TPI leadscrews, so the nut didn’t work. I returned it to Grizzly, and set off on my original plan of making the nut from scratch.

    I started by boring and splitting the acetal to fit the lead screw:

    (Read the rest of this post…)

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

    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.


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

          Joe Schoolcraft
          Brian Schoolcraft
          May 2013

          #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:


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

            Original from
            Joe Schoolcraft
            Brian Schoolcraft
            May 2013

            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

            _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

            _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?

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


      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.


      • 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..

    • 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

        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

        #include // include LCD library
        // 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);

        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 )
        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) “);
        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:
        case BUTTON_RIGHT:
        lcd.setCursor( 0, 0 );
        lcd.print( “RIGHT” );
        case BUTTON_UP:
        lcd.setCursor( 0 , 0 );
        lcd.print( “Increasing” );
        speed1 = (speed1 + 3);
        Timer1.pwm(PWM_OUT, 0);
        lcd.setCursor( 0 , 1 );

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

        /* an example of LCD backlight control via macros with nice labels
        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
        delay( 150 );
        LCD_BACKLIGHT(true); //leave the backlight on at exit
        delay( 150 );

        // 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;
        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!

    • 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

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

      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.

      • 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?

    • 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?


      #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);
      Timer1.pwm(PWM_OUT, 0);


      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);

    • 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.

  • schoolie 12:06 pm on May 22, 2013 Permalink | Reply
    Tags: Atlas Lathe, , ,   

    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


      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!

    • 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

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

    • 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!


      • 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.

      • 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!

    • 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.

  • gumby3344 4:05 pm on April 10, 2013 Permalink | Reply
    Tags: "I know what I am doing", Atlas Lathe, , , , ,   

    Making a Paintball Gun From Scratch – Still building… 

    Following the first day of work, we had nearly completed both the bolt and the charge chamber, and had completed the boltstop. In this session we needed to finish up these parts and create the firing chamber.  Brian and I had high hopes going in to this session. He was confident that we would at least fire a shot by the time I had to head home. I was somewhat skeptical! Although we were interrupted by some thermite and Doctor Mario, we were able to achieve this goal.

    We did the usual shaping and machining to get the firing chamber roughed out and then got on to the fun stuff… threading. Three parts needed threads. The firing chamber and charge chamber had to thread together at the middle of the gun; and we had to thread the inside of the front end of the firing chamber in order to put one of our Spyder barrels into it. The charge/firing chamber threads would be somewhat simple, as they only have to match each other and require no standardized dimensions. The barrel, on the other hand, has its own thread type that we would have to match. Just to make things more fun, The threads were metric, (M22 x 1.5) and our thread turning gears were standard. Brian worked his magic and got something pretty close to the barrel (7/8 x 16) and we went with it.

    External Firing Chamber Threads

    2013-04-06 14.57.03

    Internal Barrel Threads

    2013-04-06 14.56.39

    Whole Firing Chamber

    2013-04-06 14.55.42

    And I have saved the internal threads from the charge chamber for last to present you with a conversation that took place just moments prior to the cutting of the first internal threads we had done.

    Joe and I: “Brian are you sure you want to do this without a practice run or anything?”

    Brian: “I know what I am doing.”

    2013-04-06 15.44.41

    He apparently wanted our threads to look like the mouth of the Kraken, but as long as he knew what he was doing, who were we to question him! 🙂

    The embedded video shows our first paintball break on target.

    Gun air rig sketch

    The graphic above shows the air system we had set up when we fired the gun. Constant pressure is supplied to the firing pressure input, where the pressurized air waits to be released and force the ball from the gun. The bolt is held back by air pressure from the trigger pressure input. Whenever the air gun valve is open, this pressure is supposed to be keeping the bolt to the rear and keeping the gun from firing. Whenever this pressure is released (the air gun is pulled away from the input) the firing pressure should cause the bolt to move forward and the gun should fire. This wasn’t happening for us due to what we speculate to be general surface finish and O-ring fitting issues. With some further work and refinement this should be fixable. We ended up poking the back end of the bolt with random stuff and that provided the motivation required to start the firing cycle.

  • schoolie 11:59 pm on February 17, 2013 Permalink | Reply
    Tags: , Atlas Lathe, , ,   

    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:


      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:


      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.


    • 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.


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


        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


      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.

    • 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.


        • 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.


          • 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

          • 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


            • 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!


  • schoolie 11:38 am on February 12, 2013 Permalink | Reply
    Tags: , Atlas Lathe, , ,   

    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.

    • 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

  • gumby3344 11:03 pm on January 23, 2013 Permalink | Reply
    Tags: Atlas Lathe, , , , ,   

    Making a Paintball Gun from Scratch – The Build 

    Once Brian had gotten his design work fairly completed, we knew it was time to dive in and start our construction. I got a free weekend and headed up to Brian’s for a long day of trial, and hopefully not too much error!

    We decided to start work on the smallest and most simple part to sort of “get our gears turning” on the lathe. 😉 This part was the bolt stop, as shown in the picture below and depicted in yellow in the previously posted CAD screenshots. We somehow proceeded to pull it off without a hitch and moved on to some more “interesting” parts.

    Bolt Stop

    2013-01-15 22.11.022013-01-15 22.11.11

    (Read the rest of this post…)

  • schoolie 12:09 pm on January 8, 2013 Permalink | Reply
    Tags: Atlas Lathe, , , ,   

    Making a Paintball Gun from Scratch – Getting Started 

    Ben came over for the weekend a couple of months ago, and we were looking for a project to do in my fledgling machine shop. He’d never really used machine tools, and I hadn’t done any “real” machining in my home shop yet, so we were looking for an excuse to pick up some experience.  Ben’s in to paintball, so we decided to try to make a paintball gun.

    We tossed around making a Spyder clone since that’s what Ben’s taken apart the most, but decided not to because I wasn’t sure how we could make the stacked tube housing with the tools currently in my shop. Keeping things to a single centerline makes them a lot easier to make on a lathe!

    The next type of gun that came to mind was the Tippman style marker.  They work on basically the same principle as the Spyder, but are arranged in a straight line rather than two stacked tubes. However, neither of us had ever owned a Tippman, so we couldn’t just make up the design from memory. We did a bit of research and came across a great site in ZDSPB.com. With the info on that site, and a few crude hand sketches, we headed out to the shop to “get something done.”

    Ben running the Lathe

    (Read the rest of this post…)

  • schoolie 12:15 pm on November 12, 2012 Permalink | Reply
    Tags: , Atlas Lathe, , , ,   

    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

      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

      • 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.


        • 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

    • 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 🙂


  • schoolie 10:34 pm on September 26, 2012 Permalink | Reply
    Tags: , Atlas Lathe, , , ,   

    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

      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.

      • 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:

  • schoolie 12:36 pm on September 17, 2012 Permalink | Reply
    Tags: Atlas Lathe, , Miter Gear Repair   

    Repairing the cross-feed miter gear on an Atlas/Craftsman 12″ Lathe 

    I bought an old Atlas lathe on craigslist last year for $50. It was in need of a good cleaning and was missing a few parts, but all in all fairly sound. Joe made a replacement tailstock ram for it, and I’ve bought a new chuck and toolpost, and a few other bits. All in all it’s working pretty well after about six months of working on it off and on.

    One of the last features left to get working was the power cross feed. On this lathe, the cross feed is driven through a bevel gear set. The drive gear slides over the lead screw, and is supposed to be driven by a key that engages a slot in the lead screw. The bevel gears are ZAMAK castings, and the key appears to have worn away or broken years ago.

    Before Repair

    (Read the rest of this post…)

Compose new post
Next post/Next comment
Previous post/Previous comment
Show/Hide comments
Go to top
Go to login
Show/Hide help
shift + esc