I Could use some Suggestions for PID Tuning

I see the same behavior - the motors whine but do not move. - Cancel that, the motors move, but by a very small amount.

Something left in the eeprom?

Same thing here, motors wouldnt move… just had another gc open and when I closed, it worked.

Are you saying that a different release of GC worked with the PID_Tuning firmware?

Well I apologize everyone. Not sure why things are so different, thank you so many people for trying.

Is it possible there is some distinction with the pcb versions? I have the first release, not a beta. Anyone else also on a non-beta board?

Kinda grasping at straws here.

No just saw that the old gc was still open after installing firmware and gc, making pid changes then running(trying w motors barely moving.)
One weird thing though, I went back in settings in new gc and top pid was switched to off. Switched back on and motors moved normally.

My GC version is reported as .91 and the Firmware reports .90. Still trying to figure out what this could be.

I have 3 pcbs all bought from maslow store in past 2 months

I found what I was doing wrong - the ‘Enable Custom PID…’ switches were off. Once turned on, the sled moves as expected in response to the arrows. Haven’t run any test files yet, but the movement issue was ‘operator headspace error’ im my case :blush:

2 Likes

Phew, well that is a relief at least something happens for someone.

1 Like

The settings should look like:

2 Likes

I have also discovered an error in the delay time calculation for straight line moves. It was contributing to some of the vibrations and was causing a slow down of about 50%. With that fix, I am able to use the regular P_on_E setting without any KI at all with some really good results and no sign of Iterm windup. So apologies, I may have better settings yet to come.

2 Likes

Even better settings yet to come sounds exciting!

I’m still seeing the same issue I was before where the machine doesn’t want to move.

I’ve got my settings set up to match yours

And I can see that they are actually getting pushed to the machine, but no movement.

image

I’m sure the issue is

in my case as well, but I’m not sure what the error is.

Using the PID_Tuning firmware, if I use an arrow to move the sled as soon as communication is established, there’s time for one movement before getting a ‘Connection Timed Out’. After the connection is re-established, the firmware has lost it’s location and sends the wrong position data in the chatter with GC.

I don’t know what is going on, I kinda suspect there is some other issue with pushing settings to the machine.

But in order to try and limit this down, I broke up a number of my commits that shouldn’t cause issues into small topics that can be merged into master and submitted pull requests for those branches.

One other thing that people may want to try, is to set the new tunings, and then restart GC. It might be an issue with needing to flush the Iterm when updating the tunings and a restart will do this.

I agree that it feels like a separate issue with how settings are pushed to the machine. Breaking it into multiple pull requests is a great idea. We can go through and find which one is giving us trouble and hopefully find out why the settings aren’t pushing

Not sure I understand, but I created a macro to print the motorGearboxEncoder.getPIDString values and they seem to change to follow the Custom PID Values toggles.

1 Like

Well that is half of it. If you can figure out a way to print out axis.getPIDString() that would give us the other PID values.

If those are both correct, I am really stumped

I probably misspoke; I’m printing axis->getPIDString for each axis. I’ll look into getting the motorGearboxEncoder values. Sorry for the confusion…


if(gcodeLine.substring(0, 3) == “B15”){
//print PID values
Axis* axis = &rightAxis;
// Serial.println(F("–PID Position Test Start–"));
Serial.println(“Axis=” + axis->motorGearboxEncoder.name());
Serial.println(axis->getPIDString());

axis = &leftAxis;
// Serial.println(F("–PID Position Test Start–"));
Serial.println(“Axis=” + axis->motorGearboxEncoder.name());
Serial.println(axis->getPIDString());

axis = &zAxis;
// Serial.println(F("–PID Position Test Start–"));
Serial.println(“Axis=” + axis->motorGearboxEncoder.name());
Serial.println(axis->getPIDString());
}

It is entirely possible that this isn’t an issue, but this code should work

if(gcodeLine.substring(0, 3) == “B15”){
//print PID values
Axis* axis = &rightAxis;
// Serial.println(F("–PID Position Test Start–"));
Serial.println(“Axis=” + axis->motorGearboxEncoder.name());
Serial.println(axis->getPIDString());
Serial.println(axis->motorGearboxEncoder.getPIDString());

axis = &leftAxis;
// Serial.println(F("–PID Position Test Start–"));
Serial.println(“Axis=” + axis->motorGearboxEncoder.name());
Serial.println(axis->getPIDString());
Serial.println(axis->motorGearboxEncoder.getPIDString());

axis = &zAxis;
// Serial.println(F("–PID Position Test Start–"));
Serial.println(“Axis=” + axis->motorGearboxEncoder.name());
Serial.println(axis->getPIDString());
Serial.println(axis->motorGearboxEncoder.getPIDString());
}
1 Like