-
-
Notifications
You must be signed in to change notification settings - Fork 19.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Linear fan kickstart time #27072
Linear fan kickstart time #27072
Conversation
The entire point of The original |
My point is to apply full power to reach the target speed ASAP, not just to overcome initial inertia and friction. |
That’s exactly what The fan’s required kickstart time / power doesn’t magically become less if you request a lower speed. |
As I saw in the code and from the tests I have 5015 blower fan, taking about 0.8 sec. to reach full speed at full power, and approximately 0.4 sec. to reach 50% speed at full power. If I set FAN_KICKSTART_TIME to value like 0.1 sec. and target speed 50%, it takes more time to reach 50% speed. But if I set FAN_KICKSTART_TIME to higher values, fan overshoot lesser speeds like 10-20%. Setting full power and kickstart time according to desired speed produces much more accurate results. |
I like the idea of applying full power for a short period to help the fan reach its target speed quicker. Since @thisiskeithb has a different take on how FAN_KICKSTART should be calibrated and used (which I agree with), may I suggest changing this PR to work outside kickstart scenarios? As this PR is currently implemented, it can only improve the To calibrate such a fan overdrive feature, I think you'd only need to measure the time it takes for the fan to almost hit 100%, say For
For
Note the math is simplified. In the |
That's the question - whether we want it? Anyway there is speed up time, and thus distance between GCode command and real place where speed is reached, so I don't think square or logarithmic or whatever curve will improve comparing to linearly. Anyway, now linearly kickstart is applied also for speed increase when fan runs, not only from zero speed.
Yes, I'm familiar with SuperSlicer. Idea is great, but often it produces weird results. |
I suggest calling it something other than kickstart to avoid confusion. |
cf43df3
to
75a632b
Compare
The basic concept of a fan kickstart is quite simple. Apply a minimum power for a minimum time required to get the fan spinning, because some fans won't spin if you only tell them to go to 10% unless they get a kick of sufficient power and duration to overcome the initial holding torque of the magnetic motor. This initial kick will be required for any fan speed that is set below the kickstart speed (not something we have formalized in code) and presumably all requested speeds above the kickstart speed don't need a kickstart. So, we should add code to handle that case. Meanwhile there is the question of whether it makes sense to do a half as long kick to for a 10% final speed than for a 20% final speed, where both of these speeds are too low to get the fan spinning from stopped…. It seems to me that once you've established the minimum kick power and duration required to get the fan dislodged it should apply to all requests to go from zero to any speed below the kickstart speed, and the speed and duration of the kick should not change, because any change in the negative direction only increases the likelihood that the kick will fail. The last thing we want to do is combine added complexity with increased probability of failure. On another note, we may not want to apply this to the Controller Fan. We definitely want that kick to always succeed, and there's no harm in too much kick here, so it should always do the full (i.e., minimal) configured speed and duration. |
Reverted, I just search for all FAN_KICKSTART_TIME usage, thus controller fan was affected. It will not harm to apply too long kick start time.
Sure, I would like to use its mechanism also to reach target speed ASAP, that could be good when fan is turned on for small details like overhangs. |
#error "FAN_KICKSTART_POWER must be an integer from 64 to 255." | ||
#if FAN_KICKSTART_TIME | ||
#if ENABLED(FAN_KICKSTART_LINEAR) && FAN_KICKSTART_POWER != 255 | ||
#error "FAN_KICKSTART_LINEAR requires a FAN_KICKSTART_POWER of 255." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This requirement can probably be removed by only kick-starting the fan when the power is set below FAN_KICKSTART_POWER
, and then applying the time scaling based on fan_speed / FAN_KICKSTART_POWER
.
Description
Set kickstart time linearly based on the speed, e.g. for 20% (51) it will be FAN_KICKSTART_TIME * 0.2.
Benefits
Fan speed will not overshoot target speed for low values.