- LiFePO4 Speicher Test         
Ergebnis 1 bis 7 von 7

Thema: Problem mit Temperaturregelung

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.09.2004
    Ort
    Abensberg (Niederbayern)
    Alter
    39
    Beiträge
    224

    Problem mit Temperaturregelung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Leute,

    hab mal wieder ein BASCOM-Problem. Und zwar geht es um eine Temperaturregelung mit einem Attiny85. Geregelt werden soll eine Heizfolie, welche über einen MOSFET an OCR0 hängt. Die Ist-Temperatur der Folie wird durch einen LM35 erfasst, welcher 10 mV/°C ausgibt. Die Solltemperatur habe ich in meinem Programm mal mit 35 °C angegeben, davon soll die Isttemperatur abgezogen werden und daraus der Wert für die PWM berechnet werden. Der PWM-Wert soll 255 betragen, also voll heizen, bis die Temperaturdifferenz kleiner als 5 °C wird. Dann woll der PWM-Wert reduziert werden (deshalb auch das Ausgang = Tempdiff * 51). Außerdem habe ich noch einen Unterspannungsalarm mit einer LED eingebaut, welcher beim unterschreiten einer bestimmten Spannung zu leuchten beginnt.
    Nun zu meinem Problem: Der Unterspannungsalarm funktioniert, aber bei der Temperaturregelung funktionier irgendetwas nicht. Am PWM-Pin kommt irgendwie nix an. Bin nicht so der BASCOM-Experte, aber vielleicht kann mir ja von euch jemand weiterhelfen.

    Hab mal mein Programm für euch angehängt


    Code:
    'Heizfolien-Temperaturregler
    'Heizfolie mit FET an OCR1 (PB1)
    'Temperatursensor LM35 an ADC2 (PB4)
    'Spannungsmessung an ADC3 (PB3)
    'Spannungsanzeige LED an PB2
    
    
    
    $regfile = "attiny85.dat"
    $crystal = 8000000
    
    
    
    Dim U As Word                                           'Spannungsteiler Vcc--> 4,7 k --> ADC3 --> 2,2 k --> Gnd'
    Dim Temp As Word                                            'LM35 an ADC2, gibt 10 mV/°C aus
    Dim Tempdiff As Single
    Dim Ausgang As Word
    Dim Channel As Byte
    Channel = 0
    Config Portb.2 = Output                                     'Spannungsanzeige LED
    Config Portb.1 = Output                                     'Ausgang für Heizfolie
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
    Const Faktor = 5 / 1023
    Do
    
    Start Adc
    U = Getadc(3)
    Temp = Getadc(2)
    
    Stop Adc
    
    If U < 705 Then                                             'LED an, wenn Spannung unter 10,8 V
    Portb.2 = 1
    Else
    Portb.2 = 0
    End If
    
    Temp = Temp * Faktor                                        'Umrechnung ADC-wert Temp in °C
    Temp = Temp / 0.01
    
    Tempdiff = 35 - Temp                                        'Berechnung Temperaturdifferenz  (Solltemperatur 35 °C)
    
    Ausgang = Tempdiff * 51                                     'Berechnung des PWM-Ausgangs für die Heizfolie
    
    If Ausgang > 255 Then
    Ausgang = 255
    End If
    If Ausgang < 0 Then
    Ausgang = 0
    End If
    Compare0a = Ausgang
    
    
    Loop
    
    End
    Gruß, Martin
    Meine Roboter-, Elektronik- und Modellbauseite: http://www.ram-projects.de

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von Thegon
    Registriert seit
    21.01.2011
    Beiträge
    562
    Hallo,

    also ich habe jetzt im Programm keinen Fehler entdeckt, aber natürlich soll das nichts heißen.
    Ich würde raten, einfach einmal compare0a = 127 hineinzuschreiben, als Test, und zu schauen, ob was raus kommt. Wenn nicht, dann muss es an der Hardware liegen (Pin Defekt, oder etwas in der Deklaration vergessen?), wenn schon, dann habe die Variablen nicht die Werte, die sie sollen. Dann muss man sich natürlich wieder fragen warum, eventuell mit der Led etwas herumexperimentieren (z.B. if ausgang > 100 then led = 1, oder so)
    bzw. villeicht den ADC in Frage stellen, (überprüfen).

    Villeicht findet ja noch jemand einen Fehler, aber es ist sicherlich auch für die Anderen Hilfreich, wenn man Dinge ausschließen kann, also z.B. an der Hardware liegts nicht, weil wenn ich einen Wert direkt zuweise, funktioniert die PWM oder so was.

    Mfg Thegon

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Code:
    Dim Temp As Word
    ...
    Const Faktor = 5 / 1023   ' 0.00488
    ...
    Temp = Temp * Faktor
    Integer-Variablen enthalten keine Nachkommastellen, eine Integer-Variable mal Konstante < 0 = 0

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Ausgang & Temp als Single deklarieren könnte Abhilfe schaffen.

    MfG
    Rone

    Edit: zu spät

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.09.2004
    Ort
    Abensberg (Niederbayern)
    Alter
    39
    Beiträge
    224
    habs jetzt mal versucht und temp und ausgang als single deklariert, da bringt mir allerdings der compiler die Fehlermeldung "Line 29 (wo der befehl getadc(2) steht) Source variable does not match the target variable.
    Gruß, Martin
    Meine Roboter-, Elektronik- und Modellbauseite: http://www.ram-projects.de

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hallo,

    du kannst den Getadc nur in Verbindung mit einem Word nutzen, also:
    Code:
    WordVariable = Getadc(X)
    SingleVariable = WordVariable
    Gruß
    Chris

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.09.2004
    Ort
    Abensberg (Niederbayern)
    Alter
    39
    Beiträge
    224
    So, hab heute nochmal an meinem Code gebaselt. Hab mit den Variablen und dem Timer0 gespielt, und siehe da, es funktioniert!

    Hier mein Code:

    Code:
    'Heizfolien-Temperaturregler
    'Heizfolie mit FET an OCR0B (PB1)
    'Temperatursensor LM35 an ADC2 (PB4)
    'Spannungsmessung an ADC3 (PB3)
    'Spannungsanzeige LED an PB2
    
    $hwstack = 32
    $swstack =16
    $framesize = 40
    
    
    $regfile = "attiny85.dat"
    $crystal = 8000000
    
    
    
    Dim U As Word                                               'Spannungsteiler Vcc--> 4,7 k --> ADC3 --> 2,2 k --> Gnd'
    Dim Temp As Single
    Dim Messwert As Word                                        'LM35 an ADC2, gibt 10 mV/°C aus
    Dim Tempdiff As Single
    Dim Ausgang As Single
    Dim Channel As Byte
    Channel = 0
    Config Portb.2 = Output                                     'Spannungsanzeige LED
    Config Portb.1 = Output                                     'Ausgang für Heizfolie
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Timer0 = Pwm , Prescale = 1 , Compare B Pwm = Clear Down
    Const Faktor = 5 / 1023
    Do
    
    Start Adc
    U = Getadc(3)
    Messwert = Getadc(2)
    
    
    Stop Adc
    
    Temp = Messwert
    
    If U < 705 Then                                             'LED an, wenn Spannung unter 10,8 V
    Portb.2 = 1
    Else
    Portb.2 = 0
    End If
    Temp = Temp * Faktor
    'Temp = Messwert * Faktor                                    'Umrechnung ADC-wert Temp in °C
    Temp = Temp / 0.01
    
    Tempdiff = 35 - Temp                                        'Berechnung Temperaturdifferenz  (Solltemperatur 35 °C)
    
    Ausgang = Tempdiff * 51                                     'Berechnung des PWM-Ausgangs für die Heizfolie
    
    If Ausgang > 255 Then
    Ausgang = 255
    End If
    If Ausgang < 0 Then
    Ausgang = 0
    End If
    Ocr0b = Ausgang
    
    
    Loop
    
    End
    Vielen Dank euch für die Tipps,
    Gruß, Martin
    Meine Roboter-, Elektronik- und Modellbauseite: http://www.ram-projects.de

Ähnliche Themen

  1. Probleme mit Temperaturregelung
    Von mmc8801 im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 29.11.2008, 10:40
  2. Temperaturregelung mit ATMega128 , Can-Bus
    Von Marfi im Forum AVR Hardwarethemen
    Antworten: 21
    Letzter Beitrag: 24.11.2008, 02:13
  3. Temperaturregelung mit ATMega 88
    Von heikilo im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 25.05.2008, 11:48
  4. Temperaturregelung mit DS1820
    Von Duesentrieb im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 11.05.2008, 21:04
  5. Temperaturregelung (PWM)
    Von GMB im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 25.03.2006, 11:37

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test