adafruit_emc2101

Brushless fan controller

  • Author(s): Bryan Siepert

Implementation Notes

Hardware:

Software and Dependencies:

class adafruit_emc2101.ConversionRate

Options for accelerometer_data_rate and gyro_data_rate

class adafruit_emc2101.EMC2101(i2c_bus)

Basic driver for the EMC2101 Fan Controller.

Parameters

i2c_bus (I2C) – The I2C bus the EMC is connected to.

Quickstart: Importing and using the device

Here is an example of using the EMC2101 class. First you will need to import the libraries to use the sensor

import board
from adafruit_emc2101.emc2101_lut import EMC2101_LUT as EMC2101

Once this is done you can define your board.I2C object and define your sensor object

i2c = board.I2C()  # uses board.SCL and board.SDA
emc = EMC2101(i2c)

Now you have access to the manual_fan_speed attribute to setup the desired fanspeed

emc.manual_fan_speed = 25

If you need control over PWM frequency and the controller’s built in temperature/speed look-up table (LUT), you will need emc2101_lut.EMC2101_LUT which extends this class to add those features, at the cost of increased memory usage.

property conversion_rate

The rate at which temperature measurements are taken. Must be a ConversionRate

property dac_output_enabled

When set, the fan control signal is output as a DC voltage instead of a PWM signal

property external_temperature

The temperature measured using the external diode

property fan_speed

The current speed in Revolutions per Minute (RPM)

forced_ext_temp

The value that the external temperature will be forced to read when forced_temp_enabled is set. This can be used to test the behavior of the LUT without real temperature changes

forced_temp_enabled

When True, the external temperature measurement will always be read as the value in forced_ext_temp

initialize()

Reset the controller to an initial default configuration

property internal_temperature

The temperature as measured by the EMC2101’s internal 8-bit temperature sensor

invert_fan_output

When set to True, the magnitude of the fan output signal is inverted, making 0 the maximum value and 100 the minimum value

property lut_enabled

Enable or disable the internal look up table used to map a given temperature to a fan speed.

When the LUT is disabled (the default), fan speed can be changed with manual_fan_speed. To actually set this to True and modify the LUT, you need to use the extended version of this driver, emc2101_lut.EMC2101_LUT

property manual_fan_speed

The fan speed used while the LUT is being updated and is unavailable. The speed is given as the fan’s PWM duty cycle represented as a float percentage. The value roughly approximates the percentage of the fan’s maximum speed

property spinup_drive

The drive strength of the fan on spinup in % max RPM

property spinup_time

The amount of time the fan will spin at the current set drive strength. Must be a SpinupTime

property tach_limit

The maximum /minimum speed expected for the fan

class adafruit_emc2101.SpinupDrive

Options for spinup_drive

class adafruit_emc2101.SpinupTime

Options for spinup_time

adafruit_emc2101.emc2101_lut

Brushless fan controller: extended functionality

  • Author(s): Bryan Siepert, Ryan Pavlik

Implementation Notes

Hardware:

Software and Dependencies:

The class defined here may be used instead of adafruit_emc2101.EMC2101, if your device has enough RAM to support it. This class adds LUT control and PWM frequency control to the base feature set.

class adafruit_emc2101.emc2101_lut.EMC2101_LUT(i2c_bus)

Driver for the EMC2101 Fan Controller, with PWM frequency and LUT control.

See adafruit_emc2101.EMC2101 for the base/common functionality.

Parameters

i2c_bus (I2C) – The I2C bus the EMC is connected to.

initialize()

Reset the controller to an initial default configuration

property lut

The dict-like representation of the LUT, actually of type FanSpeedLUT

property lut_enabled

Enable or disable the internal look up table used to map a given temperature to a fan speed. When the LUT is disabled fan speed can be changed with manual_fan_speed

lut_temperature_hysteresis

The amount of hysteresis in Degrees Celsius of hysteresis applied to temperature readings used for the LUT. As the temperature drops, the controller will switch to a lower LUT entry when the measured value is below the lower entry’s threshold, minus the hysteresis value

property pwm_frequency

Selects the base clock frequency used for the fan PWM output

property pwm_frequency_divisor

The Divisor applied to the PWM frequency to set the final frequency

set_pwm_clock(use_preset=False, use_slow=False)

Select the PWM clock source, choosing between two preset clocks or by configuring the clock using pwm_frequency and pwm_frequency_divisor.

Parameters
  • use_preset (bool) – True: Select between two preset clock sources False: The PWM clock is set by pwm_frequency and pwm_frequency_divisor

  • use_slow (bool) – True: Use the 1.4kHz clock False: Use the 360kHz clock.

Returns

None

Raises
class adafruit_emc2101.emc2101_lut.FanSpeedLUT(fan_obj)

A class used to provide a dict-like interface to the EMC2101’s Temperature to Fan speed Look Up Table.

Keys are integer temperatures, values are fan duty cycles between 0 and 100. A max of 8 values may be stored.

To remove a single stored point in the LUT, assign it as None.