Hallsensor Signal invertieren

OP #7543947
Lesenswert?

Warum? Oder besser: warum invertierst du das Signal nicht in der Software?

Möchte bei jeder Umdrehung auf die steigende Flanke/ 5 V Signal/ Interrupt arbeiten (Arduino)

Kann ich das so wie anliegend machen ?

Im Prinzip ja. Aber: welche maximale Impulsfrequenz musst fu verarbeiten?

20 Hz maximal, mit kurzem AN Impuls wenn der Magnet vorbei zieht

Danke

#7543954
Lesenswert?

20 Hz maximal, mit kurzem AN Impuls wenn der Magnet vorbei zieht

Dann wird das sehr wahrscheinlich funktionieren.

Allerdings stamme ich wohl aus einer neueren Entwicklergeneration und wuerde eher einen TC7S04 nehmen. :-D

Du wuerdest dann knackigere Flanken haben die vermutlich auch stabiler sind wenn sich mal die Temperatur deiner Schaltung aendert.

Aber fuer deine einfache Anwendung ist das vermutlich egal.

Vanye

#7544016
Lesenswert?

Vanye R. schrieb:

20 Hz maximal, mit kurzem AN Impuls wenn der Magnet vorbei zieht

Dann wird das sehr wahrscheinlich funktionieren.

Allerdings stamme ich wohl aus einer neueren Entwicklergeneration und wuerde eher einen TC7S04 nehmen. :-D

Wahrscheinlich? Was rauchst du eigentlich?

Die Eingangsflanke von ~30ns vergessen wir mal getrost - und auch die max. 20Hz...

So'n TC7S04 bietet eine output transition time von typ. 5ns - das reißt es dann natürlich voll raus. Prosit neue Entwicklergeneration - das habt ihr ja wirklich drauf!

#7544029
Lesenswert?

Hallo,

warum unterstützt man den TO bei seinem Gedanken der Signalinvertierung? Das ist doch Unsinn. Das macht man alles in Software. Ich würde auch keinen Interrupt verwenden sondern pollen. Aber egal ob mit oder ohne Interrupt, externe Signalinvertierung ist einfach nur Unsinn. Wer darauf besteht sollte sich fragen wofür er µC programmiert.

Übrigens, 5.1k gibt es in der E-Reihe. ;-)

#7544040
Lesenswert?

Egon schrieb:

warum invertierst du das Signal nicht in der Software?

Möchte bei jeder Umdrehung auf die steigende Flanke/ 5 V Signal/ Interrupt arbeiten (Arduino)

Hm. Welcher Arduino ist das denn, bei dem man den Interrupt nicht mit einer ode zwei C++-Programmzeilen auf eine frei gewählte der beiden Flanken programmieren kann? (Mag sein, dass solche grundlegenden Möglichkeiten nicht in der einfachen Arduino-Doku gezeigt werden, aber im Datenblatt des Prozessors steht es ganz sicher.)

#7544075
Lesenswert?

Rolf schrieb:

Welcher Arduino ist das denn

Selbst der ATiny85 kann beide Level, beide Flanken und Change.

Rolf schrieb:

bei dem man den Interrupt nicht mit einer ode zwei C++-Programmzeilen auf eine frei gewählte der beiden Flanken programmieren kann?

Ist unabhängig von der Programmiersprache, sondern was die Hardware her gibt.

Rolf schrieb:

Mag sein, dass solche grundlegenden Möglichkeiten nicht in der einfachen Arduino-Doku gezeigt werden

Doch. Gibt es da auch (siehe Parameter): https://www.arduino.cc/reference/de/language/functions/external-interrupts/attachinterrupt/

Es liegt also am TO. Und wie gesagt, allgemein sollte man sich fragen ob polling hier nicht besser wäre. Bei den Eingangsfrequenzen sowieso immer möglich und dann auch unabhängig von der Hardware.

Moderator (Firma: Titel) Persönliche Seite #7544128
Lesenswert?

Thomas S. schrieb:

Widerstände mit 5,1K an der Position wären mir zu niedrig

Passt doch. Da fließt nicht mal ein läppisches mA.

Nachtrag: Ein kleines C mit 100nF spätestens am 2. Transistor gegen Masse.

Mal davon abgesehen, dass der 1. Transistor ja noch im TLE sitzt, ist es ungeschickt, einen Kondensator zwischen C und E zu schalten. Denn der Kondensator lädt sich auf 5V auf und wird dann beim nächsten Puls über den Transistor kurzgeschlossen(!!). Das ist hier jetzt zwar nicht viel Energie, die der Transistor da jedesmal in Wärme umwandeln muss, aber trotzdem wäre mir so eine Beschaltung ein Warnsignal: "Da ist sicher noch mehr im Argen!"

