PIC AVR 工作室->TopPage->資料倉庫->マイコンボードの電源供給

マイコンボードの電源供給

Arduinoの電源供給

マイコンボードの電源供給は、マイコン自体や周辺回路の動作の安定に重要です。掘り下げていくと、 いくらでも深いところまでいってしまうので、身近なところで、Arduinoの電源回路周りを題材にして、 電源周りについて眺めてみます。

Arduino標準の電源供給機能

Arduinoは、言語や、周辺回路(シールド)との接続といった辺りも含め、初心者やアーチストなどの、 それほどマイコンに詳しくない人でも扱えるように作られています。そのため、電源回路についても、 あまり複雑なことを考えずに使えるように工夫されています。それっぽく繋げば、それっぽく動くようになっています。

一方、PCのUSB端子は、最大でも500mAまでしか供給できません。PCにArduinoを直結する場合、ごく省電力なモータであれば、 この程度でも給電が足りる場合もあります。しかし、大抵のモータでは、通常は外部電源を使うことになります。 このように外部電源を利用する場合、オンボードのレギュレータを利用するかどうかが、配線の際の判断の選択肢に挙がります。

オンボードレギュレータの利用

Arduinoのオンボード5Vレギュレータは、大抵のボードで1A程度が供給できます。 たとえば、Arduino Uno に載っているレギュレータNCP1117は、 1Aまで供給可能です。

NCP1117のドロップ電圧は1V前後なので、余裕も加味しつつ、通常はDCコネクタに7V以上の電源を供給すると、 その外部電源が供給できる電流量と同じだけの電流が、Vcc端子から5Vが供給できます。 例えば、9V500mAを供給するACアダプタをArduinoに繋ぐと、NCP1117を通して、5V500mAまで利用可能ですが、 同じ9Vでも、9V1A以上の電流が供給可能なACアダプタを繋げば、NCP1117は5V1Aまで利用できる、といった具合です。

(なおこれは、NCP1117が十分に放熱対策がとられているという前提の話です。詳しくは後述)

モータなどを動かす電力供給

Arduinoに、モータなど比較的大電流(大電力)が必要なパーツをつなぐことを考えてみます。

比較的入手が容易な、模型用の小型DCモータは、1.5V電圧で数百mA程度で回すことができます。 例えば130モータでは、 無負荷時で0.2Aくらい、負荷を掛けた状態の定格は最大0.66Aまでとなっています。 しかし、こうしたモータは、始動の瞬間にはもっと大きな電流が流れます。具体的には、130モータの場合、 (データシートによると)2.2A程度の電流が瞬間的に流れます。

このため、NCP1117で作られた5Vからの給電(+PWM制御)でモータを回そうとすると、少し無理があります。 そのため、以前の、DCモータを回してみる実験では、 ArduinoのVcc出力端子を使わずに、外部から5V電源を別途接続して、この5V電源からArduinoとモータドライバの双方に電源供給していました。

このような、比較的大きな電力(電流)が必要な場合、どのようにしたらよいでしょう?

0.5A~1A程度の機器の場合

まず、オンボードのレギュレータ、NCP1117で足りるようなケースを考えます。

オンボードレギュレータの放熱

0.5~1A程度の電流が取り出せる外部電源(安定化されていなくてもよい)を、Arduinoの「DCコネクタ」や、 「Vin」端子に接続すれば、ピンソケットのVcc端子から5V0.5A~1Aの「安定化された電源」として供給することができます。 この5V電源を、モータドライバやオーディオアンプ回路などに供給すれば、それらをドライブすることができます。

ただし、放熱について考えておく必要があります。NCP1117はいわゆる「シリーズレギュレータ」なので、外部電源と5V出力の差分は、 熱として捨てることで「安定化」しています。放熱量は、

(外部電源電圧 - 5V) × (取り出す電流)

で計算されます。例えば、9V電源を繋いで0.5Aを取り出す場合なら、(9-5)×0.5 = 2Wが、熱として捨てられることになります。 9V電源の場合、44%以上が熱として捨てられるので、効率はおよそ55%程度です。 その際、レギュレータIC自体が熱を持つので、放熱対策が必要になります。

