The BeagleBoard.org BeagleBone AI wants to run hot! This fan solution will keep it below 38 Celsius.

The BeagleBoard.org BeagleBone AI without a fan, will typically run at 60 celsius and only 600MHz. With a fan 38 celsius and full speed 1500MHz

BeagleBoard capes expect a I2C EEPROM to describe the used pins and power requirements.

A fan running at full speed can be excessively noisy.

A NTC resistor near the main processor heatsink can monitor radiant heat.

The temperature sensor in a PIC can monitor ambient temperature.

The EEPROM is 32k bytes, but only 244 bytes are used with over 31k bytes unused.

Memory addresses above 32k bytes can be used to communicate with the fan control microcontroller.  Read the temperature sesnors, write the FAN PWM, set the fan speed-up/on and slow-down/off temperatures, and update the microcontroller software.

This Fan Cape uses a PIC16F15313 to emulate the Cape EEPROM, provide PWM to the fan, read temperature sensors, and read the jumper input.

The I2C EEPROM device address for upto 4 capes, should be set to 0x54, 0x55, 0x56, or 0x57. Jumpers provide a selectable voltage to an analogue input. Normally, the four jumper positions select a cape address with write protect on, but the input can also be connected to 3.3V or 0V to enable reprogramming of the EEPROM and/or PIC at a non cape address.

The PWM output drives an open drain n-channel MOSFET, its gate is weakly pulled high to 3.3V and its drain to 5V. This is a fail safe, it causes the fan to run if the PIC is unprogrammed or held in reset. The open drain allows switching on of a p-channel MOSFET connected between the 5V and fan.