GTM-MML4VXJ
Skip to main content

Japan

OSを使わない8ビットCPU - BricRobo

目的と注意事項

本サンプルはBricRoboで開発する際の学習を助けるために公開するものです。本サンプルは現状有姿のまま提供され、本サンプルの使用に関連して生じたあらゆる損害に対して、当社は一切責任を負いません。回路図はオリジナルです。BricRobo学習以外の目的に利用する場合には、 ご相談窓口までご連絡ください。
赤外線信号を作り出すにあたり、インターネット上の情報を参考としていますので参照してください。
参考情報: http://homepage2.nifty.com/stear/doc/QSir.htm

実現する装置

この装置はマイコンで赤外線LEDを点滅させ、赤外線で操縦できるリモコンカー「チョロQハイブリッド!」を動かすものです。製作した実物は図 1のようになります。本来のチョロQハイブリッド!は赤外線を発するリモコンが付属しており、これを使って車を前後左右に操縦することができます。リモコンが発生する赤外線信号と同じものを、本装置のマイコンとソフトウェアで実現して思い通りに自動操縦します。図 2の上部は通常の製品の使い方で、下部は本装置が実現する使い方です。なお、本装置は独自に作成したもので、株式会社タカラトミーとは無関係ですので、当社以外への問い合わせは行わないようお願いします。
※チョロQハイブリッド!は株式会社タカラトミーの登録商標です


図 1 実物の装置


図 2 装置の概要

この装置には以下の特徴があります。

  1. マイコンや周辺回路は秋葉原や通販で簡単に調達でき、開発環境もフリーで手に入るものを使っています。よって、1日あれば同じ物を製作して実験してみることができます。
  2. リモコンと同じ信号を発生するには時間的制約があります。38KHzの搬送波を正確にON/OFFさせて信号を作らないと車は正しく動作しません。搬送波の発生も含めて、全てソフトウェアで実現しています。
  3. 複数台の車を同時に操縦することができます。最大2チャンネルまで1台の装置で操縦できた実績があります。

設計方針

装置を設計するにあたり、以下の方針としました。

  • なるべく安上がりで簡単に実験できるハードウェア構成で、ブレッドボード上でマイコンを並べてジャンパー線で結線するだけで作れるぐらいの簡単さを目指します。マイコンは入手しやすさや開発環境の利便性を考え、Atmel社のAVR8ビットマイコンを使います。
  • 開発に必要なソフトウェア類は無償で入手可能なものを取り揃えることにします。
  • 8ビットマイコンで動くOSを入手するのは難しいため、OSは載せずにマイコンのタイマー割り込みから周期を作ってBricRobo RTE(BricRoboの動作環境)に供給することにします。
  • 赤外線搬送波は38KHzの周波数で矩形波を生成する必要があります。これにはマイコンのタイマー割り込みを使って発生させます。
  • 装置への電源供給は、プログラミング用USBケーブルを通じて供給し、電池等を使わないようにします。
  • 開発言語はC言語とします。C++言語でも実装できますが、BricRoboをC言語で実装した例としたいためです。
  • BricRobo部品の設計では、その他の装置開発にも使えるよう、部品の粒度を考慮します。

装置の回路

本装置の回路図を図3に示します。


図 3 回路図

回路の概要

U1(AE-UM232R)は、USB経由で装置全体に電源を供給し、マイコンのプログラマの役割も果たします。U2(AVR-MEGA88)はプログラミングするマイコンです。U1からプログラミングを行う際には、R1~R4の4本の線で接続を行い、ISP(In-Serial-Programming)による書き込みを行います。
U2には2つのLED(LED1,LED2)があり、LED1は動作インジケータであり、装置の稼働状況を示したり、デバッグに利用したりします。LED2は赤外線LEDで、タイマーにより38KHzの搬送波を生成し、さらに搬送波を0.5ms毎にON/OFFすることにより、車の制御を行います。

部品リスト

装置を組み立てるのに使用した部品のリストを表 1に示します。値段は秋月電子通商のホームページで検索した参考の値段です。合計すると2300円程度で揃えることができます。

