マイコンの基礎

マイコンとは

「マイコン」とはマイクロコントローラ (Microcontroller) やマイクロコンピュータ (Microcomputer) の略の和製英語で, 特定の機能に特化して小型化したコンピュータであり, 計算よりも制御用途として広く用いられている.

現在では, CPU, メモリ(ROM,RAM), I/O コントローラなど, 必要な部品を一つ のパッケージに集積した「ワンボードマイコン」が主流であり,自動車やエア コンなどの家電製品, あるいは玩具などに組み込まれ, 製品の動作を制御する ために用いられる.

マイコン上で動作する制御用プログラムは, 用途に合わせて作成したものを マイコンの ROM などに書き込んで動作させている. そのためマイコンプログラミングにおいては, パソコン上でプログラムを開発し, それをコンパイルした結果のバイナリを ROM に書き込むことになる.

プログラミング言語

現在, マイコンのプログラミングにおいては, C 言語の利用が主流である. ごく一部で Java, C++, (mruby, micropython) などの高級言語が使われている. C 言語と高級言語の一般的な特徴は以下の通りであるが, マイコンは CPU の計算能力, メモリ容量, 電力, 価格といったリソースが 限られているために C 言語が使われることが多かった.

  • C 言語
    • 実行速度が早い. 極限までの高速化もしくは時間厳密性が狙える.
    • 実行時に使うリソースが少ない.
    • コンピュータの都合に沿ったプログラムを強いられ, 開発生産性が悪い.
  • 高級言語
    • 実行速度が遅い. 一方で高速に開発できる.
    • 実行時に使うリソースが多い
    • コンピュータの都合により必要な雑多な処理は言語側が面倒を見てくれる.
    • 表現力が高い (柔軟な記述, 可読性の高さ)

複雑な機能を短期間で開発という場合には C 言語では限界があり, 高級言語が利用されるケースが増えてきている. あらゆるシステムを 1 つのプログラミング言語で作らねばならないことはなく, 様々なプログラミング言語が適材適所で使われている.

マイコンの周辺機能.

マイコンの主要な周辺機能として以下が挙げられる. センサなどをつなげたりするためにはシリアル通信が利用される.

  • GPIO (General Purpose Input/Output):
    • 入出力ポート. ピンポートに接続された信号線を 1 または 0 などの数値にセットして制御する.
  • パルス幅変調 (PWM, Pulse Width Modulation):  
    • パルス幅を変えることで出力される電力電圧を制御する. LED の明るさを変化させたり, ヒーターやモーターを制御することができる.
  • A/D コンバータ:
    • アナログ (Analog) の入力信号をデジタル (Digital) の値に変換する
  • D/A コンバータ:
    • デジタル (Digital) の値をアナログ (Analog) の出力信号に変換
  • シリアル通信:
    • 1 つの伝送路を使い, デジタルデータを 1 ビットずつ順次伝送する通信方式. マイコンに接続されたデバイスと通信するために使われる.
  • その他

パルス幅変調 (PWM)

パルス幅を変えることで出力される電力電圧を制御する. 周期 [s] の逆数が周波数 [Hz] であり, パルス幅と周期の比をデューティー比と言う.

デューティー比を変化させることで, 実効電圧を変化させることができる.

スピーカーから音を出す場合は, 特定の周波数の波 (矩形波) を作れば良い. デューティー比を 50% で固定し, 出力したい音に合わせた周波数を設定することになる.

シリアル通信

シリアル通信は 1 つの伝送路を使い, デジタルデータを 1 ビットずつ順次伝送する通信方式である. 伝送路が 1 つなので低コストで済むが伝送速度は遅い.

⇔ パラレル通信. 複数の伝送路を使って一度に複数のデータを送信する通信方式. 伝送路が複数になるために高コストだが伝送速度は速い.

以下にマイコンでよく使われる代表的なシリアル通信の規格を挙げる.

I2C (Inter-Integrated Circuit)

フィリップス社が提唱した周辺デバイスとのシリアル通信の方式.

  • マスタ側とスレーブ側を分け, マスタ側が全ての制御を行う.
  • 2 本の信号線から構成される.
    • SDA : シリアルデータ入出力
    • SCL : シリアルクロック信号 (送信側と受信側の同期に利用)
  • 信号線にはプルアップ抵抗が必要.
    • プルアップ抵抗の説明は例えばここを参照
  • スレーブの識別にはアドレスを使う.
  • 多数のデバイスを接続する場合にも信号線が 2 本で済む (GPIO ピンを節約できる)
  • 1 バイト転送毎に受信側から ACK 信号を返送し, 互いに確認を取りながらデータ転送を行う.
  • 通信速度は遅い (標準モードで 0~100 kbps)
  • 同じ基板内など, 近距離で直結したデバイスでシリアル通信を行うために使われることが多い.

SPI (Serial Peripheral Interface)

モトローラ社が提唱した周辺デバイスとのシリアル通信の方式.

  • I2C と同様に, マスタ側とスレーブ側を分け, マスタ側が全ての制御を行う.
  • 4 本の信号線から構成される. I2C と異なりデータ入力と出力は別の信号線を用いる.
    • SDI (MOSI): シリアルデータ入力
    • SDO (MISO): シリアルデータ出力
    • SCK (SCLK): シリアルクロック信号
    • SS: スレーブセレクト. スレーブが複数存在する場合には, SS1, SS2, SS3,... というように別々の信号線が必要となる.
  • 信号線にはプルアップ抵抗が必要.
    • プルアップ抵抗の説明は例えばここを参照
  • 通信速度は I2C よりも速い (1~2Mbps).
  • 同じ基板内など, 近距離で直結したデバイスでシリアル通信を行うために使われることが多い.
    • 通信速度が必要な SD カードドライブは SPI 接続することが多い.

UART (Universal Asynchronous Reciever/Transmitter) (RS-232-C)

非同期のシリアル通信. 非同期のためにクロック用のラインは存在しない.

  • 2 本の信号線で構成される (全二重通信)
    • TX: データ出力
    • RX: データ入力
  • クロック同期式と比べて伝送速度は低速 (最大 20 kbps)
  • UART にはクロック信号がないため, 通信をする前に送受信するデバイス間で通信速度 (ボーレート) を決める必要がある.
  • パソコンとマイコンボードの接続などで利用される.

謝辞

本節をまとめるにあたって以下の資料を参照した.

  • 東裕人 (しまねソフト研究開発センター 専門研究員) 「高級言語による 組み込みシステム開発」, 2020/04/08 松江高専特別講義
  • 月刊 Interface 2020 年 1 月号別冊付録, 「コンピュータ手帳 2020」, CQ 出版.