放熱の方法

一般には、放熱フィンをIC(NCP1117)に取り付けたり、さらにはファンで強制的に風を送って冷やすといった対策が必要です。 何の放熱対策もとっていないレギュレータICは、1W程度の発熱でも故障する場合があります。

ArduinoオンボードのNCP1117は、放熱フィンは付いていませんが、表面実装タイプのNCP1117が、 基板上の放熱用ランドに接するように取り付けられています。そのため、多少は基板上のランドから放熱できるのですが、十分とはいえません。

放熱フィンなどを使わず、故障させずに稼動するには、取り出したい「5V」と外部電源電圧の間の「差」を小さくとることが必要になります。
(レギュレータ自体の電圧降下約1V前後も加味する必要があるので、7V程度の電源を用意できるとよいのですが、 7VのDC電源は、汎用品ではあまり見当たりません。また、ぎりぎり6Vくらいの電源を使うと、レギュレータの動作安定性を損ねたり、 USBケーブルからの5V電源とぶつかる恐れもあるので、7V以上を使うようにしてください)

オンボードのレギュレータを使って5Vを外部に供給する場合、できるだけNCP1117に放熱フィンを取り付けるなどしてください。

なお、「NCP1117」のようなシリーズレギュレータは、電圧の差分を「熱」として捨てて電圧を調整しているので、 上記のようにエネルギー効率が良くないというデメリットもあります。

1A以上の機器の場合

次に、オンボードのレギュレータでは足りない場合を考えます。

1A以上を取り出す場合、もしくはそれ以下でも放熱が追いつかない場合は、オンボードレギュレータでは能力不足になるので、 より大出力の外部電源でまかなう必要があります。

最近のワット級の電力を供給するDC電源は、 インダクタ(コイル) を使ったスイッチング電源回路を利用しているDC-DCコンバータが多く見られます。 携帯電話の充電用アダプタも、 中身はこうした動作で動いています。

Arduinoと組み合わせる場合、DCコネクタかVin端子に7V以上の電源を繋ぐか、 (PCとUSBケーブルで接続していない場合であれば)Vcc端子に5Vの電源を繋いで使います。
こうしたスイッチング電源を利用する場合、どのように接続するのかといったことは、後ほどあらためて。

(昔は商用の交流100V電源から5Vとか9Vに変換するのに、トランスを内蔵したACアダプタも多く見られましたが、 変換効率が良くないことと、サイズが大きくなることから、最近ではトランスを使うものはあまり見られません)

スイッチング電源の概略

シリーズレギュレータとスイッチング電源

シリーズレギュレータも、DC電圧を別のDC電圧に変換するので、広い意味ではDC-DCコンバータですが、 「スイッチング電源」は、動作原理が大きく異なります。

インダクタは、電流が流れたときに、その電気のエネルギーを一旦「磁束」という形に変換して、 エネルギーを短時間貯蔵する貯蔵庫として機能します。そして、溜めたエネルギーを取り出す際に、 電圧を上げたり下げたりといったことが、比較的自由に行えます。
(直流抵抗ゼロの理想的なインダクタは、電気を溜めたり吐いたりするときに、熱としてエネルギーをロスしない)

スイッチング電源の動作イメージ

図は、昇圧動作を行う回路の動作概略です。

このインダクタに「溜める/取り出す」といったスイッチング動作は、 トランジスタを短時間「電流のオン/オフ(スイッチング)」することで制御しますが、 この短時間で電流をオン/オフする動作を「チョッパ」(切り刻む)といい、 オンとオフの時間の比率を調整して溜めるエネルギーを加減(フィードバック制御)し、出力電圧が一定になるように制御します。

なぜ昇圧できるのか

インダクタは、急激に電流量を増やしたり減らしたりできないという特性があります。 (この電流量の変化のしにくさをインダクタンスといい、単位は「H(ヘンリー)」です)

