質問: エンコーダの信号が(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ボードの)チャンネルに他の信号を入力しても問題なく取り込めています。 原因は何が考えられるでしょうか?
回答: 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 エンコーダ読み込みプログラムの直前にタイマを入れてみる