Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

(Software)
(Software)
Zeile 54: Zeile 54:
 
Im Hauptprogramm läuft der Prozessor nach Initialisierung der Komponenten in eine Endlosschleife
 
Im Hauptprogramm läuft der Prozessor nach Initialisierung der Komponenten in eine Endlosschleife
  
----
+
 
 
int main(){
 
int main(){
 
   port_init();                      // Ports initialisieren
 
   port_init();                      // Ports initialisieren
Zeile 77: Zeile 77:
 
Die Ist-Temperatur (Tist) und die Soll-Temperatur (Tsoll) werden angezeigt.
 
Die Ist-Temperatur (Tist) und die Soll-Temperatur (Tsoll) werden angezeigt.
  
----
+
 
 
//Timer Interrupt - kommt genau jede Sekunde
 
//Timer Interrupt - kommt genau jede Sekunde
 
SIGNAL (TIMER1_OVF_vect){          // Timer1 overflow  
 
SIGNAL (TIMER1_OVF_vect){          // Timer1 overflow  
Zeile 112: Zeile 112:
 
Dazwischen beträgt die Heizleistung 40%
 
Dazwischen beträgt die Heizleistung 40%
  
----
 
 
// regelung ********************************************
 
// regelung ********************************************
 
   if (Tsoll<=Tist){                // zu heiss  
 
   if (Tsoll<=Tist){                // zu heiss  
Zeile 130: Zeile 129:
 
     }
 
     }
 
   }
 
   }
 
 
   sei();                            // enable interrupts
 
   sei();                            // enable interrupts
 
}
 
}

Version vom 1. März 2007, 22:28 Uhr

Selbstbau einer digitalen Lötstation

Beschreibung und Verwendung

Die Lötstation ist geeignet für WELLER oder ERSA oder andere Lötkolben mit einer 24V Heizung und Temperaturfühler. Die Solltemperatur lässt sich durch 2 Tasten (UP und DOWN) in 10° Schritten einstellen. Auf einem LCD-Display wird die aktuelle Temperatur des Lötkolbens und die Solltemperatur angezeigt.

Lötstation-Display.jpg

Funktion

Jede Sekunde wird die Isttemperatur gemessen. Gesteuert wird eine bestimmte Anzahl Perioden. Also von 0 bis 50 in einer Sekunde. So kann die Heizleistung in 2% Schritten variiert werden. Gewöhnlich erreicht der ein 50W Lötkolben schon mit 20W eine Temperatur von 280°C, deshalb wird nahe der Isttemperatur die Regelung auf 40% (20 Perioden) gestellt.

Im Bild sieht man eine Sekunde mit 50% Leistung.

Lötstation-Oszillogramm.jpg

Temperaturmessung

Im Lötgriffel befindet sich ein Temperaturfühler Dies kann eine Thermoelement sein (z.B. bei Ersa) oder ein Platinsensor (z.B. Weller). Auch andere Sensoren (Wie PTC) sind denkbar, die Schaltung muss entsprechend dimensioniert werden und evtl. muss die Berechnung in der SW geändert werden. Der OPV in der Schaltung arbeitet als nichtinvertierter Verstärker falls ein Widerstandsfühler verwendet wird. Oder als Differenzverstärker wenn ein Thermoelement verwendet wird. Es kann der OP07 oder der CA3140 verwendet werden. Vermutlich auch noch andere. Lötstation-Verstärker.jpg

Steuerung der Heizleistung

Ein Triac schaltet im Nulldurchgang auf der 24V Seite des Trafos. Es können verschiedene Optotriacs verwendet werden, der Widerstand R2 muss dann jedoch angepasst werden, damit der Triac sicher schaltet. Lötstation-Triacansteuerung.jpg

Controllerteil

Die Steuerung erfolgt mit einem AVR Mega8 getaktet mit 1MHz.

Per UP/DOWN Tasten kann die Soll-Temperatur eingestellt werden Soll- und Ist-Temperatur werden auf dem LCD-Display angezeigt Die Regelung erfolgt durch Ein-Ausschalten im 1Hz Takt, wobei das Puls-Pausenverhältnis variiert wird. Der Schalter an PC3 ist für Erweiterungen gedacht. (z.B. Erkennen ob der Kolben lange Zeit nicht abgelegt war um dann abzuschalten)

