実機なしの STM32 で三相電力、続き — 不平衡・低力率で崩れるもの、崩れないもの(2電力計法)

  • python
  • stm32
  • 組み込み
  • 電子工作
  • 電力計測

まとめ(先に結論)

  • 前回、PC の中だけで STM32 を動かして三相電力を測りました。今回はその続きで、素直な「平衡負荷」ではない条件を試します
  • ファームは 1 行も変えていません。変えたのは入力の波形だけです。壊れるのはプログラムではなく、「平衡」という前提のほうだった、というのが今回いちばん腑に落ちた点でした
  • 結果は 3 つです:
    • (1) 不平衡でも、有効電力 P=W1+W2P=W_1+W_2 は崩れない(でも無効電力 QQ の式は崩れる)
    • (2) 力率が低いと、片方の測定器が「負」を指すことがある(でも合計は正しい)
    • (3) 4 チャンネルを順番に測ると、時間ずれで誤差が出る
  • 前回と同じく、これは実機にはつながない、PC の中だけの数値実験です。3 相の波形を数式で作り、12bit ADC に見立てて、エミュレートした STM32 に測らせています

前回の記事はこちらです。仕掛け(Unicorn で STM32 を動かし、ADC の番地読み出しを Python で横取りする)はそのまま使い回しています。

https://zenn.dev/logicia32/articles/2026-05-26-stm32-3phase-power-1https://zenn.dev/logicia32/articles/2026-05-26-stm32-3phase-power-1

前提だけ崩す:ファームはそのまま、入力を変える

前回作ったファームは、ADC から 4 チャンネル(線間電圧 vAB,vCBv_{AB}, v_{CB} と線電流 iA,iCi_A, i_C)を順に読み、「電圧 × 電流」を平均して W1,W2W_1, W_2 を出し、P=W1+W2P=W_1+W_2Q=3(W2W1)Q=\sqrt{3}\,(W_2-W_1) を返すだけのものでした。

今回おもしろかったのは、ファームを一切変えずに、「教科書の前提が崩れる」場面を試せたことです。変えたのは、Python 側で作る波形(ファームに渡すサンプル列)だけ。マイコンの中の計算は同じなのに、入力の前提が崩れると答えがどうズレるか――それを切り分けて見られるのは、実機を使わない数値実験ならではだなと思いました。

(1) 不平衡負荷 — P は厳密、でも Q の式は崩れる

まず、3 相のバランスが崩れた不平衡負荷です。A と C の線に流れる電流を、大きさも遅れ具合も、わざとバラバラにしてみました。中性線のない 3 線式なので、残る B 線の電流は、他の 2 本から自動で決まります(iB=(iA+iC)i_B = -(i_A + i_C))。

下の左の図のように、2 台の測定器が見る瞬時電力 p1,p2p_1, p_2 は、前回の平衡時と違って左右非対称な波になります。

不平衡負荷:P は厳密・Q の式は破綻

結果がおもしろくて、右の図のとおり、有効電力 PP は真の値とほぼぴったり(誤差 0.01% 以下)。前回ブロンデルの定理のところで「平衡でも不平衡でも P=W1+W2P=W_1+W_2 は成り立つ」と書きましたが、それが数字で確かめられました。PP が和(W1+W2W_1+W_2)であるかぎり、負荷がどう偏っても全体の有効電力に等しい――ここは本当に丈夫です。

指標 真の値 2電力計法(STM32)
有効電力 P 2192 W 2192 W(誤差 +0.003%)
無効電力 Q 1955 var −657 var(符号まで逆)

一方で、無効電力 QQ はまるで合いません。真の値が約 +1955 var(バール。無効電力の単位です)なのに、式 Q=3(W2W1)Q=\sqrt{3}\,(W_2-W_1) で出すと −657 var。大きさどころか符号まで逆です。じつはこの QQ の式は、3 相がきれいにそろっている(平衡)ことを前提にした近道で、バランスが崩れるともう使えなくなります。前回も小さく注意書きした通りでした。

ここは私自身が手を動かすまでぼんやりしていたところでした。「2 電力計法は不平衡でも使える」とよく言われますが、それは PP の話であって、QQW2W1W_2-W_1 の差から出す式は平衡限定。同じ「2 電力計法」の中でも、丈夫な部分と、前提に寄りかかった部分があるんだな、と切り分けられたのが収穫でした。

(2) 低力率 — 片方の測定器が「負」を指す

次は、平衡のまま力率を 0.4 まで下げた場合(電流の遅れ角 φ ≒ 66°)。前回は力率 0.8 で、瞬時電力 p1p_1 が一瞬だけマイナスになる、という話をしました。今回はもっと極端で、W1W_1 の平均そのものが負になります。

低力率:W1 が負を指すが P は正しい

W1W_1 が見ている電圧 vABv_{AB} と電流 iAi_A の位相差は 30°+φ30° + φ。力率が下がって φφ60°60° を超えると 30°+φ30°+φ90°90° を越え、cos(30°+φ)\cos(30°+φ) が負になる――だから平均しても負、という理屈です。図でも p1p_1(緑)がゼロより下にいる時間(薄く塗った部分)のほうが長く、平均線が完全にマイナス側に来ています。

