Super-PID Optimised for...?


[1]: looks to have two options when you are attempting to purchase it:

  • Optimized for Manual/Hand Speed Control
  • Optimized for PC Software Speed Control (Mach4/Mach3/EMC2/etc)
    Which have people selected?

I have also searched the threads here for SuperPID and there were some cryptic references to modifications to the “control circuit”, what exactly does that mean/entail?

My setup will be the following:
X-Carve 1000mm (not yet shipped :frowning: )
DeWalt DWP611 (delivered)
SmoothieBoard 5xC (shipped)
3 NEMA 23 496oz steppers (shipped) (4th stepper TBD based on Z axis fitment)

I ordered mine optimized for pc control. The superPID uses a DC voltage to control speed. This voltage can be adjusted using a manual potentiometer, a DC input voltage from an external source (i.e. computer) or a PWM square wave from an external source (like the grbl shield). The superPID’s circuit converts the PWM wave to a DC voltage, so all three methods are essentially the same. The only difference between the manual or computer optimizations is the way speeds are mapped onto the range of DC voltage. For computer control, the mapping in linear, since computers are really good at precise adjustments. For manual, the mapping is nonlinear, with the low range being less sensitive. This makes it easier to adjust speed accurately in the low range. I would choose the computer optimization, because you can still get good enough manual control with this setting (especially if you use a large knob on the potentiometer). They even tell you this in the instructions. They ship it to you in one of the two configurations, but you can change it later on with a solder jumper on the circuit board.

I’m loving the superPID. Let me know if you have any more questions about it.

1 Like

Thanks for the detailed description! I ordered the PC control version. Worst case I will 3D print a ship captain’s sized when for the potentiometer. I will probably be creating a thread for my build since I’m going to be using the SmoothieBoard from the start. This will be fun once I actually get the core parts to build (I already have my Stainless Steel hardware from Bolt Depot).

I’ll be interested to see how it goes with the SmoothieBoard. One of the problems with the GRBL shield and the the SuperPID is that by default the GRBL shield has no spindle enable pin. With the DC spindles, I think you can use the spindle speed PWM signal to turn the signal off by simply setting it to zero. This would not work with the superPID since the minimum speed is 5000 rpm instead of zero. You can alter some of the GRBL header files to enable arduino pin 13 as the spindle enable pin, and also change the speed mapping so that g-code commands will accurately set the speed on the SuperPID. For this to work, you also need to upload the GRBL firmware with an ISP programmer rather than via USB. This is so you can overwrite the arduino boot loader and keep pin 13 from flickering on startup. I will probably use this solution, but I haven’t gotten around to it yet. Another solution I might explore is to use another arduino to pre-process the PWM signals from the GRBL arduino so as to disable the spindle when the speed is set to zero. This would make the g-code easier since I wouldn’t have to worry about spindle enable, just setting the speed. Most of this will probably not apply to the smoothie board, but I wanted to make you aware of these speed control issues.

Hmm. I really need to fix this problem with variable spindle and configuring it. Later this week I’m releasing Grbl v1.0b, as a beta release. It includes both a max rpm and min rpm ‘$’ setting. Min rpm low voltage, so you can set this to 5000 rpm. Will this help solve your issue?

Also, I’ll look into moving that spindle enable pin elsewhere possibly or give a compile option for users to put it on one of the analog pins. D13 is a problem with the flickering. AFAIK you can’t use it as an input, so it limits what you can do with it.

Thanks @SungeunJeon. I think being able to set the minimum and maximum would solve the issue. I guess the code would just set the speed at max or min if I accidentally entered a value out of the range? I think moving the spindle enable to one of the analogs is a good idea. Isn’t A4 available? Not a big issue personally since I have an ICSP programmer. Also, I could just wait until after the arduino boots to turn on the SuperPID. That is just one more thing to remember though. Thanks for all your work on Grbl.

Yes, the new build will set the spindle speed to the max and min rpm settings if they exceed their bounds. And A4 is available, but I think I was saving that for something, which I now can’t remember what. :slight_smile:


Did you ever get your setup finalized w/ the SuperPID? Just got mine installed and the knob works great but I got it optimized for PWM so I want to at least try it out before I make a change to manual optimization. Just wondering if you found a great setup.

I haven’t worked on it, @Joec. @SungeunJeon is going to make some changes to GRBL that will make it easier, so I decided to wait until I can upgrade my GRBL install.

