
【A】: iMDs03とモータコントローラのGNDラインは接続されていますか?
接続されていない場合は、iMDs03のマニュアルを参考に、GNDを接続してください。
【A】: iMDs03のPWM信号は正論理です。モータコントローラのposnegの設定を以下のようにしてください。
/*----------------------------------------------*/
cmd.posneg = SET_POSNEG | CH0| CH1 | CH2 | CH3;
/*----------------------------------------------*/
【A】: iMDs03のブレーキ信号は負論理です。Hiの時ブレーキは解除され、Lowの時ブレーキがかかります。モータコントローラのbreaksの設定を以下のようにしてください。
/*----------------------------------------------*/
cmd.breaks = SET_BREAKS | CH0 | CH1 | CH2 | CH3;
/*----------------------------------------------*/
【A】: モータ側とコントローラ側のGNDレベルがズレており、モータドライバのロジック部に5V以上の電圧が印加されている場合が考えられます。 対処法としては、iMDs03などのマニュアル内に記述されているGND接続方法を参照し、正しくGNDを接続してください。
【A】: 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関数を使用している部分をコメントアウトしてください。(動作に影響はありません)
【A】: iMCs01では、別プロセスからの同時アクセス時の動作は保障しておりません。
【A】:
(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になりますので、そちらが巧く機能していれば動作すると考えられます。
【A】: 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に目標値を入れることで、比例速度制御が可能となります。
【A】: iMCs01はエンコーダ入力として、1chのハードウェアカウンタ、または3chのソフトウェアカウンタを選択することが出来ます。
エンコーダ入力が4000ppsを超える場合は、1chのハードウェアカウンタを使用する1chモータ制御モードを選択していただく必要があります。逆に4000pps以下のエンコーダ入力の場合は、3chのソフトウェアカウンタを使用する3chモータ制御が可能です。
【A】: 使用しているPCがbig endianかlittle endianかを確認してください。また、制御ゲインなどが0になっていることを確認してください。その上で、offset=0x7fff(little endianの場合)となっているところを、0x8000など、モータが停止する位置まで少しだけ変更してください。
【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) |
■設定
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に対してこの値を送信してください。
【A】: iMCs01は64bit版Windowsに対応していません。動作対象OSは下記表の通りです。
| バージョン | 32bit | 64bit |
|---|---|---|
| Windows 2000 | ○(1) | ‐ |
| Windows XP | ○(1、2) | × |
| Windows Vista | ○(2) | × |
| Windows 7 | ○(2) | × |
【A】: 同時制御可能な最大のモーター数は下記表の通りです。
| 制御方法 | 最大数 |
|---|---|
| ポテンショ入力(0-5[V] アナログ値) | 4個 |
| エンコーダー入力(最大入力4,000pps以下) | 3個(ソフトウェアカウンターによる) |
| エンコーダー入力(最大入力4,000pps以上) | 1個(ハードウェアカウンターによる) |