Howto

Armadillo-460でPC/104接続のパルスモータコントローラボード(梅沢無線電機 HT3035)を使用する

Armadillo-460のPC/104バスにパルスモータコントローラボードHT3035(梅沢無線電機製)を接続して使用する方法を紹介します。

HT3035は、1ボードで4軸制御可能なPC/104接続のパルスモータコントローラボードです。HT3035の詳細な仕様等は、梅沢無線電機ホームページでごらんください。

Armadillo-460にPC/104ボードを接続して使用する場合、そのボード専用のデバイスドライバを作成するというのが、本来の方法です。しかしながら、Linuxカーネル用のデバイスドライバを作成するのはなかなかハードルが高い作業です。そこで、本Howtoではサンプルプログラムをユーザーランドで動作するアプリケーションプログラムとして実装します。このように、Armadillo-460では簡単なPC/104ボードであれば、デバイスドライバを作成せずとも、制御することができるようになっています。

以下はサンプルアプリケーションの主な仕様です。

  • 1軸または複数軸を+方向に定量/連続ドライブ可能
  • 速度カーブは、定速/直線加減速/完全S字加減速を指定可能
  • 割り込みは未使用
  • I/Oベースアドレスは0x280固定(出荷デフォルト)
  • 論理位置を表示可能

本Howtoでのおおまかな手順は以下のようになります。

  1. 事前準備
  2. サンプルアプリケーションの取得とビルド
  3. サンプルアプリケーションの転送
  4. サンプルアプリケーションの実行

動作確認に使用したソフトウェアは以下の通りです。

Armadillo-460に関連するマニュアルの最新版は、製品マニュアルからダウンロードすることができます。

1. 事前準備

1.1. HT3035のジャンパ設定を確認する

HT3035ではPC/104のI/Oアドレス空間のどこを使用するか、ジャンパで設定できるようになっています。今回のサンプルアプリケーションでは0x280から0x28eを使いますので、ジャンパ(JP1)が以下のように設定されていることを確認してください。設定値はHT3035基板上にシルク印字されています。

JP1:

ピン 設定値
A10 0
A9 1
A8 0
A7 1
A6 0
A5 0
A4 0

その他の設定をする場合は、ソースファイルの以下の行に定義されているI/Oベースアドレスを編集する必要があります。

ht3035/ht3035.h

#define HT3035_BASE (0x280)

また、HT3035では加減速ドライブ中に定速が開始された場合など、いくつかの要因で割り込みを発生させることができますが、今回のサンルアプリケーションでは使用しません。JP2が全てオープンに設定されていることを確認してください。

JP2:

ピン 設定
IRQ2 オープン
IRQ3 オープン
IRQ4 オープン
IRQ5 オープン
IRQ6 オープン
IRQ7 オープン

1.2. Armadillo-460にスペーサを取り付ける

HT3035を接続する前に、Armadillo-460の四隅に付属のスペーサ(15mm)を取り付けてください。PC/104用のピンは比較的長いため、スペーサを取り付けていないとボードの重みでピンが曲がってしまうことがあります。

1.3. HT3035をArmadillo-460に接続する

最後に、Armadillo-460に電源が入っていないことを確認してから、HT3035をArmadillo-460に接続してください。

以上で事前準備は完了です。

2. サンプルアプリケーションのビルド

サンプルアプリケーションのソースコードアーカイブは、http://download.atmark-techno.com/armadillo-460/sample/ht3035.tar.gz から取得できます。wgetコマンドで開発PC上にダウンロードし、tarコマンドで展開してください。

[atde3 ~]$ wget http://download.atmark-techno.com/armadillo-460/sample/ht3035.tar.gz
[atde3 ~]$ tar zxvf ht3035.tar.gz
[atde3 ~]$ cd ht3035
[atde3 ~/ht3035]$ ls
Makefile  ht3035.c  ht3035.h

