マイクロコントローラの高電圧測定用抵抗の選択方法

APDahlen Applications Engineer

基本的なマイクロコントローラの例では、「電源レール範囲内の」電圧測定を特徴としています。代表的な例は、可変抵抗器の出力の測定です。抵抗の一端はマイクロコントローラの5.0V電源レールに接続され、もう一端は接地され、ワイパ(摺動子)はマイクロコントローラのアナログデジタルコンバータ(ADC)ピンに接続されます。結果として得られる電圧は、グランドとマイクロコントローラの電源レール内に制限されます。

この記事は、電源レール外電圧を測定するマイクロコントローラ用の抵抗を選択するためのガイドラインを提供し、マイクロコントローラを損傷することなく、これらのより高い電圧を正確に測定する方法を学びます。この記事では、抵抗器の選択の最適化に焦点を当てています。

ここでは、一般的に30V DC未満の直流電圧に限定して説明します。交流電圧については、この短い記事では取り扱いません。また、より高い直流電圧の測定では、さらなる安全上の配慮が必要になる場合がありますが、これもこの記事の範囲外とします。

マイクロコントローラのアナログ入力のモデル

マイクロコントローラのアナログ入力のモデルから始めましょう。図1はMicrochip(Atmel)製 ATmega4809 の簡略化されたモデルを示しています。これは、Arduino Nano Everyに搭載されている一般的なマイクロコントローラです。このモデルの主なコンポーネントはサンプルホールドコンデンサです。AD変換が開始される前に、サンプリングされた信号電圧がこのコンデンサに保持されている必要があります。

図1: マイクロコントローラのアナログ入力ピンと、測定される外部電圧の関係を示す簡略化されたモデル

技術的なヒント: 小さな間違いがマイクロコントローラの破壊につながります。R1付近およびより高い信号源電圧には特に注意する必要があります。配線やプローブ操作の間違いにより、誤ってマイクロコントローラのI/Oピンに高電圧が印加される可能性があります。そうすると、電源レールにクランプされているダイオードは少しの保護機能を提供しますが、マイクロコントローラ自体とともに瞬時に破壊されてしまいます。極端な場合には、関連するPCのUPSポートまで、より高い電圧が伝わります。運が良ければPCのポートが損傷し、 運が悪ければ新しいPCを買うことになるでしょう。

このサンプルホールド(S/H)の要件は、次のようなさまざまなマイクロコントローラの構造間の複雑な相互作用によるものです。

  • アナログセレクタであるマルチプレクサの動作。Arduinoの観点から見ると、これはA5とA7などのアナログ入力ピンを切替えるときに動作します。

  • S/Hコンデンサの静電容量。ATmega4809 には、Control C特殊機能レジスタにサンプル静電容量選択ビット(SAMPCAP)があります。データシートによると、「このビットでサンプル容量すなわち入力インピーダンスを選択します。最適な値は基準電圧とアプリケーションの電気的特性によって異なります。」

  • 内部要因。入力ピンのクランプダイオード、抵抗、隣接するピン間の容量性相互作用などのコンポーネントに関連するリークが含まれます。

このコンデンサの電圧と安定性の要件は、入力インピーダンスに重点を置いて時定数の観点から視覚化できます。その結果が、図2に示す簡略化されたモデルです。マイクロコントローラの内部構造は、モーメンタリスイッチとS/Hコンデンサに置き換えられています。 外部信号源電圧と分圧器はテブナンの等価回路に置き換えられました。

図2: 信号源電圧に関連するマイクロコントローラの入力ピンのハイレベルモデル

ADCの変換が開始されると、モーメンタリスイッチが短時間閉じます。これは、S/Hコンデンサが目的の電圧まで充電される「サンプルフェーズ」です。しばらくすると、スイッチが開きます。これは、コンデンサが保持された(サンプリングされた)電圧をADCに入力する「ホールドフェーズ」です。

