Wie kann ich 88 Solenoide mit einem Arduino mit PWM ansteuern?

Für ein (verrücktes) bevorstehendes Schulprojekt baue ich ein Klavier zu einem computergesteuerten Klavier um. Ich plane derzeit die Verwendung von Solenoiden, die unter dem Ende der Tasten montiert sind (Aktionsseite offensichtlich, wie Yamahas DiskClavier-System sowie das PianoDisc-System).

Ich plane, ein Arduino zu verwenden, um MIDI-Signale zu nehmen und alle Solenoide anzusteuern. Ich brauche PWM an den Solenoiden, damit ich die Geschwindigkeit steuern kann, mit der die Solenoide auf die Tasten schlagen, und dadurch die Lautstärke bestimmen kann. Das Problem ist, dass es keine leichte Aufgabe ist, mit PWM 88 Solenoide mit einem Arduino zu steuern.

Ich dachte, ich könnte einen generischen PWM-Generator verwenden, um die Signale zu erzeugen, und es gibt 16-Kanal-Servo-PWM-Generatorplatinen, die SEHR billig sind. Servos benötigen jedoch eine ganz bestimmte Art von Signal, das sich ziemlich von dem generischen PWM unterscheidet, das ich hier benötige. Weiß jemand, ob diese funktionieren, um generisches PWM zu erzeugen? (Link: http://www.ebay.com/itm/PCA9685-16-Channel-12-bit-PWM-Servo-motor-Driver-I2C-Module-For-Arduino-Robot-/272557014281?hash=item3f75a9fd09: g:6SIAAOSwax5Yozsi )

Kann ich nach Erhalt eines PWM-Signals einfach einen MOSFET und eine Diode (zum Schutz vor Rückschlagspannung) verwenden, um die Solenoide direkt anzusteuern?

Irgendwas, was ich hier komplett vermisse?

Jede Hilfe und Anleitung wird sehr geschätzt.

PS Ich weiß, ich bin ein bisschen verrückt, das zu versuchen.

(Ich mag verrückt. Es gehört dazu, wie man lernt. Ins kalte Wasser zu springen ist riskant, aber es hat auch Lektionen.) Aber zuerst müssen Sie genau herausfinden, wie Sie die Tasten ansteuern werden. Sie haben PWM erwähnt, aber wird es das erreichen, was Sie wollen? Geht es einfacher, ohne die Ziele aus den Augen zu verlieren? Welche anderen Methoden könnten Sie auch ausprobieren? Wenn Sie mit all dem hierher gekommen sind, denke ich, dass der Rest leichter zu lösen ist. Aber das musst du wirklich erstmal klären. Und stellen Sie sicher, dass die Idee vom tiefsten A bis zum höchsten C gleich gut funktioniert. Die Tonarten werden unterschiedlich gewichtet.
Legen Sie den Arduino vorerst beiseite und fragen Sie sich, welchen König der Macht 88 Solenoide benötigen. Sicher, Sie werden nicht alle auf einmal aktivieren, aber die gleichzeitige Aktivierung von 10 ist realistisch. Außerdem ist die ruckartige Natur und die plötzliche Stromaufnahme eines Solenoids ein zu großer Nachteil. Es kann einfacher sein, 88 preiswerte DC-Spielzeugmotoren zu verwenden, um sanft an den Tasten zu ziehen. Aber selbst dies erfordert eine Schnittstellenhardware zwischen dem Atmel-Prozessor im Arduino und den Motoren. In Schritten Servomotoren. Viel teurer als Spielzeugmotoren, aber direkt von einem Arduino steuerbar. Und jetzt können Sie PWM verwenden.
Dieses Projekt klingt teuer! In Anbetracht der Ansprechraten kleiner Solenoide, die stark genug sind, um Tasten angemessen zu betätigen, können Sie möglicherweise mit einem Satz von elf kaskadierten 74HC595-Schieberegistern davonkommen, um die Impulse für die MOSFET-Gatter bereitzustellen. Sie müssten sie jedoch ziemlich schnell takten (wahrscheinlich mehrere Megahertz). Die Output Enable (EN)-Pins können einfach die ganze Zeit hoch gebunden werden und einfach DATA und SCLK verwenden, um die PWM-Bits auszutakten und schließlich RCLK ein- und auszuschalten, sobald alle 88 Bits gesendet wurden. Sie würden wahrscheinlich mehr CPU-Leistung benötigen, als ein Arduino bereitstellen kann.
@Wossname Wenn ich mich nicht irre, gibt mir dieser Ansatz nur die PWM-Steuerung über das gesamte Setup und nicht einzelne Solenoid-PWM-Signale. Oder irre ich mich? Ich muss speziell in der Lage sein, die Geschwindigkeit einzelner Solenoide zu steuern, und nicht alle auf einmal.
@st2000 Ich habe eine Weile über Servos nachgedacht, aber das Problem ist, dass Servos, die schnell genug sind und genug Drehmoment für diese Anwendung haben, im Vergleich zu vergleichbaren Solenoiden VIEL teuer sind. Ich habe über die Stromanforderungen dieses Projekts nachgedacht, und es ist so etwas wie ein Problem. Die Solenoide, die dafür funktionieren würden, würden ungefähr 1 A ziehen, was bedeutet, dass es fast 100 A bei 12 V wäre, wenn alle gezündet würden, was nicht völlig verrückt ist (obwohl ich immer noch ziemlich verrückt bin, werde ich fair sein). Ich hätte Softwarebeschränkungen, die es nicht zulassen würden, dass alle Solenoide gleichzeitig ausgelöst werden.
Klavier, oder? Einblick. Sehen Sie sich an, wie die Tastenaktion mit dem Hammer gekoppelt ist. Sobald Sie dies verstanden haben, werden Sie feststellen, dass Sie (in den meisten Fällen) mit viel weniger Kraft direkt am Hammer ziehen können. Dies liegt daran, dass die langsame Hochdruckbewegung der Taste (von einem Finger) in eine schnelle Hammerbewegung mit leichtem Druck übersetzt wird. Schließen Sie dort Ihren Magneten oder Motor oder Servo an. Nicht zu den Schlüsseln.
@willem.hill, Sie irren sich etwas :) Takten Sie die Bits aus, die den Schlüsseln entsprechen, die Sie steuern möchten, und modulieren Sie dann den Ausgangsaktivierungsstift, um die Solenoide zu betätigen. Dies wird dann zu einer Softwareaufgabe. Der Algorithmus, um dies zu steuern, wäre relativ einfach, aber mit ein paar Nuancen hier und da und müsste gut optimiert werden. Aber es hält die Hardware billig und einfach. Sie müssten die Austaktrate jedoch mit einer ziemlich hohen Frequenz laufen lassen, Arduinos sind für so etwas wirklich nicht geeignet. Verwenden Sie für ein ernsthaftes Projekt wie dieses einfach einen nackten Mikrocontroller.