トランジスタをオンにして、インダクタに電流を流すと、電流量がゆっくり増えながら、 電荷が持っていたエネルギーが「磁束」の形に変わって、インダクタ周辺に蓄えられていきます。 その後トランジスタをオフにして電流を急激に遮断しようとすると、インダクタは「それまでと同じだけの電流を流し続けよう」とします。 そのため、溜めた磁束を逆方向に開放して電流にして、「インダクタ→ダイオード→負荷→電源」のループに、 これまでと同じ電流量が流れるように電圧(逆起電力)が発生します。 そしてこの電圧は、元の電源電圧に上乗せされる形になります。

短時間にチョッパ動作を繰り返してインダクタに逆起電力生じさせて、ダイオードを一方向にだけ流すポンプとして使い、 平滑ダイオードに溜めて平滑化します。こうして、電源電圧に「+α」した電圧を負荷に掛けることができるわけです。

回路の構成を変えると、降圧型にしたり、オペアンプなどに使う「負電圧」を作るといったことも可能です。

なぜ効率がいいのか

シリーズレギュレータは、たとえて言えば、負荷に掛かる電圧をモニタしながら、 負荷と直列に繋いだ抵抗の大きさを変化させることで、負荷にかかる電圧を一定に保とうとするものです。 そのため、この抵抗にあたる部分(実際は半導体)が発熱して、エネルギーのロスに繋がります。

一方、スイッチング電源の場合は、インダクタ(=直流抵抗がほぼゼロ)とトランジスタ(一種のスイッチ)を使っていますが、 これらはともに、直流抵抗がゼロか無限大のどちらかの状態しかありません。ゼロなら熱になって失われる分もゼロですし、 無限大の状態では電流が流れないので、やはり熱として捨てられることがありません。

降圧型や負電源の場合は、インダクタやトランジスタの配置が異なる回路構成になりますが、 やはり電流のチョッパの幅を制御することで電圧の高さを調整する点では一緒です。 (このような「電源回路の構成」のことを「トポロジ」といいます)

実際は、インダクタやコンデンサには、微小な直流抵抗性分があって、少しだけロスが生じます。 またダイオードでは「Vf(電圧降下)」と「電流」を掛けた量の発熱が生じるので、ロスになります。 また、インダクタには溜め込める磁束の量に限界があったり、小さいインダクタ(コイルの導線が細い)は直流抵抗も大きめになるので、 大電力を扱う場合には大きなインダクタが必要になり、DC-DCコンバータ回路全体のサイズにも影響します。 さらには、インダクタに溜めたはずの磁束が漏れて、周辺回路などにノイズとして飛び火して電流に変化すると、 その消費分もエネルギーロスになります。

市販のスイッチングレギュレータは、直流抵抗成分が小さい部品を使ってロスを減らしたり、磁束が漏れにくい形状のインダクタを使ったり、 ダイオードの代わりにMOS-FETなどを使って動的にオンオフ制御することでVf分のロスを減らすなど、工夫が盛り込まれています。

スイッチング電源のメリット

インダクタを使ってチョッパ制御で電圧を変換する場合、原理上、シリーズレギュレータのように熱として捨てる必要がないので、 高効率に変換でき、また発熱も抑えられます。現実的なスイッチングレギュレータは、低めのものでも効率70%くらい、 モノによっては95%を超え、ほぼ100%に近い効率を出すものもあるようです。(特に降圧型タイプ)

加えて、「インダクタやトランス」は、周波数が高ければ高いほど、同じだけの電力を扱うのに必要な「物理的なサイズ」を小さくできます。
商用100V電源が50Hzと低いのに対して、DC-DCコンバータのチョッパ回路が扱っている周波数は、 100kHz~数MHz程度と、桁違いに高いため、回路全体を小型化できます。

トランスを内蔵している昔のACアダプタは、数ワットでもこぶし大サイズ以上ですが、 スイッチングタイプは、携帯電話充電用の数ワット級のものなら最近では3cm四方からありますし、ノートPC用の数十ワット級電源でも10cm程度です。 回路の各所で使うような「局所的な小型DC-DCコンバータ」も、さまざまなものが製品化されています。

また、乾電池や充電池を電源に使う場合、残量が少なくなるに従って電圧が下がってきます。 このように、電圧が安定しない電源を使う場合に、DC-DCコンバータを使うことで、 電圧を安定化できます。その際、シリーズレギュレータよりも、スイッチング電源のほうがエネルギー的に高効率です。