I released a beta build of Grbl v1.0. It has the new spindle rpm settings. But, I’m not sure if it’ll be compatible with Easel until it’s officially released though.


Can you direct me to the beta build? I see some updates (as of 4 days ago) on the github site but I don’t see any versioning in the source code so I’m not sure if I’m looking at the right build. I’m happy to confirm these new changes for the SuperPID!

p.s. does this also include enabling the dedicated spindle-on PIN? that seems like a roadblock that I haven’t solved yet…

Its in the edge branch on github. The master branch is reserved for the stable release only.


Thanks for the guidance. I got it installed tonight and things are looking pretty darned good for the SuperPID. There’s just an issue of adjusting the PMW curve a bit, maybe. The only off thing that I noticed in the GRBL settings delivered with the beta were that the new min and max variable (30 & 31) used values that ended in a decimal point, e.g. $30=1000**.**

That looked odd to me because it didn’t follow any other convention in the rest of the settings, but I kept it in making my changes to $30=30000. and $31=5000. (these are the ranges for the SuperPID).

The only other thing that I haven’t worked out yet is somehow the X-axis and Y-axis are reversed (z is OK). I’m sure that’s a quick fix to something…forgot to back up those settings before reloading…oops!

Here’s a listing of RPMs sent vs. read on the SuperPID; the router is a Dewalt 611 if it matters. These were sent with simple S commands using a new copy of UGS on Raspbian.

Sent | Read
8000 | 5000
9250 | 5100 (9250 was the lowest I could go before noticing any lift off of the SuperPID’s 5000 RPM min)
10000 | 6070
12000 | 8420
14000 | 10884
16000 | 13229
20000 | 18050
25000 | 24065
28000 | 27760
30000 | 30003

Also, you note that anything below the defined RPM min will send a simple ON signal over the same PIN 11. How is that managed, wiring-wise, into something like the SuperPID? Just jump the SuperPID’s PWM to its ON terminal and M5 takes care of shutting the whole thing down?

Thanks so much for this update. I’ll continue to try to address these issues myself and report back with any progress. Also need to go find your PayPal info!

And here’s what the voltage map looks like vs. RPMs sent:

M5 | 12.7 mV
1-5000 | 31.8 mV (floor is set at 5000 in $31)
6000 | 0.22
9250 | 0.85
10000 | 1.00
12000 | 1.39
20000 | 2.95
30000 | 4.90 (confirmed max voltage)

So, it looks like I’m going to switch over to the SuperPID’s speed control voltage instead of PWM as my next step.

Update: no real change in switching to the speed control voltage approach - basically the same RPMs and voltages read. I’m going to start looking at the SuperPID more now…

Update 2: SuperPID wants 0V at 0 RPM even though 5000 is the min it will serve. Changing $31 to 0 made things much better but a bit too fast. Tweaking that value to $31=80 is the best I could get and it’s certainly acceptable for me - generally within about 20 RPM’s at tested speeds throughout the range. So now just getting it to start and stop!

Update 3: looks like I can use PIN D13 for on/off instead of spindle direction.

Good to see that it’s working. The min rpm setting is there for exactly what you did to tune the PWM output to the spindle output.

As for on and off, Grbl shares the PWM output and spindle enable in one pin. By default. But you can make pin D13 behave as a separate enable pin with a config.h define option. One problem is that the Arduino boot loader causes pin D13 to flash on and off upon power up.

I’m looking into ways to fix this problem by moving this pin elsewhere, but you can also get around this by flash Grbl with a ISP programmer. You can use a second Arduino to do this (and revert it too). This removes the boot loader and it s flashing pin d13 led problem.

Thanks @SungeunJeon I did just find that D13 option. Can I hijack D8 if I don’t need stepper disable?

Yes if you know how to alter the pin mapping and maybe hack the code a bit. It should theoretically work if you swapped d8 and d13 and enabled that option.

great, thanks - that’s what I’m going to try then. Seems pretty straight forward. I just wish I knew a hair’s more (than 0!) about electronics. I’ll report back. Thanks again.

I haven’t even started on the router portion of my build yet, but does the DeWalt DWP611 need to be modified to eliminate a soft start function so the super-pid will function normally? I saw numerous references to modification to routers, but no definitive list on which routers need to be modified.


Yes, but it’s easy. You unscrew the top, unplug two wires, then, connect them together…takes the speed control completely out of the loop. I have been loving my SuperPID, BTW.