表 1 部品リスト
No. 名称 個数 備考
1 Atmel ATmega88P 1 AVR microcontroller 8KB Flash, 1KB RAM
170円
2 AE-UM232R 1 FTDI FT232RL USB-RS232C変換チップ
950円
3 トランジスタ
2SC1815
1 小信号トランジスタIcが100mA以上
20個で200円
4 赤外線発光ダイオード
[OSI5FU5111C]
1 5mm径 ピーク電流が40mA前後
5個で100円
5 発光ダイオード
[EPY3402S]
1 3mm径 動作確認用
5 炭素被膜抵抗
100Ω
5 (茶黒茶金)
100本セットで100円
6 炭素被膜抵抗
1kΩ
2 (茶黒赤金)
100本セットで100円
7 積層セラミック
コンデンサ 0.1μF
1 1μF等、より大きな容量の物でも代替可能
15円
8 ブレッドボード
[EIC-801]
1 400穴タイプ(10x30+4x25)
250円
9 ブレッドボード・ジャンパーコードセット
(オス-オス)
1 9本使用
250円
10 ブレッドボード・ジャンパーコードセット
(オス-メス)
1 2本使用
300円

赤外線到達距離を延ばすための工夫

実際に装置を製作して車を動かすと、赤外線の届く距離が短いことがあります。その時は、赤外線信号を増幅する回路を別に設けてください(図 1の右下の写真) 1mぐらい遠くまで届くようにするには、かなり増幅する必要があります。

ソフトウェア開発環境

開発はパソコンのWindows XP 32bit上で行いましたが、Windows 7 64bitでも実績があります。必要なツールはインターネットから入手することができます。役割と入手先は次の通りです。各ツールの詳しい使い方は省略します。

BricRobo

ホームページから入手できます。無料で使えますのでダウンロードしてパソコンにインストールしてください。自分でモデルを作成するにはEnterprise Architectが必要ですが、同時に入手できる総合ダウンロードへアクセスしてください。
入手先: http://www.fujitsu.com/jp/fct/services/bricrobo/downloads/

AVR Studio

Atmel社が提供する統合開発環境です。マイクロソフトのVisual Studioのシェルをベースにした使いやすいツールで、マイコン動作のシミュレーションまでできるので、実物のハードウェアがなくても、ある程度まではデバッグできます。サンプル開発時はAVR Studio 5というツールでしたが、現在はAtmel Studio 6になっています。Atmel Studio 6でもサンプルのプロジェクトをビルドできることを確認しました。ダウンロードページから記名して無料で入手することができます。
入手先: http://www.atmel.com/ja/jp/Microsite/atmel_studio6/default.aspx

FTDI VCP Driver

USB経由でプログラムを書き込むときに必要なドライバです。
入手先: http://www.ftdichip.com/Drivers/VCP.htm

avrdude

マイコンにプログラムを書き込むソフトです。山形県立産業技術短期大学校 情報制御システム科 千秋ゼミが公開しているツールが便利です。フォーラムに登録するとダウンロードできますが、加えてツールへの感想・フィードバックや、マイコンの情報交換をお願いします。
入手先: http://www-ice.yamagata-cit.ac.jp/forum/

タイマーの使い方

マイコンの2つのタイマーを、BricRobo RTEの駆動と、赤外線搬送波の生成に使っています。


図 4 タイマーの使い方

BricRobo RTEの駆動

BricRoboが生成したコードはBricRobo RTEが駆動します。BricRobo RTEに定周期の駆動を入力するとTaskを駆動し、それに繋がった部品が動作します。今回はOSを搭載しないので、マイコンのタイマー割り込み(タイマー2)でフラグを立て、フラグが立ったらBricRobo RTEを1回駆動する仕組みとします。赤外線をON/OFFする操縦信号は0.5ミリ秒単位で制御する必要があります。よってBricRoboRTEへ入力する駆動も0.5ミリ秒周期とし、これがTaskの1周期の単位となります。つまり、タスクで周期=2(elapse=2)とすると1ミリ秒周期となります。


リスト 1 タイマーからBricRobo RTEを駆動

赤外線搬送波の生成

赤外線搬送波は38KHzの矩形波です。この周期をプログラム的にON/OFFして作るのは得策ではないので、IOポートの先に赤外線LEDを取り付け、タイマー0を使ってIOポートをON/OFFします。そして、プログラムでタイマー0を有効/無効に操作することで、搬送波に載った矩形波を生成することにします(図 5)。


