line

BSDでCNC

MOZボード

3軸のステッピングモータを制御するMOZボードの紹介をします。
line

MOZ(MOtor control with Z80) ボードは制御用に昔懐かしい8ビットのZ80CPUとリード、ライト用に1KバイトのFIFOメモリ、PIOとして8255タイマ/カウンタとして8254を搭載した3軸 ステッピングモータ制御用のISAバスの自作基板です。基本 的な動作はライトFIFOメモリに書きこまれたコマンドに応じて動作を行ない、リードFIFO に応答データをセットします。 動作の中心はX,Y,Z用の3つのステッピングモータの制御です。 これはDDA(2次元で直線を 描くアルゴリズム)を3次元に拡張したプログラムです。指定され た3次元の位置に3つのステッピングモータを制御して直線的に移動させます。ステッピングモータ を回転させるタイミングはタイマ/カウンタ8254からの割込みを利用して移動させます。BSDの ようなタイムシェアリングのシステムで直接ステッピグモータを制御するには無理があるため、デー タの送受信にFIFOメモリを搭載して制御用のZ80CPUと非同期に動作ができるようにしていま す。FIFOを通して通信するコマンドと応答データはシーケンス番号SQとチェックサムCHKに挟さんで送受信し簡単なエラーチェックを行ないます。

MOZボードはコマンドで示されるデータ列がライトの FIFOメモリに書き込まれると、コマンドに応じた動作を行ない、応答データがある場合は応答データを リードFIFOメモリに書きこみます。ライト、リードFIFOメモリは1Kバイトの大きがあるの で、ホストPC側が出力したデータと実際のフライス盤の動作はコマンドの数で80〜100コマンド分ず れていることになります。各コマンドのコマンド総数と応答データ総数が予め分っているので、ホスト PC側は発行したコマンドに応答データがあれば、コマンドを出力した後にリードFIFOを読 みます。ライト、リードともフラグ(ライトはフルフラグ、リードはエンプティフラグ)をチェックして動作 ができなければtsleep()を 発行してシステムにCPUを返します。その後、フル、エンプティフラ グが解除されると割込みが発生し、割り込みルーチンでwakeup()を発行し、再度リード、ライトルーチン の動作が可能となります。


コマンドと応答データのは以下のようになっています。

コマンド番号:41
 動作:現在の絶対位置を通知します
 コマンド総数:3
  コマンド:SQ41CHK
 応答データ:SQ41、Xh、Xm、Xl、Yh、Ym、Yl、Zh、 Zm、Zl、CHK
  応答データ総数:12

コマンド番号:71
 動作:指定された相対座標に速度0からステップで加速しな がら最高速度で移動、減速停止します
 コマンド総数:9
  コマンド:SQ71、 Xh、Xl、Yh、Yl、Zh、Zl、CHK
  応答データ:無し
 

カンマで区切られたデータは1バイトの16進数です。
SQ:1バイトのシーケンス番号(00−FF)
CHK:チェックサム、SQからCHKまで8ビットで加算すると0になるようにCHKを付けます。
相対位置:Xh、Xlの16ビット(signed)で表しま す。
絶対位置:Xh、Xm、Xlの24ビット (unsigned)で表します。基準点は800000hになります。
X、Y、ZはそれぞれX、Y、Z軸を表します。

MOZボードのブロックは以下のようになっています。


 

オレンジ:ホストPCバスに(ISA)接続されている 部分
青緑:Z80のバスに接続されている部分
青:ホストPCとZ80のバス双方に接続されているFIFO メモリの部分



back

line