So lesen Sie mit Arduino-kompatibler Hardware schnell und effektiv eine große Anzahl von Analogeingängen

Ich muss die analogen Werte von bis zu 50 analogen Lichtreflexionssensoren lesen, die verwendet werden, um die Entfernung zu einem bestimmten Objekt mit einem Arduino-kompatiblen Mikrocontroller zu bestimmen, wie zum Beispiel:

  • Arduino Due mit der Atmel SAM3X8E CPU
  • Arduino Zero mit ATSAMD21G18, 32-Bit-ARM-Cortex-M0+-CPU

Aber wenn ich über meine Idee nachdenke, kommen mir einige Fragen, die ich mir nicht wirklich beantworten kann:

Meine erste Idee war, mehrere ATSAMD21G18 zu verwenden, um ein Bündel von 6 analogen Geräten zu lesen. Aber das würde dazu führen, dass man mindestens 9 ATSAMD21G18 hat und diese mit SPI oder I2C verbinden muss.

Also dachte ich daran, stattdessen mehrere analoge Multiplexer/Demultiplexer wie den 4067 zu verwenden. Selbst dies würde in mehreren Einheiten des 4067 enden, aber ich könnte einen einzelnen Arduino Due / Zero verwenden.

Meine Bedenken sind jedoch, dass der 4067 die analogen Eingänge für meine Bedürfnisse nicht schnell genug umschaltet. Ich würde wirklich gerne all diese analogen Werte so schnell wie möglich lesen. Wie schnell wäre ein 4067 in dieser Anwendung?

Und auch. Bei Verwendung des 4067 muss ich digitale I/Os verwenden, um den Eingangskanal des 4067 einzustellen. Kann ich sie parallel verdrahten, sodass ich die digitalen I/Os mit jedem einzelnen 4067 teilen könnte?

Und wirkt sich die Länge der Schaltung auch auf die Messwerte aus, wenn Sie mit Abständen zwischen dem 4067 und dem Arduino von etwa 50 cm umgehen müssen?

Welche Samplerate?
1 kHz für jeden einzelnen Sensor? Ich weiß nicht, ob das vielleicht zu schnell ist, da es 1 kHz * 50 Sensoren = 50 kHz insgesamt ist!? Nicht wirklich sicher.
Ein System, das ich Anfang des Jahres entworfen habe, tastet gleichzeitig alle 5 uns 160 analoge Kanäle ab, sodass Ihre Anwendung wirklich sehr langsam ist. Bleiben Sie realistisch und verwenden Sie keine provokanten Begriffe wie „schnell“ – geben Sie reelle Zahlen ohne Fragezeichen an.
Sind Sie sicher, dass Sie diese Reflexsensoren als analog lesen möchten? Sie sind als digitale (Ja/Nein-Reflexion) Sensoren gedacht.
@WoutervanOoijen Ja, das habe ich mit einer einzelnen Einheit gemacht und konnte sie analog lesen.
Ich denke, Wouter hat die Möglichkeit angesprochen, 8 (oder 16 oder 32) davon mit einer einzigen Anweisung zu lesen, was digitale Lesevorgänge ermöglichen, und hilft, das angebliche "Geschwindigkeits" -"Problem" anzugehen.
Wie @Brian richtig annahm, bezweifelte ich die Notwendigkeit, diese Sensoren im analogen Modus zu lesen. Das Lesen im digitalen Modus ist viel einfacher. Bei dieser Menge an Sensoren möchten Sie möglicherweise auch Ihr physisches Layout und Ihre Konstruktion optimieren, was auch einfacher ist, wenn die Signale digital sind (Sie könnten ein paar Schieberegister oder E / A-Extender verwenden).
@WoutervanOoijen Ich muss Analogwerte lesen, da ich die Entfernung zu einem Objekt bestimmen möchte. Ich habe die ITR dafür erfolgreich eingesetzt, aber es geht allgemein um Analogwerte. Ich habe die Frage bearbeitet!

Antworten (1)

Generell gilt: Multiplex digital, nicht analog. Irgendwo irgendwo wirst du 50 separate Signale haben. Ob diese in eine Reihe analoger Muxes und dann in eine kleine Anzahl von A/Ds oder in eine Reihe von A/Ds und eine kleine Anzahl digitaler Ports fließen, ändert nicht viel an der Komplexität.

Sie müssen Ihre Prioritäten richtig setzen. Sie tun diese Art von Dingen nicht, indem Sie zuerst den Mikrocontroller auswählen und dann herausfinden, wie Sie Dinge anpacken, um trotz des Mikros schließlich das zu tun, was Sie wollen. Sie beginnen mit den Anforderungen und wählen dann ein geeignetes Mikro aus.

Ihre Logik, einen digitalen Muxing-Ansatz abzulehnen, macht keinen Sinn:

Aber das würde dazu führen, dass man mindestens 9 ATSAMD21G18 hat und diese mit SPI oder I2C verbinden muss.

Ähm, OK, aber inwiefern ist das ein Problem? Auch hier werden Sie irgendwie 50 separate Pins haben. Diese Eingänge für eine Reihe von 8-Kanal- (oder was auch immer) A/Ds zu haben, klingt nach einem vernünftigen Ansatz. Dann klingt die Verwendung von SPI zum Muxen der Daten von diesen Chips ziemlich vernünftig. Abgesehen davon, dass Sie dies verwerfen, haben Sie eigentlich keinen Grund angegeben, warum dies kein vernünftiger Ansatz ist.