Can my microstepping system be made quieter?

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.
}

Hello.

To avoid confusion, please note our company name is Pololu, not “Poulu.”

Your rotary crystallizer sounds interesting, and I am glad to hear that it is mostly working well. Unfortunately, the audible noise you are dealing with is a relatively common issue with using stepper motors, and there is not a single method guaranteed to eliminate it, but there are some different ways you could try to reduce it. My favorite article about this topic no longer exists, but you can still read it in this web archive, so I suggest starting by reviewing that.

One of the easiest things to try with the Tic that might have a big impact is adjusting the decay mode. You can find more information about the Tic’s settings for that in the “Configuring and testing the stepper motor” section of the Tic user’s guide under the “Setting the decay mode (T825, T834, and 36v4 only)” header. Adjusting your microstepping mode, current limit, and acceleration and deceleration rates could also affect the audible noise, so you might consider playing with those settings too if you have not already.

- Patrick