I recently completed building a really cool Rotary Crystallizer, which uses a Poulu 17 frame stepper, a Tic 36v4, and an A-Star 32U4 Prime SV. The motion control task is very simple: rotate ten revolutions at 10 rpm in one direction, pause, and repeat in the reverse direction, over and over. So very low speed motion. I use a start speed and identical accel/decel. The ustep to full step ratio is 256. Specific settings are in the code snippet below.
Everything is working, with one minor irritant. I work in motion control, and am accustomed to more expensive such systems, which are perfectly quiet. In this system, something is very quantized, such that I hear distinct discrete speeds (tones) during accel and decel. At constant velocity (which is most of the time), I also hear the motor, likely pole modulation of velocity. My wife is pretty particular about extraneous noise, so these unwanted effects will mean the difference between growing crystals in one of our bathrooms, vs. banishing the crystallizer to the garage. Are there any settings I can change to both avoid the discrete sounds during accel/decel, and also smooth out (quiet) the constant velocity section? For the former, perhaps there is a way to trade off the capability for high speed motion, and get far finer velocity resolution during accel/decel. For the latter, perhaps the sine/cosine look-up table can be tweaked to compensate for pole cogging.
Are there any user accessible settings that could improve the audible performance? Thank you.
Code snippet:
void loop()
{
// Set Microstep Ratio, Start Speed, Max Velocity, and Max Acceleration
tic.setStepMode(TicStepMode::Microstep256); // 256 microsteps per full step
tic.setMaxSpeed(85333333); // 10 rpm
tic.setStartingSpeed(25600000); // 3 rpm
tic.setMaxAccel(298650); // 1 second accel time
tic.setMaxDecel(298650); // 1 second decel time
// Move to position 512000, which corresponds to ten counterclockwise revolutions of the crystal, and wait until it gets there.
tic.setTargetPosition(512000);
waitForPosition(512000);
//Dwell at this position for two seconds
delay(2000);
//Move back to position zero, which corresponds to ten clockwise revolutions of the crystal, and wait until it gets there.
tic.setTargetPosition(0);
waitForPosition(0);
//Dwell there for two seconds
delay(2000);
//and loop endlessly. Temperature control is handled separately by the Omega CN16DPT-145.
}
