Arduino Uno - Drehzahlsteuerung + Messung

Hallo liebe Arduino Freunde,

Ich bin noch nicht lange im "Arduino-Business" und versuche mich an einer Drehzahlsteuerung mit Messung und brauche definitiv eure Hilfe.
Dieses Thema war zwar schon öfter hier aber nicht in der kombination mit einer Drehzahlsteuerung.
Das Problem ist, dass der Code für die Messung alleine einwandfei funktioniert ( hier Drehzahlsteuerung extern über Netzteil) und der für die Steuerung alleine auch. Nur wenn Ich beide Codes zusammenfüge spuckt er mir scheinbar willkürliche Werte aus.
Die zu messende Drehzahl beträgt ugf 5000 rpm, zum einstellen der Drehzahl wird ein Poti verwendet und zum Messen ein Hallsensor. Das PWM-Signal geht über ein Mosfet und einem 15 V Netzteil zum Motor.

Schöne Weihnachten und Vielen Dank für eure Hilfe :slight_smile:

Code und Skizze anbei

Drehzahlmessung_und_Steuerung_3.ino (2.8 KB)

Wofür soll der Widerstand über Drain-Source gut sein?
Wird die GND-Letung wirklich von Source über das Poti und den Arduino zur Verorgung geführt? Das könnte die Quelle der Störung sein.

Source direkt zu GND Versorgung, den Rest auch (Stern).

Gruß Tommy

Also, einiges springt mir direkt ins Auge:

Am FET, findet sich weder ein Gatewiderstand zur Strombegrenzung und auch kein Pulldown.

Im Programm werden die Interrupts abgeschaltet und danach serielle Ausgaben getätigt.
Das geht schnell mal eben ins Auge.

Bei 5000 RPM könnte man schon einen Timer damit beauftragen, die Impulse zu zählen!
Deren Zähler Eingänge wurden ja nicht ohne Grund erfunden.
Anstatt dauernd die Interrupts abzuschalten und sich auf die Art die Zählung zu versaubeuteln

Hallo
hier kommt ein Link zu ein Praxisbeispiel.

Da fehlt ebenfalls die Strombegrenzung.

Gruß Tommy

paulpaulson:
Hallo
hier kommt ein Link zu ein Praxisbeispiel.

Evtl. sollte man sich solche Beispiel vorher mal ansehen.
Das ist kein LogicLevel-Mosfets, daher nicht geeignet.

Hallo,

Für Dein Problem kann es zwei Ursachen geben. Entweder fünktioniert deine Periodenmessung zusammen mit den Interupt nicht richtig oder es tritt ein EMV Problem auf.

Du konntest jetzt erst mal bei abkelemmtem Motor eine feste Frequenz messen , z.B mal mit Tone 50Hz erzeugen und die mit einer Drahtbrücke vom Tonausgang auf den Zähleingang. Damit schliesst Du das EMV Problem aus. Die Verarbeitung des Interupts und die Auswertung des Messwertes scheint mir auch nicht optimal. Lass doch mal die Mittelwertbildung mit den 10 Umdrehungen weg und mess mal nur die Zeit zwischen 2 Interupts. Im ersten Ansatz kannst Du die Messung auch mal mit pulsin() machen. Pulsin blockeirt allerdings das macht dann bei kleinen Drehzahlen Probleme.

Du kannst auch mal eine Tormessung machen für 1, 2sekunden messen wieviele Impulse reinkommen . Das ist erst mal einfacher. Da Du relativ kleine Frequenzen hast 10-100 Hz reicht damit aber letztlich die Auflösung nicht. Aber es geht ja zunächst mal darum das Problem einzukreisen.

Heinz

combie:
Also, einiges springt mir direkt ins Auge:

Am FET, findet sich weder ein Gatewiderstand zur Strombegrenzung und auch kein Pulldown.

Im Programm werden die Interrupts abgeschaltet und danach serielle Ausgaben getätigt.
Das geht schnell mal eben ins Auge.

Bei 5000 RPM könnte man schon einen Timer damit beauftragen, die Impulse zu zählen!
Deren Zähler Eingänge wurden ja nicht ohne Grund erfunden.
Anstatt dauernd die Interrupts abzuschalten und sich auf die Art die Zählung zu versaubeuteln