Der Nulldurchgang wird durch den Komperator im µC erkannt, der dann (alle 20ms) einen Interrupt auslöst. Ein Eingang des Komparators geht an die 2,5V Referenz des AVR, der andere zum Netzteil

Lötstation-Controllerteil.jpg

Netzteil

Trafo 2*7 bis 2*12V Eine Halbwelle wird über den 100k Widerstand auf den Komperator des µC gelegt

Lötstation-Netzteil.jpg


Software

Das Programm ist in C geschrieben.

Im Hauptprogramm läuft der Prozessor nach Initialisierung der Komponenten in eine Endlosschleife


int main(){

 port_init();                      // Ports initialisieren
 lcd_init(LCD_DISP_ON);            // initialisiere display, cursor off 
 ad_init();                        // AD-Wandler initialisieren
 ac_init();                        // initialisiere analog-Komparator
 timer_init();                     // Timer initialisieren
 Tsoll=Lese_Starttemp();           // Starttemperatur lesen, Vorgabe vom letzten mal 
 Schreibe_Startemp(Tsoll);         // Starttemperatur schreiben    
 lcd_puts("Start... ");            // Startmeldung auf LCD
 sei();                            // enable interrupts  
 for(;;){                          // tue nix Schleife
 }

}


Die eigentliche Steuerung liegt in der Interrupt-Routine von Timer1 der genau jede Sekunde ausgeführt wird. Hier wird die Spannung des AD-Wandlers gelesen und in einen Temperaturwert umgerechnet. Die Tasten UP, DOWN werden abgefragt und der Sollwert entsprechend geändert. Ändert sich der Sollwert, wird er im EEPROM gesichert. Die Ist-Temperatur (Tist) und die Soll-Temperatur (Tsoll) werden angezeigt.


//Timer Interrupt - kommt genau jede Sekunde SIGNAL (TIMER1_OVF_vect){ // Timer1 overflow

 cli();                            // Alle Int. sperren solange in INT-Routine
 TCNT1 = startwert;                // Vorbesetzen (1s)
 perioden=0;                       // neuer Periodenzyclus
 lcd_clrscr();                     // 1.Zeile
 adWert=leseAD();                  // lese Spannungswert 
 Tist = adWert*faktor+n;           // Temperatur berechnen
 zeige_Tist(Tist);                 // anzeigen 
 if(bit_is_clear (PINC,1))         // wenn Taste DOWN gedrückt
 {
   if(Tsoll>10)                    // und min-wert noch nicht erreicht
   {
     Tsoll=Tsoll-10;               // erniedrige Tsoll
   Schreibe_Startemp(Tsoll);       // sichere Tsoll im EEPROM
   }
 }
 if(bit_is_clear (PINC,2))         // wenn Taste UP gedrückt
 {
   if(Tsoll<450)                   // und max-wert noch nicht erreicht  
   {
   Tsoll=Tsoll+10;                 // erhöhe Tsoll
   Schreibe_Startemp(Tsoll);       // sichere Tsoll im EEPROM
   }
 }     
 zeige_Tsoll(Tsoll);               // Solltemp. anzeigen 



Die Regelung schaltet auf volle Heizleistung wenn die Temperatur mindestens 20° zu gerig ist. Ist die Temperatur 20° zu hoch wird die Heizung auf 0% gestellt. Dazwischen beträgt die Heizleistung 40%

// regelung ********************************************

 if (Tsoll<=Tist){                 // zu heiss 
   if (Tist-Tsoll < 10){           // weniger als 10 Grad Abweichung 
    stellwert = 20;                // Heizleistung 40%
   }
 else {                            // Abweichung größer 20 Grad C
     stellwert = 0;                // erst mal gar nicht Heizen
   }
 }
 if (Tsoll>Tist){                  // zu kalt
   if (Tsoll-Tist < 10){           // weniger als 10 Grad Abweichung 
    stellwert = 20;                // Heizleistung 40%
   }
 else {                            // Abweichung größer 20 Grad C
     stellwert = 50;               // 100% Heizleistung
   }
 }
 sei();                            // enable interrupts

}


LiFePO4 Speicher Test