Rainer W. schrieb:

Es geht darum, einen 3x so großen Wert zu nehmen, falls nicht lange Leitungen im Spiel sind und die Umgebung unsäglich verseucht ist.

Falls man nicht unbedingt jedes mA sparen muss, dann kann man auch 5k1 nehmen. Mein EMV-Spezi sagt: alles über 10k ist aus EMV-Sicht nicht vorhanden.

Egon schrieb:

mit kurzem AN Impuls wenn der Magnet vorbei zieht

Oder man könnte auch so argumentieren: wenn der Puls sowieso nur ganz kurz ist, dann liegen die beiden Flanken eh' zeitlich (und räumlich) eng nebeneinander, so dass es egal ist, welche der beiden Flanken den Interrupt triggert.

Aber ich würde ebenfalls einfach den Pinchange-Interrupt des unbekannten µC so konfigurieren, dass ich keine Invertierung des Signals brauche.

#7544150
Lesenswert?

N. M. schrieb:

bei dem man den Interrupt nicht mit einer ode zwei C++-Programmzeilen auf eine frei gewählte der beiden Flanken programmieren kann?

Ist unabhängig von der Programmiersprache, sondern was die Hardware her gibt.

Da wäre ich ja nie drauf gekommen. Einen Arduino programmiert man (und vermutlich auch der OP) aber in der Regel in C++. ;-)

Und wie gesagt, allgemein sollte man sich fragen ob polling hier nicht besser wäre. Bei den Eingangsfrequenzen sowieso immer möglich und dann auch unabhängig von der Hardware.

DAS hängt vom Design des Gesamtsystems ab. Wir wissen ja gar nicht, was das Programm sonst noch alles tun soll. Nur, weil es möglich ist, ist es nicht automatisch besser.

#7544362
Lesenswert?

Rolf schrieb:

Wir wissen ja gar nicht, was das Programm sonst noch alles tun soll.

Ein Magnet an einem Rad, das sich dreht, kling ganz schwer nach Drehzahlmessung. Das würde ich immer per Interrupt machen. Was dann noch alles laufen soll, wäre wurscht. Die ganze Frage scheint mir aber aus Unwissenheit zu kommen.

OP #7544371
Lesenswert?

Ein Magnet an einem Rad, das sich dreht, kling ganz schwer nach Drehzahlmessung. Das würde ich immer per Interrupt machen. Was dann noch alles laufen soll, wäre wurscht. Die ganze Frage scheint mir aber aus Unwissenheit zu kommen.

Richtig, eine Drehzahl Messung mit TFT. Für Polling ist keine Zeit, da wird ein Interrupt verwendet…

Hab mich breit schlagen lassen und nehmen jetzt die fallende Flanke. Danke an alle für den Support 👍

#7544390
Lesenswert?

Egon schrieb:

Richtig, eine Drehzahl Messung mit TFT. Für Polling ist keine Zeit, da wird ein Interrupt verwendet…

Hab mich breit schlagen lassen und nehmen jetzt die fallende Flanke. Danke an alle für den Support 👍

Wieso soll es überhaupt wichtig sein, für eine Drehzahlmessung unbedingt auf einer bestimmten Flanke zu bestehen?

Moderator (Firma: Titel) Persönliche Seite #7544401
Lesenswert?

Egon schrieb:

Für Polling ist keine Zeit, da wird ein Interrupt verwendet…

Naja, wie gesagt: lies den Eingang im Timer-Tic Interupt ein und mache einen XOR Vergleich zum vorherigen Wert. Dann hast du deine Flanke.

Hab mich breit schlagen lassen

Wir wollen dich zu nichts zwingen, du kannst auch den Inverter einbauen. Ist halt für deine Anwendung "Drehzahlmessung" völlig sinnlos. Weil du ja völlig ohne Probleme für diese Anwendung die steigende oder die fallende Flanke nehmen kannst. Und egal, ob da noch ein Inverter eingebaut ist oder nicht, es wird/muss immer die selbe Drehzahl herauskommen.

#7544407
Lesenswert?

Mi N. schrieb:

Ein Magnet an einem Rad, das sich dreht, kling ganz schwer nach Drehzahlmessung. Das würde ich immer per Interrupt machen.

Heutzutage gibt es Mikrocontroller, die per Timer und Capture-Funktion den Zeitpunkt vollständig in Hardware bestimmen können. Der µC muss sich das Ergebnis nur aus einem Register abholen, bevor beim nächste Ereignis der Wert wieder überschrieben wird.

