www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lüfterregelung Bascom


Autor: Migelito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Migelito (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.