Mosfet-Schaltung 12V von 0V bis 10V regeln

Hallo zusammen,

Ich möchte mit dem Arduino eine 12V Spannung aus einer Batterie (Varta V23GA) mittels Mosfet von 0 bis 10Volt regeln um ein Proportionalventil anzusteuern. Über tinkercad habe ich auch schon zwei Schaltungen aufgebaut und den Code dazu geschrieben, dies funktioniert in der Theorie auch ohne Probleme.

Nun habe ich die Schaltung aufgebaut und musste feststellen dass es nicht so funktioniert wie ich mir das erhofft hatte.

Ich benutze:

  • Arduino Nano
  • Mosfet IRL3803
  • 12V Batterie (Varta V23GA)
  • 470Ohm Potentiometer
  • 10kOhm und 220Ohm (Versuch2)

Anbei der Aufbau der beiden Versuche...

In beiden Versuchen steigt die Spannung, welche zwischen 60mV und 300mV schwankt, sobald ich ein bisschen am Potentiometer drehe direkt auf die vollen 12V an.

Hier der Code zum ersten Versuch:

const int MosfetPin = 9;        // Mosfet an Pin 9 angeschlossen
const int PotiPin = A0 ;     // Potentiometer am analogen Eingang Pin 0 angeschlossen

// Variablen

int MosfetVar = 0;            // Variable für den Mosfet
int PotiVar = 0 ;            // Variable zum speichern des Potentiometereingangs


void setup() {

  TCCR1B = TCCR1B & 0b11111000 | 0x01;    // Setzt Timer1 (Pin 9 und 10) auf 31300Hz
  Serial.begin(9600);
  pinMode(MosfetPin, OUTPUT) ;      //Setzt den Mosfet Pin als Ausgang
  pinMode(PotiPin, INPUT) ;      //Setzt den LEDPin als Ausgang
}


void loop() {

  PotiVar = analogRead(PotiPin) ;               // Liest das Potentiometer aus
  MosfetVar = map(PotiVar, 0, 1023, 0, 255);   // Verteilt den PWM Wert über den Messbereich des Potis
  Serial.println(MosfetVar);          // Gibt die Variable im Seriellen Monitor aus
  analogWrite(MosfetPin, MosfetVar);     // Gibt die Variable mit PWM aus
}

Und hier für den zweiten (hier steuere ich noch einen Servomotor an, dieser funktioniert ohne Probleme):

int potpin1 = 0;                              // Festlegen des Potentiometer Pins 1
int potpin2 = 1;                              // Festlegen des Potentiometer Pins 2
int servo = 10;                               // Festelegen des Servo Pins
int mosfetPin = 9;                            // Festelegen des MOSFET Pins
int val1;                                     // Variable für MOSFET Ansteuerung
int servoval;                                 // Variable für Servo Ansteuerung
int pwm;                                      // Variable für Pulsweiten-Modulation
int pos;                                      // Variable für Drehwinkel


void servoMove(int servo, int pos) {          /* Funktion um den Servo zu bewegen. Hier wird die Position berechnet und der Wert der neuen Position an den Servo übergeben*/
  pwm = (pos * 11) + 500;                     // Winkel in Mikrosekunden umrechnen
  digitalWrite(servo, HIGH);                  // Servo Pin auf HIGH zum aktivieren des Servos
  delayMicroseconds(pwm);                     // kurze Zeit warten
  digitalWrite(servo, LOW);                   // Servo Pin auf LOW zum deaktivieren des Servos
  delay(20);                                  // 20ms warten
}

void setup() {
  Serial.begin(9600);                         // Serielle Schnnittstelle  initialisieren
  pinMode(mosfetPin, OUTPUT);                 // Initialisieren des MOSFET Pins als Ausgang 
  pinMode(servo, OUTPUT);                     // Initialisieren des Servo Pins als Ausgang 
}