S/H時間と信号源電圧のテブナンのインピーダンスの間には関連があります。 \tau = RC の関係があるので、正確な測定のためには、 R_{Th} は小さな時定数を提供しなければなりません。ここで、「小さい」というのは、モーメンタリスイッチが閉じている短時間の間にS/Hコンデンサが完全に充電されることを意味します。

技術的なヒント: テブナンの等価回路は、その重要性においてオームの法則に似た強力なツールです。これにより、複雑な回路を理想的な信号源電圧( V_{Th} )と直列抵抗( R_{Th} )として特徴付けることができます。そして、そのモデルを使用して簡略化された計算を実行できます。これには、この記事で説明した時定数が含まれます。

ここで、ATmega4809 データシートに戻ります。いくつかのガイドラインがあります。

  • ADCは信号源の R_{Th} が10kΩ未満になるように最適化されています。

  • 前述のSAMPCAPビットをアクティブにすると、S/Hコンデンサの静電容量を10pFから5pFに減らすことができます。

  • サンプル長(SAMPLEN)制御レジスタは、より高いインピーダンスの信号源のホールド時間を増やすために使用できます。

総合すると、これらの内容は、抵抗器選択の優れた出発点となります。

ADCスケーリング用の分圧器

抵抗を適切に選択するには、テブナン抵抗とともに測定する電圧を考慮する必要があります。

分圧器は次のように定義されます。

V_{Out} = V_{In(Max)}\dfrac{R_2}{R_1 + R_2}

ここで、

  • V_{Out} はフルスケールのマイクロコントローラのADC入力電圧です。

  • V_{In(Max)} はサージや充電電圧を含む測定値の最高電圧です。予想外に電圧が高くなるとADCは飽和します。例えば、10ビットADC が16V DC(Max)信号を測定するようにセットアップされた場合、16V DCより高い全ての電圧に対しては飽和して1023を読み出すでしょう。

分圧器のテブナン抵抗は次のとおりです。

R_{Th} = \dfrac{1}{1/R_1 + 1/R_2}

分圧器が信号源にそれほど負荷をかけないと仮定して計算を簡素化しました。おそらく、信号源のテブナン等価回路の負荷については、別の投稿で調べることができるでしょう

技術的なヒント: ArduinoのデフォルトのADCリファレンスは、Arduino Nano Everyの場合は約5V DCである正の電源レールそのものです。パフォーマンスを向上させるためにanalogReference(Internal)を呼び出して内部の1.1V DCリファレンスも使用できます。 LM4040AIZ-4.1/NOPB などの外部基準電源も使用できます。これらのデバイスは、温度係数が小さく、優れた耐性を備えています。「フルスケール」のADC入力電圧は、それぞれ5.0V、1.1V、および4.096Vになります。

抵抗の選択には制約がありません。つまり、R1かR2のどちらかを選択し、対応する抵抗を計算すればいいです。残念ながら、完璧な解決策はありません。私たちができる最善のことは、信号源の負荷、バッテリ電源回路の分圧器のエネルギー消費、マイクロコントローラの10kΩ入力インピーダンスを下回る必要性、または高い R_{Th} に対応するためにADC変換時間を延長する必要性など、競合する要求のバランスをとることです。

設計例

抵抗の選択プロセスを説明するために、鉛蓄電池充電器に関連付けられた公称12V DCシステムを測定する回路を設計してみましょう。まず、発生する可能性のある最高電圧を特定することから始めます。このシステムは「12V DC」と呼ばれていますが、トリクル充電は約13.8V DCで、均等充電は14.7V DCに達する場合があります(正確な値についてはバッテリのデータシートを参照してください)。10%の余裕を持たせるなら、16V DC(Max)の電圧で設計することになります。

4.096V DC外部リファレンス用にマイクロコントローラを設定します。

4.096 = 16\dfrac{R_2}{R_1 + R_2}

変数を組み合わせることで、R1とR2の比を求めることができます。

\dfrac{R_1}{R_2} = 2.906

私たちの目的は、結果として R_{Th} が10kΩ未満になるように、この比率にできるだけ近い抵抗のペアを見つけることです。