#7544454
Lesenswert?

Rolf schrieb:

Einen Arduino programmiert man (und vermutlich auch der OP) aber in der Regel in C++. ;-)

Das mag ja zu 90% der Fall sein, aber warum fragst du dann ob es nicht eine Zeile gibt die man in Cpp schreiben kann die diese Aufgabe erfüllt? Ja kann man! Indem man einfach die Hardware dementsprechend einstellt. Warum? Weil es nichts mit einer Programmiersprache zu tun hat. Frage unnötig.

Rolf schrieb:

DAS hängt vom Design des Gesamtsystems ab. Wir wissen ja gar nicht, was das Programm sonst noch alles tun soll.

Das stimmt. Aber wenn die Main keine 40Hz mehr macht ist meist etwas komplett anderes faul. Wahrscheinlich wird viel Interrupt genutzt weil sonst überall mit delay gearbeitet wird.

Lothar M. schrieb:

Mein Ansatz ist: Interrupts nur dann, wenn sie unbedingt nötig sind.

Stimme ich dir voll zu. Und vor Software so viel Peripherie nutzen wie möglich. Und damit meine ich nicht den Interrupt Controller, sondern Zähler die die Pulse oder die Pulsdauer zählen.

Lothar M. schrieb:

Einer, der aus irgendwelchen Gründen immer nötig ist, ist ein Timer-Interrupt.

So sehe ich das auch. Und 10ms Tick würde hier für Pulse zählen ausreichen. Und wenn es genauer bei langsamen Drehzahlen werden muss, musst du sowieso auf Pulsdauer umschalten weil zu wenig Pulse.

#7544562
Lesenswert?

Wieso soll es überhaupt wichtig sein, für eine Drehzahlmessung unbedingt auf einer bestimmten Flanke zu bestehen?

Es ist durchaus denkbar, dass eine Flanke durch das Messprinzip und/oder den Auswertemechanismus begruendet, einen starken Jitter aufweist. Dann waere es doppelt plus unschlau die jitternde Flanke zu benutzen. Das muss im Fall des TO nicht zutreffen.

#7544649
Lesenswert?

N. M. schrieb:

So sehe ich das auch. Und 10ms Tick würde hier für Pulse zählen ausreichen. Und wenn es genauer bei langsamen Drehzahlen werden muss, musst du sowieso auf Pulsdauer umschalten weil zu wenig Pulse.

Oh, oh, oh, was geht denn hier ab? Es geht nicht darum nur die Impulse zu zählen, sondern auch deren genauen Zeitpunkt. Für hinreichend genaue Messungen ist dies unbedingt per Interrupt zu erledigen. Arduino klingt für mich nach ATmega328, der für seinen Timer1 die Capture-Eingänge ICP und alle AINx bietet. Da sollte sich ein freier Pin finden lassen. Die Auflösung beträgt damit 62,5 ns. Alternativ kann jeder PCINTx genutzt werden. Selbst, wenn dessen ISR durch andere ISRs blockiert sein sollte, kann ein beliebiger Timer (auch 0 oder 2) zur Zeiterfassung genutzt werden. 10 µs Jitter wären dabei schon viel und würden einem 100 kHz polling entsprechen, was der µC schon garnicht mehr schaffen würde, falls er noch irgendetwas anderes tun sollte.

Und natürlich wird bei dieser niedrigen Frequenz immer die Pulsweitee gemessen und auf Drehzahl umgerechnet. Oder will hier jemand mit 10 s Torzeit arbeiten?

Hier ein Beispiel für ICP-Messung mit einem ATmega88: Beitrag "einfache Drehzahlmessung mit ATmega88" oder mit PCINT: Beitrag "4-Kanal Drehzahlmessung mit ATmega88"

Motopick schrieb:

Mann koennte viel einfacher auch den Magneten umpolen. :)

Das gäbe dann aber eine negative Drehzahl, die man invertieren müßte ;-)

#7545097
Lesenswert?

Mi N. schrieb:

Für hinreichend genaue Messungen ist dies unbedingt per Interrupt zu erledigen.

Unsinn, Hardware ist schneller. Dafür hat ein µC die integriert.

Georg M. schrieb:

Ja, richtig, so werden niedrige Frequenzen gemessen.

Es wird die Periodendauer gemessen .PUNKT. Dass daraus die Frequenz abgeleitet werden kann und dies bei niedrigen Frequenzen die einzig wirklich taugliche Methode ist, steht auf einem anderen Blatt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren