実験 8: ステッピングモーター制御プログラムの作成

実験の概要

本実験では、キーボードからステッピングモータを制御する処理を、Cプログラムとプロセッサにより行う。

ステッピングモータ制御プログラムの作成

キーボードからステッピングモータを制御する処理を、Cプログラムとプロセッサにより実現せよ。

本実験を下記の 1, 2, 3, 4, 5 の手順で行いなさい。
1. クロスコンパイル
2. MIPSマシン・コードからのメモリ・イメージファイルの作成
3. 論理合成
4. FPGAを用いた回路実現
5. ステッピングモータ制御プログラムの作成


なお、本実験で使用するCプログラムmotor.cは、下記のURLからダウンロードできる。

Cプログラムmotor.c:
http://www.ice.nuie.nagoya-u.ac.jp/jikken/hard/j2hard-mips/k08_motor/motor.c
(実験8用のCプログラム)

1. クロスコンパイル

本実験では、図1のmotor.cを使用する(ダウンロード)。
#define EXTIO_SCAN_ASCII (*(volatile unsigned int *)0x0310)
#define EXTIO_SCAN_REQ (*(volatile unsigned int *)0x030c)
#define EXTIO_SCAN_STROKE (*(volatile unsigned int *)0x0308)

#define SCAN_STRORING (unsigned int)0xffffffff

#define EXTIO_PRINT_STROKE (*(volatile unsigned int *) 0x0300)
#define EXTIO_PRINT_ASCII  (*(volatile unsigned int *) 0x0304)

#define TRUE    0x1
#define FALSE   0x0

#define GPIO0 (*(volatile unsigned int *) 0x0320)
#define COUNTER 5

void my_motor();
void ext_out(); 

main() {
  while(1){
    my_motor();
  } 
} 
 
void my_motor() {
  ext_out(8); 
  ext_out(4); 
  ext_out(2); 
  ext_out(1); 
} 
 
void ext_out(unsigned int num) {
  unsigned int i;

  GPIO0 = num; 
}
          
図1: motor.c

クロスコンパイルには、「cross_compile.sh」を使用する。指導書2.2.1節に示した環境設定を行ったのち、図2のようにして、motor.cからMIPSマシン・コードを作成せよ。
cross_compile.sh motor.c
図2: cross_compile.shを使ったMIPSマシン・コードの生成

クロスコンパイルにより、MIPSマシン・コードmotor.binが得られる。

2. MIPSマシン・コードからのメモリ・イメージファイルの作成

本実験では、MIPSマシン・コードmotor.binを使用する。 また変換には、変換プログラムbin2vを使用する。図3のようにして、MIPSマシン・コードmotor.binからメモリ・イメージファイルを作成せよ。
bin2v motor.bin
図 3: bin2vを使ったMIPSマシン・コードのメモリ・イメージファイルへの変換

この変換により、論理合成用のメモリ・イメージファイルrom8x1024_DE2.mifと、機能レベルシミュレーション用の命令メモリのVerilog HDL記述rom8x1024_sim.vが得られる。

3. 論理合成

本実験では、プロセッサならびに命令メモリ、その他周辺回路の論理合成を行う。 論理合成には、bin2vにより生成された論理合成用のメモリ・イメージファイルrom8x1024_DE2.mifと実験6-2で完成させたプロセッサのVerilog HDL記述一式を使用する。

命令メモリのメモリ・イメージファイルrom8x1024_DE2.mifをディレクトリmips_de2-115にコピーし、ディレクトリmips_de2-115にcdして、図4のように論理合成を行う。

quartus_sh --flow compile DE2_115_Default
図4: quartus_sh を使ったプロセッサの論理合成

なお、論理合成には計算機の性能により5分から20分程度の時間がかかる。 論理合成が完了すると、ディレクトリmips_de2-115内にFPGAにダウンロード可能なプロセッサ等の回路一式のストリーム・アウト・ファイルDE2_115_Default.sofが生成される。

4. FPGA を用いた回路実現

本実験では、実験6-2で作成したプロセッサでmotor.binを実行するとどのような動作をするかを観察する。 本実験には、論理合成により生成されたプロセッサなど回路一式のストリーム・アウト・ファイルDE2_115_Default.sofを使用する。 DE2_115_Default.sof を quartus_pgm を用いて DE2-115 ボード上の FPGA にダウンロードし、動作させよ。

今回プロセッサが実行するマシン・コードmotor.binは、DE2-115ボードの汎用拡張IO(GPIO0)に、4-bitのモーター制御信号を出力するプログラムである。

本実験ではDE2-115ボード以外に、情報工学実験第1(ハードウェア)で使用したステッピングモータ駆動回路、ステッピングモータ、直流安定化電源を使用する。

(a) DE2-115ボードのGPIO0に接続されている40ピンケーブルの、ピン番号0,1,2,3から()ステッピングモータ駆動回路のデータ入力ピン0,1,2,3番にそれぞれ配線する。

(b) DE2-115ボードのGPIO0に接続されている40ピンケーブルのピン番号11(GND)からステッピングモータ駆動回路のGNDピンに配線する。

(c) ステッピングモータ駆動回路とステッピングモータ間を基板上のコメントに従い配線する。

(d) 直流安定化電源とステッピングモータ間を基板上のコメントに従い配線する。

(e) DE2-115ボードのクロック供給モードを1000Hzに設定する。

(f) ステッピングモータがDE2-115ボードからの1相励磁方式の制御信号により回転する。

5. ステッピングモータ制御プログラムの作成

キーボードからモーターを制御するプログラムを自由に作成し、実際にその動作を確認せよ。

なお、本実験におけるソフトウェア開発環境では、switch 文を含む C プログラムが正しく動作しないので、switch 文のかわりに、if 文を使用してください。
また、本実験におけるソフトウェア開発環境では、C ソースの記述において、main 関数が、他の関数の記述より前にないと正しく動作しないので、C ソース中で main 関数を最初に書いてください。

参考書


中村一博