GS1900-24HP Fan speed hack


Senior Member

I recently bought a 24-port POE switch from Zyxel. I didn't look too closely to the specs, and just ordered one from a local IT dealer since he recommended it... Should have read the specs (especially the rated noise levels.. )because out of the box the cooling fans are really loud, and I can hear the thing running on the utility room to the bedroom - one room in between and the router is in a closed enclosure!

Googling a bit, it seems quite a few people are reporting the same issue with it, some are even selling a kit of more quiet fans for it.. So an issue worth investigating and a little writeup :p

After checking out the stock fans, it became obvious that the thing has no speed control on the fans whatsoever. Just running full blast @12V. Also, quite interestingly, while the fans have 3-pin connectors with a speed output the switch doesn't actually monitor the fans - running it with the fans disconnected gives absolutely no warnings or notifications whatsoever.. Which in a sense is a good thing, at least it won't start nagging if the tachos are disconnected :p - No need to figure out if the hardware is measuring the tach output in relation to +12V or GND.

With that figured out I decided to make a speed controller instead of getting new fans. At least it'll still able to provide the cooling the design engineers planned for it in case I ever need to run it at full power during a heat wave.

The controller itself is pretty simple, it measures the internal temperature from the power supply and on top of the main board (with DS18B20 sensors) and adjusts the fan speed with a buck controller accordingly. One important part to note about fan speed control is that brushless fans can't be controlled by just PWM'ng them (like you would do with a normal DC motor), but instead you need to control the voltage (or get one of those 4-pin PWM-ready fans.)

Attached is a schema, picaxe 08m program, and a few pictures for anyone plannig something similar.

'GS1900-24HP Fan speed controller
'Janne Peltonen 2018 
'Read 2 DS18B20 sensors, control fan speed with PWM

#picaxe 08m
#terminal 4800

#define debugging

symbol led = 0

b7 = 79 'start fans at full power
call setPWM


	readtemp 1,b0 'would be nice if we had some feedback if reading the sensor actually succeeded
	readtemp 4,b1
	'if sensor fail, set fans at full blast, that ought to get some attention
	if b0 < 5 or b0 > 70 then
		b0 = 70	
	if b1 < 5 or b1 > 70 then
		b1 = 70	
	b2 = b0 min b1 'select the higher of 2
	'highly precise output control --> duty cycle is set to the measured temperature * 2 / - 45. Run at min speed until measured temp gets to 35. Max fan speed is achieved at 62 deg C
	b7 = b2 * 2 min 45 - 45 max 255 'math works left to right, right?		
	#ifdef debugging
		sertxd("Temp1 = ",#b0,cr,"Temp2 = ",#b1,cr,"Duty = ",#b7,cr,"HighTemp = ",#b2,cr)
	call setPWM
	goto main

	b7 = b7 max 79 '100% duty cycle
	b7 = b7 min 23 'puts about 4.2V to the three fans
	pwmout C.2, 19, b7 ; 50000Hz at @ 4MHz. Minduty 23, maxduty 79