• 締切済み
  • すぐに回答を!

エンコーダの信号が(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ボードの)チャンネルに他の信号を入力しても問題なく取り込めています。 原因は何が考えられるでしょうか?

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

  • 回答数2
  • 閲覧数58
  • ありがとう数1

みんなの回答

  • 回答No.2

MATLAB 入門 プログラミングとスクリプト https://jp.mathworks.com/help/matlab/learn_matlab/scripts.html スクリプトと関数 https://jp.mathworks.com/help/matlab/learn_matlab/scripts-and-functions.html よーするに、スクリプト言語ってのはインタプリタなんで https://www.otsuka-shokai.co.jp/words/interpreter.html プログラムコードを1行づつ順番に実行してる >必ずSimuinkプログラムを実行後"約0.3秒後" 0.3秒後にエンコーダボードのイニシャライズしてると憶測できる >別の信号を入力して同じことをやったら、信号は途切れず問題なく取り込めていました。 同じボードにエンコーダ以外の、例えば押し釦スイッチとかにした場合って事なら ボードのデフォルト設定が押し釦入力に設定してあったならイニシャライズ不要 従って、信号の途切れは無くとも不思議はない 90度位相差エンコーダ入力ってのは実はかなり大変な事やってる エンコーダ入力専用ボードならともかくとして https://www.contec.com/jp/products-services/daq-control/pc-helper/pci-card/cnt32-4mt(lpci)/feature/ 汎用DIボードとかを流用してるとソフト負荷は大きい https://www.contec.com/jp/products-services/daq-control/pc-helper/pcie-card/dio-1616e-lpe/price/ なので、イニシャライズに時間が掛かっても不思議ではない モーションコントロールボードも物によってはイニシャライズに時間が掛かったっりする https://www.contec.com/jp/products-services/daq-control/pc-helper/pci-card/smc-4df2-pci/feature/ で、イニシャライズだとしてそれを確認する手段 0.3秒より短くするのはほぼ無理でしょうけど、長くするのは比較的簡単 所謂、ダミーループでタイマ作って https://jp.mathworks.com/help/matlab/learn_matlab/flow-control.html エンコーダ読み込みプログラムの直前にタイマを入れてみる

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

関連するQ&A

  • 【画像処理】ラインセンサカメラの同期信号について

    コンベヤ上を流れてくるワークをラインセンサカメラを用いて、PCで画像処理を行い、ある種の良品・不良品判定を実施したいと考えています。 そこで色々と調べていたら、画像入力ボードへタイミング信号以外にエンコーダ信号(同期信号)が必要らしいのですが、これは必ず必要なのでしょうか? コンベヤの速度は可変せず、一定速とします。 エンコーダがコンベヤに無く、出来れば取り付けたくありません。 尚、エリアセンサカメラは対象外です。 画像入力ボードへのエンコーダ信号は必ず必要なのか、また、とくに必要ない場合はどうしたらよいのかご教示ください。

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

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

  • ロータリーエンコーダの出力信号について

    ロータリーエンコーダのカタログをみると、その出力信号が、TTL、HTL、ラインドライバ、オープンコレクタ、電圧出力と、いろいろありますが、これらの違い、特徴がよくわかりません。 また、私が購入したロータリーエンコーダ(ハイデンハイン社製 ERN1020)は、TTL方式なのですが、推奨としてボードにつなげる前に、差動ラインレシーバを組み込みなさいと書いてあります。 TTLとラインドライバは同じ意味なのでしょうか?差動ラインレシーバにつなげないと、正確にパルスが読み取れないのでしょうか? どなたかご教授お願いします。 http://www.heidenhain.co.jp/index.php?WCMSGroup_785_194=487&WCMSGroup_2523_194=785&WCMSGroup_2509_194=2523&WCMSGroup_487_194=855&WCMSArticle_Template_45_11891=HeidenhainProduktDB&op=catview&search=category&CS_UID=18264

  • 回答No.1
  • q4330
  • ベストアンサー率26% (291/1086)

・信号をグラフ表示させるプログラム 症状からするとこのプログラムに原因がありそうです。 プログラムが起動した時に何かを初期化するなどの処理に時間を取られ信号の入手に欠落が生じてるのではないでしょうか?

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