ht3035.cがソースコード、ht3035.hがヘッダファイルです。ht3035.cの中身を見てみると、コマンドライン引数のパース処理や、レジスタ値の計算以外の処理は以下に示すように単純な処理しか行っていません。これだけで、PC/104ボードのレジスタを読み書きすることができます。

  1. /dev/memをopen()
  2. Armadillo-460のPC/104 I/O空間(8bitアクセス用)をmemmap()
  3. memmap()した空間のうち、HT3035のI/Oベースアドレス分移動した空間へアクセス

サンプルアプリケーションをビルドするには、makeコマンドを実行してください。ファイル"ht3035"が、ビルドによって生成されたサンプルアプリケーションの実行可能ファイルです。

[atde3 ~/ht3035]$ make
arm-linux-gnueabi-gcc -Wall -Wextra -O2 -march=armv5te -c -o ht3035.o ht3035.c
arm-linux-gnueabi-gcc ht3035.o -o ht3035
[atde3 ~/ht3035]$ ls
Makefile  ht3035  ht3035.c  ht3035.h  ht3035.o

3. サンプルアプリケーションの転送

Howto: ftpでファイルを送受信するを参照し、サンプルアプリケーションの実行可能ファイルを開発用PCからArmadillo-460に転送してください。 転送が完了したら、Armadilloの端末上で以下のように実行権限を付与し、パスの通ったディレクトリへ実行可能ファイルを移動してください。

[armadillo ~]$ cd /home/ftp/pub
[armadillo /home/ftp/pub]$ chmod +x ht3035
[armadillo /home/ftp/pub]$ mv ht3035 /usr/bin

※ もし、ビルド済みのatmark-distがある場合は、以下の手順で本サンプルアプリケーションを含んだユーザランドイメージファイルを作ることもできます。ユーザランドイメージファイルをフラッシュメモリに書き込む方法については、「Armadillo-400シリーズ ソフトウェアマニュアル」を参照してください。

[atde3]$ ls
atmark-dist-[version]    ht3035
[atde3]$ cd ht3035
[atde3]$ make ROOTDIR=../atmark-dist-[version] romfs
[atde3]$ cd ../atmark-dist-[version]
[atde3]$ make image

4. サンプルアプリケーションの実行

サンプルアプリケーションの書式は以下に示す通りです。

書式: ht3035 軸オプション 速度カーブオプション [オプション]

オプションのうち、制御する軸を指定する「軸オプション」と、速度カーブを 指定する「速度カーブオプション」の指定は必須です。「速度カーブオプショ ン」では、設定可能な、定速/直線加減速/完全S字加減速の全てでドライブ速 度を指定する"-v"オプションと、初速度を指定する"-i"オプションの指定は必 須です。

軸オプション
  制御する軸を指定します。同時に複数の軸を指定することが可能です。
  -x     X軸を制御します。
  -y     Y軸を制御します。
  -z     Z軸を制御します。
  -u     U軸を制御します。
速度カーブオプション
  速度カーブを決定します。軸指定オプションで指定した軸に対してのみ有効
  です。
  -v, --velocity=NUM
         NUMに(PPS)単位でドライブ速度を指定します。-aや-sオプションを
         指定しなかった場合定速ドライブとなります。定速ドライブの場合
         は初速度よりも大きな値を設定する必要があります。設定可能な値
         は、1から4000000ですが設定値によっては誤差が生じる可能性があ
         ります。
  -i, --initial-speed=NUM
         NUMに(PPS)単位で初速度を指定します。-aや-sオプションを指定し
         なかった場合定速ドライブとなります。定速ドライブの場合はドラ
         イブ速度よりも小さな値を設定する必要があります。設定可能な値
         は、1から4000000ですが設定値によっては誤差が生じる可能性があ
         ります。
  -a, --acceleration=NUM
         NUMに(PPS/SEC)単位で加速度を指定します。このオプションを指定
         し、-s オプションを指定しなかった場合、直線加減速ドライブとな
         ります。初速度をドライブ速度以下に設定することはできません。
         定量ドライブ時の減速度にもこの値が使用されます。設定可能な値
         は、125から500000000ですが設定値によっては誤差が生じる可能性
         があります。
  -s, --s-curve
         このオプションを指定した場合、完全S字加減速ドライブとなります。
         このオプションを指定する場合は、"-a"、"-i"、"-v"が指定されて
         いる必要があります。初速度をドライブ速度以下に設定することは
         できません。
