Algoritme voor snelheid ventilator dmv temperatuur

Beste allen,

Ik heb een IF functie geschreven om een PWM poort variabel aan te sturen naar gelang de temperatuur. Deze functie zou de temperatuur ongeveer gelijk moeten houden door de snelheid van een ventilator (via PWM poort) aan te passen.

Nu dacht ik slim geweest te zijn door dit automatisch te laten corrigeren wanneer de ventilator te hard of te zacht draait.

Ik heb hiervoor de volgende code:

-----

IF TEMP<SETTEMP AND TEMP<TEMP_TIJDELIJK THEN
IF PWM1<=40 THEN
PWM1=40
ELSE
PWM1=PWM1-10
END IF
TEMP_TIJDELIJK=TEMP
END IF

IF TEMP<SETTEMP AND TEMP>TEMP_TIJDELIJK THEN
IF PWM1=>245 THEN
PWM1=245
ELSE
PWM1=PWM1+10
END IF
TEMP_TIJDELIJK=TEMP
END IF

IF TEMP>SETTEMP AND TEMP<TEMP_TIJDELIJK THEN
IF PWM1<=245 THEN
PWM1=245
ELSE
PWM1=PWM1+10
END IF
TEMP_TIJDELIJK=TEMP
END IF

IF TEMP>SETTEMP AND TEMP>TEMP_TIJDELIJK THEN
IF PWM1=>40 THEN
PWM1=40
ELSE
PWM1=PWM1-10
END IF
TEMP_TIJDELIJK=TEMP
END IF

-----
TEMP --> Uitgelezen temperatuur door een sensor
SETTEMP --> Stuurvariabele, bijvoorbeeld ingesteld op 21
PWM1 --> Uitgangswaarde voor PWM van 0 tot 255
Minimum van 40 en maximum van 245 als
instelling
TEMP_TIJDELIJK --> Variabele om verschil in huidige en
laatste temperatuur te bepalen
===

Ik zie even door de bomen het bos niet meer en vraag jullie om een blik te werpen op de code om te kijken wat ik verkeerd doe.

De uitgangswaarde blijft erg laag ondanks dat de temperatuur stijgt.

Mvg,

Anton

Ik zou die TEMP_TIJDELIJK er uit gooien, en enkel TEMP vergelijken met SETTEMP.
Als je daarnaast PWM1 telkens met 1 stapje verhoogd of verlaagd, krijg je een rustige regeleing.

Even een algemene opmerking. Als je door de bomen het bos niet meer ziet in je software, gooi dan zo veel mogelijk code eruit (handig die comment tekens) en kijk of dat wat je laat staan wel goed werkt. Als je dat hebt, dan stap voor stap weer code toevoegen.
Door het eerst simpeler te maken krijg je overzicht en zie je makkelijker waar het fout gaat.

Bedankt voor de reacties.

Ik heb inderdaad de tem_tijdelijk eruit gehaald. Het werkt, maar nog niet naar behoren. Ik klus verder.

Anton

Ik kan niet helemaal volgen wat je precies wilt, maar ik denk dat je een PWM-waarde binnen een bepaald bereik wilt houden.

Je doet bijvoorbeeld dit:


IF TEMP>SETTEMP AND TEMP<TEMP_TIJDELIJK THEN
  IF PWM1<=245 THEN
    PWM1=245
  ELSE
    PWM1=PWM1+10
  END IF
  TEMP_TIJDELIJK=TEMP
END IF

Maar volgens mij zou je dit moet doen:


IF TEMP>SETTEMP AND TEMP<TEMP_TIJDELIJK THEN
  PWM1 = PWM1 + 10
  IF PWM1 > 245 THEN
    PWM1 = 245
  END IF
  TEMP_TIJDELIJK=TEMP
END IF

Dus eerst ophogen en dan eventueel corrigeren als je een grens overschrijdt.
Soortgelijke aanpassing bij de overige blokken.

Op 15 november 2008 20:08:27 schreef Boudie:
Ik kan niet helemaal volgen wat je precies wilt, maar ik denk dat je een PWM-waarde binnen een bepaald bereik wilt houden.

Ik denk dat santon de snelheidsvariaties v/d fan wil beperken, naast het feit dat er een ondergrens is aan de puls/pause-verhouding. Maar wat "Het werkt, maar nog niet naar behoren." inhoudt, daar heb ik ook het raden naar...

meet de omgevings temp en die van het koelblok

stel Tomg.= 20C en de max temp die je in je koelblok wil hebben 70C

je hebt dus een Temp verschil van 70-20=50 graden verdeeld over 0-100% is 0,5C=1%

dus 20C fan uit

en 22C fan op 4 %

46C = 56 % en boven de 70C 100% (evt kun je de belasting dan ook afschakelen of een max temp proggen BV 80C)

dat is een simpel rekensommetje die de PIC wel kan doen

Bij dit soort regelingen zal de boel de neiging hebben te gaan oscilleren. (overshoot/undershoot)
Bouw een vertraging in of kies een vorm van PID regelen.

Temp is een vrij traag proces, en je wilt toch regelen?

de fan zal zo altijd naar de laagst mogelijke snelheid regelen, tor de warm=tandje erbij , tor word kouden , koeling neemt af .

prima regeling lijkt me