Welches Drehzahlmessverfahren ist geeignet?

Ich habe einen PMDC-Motor, der elektronisch drehzahlgeregelt ist. Und es ist ein geschlossenes System. Ein Näherungssensor misst die Drehzahl des Motors und es sind 12 Schrauben an der Welle des Motors befestigt, so dass der Näherungssensor 12 Impulse pro Umdrehung erzeugt, wenn er sich dreht. Ich habe einen Code geschrieben, um die Drehzahl zu messen, in dem ich die Impulse in einer Sekunde zähle und so die Geschwindigkeit berechne. Aber das Problem ist, dass ich nur eine Auflösung von 5 U/min bekommen konnte. Gibt es überhaupt eine höhere Auflösung wie 1 U / min auf diesem System, ohne die Feedback-Technologie zu ändern?

Sind Sie bereit, zusätzliche externe Sensoren hinzuzufügen? Ist die Auflösung die der Drehzahlmessung oder die Drehzahländerung durch die Drehzahlmessung gemeint? Ich gehe davon aus, dass Sie mit "Closed Loop System" implizieren, dass die aktuelle Drehzahl des Motors automatisch durch die Messungen des Drehzahlsensors aktualisiert wird. Welchen Drehzahlbereich hat der Motor? Wie hoch ist die Abtastfrequenz des Sensors?
Auflösung, die ich meinte, ist die Drehzahlmessung. Ich könnte einen zusätzlichen Sensor hinzufügen, wenn ich keine Wahl habe, ohne die Hardware zu berühren. Ja, ich erwähnte, dass ich jede Sekunde den Puls überprüfe.
Der Drehzahlbereich des Motors beträgt 500 U / min bei Volllast
Sie sagen, Sie "zählen die Impulse in einer Sekunde", aber Sie erwähnen nicht, wie oft Sie pro Sekunde nach diesem Impuls suchen ... Wenn es nur einmal pro Sekunde ist, würden Sie seit dem Motor überhaupt keine Ergebnisse erhalten dreht sich 8,33 Mal pro Sekunde und erzeugt 100 Impulse pro Sekunde. Ich denke, eine bessere Frage ist, wie Sie nach diesem Impuls im Code suchen. Ist es ein HI/LO-Zustand? Handelt es sich um eine Flankentrigger-ISR? Wissen Sie auch, ob mit diesem Sensor ein "Rückprallen" verbunden ist, wenn er seinen Zustand ändert? Das würde sich auch auf die Ergebnisse auswirken.
Es ist nicht klar: Versuchen Sie, 1) den vorhandenen Impulsgenerator einzubinden, um die Drehzahl selbst zu messen (und somit den Controller nicht zu ändern, sondern nur einige seiner Signale zu verwenden), 2) die Auflösung des vorhandenen Erkennungssystems zu erhöhen, aber dann das vorhandene zu speisen Controller das Signal braucht oder 3) komplett ein separates Drehzahlmesssystem einbauen oder 4) etwas anderes?
@raforanz Ein äußerst wichtiger Parameter, den Sie angeben müssen, ist die Mindestdrehzahl, die Sie messen müssen. Was ist es?
@ Joe Hass 20 U / min

Antworten (4)

Bei 500 U/min dreht sich die Welle 8,3333 Mal pro Sekunde, also zählt man in 1 Sekunde: -

12 x 8,33333 Impulse = 100 Impulse

Bei 505 U/min dreht sich die Welle 8,416667 Mal pro Sekunde, also zählen Sie in 1 Sekunde: -

12 x 8,41667 Impulse = 101 Impulse

Sie möchten eine höhere Auflösung, damit Sie mehr Schrauben hinzufügen können, ABER um eine Auflösung von 1 U / min zu erhalten, benötigen Sie 5 x 12 Schrauben, und das klingt unpraktisch.

Sie könnten eine fortlaufende Zählung über 5 Sekunden durchführen und jede Sekunde die älteste 1-Sekunden-Zählung wegwerfen und die neueste Zählung einführen, aber Sie haben immer noch einen trägen Mechanismus zum Messen der Drehzahl - Geschwindigkeitsänderungen werden nicht so dynamisch gesehen wie Sie vielleicht wollen.

Alternativ verwenden Sie eine Hochfrequenzuhr und messen die Anzahl der Zählungen zwischen den Impulsen. Sie können 12 Ergebnisse (eine volle Umdrehung) mitteln, um Positionsfehler der Schrauben zu reduzieren.

Wie schnell kannst du takten und zählen?

Antwort - Sie haben eine Uhr mit einer Periode von 256 usecs - das bedeutet, dass sie 3906 Mal in einer Sekunde umschaltet. Wenn Sie diese Taktwechsel alle 12 Impulse auf dem Näherungssensor (auch bekannt als eine Umdrehung der Welle) zählen, zählen Sie bei 500 U / min 0,12 Sekunden und akkumulieren insgesamt 469 Taktzyklen. Wenn Sie 468 Taktzyklen akkumulieren, entspricht dies 501 U / min.

