Interfacing

BPI SoftPWM for a fan

4 1026
rvdns11  
Hi everyone,
I have a BPI set up for media streaming etc. Now I want to cool the Pi with an external powered fan with softpwm. The PWM-Cable of the fan is attached to GPIO 0 (Phys. Pin11). Unfortunately, I have no expiriences with python or C/C++. Is there a script available for softpwm for a fan?
The fan is called Arctic Cooling AF
Max RPM 1500
12V

Many thanks in advance for your help and sorry for my bad english :-)
tkaiser  
Edited by tkaiser at Mon Jul 27, 2015 10:26

Based on the idea outlined in this post http://www.lemaker.org/forum.php?mod=viewthread&tid=11167 (defining a PWM pin and setting a value between 1 and 100) I wrote a script a few hours ago that uses a simple formula to derive the PWM value from the thermal value of the PMU (more realiable than the SoC's temperature):
  1. #!/bin/bash

  2. CheckTimeInSeconds=5
  3. MaxTemp=55000
  4. MinTemp=40000
  5. TempDiff=$(( ${MaxTemp} - ${MinTemp} ))

  6. while true ; do
  7.     read CurrentTemp </sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input
  8.     AdjustedTemp=$(( $(( ${CurrentTemp} - ${MinTemp} )) * 100 / ${TempDiff} ))
  9.     if [ ${AdjustedTemp} -lt 1 ]; then
  10.         AdjustedTemp=1
  11.     elif [ ${AdjustedTemp} -gt 100 ]; then
  12.         AdjustedTemp=100
  13.     fi
  14.     # AdjustedTemp=$(( 101 - ${AdjustedTemp} ))
  15.     echo ${AdjustedTemp} >/sys/class/pwm-sunxi/pwm0/duty_percent
  16.     sleep ${CheckTimeInSeconds}
  17. done
Copy the Code


The outcommented line "AdjustedTemp=$(( 101 - ${AdjustedTemp} ))" would invert the value. Now when temperature is below 40°C then duty_percent will be set to 1 and if temperature rises also this value will be increased. If you uncomment this line it would work the other way around: Setting duty_percent to 100 when 40°C or colder and decreasing it constantly when the temperature rises towards 55°C.

And maybe there's a mistake since values of 0 should also be possible to completely shut the fan off (easy to fix: just replace 1 with 0 two times and change 101 to 100)

tkaiser replied at Mon Jul 27, 2015 13:25
Based on the idea outlined in this post http://www.lemaker.org/forum.php?mod=viewthread&tid=11167 (d ...

Great job!

rvdns11  
Many thanks for your script
Will test the script in this week or next, i have to do my school stuff etc.

rvdns11  
Thanks, it worked perfectly as expected.
Thanks!

You have to log in before you can reply Login | Sign Up

Points Rules