2008. 5. 23.
石立 喬

Visual C++ 2008 Express Edition の易しい数値計算(9)

――― T型−π型変換と、それを用いたT型回路の計算 ―――

 複素数ライブラリを使う電気回路計算の例として、T型−π型変換(スター・デルタ変換)を紹介し、橋絡T型回路、並列T型回路の周波数特性を求める。具体的には、帯域除去(Band Elimination)フィルタとして使用する回路で、負帰還回路に挿入して増幅器で特定の周波数を増強したり、発振回路を構成したりすることができる。グラフ表示をさせるので、Windowsフォームアプリケーションを使用する。

二端子対回路
 二端子対回路は、かつては四端子回路と呼ばれ(現在もそう呼ばれることがある)、線形回路から成り、一般的にはブラックボックス化してマトリックスの形式で表現できるものである。
 具体的に回路で示すと、図1のようにT型回路またはπ型回路で表現できるものが良く知られている。


図1 二端子対回路の二つの形式


T型−π型変換(スター・デルタ変換)
 図1の(a)と(b)に示した二つの二端子対回路は、相互に変換することができる。これはスター・デルタ変換と呼ばれ、各二端子対の一端が接地されている必要はないので、図2のように一般化する。T型回路がスター回路に、π型回路がデルタ回路に相当する。


図2 二端子対回路を一般化した二つの形式


スター、デルタ回路の相互変換については、下記の式を使用する。

 スター回路からデルタ回路に
   
 デルタ回路からスター回路に
   
T型−π型変換(スター・デルタ変換)の計算
 上述の変換式を、複素数ライブラリを使用して計算すれば、任意のインピーダンスに対して結果を求めることができる。念のために、インピーダンスが抵抗成分のみ、リアクタンス成分のみ、混在の場合に分けて確認する。
◎各インピーダンスが抵抗成分のみの場合
 下記の計算式と等価になる。R1、R2、R3は常に正であり、結果として得られるR12、R23、R31も必ず正になるので、変換後の回路を抵抗素子で実現でき、問題は無い。
   R12=R1+R2+R1R2/R3
   R23=R2+R3+R2R3/R1
   R31=R3+R1+R3R1/R2
◎各インピーダンスがリアクタンス成分のみの場合
 下記の計算式と等価になる。X1、X2、X3は正(コイルの場合)または負(コンデンサの場合)の値をとる。変換後のインピーダンスとして得られるZ12、Z23、Z31の虚数部、すなわちリアクタンス成分は正、負の両方をとるが、これは正負に応じてコイルまたはコンデンサで実現できるので問題は無い。リアクタンスは、角周波数ωと回路素子のインダクタンス、キャパシタンスから計算する。
   Z12=j(X1+X2+X1X2/X3
   Z23=j(X2+X3+X2X3/X1
   Z31=j(X3+X1+X3X1/X2
◎各インピーダンスが抵抗成分とリアクタンス成分を共に含む場合
 これは少し複雑になり、負性抵抗が発生し、受動素子でそのまま実現するのは不可能な場合があるが、電気回路を数式的に取り扱う限りでは特に問題は無い。この計算では、複素数ライブラリの有難味が良く分かる。
 負性抵抗が発生する変換例を図3に示す。

図3 T型回路をπ型回路に変換すると負性抵抗が現れることがある


橋絡T型(Bridged T)回路
 T型2端子対回路を少し複雑にして、入力と出力を回路素子で結んだのが橋絡T型回路である。多く使われるものを図3に示す。図3の(a)と(b)で、正式な名称はないので、便宜上(a)を抵抗接地型、(b)を容量接地型と呼ぶことにする。コンデンサCの代わりにコイルLを使用しても同様な特性が得られるが、一般的にコストが高くなり、サイズが大きくなるので、あまり実用されない。


図4 良く使用される橋絡T型回路の二つの形式


 これらの回路の電気特性を計算するには、基となるT型回路をπ型回路に変換し、入力端子と出力端子間の、上部の橋絡素子を並列接続すればよい。すなわち、図4に示すように、まず、Z1、Z2、Z3のT型回路をπ型回路に変換し、Z12、Z23、Z31を求める。
 次に、Z12とZ4の並列インピーダンスを求めると、入力電圧電源の内部抵抗を無視できて、かつ出力端が解放の場合には、前記並列インピーダンスとZ23との比例配分で、電圧伝達関数を求めることができる。


図5 橋絡T型回路の出力電圧を求めるための変形


並列T(Twin T)型回路
 抵抗接地型と容量接地型の2個のT型2端子対回路を並列に接続したのが、図5に示す並列T型回路である。この回路は、前記の橋絡T型回路よりも鋭い帯域除去(Band Elimination)特性を有する。この回路の特性を計算する場合は、それぞれのT型回路をπ型回路に変換し、それらの各インピーダンスZ12、Z23、Z31を並列接続すれば良い。

図6 良く使用される並列T型回路の形式


簡単な例題
1)図4(a)の抵抗接地橋絡T型回路で、C1=C2=C、R1=2R、R2=R/2、C=0.01μF、R=100kΩとし、内部抵抗ゼロの交流電圧源に接続したときの開放出力電圧比および位相をグラフで表示せよ。
2)図4(b) の容量接地橋絡T型回路でで、R1=R2=R、C1=C/2、C2=2C、C=0.01μF、R=100kΩとし、同様のグラフを表示し、1)と同じであることを確認せよ。
3)図6で、C1=C2=C、C3=2C、R1=R2=R、R3=R/2、C=0.01μF、R=100kΩとし、同様のグラフを表示せよ。
 なお、いずれの場合も、理論上の除去周波数は、f=1/(2πRC)=159.2(Hz) である。