つまり、「高効率・小型」で、かつ電圧は「安定化」されており、使い勝手がよくなっています。

外部電源の配線

大電力(電流)が必要な機器と、Arduino、外部電源を接続する場合、配線の考え方は2パターンほど考えられます。

外部機器と電源を共用する場合

一つは、外部電源をArduinoの「Vin(もしくはVcc)」「GND」に接続して、Arduinoにも電源を供給するのと同時に、 外部の機材にも電力供給するという方法です。

この場合、外部電源が5Vの場合にはVcc端子に、7~12V程度の場合はVin端子(またはDCコネクタ)に、それぞれArduinoに電源を供給し、 同時に外部機器にも電源を供給するという感じになります。

Vin端子(やDCコネクタ)に繋ぐのは7V以上の電源とします。ArduinoのVinには、6.6V以上の電圧が供給されていると、 USBから5Vが給電されていても、USBからの給電経路は遮断されて、「Vin→レギュレータ」経由で、Vcc端子に5Vが供給されます。

また、図には記入していませんが、DCコネクタに給電した場合、そこから逆流防止ダイオードの電圧降下分を引いた電圧を、 Vin端子から取り出すことが可能です。そのため、あまり多大な電流でなければ、DCコネクタに電源を供給しておいて、 外部機器への給電はVin端子から取り出すといったことも可能です。

また、外部から5V電源を繋いで供給したい場合は、スケッチを書き込んだあとでPCとUSBケーブルを切り離してから給電するか、 もしくは次のようにArduino基板と外部機器で独立した電源供給を行うようにします。 (外部電源からVccに5Vを給電しつつ、USB端子も接続してしまうと、外部電源の5V出力と、PC内部の5V出力がぶつかってしまい、 場合によっては故障の元になる可能性があります)

なお、電力消費の変動が大きい「モータなど」の外部機器を繋ぐ場合、電源電圧を大きく変動させたり、 電源にノイズを混ぜ込んでしまう恐れがあります。 そうした電源をArduinoに繋ぐと、誤動作やアナログ信号のノイズ成分の原因にもなりうるので、そういう場合、 次のように電源を分けておく方が安全でしょう。

独立した電源を用意する場合

もう一つは、ArduinoのCPU自体にはUSBケーブルなどで独立して電源供給しながら、外部機器側にはそれに合う電源を供給するという方法です。

この場合、制御信号のやり取りを行う(電圧の高低を伝える)ために、「GND」端子だけを共有します。 Arduino側と外部機器側で、それぞれ別の電源が必要になりますが、電圧・電力は外部機器にあわせて自由に選べます。
(ArduinoにUSB経由で5Vを、外部機器に3Vの大電流タイプを使うなど)

どんなスイッチング電源を使うか

出力の電流量についてバリエーションを探したり、長期間に耐える耐久性を考えると、品揃えは用途に合わせて多いに越したことはありません。

RSコンポーネンツ を眺めてみました。「Cosel社製の数ワット~数十ワットのDC-DCコンバータ」みたいな定番のものから、 「スイッチングレギュレータ(3端子のシリーズレギュレータと置き換えて使える高効率DC-DCコンバータ)」 「絶縁型DC-DCコンバータ(基板上に取り付けて使う、GND線を共用せずとも使用可能なDC-DCコンバータモジュール)」など、 秋葉原の店頭で見つからなさそうなものまでそろってました。

小さなモータを1個・2個程度動作させるなら、秋葉原で売ってるようなちょっとしたDC-DCコンバータ電源程度でも事足りますが、 たくさんのモータを同時に制御したりすると、電力や電圧の安定性が、作るものに必要十分なものを使わないと、 妙な不調で悩まされることになったりします。
(昔、初めて設計した赤道儀の電源回路がイイカゲンだったので、色々と嵌ることがありました。電源大事。ホント)

自作マイコン基板の電源

なんらか特定の用途用にマイコン基板を作る場合、その電源をどうするかという点で考えてみます。

ボードに特化した電源だけでよい

