Unstable PWM motor control issue

More
7 years 6 months ago #130927 by F4br1c4t3D

Grotius wrote: Steven,

Your lollipop can consider Ethercat.
This is the fasted lollipop on Earth at the moment....


I rarely treat my confectionery with such lavish gifts!

Probably a bit overkill for a Chinese mini-lathe CNC conversion. I just want to be able to make fancy cylinders not create the worlds first sentient lathe!

Please Log in to join the conversation.

More
7 years 6 months ago #130929 by Grotius
When your dream's come true ....

Attachment not found



After the fancy overhaul it turned out to be the W16 of bugatti.

Attachment not found

Please Log in to join the conversation.

More
7 years 6 months ago #130935 by F4br1c4t3D

Grotius wrote: When your dream's come true ....


I think I actually preferred it before the gigantic lolly "upgrade".

What will I do about my motor control though?

Please Log in to join the conversation.

More
7 years 6 months ago #130941 by Grotius
You ordered a mesa i see.

i can only say. If you want to be happy keep up the good work !!

The 0 to 10 volt bob control has various settings. If you want to try another setting pm me.

I only hope that you are going the good direction to start with....
i.ytimg.com/vi/nIFwFKh30j4/maxresdefault.jpg

Please Log in to join the conversation.

More
7 years 6 months ago #131570 by F4br1c4t3D
Well i managed to sort this out in the end.I changed the PWM that LinuxCNC was outputting to use the full duty cycle range I then used an Arduino nano to read the PWM from LinuxCNC, apply smoothing with a software filter and used the servo.h library to send the smoothed input to my ESC in the PWM format that it understands. The result is a much more stable motor speed. +/- ~5rpm when a static speed is commanded; according to my handheld IR tachometer. I get within 30rpm of the commanded speed over the full speed range most of the tested speeds were within 5rpm of the commanded speed. Considering I've not implemented any PID loop for speed control I'm reasonably happy.

Which leads me onto my next question. How do I implement the PID feedback for spindle speed?

The .hal file generated by stepconf has many references to the spindle feedback but it's not set up to adjust for any error using PID. I tried following this example but it wont work as I end up with conflicts as things are already assigned elsewhere. I'm not sure what I need to remove/add/reconnect to have a PID modify my pwm based on the measured speed.

I'm not sure as I've not tested but I should have everything in place for spindle sync. and spindle at speed.

I've attached my .hal and .ini files, where would I start adding the code for the PID? what do I need to manipulate in my existing setup to allow me to integrate the above example into my configuration?

Please Log in to join the conversation.

More
7 years 6 months ago #131701 by andypugh
Because the velocity feedback is revs-per-second then you should rps for the PID.

So, delete
Code:
net spindle-cmd-rpm => pwmgen.0.value


A PID needs a command and a feed back as inputs and has one output.
Code:
#this signal already exists so re-use it net spindle-cmd-rps pid.0.command #this signal also already exists, so re-use it net spindle-velocity-feedback-rps pid.0.feedback #now connect the pid output to the pwm generator using a new signal net spindle-pid-output pid.0.out => pwmgen.0.value # and the pid enable, also a pre-existing signal net spindle-on pid.0.eable
You then need a set of "setp" commands to set the PID parameters, I would start with P, I and D as zero and adjust FF0 until the speed is right at one setpoint, then increase I until it becomes right at all setpoints, then perhaps add some P to make it settle faster.

Please Log in to join the conversation.

More
7 years 6 months ago #131712 by F4br1c4t3D
Hi Andy,

Thanks a lot for your input. I've now adjusted my config since posting the above files. and started a new thread here since this isn't really about the PWM issue anymore. I believe I have now made the correct connections, the loop isn't stabilising the speed but rather causing the motor to grind to a halt immediately after starting. PCW had already given me similar advice on that thread regarding setting ff0 first, then introducing some the other terms. you're saying start with I to rein in any outlying speeds then a touch of P to increase responsiveness. Got it! Thanks very much for the advice.

Cheers,

Steve

Please Log in to join the conversation.

More
7 years 6 months ago #131782 by F4br1c4t3D
Hi Andy,

Well I tried what you suggested above and it didn't work out.

I removed the line you suggested
Code:
net spindle-cmd-rpm => pwmgen.0.value

It seems though, without this line, the spindle won't spin up at all, even though we're reconnecting the pwmgen.0.value to the output of the pid. What gives?

Here's what I added:
Code:
setp pid.0.Pgain 0 setp pid.0.Igain 0 setp pid.0.Dgain 0 setp pid.0.FF0 1 net spindle-cmd-rps pid.0.command net spindle-velocity-feedback-rps pid.0.feedback net spindle-pid-out pid.0.output => pwmgen.0.value net spindle-on pid.0.enable

Also attached is the rest of the .hal as it currently stands, as I'm guessing I'm missing something else.

Please Log in to join the conversation.

More
7 years 6 months ago #131784 by andypugh
Use halshow to work out where the signals are getting confused.
(machine -> show hal configuration if using the Axis interface)

Please Log in to join the conversation.

More
7 years 6 months ago #131785 by PCW
Did you re-scale the PWM for RPS?

( actually I think it would be an improvement in LinuxCNC for the encoder module to have a RPM velocity pin )

Please Log in to join the conversation.

Time to create page: 0.072 seconds
Powered by Kunena Forum