I'm working on a solution for a paper roll winding application. As the roll turns, which is powered by a stepper motor, the paper is pulled onto the roll. As the roll is turning, the diameter is constantly changing.
The current setup is a stepper motor driving the roll, and a rotary encoder that rides directly on the roll, pivoting out as the roll diameter increases. I've previously tried using a PID control (specifically PI) and the output is not very stable, especially at higher speeds. The minimum linear velocity of the system is 5 in/min, with a maximum velocity of 100 in/min.
I've been working on an idea where the rotary encoder could be used to measure the current diameter of the roll, and then that data could be used to predict the future diameter (linearly extrapolated) based on the current line speed setpoint. I've equated that a change of 1 pulse/min from the encoder signifies .006" of accumulated roll diameter by using simple gear train calculations. The pulses could be measured at 5 sec intervals in order to collect enough data to "filter" any noise (errant pulse) that had been picked up. With a previous pulse/5 sec event along with the current pulse/5 sec event, a predicted pulse/5sec event could be generated, and then used to calculate the predicated roll diameter. This predicated roll diameter would then be used to find the required RPM of the roll based on a line speed setpoint in inches/minute (user defined). This required RPM could then be used to calculate the number of steps/min required of the stepper motor. From there, the required steps/min would be compared to the current steps/min that has been tracked in the program, and the step delay adjusted accordingly to meet the next steps/min.
I've attached a spreadsheet which shows the calculations that I've worked up. I'm thinking this control scenario would work, but would appreciate input to the contrary, as well as other ways of tackling this problem.