The cooling fan is controlled by the MCU inside the pi-top , it basically has two inputs:
- Raspberry Pi CPU temperature - this is sent regularly by our hardware drivers on pi-topOS to a register on the MCU.
- Battery compartment temperature - this is read from the battery charging IC inside the pi-top  which has a wired NTC resistor connected to it. We do this to ensure that we never charge the battery when the ambient temperature is above 45 degrees celsius.
Based on these it will choose a fan speed profile. When you are charging the unit, the fan will be working quite hard to keep the battery compartment temperature low enough since the air channel it’s drawing from is quite high resistance - this is actually why we chose a centrifugal fan, we needed all the static pressure we could get!
To address this, we’ve made a new hub MCU firmware so people can choose between “Normal” and “Fast” charging speed. The default setting on all units is currently “Fast” charging - we expect to have the firmware updater ready in October (it’s actually ready, we just need to do a lot of testing since a failed firmware update would be… bad, to say the least).
We are also working on one more solution to lower the fan noise - we’ve designed a new, more efficient impeller that we are currently testing with really excellent results. There are two things to note: firstly, the diameter is increased, which lowers the required speed for the same airflow and subsequently will reduce the noise; secondly, we’ve used a much more sophisticated design approach that has airfoil-shaped impeller blades with a properly parameterized archimedean spiral outlet - this reduces vortexes and generally makes for a much more efficient design (saving power and lowering noise!). It was always our intention to design a cooling fan but due to a lack of time we had to use an off the shelf one to start with, and all suppliers we could find for the size and power we needed used very basic flat blade designs which unfortunately results in lower efficiency than is possible, and, subsequently, a higher noise (I guess they did this to simplify the design process and lower the final tooling cost)
I’ve read your emails and message chats with support and it seems to me like there is a QA problem with either the cooling fan or any one of the connections between the PWM pin of the fan and the output of the MCU. The fan has an internal pull-up resistor which means if it is left floating/unconnected the speed will be at 100% constantly, which sounds like the problem you are having.
We are investigating this issue as a top priority and will update you when we find the root cause - I hope that we can send you a new unit that works as intended as we spent a lot of engineering time to get it right, it’s a shame that something has gone wrong here and we apologize for the inconvenience.
I’ll be in touch!