• ベストアンサー
  • すぐに回答を!

PCでモータなどをリアルタイム制御する方法

RinuxOSのPCからAD/DAボード(USB接続)を介して、モーターなどのメカトロニクス機器をリアルタイム制御したいと思っています.それを実現するために, ・UbuntuなどにRTOSをインストールする。 ・PCにAD/DAボードを設置する。 ・デバイスドライバとAPIをインストールする。 まではわかったのですが、「AD/DAボードにアクセスするためのプログラム」をどのように書けばよいのかわかりません.また,「DAボードから任意の電圧を出力する(またはADボードを介して外部電圧をPCに取り込む)」にはどのようにプログラムを書けば良いのかもわかりません.そもそもAPIというものが何をするためのものかも分かっていません. ちなみに、Arduinoを使ってモータの制御はしたことがあります. どなたかアドバイスいただければ幸いです.「そもそもまず~~という本で~~の知識を入れるべき」というレベルでも結構ですので,どうかよろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数52
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.4

PC用のAD/DAボードというのは千差万別で共通規格もありません。 故に、個々の製品ごとにマニュアルを読む以外に使い方を知る方法は無いといえます。 というか、リアルタイム制御したいならPCで頑張るよりも、FPGAに手を出した方がマシではないかと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答大変ありがとうございます.なるほど個々の製品ごとにマニュアルを読むしかないのですね.勉強になりました.

関連するQ&A

  • リアルタイム制御用のパソコンについて

    パソコンからAD/DAボードを介して、(MATLAB_Simulinkで組んだプログラムで)モータを制御(サンプル時間:1ms)しようと思っており、現在、それ用のパソコンの購入を検討しています。 このような用途の場合、ノートパソコンでも大丈夫なのでしょうか? 基本的には、使用するパソコンが、AD/DAボードの取説に記載の要求スペックを満たしていれば、問題なく動作するのでしょうか?

  • Linuxでリアルタイム制御するには

    PCからAD/DAボードを介して小型のロボットをリアルタイム制御したいと思っています.これまではWindowsPCにMATLABをいれて,MATLABでプログラムを作って制御していたのですが,LinuxでMATLABを使わずにリアルタイム制御したいと思っています. そこで質問ですが,Linuxでリアルタイム制御するには,どのようなOSが必要なのでしょうか?Ubuntuで大丈夫でしょうか?また,PCにはOSの他に何を入れる必要があるのでしょうか?(これまではWindowsPCにMATLABとそのToolBoxを入れるだけでリアルタイム制御していたので,それ以外のやり方について全くの無知です.) アドバイス頂ければ幸いです.よろしくお願い致します.

  • PCに挿したIOボードを制御するためのプログラム

    IOボード(AD/DAボード)を使ってPCで入出力制御(例えばモーターのフィードバック制御)をしたいと思っているのですが、ボードにアクセスするためのプログラムや、信号を入出力するためのプログラムをどのように書いたら良いかわかりません。おそらくデータシート?に書いていると思うのですが、知識不足で読み解くことができません。(いままでArduino IDEでArduinoの制御をしたことしかありません。普通にC言語でAVRマイコンをプログラムして制御することはできません。C言語の基礎知識はあります。) そこで質問なのですが、PCから(例えばPCIスロットに挿した)IOボード(AD/DAボード)を制御するための知識は、どのようにして習得できますでしょうか?参考になる本やサイトが見つかりません。PICやAVRなどのマイコンであれば本が色々出ているようなのですが、そのようなマイコンを使えるようになれば、PCからIOボードを制御できる基礎知識は付きますでしょうか?

その他の回答 (3)

  • 回答No.3

大前提としてリアルタイムOSでモータをADボード直接制御する事は現実的では有りません CPU演算速度が圧倒的に遅すぎる 低且つ一定速度でただ回してみるだけなら引き留めはしないけど 定石的解決手段としてモータドライバ >ちなみに、Arduinoを使ってモータの制御はしたことがあります. ちなみに、Arduinoだってモータドライバ https://www.switch-science.com/catalog/2972/ 最終的に何を動かすの? https://kondo-robot.com/product/03206 こんなのはモータ1台にモータドライバ1台必須 まぁ、多軸制御用ドライバなんで 必ずしもモータ1台にドライバ基板1枚とは限らないけれど まぁ、後はお金の問題なんだけど ロボット制御キットとか買ってきた方が遥かに安価に作れる 恐らく、キット一式価格が高価なんで他の手段を探してるんでしょうけど キットより安価に実現できる手段は存在しない

共感・感謝の気持ちを伝えよう!

質問者からのお礼

