ich muss eine Heizplatte für einen 3D-Drucker für meine Thesis entwerfen. Ich habe soweit auch schon fast alles. Nun möchte ich die Heizplatte in abhängigkeit von der Temperatur an und ausschalten. Dies soll über PWM gemacht werden. Die H-Brücke muss ich verwendet, da meine Aufsicht das so möchte.
Nun zu meiner Frage. Ich habe noch nie bis zu meiner Thesis programmiert. Nun habe ich schon ein wenig was programmiert und weis aber nicht wie man pwm programmiert. Ich würde mich daher sehr freuen wenn ihr mir ein bischen helfen könntet. Ich soll über pwm mal 70% anschalten mal 30% bis ich dann den wert ermittelt habe in % wo die Heizplatte recht konstant warm bleibt.
Hier einmal mein code:
int PT1000=A0; //PIN A0
int t=500; //Delay-Time
float sollwert = 28; //Der Wert, der Eingestellt werden soll
float temperatur=0; //Variable soll zu beginn auf 0 sein
float sensorwert=0; //" " " " " " "
float minWert = sollwert -2; //Mindestwert
float maxWert = sollwert +2; //Maximalwert
int h_1 = 11; // h-brücke Pin 11
int h_2 = 12; // h-brücke Pin12
void setup() {
Serial.begin(9600);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(4,OUTPUT); //LED GRÜN
pinMode(5,OUTPUT); //LED ROT
//pinMode(7,OUTPUT); //SCHALTER
digitalWrite(5,LOW); // Zu Beginn auf LOW
digitalWrite(10,LOW); // Zu Beginn auf LOW
}
void loop() {
int Input = analogRead(PT1000); //Auslesen des Temp-Sensors
Serial.print("Sensor Value: ");
Serial.print(Input);
int Input_h1 = digitalRead(h_1); //Auslesen des ersten Inputs von der H-Brücke ob 1 oder 0
Serial.print(" 1.Wert: ");
Serial.print(Input_h1);
int Input_h2 = digitalRead(h_2); //Auslesen des zweiten Inputs von der H-Brücke ob 1 oder 0
Serial.print(" 2.Wert: ");
Serial.print(Input_h2);
float voltage = (Input/1024.0)*5.0; //Spannungsumrechnung für den Temp-Sensor
Serial.print(", Volts: ");
Serial.print(voltage);
sensorwert = analogRead(PT1000);
temperatur= map(sensorwert, 0, 1024, 0, 250); //die Temperatur wird ausgelesen
Serial.print(", Celsius: ");
Serial.println(temperatur);
if(temperatur <= minWert){
digitalWrite(4, HIGH);
digitalWrite(5,LOW);
//digitalWrite(7,HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
}
else if(temperatur >minWert && temperatur <= maxWert){
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
//digitalWrite(7,HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
}
else
{
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
//digitalWrite(7,LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
delay(t);
}
die H-Brücke die ich benutze ist BTN7971b hier ein foto
Aber ok, auch wenn eine halbe Brücke, oder ein einzelner FET, reichen würde....
Die volle Brücke wird es auch tun.
combie:
Irre...
Aber ok, auch wenn eine halbe Brücke, oder ein einzelner FET, reichen würde....
Die volle Brücke wird es auch tun.
soweit ich weiß benutzt man H-Brücken für Motoren oder? Wieso sollte es mir hier etwas bringen? Also ist das in diesem Fall sowas wie ein Schalter? Und würde es reichen wenn ich nur 1 halbe brücke benutzen würde? Weil auf dem Ding steht einmal 5V IN1 IN2 GND am eingang und am ausgang OUT1 OUT2? Also müssen an beiden OUTPUTS etwas dran sein? oder könnte ich auch nur an OUTPUT 1 etwas anschließen und es würde funktionieren? Ich möchte ja keinen Motor nach links oder rechts rotieren lassen. Daher meine Frage
Du kannst es so ausprobieren, natürlich. Aber 255 ist maximum, also 5V. Wenn du nur 70% haben willst, musst du schon analogWrite(pin, 190) oder so machen.
So habe ich das angeschlosse. An der Anschlussklemme habe ich eine externe Spannungsquelle. Und auf der H-Brücke habe ich vom arduino 5V GND angeschlossen und halt die zwei inputs. Habe ich da etwas falsch angeschlossen? Weil ich das gefühl habe als würde ich das doppelt mit spannung versorgen.
Kleiner Einwand: Mit Analog-Write reguliert man keine Spannung, sondern den Tastgrad der PWM. Also auch bei analogWrite(pin, 10) werden 5V ausgegeben, aber mit einem anderen Tastgrad als bei analogWrite(pin, 127) oder analogWrite(pin, 255)
someone83:
Kleiner Einwand: Mit Analog-Write reguliert man keine Spannung, sondern den Tastgrad der PWM. Also auch bei analogWrite(pin, 10) werden 5V ausgegeben, aber mit einem anderen Tastgrad als bei analogWrite(pin, 127) oder analogWrite(pin, 255)
Grüsse
Peter
Hallo Peter
heißt das also, dass bei analogWrite(pin,10) die 5V immer nur sehr kurz anliegen und bei analogWrite(pin,127) länger als wie bei analogWrite(pin,10)? Also muss ich mir das so vorstellen, dass zb bei analogWrite(pin,10) nur 5 sekunden 5v anliegen dann zb 20 sekunden 0V und dann wieder 5 sekunden 5v und 20 sekunden 0V? Also quasi das der Schalter mal an ist und mal aus?
taha66:
soweit ich weiß benutzt man H-Brücken für Motoren oder? Wieso sollte es mir hier etwas bringen? Also ist das in diesem Fall sowas wie ein Schalter?
Eine H-Brücke braucht man wenn Strom in zwei Richtungen fließen muss. Motoren sind die häufigste Anwendungen, aber nicht die einzige.
Vereinfacht sind das 4 Transistoren:
Davon sind jeweils zwei aktiv, damit der Strom in beide Richtungen fließen kann
Wenn Strom nur in eine Richtung fließen soll reicht ein einzelner Transitor
Also muss ich mir das so vorstellen, dass zb bei analogWrite(pin,10) nur 5 sekunden 5v anliegen dann zb 20 sekunden 0V und dann wieder 5 sekunden 5v und 20 sekunden 0V?
Nein. Der Wechsel findet mit 490 oder 970 Hertz statt. Und für PWM ist das eine sehr niedrige Frequenz. Mehrere Dutzend kHz sind da bei anderen Anwendungen nicht unüblich
someone83:
Kleiner Einwand: Mit Analog-Write reguliert man keine Spannung, sondern den Tastgrad der PWM. Also auch bei analogWrite(pin, 10) werden 5V ausgegeben, aber mit einem anderen Tastgrad als bei analogWrite(pin, 127) oder analogWrite(pin, 255)
Grüsse
Peter
Natürlich gebe ich dir recht. Aber wie soll ich es den anders an einen Laien weiter geben?
taha66:
Hallo Peter
heißt das also, dass bei analogWrite(pin,10) die 5V immer nur sehr kurz anliegen und bei analogWrite(pin,127) länger als wie bei analogWrite(pin,10)? Also muss ich mir das so vorstellen, dass zb bei analogWrite(pin,10) nur 5 sekunden 5v anliegen dann zb 20 sekunden 0V und dann wieder 5 sekunden 5v und 20 sekunden 0V? Also quasi das der Schalter mal an ist und mal aus?
Nein, beim PWM wird durch das Tastverhältniss die Spannung je nachdem schneller oder langsamer An und Ausgeschaltet.
Dadurch "gaukelt" man einem Motor, oder einem Heizbett oder oder vor, als ob man mit nur z.b. 70% der Leistung fährt.
taha66:
heißt das also, dass bei analogWrite(pin,10) die 5V immer nur sehr kurz anliegen und bei analogWrite(pin,127) länger als wie bei analogWrite(pin,10)? Also muss ich mir das so vorstellen, dass zb bei analogWrite(pin,10) nur 5 sekunden 5v anliegen dann zb 20 sekunden 0V und dann wieder 5 sekunden 5v und 20 sekunden 0V? Also quasi das der Schalter mal an ist und mal aus?
Im Prinzip ja. Das ist das Prinzip einer PWM.
Nur dass es beim Arduino mit 490Hz passiert. Also analogWrite(pin,10) erzeugt 80µs lang 5v und 1961 µs lang 0V. 70% würde dann analogWrite(pin,178) entsprechen und 1425µs lang 5v erzeugen gefolgt von 616µs lang 0V.
(und, ja, ich weiß, dass es auch PWM-Kanäle gibt, die mit 980Hz laufen.)
Den PT1000 kannst Du nicht direkt an den Arduino anschließen. Die Widerstandsänderung ist zu gering. Du brauchst eine Wandlerelektronik dazwischen.
Dein Foto der Verdratung verstehe ich nicht.
Was sind h_1 und h_2 der H-Brücke?
Wieso setzt du Pin 10 auf LOW wenn Du es vorher nicht deklariert hast?
Du kannst ruhig 1 Transistor der H Brücke verwenden und die Last zwischen + Versorgungsspannung (VCC) und einem Output (zB Output1) der H Brücke schalten. Die Platine muß dann die Versorgerspannung bekommen (VCC und GND) und zusätzlich 5V und GND. Die Heizleistung steuerst Du dann mit dem PWM SIgnal an IN1.
Ich teile das Unverständnis meiner Vorschreiber, daß Du einen H-Brücke verwenden mußt.
uwefed:
Den PT1000 kannst Du nicht direkt an den Arduino anschließen. Die Widerstandsänderung ist zu gering. Du brauchst eine Wandlerelektronik dazwischen.
Dein Foto der Verdratung verstehe ich nicht.
Was sind h_1 und h_2 der H-Brücke?
Wieso setzt du Pin 10 auf LOW wenn Du es vorher nicht deklariert hast?
Du kannst ruhig 1 Transistor der H Brücke verwenden und die Last zwischen + Versorgungsspannung (VCC) und einem Output (zB Output1) der H Brücke schalten. Die Platine muß dann die Versorgerspannung bekommen (VCC und GND) und zusätzlich 5V und GND. Die Heizleistung steuerst Du dann mit dem PWM SIgnal an IN1.
Ich teile das Unverständnis meiner Vorschreiber, daß Du einen H-Brücke verwenden mußt.
Grüße Uwe
Hallo uwe,
habe den Thread doch gefunden
Also ich benutze für den PT1000 einen PT1000-Messwandler von Pollin. Soll wohl nicht gut sein, aber besser als garnichts
Als h_1 und h_2 sollen die eingänge von der H-Brücke sein. Daher das h für H-Brücke und 1 und 2 für Eingang 1 und Eingang 2.
Ich weiß leider nicht wie ich genau die H-Brücke anschliesen muss. Habe sowohl über den VCC GND mit Spannung versorgt als auch mit den Pins links und rechts von den beiden Eingängen. Beidemale habe ich leider am OUTPUT1 nichts an und ausschalten könne. Das ich Pin 10 nicht deklariert habe, habe ich nicht gemerkt. Danke dir :).
Könntest du mir vielleicht sagen ob ich nur an VCC GND was anschließen muss oder nur an 5V GND oder ob ich bei beiden was anschließen muss?
taha66:
Ich weiß leider nicht wie ich genau die H-Brücke anschliesen muss. Habe sowohl über den VCC GND mit Spannung versorgt als auch mit den Pins links und rechts von den beiden Eingängen. Beidemale habe ich leider am OUTPUT1 nichts an und ausschalten könne. Das ich Pin 10 nicht deklariert habe, habe ich nicht gemerkt. Danke dir :).
Könntest du mir vielleicht sagen ob ich nur an VCC GND was anschließen muss oder nur an 5V GND oder ob ich bei beiden was anschließen muss?
Bitte lies meine letzte Antwort genauer durch.
Grüße Uwe
meister_q:
... Natürlich gebe ich dir recht. Aber wie soll ich es den anders an einen Laien weiter geben? ...
Wieso willst Du es überhaupt anders weitergeben? Ich denke, dass selbst ein Laie versteht, was PWM ist. Wer das nicht versteht, ist dermaßen wenig an Technik interessiert, dass er hier sowieso nicht mitliest.
Als erstes solltest du mal verstehen wie die vor dir liegende Platine funktioniert. Nur programmieren ist sicher nicht das Ziel deiner Aufgabe.
Da durch die zwei Optokoppler eine galvanische Trennung zwischen Steuer- und Arbeitskreis vorliegt, musst du natürlich beide Seiten mit Spannung versorgen.
Aber, als ich das Foto deiner "Verdrahtung" gesehen habe, hast du wohl hardwaremässig noch viel mehr zu lernen.
Warum gibt man dir eigentlich solch eine "schwere" Aufgabe, wenn Null Wissen und Können vorliegen? Wenn es darum geht programmieren zu lernen, dann sollte man dir fertige Hardware geben. Wenn es darum geht auch Hardware zu lernen, dann sollte man vorher gewisse Grundkenntnisse vermitteln und nicht einfach nur die Brocken "hinwerfen" und sagen "...mach mal...". Schon die Vorgabe eine H-Brücke für diese Aufgabe verwenden zu müssen finde ich eine Frechheit.
So, nachdem ich mich über deine/n AusbilderIn aufgeregt habe, hier die Erklärung deiner Fehler im Verdrahtungsfoto:
Spannungsversorgungen werden in den meisten Gleichspannungsfällen wie folgt verbunden:
-- Plus = rot
-- Masse (GND) = blau
-- Minus = schwarz
Solltest du dich in Richtung KFZ Technik weiterbilden, dann gilt:
-- ungeschaltete Plusadern, z. B. Kl. 30 = rot oder bei mehrfarbigen rot als Grundfarbe
-- Masse, Kl. 31 = braun (deutsche KFZ Hersteller)
-- Minus, gibt es in der Verdrahtung (noch?) nicht
-- geschaltete Plusadern, z. B. Kl. 15 = schwarz bzw. bei mehrfarbigen als Grundfarbe
Nächster Fehler laut deinem Foto, die Farben der In-Adern tauchen bei der Versorgung auf der Sekundärseite als Spannungsversorgung auf - riesenfehler!!!
Und die Versorgungsader der Heizplatte sieht wie ein blankes Stück Draht aus! Sollte dies eine durchsichtige Ummantelung sein, dann habe ich nichts gesagt, ansonsten, sofort austauschen.
Auch die Querschnitte der Adern auf der Sekundärseite sind sicher viel zu gering, für eine Heizplatte.
Also, bringe erst mal die Hardware in Ordnung. Wenn du nämlich hier schon Fehler hast, dann kannst du im Programm lange nach Fehlern suchen wenn was nicht läuft.