Fans don't spin @ 24% Taz 6

I have a brand new MOARStruder, running latest Lulzbot Cura on a 2 day old Taz 6 with the latest MOARStruder firmware and all factory settings on the “Standard” print profile.

As we know, Cura varies fan speed as the print progresses or when minimum layer time has not been met. The issue is that at 24% Fan speed (which I assumed was ramped up from 0%), the fans don’t have enough current to start spinning. This leads to a lack of cooling for the first few layers, which results in rough infill. I managed to start the fans by carefully pushing them to get them started, and they are now happily spinning at 24%.

Has anyone else noticed this on their toolheads? It should be easy to test, simply set the fan to a low level and slowly ramp up to see at what point the fans spin.

A fix would be to “blip” the fans to 100% for a second to get them spinning, then the inertia will allow the fan assembly to continue rotating at low fan speeds. Does Marlin or Cura have this feature? I found it in Simplify3D but would rather have a good working out of box experience.

That sounds about right. These fans don’t spin up until around 20-30%. It sounds like you found your minimum. It’s kind of dumb IMHO, but that’s how they work. There is a minimum amount of juice that is needed to get it spinning.



Best regards,
PCH

Ah, what do you know!

https://github.com/MarlinFirmware/Marlin/blob/RCBugFix/Marlin/Configuration_adv.h#L201-L204

// This defines the minimal speed for the main fan, run in PWM mode
// to enable uncomment and set minimal PWM speed for reliable running (1-255)
// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
//#define FAN_MIN_PWM 50

Found the issue

Back in 2015/2016, the variable FAN_MIN_PWM was added to the codebase to fix this issue
https://code.alephobjects.com/rMARLIN3a5963c0e7db86c775855438c08da588a3cba03f
https://code.alephobjects.com/R30:3a5963c0e7db86c775855438c08da588a3cba03f
https://code.alephobjects.com/R30:e55e65d1e430355a971df027fc3245f84ecc2c77
https://code.alephobjects.com/rMARLINe55e65d1e430355a971df027fc3245f84ecc2c77

Here’s a function in the planner module:

    #endif //FAN_KICKSTART_TIME
  #ifdef FAN_MIN_PWM
      #define CALC_FAN_SPEED (tail_fan_speed ? ( FAN_MIN_PWM + (tail_fan_speed * (255 - FAN_MIN_PWM)) / 255 ) : 0)
    #else
      #define CALC_FAN_SPEED tail_fan_speed
    #endif // FAN_MIN_PWM
    #ifdef FAN_SOFT_PWM
      fanSpeedSoftPwm = CALC_FAN_SPEED;
    #else
      analogWrite(FAN_PIN, CALC_FAN_SPEED);
    #endif // FAN_SOFT_PWM

And the config_adv variable:

// This defines the minimal speed for the main fan, run in PWM mode
// to enable uncomment and set minimal PWM speed for reliable running (1-255)
// if fan speed is [1 - (FAN_MIN_PWM-1)] it is set to FAN_MIN_PWM
#define FAN_MIN_PWM 70

However for some reason FAN_MIN_PWM was removed from the codebase sometime after
https://code.alephobjects.com/diffusion/MARLIN/repository/Gladiola/

In fact if you compare Gladiola to the forks for each toolhead, the FAN_MIN_PWM variable isn’t implemented at all:
https://code.alephobjects.com/diffusion/MARLIN/browse/Gladiola/Marlin/Configuration_adv.h;TAZ_6.02_MOARstruder

This seems to be some physical manifestation (e.g. greater static friction in your fans vs others).

Take a look at this line: https://code.alephobjects.com/diffusion/MARLIN/browse/oliveoil-moar/Marlin/planner.cpp;9b06e0454fd257a647292cef50d0d57b4ab657dd$549

This condition says if the duty cycle given is < 38.15% it kickstarts it for 0.25 seconds at 50% duty cycle. We have tested and verified this many times; we even check this on every printer during the manufacturing calibration procedure (step 3): https://ohai.lulzbot.com/project/taz-6-final-testing-and-calibration/taz-6/

In the Cura terminal use the command M106 S1 and check that both cooling fans run.

The TAZ 6 has had this ~kickstart code~ since the machine was first released.

I suggest trying to flick the fan with your finger when you do “M106 S1” to see if it is simply not overcoming the static friction. If it’s an environmental factor, such as low ambient temperature, you could always increase either the kickstart duty cycle or the jumpstart_time duration.

Thank you! I didn’t see that line of code, I’m switching over from Smoothieware into my first use of Marlin so time will need to be invested to learn the codebase. I’m currently in the middle of a 20 hour print job, I’ll attempt to duplicate my ambient temperatures at the time and troubleshoot on the MOARStruder. It’s brand spanking new, so some print hours should also help wear in the fan bearing as well.

Once I got some hours on the fans, they broke in and work perfectly now.

There were also two different fans used in the cooling module. At some point they switched over to the better ones included with the Taz 6. the older style ones required a bit different voltage to spool up correctly.