お礼が遅くなり申し訳ございません. ご回答大変ありがとうございます.目的は研究用にロボットを開発・制御して最終的には論文にしたいと思っています. >大前提としてリアルタイムOSでモータをADボード直接制御する事は現実的では有りませんCPU演算速度が圧倒的に遅すぎる なるほど,そうなのですね.サンプル時間1msecほどで考えていたので大丈夫だと思っていました.それとも,そもそも1msecだとリアルタイムOSは必要ないのでしょうか?

  • 回答No.2
  • TIGANS
  • ベストアンサー率35% (205/575)

AD/DAボードのメーカーからデバイスドライバーがリリースされているので、それをインストールしてデバイスドライバーのドライバハンドラをAPIでアクセスします。(クラスをインポートしてメソッドをアクセスします) ただしUSBはバッファリングなどの処理によりリアルタイム処理にはあまり向いていないので、高性能な処理をする場合にはCPUやFPGAをUSBデバイス上に載せた方が良いですよ。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご教授頂き大変ありがとうございます.なるほどUSBはリアルタイム処理に向いていないのですね.サンプル時間は1msecを考えているのですが,この場合そもそもリアルタイムOSは必要ないでしょうか?

  • 回答No.1

>>AD/DAボード(USB接続)  マニュアルなど見て作るしかありません

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございます.参考にさせて頂きます.