抵抗ペアの選択は、それ自体が興味深いテーマです以前の記事で紹介した手法を使用すると、E-24(5%)シリーズの最も近いマッチング ペアは、R1とR2でそれぞれ4.7kΩと1.6kΩ、比率は2.937になります。E-96(1%)を使用すると、8.98kΩと3.09kΩを選択して、比率を2.906に改善できます。

理想的な状況では、ADCへのフルスケール電圧は次のようになります。

V_{ADC} = 16.0\dfrac{3.09 k}{3.09 k + 8.98 k} = 4.0961 \ VDC

実際には、まだ誤差が存在します。 確かに、1% 抵抗によって状況は改善されました。ただし、それらは完璧ではありません。各抵抗の許容値の範囲を考慮してください。

8.8902 kΩ < R_1 < 9.0698 kΩ

3.0591 kΩ < R_2 < 3.1209 kΩ

分圧器に使用すると、フルスケール(16V DC 入力)は4.0355~4.1574V DC まで変化します。 この+/- 61mV誤差は、選択した抵抗の許容誤差に起因します。この課題に対する解決策としては、許容誤差が低い(コストが高い)抵抗器の使用、手作業による抵抗器の選別、トリマ抵抗器の取り付け、またはマイクロコントローラでの校正補正の適用など、いくつかあります。各ソリューションには、独自のコストと時間のペナルティが伴います。しかし、精度の向上には避けられない代償です。

システムパフォーマンス

妥当な批評としては、抵抗器の選択にこだわりすぎているということです。このように慎重に選択した理由は、システム全体のパフォーマンスを考慮すると明らかになります。

外部電圧リファレンスを備えた当社のオリジナルの10ビットADCは、フルスケールのバイナリ読み取り値が1023に制限されていることを思い出してください。分圧器を正しく選択していれば、測定電圧が16V DCに達したときに読み取り値が1023になります。 その結果、システムの分解能(検出可能な最小の電圧変化)は約16mVになります。 これは、予想される最大電圧を忠実に取得し、ADCのフルスケール出力に一致するように降圧したために実現できた最善の方法です。

明らかな反例を考えてみましょう。代わりに、手頃な10kΩと1kΩの値をそれぞれR1とR2に選択したとします。ADCがフルスケールカウントの1023に達するには、測定電圧が45.1V DCに達する必要があります。45.1V DCまでは1023ステップあるため、分解能は44mVに悪化します。測定された電圧の小さな変化を識別できなくなるため、これは非常に望ましくないことです。

技術的なヒント: 1.024、2.048、4.096などの値を持つ電圧リファレンスは、電圧が1、2、4、…、512、1024、2048、4096のように2のべき乗(PO2)に関連しているため、見覚えがあるかもしれません。特に整数演算を使用する場合に便利な値です。この例では、4.096V DCリファレンスを備えた10ビットADCを使用して、16V DC(最大)信号を測定します。分圧器に理想的な抵抗を選択したと仮定すると、各ビットの変化はPO2の電圧変化と整合します。この例では、各ADCビットは1/64ボルトを表します。2Nの乗算は一連の左シフト演算子を使用して実行できるため、これはアプリケーションにとって役立つ場合とそうでない場合があります。これらの固有の電圧リファレンスをスケーリングするために浮動小数点値を使用すると、処理速度の利点が失われることに注意してください。

まとめ

適切な分圧器を使用して測定電圧を低減すれば、マイクロコントローラを使用して5.0または3.3V DC電源レール範囲よりも高い電圧を測定できます。抵抗を適切に選択すると、マイクロコントローラは、測定対象の電圧とADCの電圧リファレンスの両方を考慮して、利用可能な最高の分解能を得ることができます。適切な抵抗の選択は、標準値から利用可能で最適な抵抗ペアを見つけるのに役立つ簡単なCプログラムを含む、以前の記事をご参考にしてください。

ご健闘をお祈りします。

APDahlen




オリジナル・ソース(English)