上記で見てきたように、Arduinoのような汎用基板では、外付けする機材によって消費電力も必要となる電圧も異なるので、 それらの機器と柔軟に接続できるように電源回路が工夫されています。

そのため、小電力で済むような動作の場合は、スケッチの書き込みに使うUSBケーブル経由で、PCから周辺機まで電源供給できるようになっており、 一方で、大電力が必要な機器の場合は、DCソケットに外部電源を繋いでおくと、PCとの通信機能は残したまま、 電源供給だけDCソケット経由に自動で切り替わるようにできています。

(Arduinoは、このような「フールプルーフ」ともいえるような、扱いやすい電源設計になっていることが、 普及を後押ししてきた一因になっている思います)

このように汎用的な用途に用いられるArduinoのような基板では、こうした機能は便利ですが、何か特定の用途に使う基板の場合、 最初から消費電力や必要な電圧の種類などは決まっているでしょう。そのため、Arduinoのような諸々の便利機能は、 必要が無ければ載せなくてもよいといえます。

個別事情を踏まえて設計する必要がある

しかし、便利機能は要らなくても、個々のマイコンボードは、利用するシーンによって、制約事項が色々と存在します。 たとえば、持ち運ぶ機器であれば電池の大きさや重さ、稼働時間など、オーディオ機器であればノイズに関する性能などで、 色々な条件・制約があるはずです。

マイコンボードの場合、どのマイコンを使うにしても、マイコン自体が必要とする電源(5Vだったり3.3Vだったり)は必ず必要です。 この電源をどこから持ってくるのかは、一見単純で、でも利用シーンなどを踏まえて考え始めると、 いろいろと考慮しないといけない点が出てきます。

AC-DCアダプターが利用できるのか、それとも持ち運べるように電池で動かすのかといったことや、 さらには、電池の場合は「乾電池」なのか「充電池」なのかといったことも、 電源回路の設計の上で制約になったり、使い勝手に大きく影響したりします。

また、音声信号や熱伝対のような微小電圧といった、「ノイズの影響が大きい」情報を扱う回路では、 如何に電源のノイズを減らすかといったことも重要になります。

このような、ボードに固有の「個別事情」を存分に取り入れて設計する必要があります。

どんなことを考慮するか

小電力のデジタル回路の場合や、安定化電源が存分に利用できる環境なら、あまり難しいことは必要ないでしょう。

小さい電力なら、プログラムを書き込む際も動作させる際も、PCからのUSB電源だけで動かせる場合も多いでしょう。 Arduinoやmbedに小電力な周辺回路を取り付けて動かすような場合は、その典型例といえます。 このような、”実験室レベル”の使い方なら、あまり困ることは多くないでしょう。

一方、大きな電力を使う機材を繋ぐ場合、PCからの供給に頼ることはできないので、適宜外部電源を使います。

その際、その外部電圧がマイコンの電源電圧より高い場合は、 シリーズレギュレータを使って5Vや3.3Vに降圧・安定化して供給すればよいでしょう。 モータなどの周辺回路に比べ、マイコン自体が消費する電力は元々小さいので、 シリーズレギュレータのロス分(絶対量)は、微々たるものだからです。

外部電源がマイコンの電源電圧より低い場合は、DC-DC昇圧コンバータでマイコン用電源を確保するなどが必要になります。
(そうしないと、PCに繋いでいる間は動くけど、PCから取り外すとCPUに十分な電圧が供給されなくなるなど)

乾電池や充電池を使う場合は面倒

厄介なのは、電池などを使って、電圧が使用に従って徐々に下がっていく場合です。

特に、この電圧が5Vや3.3Vなどのマイコン電源電圧(+レギュレータの降圧分)を跨ぐように変化する場合、利用するDC-DCコンバータは、 昇圧型でも、降圧型でも都合が良くありません。

例えば、単3電池4本=6Vを供給して、5Vのマイコンを動かす場合、新品の電池では降圧型のDC-DCコンバータが必要ですが、 電池が消耗してくると、今度は昇圧動作が必要になります。

昇降圧型のDC-DCコンバータ

