サポート・メンテナンス

Business


[よくあるご質問]

弊社で現在受け付けているFAQ情報は以下になります。

iMCs01などのモータコントローラと接続したがモータが回らない

iMDs03とモータコントローラのGNDラインは接続されていますか?
接続されていない場合は、iMDs03のマニュアルを参考に、GNDを接続してください。

「ロボットうんちくブログ」参照

モータコントローラで目標値を入れていないのにモータが回る

iMDs03のPWM信号は正論理です。モータコントローラのposnegの設定を以下のようにしてください。

/*———————————————-*/
cmd.posneg = SET_POSNEG | CH0| CH1 | CH2 | CH3;
/*———————————————-*/

モータコントローラで目標値を入れてもモータが回らない

iMDs03のブレーキ信号は負論理です。Hiの時ブレーキは解除され、Lowの時ブレーキがかかります。モータコントローラのbreaksの設定を以下のようにしてください。

/*———————————————-*/
cmd.breaks = SET_BREAKS | CH0 | CH1 | CH2 | CH3;
/*———————————————-*/

モータコントローラが破損する

モータ側とコントローラ側のGNDレベルがズレており、モータドライバのロジック部に5V以上の電圧が印加されている場合が考えられます。 対処法としては、iMDs03などのマニュアル内に記述されているGND接続方法を参照し、正しくGNDを接続してください。

「ロボットうんちくブログ」参照

Kernel2.6ドライバをMakeするとエラーが出る

Kernel 2.6.19以降は、config.hがなくなりました。urbtc.c内の
#include <linux/config.h>

#include <linux/autoconf.h>
と書き換える必要があります。

implicit declaration of function ‘lock_kernel’
implicit declaration of function ‘unlockkernel’
のエラーが発生する場合は、urbtc.c内に
#include <linux/smp_lock.h>
を追加してください。

implicit declaration of function ‘info’
のエラーが発生する場合は、urbtc.c内のinfo関数を使用している部分をコメントアウトしてください。(動作に影響はありません)

別々のプロセスで非同期にiMCs01にアクセスすることは可能か?

iMCs01では、別プロセスからの同時アクセス時の動作は保障しておりません。

Kernel2.6.18以降で、devfsがなくなりコンパイルが出来ない

(1)urbtc.cのソースコード冒頭(25行目付近)を下記のように変更してみてください。
変更前: #include <linux/config.h>
変更後: #include <linux/autoconf.h>

(2)udev機能が動作していることを確認してください。
USB デバイスでは、
a) USB バス上にデバイスが存在することを検出
b) 対応するドライバを探してデバイスを初期化する
c) /dev/xxx というデバイスファイルが作成される
d) アプリケーションは /dev/xxx をオープンしてデバイスを使う
というように処理が行われます。
Kernel2.6.18以前は、c)で、/dev/urbtc0を作る処理を devfs が行っていました。
kernel2.6.18以降は、c)の処理を、devfsの代りにudev を行うことになります。
udevはユーザーレベルで動作するudevdになりますので、そちらが巧く機能していれば動作すると考えられます。

iMCs01で速度制御がしたい

iMCs01は位置制御のみのコントローラとなっておりますので、そのまま目標値に目標速度を入れても速度制御はできません。iMCs01にて速度制御を実現される場合は、アプリ上で速度制御ルーチンを作成していただくことになります。
iMCs01ソフトウェアマニュアルにあります、
4.5.2 モータの制御(オープンループでモータを回す)
の章の方法で、PCで現在位置(エンコーダ値)を取得し、内部で速度制御の計算を行い、offsetに目標速度を代入するといった方式になります。流れとしましてはPC上のアプリにて、
1.readによりエンコーダ値を取得v[i]
2.前回のステップでのエンコーダ値との差を算出(v = v[i]-v[i-1])
3.offset = Kp(vd – v) + 0x7ffff;
のようにしていただき、これを適当な制御周期でループさせ、vdに目標値を入れることで、比例速度制御が可能となります。

iMCs01にエンコーダを取り付けたい