プログラムの説明
1)複素数ライブラリの使用方法については、「易しい数値計算(8)」を参照されたい。
2)周波数fと角周波数ω(オメガ)の間には、ω=2πf の関係があるので、
   omega=2.0*Math::PI*frequwncy;
を使用する。
3)抵抗のインピーダンスz_R1、z_R2などは、周波数に依存しないので、forループの外で設定し、コンデンサのインピーダンスz_C1、z_C2などは周波数に依存するので、ループ内で設定する。
4)周波数frequencyは、周波数軸が対数表示のため、
 
1.0 1.1 1.2  ------- 9.9   (d=0で、p=10d=1の場合)
10  11  12   ------- 99    (d=1で、p=10d=10の場合)
100  110  120   ------- 990    (d=2で、p=10d=100の場合)
------- ------- -------  ------- -------  
10000  11000  12000   -------  99000    (d=4で、p=10d=1000の場合)
 
のように変化させる。
5)利得gainは、電圧の場合、gain=20log10[電圧比]の関係があるので、
   gain=20.0+Math::Log10(abs(ratio));
を使用する。gainの単位はデシベル(dB)である。
6)位相phaseは、arg(ratio)により求め、単位はラジアン(radian)である。
7)作成したユーザ関数parallel(z1,z2)は、並列インピーダンスを求めるもので、結果をzとすると、
   z=1/(1/z1+1/z2)=z1*z2/(z1+z2)
の関係がある。

例題1)と例題2)のためのプログラム

以下に示すプログラムは、例題1)に対するもので、例題2)の場合は、/*  */ で囲まれた内容と切り替えて使用する。

#pragma once
#include <complex>
using namespace std;

private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {

   Graphics^ gr=e->Graphics;

   int SIZE=80;   //DECADE当りのピクセル数
   int X0=50,Y0=25,Y1=Y0+SIZE*1.5,Y2=Y1+SIZE*2;
   int DECADE=5;
   int d,i,j;
   double f,p;
   int x,y1,y2,old_x,old_y1,old_y2;

   array<String^>^ horiscale={" 1","10","100","1k","10k","100k"};
   array<String^>^ vertscale={" 30dB"," 20dB"," 10dB"," 0dB","-10dB","-20dB","-30dB","-40dB"};
   array<String^>^ phasescale={" π/2"," π/4"," 0","-π/4","-π/2"};

   double frequency,omega;
   double gain,phase;
   double R1,R2,C1,C2;
   complex<double> z_R1,z_R2,z_C1,z_C2;
   complex<double> z12,z23;
   complex<double> ratio;

   //片対数方眼紙を作成する
   for(i=0;i<DECADE;i++){
      //縦線を引く
      for(j=1;j<=10;j++)
         gr->DrawLine(Pens::Black,X0+(int)((i+Math::Log10(j))*SIZE),Y2,X0+(int)((i+Math::Log10(j))*SIZE),Y0);
      //横軸の目盛を入れる
      gr->DrawString(horiscale[i],Font,Brushes::Black,X0-10+i*SIZE,Y2+10);
   }
   gr->DrawString(horiscale[DECADE]+" Hz",Font,Brushes::Black,X0-10+DECADE*SIZE,Y2+10);
   for(i=0;i<8;i++){
      //横線を引く
      gr->DrawLine(Pens::Black,X0,Y2-i*SIZE/2,X0+DECADE*SIZE,Y2-i*SIZE/2);
      //縦軸の目盛を入れる
      gr->DrawString(vertscale[i],Font,Brushes::Blue,X0-45,Y0-5+i*SIZE/2);
   }
   //位相(縦軸)の目盛を入れる
   for(i=0;i<5;i++)
      gr->DrawString(phasescale[i],Font,Brushes::Red,X0+DECADE*SIZE+5,Y0-5+(i+1)*SIZE/2);
   
   //グラフを描く
   // -- 例題1) 抵抗接地橋絡T型回路--

   C1=1.0E-8;   //C1=0.01uF
   C2=1.0E-8;   //C2=0.01uF
   R1=2.0E+5;   //R1=200kohm
   R2=5.0E+4;   //R2=50kohm
   // -------------------------------

   /*
   // -- 例題2) 容量接地橋絡T型回路--
   C1=5.0E-9; //C1=0.005uF
   C2=2.0E-8; //C2=0.02uF
   R1=1.0E+5; //R1=100kohm
   R2=1.0E+5; //R2=100kohm
   // -------------------------------
   */

   z_R1=complex<double>(R1,0.0);
   z_R2=complex<double>(R2,0.0);

   for(d=0;d<DECADE;d++){
      p=Math::Pow(10,d);
      for(f=1.0;f<=10.0;f+=0.1){
         frequency=f*p;
         omega=2.0*Math::PI*frequency;
         z_C1=complex<double>(0.0,-1.0/(omega*C1));
         z_C2=complex<double>(0.0,-1.0/(omega*C2));

         // ---------- 例題1) 抵抗接地橋絡T型回路-----------
         z12=z_C1+z_C2+z_C1*z_C2/z_R2;   //スター・デルタ変換
         z23=z_C2+z_R2+z_R2;           //スター・デルタ変換
         ratio=z23/(parallel(z12,z_R1)+z23);
         // ---------------------------------------------

         /*
         // ---------- 例題2) 容量接地橋絡T型回路-----------
         z12=z_R1+z_R2+z_R1*z_R2/z_C2;   //スター・デルタ変換
         z23=z_R2+z_C2+z_C           //スター・デルタ変換
         ratio=z23/(parallel(z12,z_C1)+z23);
         // ---------------------------------------------
         */


         //利得と位相の表示
         gain=20.0*Math::Log10(abs(ratio));
         phase=arg(ratio);

         x=X0+(int)((d+Math::Log10(f))*SIZE);   //周波数
         y1=Y1-(int)(gain*0.05*SIZE);        //利得
         y2=Y1-(int)(phase*2.0/Math::PI*SIZE);  //位相

         if(d==0 && f==1.0){
            old_x=x;
            old_y1=y1;
            old_y2=y2;
         }
         else{
            gr->DrawLine(Pens::Blue,old_x,old_y1,x,y1);   //利得を表示
            gr->DrawLine(Pens::Red, old_x,old_y2,x,y2);   //位相を表示
            old_x=x;
            old_y1=y1;
            old_y2=y2;
         }
      }
   }

}