このような場合は、「昇降圧型のDC-DCコンバータ」というのを使うのがよいかと思います。ただし、動作が少々複雑となるため、 こうしたDC-DCコンバータは少し高くなりがちなのと、電源回路の面積(フットプリント)も大きくなりがちです。

昇降圧型のDC-DCコンバータを大別すると、出力電圧を監視して「昇圧動作」「降圧動作」のトポロジを自動で切り替えるタイプと、 「SEPIC型」 のようにトポロジは変えずとも入力電圧を跨ぐような出力電圧を生成できるタイプがあります。

後者は、動作モードが途中で切り替わらないので、大元の電池の電圧変化に関わらず、出力側の電圧は比較的安定します。 しかし、SEPICの回路を眺めると、変換回路の途中部分のコンデンサに、大電流をチャージ→放電という動作を、 100kHz~数MHz程度で行う部分が出てきます。こうした動作は、コンデンサの発熱をおこすなどして、寿命に影響します。 また、SEPICではインダクタを2回通過するので、その分発熱によるロスが大きくなります。

一方前者は、動作モード(トポロジ)が切り替わる付近で、多少なりとも電圧の出方に変化が生じます。 端的に言うと、電圧に若干のノイズが載ることになります。

こうした電源を用いる場合、デジタル動作だけの回路なら、あまり問題はありません。 しかしADCなどアナログ信号を扱うと、とうぜん電源ノイズに影響を受けてしまいます。

こうしたノイズを避けるには、一旦電源電圧より高めに設定しておいて、シリーズレギュレータで安定化させて、 アナログ回路周りに給電するのが効果的です。 しかしそれなら、最初から昇圧型を使ったほうが楽だった、ということにもなりかねません。 何を拾って、何を捨てるのかを考慮して、電源を選択する必要があります。

終止電圧も気にする必要がある

電池が消耗すると、どこかで動作を停止させる必要があります。

乾電池であれば、ある程度消耗した段階で停止させないと、中途半端に低い電圧になったところで、 マイコンが異常な動作を行うことが予想されます。そのようになる少し手前で、自分自身の動作を停止させて、 異常なモードに突入しないようにモニタ・制御する必要があります。

充電池の場合、電源電圧を監視することは、さらに重要な意味があります。

ニッケル水素電池やLi-Po電池などの充電池は、過放電すると寿命が著しく低下することが知られています。 それぞれの終止電圧を踏まえて、寿命を縮めないようにきちんと停止させる必要があります。

ニッ水とアルカリ電池の両方使える機器に注意

ちょっと困ってしまうのは、ニッ水電池と乾電池(アルカリ電池)の両方を両方利用できる機器でしょう。 ニッ水電池は、満充電で1.2Vちょっとあり、消耗時に1.0V程度まで下がります。 想定誤差や、電池の個体差、温度による電圧の変化などを踏まえると、少し高めの1.0~1.05V程度で停止すると安全でしょう。

一方、アルカリ電池など乾電池は、新品で1.5V程度で、消耗時に0.9~0.8Vくらいです。 さらに、ニッ水電池に比べて内部抵抗が大きいため、チョッパ回路など大電流を取り出す場合、 内部抵抗による電圧降下分だけ電圧が下がって見えてしまいます。 そのため、乾電池を使う場合は、監視電圧としてはもう少し低めに設定して、もう少し下のぎりぎりの電圧まで搾り出したいところです。

でも、電池の形状はどちらも同じ「単三型」なので、マイコン自体はどっちの電池が入れられているのかは判断できません。 ユーザに、どっちの電池を使っているのかを選択(入力)させる機器もよく見かけますが、 ユーザが設定を間違えたり忘れたりすると、充電池にダメージを与える恐れがあります。

かといって、ニッ水と同じ終止電圧に設定すると、残量がまだたくさんあるのに「バッテリーが空だよ!」と認識して停止してしまい、 中途半端に減った乾電池を量産することになります。単三アルカリ電池も使えるデジカメで、撮影枚数がニッ水よりも少なくなるのは、 こういった事情によります。

最適解はないので、何かを拾って、何かを捨てる、割り切りも必要かもしれません。

これらで全部ではありませんが、こうしたことも含めて、多面的な視点で、電源供給・電源制御を検討する必要があるでしょう。