Antworten (1)

Vergessen Sie Verrücktheit – gut für Sie, Nachforschungen und Experimente sind eine großartige Möglichkeit, etwas zu lernen.

Das von Ihnen identifizierte NXP PCA9685-Modul wird FETs ansteuern, wie Sie es beschreiben. Setzen Sie einen 1-K-Serienwiderstand zwischen jeden PCA9685-Ausgang und sein FET-Gate. Dies begrenzt den Strom zu/von der Gate-Kapazität während des Umschaltens des PWM-Ausgangs auf max. 5 mA, da der PWM-Ausgang andernfalls bei seiner ansteigenden Flanke in einen Kurzschluss getrieben wird.

Ich würde auch einen 10-K-Pulldown auf GND an jedem PWM-Ausgang zulassen oder einfügen. Das PCA9685-Datenblatt gibt an, dass die Ausgänge während des Zurücksetzens des IC auf Low gehen. Beim Einschalten möchten Sie nicht, dass Dutzende von Solenoiden klicken, weil es nicht sofort genug oder etwas anderes Unvorhergesehenes ist. Dies ist eine reine Vorsichtsmaßnahme, die es Ihnen ermöglicht, einen Pulldown auf den PCA9685 /OE-Pin zu legen und den Arduino auf logisch hoch treiben zu lassen, sobald sich die Versorgung stabilisiert und die Schaltung stabilisiert hat. Sollte nicht benötigt werden, aber besser einplanen und die Teile nicht in Ihr experimentelles Lash-up einbauen.

Danke dafür! Mir war nicht klar, dass die „Servo PWM“-Platinen von Adafruit den NXP PCA9685 verwenden, der einfach ein Standard-PWM-Controller ist, der für LED-Steuerungsanwendungen entwickelt wurde! Dummkopf, ich hätte diese Nachforschungen anstellen sollen.
@willem.hill, nichts Dummes - das ist eine gute Wahl für ein PWM-Modul. Sie können damit fahren, was Sie wollen, das LED-Fahren war nur der beabsichtigte Markt des Herstellers. Schauen Sie sich FET-Arrays in ICs an, und Sie können auch dort Ihren Komponentenzähler herunterzählen.