Ich habe einen DC Motor, mit vier Anschlüßen.
Es handelt sich um einen NIDEC-22H051F-12V-24V.
Zu finden hier. 22H051F
Ich würde diesen Motor gerne Drehzahlsteuern.
Das hier steht in Sachen PWM Frequenz im Text:
Empfohlen PWM frequenz: 1 ~ 50 kHz
Empfohlen PWM Duty bereich: 20 ~ 100%
Angeschlossen habe ich es nach dieser "Vorlage" (auch wenn dieser Motor kein Lüfter ist). Anschluß 4pin Lüfter
//Konstanten
const int fanPin = 9; // Lüfter an Pin 9 angeschlossen
const int potiPin = A0 ; // Potenzometer am analogen Eingang Pin 0 angeschlossen
const int fanMinSpeed = 75; // Niedrigste Drehzahl bei der der Lüfter anläuft (müsst ihr mit euerm Lüfter testen)
// Variablen
int fanSpeed = 0; // Variable für die Lüftergeschwindigkeit
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); // Baudrate für die Ausgabe am Seriellen Monitor
pinMode(fanPin, OUTPUT) ; //Setzt den Lüfter Pin als Ausgang
pinMode(potiPin, INPUT) ; //Setzt den LEDPin als Ausgang
}
void loop()
{
potiVar = analogRead(potiPin) ; // Liest das Potentiometer aus
fanSpeed = map(potiVar, 51, 1023, fanMinSpeed, 255); // Verteilt den PWM Wert über den Messbereich des Potis
// Unterer Potenziometerbereichs (0-50) = Lüfter aus (funktioniert nur mit 3Pin Lüftern. 4Pin Lüfter laufen auf ihrer Mindestdrehzahl)
if(potiVar < 50)
{
fanSpeed = 0;
}
Serial.println(fanSpeed); // Gibt die Variable im Seriellen Monitor aus
analogWrite(fanPin, fanSpeed); // Gibt die Variable mit PWM aus
}
Leider reagiert der Motor nicht wie gewünscht.
Ab einer bestimmten Widerstandsgröße läuft der Motor in voller Geschwindigkeit an.
Keine Änderung möglich.
Nur an/ aus.
Was mache ich falsch, oder geht das Vorhaben mit diesem Motor nicht?
Wenn der Motor ungeeignet ist, kennt einer von euch einen passenden Motor?
Ich versuche einen Magnetmischer damit zu erstellen.
Der Motor sollte DC 12V haben und im Idealfall 0-2000 U/Min schaffen.
Eine kleine Bauform wäre toll, muss aber nicht sein.
Hallo,
ich würde erst mal mit der standard PWM Frequenz versuchen, und bist Du sicher das Du das Poti richtig angeschlossen hast. Lass dir den Potiwert mit auf dem Monitor ausgeben.
Was sagt die Ausgabe im Monitor über den Wert von fanSpeed. ?
Heinz
Die Pole beziehen sich nicht auf die herausgeführten Wicklungen sondern auf die Polpaare des Rotors (Magnetpaare)
Motore mit 2 Polen (1 Poolpaar) drehen sich mit fast mit der Geschwindigkeit des Drehfelds. Synchronmotoren mit genau der Drehzahl, Asynchronmotore etwas langsamer (Schlupf).
Motore mit 4 Polen (2 Polpaaren) drehen sich mit der halben Drehfeldgeschwindigkeit.
Bürstenlose Gleichstrommotore mit 18 Dauermagneten auf dem Rotor drehen sich mit mit 1/9 der Drehfeldgeschwindigkeit. Dazu haben sie auch 18 Statorspulen, die aber elektrisch zu 3 Spulen in Serie geschaltet sind.
Vorteil ist daß die Magnete kleiner sein können also Quaderförmig und nicht 2 Halbschalen.
Da die Frequenz höher ist gegenüber einem Motor mit weniger Polen um gleiche Drehzahl zu erreichen ist der Scheinwiderstand der Wicklung größer und es fließt weniger Strom bei gleichen Wicklungsdaten ( Drahtdurchmesser, Spulengrößer und Drahtdurchmesser).
Ganz lieben Dank an Rentner!
Mit der standart Frequenz funktioniert es!!!
Ich hab mich definitiv mit der anderen Frequenz total verrannt.
Jetzt kann das Basteln weiter gehen!
Die Steuerung funktioniert.
Als Sahnehäubchen würde ich gerne versuchen, die Drehzahl auszulesen.
Versucht habe ich es nach dieser Anleitung: Drehzahl auslesen
Er wirft auch werte aus, aber laut der Ausgabe dreht der Motor mit 32000 Touren.
So ganz durchblicke ich es -mal wieder- nicht und bin auch ehrlich gesagt zu faul, mir die komplette Theorie anzulesen.
Ja ich weiß, ich sollte es selber lernen, da ich dieses Prozedere wahrscheinlich nur dieses eine Mal benötige, würde ich darauf lieber verzichten.
Man möge es mir nachsehen.
Kurze Info noch:
Bei Speed 0 läuft der Motor Vollgas, bei 255 steht der Motor.
Ich habe diesen Programmteil zum Auslesen geklaut:
void pulse_stretch()
{
//analogWrite(MotorPWM, 0); // Den Lüfter konstant mit Strom versorgen damit das Tachosignal funktioniert
flankenZeit = pulseIn(tachoPin, HIGH); // Abfrage der Zeit pro Puls in Mikrosekunden
analogWrite(MotorPWM, Geschwindigkeit); // Setzt die Lüftergeschwindigkeit zurück
umdrZeit = ((flankenZeit * 4)/1000); // Berechnung der Zeit pro Umdrehung in Millisekunden
rps = (100/umdrZeit); // Umrechnung auf Umdrehungen pro Sekunde
rpm = (rps*60); // Umrechnung auf Umdrehungen pro Minute
Serial.println(flankenZeit); // Ausgabe der Drehzahl im Seriellen Monitor
tachoMillis = millis(); // Die TachoMillis werden aktualisiert um die nächsten 2000ms zählen zu können
}
Bei 12V sind 2180U/min angegben
12V Bei Vollgas (Geschwindigkeit 1) zeigt er eine Flankenzeit von 714,
12V Langsam (Geschwindigkeit 200, darüber ruckt der Motor) zeigt er eine Flankenzeit von 1600.
Bei 24V sind 4800U/min angegben
24V Bei Vollgas (Geschwindigkeit 1) zeigt er eine Flankenzeit von schwankend zwischen 340 - 370,
24V Langsam (Geschwindigkeit 200, darüber ruckt der Motor) zeigt er eine Flankenzeit von (relativ stabil)1600.