Tommy56:
Wofür soll der Widerstand über Drain-Source gut sein?
Wird die GND-Letung wirklich von Source über das Poti und den Arduino zur Verorgung geführt? Das könnte die Quelle der Störung sein.

Source direkt zu GND Versorgung, den Rest auch (Stern).

Gruß Tommy

Tommy56:
Da fehlt ebenfalls die Strombegrenzung.

Gruß Tommy

Hi Tommy,
die Strombegrenzung übernimmt das Netzteil, und der Widerstand am FET ist angeblich dafür um kapaitive Einflüsse zu vermeiden. Allerdings halte ich das für fragwürdig und habe festgestellt, dass die Schaltung mit und ohne Widerstand gleich reagiert.
Die Drehzahlsteuerung funktioniert alleine einwandfrei. Also mit dieser Schaltung und diesem Sketch kann Ich die Drehzahl über das Poti einstellen.
Nur die Anzeige funktioniert nicht.
Wenn ich allerdings alles auskommentiere was mit der Steuerung zu tun hat und ich die Drehzahl über das Netzteil einstelle funktioniert die Anzeige auch richtig.
Nur zusammen nicht.
Schöne Grüße
Basti

Rentner:
Hallo,

Für Dein Problem kann es zwei Ursachen geben. Entweder fünktioniert deine Periodenmessung zusammen mit den Interupt nicht richtig oder es tritt ein EMV Problem auf.

Du konntest jetzt erst mal bei abkelemmtem Motor eine feste Frequenz messen , z.B mal mit Tone 50Hz erzeugen und die mit einer Drahtbrücke vom Tonausgang auf den Zähleingang. Damit schliesst Du das EMV Problem aus. Die Verarbeitung des Interupts und die Auswertung des Messwertes scheint mir auch nicht optimal. Lass doch mal die Mittelwertbildung mit den 10 Umdrehungen weg und mess mal nur die Zeit zwischen 2 Interupts. Im ersten Ansatz kannst Du die Messung auch mal mit pulsin() machen. Pulsin blockeirt allerdings das macht dann bei kleinen Drehzahlen Probleme.

Du kannst auch mal eine Tormessung machen für 1, 2sekunden messen wieviele Impulse reinkommen . Das ist erst mal einfacher. Da Du relativ kleine Frequenzen hast 10-100 Hz reicht damit aber letztlich die Auflösung nicht. Aber es geht ja zunächst mal darum das Problem einzukreisen.

Heinz

Hallo Heinz,
vielen Dank für deine Antwort!
Den Tipp mit dem EMV Problem werde Ich mir mal genauer ansehen.

Ich habe leider schon versucht die Mittelwertbildung weg zu lassen und es funkktionierte auch nicht.
Also so wie aktuell der Sketch ist kann ich die Drehzahl über das Poti einstellen und es funktioniert. Nur die Anzeige funktioniert nicht.
Und das seltsame ist, dass die Drehzahlmessung funktioniert wenn ich den Code für die Steuerung im loop auskommentiere (Also die 3 Zeilen unter //Motorsteuerung)
Pulsein() werde ich mal versuchen. Weißt du ob pulsein() im interrupt anwendbar ist?
Die Messungen finden nur im Drehzahlbereich größer 3000 rpm statt; das blockieren sollte daher kein Problem darstellen.
Schöne Grüße
Basti

Hallo,

lesen musst Du selber.

arduino.cc/reference

Heinz

die Strombegrenzung übernimmt das Netzteil,

Da hast du was falsch verstanden!
Die Strombegrenzung des Netzteils hat keine Auswirkungen auf den Gate Umladestrom

und der Widerstand am FET ist angeblich dafür um kapaitive Einflüsse zu vermeiden.

Wo soll da ein Kapazitiver Einfluss her kommen?

Weiterhin:
Es fehlt der Widerstand zur Gate Strombegrenzung
Es fehlt der Pulldown Widerstand am Gate

Glaube es, oder glaube es nicht.
Mache dich kundig, oder auch nicht.

Für mich endet es hier.