nevermore3d/StealthMax

Fan control is not linear

Opened this issue · 1 comments

Delta BFB0712HF
When controlling the fan duty cycle from the Mainsail page, the fan seems to only respond in RPM changes when using 80-100% (corresponding to ~1500 - 5700 RPM respectively). According to the datasheet, the RPMs are off, but I can audibly and visually correspond the changes in speed when entering values.
IMO, the scale needs to be adjusted since the lower end deadspace is so large.

Relevant settings in printer.cfg:

[nevermore]
bt_address: 28
# These `fan_power_*` entries are for a DELTA BFB0712HF (StealthMax BOM)
# If you have a different fan then play with these numbers to your satisfaction.
# See full config documentation for details.

# Various settings for the fan.
# float \in [0, 1] - Fan power used when the automatic policy nor overridden
fan_power_passive: 0

# float \in [0, 1] - Fan power used when the automatic fan policy is active.
fan_power_automatic: 1

# float \in [0, 1] - Coefficient applied to the fan power.
# i.e. Limits the maximum speed of the fan. Useful for things like managing noise.
# e.g. At 0.75, requesting 100% power will run the fan at 75% power.
fan_power_coefficient: 1


# seconds, how long to keep filtering after the policy would otherwise stop
fan_policy_cooldown: 120
# voc index, 0 to disable, filter if any sensor meets this threshold
# NB: if < 200 then fan will engage when in the 'nominal' region (see VOC guide)
fan_policy_voc_passive_max: 0
# voc index, 0 to disable, filter if the intake exceeds exhaust by at least this much
fan_policy_voc_improve_min: 0

# Fan Policy - Thermal Limit
# Controls how/when the fan power is throttled down if the temperature is too high.
# See Fan Control section for details.

# float, Celsius, temperature at which point thermal limiting starts being applied
fan_thermal_limit_temperature_min: 55
# float, Celsius, temperature at which point thermal limiting is fully applied
fan_thermal_limit_temperature_max: 65
# float \in [0, 1], 1 to disable the thermal limiter
# 0 to disable the fan at max temp
# 0.5 to half the fan speed at max temp
# 1 to effectively disable the thermal limiter (no scaling at max temp)
fan_thermal_limit_coefficient: 0

# Optional
# This 'temperature' sensor only serves to draw the intake VOC index on
# Mainsail's temperature plot.
[temperature_sensor nevermore_intake_VOC]
sensor_type: NevermoreSensor
sensor_kind: intake
#plot_voc: true

[temperature_sensor nevermore_exhaust_VOC]
sensor_type: NevermoreSensor
sensor_kind: exhaust
#plot_voc: true

I have verified the output of the Pico is performing the duty cycle appropriately. I am measuring a 3.3V across the pin at a frequency of 25khz; Oscilloscope matches duty cycle programmed. I believe a level shifter is what may be needed for the fan to correctly read the value.