Sida 1 av 1

1-wire PWM fläktstyrning 0-100%

Postat: 17 april 2011, 16:57:07
av mrfrenzy
Nu börjar solen ligga på och det är dags att göra färdigt ett projekt som påbörjades för många år sedan.

Jag ritade ett schema baserat på denna beskrivning av fläktstyrning med 555.
schema.png
555-timern genererar en sågtandsvågform med konstant frekvens.
Frekvensen bestäms av uppladdningstiden för C3, den hålls stabil oavsett pulsbredd genom konstantströmsgeneratorn Q2/R1.
I detta fall blev R1 100k vilket ger ca 40Hz.

Sågtanden från 555 matar den positiva ingången på en opamp som är konfigurerad som komparator.
Den inverterade ingången är kopplad till wipern på 1-wirepotentiometern DS2890.
När spänningen på den positiva ingången är högre än den på den inverterade ingången så aktiveras komparatorns utgång och leder transistorn T1 som i sin tur lägger en spänning på gaten till mosfeten.

Genom att variera potentiometerns läge kan vi därmed få valfri hastighet på fläkten från 0-100% i 255 steg.
Ett utkast till schemat skickades till Ash som svarade med ett pcb efter några dagar:
pcb.JPG
Jag hade glömt att meddela att GND för 1wireslingan var separat från matningen så den blev ansluten till jordplanet, men det gör inget i denna applikation.

När detta kort legat och mognat några år i "pågående projekt"-lådan blev det idag dags att montera:
pcb1.jpg
.
Alla komponenter fanns inte hemma så några fick bytas ut.
IRF510 ersattes av en IRF830S, den klarar högre ström och spänning men har lite högre RdsOn vilket inte är kritiskt för min last.
LM741 fick ersättas av en CA3140 i DIP-format. Tack vare att pinouten är samma så gick det att klippa av överflödiga ben och montera den direkt på rätt plats med viss böjning av benen.

Testkörning:
skop.JPG
Det fungerade utmärkt på första försöket.

Om några dagar är det dags att börja med mjukvaran.

Re: 1-wire PWM fläktstyrning 0-100%

Postat: 20 april 2011, 23:53:05
av mrfrenzy
Ett första test om det går att hålla någorlunda jämn temperatur med enkla medel, modifierade ett enkelt bashscript jag hittade på nätet:

Kod: Markera allt

#!/bin/bash
#
# Simple script implementing a temperature dependent fan speed control
#
# Version 0.3
#
# Based on a posting of Chuan-kai Lin to comp.os.linux.hardware

mintemp=18  #temperature at which the fan should run at $minspeed
maxtemp=25  #temperature at which the fan should reach full speed
minspeed=105 #minimum pwm value at which the fan starts to spin (from standstill)
temp1="/owfs/10.A600DC000800/temperature" #temperature to use for part 1 of this script
pwm1="/owfs/2C.FC5F07000000/wiper"   #fan to be controlled by part 1 of this script

echo 1 > /owfs/2C.FC5F07000000/chargepump;

function calc () { awk "BEGIN { print $@ }"; }

while true ; do
    temp=`cat ${temp1} | cut -f 1`
    tempint=`printf "%0.f\n" $temp`;
    echo "temperatur $temp";

    if (( ${tempint} < ${mintemp} )) ;
        then pwm=0
    elif (( ${tempint} > ${maxtemp} )) ;
        then pwm=255
    else
        pwm=`calc "((10/(${maxtemp}-${mintemp})*(${temp}-${mintemp}))^2/1000*(${maxtemp}-${mintemp})*(255-${minspeed})+${minspeed})"`
        #no optimization here for readability (or sloth :))
    fi ;

    pwm=`calc "255-$pwm"`; #reverse pwm value since for this controller 0=max speed and 255=stop
    pwmint=`printf "%0.f\n" $pwm`;

    echo "pwm $pwm";
    echo "pwmint $pwmint";
    echo $pwmint > $pwm1;
    sleep 10 ;
done;
Kör den i en screen några dagar för att se hur det funkar.

Någon kanske tycker att man borde använda ett intelligentare språk som perl, men då måste man ju lära sig det först ;)
Det roliga med shellscripting är att man redan kan det som sysadmin och om en funktion saknas så är det bara leta reda på lämpligt verktyg som utför funktionen (grep, awk, cut etc).

Temperaturen verkar ha stabiliserat sig på 22.3 grader för tillfället. Kommer en graf när det gått en tid.