void loop() {                                 // Hauptprogramm
  val1 = analogRead(potpin1);                 // Auslesen des ersten Potentiometers
  val1 = map(val1, 0, 1023, 0, 100);          /* Ändern der ermittelten Werte (0 bis 1023) auf die gewünschte Größe 0 bis 100 (normalerweise 0 bis 255, jedoch benötigen wir nicht mehr PWM bei vollem Potentiometer-Wert)*/
  analogWrite(mosfetPin, val1);               // Ausgabe der PWM an das MOSFET
  delay(15);                                  // 15ms warten
  servoval = analogRead(potpin2);             // Auslesen des zweiten Potentiometers
  servoval = map(servoval, 0, 1023, 83, 97);  /* Ändern der ermittelten Werte (0 bis 1023) auf die gewünschte Größe 83 bis 97 (normalerweise 0 bis 180, jedoch nicht notwendig da maximaler Einschlagwinkel pro Richtung 7° */
  servoMove(servo, servoval);                 // Verfahren des Servomotors auf gewünschte Position
  Serial.println(val1);                       // Variable seriell ausgeben (Kontrolle der Werte auf seriellem Monitor auf PC)
  delay(15);                                  // 15ms warten
}

Da ich in Elektrotechnik nicht allzu versiert bin, weiß ich nicht was ich nun machen soll bzw woran das liegen kann.

Vielen Dank schonmal im voraus :slight_smile:

lucasr98:
.....
Da ich in Elektrotechnik nicht allzu versiert bin, weiß ich nicht was ich nun machen soll bzw woran das liegen kann.

Mit PWM alleine funktioniert das auch nicht.
Einfach erklärt, liegt die Ausgangsspannung "immer" auf maximaler Spannung und wird nur ein- bzw. ausgeschaltet. Dabei ist die das Verhältnis Ausschaltzeit zu Einschaltzeit maßgeblich.
Bitte hier nachlesen.

Du kannst eine nutzbare Gleichspannung daraus machen, wenn du einen Tiefpass (Widerstand und Kondensator) dafür einbaust.

Mit PWM alleine funktioniert das auch nicht.

Je nach Proportionalventil, ist PWM genau das richtige.

Allerdings ist das mal wieder geheim, so dass das lustige Glaskugelpolieren beginnen kann.

combie:
Je nach Proportionalventil, ist PWM genau das richtige.

Allerdings ist das mal wieder geheim, so dass das lustige Glaskugelpolieren beginnen kann.

Ja, ok.
Das stimmt auch.
Da war ich bedingt durch fehlende Informationen zum Ventil betrifft zu voreilig.

Jedoch bei der gewünschten Gleichspannung (0 - 10V) funktioniert das nur mit PWM nicht.

combie:
Allerdings ist das mal wieder geheim, so dass das lustige Glaskugelpolieren beginnen kann.

Ich habe gehört, daß die Kristallkugeln vom zuviel polieren hässliche hellblaue Flecken bekommen können. Vor allem wenn sie nicht 18 Stunden zusammenhängend im dunkeln gelagert werden. :wink: :wink: :wink:

Grüße Uwe

:astonished:

Es handelt sich hierbei um ein Ventil von Festo (ich habe das Datenblatt mal beigehängt)

Auf Nachfrage ob das Ventil mit PWM angesteuert werden könne, bekam ich die Antwort dass es eigentlich funktionieren sollte :wink:

VEAB_2017-01_8058832d1.pdf (99.9 KB)

lucasr98:
.....
Auf Nachfrage ob das Ventil mit PWM angesteuert werden könne, bekam ich die Antwort dass es eigentlich funktionieren sollte :wink:

Wenn diese Aussage vom Hersteller kommt, wäre ich vorsichtig.

Ja habe dem Hersteller eine Email geschrieben und wurde dann ein paar Stunden später angerufen.
Am Telefon war ein Mitarbeiter der fragte um was es denn gehen würde. Als ich dann nachfragte ob ich das Ventil mit PWM ansteuern könne, meinte dieser dass es gehen sollte ich aber darauf achten muss dass das Ventil nicht mehr als 2A abbekommt.

lucasr98:
Es handelt sich hierbei um ein Ventil von Festo (ich habe das Datenblatt mal beigehängt)

Auf Nachfrage ob das Ventil mit PWM angesteuert werden könne, bekam ich die Antwort dass es eigentlich funktionieren sollte :wink:

Du möchtest den "Soll Wert" erzeugen.

Das geht nicht mit einen N-Kanal FET.
Überhaupt, brauchst du da keinen FET. Und schon gar nicht so einen fetten.

Das Ventil wird dauerhaft an 24 V geklemmt, und die (0-10V)Steuerspannung ist auf GND bezogen.