実機の電力計でこれが起きると、「メータが逆を指している。故障だろうか」と一瞬ぎょっとしそうです。でも落ち着いて見ると、W2W_2 が大きめに出ていて、合計 P=W1+W2P=W_1+W_2 は約 1386 W でちゃんと真の値。片方が負を指すのは異常ではなく、2 電力計法の正常な振る舞いなんですね。負の値も含めて素直に足す、というのが大事でした。

(3) サンプリングの時間ずれ(スキュー) — 同時に測れないことの代償

最後は、前回さらっと流した「同時サンプリング」の前提です。前回は 4 チャンネルを同じ時刻のサンプルとしてファームに渡していました。でも安い構成だと、STM32 の ADC は 1 個を切り替えながら 4 チャンネルを順番に変換します。すると、チャンネルごとに測る時刻が少しずつずれます。これがどれくらい効くのかを見ました。

チャンネル間スキューと誤差

ここでの「ずれ」は、隣り合うチャンネル間の遅延です(4 チャンネルを順に読むので、先頭と最後のチャンネルでは最大でその 3 倍の時刻差になります)。これを 1 サンプル周期(今回の設定だと約 156 µs = 50Hz で位相にして約 2.8°)まで振ってみると、誤差は遅延にほぼ比例して増えていきます。そして前回と同じ傾向で、QQ(青)の誤差が PP(赤)の約 2 倍。QQW2W1W_2-W_1 の差で出すぶん、時間ずれにも弱い。前回「引き算は誤差に弱い」と書きましたが、量子化だけでなく、こういう時間方向のズレでも同じことが起きるんだ、と確認できました。

実務的には「電圧と電流はできるだけ同じ瞬間に取りたい(同時サンプリング ADC を使う、あるいは時刻ずれを補正する)」という話につながります。今回はその「なぜ同時に取りたいのか」を、誤差の数字で自分なりに納得できました。

余談:現場で「電力がマイナス」を見たとき

今回は数式の上だけの実験でしたが、書きながら、現場で「電力がマイナスに振れる」のを見て戸惑った記憶を思い出しました。以前(2010 年代)、産業機械の大きなモータ駆動を扱っていた頃、その機械の電源の根元――ブレーカーのすぐそばで、CT(電流を測る変流器)と VT(電圧を測る計器用変圧器)を使って電力を測っていると、回転部を減速させたときに、表示が一瞬マイナス側へ振れることがありました。これは減速のときにモータが発電機のように働いて電力が逆向きに流れる、いわゆる回生で、(2) で見た「力率が低くて W1W_1 が負になる」のとは別物です。あちらは負荷が電気を消費しているのに測り方の都合で片方が負に出る話、こちらは本当に電力が逆向きに流れている話です。当時は、この区別もあいまいでした。

さらに不思議だったのが、その戻った電力の行き先です。測っていたのは機械の根元なので、そこがマイナスということは、電力がブレーカーの外側へ戻っていったことになります。ただ、建物全体の電気メーターが逆回転していた記憶はないので、系統へ売電していたというより、近くで動いている別の機械が使っていたのかな……今でもはっきりとは説明できません。今回の不平衡の実験 (1) も、当時のそんなもやもやを数値で確かめ直すような感覚がありました。

(4) おまけ:電力量(Wh)は、どうやって足す?

ここまでは「いまこの瞬間の電力(W)」の話でした。電気代につながる「電力量(Wh)」は、その電力を時間ぶん足し上げたものです。

足し方にはいくつか流儀があって、サンプルを「高さ × 幅」の短冊と見て足すか(単純な足し算)、点と点を斜めに結んで「台形の面積」で足すか、などがあります。私自身は現場では、ノイズのスパイク(とげとげした外れ値)が多かったので、サンプリングを速めにとって台形で面積を求め、何度か測った中央値でとげを捨てていました。

ところがおもしろいことに、今回のようなきれいな繰り返し波形を、周期の切れ目まで含めてちょうど整数回ぶん測っているときは、短冊で足しても台形で足しても、答えはほとんど変わりません。しかもどちらも真の値にとても近い。「ていねいに面積を求めなきゃ」と身構えていたぶん、「素直に足すだけで、こんなに合うのか」と、ちょっと拍子抜けしました。

もちろん、波形が乱れていたり、長い時間ずっと足し続けたりすると、足し方の差や数値のクセがじわじわ効いてきます。でも、その話はまた別の機会に。

おわりに ― 次回への宿題

今回いちばんよかったのは、ファームを変えずに、入力の前提だけを崩して切り分けられたことでした。「2 電力計法そのものがダメ」なのではなく、「平衡という前提に寄りかかっていた部分だけがダメになった(PP は無事)」と、原因を分けて見られる。実機だと負荷も配線もまとめて変わってしまって切り分けにくいところを、数値実験だと一つずつ動かせるのが効きました。

次にやってみたいのは、

  • 不平衡な QQ を、ちゃんと測れる別の方法(瞬時無効電力理論など)と比べてみる
  • 時刻ずれを、ソフト側で補間して補正できるか
  • 電力量(Wh)を長い時間ずっと足し続けるときの、足し方の選び方

このあたりです。

今回と前回のコードは lab-stm32-power にまとめてあります(MIT ライセンス)。

ここまで、「実機なしでマイコンを動かして電力を測る」シリーズの 2 回目でした。間違いや「ここはこう考えるともっと良い」があれば、ぜひ教えてください。読んでくださって、ありがとうございました。

この記事は Zenn に初出したものを加筆・補足したものです ── Zenn の元記事を見る