2016.10.17
マイクロコントローラー回路をどう設計するか
マイクロコントローラーを組み込んだ回路の設計は、少々敷居が高く感じられる。データシートと技術資料だけでも、マイクロコントローラー以前に数百ページもあるからだ。
回路設計に入る前に、マイクロコントローラーに接続されるすべての周辺機器を含む、使用する主要パーツのブロックダイヤグラムを描くことをお勧めする。
ARM Cortex-Mマイクロコントローラー
この記事は、ARM Cortex-M マイクロコントローラーを使用することを想定した回路設計に焦点を当てている。ARM Cortex-M マイクロコントローラーのアーキテクチャーは、いくつかのチップメーカーからいろいろなバージョンで発売されている。
ARM Cortex-Mは32ビットアーキテクチャで、一般的な8ビットのマイクロコントローラーよりも高い計算能力を要する用途に使われる。また、32ビットマイクロコントローラーは大きなメモリーアドレス空間を使用するアプリケーションや、将来、簡単に拡張できるパスを備えた回路に向いている。
ここで取り扱うのは、ST Microelectronicsから発売されているSTM32というARM Cortex-Mマイクロコントローラーだ。もっと詳しく言えば、STM32F4シリーズとなる。
ただし、STM32シリーズは幅が広く、超省電力のSTM32Lも含まれる。STM32F4に対して性能の高いものもあれば低いものもある。最高性能のバージョンはSTM32F7だ。1秒間に10億回の計算ができる。反対に、STM32L0は、1秒間に2600万回の計算しかできない。
下の図1の回路図を見てほしい。この記事で扱うSTM32F4のものだ。
電源の設計
回路への電源供給は、回路設計のなかでももっとも重要な部分の1つだ。電源とグランドの取り方は、後回しにせずに先に考えておくことだ。
マイクロコントローラーで使用する電流は、作動電圧、クロック周波数、I/Oピンの負荷といった数々の要素で決められる。
MCUのVDD電源には、1μFから10nFのセラミックコンデンサーを、電源端子になるべく近い場所に配置しなければならない(たとえば、図1のC7とC8)。さらに追加の4.7μFセラミックコンデンサー(図1のC1)を、ICのVDDを供給するメインの回路トレースの近くに配置する。
アナログ/デジタルコンバーター(ADC)のあるマイクロコントローラーでは、通常は個別の電源(VDDA)とグラウンドピン(VSSA)がアナログ用に備えられている。これらのピンは、とくにノイズのないクリーンな状態にしておかなければならない。
VDDAピンには1μFと10nFのセラミックコンデンサー(図1のC10とC11)を、VDDAにできるだけ近い場所に配置する。ほとんどの場合、VDDAピンにインダクター(図1のL1)を配置して、LCローパスフィルターを作り、よりクリーンなアナログ電圧を供給するようにするとよい。
供給電源が、マイクロコントローラーの最大入力電圧を超える場合は、低損失リニア電圧レギュレーターを使用する。たとえば、テキサスインスツルメンツのTPS795xxは、特に低ノイズで500mAのソースまで対応する。
供給電圧が、マイクロコントローラーが必要とする電圧をはるかに上回る場合は、降圧スイッチングレギュレーターを使用するほうがよい。リニアレギュレーターは、出力電圧に比べて入力電圧がはるかに大きくなったときの損失が大きすぎるからだ。
それでも、スイッチングレギュレーターの出力電圧をリニアレギュレーターで副次的に調整することが望ましい。リニアレギュレーターは、非常にクリーンで低ノイズの電圧を出力してくれるからだ。
クロック
STM32F4は内部クロックでも外部クロックでも作動できる。パワーアップ時のシステムクロックは内部クロック(16MHz)で、システムの初期化後は、ソフトウェアによって外部のクロックが選択できるようになる。
STM32F4のクロックピンは、外部の4から26MHzクリスタル(図1のX1)または、50MHzまでの独立したクロックソースで駆動できる。
データシートの配置ガイドラインは、クリスタルを使用することが想定されている。一般的に、トレースは短く、クリスタルの負荷容量は、クリスタルのメーカーの指示に従うこと。
GPIO
マイクロコントローラーの汎用入出力(GPIO)ピンは、プログラムが可能で、ソフトウェアで入力と出力を切り替えることができる。
たとえば、図1のS1は、入力に設定されたGPIOに接続された押しボタンだ。STM32は内部プルアップ抵抗があるため、外部に押しボタン用のプルアップ抵抗を取り付ける必要がない。たとえば、GPIOの出力は、ここではLEDの点灯に使っている。
ほとんどのGPIOピンには別の機能があり、さまざまなチップ周辺機器が外部の世界にアクセスできるようになっている。
すべての内部機能がすべてのGPIOピンに用意されているわけではない。それぞれに特有の割り当てがあるので、どこにどの機能が割り当てられているかをデータシートでよく確認することだ。
GPIOピンはさまざまな負荷を与えることができ、シンクから25mAのソース電流を流すことができる。しかし、外部のドライブ回路を用いて駆動する機器による負荷を減らすことが賢明だ。たとえば、図1ではMN1でLEDを点灯させている。
STM32には、それぞれのピンごとに最大許容電流が決められている。また、すべてのGPIOピンの合計の電流の上限も決められている。
周辺機器の接続
STM32には、UART、I2C、SPI、USBといったさまざまなシリアル接続機能がある。
例として、図1では温度センサー(U2 – LM75BDP)がI2Cバスを使ってマイクロコントローラーに接続されている。I2Cバスの場合、このバスに接続されているデバイスがオープンドレインドライバーを使っているため、2つのプルアップ抵抗(R2とR3)が必要となる。
センサーのような低速のアプリケーションの場合は、通信に2本の線しか使わないため、私はI2Cを好んで用いている。周辺機器ごとに個別のチップ選択線を必要とするSPIと異なり、I2Cには一意のアドレスがある。そのため、たった2本で複数の周辺機器と接続できるのだ。
図1のSPIバスは、Invensense製9軸モーションセンサーのMPU-9250(U3)と接続されている。MPU-9250には3軸加速度計と3軸ジャイロスコープと2軸磁気探知機が組み込まれている。
プログラム用コネクター
STM32F4には2つのインシステムプログラミング(ISP)インターフェイスがある。シリアルワイヤーデバッグ(SWD)とJTAGだ。低価格版のSTM32にはSWDのみが搭載されている。SWDとJTAGは、マイクロコントローラーではもっとも一般的なプログラミングインターフェイスだ。
まとめ
この記事では、マイクロコントローラーの回路設計について解説した。入力ボタン、LEDの点灯、I2C温度センサー、SPIモーションセンサーを接続したSTM32F4を用いた回路設計を見てきたわけだが、より詳しい説明が必要な場合は、私の「Ultimate Guide on How to Develop a New Electronic Product(新しい電子製品を開発する方法)」を見てほしい。
[原文]