2014/11/22からのアクセス回数 8098 AnalogDiscoveryを試す/01-CR積分回路でも式にタイプミスがあったりして、 申し訳ありません。 できるだけ式を誘導できるように展開していきますので、間違いを見つけられたらお知らせ下さい。 CR微分回路 †電気回路編 その3から微分回路を引用し、 以下に示します。 ちょうど、積分回路の抵抗とコンデンサーの位置を入れ替えた形になっています。 LTSpiceを使って方形波に対するVoの変化を見る †AnalogDiscoveryを試す/01-CR積分回路と同様に、LTSpiceを使って方形波に対するVoの応答をシミュレーション します。 モデルは、以下のファイルを使用しました。 LTSpiceで以下の回路を作成します。 50Hzでのシミュレーション結果は、以下の様になりました。 ちょうど入力波を微分したような応答が返ってきます。これがCR微分回路と呼ばれる理由です。 500Hzでは、応答が直線的になり(サグと呼ぶそうです) 5kHzでは、変化量が小さくなっています。 AnalogDiscoveryを使ってVoを測定する †次にAnalogDiscoveryを使って実際に測定してみます。 以下の様にブレッドボードに回路を組みAnalogDiscoveryと接続します。 AnalogDiscoveryを使った測定結果 †方形波の周波数を50Hz, 500Hz, 5kHzに変えて、Voの応答を測定してみました。 回路の時定数\(\tau\)は、\(C_1 R_1 = 10K \times 0.1 \mu = 1 ms \)となっています。 50Hzの場合の応答は、以下の様になりました。 *1 実際の出力波形の方が大きく変化しており、LTSpiceの結果よりも大きな初期変動が見られます。 500Hzと5kHzは、以下の様になりました。 周波数特性を測る †ネットワーク・アナライザを使って周波数特性を調べてみます。 1次のハイパスフィルターの特徴がでています。 CR微分回路のラプラス変換 †CR微分回路もAnalogDiscoveryを試す/01-CR積分回路と同じで、入力波とRとCの電圧の関係に以下の式が成り立ちます。 $$ R i + \frac{\int i dt}{C} = E \left\{ u(t) - u(t - T) \right\} $$ ラプラス変換も同じで、iが以下の様に求まります。 $$ i = \frac{E}{R} L^{-1} \left \{ (1 - e^{-Ts}) \frac{1}{s + \frac{1}{CR}} \right \} $$ Voは、iRなので、Voは以下の式で求まります。 $$ V_O = E \left \{ e^{-\frac{1}{CR}t} - e^{-\frac{1}{CR}(t - T) } u(t -T)\right \} $$ Sageを使ってグラフを表示 †Sageを使ってVoのグラフをみてみましょう。 ここで紹介するSageのノートは、以下のURLで公開しています。 CRを時間係数\( \tau \)として、VoをSageで表すと以下の様になります。 (t, T, tau, E) = var('t T tau E') Vo = E*(e^(-1/tau*t) - e^(-1/tau*(t - T) )* unit_step(t - T)) 数式を見やすくすると、 show(Vo) 方形波を以下のように定義します。 # 方形波 U = E*(unit_step(t) - unit_step(t - T))-E/2 方形波とVoを合わせてプロットする関数plot_Voを以下の様に定義します。 # 方形波とVoをプロットする関数を定義します def plot_Vo(Tc): Ut(t) = U(T=Tc, E=4.0) fvo(t) = Vo(t, tau=0.001, T=Tc, E=4.0) vo_plt = plot(fvo(t), [t, 0, 2*Tc], color='blue') ut_plt = plot(Ut(t), [t, 0, 2*Tc], color='green') (vo_plt + ut_plt).show(figsize=4) Tc=0.01、周期50HzでのVoのプロットします。 # Tc=0.01、周期50HzでのVoのプロット plot_Vo(Tc=0.01) Tc=0.001、周期500HzでのVoのプロットします。 # Tc=0.001、周期500HzでのVoのプロット plot_Vo(Tc=0.001) Tc=0.0001、周期5kHzでのVoのプロットします。 # Tc=0.0001、周期5kHzでのVoのプロット plot_Vo(Tc=0.0001) 50Hzのピークは4Vが正しい †50Hzでのピークが実験では4Vと-4Vになっているのに、LTSpiceでは2.5V, -2.5Vになっています。
Sageの計算でも4Vと-4Vがきちんと求まっています。 5kHzの応答が実際の波形と異なるのは何故 †最後の5kHzの応答波形がLTSpiceや実験で求まった波形と大きく異なります。 *2 これまで、LTSpiceで5kHzの結果を出すときには、安定な形状になってから表示していましたが、 試しに、0から表示してみると、以下の様にようになります。 シミュレーションの.tranを以下の様に変更します。 .tran 0 0.0005 0.0 100 結果は、以下の様になりました。 最初の波形は、まさにSageで計算したものに一致します。 徐々に、2Vと-2Vでの変化に変わっています。 最初の波形は、コンデンサーの初期電荷が0を仮定していますが、周波数が大きくなると、完全に放電するまえに 次の充電が行われているため異なる値となったと思われます。(要確認です!) 周波数特性 †AnalogDiscoveryを試す/01-CR積分回路と同様にCR微分回路の周波数特性をSageを使って求めてみます。 伝達関数Hは、\(V_oとV_i\)から以下の様に計算します。 $$ H(s) = \frac{V_o}{V_{i}} = \frac{RI(s)}{( R + \frac{1}{sC}) I(s)} $$ 分母・分子をRI(s)で割ると、 $$ H(s) = \frac{1}{(1 + \frac{1}{RCs})} $$ Sageで伝達関数をプロットする †AnalogDiscoveryを試す/01-CR積分回路の場合には、伝達関数の振幅特性と位相特性を計算してからプロットしましたが、 今回は伝達関数から直接振幅特性と位相特性をプロットしてみます。 上記の式から伝達関数を以下の様に定義します。 Sageへの入力: # 伝達関数から周波数特性を求める (s, f,R,C) = var('s f R C') H = 1/(1/(R*C*s) + 1) 伝達関数を表示すると、 Sageへの入力: show(H) ラプラス変数sをjω、ω=2πfを代入すると、 Sageへの入力: # s = jω, ω= 2πfを代入すると H(f) = H.subs_expr(s == 2*i*pi*f) db単位で表示するために、toDb関数を以下の様に定義します。 # 電気ではデジベルで表示するため、toDb関数を定義する def toDb(v): return 20*log(abs(v), 10) 振幅特性をプロットします。 Sageへの入力: # 直接表示すると'unable to simplify to float approximation'のエラーがでるので、lambda式で回避した。 plot(lambda f: toDb(H(f, R=10000, C=10^-7)).n(), [f, 10, 1000], scale="semilogx", figsize=(5, 3), plot_points=1000) 位相特性は、定義から以下の様になります。 # 位相は以下の様になる Phi(f) = arctan(imaginary(H(f))/real(H(f))) 位相を度で表示するために、toDeg関数を以下の様に定義します。 def toDeg(v): return v*180/pi 位相特性をプロットすると以下の様になります。 Sageへの入力: plot(lambda f: toDeg(Phi(f, R=10000, C=10^-7)).n(), [f, 10, 1000], scale="semilogx", figsize=(5, 3), plot_points=1000) このようにSageを使うと伝達関数の周波数特性を非常に簡単にグラフ化できます。 感想 †とても当たり前のように思われていた、CRの微分回路でも実験と計算値にずれが生じることに改めて驚きました。 これまで、理論値のグラフは表示するのが大変だったため、代表的な計算値のみが紹介されているケースが多かったのですが、Sageを使うことで様々なケースのプロットが簡単に行うことができ、新たな発見ができたことは大きな収穫でした。 コメント †皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。 スパム防止に画像の文字列も入力してください。 Tweet |