フリースケールの「DEMOQE128ボード」によるマイコン制御の基礎を解説。3軸加速度センサを使ったサンプル開発にも挑戦!!
皆さんの身の回りは、コンピュータを使ったシステムであふれ返っています。
一見するとPCなどを使った“分かりやすいシステム”に目を奪われてしまいますが、普段皆さんが何げなく使用している自動車や携帯電話、情報家電、さらにはロボットに至るまで、実際には“組み込みのコンピュータ・システム”がその大半を占めています。
本連載では、こうした組み込みの世界とその魅力を分かりやすくお伝えすることを目的に、8ビット・マイコンを使った制御プログラミングの基礎について解説していきます。組み込みになじみのない方にも理解していただけるよう配慮していきますので、この機会に組み込みの世界にぜひ足を踏み入れてみてください。
連載第1回となる今回は、制御用マイコン・システムでどんなことができるのか? どのようにプログラムを開発するのか? など、マイコン制御プログラミングの概要についてデモを交えながら説明していきます。なお、本連載ではフリースケール・セミコンダクタの「DEMOQE128ボード」と「CodeWarrior Development Studio for Microcontrollers」を使用します。
ご存じのとおり、コンピュータ・システムには、「入力」「出力」「演算」「制御」「記憶」の5大機能があります。これは、8ビット・マイコンを使った制御用組み込みシステム(以下、マイコン・システム)でも同様に当てはまります。
図1にマイコン・システムの構成を示します。
――コンピュータ・システムはヒトに似ています。
ベテランエンジニアの方であれば当たり前のように図1に示した構成を理解していることと思いますが、マイコン初体験で不安を感じている方はこのように考えてみてください。
いかがでしょうか? このように人間のカラダと対比してみると親しみやすく感じませんか?
――突然ですが、
『お風呂を沸かすとき皆さんはどのような作業を行いますか?』
まず風呂おけに水を張ります。目視して適切な水位になったら水道の蛇口を締めて、風呂釜に火を付けます。しばらくたってお湯に手を入れ適切な水温か調べます。ぬるければもうしばらく待ちますし、熱ければ「あっち〜」と叫びながら水を加えることでしょう。そして、ようやく適温になったら「お風呂に入れるよ〜」と家族に伝えます。昔ながらの方法ですが、おおむねこのような作業を行うことでしょう。
“昔ながら”といいましたが、現在ではお風呂の湯沸かし器にもマイコン・システムが使われています。その作業は至ってシンプルで、風呂を沸かすボタンを押すだけです。設定された水位まで水を張り、設定された温度になるまで追いだきをします。作業が終われば「お風呂が沸きました」と音声で知らせてくれます。このマイコン・システムによるお風呂の湯沸かし器において、水位や温度を検知するのがセンサの役目、水の量や釜の火力を制御するのがマイコンの役目です。この例からも分かるようにセンサは、マイコン・システムによる自動制御に欠かせない装置といえます。
ここで、マイコン・システムに欠かせないセンサについて少し触れておきたいと思います。センサは、「速度」「加速度」「温度」「光」「磁気」「放射線」「赤外線」など私たちの身の回りにあるさまざまなモノの量を主に電気信号に変換します(また最近では、においのセンサも登場しています)。さまざまなモノの量を電気信号に変換が可能ということは、機械や電化製品、コンピュータに組み込んで使用できるということです。また、近年では半導体製造技術を用いた「MEMS(Micro Electro Mechanical Systems)センサ(図2)」が主流になっています。半導体のメリットは小型かつ高い精度の検出が可能なことです。半導体MEMSセンサには、「加速度」「圧力」「角速度(ジャイロ)」センサなどの種類があります。
圧力センサは、その名のとおり圧力を検出するセンサで、血圧計、高度計、タイヤ空気圧モニタなどに使われます。また、加速度センサはある単位時間当たりの速度の変化を検出し、1980年ころから自動車のエアバッグなどに多く使われてきました。いまでは「3軸(X-Y-Z軸)加速度センサ」が携帯電話、ゲーム機、医療機器、家電、コンピュータなど、多くのアプリケーションに利用されています。ちなみに、本連載でもこの3軸加速度センサからデータを取り込み応用する演習を行う予定です。
それでは、本連載で使用するDEMOQE128ボード(以下、デモ・ボード)について見てみましょう。このボードも図1で説明したマイコン・システムの構成になっています(図3)。
このデモ・ボードには8ビット・マイコンとして「MC9S08QE128」が採用されています。この製品は、CPUのほかにROM/RAM、周辺I/F、タイマ、クロック・ジェネレータなどが1つのチップに集約された、「MCU(MicroController Unit)」と呼ばれるタイプのものです。入出力装置としては、センサやスイッチ、LED、RS-232などがあります(表1)。そのほかにもプログラムのデバッガがボード上に搭載されており、デモ・ボードとPCとをUSBケーブルで接続するだけでデバッグが行えます。
PCを核に構成されたシステムのプログラム開発は主に同じPC上で開発されますが、マイコン・システム(組み込み開発)の場合は規模が小さく、リソースが限られているため、PC上でプログラムを開発してから、完成した実行形式のプログラムをマイコン・システムのROMにダウンロードする方法を取ります。
また、マイコン・システムのプログラミングと聞くと「アセンブリ言語」をイメージするかもしれませんが、いまでは「C言語」による開発が主流になっています。ターゲットとなるマイコン・システムは8ビットのマイコンで、通常のPCに搭載されているものとはCPUアーキテクチャが異なります。そのため、マイコン・システム開発で使用するCコンパイラはPC上で動作し、かつマイコン・システム用のプログラムを出力できる「クロス・コンパイラ」である必要があります。また、マイコン・システムはリソースの制限が厳しいため、OSを使わないケースが多くあります。そのため、プログラムのメモリ・マッピングなどは、プログラマ側で行う必要があります。
デバッガには、PC上の仮想ターゲットを使ってデバッグする「シミュレータ」とターゲット・ハードウェアにプログラムをダウンロードし、PC側のツールとデバッグ情報を通信してデバッグを行う「リモート・デバッガ」があります。
シミュレータの多くは、センサ入力やタイマ、割り込みなどのシミュレーションができないため、ターゲット・ハードウェアが用意できていない開発初期段階や、処理アルゴリズムのチューニングなどモジュール単位のデバッグによく用いられます。リモート・デバッガには、ターゲット・マイコンのデバッグ機能を利用するもの、ターゲット・マイコンにモニター・プログラムを搭載し、それと通信するもの、ターゲット・マイコンと同機能のデバッグ用ハードウェア「ICE(In-Circuit Emulator)」を利用するものなどがあります。
本連載で使用するCodeWarrior Development Studio for Microcontrollers(以下、CodeWarrior)は、Cコンパイラやアセンブラ、リンカなどのビルド・ツール、デバッガやシミュレータ、エディタ、プロジェクト管理ツールなどを1つにまとめた統合開発環境(IDE)です。ただし、CodeWarriorと一口にいっても機能によっていろいろな製品があります。今回は32kbytesまでのコード・サイズ制限付きながら、無償で利用可能なSpecial Editionを使います(注)。
下記のURLから「Special Edition: CodeWarrior for Microcontrollers」をダウンロード/インストールしてください。なお、原稿執筆時点ではV.6.2が最新バージョンです。
「Special Edition: CodeWarrior for Microcontrollers」のダウンロード: | |
---|---|
⇒ | http://www.freescale.com/webapp/sps/site/overview.jsp?nodeId=01272600610BF1 |
Copyright © ITmedia, Inc. All Rights Reserved.