関連するQ&A

  • リアルタイム制御のためのPCスペック

    回転型倒立振子の安定化制御を最適制御(LQR)でしようと思っています。エンコーダを使ってDCモーターをフィードバック制御します。使用する環境は、PCとPCI ExpressのIOボード、エンコーダカウンタとで構成される環境と、Arduinoおよびカウンタ搭載の制御基盤とで構成される環境で、それぞれで実験をする予定です。後者の環境の構築方法はわかったのですが、前者、つまりPCとIOボード、エンコーダカウンタで構成する環境をするために、PCのスペックはどれくらいのものが良いでしょうか?CPU、メモリはどれが良いでしょうか?(Core i5、8GBで十分?)また、ワークステーションにするべきでしょうか?OSはDebianの予定です。どうぞよろしくお願いします。

  • Arduino UNO R3とモーターシールド

    Arduino UNO R3とモーターシールドL298を使用して制御を行おうとしています. シールドはArduinoだけでは電流値が足りず, 外部電源(単三乾電池4本)を用いるために導入したのですが, このシールドを用いるとテスターで確認してもプログラム通りに電圧を出力してくれません. プログラムは,Arduino単体で動かした時には正常に動いたものを モーターシールドを動かすために改変したもので,間違いは無いと思われます. モーターシールドはこれを使っています. http://www.elecfreaks.com/wiki/index.php?title=L298_Motor_Shield 電圧が供出力されない原因はなにか,まったくわかりません. 回答の程よろしくお願い致します.

  • PCのCPUで演算処理し、Arduinoで入出力

    ArduinoをPCに接続して、Arduinoを、PCのIOボードとして使うことは可能でしょうか?つまり、信号の入出力はArduinoの入出力ポートから行って、演算処理をマイコンではなくPCのCPUでさせたいです。この場合、どのようなプログラムを書けば良いのでしょうか?Arduinoを接続しているPCのポートにアクセスして、それからArduinoの入出力ポートにアクセスするプログラムになると思うのですが、そのやり方がわかりません。一旦マイコンのレジスタにアクセスする必要があるのでしょうか?開発環境は何を使えば良いでしょうか?PCのOSはLinuxです。ご教授頂ければ幸いです。

  • 高速なサンプリングが可能なAD/DAカード(ボード)を探しています

    大学で研究をしている者です.ハードウェアに関してはほぼ素人です. 実験でAD/DAを行うため,以下のようなAD/DAカード(ボード)を探しています. ・ADは(最低でも)50[kHz]以上のサンプリングが可能 ・DAは10[kHz]程度の出力が可能 調べてみても専門用語が多く,高い買い物になりそうなので,使ってみて失敗したくありません. ですので,ノウハウを知っている方がいらっしゃいましたら御助言よろしくお願いします. 実験はC++を使ってセンサに電圧を出力し,センサからADで得られた波形をリアルタイムに解析するといった内容です. ノートPCを使う予定なのでAD/DAカードと記述しましたが,ボードでもかまいません.(カードよりもボードの方が一般的に性能が良いようなことがあればボードを使うつもりです.) 既出でしたら申し訳ありません.

  • エンコーダの信号が(A相、B相とも)途切れる

    MATLABのsimulinkで、エンコーダーからの信号をADボードを介してPCに入力してその信号をグラフ表示させるプログラムを作成したのですが、プログラムを実行すると、必ず0.3秒後あたりで0.05秒ほどエンコーダからの入力信号が途切れます(A相、B相とも0Vになる)。 エンコーダの回転数(モーターの回転数)を変えてもプログラム実行後0.3秒あたりで必ず途切れます。エンコーダへの入力電圧が途切れているのかなと思い、その電圧値を計測したのですが、問題ありませんでした。 ボードもしくはMATLABがおかしいのかと思い、エンコーダの信号を取り込んでいたボード端子に、別の信号を入力して同じことをやったら、信号は途切れず問題なく取り込めていました。なので、ボードやMATLAB、PCには問題ないように思いました。 なので、エンコーダに問題があるはずなのですが、一つ不可解なのは、必ずSimuinkプログラムを実行後"約0.3秒後"という同じ時間に信号が途切れるため、エンコーダに問題があるなら、そうなるはずがないと思います。エンコーダへの入力電圧は、simulinkプログラムとは独立した外部電源から入力しています。 となると、やはりMATLABかPCもしくはボードが原因なのかなと思うのですが、しかし、エンコーダ以外の信号は正常に取り込めています。エンコーダを繋いでいた(ADボードの)チャンネルに他の信号を入力しても問題なく取り込めています。 原因は何が考えられるでしょうか?

  • リアルタイムOS(RTOS)の割り込み処理について

    RTOSではないOSの割り込み処理とRTOSの割り込み処理とでは,作成するプログラムは違うのでしょうか? 例えば,Linux PCでロボット制御のためのC言語プログラム(プログラムAとします)を作成して実行したところ,リアルタイム性が良くなかったため,リアルタイムカーネルをインストールしたとします.そうするとプログラムAを何も書き換えずにそのまま実行するとRTOSの割り込み処理がおこなわれるのでしょうか?それとも,プログラムAをRTOSの割り込み処理をするためのプログラムに書き換えないといけないというものでしょうか?(RTOS専用の割り込み処理のための関数などがあるのでしょうか?) よろしくお願いいたします.

  • ボードについて

    現在、DAボード(VC++で作製)を用いて電圧を制御しているのですが前動かしたときは動いたのですが、 昨日、久しぶりに動かしたとき(通常は0-5V間を動く)は電圧が0Vのままでした. また 2週間ほど前にPCにたまっているいらないデータを消して いたのですが、その時、一緒にいらないと思われるVC++の プログラムを消去しました. 毎回、プログラムを同じものをコピーして使用して作製しているのでもしかすると何かそこで不具合が起きたかもしれません. しかしながら プログラムも正常にOPEN、CLOSEもできます. またボードもちゃんと認識しております. 動かなくなった理由がわかならないので困っております. ここが原因があるのではないでしょうか?のがありました ら教えて下さい.

  • AD/DAボードを用いたAD/DA変換プログラムについて

    C++を用いてAD/DAボードを用いたAD/DA変換プログラムを作成しようと思うのですが、何から書けばいいのか分かりません。 ボードの会社のHPにプログラミングの方法が記載されていたのですが、現在使用している開発環境よりも古いので、あまり参考に出来ませんでした。 調べたりもしたのですが、参考に出来るものがありませんでした。 環境は、  OS : WindowsXP  C++ : Visual C++ 2005 Express Edition  AD/DAボード : Interface製 PCI-3521 です。 参考になりそうなHP、本等がありましたら教えてください。 よろしくお願いします。

  • VC++2010、ADボードを用い周波数を出す方法

    VC++2010、ADボードを用い周波数を出す方法を探しているんですが どこを探してもそういうサンプルプログラムがなく困っています。 デバイスをオープンとかファンクションジェネレータからアナログ波形の入力その電圧値を 取得などは出来るんですが、その周波数を出す方法が分かりません。 なにか良い方法、サンプルプログラムなどはありませんか?よろしくお願いします。 ちなみにADボードは12ビットの分解能のPCI3163で、VC++2010でファンクションジェネレータから出力されるアナログ波形のをADボードを経由してもらい、その後 周波数を出す考えでいます。 ちなみにファンクションジェネレータから出力している周波数は80kHzであります。 ではよろしくお願いします。

  • OSOYOO製 arduino unoの使い方

    OSOYOO製 arduino uno スターターキット6を購入しました。 合わせてarduinoを始めようの本も購入しIDEのインストール、ドライバーの設定を完了しました。 次にポートの確認をするよう書かれており arduinoの互換ボードをUSBに接続し青ランプがついた状態でツールメニューからarduinoボードのポートを選択するよう書かれていますがポート欄は表示されずです。どうしたらポートが開けるようになるのかお教えください。 ポートが見つからないと次に進めないのでしょうか。例題のLEDを点滅させるプログラムを入力してもエラーがかかってしまいます。 入力間違いはありません。 使用のPCはw10とw7です。