コンピューターから実世界にデジタル出力を取得する最も簡単で安価な方法


8

コンピューターを実世界に接続するには、いくつかのデジタル出力が必要ですが、この仕事は私が望んだほど簡単ではないようです。

専用のデジタルI / Oカード、USBインターフェイスを備えたマイクロコントローラー、シリアルポート、パラレルポートなど、さまざまな方法を検討しました。ただし、すべてのソリューションは高すぎるか、作業量が多すぎるか、テクノロジが古すぎるかのいずれかです。

64個以上のデジタル出力がそれぞれ約1 kHzで動作し、個別に制御できるようにしたいと思っています。これまでのところ、私が思いつくことができる最良のアイデアは、シリアルポートの出力を8ビットシリアルパラレルシフトレジスタに固定し、変更して出力したいときはいつでもシリアル接続に文字を送信することです(USBからシリアルポートに実行)アダプタ)。私はこれをまだテストしていないので、うまくいくかどうかわかりません。

非常に基本的なC ++コマンドで簡単に制御できる、コンピューターからかなり大量の安価なデジタル出力を取得する他の迅速で汚れた方法はありますか?



数学をしましたか?単純な非USB RS232の通常の最大速度は115200bps、つまり約10KBです。各チャネルに必要なバイトは1バイトだけだとしましょう(これは疑わしいです)。毎秒64 x 1000バイト、つまり約64KBを送信するとします。シリアルスループットよりもはるかに優れています。921600bpsの高速USBシリアルケーブルがいくつかありますが、理論的には可能ですが、これは端にあり、先ほど述べたように1バイトでは十分ではなく、マイクロコントローラーには他に何の時間もないため、これは有用ではないでしょう。要求を下げるか、財布を準備する必要があります。
avra '19年

3
多分あなたは誰かをバッシュする前にあなたの明白なエラーのためにあなたのコメントをもう一度読むべきです... GPOIはバイトではなく出力ビットをピンします。つまり、64キロビット/秒、最大115.2 kbsを大幅に下回っています
Faken

回答:


7

いくつかのクリスマスライトを点滅させるつもりのようですね。:-)

arduinoなどを使用して何か問題がありますか?メガ1280/2560で言うポートの数が十分でない場合、IOポートの数を拡張することはかなり簡単です。シリアル/ USB端子で駆動できます。arduinoの出力ピンでシフトレジスタを使用するか、i2cポートエクスパンダを使用してドライブすることができます。

このような標準コンポーネントを使用すると、プロトタイピングの時間が最短になります。

私の方法が最も安くはないかもしれないことに注意してください。しかし、それは効果的であり、実際にあなたはすぐに転がるでしょう。


1
点滅するライトではなく、私はプロトタイプの自動万能治具デバイスで32のステッピングモーターを制御しようとしています。多分私はマイクロコントローラーをあまりにも早く却下しました、実用的な例でゼロからスピードアップする方法についてのリソースを段階的に取得しましたか?(そして私は根本から意味します、私にはあまりにも理論的で実用的ではないかなり奇妙な知識ベースがあります、あなたは私が絶対に何も知らないと仮定することができます...とにかく、いつでもそれのように感じますね)
Faken

1
ステッピングモーターを制御するには、少し余分なスループットが必要になります。マイクロコントローラの出力ピンから直接駆動することはできません。あなたはマイクロをフライしないように、ピンとモーターの間にいくつかの電子機器の「接着剤」を使用する必要があります。小さなものから始めて、より高度な例に至るまで作業するのが最善です。私が周りで見た熱心な愛好家の1人はtronixstuff.wordpress.comに、初心者向けの優れた手順があります。私はそれを実行する人もこのスタック交換を頻繁に行うことを知っています。
Rob

1
うん、制御信号とモーターの間で使用する非常に優れたステッピングモータードライバーを見つけました(ステップと方向の2つの入力を使用するだけです)。リンクしたチュートリアルを確認します。ありがとうございます。ところで、念のために言っておきますが、C ++プログラムを介してリアルタイムでコマンドをマイクロコントローラーに送信し、モーターを動かすコンピューターにしたいのです。これはこのマイクロコントローラで可能ですか、非常に簡単ですか?
Faken

1
もちろん。マイクロコントローラーは、コンピューターとステッピングモータードライバーボード間のバッファーとして機能します。送信して実行するコマンドを解釈し、必要に応じてPCにフィードバックを提供できます。もう少し従来型のものを使用することのもう1つの利点は、コミュニティから多くのサポート/アドバイスを得ることができることです。誰かが同様のことをした可能性は常に高いです。それ自体はかなり便利です。microは、PCとドライバーボードの間に本当に素晴らしい低コストのインターフェイスを提供します。
Rob

Adafruitは、16個のサーボを駆動するために使用できる素晴らしいボードを作成し、それらを一緒にチェーンすることができます。PCからデータを読み取り、それをサーボドライバーボードに送信するarduinoコードを書くのはかなり簡単です。adafruit.com/products/815
エリック

3

シリアルからパラレルへのシフトレジスタが機能します。SPIポートを使用すると、1KHzの更新レートで問題はありません。8MHzクリスタル(またはそれ以上)のATmega328上のIIRCは、1Mビット/秒を得ることができるはずです。他の多くのマイクロコントローラーも同様に動作します。

別のオプションは、複数のマイクロコントローラーを使用することです。たとえば、ATmega328(パッシブで約5ドル)を使用すると、TXDおよびRXDラインを空けたまま18ラインが得られます。RXDラインを並列化すると、すべてのuCが同じコマンド文字列を受信します。uCでコマンド文字列を解析する必要があります。FTDIケーブルを使用してUSBに接続します。ArduinoブートローダーをuCに追加すると、Arduinoツールを使用できます。

シリアルからパラレルへの変換はより簡単です。アプリケーションでオープンドレイン出力を使用できる場合は、16チャネルLEDドライバーを使用できます。これは、4つのチップを追加することを意味します。


1

私が出会った最も簡単なオプションはIOIO-OTGのようです。これはPICコントローラーベースの外部OTG USBデバイスで、Android用に設計されていますが、EclipseおよびAndroid開発ツールキットを介してPCで使用できます。これには、46個の3.3v GPIOピン、およびその他の便利な機能が含まれています。プロジェクトに必要な64ピンはありませんが、jlucianiが言及しているように、シリアルからパラレルへのシフトレジスタをいくつか使用することができます(または代わりにステッピングモーターコントローラーを使用し、ピン数を減らします)。

このPICベースのUSB IOボードもあり、同様の機能を果たしますが、ピン数は少なくなっています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.