目次
前
次
マルチプロセッサ化
前章までのシステムで一応走行できるようになりましたが、
何か心に引っかかるものがあり、釈然としない日々が続きました。
電車での帰宅途中に、釈然としないモヤモヤの原因がわかりました。
「既存の技術だけで仕上げて、新しいことへの挑戦がない。」と頭の
どこかにあるのです。
高校生や大学生であれば、既存技術の習得に意味はあります。
しかし、自分は何のために、時間を割いてMCRに挑戦しているのかを自問
すると、新しい挑戦をしたいからです。
ひとつとして、新しいことへの挑戦がないため、大会へ参加する
マシン用ファームウエアを作っても、達成感が得られないのです。
そこで、自分にできる挑戦には、どんなことがあるかを考え、紙に
書き出してみました。
- H8ではないプロセッサを利用してMCRマシンを仕上げる
- H8ボード1枚の値段より、安価なプロセッサを採用する
- カメラに専用プロセッサを割り当てる
- 駆動系に専用プロセッサを割り当てる
- USBだけでデバッガを構成する
- プロセッサを3V程度で動かす
- テスト、デバッグが単純になる構成をとる
上記の5項目程度を満足するために、3個のプロセッサを
利用したマルチプロセッサ化が有効と判断。
マルチプロセッサ化するとしても、漠然としているので3ブロック
に分割してみます。
3ブロックに分けたのは、カメラ処理とその他に分けるよりも
役割がより明確になるように思えたからです。
マルチプロセッサ化するにあたり、各ブロックのプロセッサを
選定しなければなりません。ACTUATOR→SENSOR→BRAINの順で
検討します。
ACTUATOR
ACTUATORは、BRAINからの指示で、DCモータの回転、サーボモータ
の角度、LEDの点灯を制御すれば充分です。
PWMの波形生成を担当すればよいので、ATTiny2313を採用します。
ATTiny2313は、1個\100ですし、PWMの波形生成に必要なタイマー
割込み、シリアルあるいはSPIのインタフェースをもっています。
BRAINからの指示で、PWMのDUTY比を変えられるようにします。
BRAINからの指示は、シリアル、SPIを利用できますが、今回は
シリアルとします。
BRAINの代わりにPCを使い、ACTUATORのハードウエア、ファームウエア
のテスト、デバッグができます。
回路図は、以下となります。
ATTiny2313は、内蔵でクロックをもつので、外付けの発振子をなくせます。
ユニバーサル基板に部品を実装する場合、部品点数を減らせます。
ファームウエアを考えます。
BRAINからの指示を、シリアルで受取り、指定されたチャネルのDUTY比を
変更します。
通信が必要になるので、プロトコルを以下にしました。
- データ転送速度 9600bps
- データ長 8ビット
- ストップビット 1ビット
- パリティ なし
- フロー制御 なし
物理レベルを決めたので、コマンドを規定します。
- コマンド'D' DUTY比とチャネルを設定
- コマンド'S' 全チャネルのDUTY比表示
- コマンド'?' ヘルプ
コマンドの最後は、改行とします。
DUTY比は、10進数2けたで指定し、チャネルは0〜3の整数
とします。
(例) 左DCモータのDUTY比を45%にする場合
D451'\r''\n'
サーボモータのDUTY比だけは、10〜20の整数とします。
DUTY比は、サーボモータの仕様に合わせ、タイマー割込みで20ms
毎に変更します。タイマー割込みは、100μsごとに発生させます。
ファームウエアの大まかな処理は、以下です。
ファームウエアの詳細は、次の章で説明します。
SENSOR
SENSORは、BRAINからの指示で、カメラ(c328)からコース状態を取得し
センサーデータに変換します。
変換したセンサーデータは、BRAINからの指示でポートに出力します。
SENSOR自体のシステム構成は、以下です。
SENSORに利用するプロセッサに要求される性能は、カメラとシリアルで
通信でき、内蔵SRAMが2048バイトほどです。
この条件を満たすプロセッサで、手持ちのものは、ATmega328だったので
採用しました。
ATmega328の値段は、1個¥250(2010年8月現在)です。
内蔵SRAMを利用して、4800バイトの画像データを4800ビットに
2値化し、さらに60バイトのセンサーデータに変換します。これまで
に説明した画像処理のアルゴリズムを利用すると、2048バイトで充分
でした。
BRAINからの指示は、SPIインタフェースを利用します。
SENSORの動作状態がわかるように、LCDを接続します。
実際の走行では、このLCDは接続しません。
テスト、デバッグで利用します。
BRAINに8ビットのセンサーデータを渡します。
28ピンのATmega328ではピン数が不足になったので、8ビットの
センサーデータラッチを付加し、BRAINにデータを渡します。
このように考え、回路は以下とします。
8ビットのセンサーデータラッチとして、ATTiny2313を利用します。
8ビットのデータラッチには、74HC175を2個利用するとよいのですが
部品点数削減で、基板の実装面積を稼ぎます。
ATTiny2313を利用すると、74HC175を2個よりコストは低くなります。
2個のプロセッサを使うので、2つのファームウエアを作成します。
ATTiny2313をmsendrvとします。
このmsendrvでは、次のようにファームウエアを構成します。
msendrvの上位であるATmega328のファームウエアは、次の構成とします。
2つのファームウエアの詳細は、次の章で説明します。
BRAIN
BRAINは、SENSORからセンサーデータを入力し、移動方法を決定します。
確定した移動方法から、DRIVEに与えるパラメータを算出します。
SENSOR、DRIVEのインタフェースでBRAINの動作を考えると以下の接続になります。
MCRの画像処理部門では、プロセッサをH8に限定していないので
好みのプロセッサを採用できます。
今回は、STマイクロエレクトロニクスのSTM8S-Discoveryを採用します。
1枚のボードが\750で販売されていたので、予備を含めて2枚購入して
いたので、これを活用します。
BRAIN、SENSOR、ACTUATORで4個のプロセッサを利用します。
プロセッサの値段は、合計で\1200となり、H8ボード1枚の金額と
比べ、1/4となりました。
マルチプロセッサ化で、MCRマシンに掛ける金額が跳ね上がることも
なく、消費電力を低減できます。
H8のファームウエア開発環境はHEWですが、デバッガと連動しない
ので、作成しては修正し、フラッシュROMの内容を更新する作業を
延々と繰り返さなければなりません。
STM8S-Discoveryは、USBインタフェースをもち、SWIMと呼ぶデバッガ
インタフェースを利用できるので、リアルタイムでファームウエアの
動作を確認できるため、開発が非常に楽になりました。
電源電圧は、5Vあるいは3.3Vを選択できます。今回は、低消費電力を
狙って3.3Vを採用します。
MCRのレギュレーションでは、SUM3の電池を最大8本まで利用できます。
3本をマルチプロセッサ+カメラに、残りの5本をモータに振り向けると
駆動系にはパワフルな動作を期待できます。
STM8S-DiscoveryでBRAINを実現する場合、ファームウエアの概要は次の
ようにします。
BRAINとSENSOR、ACTUATORのインタフェース接続は、下記とします。
チャネル1
CH1_1 NRST
CH1_2 OSCIN
CH1_3 OSCOUT
CH1_4 Vssio_1 0V
CH1_5 Vss 0V
CH1_6 Vcap
CH1_7 Vdd 3.3V
CH1_8 Vddio_1 3.3V
CH1_9 PA3
CH1_10 PA4
CH1_11 PA5
CH1_12 PA6
チャネル1
CH2_1 PE5 nSS(SPI)
CH2_2 PC1/TS1 start-trigger(default usage)
CH2_3 PC2/TS1_load start-trigger(default usage)
CH2_4 PC3 start-trigger(default usage)
CH2_5 PC4
CH2_6 PC5 SCLK(SPI)
CH2_7 Vssio_2 0V
CH2_8 Vddio_2 3.3V
CH2_9 PC6 MOSI(SPI)
CH2_10 PC7 MISO(SPI)
CH2_11 PG0
CH2_12 PG1
チャネル3
CH3_1 Vdda 3.3V
CH3_2 Vssa 0V
CH3_3 PB7 sen7(sensor data bit7)
CH3_4 PB6 sen6(sensor data bit6)
CH3_5 PB5 sen5(sensor data bit5)
CH3_6 PB4 sen4(sensor data bit4)
CH3_7 PB3 sen3(sensor data bit3)
CH3_8 PB2 sen2(sensor data bit2)
CH3_9 PB1 sen1(sensor data bit1)
CH3_10 PB0 sen0(sensor data bit0)
CH3_11 PE7 FLAG(sensor data enable)
CH3_12 PE6
チャネル4
CH4_1 PE3
CH4_2 PE2
CH4_3 PE1
CH4_4 PE0
CH4_5 PD0/LED mode_monitor(default usage)
CH4_6 PD1/SWIM debugger(default usage)
CH4_7 PD2
CH4_8 PD3
CH4_9 PD4
CH4_10 PD5 TxD
CH4_11 PD6 RxD
CH4_12 PD7
新規準備
SENSOR、ACTUATORには、AVRマイコンを利用しているので、USBに接続
できるライターとテストボードを用意しました。
HIDインタフェースのAVRライター
20ピンATTiny2313テストボード
28ピンATMega328テストボード
USB接続5V電源アダプタ
これらのハードウエアがあれば、パーソナルコンピュータのUSBを
2つ利用して、AVRライターとボードの電源を賄えます。
目次
前
次