Sie haben natürlich die Möglichkeit, zwei oder mehr Umdrehungen zu zählen, um bei höheren Geschwindigkeiten eine größere Auflösung zu erhalten. Bei deutlich niedrigeren Geschwindigkeiten möchten Sie möglicherweise auf das Zählen von Annäherungsimpulsen pro Sekunde ODER Taktzählungen für eine Teildrehung der Welle zurückgreifen.

Ich kann mit einer Periode von 256 us takten
@ Andy alias der letzte Punkt in Ihrer Antwort (dh das Zählen der Uhr zwischen den Impulsen) ähnelt dem eingebauten Erfassungsperipheriegerät eines Mikrocontrollers, oder?
Ich würde eine interne Uhr und einen Zähler einrichten, damit sie automatisch laufen, und dann würde ich den Eingangsimpuls so einrichten, dass er einen Interrupt auslöst, der eine Routine aufruft, die überprüft, ob 12 Impulse vergangen sind, die dann die Taktzählungen aufzeichnet. Ich würde dann sowohl den Takt- als auch den Impulszähler auf Null zurücksetzen, damit er von vorne beginnt. Ich kann es nicht anders beschreiben, weil es nicht mein Fachgebiet ist.

Der genaueste Ansatz für Geschwindigkeiten in dem von Ihnen betrachteten Bereich besteht darin, dass jeder eingehende Impuls einen Zähler erhöht und den Wert eines Timers zwischenspeichert. Abtasten Sie regelmäßig die Zähler- und Latch-Timer-Werte, wobei Sie sicher sein müssen, dass die abgetasteten Werte "zusammenpassen". Wenn Sie beispielsweise einen Hardware-Impulserfassungszähler und eine Impulserfassungsschaltung mit demselben Eingang verdrahtet haben, können Sie den Zähler, dann den erfassten Zeitgeberwert und dann den Zähler erneut lesen. Wenn die beiden Zählerstände unterschiedliche Werte ergeben, wiederholen Sie den Vorgang. Die Zeit, um den Vorgang erneut zu versuchen, ist kürzer als die Mindestzeit zwischen Eingangsimpulsen, dann sollten beim zweiten Versuch beide Zeitgeberwerte übereinstimmen.

Sobald Sie dies getan haben, berechnen Sie Ihre Geschwindigkeit im gewünschten Aktualisierungsintervall in Impulsen pro Minute wie folgt:

Geschwindigkeit = (NewCount-EarlierCount) * TimerCountsPerMinute / (NewTimer-EarlierTimer)

Außer wenn NewCount gleich EarlyCount ist, ergibt dieser Ansatz einen Wert, dessen Genauigkeit +/- ein Timer-Tick beträgt. Anders ausgedrückt: Wenn die Eingangsgeschwindigkeit konstant ist und der Timer selbst genau ist, liegt der korrekte Messwert irgendwo dazwischen

Geschwindigkeit = (NewCount-EarlierCount) * TimerCountsPerMinute / (NewTimer-EarlierTimer-1)

Und

Geschwindigkeit = (NewCount-EarlierCount) * TimerCountsPerMinute / (NewTimer-EarlierTimer+1)

Wenn Sie eine Zeitbasis von 1 MHz verwenden, könnten Sie mit diesem Ansatz Ihre Anzeige zehnmal pro Sekunde aktualisieren, vorausgesetzt, Ihre Eingangsimpulse kommen mit 10 Hz oder schneller an und zeigen einen Wert an, der genau auf die Genauigkeit eines typischen Kristalls war. Je nachdem, was Sie tun, möchten Sie möglicherweise Aktualisierungen unterdrücken, es sei denn, die Gesamtdifferenz zwischen den angezeigten und den tatsächlichen Messwerten erreicht beispielsweise drei Einheiten auf der Anzeige (sodass sich bei schnellen Wertänderungen die Anzeigenummern schnell ändern, aber wenn ein Wert zwischen 123,4 und 123,5 wechselt, würde das Display genügend Zeit damit verbringen, jeden Wert anzuzeigen, damit eine Person ihn sehen kann).

Messen Sie die Zeit zwischen steigenden oder fallenden Impulsflanken. Sie erhalten eine Zeitschätzung, wie lange es dauert, mit jedem Impuls 1/12 Umdrehung zu machen.

Wenn die Mindestdrehzahl 20 U / min beträgt, erhalten Sie alle drei Sekunden eine Umdrehung und nur vier Impulse pro Sekunde. Sie können keine Auflösung (viel weniger Genauigkeit) von 1 U / min erhalten, indem Sie einfach Impulse pro Sekunde zählen. Um die gewünschte Auflösung bei einer sehr niedrigen Impulsfrequenz zu erhalten, müssen Sie die Periode zwischen den Impulsen bestimmen und daraus die Drehzahl berechnen. Um die Periode zu bestimmen, verwenden Sie die Impulse zum Starten/Stoppen eines Zählers. Der Zähler muss schnell genug getaktet werden, damit Sie immer noch mindestens 500 Zählwerte erhalten, wenn die Impulse mit 100 Hz (500 U / min) kommen, sodass der Zähler mit 50 kHz oder mehr laufen muss.