その他のオプション
  -p, --pulse=NUM
         NUMに出力パルス数を指定します(デフォルトは0)。設定可能な値は、
         0から268435455です。NUMに1以上の値を指定した場合は定量ドライ
         ブになります。NUMに0を指定した場合は連続ドライブになり、
         Ctrl-cを押下するまでドライブを停止しません。軸オプションと速
         度カーブオプションが適切に設定されている必要があります。
  -d, --debug
         全ての軸の論理位置とドライブ開始からの経過時間を表示します。
         ドライブが終了した時点で表示を終了します。軸オプションと速度
         カーブオプションが適切に設定されている必要があります。
  -h, --help
         使用方法メッセージを出力してプログラムを終了します。このオプ
         ションは単独で指定することができます。

コマンドの実行例は次のようになります。

定速ドライブ

定速ドライブでは、ドライブ開始から終了まで一定速度でドライブパスルを出 力します。980(PPS)で全軸をドライブする場合は以下のようにコマンドを実行 します。

[a460]$ ht3035 -xyzu -v 980 -i 980

直線加減速ドライブ

直線加減速ドライブでは、ドライブ開始の初速度からドライブ速度までを、一 時直線で加速します。全軸を初速度500(PPS)から、ドライブ速度15000(PPS)ま でを約0.3秒で加速する場合は以下のようにコマンドを実行します。

[a460]$ ht3035 -xyzu -v 15000 -i 500 -a 48333

加速が完了すると、15000(PPS)での定速ドライブになります。

以下では、加速度の計算方法を説明します。加速中の速度(v), 初速度(sv), 加速度(a)と、時刻(t)は以下の式を満します。

v = a * t + sv

上記より、加速度は以下のように求められます。

a = (v - sv) / t = (15000 - 500) / 0.3 = 48333

完全S字加減速ドライブ

完全S字加減速ドライブでは、ドライブ開始の初速度からドライブ速度まで加 速するまでの間、加速度が時間の経過と共に常に変化します。

全軸を初速度10(PPS)から、ドライブ速度40000(PPS)までを約0.4秒で完全S字 加速する場合は以下のようにコマンドを実行します。

[a460]$ ht3035 -xyzu -v 40000 -i 10 -a 200000 -s

加速が完了すると、40000(PPS)での定速ドライブになります。

以下では、加速度の計算方法を説明します(計算を簡略化するために、初速度 は0PPSとして計算します)。

この例で示す完全S字加速では、0秒時点での速度と加速度は0です。0.2秒まで の間に速度は半分の20000(PPC)まで二次曲線で、加速度はaまで一時直線で増 加します。その後、0.4秒までの間に速度は40000(PPS)まで二次曲線で増加、 加速度は0まで一時直線で減少します。

時刻、速度、加速度の関係は以下の表の通りです。

時刻(秒) 速度(PPS) 加速度(PPS/SEC)
0 0 0
0.2 20000 a
0.4 40000 0

加速度は一時直線で増減するため、速度(v), 加速度(a)と、時刻(t)は以下の式を満します。

v = 0.5 * a * t

上記より、加速度は以下のように求められます。

a = 2 * v / t = 2 * 20000 / 0.2 = 200000

論理位置の表示

-dオプションを使用すると、全軸の論理位置と、ドライブ開始からの経過時間 を表示を表示することができます。「軸オプション」で指定した軸のみドラ イブ開始時に論理位置がクリアされます。

[a460]$ ht3035 -z -v 10000 -i 1000 -a 200000 -s -d
Press Ctrl-c to stop display debug message.
--- time --- ---- X ---- ---- Y ---- ---- Z ---- ---- U ----
    0.010115         747         747          11         747
    0.020385         747         747          23         747
    0.030714         747         747          36         747
    0.041031         747         747          53         747
    0.051358         747         747          75         747
    0.061672         747         747         101         747
    0.071986         747         747         135         747
    0.082303         747         747         176         747
    0.092617         747         747         225         747
    0.102929         747         747         284         747
    0.113239         747         747         353         747
    0.123551         747         747         429         747