PID Controlled Exhaust Fan (Quiet!)

Bugfix: Incorrect RPM

The reported exhaust_fan RPM was bogus and reporting slower values when set above 35% because the poll interval was incorrect.

[fan_generic exhaust_fan]
pin: PB0
tachometer_pin: PB1
tachometer_ppr: 1
tachometer_poll_interval: 0.0019 #was 0.0046
cycle_time: 0.05 #was 0.01
max_power: 1.0
kick_start_time: 0.3

I checked the whole range for aliasing or other errors, and I got the expected smooth quadratic fan curve. This can now report up to ~15.8 krpm, so a bit of headroom over my 100% 14.2 krpm for hardware variation.

This means the stock/typical 80% fan speed is actually 12 krpm.

Lowest fan speed

Lengthening the cycle time ( reducing the PWM frequency) to from 0.01s to 0.05s (100Hz to 20Hz) achieves a slightly lower minimum fan speed. I’m now able to get 2 krpm (12%), whereas before the best I could achieve was 14%.

Even longer cycle times don’t help.

Kick

Surprisingly, adjusting kick_start_time doesn’t influence the minimum achieved speed. I can set it to 0, or remove the line altogether, and 12% still works. I suspect the firmware is adding a kick of its own though, since I see it report 3krpm for a moment before it settles in.

Of course, no kick isn’t robust, so here are various durations & achieved (& reported) speeds if you want to determine your own trade-offs. While there’s a clear audible difference between actual response time and reported peak RPM, that’s harder to quantify.

kick [s] peak revs [krpm] throttle [%] peak SPL [dB(A)] notes
0.0 3 13% 38
0.2 3 13% 38 imperceptible kick
0.3 3.5 14% 38 hardly perceptible kick
0.4 5 21% 39
1.1 8 40% 44 stock/waterfall min
2.3 11 71% 52
3.0 12 80% 54 stock/waterfall max
4.6 14 100% 58 actual max

I’ll use 0.3s for now, but I wonder if deliberately leaving it long may help with the PID’s initial overshoot…

SPL decibel

I placed a cheap decibel meter about 3ft away in front, door and lid closed, to record the steady state intensity for a given RPM. The Zero, without exhaust, idles at 37dB(A), which is the same as my background environment when the printer is off.