Hallo miteinander,
ich möchte gern ein Lüfter nach einer Temperatur regeln, habe da etwas
über Bascom schon probiert, aber ich komme da nicht weiter.
Auf mein Testboard läuft die Diode von dunkel nach hell, wen die
Temperatur noch unterschritten ist wen sie drüber kommt, verhält sich
die die Diode genau entgegengesetzt, so sollte fast sein nur das die PWM
nicht direkt von 0 anfängt.
Alles in einen, es sollte ein Lüfter oder ein Lötkolben immer die
gleiche Drehzahl bzw Temperatur halten, abhängig von der Temperatur,
wie funktioniert es richtig, kann mir jemand weiter helfen ?
gruß Migelito
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 12
$framesize = 24
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 ,
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 20 * 2
Initlcd
Waitms 50
Cursor Off Noblink
Cls
Dim Tempsensor1(2) As Byte
Dim Ar1(9) As Byte
Dim Temp1 As Single
Dim Temp2 As Single
Dim Tmp1 As Byte
Dim T1 As Integer
Dim T2 As Integer
Dim Sign As Byte
Dim Solltemp As Word
Dim Isttemp As Word
Dim Temperatur As String * 3
Dim Temp As String * 3
Config 1wire = Portc.5
Tempsensor1(1) = 1wsearchfirst()
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale =
256
Enable Timer1
Enable Interrupts
Solltemp = 30
Do
Gosub Digital
Locate 1 , 1 : Lcd Fusing(temp1 , "##.#")
Isttemp = Temp1
If Isttemp < Solltemp Then
Pwm1a = Pwm1a + 10
End If
If Isttemp > Solltemp Then
Pwm1a = Pwm1a - 10
End If
'If Isttemp > 255 Then Isttemp = 255
Loop
End
Digital:
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 200
1wreset
1wwrite &HCC
1wwrite &HBE
Ar1(1) = 1wread(9)
'Ar1(1) = &H92
'Ar1(2) = &HFF
Sign = 1
If Ar1(2) = &HFF Then Sign = 0
Tmp1 = Ar1(1) And 1
If Tmp1 = 1 Then Decr Ar1(1)
T1 = Makeint(ar1(1) , Ar1(2))
T1 = T1 * 50
T1 = T1 - 25
T2 = Ar1(8) - Ar1(7)
T2 = T2 * 100
T2 = T2 / Ar1(8)
T1 = T1 + T2
T1 = T1 / 10
Temp1 = T1 / 10
Return
Migelito schrieb: > wie funktioniert es richtig, kann mir jemand weiter helfen ? > If Isttemp < Solltemp Then > Pwm1a = Pwm1a + 10 > End If Du versuchst einen 2 Punkt Regler zu bauen. Das ist schon ok. Nur: Deine Ist Temperatur kann natürlich nicht so schnell erhöht werden. Das Heizelement braucht ja auch Zeit. Deine PWM wird also hochlaufen. Aber: Sie kann nicht beliebig hochlaufen! Du hast eine Obergrenze, die du nicht überschreiten darfst, weil dein PWM Wert einfach nicht weiter hoch gehen kann. Nur berücksichtigst du das hier nicht. Wenn es nach dir geht, könnte der PWM Wert auch auf 2 Millionen hochlaufen oder auf 5 Millionen! Das Problem: Als 16 Bit Wert kann Pwm1a diese Werte gar nicht annehmen. Bei 65535 ist Schluss. Wenn deine Regelung daher versucht, bei einem PWM Wert von 65530 noch einmal um 10 Einheiten zu erhöhen, dann lautet das Ergebnis nicht 65540, sondern 5, weil die Berechnung übergelaufen ist. Ehe du also noch einmal 10 auf den PWM Wert draufschlägst, musst du prüfen ob das überhaupt möglich ist. Selbiges natürlich auch in der anderen Richtung.
Ahhh, alle klar, habe verstanden, habe es nun so gelöst und es
funtioniert.
Gosub Digital
Locate 1 , 1 : Lcd Fusing(temp1 , "##.#")
Isttemp = Temp1
If Isttemp < Solltemp Then
Pwm1a = Pwm1a + 5
If Pwm1a > 250 Then Pwm1a = 250
End If
If Isttemp > Solltemp Then
Pwm1a = Pwm1a - 5
If Pwm1a < 10 Then Pwm1a = 10
End If
Locate 2 , 10 : Lcd Pwm1a
Danke
gruß Migelito
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.