Hallo und guten Abend, Ich habe einen Hallsensor mit Open collector & 5.1k Widerstand und würde das Signal gern für einen uC invertieren. Kann ich das so wie anliegend machen ? Dankeschön
Egon schrieb: > würde das Signal gern für einen uC invertieren. Warum? Oder besser: warum invertierst du das Signal nicht in der Software? > Kann ich das so wie anliegend machen ? Im Prinzip ja. Aber: welche maximale Impulsfrequenz musst fu verarbeiten?
> 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
> 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
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!
Widerstände mit 5,1K an der Position wären mir zu niedrig. und wenn dann auf 4,7, oder 5,6k. Die sind in der E-Reihe. Hier würde ich mind. 15K nehmen. Nachtrag: Ein kleines C mit 100nF spätestens am 2. Transistor gegen Masse.
:
Bearbeitet durch User
Egon schrieb: > Möchte bei jeder Umdrehung auf die steigende Flanke/ 5 V Signal/ > Interrupt arbeiten (Arduino) Es gibt absolut keinen Grund, nicht die negative Flanke zu verwenden. Nimm die Signale so wie sie kommen.
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. ;-)
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.)
Veit D. schrieb: > Übrigens, 5.1k gibt es in der E-Reihe. ;-) Ach - ob die Widerstände 10% größer oder kleiner sind, spielt an der Stelle nun wirklich keine Rolle. 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.
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch Moderator
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.
Rolf schrieb: > DAS hängt vom Design des Gesamtsystems ab. Mein Ansatz ist: Interrupts nur dann, wenn sie unbedingt nötig sind. Einer, der aus irgendwelchen Gründen immer nötig ist, ist ein Timer-Interrupt. Und wenn der jede ms kommt, dann dürfte das hier zum Abstasten des Hall-Signals vermutlich schnell genug sein.
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.
> 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 👍
Ich wuerde ja mal schauen ob die Timer nicht irgendwelche speziellen Modi haben wo sie pegelhabhaengig automatisch zaehlen. Dann braucht man vielleicht nur einen Wert aus einem Register auslesen und ist fertig. Vanye
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?
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.
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
Rainer W. schrieb: > Heutzutage gibt es Mikrocontroller, die per Timer und Capture-Funktion > den Zeitpunkt vollständig in Hardware bestimmen können. Core Independent Peripheral https://microchipdeveloper.com/xwiki/bin/view/products/mcu-mpu/8bit-pic/cip/
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.
Hi Das Invertieren kann auch durch Verwendung eines 2,Magneten Siehe 'Hall-Effect IC Applications Guide' von Allegro™ MicroSystems S.28 Abb.47 erfolgen. MfG Spess
Hi Link dazu: https://www.allegromicro.com/-/media/files/application-notes/an27702-linear-hall-effect-sensor-ics.pdf MfG Spess
Oder doch die AN27701: https://www.allegromicro.com/-/media/files/application-notes/an27701-hall-effect-ic-application-guide.pdf
Rolf schrieb: > Mag sein, dass solche grundlegenden Möglichkeiten nicht in der > einfachen Arduino-Doku gezeigt werden, Das muss doch nicht sein.... https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
> 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.
Hi Was für ein Hallsensor hat der TO denn? Uni- oder Bipolar? MfG Spess
Rainer W. schrieb: > 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. Z.B. AVR TCB.
Georg M. schrieb: > AVR_TCB_Frequency_Measurement.png Entgegen der Bezeichnung sieht das eher nach einer Messung der Periodendauer aus, die erst vom uC in eine Frequenz umgerechnet werden muss.
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 ;-)
:
Bearbeitet durch User
Veit D. schrieb: > warum unterstützt man den TO bei seinem Gedanken der Signalinvertierung? > Das ist doch Unsinn. Absolute Zustimmung. Zumal es µC gibt, bei denen man in HW-Konfiguration per Bit im Register festlegen kann dass das (eingehende oder auch ausgehende) Signal invertiert werden soll.
Rainer W. schrieb: > Entgegen der Bezeichnung sieht das eher nach einer Messung der > Periodendauer aus, die erst vom uC in eine Frequenz umgerechnet werden > muss. Ja, richtig, so werden niedrige Frequenzen gemessen. Bei höheren Frequenzen kann man schon die Impulse (Perioden) zählen.
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.
:
Bearbeitet durch User
Rainer W. schrieb: > Unsinn, Hardware ist schneller. Dafür hat ein µC die integriert. Was hast Du an ICP von Timer1 nicht verstanden?
Mi N. schrieb: > Motopick schrieb: >> Mann koennte viel einfacher auch den Magneten umpolen. :) > > Das gäbe dann aber eine negative Drehzahl, > die man invertieren müßte ;-) Das aber dann bitte in HW, z.B. mit einer Logikschaltung, die man zwischen den µC-GPIOs und 7-Segment-Treiber schalten kann. ;)
Mi N. schrieb: > Rainer W. schrieb: >> Unsinn, Hardware ist schneller. Dafür hat ein µC die integriert. > > Was hast Du an ICP von Timer1 nicht verstanden? Das IST Hardware und kein Interrupt
Mi N. schrieb: > Für hinreichend genaue Messungen ist dies unbedingt > per Interrupt zu erledigen. Mi N. schrieb: > Rainer W. schrieb: >> Das IST Hardware und kein Interrupt > > Na siehste, geht doch. Schön, dass dir das jetzt auch klar geworden ist.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.