DC Motor Drehzahl Steuerung

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

Und auch die Programmierung ist hier geklaut.

//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.

Könnt Ihr mit hier helfen?

Das ist ein 3-Phasen, also Drehfeldmotor. Den wie einen Lüfter anzusteuern bringt nichts.
Ich habe/kenne aber keine Bibliothek dafür.

In der Beschreibung steht davon nichts.
Da steht:

Zu wenig Motorbeschreibung gelesen. Darum Beitrag gelöscht.
Grüße Uwe

In dem Gehäuse ist die integrierte Elektronik drin. Unter anderem ein 5921 als Driver.

Sage mal, ist das nicht hier schon mal vor 2,5 Jahren abgehandelt worden?

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

Bei meiner Beschreibung schon.


Aber, eventuall habe ich ja die falsche.

Nö. Nicht unbedingt.
Die Frage ist, was da intern drin ist.
12-Pole sind ja nicht rausgeführt :wink:
Alles gut...

Mit den 12 Polen sind die Winklungspaare, die magnetischen Pole gemeint.

Ja, das ist mir schon bewusst, das die nicht nach aussen geführt sind.
Es sind auch nicht die 3P raus geführt. Es ist ein DC Motor.

Da ist eine Steuerelektronik drin.
Der TO hat seinen Motor ja verlinkt - das Bild in #6 ist in gross, was da drin ist. Bei ihm mit 9 Paaren / 18 Pole.

Deine Beschreibung dürfte das pdf sein:
http://www.dynetics.eu/CMS/Docs/Nidec/nidecbrushlessdc22h.pdf
Siehe letzte Seite.
Das CW/CCW und Start/Stop ist fest verdrahtet, Tach2 und Locked unbenutzt.

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).

Grüße Uwe

Für dieses Projekt habe ich diesen Motor besorg, da ich dachte, damit geht es.

Ja, die sich ändernde ausgegebene Geschwindigkeit wird am Seriellen Monitor ausgegeben.
Poti ist richtig angeklemmt.

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.

Welche Werte, Welche Ausgabe?

Und Nu? ...

... soll Dir das wer bauen?
wenigstens biste ehrlich.

Wieviele Impulso pro Umdrehung bekommst Du?
Grüße Uwe

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.

Ich hoffe, das war die Antwort auf die Frage...

Heißt das:
4800U/min = 355
2180U/min = 710
Und den Rest kann ich mir ausrechnen?