iMCs01はエンコーダ入力として、1chのハードウェアカウンタ、または3chのソフトウェアカウンタを選択することが出来ます。
エンコーダ入力が4000ppsを超える場合は、1chのハードウェアカウンタを使用する1chモータ制御モードを選択していただく必要があります。逆に4000pps以下のエンコーダ入力の場合は、3chのソフトウェアカウンタを使用する3chモータ制御が可能です。

「ロボットうんちくブログ」参照

信号を出していないのにモータが回る

使用しているPCがbig endianかlittle endianかを確認してください。また、制御ゲインなどが0になっていることを確認してください。その上で、offset=0x7fff(little endianの場合)となっているところを、0x8000など、モータが停止する位置まで少しだけ変更してください。

iMCs01から D/A コンバーターによるアナログ出力を行いたい

: iMCs01は4チャンネルの D/A コンバーターにより10bitの段階(0 ~ 1023)で、0[V] ~ 5[V] の範囲の電圧、及び、最大2[mA]の電流を出力する事が可能です。
各チャンネル、出力ポート及び、出力ピンの対応は下記表の通りです。

チャンネル 出力ポート 出力ピン
CH0 CN101 Pin 3:[BRK/DA] (※1)
CH1 CN102 Pin 3:[BRK/DA] (※1)
CH2 CN103 Pin 2:[PWM/DA] (※2)
CH3 CN104 Pin 2:[PWM/DA] (※2)

※1 : LPF(Low-pass Filter)は不要
※2 : LPF(Low-pass Filter)が必要

■設定
D/Aコンバーターを使用するためにはプログラム中でモード設定パケットに対し以下の設定を行ってください。

例:全チャンネルでD/Aコンバーターを使用
/*———————————————-*/
cmd.selout = SET_SELECT;
/*———————————————-*/

例:0, 1チャンネルでD/Aコンバーターを使用(2, 3チャンネルはPWM出力)
/*———————————————-*/
cmd.selout = SET_SELECT | CH2 | CH3;
/*———————————————-*/

値を設定後iMCs01に対してこの値を送信してください。

■出力
D/Aコンバーターから値を出力するためには、プログラム中で目標設定パケットの目標位置を以下のよう設定してください。
目標速度、及び各ゲインは任意の値を入力可能です。(なお、各ゲインの分母のみ”0″としないよう注意してください。)
D/Aコンバーターの設定分解能は1024段階で、0:0[V] ~ 1023:5[V] を出力可能です。
設定値は5bit左シフトを行ってください。

例:CH0(CN101)から0[V]、CH1(CN102)から5[V]、CH2(CN103)から2.5[V]、CH3(CN104)から2[V] 出力する場合
/*———————————————-*/
obuf.ch[0].x = (0 << 5);
obuf.ch[1].x = (1023 << 5);
obuf.ch[2].x = (512 << 5);
obuf.ch[3].x = (410 << 5); /* 1024x(2/5) ≒ 410 */
/*———————————————-*/

値を設定後iMCs01に対してこの値を送信してください。

iMCs01は64bit版Windowsで動作しますか

iMCs01は64bit版Windowsに対応していません。動作対象OSは下記表の通りです。

バージョン 32bit 64bit
Windows 2000 ○(1)
Windows XP ○(1、2) ×
Windows Vista ○(2) ×
Windows 7 ○(2) ×

(1)(2)別のドライバを使用しますので、ご注意ください。

同時制御可能な最大のモーター数を知りたい

同時制御可能な最大のモーター数は下記表の通りです。

制御方法 最大数
ポテンショ入力(0-5[V] アナログ値) 4個
エンコーダー入力(最大入力4,000pps以下) 3個(ソフトウェアカウンターによる)
エンコーダー入力(最大入力4,000pps以上) 1個(ハードウェアカウンターによる)

iMCs01をUSBバスパワーで使用したい

iMCs01単体の消費電流は最大90mAです。USB(1.0, 1.1, 2.0)規格では、USB1ポートあたり500mAまでと規定されておりますので、USBハブ等を用いて複数のiMCs01を接続する場合は、モータドライバ、センサの消費電流を考慮して、最大で500mAを超えない範囲であれば、USBバスパワーで駆動させることが出来ます。