Wenn überhaupt, dann brauchst du einen HigeSideSwitch.
Also einen P-Kanal FET oder PNP Transistor.
Und dann bitte nicht so einen fetten, der Steuerstrom wird nur sehr klein sein.

Auch dürfte ein Tiefpass, wie HotSystems schon sagte, durchaus angemessen sein.

dass das Ventil nicht mehr als 2A abbekommt.

Die Aussage passt nicht zum Datenblatt.

Auch sagt das Datenblatt, dass man hohe Frequenzen fern halten soll.

Also muss ich den N-Kanal FET durch einen P-Kanal FET oder PNP Transistor austauschen und einen Tiefpass einbauen damit ich überhaupt auf ein Ergebnis komme?

Die Aussage passt nicht zum Datenblatt.

Das habe ich mir auch gedacht :o

AFAIK funktionieren Proportional-Ventile richtig nur mit PWM. Im Datenblatt ist dann oft eine (minimale) PWM-Frequenz empfohlen. Das leichte "Brummen" verhindert, daß das Ventil hängen bleibt, bei reiner Gleichspannung weiß man nie genau, wo das Ventil stehen geblieben ist.

Das Datenblatt deutet allerdings darauf hin, daß die Steuerung bereits eingebaut ist.

Das Datenblatt deutet allerdings darauf hin, daß die Steuerung bereits eingebaut ist.

Sehe ich auch so!
Und die möchte ein möglichst glattes Signal sehen.

Also auf jedenfall p-Kanal FET und Tiefpass wenn ich das richtig verstehe oder?

lucasr98:
Also auf jedenfall p-Kanal FET und Tiefpass wenn ich das richtig verstehe oder?

Wenn PWM, dann ja...
Und dann auch mit möglichst hoher Frequenz.
Das hilft beim glätten, ermöglicht kleinere Bauteile.

Übrigens:

  1. DACs wie der DAC7571 sind extra für solche Zwecke erfunden worden.(es gibt noch viel mehr)
  2. Viele µC haben eingebaute DAC, vielleicht ist der Nano nicht die beste Wahl
    In beiden Fällen ist dann noch ein Verstärker/OP nötig, um auf die 10V zu kommen

Hallo
Das Ventil hat alles zur Ansteuerung bereits eingebaut. Sollwert sollte aus einem ADC sein , ob das mit einem PWM Spannung mittels Tiefpass geht glaube ich nicht
Wenn das Ventil einen Rampengenerator eingebaut hätte wäre das schon ein Tiefpass , hat es aber anscheinend nicht.

Heinz

Wenn PWM, dann ja...
Und dann auch mit möglichst hoher Frequenz.
Das hilft beim glätten, ermöglicht kleinere Bauteile.

Alles klar und wie sieht dann der Aufbau aus, muss ich den Tiefpass vor oder nach dem Mosfet einbauen und welcher pin am Mosfet kommt wo hin? :sweat_smile:

Hallo
Das Ventil hat alles zur Ansteuerung bereits eingebaut. Sollwert sollte aus einem ADC sein , ob das mit einem PWM Spannung mittels Tiefpass geht glaube ich nicht
Wenn das Ventil einen Rampengenerator eingebaut hätte wäre das schon ein Tiefpass , hat es aber anscheinend nicht.

Und wie würden sie vorgehen um das Ventil anzusteuern? :sweat_smile:

combie:
Wenn PWM, dann ja...
Und dann auch mit möglichst hoher Frequenz.
Das hilft beim glätten, ermöglicht kleinere Bauteile.

Übrigens:

  1. DACs wie der DAC7571 sind extra für solche Zwecke erfunden worden.(es gibt noch viel mehr)
  2. Viele µC haben eingebaute DAC, vielleicht ist der Nano nicht die beste Wahl
    In beiden Fällen ist dann noch ein Verstärker/OP nötig, um auf die 10V zu kommen

Das Problem ist dabei daß die Spannung bis 5V geht. Man braucht immernoch einen Operationsverstärker der auf 10V verstärkt.
Grüße Uwe

Ich habe noch einen Operationsverstärker OP07CP herumliegen. Wäre der geeignet um das zu machen?

IC OP07CP Datenblatt.pdf (134 KB)