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