private: complex<double> parallel(complex<double> z1,complex<double> z2){

   return z1*z2/(z1+z2);

}

例題1)と例題2)の得られた結果
 図7は例題1)の実行結果を示す。利得は理論値の159.2Hzで最小となり、位相は、その周波数で0とクロスして、純粋な抵抗減衰器とみなされる。


図7 抵抗接地橋絡T型回路の計算結果


 図8は例題3)の実行結果で、主要部分のみを示す。例題1)と全く同じ特性を持っている。


図8 容量接地橋絡T型回路の計算結果(一部分)


例題3)のためのプログラム
以下に示すプログラムは、例題3)のために必要とする変更部分を示す。

double R1,R2,R3,C1,C2,C3;
complex<double> z_R1,z_R2,z_R3,z_C1,z_C2,z_C3;
complex<double> z12R,z23R,z31R,z12C,z23C,z31C;

C1=1.0E-8;   //C1=0.01uF
C2=1.0E-8;   //C2=0.01uF
C3=2.0E-8;   //C3=0.02uF
R1=1.0E+5;   //R1=100kohm
R2=1.0E+5;   //R2=100kohm
R3=5.0E+4;   //R3=50kohm

z_R1=complex<double>(R1,0.0);
z_R2=complex<double>(R2,0.0);
z_R3=complex<double>(R3,0.0);

for(d=0;d<DECADE;d++){
   p=Math::Pow(10,d)/10.0;
   for(f=10;f<100;f++){
      frequency=f*p;
      omega=2.0*Math::PI*frequency;
      z_C1=complex<double>(0.0,-1.0/(omega*C1));
      z_C2=complex<double>(0.0,-1.0/(omega*C2));
      z_C3=complex<double>(0.0,-1.0/(omega*C3));

      // ------------------------例題3)並列T型回路----------------------------
      z12R=z_C1+z_C2+z_C1*z_C2/z_R3;   //抵抗接地型のZ12をスター・デルタ変換
      z23R=z_C2+z_R3+z_R3;          //抵抗接地型のZ23をスター・デルタ変換
      z12C=z_R1+z_R2+z_R1*z_R2/z_C3;   //容量接地型のZ12をスター・デルタ変換
      z23C=z_R2+z_C3+z_C3;          //容量接地型のZ23をスター・デルタ変換
      ratio=parallel(z23R,z23C)/(parallel(z12R,z12C)+parallel(z23R,z23C));
      // ----------------------------------------------------------------------

例題3)の得られた結果
 図9は例題3)の実行結果を示す。減衰が大きく(伝達関数はゼロ、利得はマイナス無限大)、その付近の周波数では位相変化が急峻である。橋絡T型回路よりも、並列T型回路の実用度が高いのも理解できる。


図9 並列T型回路の計算結果


「Visual C++ の勉強部屋」(目次)へ