関連するQ&A

  • 交流電源からの信号を,AD変換したいのです.

    交流安定化電源から,実効値で45V,60Hz,0.17Aの信号を出力しています.この信号を入力インピーダンス1MΩ以上,入力レンジ±10VのAD変換器に入力したいのですが,位相遅れがでないように,実行値だけを落とす良い方法は無いでしょうか?また,交流電圧を直流電圧に変換するにはどのようにすればいいのでしょうか? 助けてください.よろしくお願い致します.

  • アナログ信号の計測系に関する質問です。

    以下の場合、信号の大きさや周波数特性などに関して考えるべき項目 と問題となる点にはどのようなものがありますか?簡単にご説明をお願いします。 ・入力信号の電圧と帯域幅、 ・サンプリング周波数、 ・AD変換器が縦続接続されているとき

  • 信号で停止した直後、一時的にエンジンの回転数が下がる

    購入して20Kmほどしか走っていないHonda Today(50CC)なんですが、信号等で停止した時、当然エンジンの回転数が下がりますが、瞬間、通常のアイドリング時より低い回転数になります。(すぐ通常のアイドリングに戻ります)暫く停止してから発進する時は問題ありませんが、ちょうど回転数が下がった瞬間に発進する時にもたつく感じがしますし、エンジンが止まったこともあります。 何が原因なんでしょうか? それとも、こんな事はよくある事で、自然に直ったりするものなのでしょうか? 通勤に使うだけで、遠出をするわけではありませんが、気になります。

  • DCモータの特性について

    DCモータのスペックを見ると、必ずその特性曲線が一緒に載っています。 その特性曲線の参考の仕方がイマイチわかりません。 直感としては、モータにかける電圧が高いほど回転数が上がる、としか感じられないので、「横軸が電圧値である特性曲線」のようなものをみたいのですが、どんな特性曲線を見ても、横軸は電流値かトルクとなっています。 実際に使用することを考えたときに、電圧値が一定なのに、何を原因として電流値を制御したり、それに伴って、回転数を変化させたりするのですか? 回転数を制御するのは、電圧値を上下させることによるんじゃないんですか?(PWM信号などを用いて) わかりにくい質問でごめんなさい。どなたかご回答願います。

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

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

  • ホンダライフに乗っています。信号待ちをしている時、急にエンジンが止まり

    ホンダライフに乗っています。信号待ちをしている時、急にエンジンが止まりその日以降アイドリング不調になりました。回転数が低くなったような感じです。software,bcuという物を修理したのですがしばらくすると止まりかけたので、今度は、サイレンサーCOMP.エキゾーストとガスケットフレキシブルエキゾーストという物を交換しECUアップデートを修理しましたが、9ヶ月たった先日信号待ちをしている時またエンジンが止まってしまいました。何が原因で何をすれば直るのでしょうか?

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

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

  • MATLABを用いたUDP通信のプログラム作成

    MATLABを用いたUDP通信のプログラム作成のことで教えてください。 Windows10のパソコンのキーボードから文字列を入力し、 UDP通信で文字列を渡し、この値をパソコンの画面上に表示させる MATLABプログラム(Simulinkは使 用しない)を書こうとしています。 ・どのように書けばよいか教えてください。 ・また、この場合、ホストアドレス(127.0.0.1 ?)やポート番号をどのように設定すればよいでしょうか? ・さらに、このMATLABプログラムをC言語に変換してテストしたいです(MATLAB Coderを使用) 通信分野については、ほとんど知りません。 宜しくお願い致します。

  • 信号でエンジンが落ちる

    97年式ZRX400に乗っていますが、たまに変な症状が起きます。 50キロぐらい普通に走っていて、コンビニとかに止まって再出発。信号に止まると回転数が落ちだして、あわててアクセルを回す。アクセルはなすとエンジンが落ちるけど、セルスイッチ押してアクセル回すと、すぐにエンジンはかかるが、アクセルを回しっぱなしじゃ無いとエンジンが落ちるので近所迷惑。走り出して、しばらく回転数を6000キープしていると普通に戻る。 といった感じです。 快調に走ったり、不機嫌になったり、すぐに機嫌直したりでもう意味不明です。 気のせいかもしれないですが、なんか金属が焼けたような臭いがするし、4気筒のうち何本かが死んでエンジンからカラカラ音が出ていたような気がします。がしかし、てんぱってしまっているので確信はないです。 毎回出る症状ではなくて、実際一昨日に症状が現れて、昨日は200キロはしっても何も起こりませんでした。 不調原因箇所などが分かる方いらっしゃいましたら、助言をよろしくお願いします。

  • ボール式マウスの構造

    ボール式マウスはボールの回転を利用し2つの軸に儲けられたエンコーダを動かしボールの回転数(量)、回転方向を検出しますよね? エンコーダは赤外線を利用したものだとします。 例えば片方のエンコーダのみが動いた場合、赤外線の信号数はカウント可能なのでボールの動作量は検出しやすいと思うのですが、回転方向はどうやって検出するのでしょうか? 例えば、エンコーダのスリットが1234と4つあったとします。 1,2,3まで行って2,1と戻った場合と、1,2,3,4と進んだ場合の区別はどのようにつけているのでしょう? 素人質問ですみません。分かりやすく教えて下さい。