Hi Stuiven
I had a little problem with my damn 1$ fan ! ☹
One badly welded wire came off and caused a short circuit.
The MOSFET on the GT2560 has had a nasty heat stroke and it behaves differently now:
- M106 S0 (fan stop) gives now a nearly 10v output voltage
- M106 S255 (maximum speed), the voltage drops to around 3v
- when S value increases, the voltage decreases
The curve has reversed, and covers now a smaller range (3 to 10 instead of 0 to 12)
I do not have the skill to change this SMD component on the board.
As workaround while waiting for a solution, I modified the firmware, in Marlin_main.cpp for the M106 commands:
// ppf: the MOSFET blows up ! If 255 the fan turns to mini, if 0 it turns to max ==> reversed
// if (p <FAN_COUNT) fanSpeeds [p] = s;
If (p <FAN_COUNT) fanSpeeds [p] = 255-s;
And for M107 command:
// ppf: the MOSFET blows up ! If 255 the fan turns to mini, if 0 it turns to max ==> reversed
// if (p <FAN_COUNT) fanSpeeds [p] = 0;
If (p <FAN_COUNT) fanSpeeds [p] = 255;
It works more or less as expected:
- at lowest speed (M106 S0 and M107) : the fan (a new one) rotates slowly
- at max. (M106 S255): it turns almost to the maximum
When I will have finished other more important tasks, I will try to solve this with an Attiny45 micro controller that will read this voltage from 3v to 10v and will regenerate a proportional 0-12v range PWM signal to a new MOSFET (one in a TO-220 package

).
And as a bonus, I will also try to solve in the code of the Attiny45 the problems for the small vibrations and for the lazy startup within the small speeds range.