Fan seems to indicate its PWM input is 0 or 10V for logic levels, you need to confirm that.
Easily solved by taking arduino output and using a transistor switch like (12V should be 10V
in this picture) -
Note its inverting, so 0 - 100% PWM duty cycle corresponds to full on fan to off fan.
You just accommodate that in a little block coding. Some block coding has a map function
you can use where you give it the input range and that maps that data to desired output range.
One thing missing in that circuit is a R from NPN base to ground, generally 10X base R. Thats because
when most processors power up these days their I/O pins are tri state, so before software takes control
fan could come on which would be undesirable. What turns transistor on is leakage current. So R from
base to ground keeps transistor off while processor is powering up, before software takes control.
Note fan has a tach output which tells you what fan RPM is. Not sure what its logic high V is, if it exceeds
Arduino logic 1 max V then simply use a R divider. This would allow you to control speed using a control
loop by counting tach to get its freq and using that to set PWM. Basically done in PCs and LapTops
these days to control their flow.
Max input V Arduino -
The maximum voltage that the I/O pins can tolerate is
3.3V. Applying voltages higher than 3.3V to any I/O pin could damage the board."
Min is >=0 volts. No negative Voltages. If you need to handle/read - voltages there are simple methods
to handle that.
Do you have a scope ?
Regards, Dana.