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.