図 5 操縦信号と搬送波の合成

アーキテクチャ

モデリングをする前にアーキテクチャを図 6に示します。車の操縦方法、車の台数を変更できるよう、運転者、チャネル別車操縦信号発生の2つに機能を分割します。また操縦信号で搬送波をON/OFFする機能と、搬送波を発生する機能を分けます。これらを直列に結んでデータを流すと車を制御することができます。


図 6 アーキテクチャ

部品のモデリング

アーキテクチャに対応した部品を図 7に示します。部品がどの機能に対応しているかは追跡線<trace>で示しました。部品間が同じSenderReceiverInterfaceで繋がっているのが分かります。一部の部品はSenderReceiverInterfaceと同じ型の変数を持つことを集約線で表しています。詳しくはサンプル内のEAPファイルを参照してください。


図 7 アーキテクチャに対応した部品

製品のモデリング

部品を組み合わせて作った製品モデルを図 8に示します。GTRとINSIGHTの2つの部品は2台の車を同時に操縦するために並列に挿入しています。LEDは装置の稼働状況を目視確認できるように追加します。Taskは4つあり、TASK02_100msは100ミリ秒周期でLEDを点滅させるのに使用、TASK01_GTRとTASK01_INSは2台の車の信号を一定周期で送信するために使用、TASK00_05msは制御信号を生成するのに使用しています。赤外線信号は4チャネルあり、それぞれ信号の塊を送信する周期を変えることで合成できるようになっており、今回は36ミリ秒(elapse=72)、50ミリ秒(elapse=100)としました。TASKの詳しいシーケンスについてはサンプル中のEAPファイルを参照してください。


図 8 製品モデル

デバッグの方法

この装置は赤外線の信号を正確に生成しないと車がまったく反応しません。よって赤外線を点滅するのに用いるタイマー0が正しく38KHzで動作しているか、操縦信号が0.5ミリ秒の倍数でON/OFFしているかを確認するのが大切です。オシロスコープで赤外線LEDの電圧を観測する方法が最終的には最も理想的ですが、AVR Studioはシミュレーターを内蔵しているので、マイコンがなくても、信号を再生している箇所にブレークポイントを設定し、CPU画面の経過時間を観測してデバッグすることができます。赤外線の搬送波をON/OFFしている部品であるIrSend_ATMLmega88.cのうちリスト 2で示す箇所は、38KHzと500ミリ秒周期で呼び出される箇所です。ここにブレークポイントを張って観測するとデバックしやすいでしょう。


リスト 2 IrSend_ATMLmega88.c

ダウンロード

以上、解説した内容のモデルとソースコードは以下のリンクからダウンロードできます。解凍すると、表 2の内容になっています。CyoroQ.brpをダブルクリックしてコード生成したり、CyoroQ.eapを開いてモデルを確認したりできます。AVR Studio 6でCyoroQATMEL.atslnを開くとすぐにコンパイルできます。

icon-download cyoroq-atmel-sample01.zip(652KB)

表2 サンプルファイル内容
ファイルパス 説明
\CyoroQ.brp BricRoboプロジェクトファイルです。ダブルクリックするとコード生成します。
\CyoroQ.eap BricRoboモデルが入っているEAPファイルです。編集にはEnterprise Architectが必要です。
\CyoroQATMEL\CyoroQATMEL.atsln AVR Studio 6のソリューションファイルです。これを開いてコンパイルできます。
\Makefile.CyoroQ.UsedBlockList.txt.xsl 使用部品一覧を生成するためのXSLファイルです。コード生成時にはMakefile.CyoroQ.UsedBlockList.txtを生成し、この中に記載されたファイルをAVR Studioに登録してコンパイルしてください。
\BricRoboCOM このフォルダをインクルードファイルの検索対象に含めてください。
\BricRoboRTE このフォルダをインクルードファイルの検索対象に含めてください。
\BricRoboRTE\BricRoboControler_.c
\BricRoboRTE\BricRoboTask_.c
BricRobo RTE本体です。コンパイルに含めてください
GTM-M65D8P
GTM-5K47P6