Ich versuche, einen MIDI-ähnlichen Controller zu bauen, der einen Hals wie eine Gitarre hat. An diesem Hals befindet sich eine riesige Matrix von Drucksensoren. Der Controller emuliert 3 Saiten.
Das funktioniert so: Es gibt 3 lange Streifen doppelseitiges Kupferband (0,5 cm breit, so lang wie der Hals), die an Strom angeschlossen sind (3,3 V oder 5 V wahrscheinlich, ist jetzt egal). Auf diesen Streifen befindet sich eine Schicht Velostat, die den spezifischen Widerstand je nach Druck ändert. Auf dem Velostat befindet sich eine weitere Schicht aus Reihen oder Zellen aus Kupferband, die mit etwas verbunden sind, das einen Messwert der Spannung durch die Velostatschicht ausspuckt. Da der Hals etwa 40 cm lang ist, ergeben sich mindestens 80 Reihen.
Wenn Sie sich die unteren 3 Kupferbandstreifen als Säulen eines Diagramms entlang des Halses vorstellen, sind die Sensoren je nach Messmethode entweder die Zellen oder Reihen (ich dachte, man könnte dann auch die Spalten multiplexen es könnte Reihen geben.) Es gibt jedoch ein paar spezielle Bedingungen, die dies erleichtern könnten: Da dies ein gitarrenähnlicher Controller ist, muss nicht jede Interaktion gemessen werden! Nur die Berührung, die dem Körper des Controllers am nächsten ist, zählt. Auch eine Auflösung von 8 Bit sollte ausreichend genau sein. 255 Druckstufen sind wohl sowieso mehr als nötig.
Jetzt die schwierigen Stellen:
Die Messung muss in Echtzeit genug sein, um Hammer-Ons usw. zu erkennen (keine Ahnung, wie hoch die Abtastrate sein muss - geschätzt auf mehrere kHz für ein gutes Maß und Spielbarkeit) und der digitale Ausgang des Controllers sollte es auch sein MIDI (auf 3 separaten Kanälen - einer pro Saite) oder ein digitales Signal, das mit einem Raspberry Pi verarbeitet werden kann.
Jetzt, da mein Wissen wirklich begrenzt ist, konnte ich nicht an die richtigen Werkzeuge für den Job denken. Was ich aber weiß ist: Es ist möglich. Es gibt einen ähnlichen, aber anderen Controller, der eine sehr ähnliche Technik verwendet (die ich praktisch zurückentwickelt habe, bis ich bemerkte, dass sie ein Patent haben und die Informationen darüber, wie sie es tun, nicht so geheimnisvoll sind, wie ich dachte), er heißt ROLI Küste.
TL;DR:
rund 240 Sensoren
können in Gruppen von 80 getrennt werden, die von der gleichen Leitung versorgt werden
Dies ist eine Echtzeitanwendung, ich muss den Druck von jedem Sensor erfassen, wenn er berührt wird (es gelten einige Bedingungen, siehe oben).
Danke im Voraus, ich weiß, es ist viel zu lesen. Ich bin für jeden Vorschlag dankbar und würde mich sehr freuen, wenn Sie mir helfen könnten, das schreckliche Chaos zu schaffen, das ich mir vorgenommen habe!
Dinge, an die ich bisher gedacht habe:
Zeilen und Spalten multiplexen, jede Zelle mit einem MCP3008 oder größeren ADC lesen und ATmegas verketten (Daisy-Chain oder baumartig), die nur die positionsmäßig niedrigste Wechselwirkung zum endgültigen Signal schieben, aber nach meinen Berechnungen könnte dies möglicherweise zu Engpässen führen der Kommunikationsaufwand. Auch ein früheres Modell enthielt Bändchenpotentiometer, die ich verworfen habe, weil das Design schlecht war (mehrere Versuche, war nicht cool genug).
Danke für die guten Vorschläge bisher! Dank ihnen kann ich mein Problem jetzt viel klarer formulieren:
Ich habe eine Matrix von 80 Zeilen * 3 Spalten von Drucksensoren. Wenn ein Mensch mit der Sensormatrix interagiert, nehmen mehrere Sensoren in der Nähe die Berührung auf, aber nur entlang einer Spalte. Die Säulen sind mechanisch getrennt. Die Sensoren haben einen Widerstand zwischen 100 Ohm und 1 kOhm. Alle diese Sensoren müssen mit einer Tiefe von 8 Bit gelesen, verarbeitet und die Ergebnisse mit einer Rate von mindestens 1 kHz gesendet werden. Ein einzelnes Lesen/Verarbeiten muss also weniger als eine Millisekunde dauern. Die endgültige Ausgabe pro Spalte muss sein: 4 Byte für ein Float32 und 1 Byte für ein uint8. Float32 zeigt die gemittelte Position der ersten Interaktion entlang der Spalte an. Eine Interaktion ist definiert als eine aufeinanderfolgende Gruppe von Sensoren mit einem Druck über einem bestimmten Schwellenwert. Hier kommt die Verarbeitung ins Spiel: die Säule wird nach unten durchquert, bis ein Messwert einen Schwellenwert überschreitet. Dies gilt dann als Beginn einer Interaktion. Der Druck und die Position jedes Sensors wird gespeichert bis zum ersten Sensor, der die Schwelle mit maximal (wahrscheinlich) 4 aufeinanderfolgenden Sensoren unterschreitet. Von allen Sensoren der aufgezeichneten Interaktion werden nur zwei Sensoren verarbeitet - derjenige, der den höchsten Druck (geringster Widerstand) liest und der höchste direkt darüber oder darunter. Die Gleitkommaposition wird durch Mittelung der beiden mit ihren Drücken gewichteten Sensorpositionen berechnet. Der Gesamtdruck der Interaktion ist nur die Addition beider Drücke, die zwischen 0 und 255 geklemmt sind (addieren Sie beide Drücke von unit8 in eine uint16 und dividieren Sie durch 2 ohne Rundung, verwerfen Sie die nicht benötigten Bits - dies sollte schnell gehen). Dies muss für jede Spalte geschehen. Das 15 Byte große Ergebnis wird dann über SPI an einen kleinen Computer (Raspberry Pi B3) gesendet, der als Synthesizer fungiert. Ich bin nicht auf den Übertragungsweg festgelegt. Wenn SPI nicht das richtige Werkzeug für den Job ist, bin ich bereit, jede Kommunikationsmethode zu verwenden, die ein Raspberry Pi verarbeiten kann. Da es sich um eine musikalisch-interaktive Anwendung handelt, ist Latenz entscheidend.
Meine genauen Fragen sind: Kann dies mit einem einzigen Mikrocontroller gelöst werden, ohne die Bank zu sprengen? Ich kann es mir nicht leisten, ICs im Wert von mehreren hundert Dollar für ein Hobbyprojekt zu kaufen. Welche Hardware würdet ihr empfehlen? Gibt es nicht offensichtliche Vorbehalte, vor denen ich mich hüten muss?
Der Ansatz, den ich aus den bisherigen Antworten abgeleitet habe, bestand darin, jede Spalte einzeln mit Strom zu versorgen und dann die Zeilen mit 5 16-Kanal-ADCs (ADS7961) auszulesen, die über SPI mit einem Arduino verbunden sind. Ich mache mir Sorgen, dass dies möglicherweise nicht der einfachste / billigste Ansatz oder nicht schnell genug ist, um eine Rate von> 1 kHz zu erreichen.
Haftungsausschluss: Ich bin normalerweise ein theoretischer Chemiker und ein schrecklicher Amateur, wenn es um Elektrotechnik geht. Alles, was ich weiß, ist Autodidakt und ohne beruflichen Hintergrund (was wiederum der Grund ist, warum ich Hilfe von erfahreneren Leuten suche). Allerdings kenne ich mich mit Software aus. Alles, was Software betrifft, werde ich mit genügend Zeit herausfinden. Außerdem bin ich Deutscher, entschuldigen Sie bitte gelegentliche Grammatikfehler.
Abhängig von Ihrer Preisklasse sollten Sie die Verwendung eines FPGA zwischen Ihrem Raspberry Pi und ADCs in Betracht ziehen, z. B. das DE0-Nano Board , das als einführendes FPGA-Entwicklungsboard eine gute Unterstützung bietet. Diese Lösung hat den Vorteil, dass Sie Code schreiben können, der mehrere/viele ADCs gleichzeitig taktet und Ihre Daten so formatiert, dass sie für den Raspberry Pi darstellbar sind.
Sie haben erwähnt, dass Sie den MCP3008 in Betracht ziehen. Dieser Chip ist SPI, sodass Sie einige Geräte auf demselben Bus mit unterschiedlichen CS-Pins verbinden können. Angenommen, Sie haben drei Chips an einen Bus angeschlossen, sodass Sie 24 ADC-Kanäle pro 6 Pins erhalten (drei Datenleitungen und drei CS-Leitungen). Das bedeutet 240 Kanäle für 60 Pins, was leicht innerhalb der Möglichkeiten des FPGA liegt.
Wenn Sie die MCP3008-Taktleitung mit ihrer maximalen Frequenz von 2 MHz betreiben, würde dies (15 Takte/Kanal) * (8 Kanäle/Chip) * (3 Chips/Bus) * (1/2000000 Sekunden/Takt) = 0,18 ms dauern Lesen Sie alle 240 Sensoren, was einer Abtastrate von 5,56 kHz entspricht.
Die offensichtliche Antwort ist Muxing, das bedeutet, dass Sie elektrische Pfade dynamisch erstellen. Iterieren Sie also einfach die gesamte Matrix einzeln oder so viele ADC-Eingänge (Analog-Digital-Wandler), wie Sie haben.
Wenn Sie 3 ADCs haben, können Sie jeweils eine Reihe lesen, dann ändern Sie die Eingänge in Mux und Voilla, Sie lesen jetzt die zweite Reihe und fahren dann fort. Das Problem bei diesem Setup ist, dass Sie 80 Zeilen haben und es keinen 80: 1-Mux (achtzig Eingänge zu einem Eingang) gibt, den ich kenne. Aber es gibt 16:1-Muxes , die Sie zusammenstellen können, um 16 * 5 = 80 Eingänge zu erhalten.
Es würde in etwa so aussehen:
row 0-15 [16:1 mux]____________ 5 inputs in [8:1 mux]-ADC
row 16-31 [16:1 mux]_| | | |
row 32-47 [16:1 mux]___| | |
row 48-63 [16:1 mux]_____| |
row 64-79 [16:1 mux]_______|
Die 4 Eingangssignale der 16:1 Muxes können zusammengeschaltet werden.
Am Ende haben Sie also ein Byte mit Steuersignalen in diesem Muster:
Grouped up:
0, 3 bits for the 8:1 mux, 4 bits for the 16:1 mux
Bit for bit:
0,8:1 MSB, 8:1 LSB+1, 8:1 LSB, 16:1 MSB, 16:1 LSB+3, 16:1 LSB+2, 16:1 LSB+1, 16:1 LSB
Das bedeutet, dass Sie 5 × 16: 1-Mux und einen 8: 1-Mux = 6 ICs benötigen.
Multiplizieren Sie das mit 3, weil Sie vielleicht eine Zeile nach der anderen lesen möchten.
Das bedeutet, dass Sie 18 ICs, 7 Steuersignale haben. Sie können die Anzahl der ICs reduzieren, wenn Sie die Anzahl der analogen Eingänge erhöhen würden. Es ist 18 mit nur 3 analogen Eingängen.
Wenn Sie stattdessen 240/16 = 15 ICs verwenden, erhalten Sie 15 analoge Ausgänge von den 15 × 16: 1-Muxen. Dann könnten Sie es mit einem 16: 1-Mux oder 16: 8-Mux kaskadieren. Am Ende wären es 16 ICs, wenn Sie es mit 16: 1-Muxen "optimieren" würden. Aber das würde bedeuten, dass Ihre Softwarelösung nicht so ... elegant wie oben wäre, sie wäre kreuz und quer und Modulus und anderes Zeug, aber hey, Sie sparen 2 ICs.
Sie lesen also eine Zeile, verarbeiten sie, gehen dann zur nächsten Zeile, verarbeiten sie, dann die nächste usw. Wenn Sie jeder Zeile 10 µs geben, werden Sie 80 Zeilen in 0,8 ms ausführen , das ist in dem Bereich, an den Sie gedacht haben.
Es ist möglich, aber es ist kein gutes Design.
Lassen Sie uns dies auf eine andere Weise lösen ... platz- und geldeffizienter.
*20 Minuten später* Hmmm ... alle Lösungen, die ich mir ausgedacht habe, sind entweder zu schwierig einzurichten und / oder erfordern eine fortgeschrittene Kalibrierung ...
Na gut, dann gehe ich davon aus, dass Ihr Design für Ihre Aufgabe geeignet ist.
Viel Glück.
Ich frage mich, was diese anderen Lösungen sind. Möchtest du teilen? – pandalion98
OP möchte Position und Druck messen. Das sind zwei Parameter. Das bedeutet, dass wir diese Informationen in ein Spannungssignal packen müssen, damit wir sie lesen und entschlüsseln können. Oder wir müssen es in eine andere Einheit packen, wie Ohm, Induktivität, Kapazität.
Hier sind einige meiner Ideen, bei denen ich nur an eine Spalte denke. Multiplizieren Sie einfach die Idee mit 3 und Sie haben die vollständige Lösung für eine 3-Säulen-Gitarre.
Erste Idee:
Verwenden Sie zwei parallele Drähte (niedriger Widerstand), die von der Unterseite der Gitarre zum Hals der Gitarre gehen. Verbinden Sie Masse mit einem der Drähte an der Unterseite der Gitarre. Machen Sie ein LR-Messsystem und messen Sie die Induktivität und den Widerstand vom anderen Draht, ebenfalls unten.
Wenn Sie beide Drähte mit einem Finger berühren, verbinden Sie die beiden Drähte und hier entsteht eine gewisse Induktivität. Je weiter oben Sie die Gitarre berühren, desto länger wird die Schaltung und desto mehr Induktivität werden Sie messen. Je stärker Sie drücken, desto mehr Oberfläche befindet sich zwischen den beiden Drähten und desto geringer ist der Widerstand.
Es müssen nicht zwei "Drähte" sein, es können zwei leitfähige Bänder oder etwas anderes sein.
Warum ich das vorher nicht geteilt habe: Damit dies zuverlässig ist, müssen Sie die Sensoren für jeden Einzelnen kalibrieren, da jeder einen unterschiedlichen Widerstand in seiner Haut hat. Wenn Sie spielen, werden Sie schwitzen und dadurch den Widerstand weiter reduzieren, also müssen Sie dies kompensieren. Jeder schwitzt unterschiedlich viel, daher muss dies auch pro Person kalibriert werden.
Also die Induktivität => Position des Fingers. Der Widerstand => wie stark Sie gedrückt haben.
Die Abweichung der Werte, die Sie messen, liegt im Nano-Ω und im Nano-H, was bedeutet, dass Sie einige angemessene Kenntnisse in Bezug auf CMRR und SNR benötigen. Andernfalls sehen Sie nur die Netzspannung, vorausgesetzt, dies geschieht in Innenräumen. Oder einige andere Frequenzen aus dem WLAN oder Lampen oder andere Geräuschquellen. Vielleicht wird also ein richtiger digitaler Filter benötigt. Und ... es liegt wahrscheinlich bereits außerhalb des Rahmens der Fähigkeiten und der akzeptablen mentalen Anstrengung von OP. Also wird diese Idee verworfen.
Zweite Idee:
Machen Sie eine flache leitfähige Oberfläche auf der Gitarre, die mit Masse verbunden ist.
Verwenden Sie einen Draht oder ein leitfähiges Band oder nur einen flachen Leiter. Tragen Sie etwas nichtleitende Farbe oder ein normales nichtleitendes Klebeband darüber auf.
Binden Sie es von unten über die Gitarre bis zum Hals der Gitarre. Verbinden Sie das Kabel an der Unterseite der Gitarre mit hohen Frequenzen im Bereich von Hunderten von MHz. Jetzt werden Sie merkliche Reflexionen bekommen. Weil Sie technisch gesehen eine ... schlechte Übertragungsleitung haben, bei der nur eine Seite abgeschirmt ist.
Sie senden also einen kurzen Rechteckwellenimpuls und messen, wie lange es dauert, bis er aufgrund der Reflexion zurückkommt, weil sich Ihr Finger auf dem isolierten Draht befindet. Und dann misst du die Amplitude der reflektierten Spitze an der Unterseite der Gitarre. Also die Fahrzeit => Position des Fingers. Die Amplitude der Reflexion => wie stark Sie gedrückt haben.
Dies ist nicht die einfachste Einrichtung ... wenn Sie nicht wissen, was Sie tun. Auch dies könnte für OP zu viel Aufwand sein. Also wird diese Idee verworfen.
Es würde in etwa so aussehen:
Als Wellenwiderstand habe ich 150 Ω angenommen, also eine sehr schlechte Übertragungsleitung. In Wirklichkeit könnte es schlimmer sein, ich weiß nicht, ich habe das noch nie gemacht.
Hier ist der Link , falls jemand herumspielen möchte.
Einer der schwierigsten Teile wird es sein, die Endpunkte an einen gewissen Widerstand anzupassen, dafür benötigen Sie möglicherweise ein Oszilloskop oder ein anderes teures Instrument.
Der andere schwierige Teil wird sein, die TOF (Time of Flight) tatsächlich zu messen, es gibt einige ICs da draußen, aber sie sind nicht billig Spannung ablesen.
Die Idee dabei ist, dass, wenn ein Finger in die Nähe des Drahtes kommt, Ihr Finger ein Teil des Stromkreises wird und als Kondensator fungiert. Je näher Ihr Finger ist, desto kapazitiver. Aus diesem Grund sinkt der Widerstand an der Fingerspitze.
https://en.wikipedia.org/wiki/Transmission_line scrollen Sie etwas nach unten und Sie werden sehen, dass der kapazitive Parameter ein Teil des Nenners ist.
Immer wenn ein Punkt auf dem Draht nicht übereinstimmt, kommt es zu einer Reflexion, die Sie am "Ausgang" ablesen können, von dem Ihr Signal stammt. Wenn es nirgendwo eine Reflexion gibt, wird Ihr Signal an einem der Endpunkte beendet.
Je stärker Sie nach unten drücken, desto mehr Fläche Ihres Fingers wird flach => mehr Kapazität aufgrund der Fläche. Außerdem wird jedes nichtleitende Material, das Sie zwischen dem Draht und Ihrem Finger haben, ganz leicht zusammengedrückt, um die Kapazität weiter zu erhöhen.
Dritte Idee:
Stecken Sie ein Theremin in die Gitarre und messen Sie Frequenz und Amplitude. Ich weiß nicht genau, was ein Theremin ausgeben wird, aber sicherlich kann etwas verwendet werden.
An diesem Punkt gehen mir die Ideen aus und ich sage, dass ich 20 Minuten verbracht habe. In Wirklichkeit habe ich vielleicht 10 ausgegeben. Na ja. Jetzt habe ich sicherlich weitere 10 Minuten damit verbracht, dies zu schreiben, also summiert sich alles.
Drei Ideen:
Tatsächlich besteht die von Ihnen beschriebene Schaltung aus einer großen Anzahl variabler Widerstände, von denen jeder an einem Ende mit einer Versorgungsspannung verbunden ist. Sie wollen alle Widerstandswerte auslesen und die anderen bisherigen Antworten haben meistens Ansätze vorgeschlagen, das Signal auf der analogen Seite zu multiplexen.
Sie können dieses Multiplexing aber auch ganz oder teilweise auf der Versorgungsseite durchführen, indem Sie die Versorgungsschiene in n Abschnitte unterteilen. Verbinden Sie Sätze von n Sensorpads, die jeweils eine andere Versorgungsschiene haben. Schalten Sie nun jeweils nur eine Versorgungsschiene ein und verwenden Sie einen ADC-Eingang, um jeden Satz von Pads zu lesen. (So funktioniert normalerweise die Schaltung, die eine Computertastatur liest, und die Art und Weise, wie die Schalter verdrahtet sind, wird oft als „Kreuzpunktschalter“ bezeichnet.) Letztendlich könnten Sie einfach einen einzelnen ADC verwenden, der mit allen „Schienen“ verbunden ist, und tun das gesamte Multiplexing durch Anschließen der Stromversorgung an jedes Pad der Reihe nach.
Der einzige Haken ist, dass alle anderen Pads von der Stromschiene isoliert und nicht mit Masse verbunden werden müssen, was der Fall wäre, wenn Sie nur einen digitalen Ausgang für jedes Pad verwenden würden. Es gibt mehrere Möglichkeiten, dies zu lösen, einschließlich der Verdrahtung jedes Pads über eine Diode, einen Bipolartransistor oder einen FET oder - ich weiß nicht, wie schnell dies in der Praxis möglich ist, aber es ist im Prinzip möglich - die Verwendung des Eingangs-Ausgangs-Pins von a Mikrocontroller und Einstellen entweder auf High-Ausgang oder auf Eingang, wenn er eine relativ hohe Impedanz haben sollte.
Die Genauigkeit der Messung Ihrer Sensoren mit dieser Technik ist möglicherweise nicht perfekt im Vergleich zur Verwendung einer einzelnen Festspannungsquelle und hochwertiger analoger Multiplexer, aber ich vermute, dass sie gut genug sein wird, zumal ich sicher bin, dass die Drucksensoren eine gewisse Toleranz haben werden ihren Widerstand - möglicherweise müssen Sie diesen ohnehin für jeden Sensor mit einer Referenzkraft kalibrieren.
Beispielsweise hat der PICAXE 40X2 27 Pins, die als analoger Eingang verwendet werden können, sodass Sie Ihren Bedarf mit 9 davon abdecken könnten. Es ist in einer einfachen BASIC-Sprache programmiert und kann als i2c-Slave fungieren - Sie könnten also die 9 Chips mit einem weiteren Mikrocontroller auslesen - oder Sie könnten wahrscheinlich einfach die Ausgabe von jedem Chip als serielle Daten senden und in den Host-Computer einlesen über Seriell-zu-USB-Konverter. Ich kann nicht genau versprechen, wie schnell das gehen wird, aber ich denke, es sollte funktionieren, wenn Sie den PICAXE mit maximaler Geschwindigkeit takten (von 64 MHz, mit einem externen 16-MHz-Resonator). Wenn Sie mit der Mikrocontroller-Programmierung in C zufrieden sind, können Sie natürlich dasselbe mit dem PIC18F45K22 tun, auf dem der PICAXE basiert.
Schließlich, wenn es Ihnen nichts ausmacht, Geld auszugeben, um Zeit zu sparen, und Portabilität keine hohe Priorität hat – zum Beispiel, wenn es in Ordnung ist, wenn das Instrument mit dicken Kabeln an ein Geräterack angebunden wird – könnten Sie einfach genug kaufen High- analoge Eingangsgeräte mit Kanalzahl, um alle Sensoren gleichzeitig zu messen. Zum Beispiel liest das Measurement Computing USB-2633 64 analoge Eingänge für etwas mehr als 1.000 US-Dollar.
Es könnte sich lohnen, eine Brute-Force-Signalkonditionierung (möglicherweise passiv) in Betracht zu ziehen, gefolgt von kleineren ADCs oder MCU / ADC mit jeweils 16 oder mehr MUX-ADC-Eingängen. Das sind nur 40 Chips. Ein Beispiel für einen Chip, der funktionieren könnte, ist der ADS7961QDBTRQ1 , der einen Kanalmodus mit automatischer Inkrementierung und 16 Eingänge hat.
Die Gesamtdatenrate selbst bei einer Abtastrate von 4 kHz und 240 Bytes pro Abtastung beträgt etwa 1 MB/s, was nicht allzu beängstigend ist. Vielleicht eine Master-CPU mit einem 10-MHz- oder 20-MHz-SPI-Bus, der mit den Slaves kommuniziert. Verwenden Sie 2 SPI-Busse, wenn die Bandbreite nicht vorhanden ist. Der oben erwähnte Teil arbeitet mit 20 MHz, sodass ein einzelner SPI ausreicht.
Oder vielleicht können Sie einen einzelnen TI-Chip verwenden – den DDC2256AZZF , der über 64 Kanäle simultanes Sampling und 256 Eingänge verfügt … aber er ist nicht besonders günstig (ca Arbeiten Sie mit einem weißen Steckbrett.
Für eine Echtzeit-Human-Interface-Anwendung scheint eine Gesamtabtastrate von mehreren kHz hoch zu sein. 50 Hz sind wahrscheinlich genug ( https://en.wikipedia.org/wiki/Input_lag#Typical_overall_response_times ). Das bedeutet, dass Sie alle Sensoren in <20 ms abtasten müssen, also 80 us pro Sensor. Dies ist nicht allzu schwierig und kann im Grunde von allen normalen 8-Bit-Mikrocontrollern verwaltet werden (dh Atmega88 kann dies in <30us tun).
Sie können genauso gut alle Wechselwirkungen messen und dann die nicht benötigten einfach verwerfen, da es technologisch nicht schwierig ist, alle zu messen. Das Problem kommt vom Multiplexing. Ich bin bei Ihrem Beitrag etwas verwirrt, weil dort steht, dass die Sensoren 80 gleichzeitig mit Strom versorgt werden? Das Übliche ist, wie Sie sagen, Spalten und Zeilen zu multiplexen. Wenn Sie das nicht tun, müssen Sie sich mit >80 Drähten auseinandersetzen, die aus Ihrem Gerät kommen, was wirklich keine gute Idee ist. Sie müssen einen Weg finden, es in eine Matrix aufzuteilen, sodass Sie 30 Drähte erhalten (was immer noch viel ist). Sie könnten sie dann multiplexen usw., aber wenn ich Sie wäre, würde ich nur mehrere Mikrocontroller haben und sie an einen Master anschließen. Sie könnten einen dedizierten ADC anstelle der Slave-MCUs verwenden, aber ich persönlich würde bei den MCUs bleiben.
Sie haben richtig erkannt, dass die Kommunikation ein Problem sein könnte, aber das ist keine große Sache, zumindest zwischen den MCUs. Ein Atmega mit 8 MHz kann SPI mit 2 MHz ausführen, sodass das Senden aller Sensordaten <1 ms dauert. Die Frage ist dann, was Sie mit diesen Daten machen wollen, nachdem die Master-MCU sie hat.
Ihre einfachste Methode besteht möglicherweise darin, das Ganze auf einer langen Flex-Schaltung mit einer Kette von 10 8-Bit-Open-Collector-Seriell-zu-Parallel-Registern aufzubauen, die über die Flex verteilt sind, um jede Spalte von Pads einzeln mit Strom zu versorgen.
Sie können diese verwenden, um jede Spalte in allen Zeilen gleichzeitig anzusteuern und die gemeinsamen Rückleitungen zu Ihrem ADC zu multiplexen. Die Rückleitungen würden entsprechende Pull-ups benötigen, damit Sie mit dem Knopfwiderstand eine Widerstandsteilerspannung erhalten.
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Das steuernde Mikro würde dann ein einzelnes Nullbit die Registerkette hinuntersenden, sodass nur eine Spalte gleichzeitig mit Strom versorgt wird. Die verbleibenden Verbindungen würden erdfrei sein.
Der offensichtliche Weg, dies zu tun (da Sie nur eine einzige Berührung auf jeder Saite sehen müssen), besteht darin, die Bünde an einen Spannungsteiler anzuschließen und dann die Spannung an jeder Saite zu messen
das wird Ihnen sagen, wo Sie sich berühren.
Um Berührungsdruck zu erhalten, legen Sie einen Kondensator von Masse zu jedem Bund und messen Sie den Wechselstromwiderstand an jeder Saite.
Die Kehrseite dieses Ansatzes ist, dass die Saiten auf höhere Berührungen reagieren
Wenn Sie einen Draht mit einem einigermaßen gleichmäßigen Widerstand pro Zoll haben, der für die Länge der Gitarre zwischen 100 Ohm und 100 K liegt, können Sie den Hals möglicherweise einfach aus einem mäßig leitfähigen Material mit einem Oberflächenwiderstand herstellen die mit Druck nachlässt, und messen Sie dann den Widerstand zwischen dem Hals und jedem Ende jeder Saite. Die Summe der Widerstände abzüglich des Widerstands einer Saite würde den doppelten Widerstand des Kontaktpunkts ergeben. Nach dem Subtrahieren des Kontaktpunktwiderstands von jedem gemessenen Widerstand würde das Verhältnis der verbleibenden Widerstände den Kontaktpunkt am Hals anzeigen.
Beachten Sie, dass dieser Ansatz in der Lage wäre, gleichzeitiges Drücken auf allen drei Saiten zu erkennen, aber nicht funktionieren würde, wenn eine Saite an mehreren Stellen gedrückt werden kann. Auf einer Gitarre würde ein solches Design die Verwendung von Barre-Akkorden ausschließen – eine ziemlich schwerwiegende Einschränkung –, aber andere Instrumente erfordern möglicherweise nicht das Berühren von Saiten an mehreren Stellen.
Ich habe diesen Beitrag gesehen und dachte, es könnte mit einem einzigen Chip möglich sein. Ich würde Ihnen empfehlen, eine Art Mikrocontroller-Board zu nehmen, wie das billige Bluepill-Board. Es verfügt über einen ARM M3 mit 10 ADC-Kanälen zur freien Verwendung. Wenn Sie die Spalten in 3 Clustern mit 3 Strings platzieren, verbinden Sie diese mit 9 freien ADC-Kanälen. Verwenden Sie die anderen 21 Stifte, um die Stiftreihen umzuschalten, für insgesamt 63 „Bünde“.Der Mikrocontroller verfügt über zwei 12-Bit-ADCs mit 1 Msps, die mit Phasenverzögerung verwendet werden können, um 2 Msps zu unterstützen, was ausreichen sollte, um niemals einen Hammer zu verpassen oder eine Modulation zu bemerken. Ich denke, Sie können die USB-Verbindung verwenden und das Ding wie einen USB-Midi-Controller funktionieren lassen. Sie könnten einen größeren Mikrocontroller für mehr Eingaben verwenden, aber ich sehe nicht, wie Sie den Bundabstand mit mehr als 30 Bünden verwalten werden, oder wird es eher wie ein Touchscreen sein?
Ich weiß nicht genau, wie diese Velostat-Platten funktionieren, aber können Sie nicht wie kleine Endpunkte auf der Unterseite einer größeren Platte platzieren und die Position und den Druck des Fingers an mehreren Punkten mit der Spannung korrelieren? Dann können Sie wahrscheinlich mit viel weniger Sensibilität davonkommen und Dinge wie Bends und Vibrato unterstützen.
jsotola
Schizomorph
Trevor_G
d.oelert
Wayne Konrad