アナログ電子回路技術者同士の交流のためのアナログ・デバイセズ提供の掲示板サイトです。
日々の回路設計活動での課題や疑問とそれらの解決、あるいはご意見やご提案などの投稿を是非お寄せください!
  トップページに戻る
 現在の総記事数
 Translation
このマークにご注目!
スタッフ
 

閲覧数の多い投稿

* ランキング情報は約1時間おきに更新されます。
ポイント数が高い投稿

* ランキング情報は約1時間おきに更新されます。
モバイルサイト
上記QRコードを携帯電話で読み取ることで、モバイルサイトにアクセス頂けます。
EDN Japan 掲示板サイト
ルネサスユーザコミュニティ「かふぇルネ」:ルネサスユーザー同士の技術的な交流サイト

スレッド一覧に戻る

lbsKobayashi
タイトル
アンプ発振条件の検討
ポイント []
pt.
アクセス10233
カテゴリーツール&シミュレーション
キーワード Python sf   gain 1   Light weight Language   発振   位相   Powered by Yahoo
投稿日時10/06/07 11:31
昔からアンプの発振条件、および位相補正による発振対策に今ひとつ納得できていませんでした。

発振条件は Opne Loop 系の gain 1 になるところで位相が 180 度以上回っているとされます。その発振周波数は gain が 1 になる周波数だとされます。

位相が 180 度以上の条件は理解できます。負帰還で 360 度の位相回転となり、正帰還が掛かるのですから、発振を継続するのは、まあ理解できます。納得できてないのは「Bode 線図が gain 1 になる周波数で発振する」の箇所です。伝達関数の根の虚数成分の周波数位置で gain 常に が 1 になるなんて思えません。

また発振対策として、位相進み回路を挿入して gain 1 の所で 180 度より小さい位相遅れにしてやれば発振しないとされますが、これも今ひとつ納得できていません。 gain 1 よりも大きい箇所で 180 度以上移送が遅れていれば、その周波数で発振するとしか思えません。

--------------------
一方で、私は Python sf と名づけた数学ソフトを作っています。下に評価版を 公開しています

  Home page;;http://www.nasuinfo.or.jp/FreeSpace/kenji/index.htm
  Python sf マニュアル;;http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/pysf/manual/readMeOfPythonSf.htm
  ダウンロード PythonSf095a;;http://www.nasuinfo.or.jp/FreeSpace/kenji/download.htm

数学の主だった機能の多くをは Python の 既存 package によっていますが、プリプロセッサを被せることで、Python をプロのエンジニア・研究者にも使える数学のツールにできたと自負しています。数学ソフトの L.L.:Light weight Language にできました。とんでも扱いされる危険を承知していますが、多くのエンジニアにとって Mathematica, Matlab よりも使えるツールにできたと主張します。

Python sf が扱える対象は Python で記述できるもの全てです。コンピュータ・サイエンスでのλ式、群論などを扱えます。圏論さえも扱えます。一方で回路や伝達関数も扱えます。伝達関数:有理関数の行列も扱えます。

ならば Python sf のテストも兼ねて、以前から疑問に思っていた「アンプの発振」「位相補償による発振対策」について Python sf を活用した検討をしてみようと考えました。

コメントする     


aaaaaa 回答番号 25
タイトル
こんにちは
ポイント
pt.
アクセス6472
投稿日時11/05/02 13:11
■ はじめまして。昔のスレッドながめていて、気になったので失礼します。

■ 私は、昔、デイスク装置のヘッド制御をやったことがあります。
ですから、フィードバック制御のことはあなたのようにずいぶん考えました。
特に、時間領域で考えるのが好きなので、考えているうちにわからなくなってしまいました。
さらに、あなたのように周波数領域でも考えましたが、やはりわけがわからない。

■ ですから、私はこのように考えることをやめました。
そして、次のように考えました。
sで書かれた閉ループ伝達関数に正弦波を入れる、つまりsinのラプラス変換をかけた式は定常応答部分と過渡応答部分にわかれます。
この定常応答部分が周波数特性の計算に使われる部分ですね。
そして、過渡応答部分が安定性に関する部分です。厳密にはこれを調べなくてはいけない。
ナイキストの安定判別は開ループ周波数特性から、閉ループの安定判別を行おうとするものです。
ナイキストの判別は、さらに拡張されたものもあります。これらは厳密なものです。

開ループのボーデ図による判別は、上の厳密な方法を簡易にしたものでして、これによって何かをさぐろうとしてはいけないものです。
あくまでも、おおざっぱに言ってのレベルのことで、ここから発振の可能性、発振周波数などを割り出すことなどできないものなのです。
私も、昔はやろうと思いましたが・・・

■ なを、以上の話、おおまかに間違いはないと思いますが、なにせ昔の経験を思い出しながらのことであり、専門書を復習しながら書いたわけではないため、厳密さに欠け、誤りがあることも考えられます。


Greenline 回答番号 24
タイトル
「負性抵抗」ですね!
ポイント
pt.
アクセス8430
投稿日時10/06/14 21:05
ishibashiyaさん、こんばんは。資料も拝見しました。負性抵抗の考え方ですね。結局は帰還回路というトポロージでも、見た目コルピッツ、ハートレーと見える回路トポロジーでも同じだということですね!

このスレッドは奥深くで感激しています!

またishibashiyaさんのPDFがどうやらTeXベースのDVIPDFMXで作られていらっしゃる(と想像します)ようですが、これを見てishibashiyaさんのバックグラウンドの奥深さを垣間見るような気がしました!(^0^)

ishibashiya 回答番号 23
タイトル
Re:インバータ発振回路について思うところ
ポイント
pt.
アクセス8630
投稿日時10/06/14 18:35
Greenlineさんのお考えは正しいと思います.別の考え方としてこのようなアイディアも有ります.インバータと負荷容量C3,C4と直列抵抗からなる回路が負性抵抗を作り出し、振動子の損失を打ち消して発振条件が成立するという考え方です.この考えは、ややもすると定性的になってしますので、私は好きでは有りません.詳しいことは(あまり詳しく有りませんが)添付ファイルを見て下さい.
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

Greenline 回答番号 22
タイトル
インバータ発振回路について思うところ
ポイント
pt.
アクセス8634
投稿日時10/06/14 16:24
追加ですが、お二人のインバータ発振回路の共振回路部分について自ら若干思うところを…。

回答番号13で回路図が右側に添付されています。C3とC4とXTAL自体(L相当分)の構成で共振回路を形成すると良く言われ、またXTALに対してC3とC4の直列接続されたものとして解析せよ、と言われます。またこれは「コルピッツ回路」とも言われます。

とはいえ、C3とC4はGNDに接続されているので、結構「はて?」の期間が長くありました。

しかしC3とインバータの入力の接続端をグラウンド(GIN)として考えて、C3とC4が接続される点は仮想グラウンドとして(GND - GIN)の電圧で振幅していると考えていけけば、「ああ、(XTAL = L) & (C3とC4直列)」となるんだなあと思いました。

さらに考えればXTAL = L / 2としてC3分、C4分と(なお仮にC3 = C4として)考えて行けば、(L/2), (L/2), C3, C4ブリッジとして考えられると思いました。

お二人の議論に準じていますよね(^_^;?間違いありませんか?

Greenline 回答番号 21
タイトル
クラウンマークをつけました&教えてください
ポイント
pt.
アクセス8490
投稿日時10/06/14 16:05
この記事は、lbsKobayashiさんとishibashiyaさんの以下の点についての議論が、一般の知見(一般的な回路設計分野において)とは異なる局面を教えていただきましたので、クラウンマークをつけました。スレッドを読む際のご参考にされてください。

・閉ループ発振周波数が位相180°ではなく、Aβ=1の周波数に大きく依存していること

・水晶発振回路の発振条件についての詳細検討



それと私から質問です…(スイマセン)。よく最小位相系という用語がつかわれており、lbsKobayashiさんも「最小位相推移系」という用語を用いていらっしゃいます。webで調べるといくつか説明がありますが、どうも一般的な回路の動作との関係でしっくりきません。よければお教えください。なお調べると以下のようなものが散見されました…。

① z平面でz<1である
② 逆システムも因果安定(Causal Stable)
③ その周波数で位相が最小(<2π)

※↑「逆システム」は6/15に追記しました

このうち、どれが的確なのでしょうか?①であるなら(z変換は離散系の話ですが)アナログ系であればパッシブフィルタ(および発振しないアンプ)など、すべて最小位相系と言えると思っております(^^;。

また最小位相と最小位相推移が異なる概念?ということもQAサイトでありますが、さらに霧の中モードです…。

Greenline 回答番号 20
タイトル
NI Multisimでシミュレーションしてみました(3)
ポイント
pt.
アクセス8528
投稿日時10/06/14 10:49
では回路を添付の回路図のように閉じて、クローズドループとしてみました。発振がきちんと生じるようにノイズソースを「種」として入れてあります。

トランジェントシミュレーションの結果が右です。枠で囲ったところが1/dx = 周波数に相当し、マーカ読みで(適当ですが)4.76kHzと読めます。

これはftに近く、位相が180°回っているところではないですね!

利得のクリッピングも無いので、すでに記事にもありますように、急激に大きくなっていますね。
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

Greenline 回答番号 19
タイトル
NI Multisimでシミュレーションしてみました(2)
ポイント
pt.
アクセス8497
投稿日時10/06/14 10:46
次に回路全体の特性、つまりV7出力までの周波数特性と位相特性をシミュレーションしてみました。

左が利得特性(ft = 約5kHz)
右が位相特性(180°位相で1.6kHz)

です。一般的には位相が180°回るところで発振するのだろうと直観的には考えられているものです。
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

Greenline 回答番号 18
タイトル
NI Multisimでシミュレーションしてみました
ポイント
pt.
アクセス8520
投稿日時10/06/14 10:43
さきのお題の発振状態について、NI Multisimを使ってシミュレーションをしてみました。まずこの書き込みの分については、lbsKobayashiさんに再度確認していただいた時定数を用いたものです。回路図(左のPDF)をご覧ください。

OPアンプは25000倍の理想増幅回路、+/-の入力は3入力の電圧足し算回路(Voltage Summer)を使っております。なお、3段目の時定数については10usのままにしています。このシミュレーションではOPアンプの裸特性をsimするため、フィードバックは外してあります。

右の図はf特性として、この初段のアンプ部をシミュレーションしてみたものです。lbsKobayashiさんのおっしゃる1Mrad/sec = 160kHz程度で0dBをクロスしています。
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

ishibashiya 回答番号 17
タイトル
Re:Xtal
ポイント
pt.
アクセス8515
投稿日時10/06/12 18:43
lbsKobayashiさんが示された条件で計算してみました.ただし、現実のCMOSインバータはゲート保護のための抵抗、寄生的に存在するフィードバック容量、さらには数kΩの出力抵抗を考慮する必要があります.これらを考えに入れてループゲインの周波数特性と、発振の立ち上がり特性を計算しました.今回は周波数特性のみをお伝えします.
電圧増幅率が20倍程度の場合、出力抵抗Rdが30kΩになると発振しないという結果になります.しかしCMOSの電圧増幅率は構成するMOSFETの相互コンダクタンスをgmとするとgmRdとなるので、出力抵抗だけで評価するのは片手落ちかもしれません.
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

ishibashiya 回答番号 16
タイトル
Xtal
ポイント
pt.
アクセス8720
投稿日時10/06/12 11:19
lbsKobayashiさん、新しいお題をありがとうございます.これから計算したいところですが、買い物に出かけますので、多少の詳しいお話は午後になるでしょう. このような回路のインバータは暗黙のうちにCMOSであると考えるのが普通です.CMOSインバータの出力インピーダンスは十分低いと考えられがちですが、大きな誤解です.CMOSインバータがアンプとして動作する領域ではPチャンネル、Nチャンネルの両方のMOSFETがアクティブですから、それぞれのMOSのドレイン抵抗(微分抵抗)は20kΩ程度あるでしょう.したがって、CMOSインバータの出力インピーダンスはkΩのオーダー以上です.また、多くのXtal発振回路ではインバータ出力とC4の間にkΩオーダの抵抗が入ります.Xtal発振回路の挙動を決める重要なパラメータとしては、一般的には負荷容量と呼ばれているC3,C4のみならずこの直列抵抗も大きな意味を持ちます.振動子は機械振動を電気信号に、あるいはその逆の変換をする素子ですから、基本振動のみならずオーバートーンと呼ばれる高調波でも共振します.このような場合、オーバートーン発振を抑制したり、逆に特定のオーバートーンで発振させたりする場合にはこの抵抗の選択が重要なポイントに成ります.また、C3,C4に予想に以上に大きな電流が電流が流れるとのご指摘ですが、もしそうであるとするとその電流はC3,C4、振動子が作るループを貫流することになります.実際には水晶振動子に流せる電流あるいは印加できる電力はデータシートにも記載されており、μW程度のごく僅かなものです.そうでないと振動子が機械的なダメージを受けるからだと思います.
****なお厳密にはインバータの出力インピーダンスと C3 が作る一次系の open loop の影響は単純な挿入ではありません。四端子網:F 行列の考えが必要となります。でも Python sf の数値計算有理関数では無理でした。シンボリックな有理関数にすれば可能ですが、ワンライナーで書けるような代物ではありません。他の計算ソフトでも無理だと思います。
******⇒解析的な話は苦手なので、上に書かれた内容は十分には理解できませんが、私が常用している計算の流儀では十分に可能な計算です.オーバートーンを含むモデルでも簡単に解を得ることができます.

lbsKobayashi 回答番号 15
タイトル
re:ひっかけ回路
ポイント
pt.
アクセス8771
投稿日時10/06/12 11:19

>ゲインの絶対値が1以上で位相が180度以上回っているフィードバック系は必ず発振するか?

回路図の例から判断すると条件安定系:すなわち「gain 交点で位相回転 180 度以下であれば、gain 交点より小さい周波数で位相回転が 180 度以上回っていても発振しない」ことを言っているのだと思います。

私は、この条件安定系の主張に、いま一つ納得できていません。このスレッドの最初に行った二つ目の問題定義でも述べています。「gain 交点より小さい周波数で位相回転が 180 度以上回っている」ならば、「Bode 線図は右肩下がりなのだから、その周波数では gain が 1 以上であり、位相が 180 度回っている」ことになる。ならば「その周波数を入力したら closed loop での一周すると正帰還となり発散する」との直感を否定できていないからです。後で、「closed loop 系で、その周波数を入力する」ことを Python sf で具体的に行ってみるつもりです。具体例ではのシミュレーションでは発振しないはずであり、直感との違いを説明する何かが出てくると思っています。

------------------
添付 pdf ファイルの説明を読むと、「F 行列が等価な YΔ 変換」を使っているのですが、私には そのような概念がないので、言われている中身の中心となるはずのパラドックスを感じられません。

一般に pdf 回路にあるような抵抗・コンデンサのネットワークは F 行列で扱わないとループ特性を計算できません。Mathematica, Matlab などの計算ソフトでは、専用のパッケージを持ってこないと計算する気にはならない面倒な計算のはずです。(そんな特殊なパッケージがあるか否かは知りませんが)

一方で Python sf の行列は有理関数も要素とできるので、Python sf で用意されているものの組み合わせだけで F 行列を扱えてしまいます。

PDF にある回路の F 行列で扱うべき抵抗・コンデンサの電圧伝達特性の計算を Python sf への演習問題として計算してみます。

すでに存在している F 行列に平行または直列にインピーダンス Zb が追加されたとき、新たな F 行列の合成は下のように計算できます。

・合成前の F 行列
Io = │F00,F01│ Ii
Vo  │F10,F11│ Vi

・並列での F 行列合成
Ii→  ┌──────┐→Io`    →Io
  ──┤ Original F ├───┬───
    │ Matrix   │  ┌┴┐
    │      │  │Zb│ Vo
Vi │      │  └┬┘
    │      │   │
  ──┤      ├───┴─●─
    └──────┘

  Io ==( [F00, F01] - [F10, F11]/Zb ) Ii
  Vo   [F10, F11]  [ 0, 0]    Vi

・直列での F 行列合成

Ii→ ┌──────┐→Io ┌─┐→Io
  ──┤ Original F ├───┤Zb├─
    │ Matrix │   └─┘
    │      │Vo     Vo
Vi │      │
    │      │
  ──┤      ├─────●─
    └──────┘

  Io ==( [F00, F01] - [ 0, 0]Zb ) Ii
  Vo   [F10, F11]  [F00, F01]    Vi

D:\my\sf\blog\AnCmmnty\Fmatrix_synthesys.jpg


F 行列が求まると、出力開放での電圧伝達関数 Vo/Vi は下のように Fij 要素で表される

  Vo/Vi ≡ (-F10 F01/F00 + F11)

この計算を Python で愚直に行います。求めた F 行列から抵抗・コンデンサの電圧伝達特性を計算し、その gain/phase 特性を描かせます。長くなりすぎるので Ri 抵抗を繋ぐ前の F 行列をファイル変数に一旦出力しています。ワンライナーではなく two liner で Bode 線図を描きます

・C=0.01uF のとき
Rs,C,Rp=10kΩ`, 0.01uF`, 1kΩ`;Z= 1/(C `s)+ Rp;F=kzrs(2,2, ClRtnl)^0; F=F-~[[0,0],[F[0,0],F[0,1]], ClRtnl]Rs; F=F-~[[F[1,0],F[1,1]],[0,0], ClRtnl]/Z;F:=F^2

=:F;Ri=100kΩ`; F=F - ~[[F[1,0],F[1,1]],[0,0], ClRtnl]/Ri;G = (-F[1,0] F[0,1]/F[0,0] + F[1,1]); G.plotBode(10Hz`,10M` k` Hz`)

D:\my\sf\blog\AnCmmnty\ishbashi_F_01uF_Bode.jpg


・C=0.001uF のとき
Rs,C,Rp=10kΩ`, 0.001uF`, 1kΩ`;Z= 1/(C `s)+ Rp;F=kzrs(2,2, ClRtnl)^0; F=F-~[[0,0],[F[0,0],F[0,1]], ClRtnl]Rs; F=F-~[[F[1,0],F[1,1]],[0,0], ClRtnl]/Z;F:=F^2

=:F;Ri=100kΩ`; F=F - ~[[F[1,0],F[1,1]],[0,0], ClRtnl]/Ri;G = (-F[1,0] F[0,1]/F[0,0] + F[1,1]); G.plotBode(10Hz`,10M` Hz`)

D:\my\sf\blog\AnCmmnty\ishbashi_F_001uF_Bode.jpg

 C = 0.001uF のときは 1MHz 近辺で位相が 180 度近くまで回っていますが
 C = 0.01uF のときは 1MHz 近辺で位相が戻ってしまっています。

これに 1MHz 近辺を gain 交点とする Op アンプをシリーズに挿入して close loop にしたとき
 
 C = 0.001uF のときは 発振するが
 C = 0.01uF のときは 条件安定な系となり発振しない

---------------
以上が私の計算・検討ですが如何でしょうか。普通の計算ソフトでは計算する気にもならないと思います。
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

lbsKobayashi 回答番号 14
タイトル
re:ループを開いたときの伝達関数
ポイント
pt.
アクセス8591
投稿日時10/06/12 10:14
Greenline さんこんにちは

>裸DC利得が25000、GB積が1MHzとのこと

すいません、Op Amp を下の有理関数であらわすには GBW 積 1MHz/(2pi) にしないとだめでした。角周波数と周波数の混同をやっちまいました。
1e+06
-----
s + 40

先に行ったの議論展開での式は、上の有理関数を前提にしているので GBW 積を 1MHz/(2pi) に修正させてください。

>> 点電荷が作る電場の、位置:(1,2,3) における div を

>として、
>
>`div(~[`X,`Y,`Z]/norm(~[`X,`Y,`Z])^3)(1,2,3)
>===============================
>2.38351005599e-11

>と計算されていらっしゃいますが、この点電荷のある位置は(0,0,0)でしょうか

そうです。そして (1m`,2m`,3m`) の位置に作る電場は下の値になります

(~[`X,`Y,`Z]/norm(~[`X,`Y,`Z])^3)(1m`,2m`,3m`)
===============================
[ 0.01909009 0.03818018 0.05727027]
---- ClTensor ----

r=(4m`,5m`,6m`) の位置にある電荷が (1m`,2m`,3m`) の位置に作る電場は下で計算できます。

r=~[4m`,5m`,6m`];((~[`X,`Y,`Z]-r)/norm(~[`X,`Y,`Z]-r)^3)(1m`,2m`,3m`)
===============================
[-0.02138334 -0.02138334 -0.02138334]
---- ClTensor ----

ε0や 4pi の係数を入れていないので、MSKA 単位系での値:V`/m` ではありませんが。


>divergenceはゼロになるのではないかと思っておりました

仰るとおるです。そして「2.38351005599e-11」はゼロとみなせる十分に小さな値です。上の `div(..) は数値微分です。シンボリックな微分ではありません。そして数値微分には計算誤差が付き物です。このような微小な数値を計算誤差と解釈するのか否かはユーザーが行うことになります。

Python sf では sympy を使った symbolic な微分も行えるのですが、もう少し複雑になります。でも、シンボリックな演算ならば、div は完全に 0 になります。

ts();r=ts.sqrt(`x^2+`y^2+`z^2);`div([`x/r^3,`y/r^3,`z/r^3])
===============================
-3*x**2/(x**2 + y**2 + z**2)**(5/2) - 3*y**2/(x**2 + y**2 + z**2)**(5/2) - 3*z**2/(x**2 + y**2 + z**2)**(5/2) + 3/(x**2 + y**2 + z**2)**(3/2)

上の有理関数は 0 になっているのですが、そこまでは sympy は自動判別できません。分母を共通にして足し合わせる ts.together(..) をユーザーが明示的に適用せねばなりません。

ts();r=ts.sqrt(`x^2+`y^2+`z^2);ts.together(`div([`x/r^3,`y/r^3,`z/r^3]))
===============================
0

lbsKobayashi 回答番号 13
タイトル
re:発振条件と発振周波数
ポイント
pt.
アクセス9059
投稿日時10/06/12 10:01
ishibashi さん、はじめまして。専門の方の御意見を伺え喜んでいます

「ボード線図は発振あるいは発散するかの目安を与えるもので、発振周波数を推定するするには不向きだと思います.」

同意します。元々発信周波数を対数軸で描く Bode 線図を使って三桁以上の精度で発振周波数を導くなんて無理だと思います。 でも 5% 精度の部品で作りあげる回路の発振周波数を求めるのには使えるとも思います。


「OPアンプの飽和特性のみで振幅が抑制されるとした場合は、振幅条件|Gloop|=0dBから推定した周波数に近くなります」
この結論に何とか辿りついた身にとって、深い背景知識と豊富な実務に経験のある方から同様な意見を伺えると心強く感じます。


「水晶振動子を使った発振回路の場合は、位相条件から求めた周波数が発振周波数になるようです.」
XTALなどの発振子回路について、以前から納得できない部分があったのですが、ちゃんと考えることを放棄して、メーカーの推奨回路を使うだけで済ませてきました。

今回 ishibashi さんの指摘があったこと、Python sf という計算ツールを使えるようになったことから、下の発振子の回路を例に踏み込んで考えてみました。

             |\
      ┌──────┤ >○────────┐
      │      レ/           │
      │         R2 1MΩ      │
      ├───────WMWM─────────┤
      │                  │
      │     11mH  0.011pF  10Ω   │
      │  ┌─∩∩∩∩─┤├──WMWM─┐ │
      │  │   L1    C1   R1 │ │
      ├──┤      3pF      ├─┤
      │  └──────┤├─────┘ │
      │           C2       │
     ─┴─ 100pF   XTAL:14.4MHz     ─┴─ 100pF
     ─┬─ C3               ─┬─
      │                  │  C4
      ≡                  ≡

D:\my\sf\blog\AnCmmnty\XTAL_model_circuit.jpg

XTAL の LCR モデル定数は下の URL から拾ってきました
http://park.geocities.jp/denki_zakka/jikken_osc.html

上の回路で

・R2 1MΩがバイアス回路になっておりインバータを 20dB 程度の反転アンプにしている
・XTAL は C3,C4 高周波パス・コンデンサを経由して高周波的にショートしている

ことは理解できます。納得できていなかったのは C3, C4 のパスコンの値の決め方です。そもそもインバータの出力インピーダンスが 0 ならば C4 の値など動作に影響しない回路です。

余談:この回路を解析しようと四端子回路網で計算して嵌りました。数値計算で四端子回路網から分母多項式を作って計算させたのですが無理がありました。有理関数を要素とする 2 x 2 行列の数値演算では、分母に余分な根が入り込んでしまいます。数値計算処理では分母/分子の共通恨をキャンセルできないからです。でも その問題が見えず、紛れ込んできた不安定根の理由を見つけ出すのに時間をとられました。そのおかげで Python sf の有理関数ルーチンを改良すべき点が見つかったので、この回り道は無駄になりませんでした。でも ishibashi さんへの返答が遅れました。失礼しました。

この回路で一番驚いたのが C3,C4 に流れる電流でした。2V peak to peak でも 18A peak の正弦波電流が流れるなんて全く見えていませんでした。基板では発振回路はできるだけ最小パターンにしろというのも良く分かります。

ts();C,f=100pF`,14.4M` Hz`;2V` (C 2pi f)
===============================
18.0955736846772*A`

コンデンサ C4 が この回路の肝だと思います。それに比べれば C3 の値は open loop gain をにしか利いてこない思います。

まず話が単純な C4 == 0 の場合を考えてみましょう。この時は四端子網を考える必要もありません。このスレッドの最初に考えたオペアンプ帰還回路と同じです。抵抗の変わりに XTAL が入っているだけです。

XTAL 単体のインピーダンスは次の Python sf 式で表せます。Python sf ファイル変数 XTAL にしておき再利用していきます。

L1,C1,R1, C2 = 11e3uH`, 0.011pF`,10Ω`, 3pF`;XTAL:=((L1 `s + 1/(C1 `s) + R1) ~+(1/(C2 `s)))
===============================
3.333e+11 s^2 + 3.03e+14 s + 2.755e+27
-----------------------------------
s^3 + 909.1 s^2 + 8.295e+15 s

この XTAL と C3 で分圧された位置の周波数位相特性は、下の Python sf 式で描けます。
=:XTAL,F;C3,C4=(100pF`,)*2;Gs=1/(C3 `s)/(XTAL+1/(C3 `s));start,Δf=1.4468e7Hz`,4e3Hz`;plotGr(λ f:abs(Gs(2pi `i (start+f))), klsp(0, Δf, 256));plotGr(λ f:sc.angle(Gs(2pi `i (start+f))), klsp(0, Δf, 256), color=orange)

D:\my\sf\blog\AnCmmnty\XTAL_C3100pF_feq_phase.jpg


400 Hz 位の狭い範囲で急峻に位相が 180 度回っています。でも 180 度を越えません。ですからインバータが定数アンプのときは発振しません。最初の Op アンプのときと同様に共振気味であるにすぎません。

下のように 20 倍の gain を与えても、その closed loop 系の根は安定根のままです。発振しません

=:XTAL;C3,C4=(100pF`,)*2;Gs=20/(C3 `s)/(XTAL+1/(C3 `s)); (Gs/(1+Gs)).m_plDenom.roots
===============================
[-454.54545479+90973485.34081645j -454.54545479-90973485.34081645j
-454.54545492+90913945.24521582j -454.54545492-90913945.24521582j]


ここで C3 の出番です。先にインバータの出力インピーダンスが 0 ならば C3 の有無は発振に影響しないとしましたが、現実にはインバータは出力インピーダンスを持ちます。それを 20オームだとしてみましょう。

ts();C,R = 100.pF`,20Ω`;C R
===============================
2.0e-6*s`

すると C3:100pF との時定数:T は 2e-6s` になります。この一次遅れを、ひとつ上の close loop 系に加えてみましょう

=:XTAL;T, C3=2e-6s`, 100pF`;Gs=1/(T `s+1) 20/(C3 `s)/(XTAL+1/(C3 `s)); (Gs/(1+Gs)).m_plDenom.roots
===============================
[ 6.37799755e+01+90913949.75833096j 6.37799755e+01-90913949.75833096j
-4.54538135e+02+90913945.2452189j -4.54538135e+02-90913945.2452189j
-7.92298802e+05 +0.j -5.00000000e+05 +0.j ]

今度は発振根が出てきました。この発振根が出てくるか否かは結構微妙です。T = 5e-6s` にすると発振しません。安定根に戻ってしまいます。XTAL メーカーが IC ごとの推奨発振回路を提示する意味が良く分かった気がします。

=:XTAL;T, C3=5e-6s`, 100pF`;Gs=1/(T `s+1) 20/(C3 `s)/(XTAL+1/(C3 `s)); (Gs/(1+Gs)).m_plDenom.roots
===============================
[ -2.47211498e+02+90913945.96689753j -2.47211498e+02-90913945.96689753j
-4.54533095e+02+90913945.24506553j -4.54533095e+02-90913945.24506553j
-3.16919547e+05 +0.j -2.00000000e+05 +0.j ]

ちなみに、インバータのアンプなんて結構歪んでいます。発振振幅が大きくなると loop gain は下がってしまいます。この非線形な効果は発振周波数を低いほうへシフトさせるでしょう。結局位相が 180 で回らない箇所に近ずいて釣り合うのでしょう。これが ishibashi さんが言っていた「水晶振動子を使った発振回路の場合は、位相条件から求めた周波数が発振周波数になるようです」の詳しい意味だと思います。

あと C3 は共振回路を構成することでインバータのアンプ出力電流を抑える働きもします。共振器の電圧とインバータの電圧が殆ど同じになる働きもしています。

この二つの意味で C3 が XTAL 発信回路の肝だと書きました。

なお厳密にはインバータの出力インピーダンスと C3 が作る一次系の open loop の影響は単純な挿入ではありません。四端子網:F 行列の考えが必要となります。でも Python sf の数値計算有理関数では無理でした。シンボリックな有理関数にすれば可能ですが、ワンライナーで書けるような代物ではありません。他の計算ソフトでも無理だと思います。また四端子網で厳密に扱っても一割程度しか違いが出てこないと思います。この近似で済ませます。



------------------
以上のような考えに至りましたが ishbashi さんの考えと同じでしょうか?
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

ishibashiya 回答番号 12
タイトル
ひっかけ回路
ポイント
pt.
アクセス8688
投稿日時10/06/11 14:40
昔、同僚と賭けをしました.それはゲインの絶対値が1以上で位相が180度以上回っているフィードバック系は必ず発振するか?という問題です.この賭けのために作ったのが添付の回路です.その後この問題を整理し直し、アナログ電子回路講座の教材にしました.今回の議論の道筋に合ったエピソードになるかどうか、自信はありませんがご賞味下さい.
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

Greenline 回答番号 11
タイトル
re:発振条件と発振周波数
ポイント
pt.
アクセス8801
投稿日時10/06/10 11:14
ishibashiyaさん、こんにちは!初書き込みどうもありがとうございます(^_^)!

お二人とも理論に造詣の深い方で脱帽しております。

> OPアンプの飽和特性のみで振幅が…水晶振動子を使った発振回路の場合は…
(省略させていただきました)

さきの書き込みのように私は発振周波数は180°位相が回ったところがとずっと思っていましたが、実際の挙動は(Aβ>1なら)どうやらさらに複雑な挙動をしめすようですね。

トランジスタの発振回路では振幅が上昇することにより、全体の利得(負性抵抗)が減少するということになっていますが、これもクリッピングとの深い関係にもなっているのでしょうね…。

s平面の右側に4つ以上の極があった場合は発振周波数はどうなるのだ?とかも思いました。もう自分の限界を超えています(^_^;)


> 添付のデータはFree Pascalのlazarusで数値計算

ishibashiyaさんも理論的、数学的に造詣がお深く、ホントにお二人の書き込みに対して敬意をもって拝見させていただいております!

Greenline 回答番号 10
タイトル
ループを開いたときの伝達関数
ポイント
pt.
アクセス8832
投稿日時10/06/10 09:43
lbsKobayashiさん、コメントありがとうございました!

回答番号6, 7の伝達関数のことについてですが、私は以下のように考えてしまいました。なおC1R1などは1段目の容量C(C1)と抵抗R(R1)を意図しておりました。

裸DC利得が25000、GB積が1MHzとのこと、s = jωですから、1次遅れ系が25000の利得のアンプの後段に接続されれば(添付の回路図のように)、

H(s) = 25000 / (sCR + 1)

として、これが1MHz = 2 * pi * 1E6 rad/secで|H(s)| = 1になりますから、

H(s) = 25000 * [1/(0.03979 s + 1)]

と考えました。一応、この時定数(= 0.03979sec)で1MHzで|H(s)| = 1にはなるようです(これも添付してあります)。lbsKobayashiさんの「1MHz」というのが角周波数であれば自分の考えとの相違は理解できますが、この点はいかがでしょうか。お教えいただければ幸いです。

また、

H(s) = 25000 * [1/(0.03979 s + 1)] * [1/(1E-3 s + 1)] * [1/(10E-6 s + 1)]

の式の最後の「1/(10E-6 s + 1)」については、

> 10us の位置に pole を追加してみます。1/(10us``s+1) をシリーズに入れます

という回答番号5の最初の条件で考えておりました。これも間違いなどあればご指摘をお願いいたします。

なお、頂いた以下の式、

   1e+06       1000      1000
   -----       --------    --------
   s + 40      s + 1000    s + 1000

については(2つめの分数で考えれば)分母・分子それぞれに1/1000をかければ私の計算と符合すると思います(^_^)。

※添付の回路図に各時定数間にバッファをいれてありますが、これは伝達関数として各時定数が単純な掛け算でできるようにする(Fマトリックス的計算にならないように)ためです。



また、こちらからも質問させてください。ずっと考えていたのですけれども…(^_^;

> 点電荷が作る電場の、位置:(1,2,3) における div を

として、

`div(~[`X,`Y,`Z]/norm(~[`X,`Y,`Z])^3)(1,2,3)
===============================
2.38351005599e-11

と計算されていらっしゃいますが、この点電荷のある位置は(0,0,0)でしょうか。この計算関数式の意味を取り違えているかもしれませんが、点電荷から離れた位置のdivergenceはゼロになるのではないかと思っておりました。こちらもお教えいただければ幸いです。よろしくお願いいたします。




それとご質問の、

> 質問 pre, の使用は可能でしょうか

についてですが、この掲示板ではいたずらなどを避ける意味からHTMLタグが使用できない仕様になっています。我々スタッフは特別に<A>タグ程度は使えるようになっていますが、スタッフであっても複雑なタグは使えないのです…。

ご事情ご賢察いただき、複雑な数式などはpdf化して添付いただけると幸いです。こちらもよろしくお願いいたします。
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

ishibashiya 回答番号 9
タイトル
発振条件と発振周波数
ポイント
pt.
アクセス9057
投稿日時10/06/09 16:41
なかなか興味深い議論ですね.割り込ませて下さい.Bode線図あるいはナイキスト線図による評価は、システムが安定か、発振あるいは発散するかの目安を与えるもので、発振周波数を推定するするには不向きだと思います.特にOPアンプのフィードバック系の安定性評価の場合には、発振した場合の回路の非線形性が大きすぎるため位相条件、振幅条件のいずれから推定しても誤差が大きいようですが、OPアンプの飽和特性のみで振幅が抑制されるとした場合は、振幅条件|Gloop|=0dBから推定した周波数に近くなります. 水晶振動子を使った発振回路の場合は、位相条件から求めた周波数が発振周波数になるようです.
添付のデータはFree Pascalのlazarusで数値計算した例です.lazarusに回路計算のためのコンポーネントと、オッシログラフ、スペアナもどきのコンポーネントを含むパッケージを追加し、複素数計算も含め、快適な計算環境を作って利用しています.もちろん同様のことがDelphiでも実現できます.以下がループゲインの計算と表示のプログラムです.
with spectrum1 do begin
clear;
repeat
Zc:=_C1._Z(freq);
G1:=divider(R,Zc);
Gloop:=OpAmp1.Gopen(freq)*G1*G1;
gain1:=db(Gloop);
phase1:=arg(Gloop);
display;
until outofscale;
end;
こちらが過渡現象計算のためのコードです.
with oscillo1 do begin
clear;
repeat
hor:=t;
ver1:=eop;
ver2:=vc1;
ver3:=vc2;
draw;
eop:=eop-(vc2+ofs)*w*dt;
if eop>4 then eop:=4 ;
if eop<-4 then eop:=-4;
vc1:=vc1+(eop-vc1)/R/C*dt;
vc2:=vc2+(vc1-vc2)/R/C*dt;
t:=t+dt;
until outofscale;
Delphi,lazarusを技術計算のツールとして普及させたいものだと考えています.
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

lbsKobayashi 回答番号 8
タイトル
Op 回路での発振の検討 2
ポイント
pt.
アクセス9043
投稿日時10/06/09 13:36
先の 1kΩ`,1uF` のフィード・バック位相遅れに 1ms` の pole を追加したときの発振の様子を描かせてみます。

=:Op;T, Z1,Z2 =1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1( 1)/(T `s+1)*(Z2/(Z1+Z2)));(Gs/(1+Gs)).plotAnRspns( 3ms`, [1V`,-1V`]+[0]*254)
D:\my\sf\blog\AnCmmnty\OpRC_1kΩ_1uF_1ms_AnRspns.jpg

発振の種として 1V/-1V に一瞬だけ振っています。発振しながら exp で急速に振幅を増やしていきます。線形な理想回路ですから 3000V なんて値がでてきますが、Op アンプ回路では 12V ぐらいで飽和するでしょう。

Op アンプは飽和しても、線形モデルに 8651.1965506j の虚数成分があることは位相を回し続ける働きがあることを意味します。位相を回し続ける働きがあるから、発振周波数近くで飽和しても信号が逆方向に変化し、そして逆方向に振りきれて飽和することを繰り返して発振を続けるのだと思います。

gain 1 より大きい周波数では発散してしまうので gain 1 になる所で釣り合うのだと思っています。

Pole 発振周波数と open loop gain 1 交点の周波数が近いことが単一周波数の正弦波に近い形で発振するのに必要なのだと思います。この周波数が倍以上も違ってきたら単一周波数の正弦波に近い形を保てないと思います。

Pole 発振周波数と open loop gain 1 交点の周波数が近くなるのに、最小位相推移系になることが利いてくるのではと勝手に推測しています。先のポールを挿入する実験でも open loop gain 1 交点の近くに closed loop の pole の虚数成分が、10us,1ms のpole 挿入に合わせて移動してきました。これが単なる偶然とは思えません。ここらを理論的に説明できる方がいらしたら解説をお願いします。


ちなみに最小位相推移系を意識的に壊してみます。一次の pole:1/(T s+1) の代わりに (-T s +1)/(T s + 1) の位相シフトを挿入してみます。

# (-T s +1)/(T s + 1) の位相シフトを挿入したときの Open Loop Bode 線図
=:Op;T, Z1,Z2 =1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1(-T `s + 1)/(T `s+1)*(Z2/(Z1+Z2)));Gs.plotBode(0.1Hz`, 100k` Hz`)
D:\my\sf\blog\AnCmmnty\OpRC_1kΩ_1uF_1msShift_Bode.jpg

如何にも発振しそうな位相遅れの様子です。


# (-T s +1)/(T s + 1) の位相シフトを挿入したときの closed Loop poles
=:Op;T, Z1,Z2 =1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1(-T `s + 1)/(T `s+1)*(Z2/(Z1+Z2)));(Gs/(1+Gs)).m_plDenom.roots
===============================
[-33116.0810328 30071.88671846 1004.19431434 -1000.00002087
-999.99997913 -40. ]

でも根たちの虚数成分は 0 になってしまいました。全部が実根です。発散するだけで発振しません。Open loop gain 1 交点周波数近傍の虚数成分はなくなってしまいました。最小位相推移系でなくなったせいだと思っています。



(-0.1T s +1)/(T s + 1) とゼロ点を 1/10 にして 1/(T s+1) に近づけてやると虚数成分が復活してきます。

=:Op;T, Z1,Z2 =1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1(-0.1T `s + 1)/(T `s+1)*(Z2/(Z1+Z2)));(Gs/(1+Gs)).m_plDenom.roots
===============================
[-14093.54911085 +0.j 6026.77455542+5885.17415306j
6026.77455542-5885.17415306j -1000.00000725 +0.j
-999.99999275 +0.j -40.00000000 +0.j ]

でも 8651.1965506j → 5885.17415306j と虚数成分は大きく変化しています。

逆に (1.1T s +1)/(T s + 1)^2 と最小位相推移系を保って 1/(T s+1) に近づけてみましょう

=:Op;T, Z1,Z2 =1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1(1.1T `s + 1)/(T `s+1)^2*(Z2/(Z1+Z2)));(Gs/(1+Gs)).m_plDenom.roots
[-11043.53971000 +0.00000000e+00j 4456.31501274 +8.93034438e+03j
4456.31501274 -8.93034438e+03j -1000.02579960 +0.00000000e+00j
-999.98710020 +2.23466398e-02j -999.98710020 -2.23466398e-02j
-909.09031548 +0.00000000e+00j -40.00000000 +0.00000000e+00j]

今度は別の根も追加されています。でも それは安定根です。体勢に影響有りません。不安定根の虚数成分は 8651.1965506j → 8.93034438e+03j と先ほどより ずっと近い虚数成分になっています。これも単なる偶然とは思えません。
※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

lbsKobayashi 回答番号 7
タイトル
re: 奥深いですね。自分の理解もまだまだでした
ポイント
pt.
アクセス8934
投稿日時10/06/09 13:06
Greenline さん、こんにちは追試ありがとうございます。


「自分は位相が180°回る周波数(Aβ>1であっても)で発振するものと考えていました。」

一般的には 180°回る周波数ぴったりで発振するのではないと思います。

先にも出した pole が角周波数:8651.1965506rad`/s` で発振している兵ループ系の根は下の値です。
=:Op;T, Z1,Z2 =1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1/(T `s+1)*(Z2/(Z1+Z2))); (Gs/(1+Gs)).m_plDenom.roots
===============================
[-10690.02176202 +0.j 4325.01088101+8651.1965506j
4325.01088101-8651.1965506j -999.99996963 +0.j
-1000.00003037 +0.j -40.00000000 +0.j ]

一方で Open Loop の位相回転が 180 度(反転を入れて 360 度) 回る位置での角周波数は 1039rad`/s` です。次のよう計算できます。線形系自体が持つ角周波数とは大きくずれています。

=:Op;T, Z1,Z2 =1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1/(T `s+1)*(Z2/(Z1+Z2)));invF(λ ω:sc.angle(`i Gs(`i ω)),600rad`/s`,6000rad`/s`)(-pi/2)
===============================
1039.23048454

確認
=:Op;ω, T, Z1,Z2 =1039.23048454rad`/s`,1ms`, 1kΩ`,1/(1uF` `s);Gs=(Op*1/(T `s+1)*(Z2/(Z1+Z2))); sc.angle( Gs(`i ω))
===============================
-3.14159265359

Wien Bridge 発振回路のように発振限界ちょうどの所にアンプのゲインを持っていくように電球のフィラメントの熱抵抗に調整させる回路だと 180 度ぴったりになると思います。


一般的には Non Linear な作用が gain 1 近辺での発振に導くのだと私は思っています。また最小位相推移系であることも利いてくると思います。思っているだけで解析的な説明はできませんが。でも それらしいことを数値実験で示せるのではと思っています。



「ループを開いたときの伝達関数(回答番号5の最初の条件)は以下でよろしいですか?」
C1R1 などの意味が分かりません。下のようなループ要素で数値実験しています。

  +---------+   +-----------+  +-------------------------+
----+ Op Amp +-----+ 追加 Polie+---+ R C 位相遅れ Z2/(Z1+Z2) +---
  +-------- +   +---------- +  +------------------------ +
          T=1ms:1/(T s + 1) Z1,Z2 = 1kΩ`,1/(1uF` `s);(Z2/(Z1+Z2))
   1e+06       1000      1000
   -----       --------    --------
   s + 40      s + 1000    s + 1000

D:\my\sf\blog\AnCmmnty\block_rationalFunction.jpg

勝手に、自分の言葉に変えてしまいましたが、回答になっているでしょうか?



-------------------------------
質問 pre,   の使用は可能でしょうか

有理式や ASCII 図などを使いたいのですが html 掲示板のせいでしょうか、スペースが剥ぎ取られ、proportional font が使われてしまいます。<pre>..</pre> や   を挿入試してみたのですがだめでした。

この掲示板で pre や   を使う方法がありますでしょうか?

※このデータをダウンロードするにはログイン(ユーザー登録)が必要です。

Greenline 回答番号 6
タイトル
奥深いですね。自分の理解もまだまだでした
ポイント
pt.
アクセス8854
投稿日時10/06/08 21:04
lbsKobayashiさん、あらためてこんばんは!非常に興味深い書き込みをありがとうございます。自分も書き込んでいただいた内容をもとにNI Multisimで動きを追試(?)させていただいております。

通常電子回路としては、Aβ=1になるところで発振させる(位相を180°回して発振自体は継続させる)わけですから、Aβ>1のときの発振周波数がいくつかというのは深く考えておりませんでした。自分は位相が180°回る周波数(Aβ>1であっても)で発振するものと考えていました。まだNI Multisimの結果がきちんと出ていませんので(ちょっと気になる点もあるので)、もう少し自分なりに考えさせてください…。

たしかにおっしゃる点からすれば、帰還量βを変化(小さく)していけば、CR時定数、つまり位相が180°回る周波数が同じでも、帰還回路を構成したときの伝達関数の極の点が変わっていくはずですから、「極」として考えたときの虚部の大きさも変わっていくはず(精査していませんが)ですね。

ちなみに今までのlbsKobayashiさんの書き込みを考えますと、ループを開いたときの伝達関数(回答番号5の最初の条件)は以下でよろしいですか?

1) 25000 = s C1R1
@ s = 2 * pi * 1E6; C1R1 = 25000/2 * pi * 1E6 = 0.003979

2) C2R2 = 1E-3

3) C3R3 = 10E-6

H(s) = 25000 * [1/(0.03979 s + 1)] * [1/(1E-3 s + 1)] * [1/(1E-6 s + 1)]

発振現象は奥が深いなとあらためて思っております(汗)。

スレッド一覧に戻る



コメント投稿

* コメントの投稿にはログイン(ユーザー登録)が必要です。


タイトル

* 50文字以内
『初心者でも大丈夫!』
(記事の内容が初心者向けの場合はここにチェックをしてください。)
本文

* あと6000文字

ファイル1
ファイル2
ファイル3

* 5MBまでのGIF, JPEG, PDF ファイルが投稿できます。

* 入力に時間がかかると、セキュリティのためにログイン情報が破棄されて書き込みが処理されないことがあります。投稿内容確認ボタンを押す前に、一旦文章をクリップボードにコピー(本文入力欄をクリック後Ctrlキー+A、Ctrlキー+Cと連続で押す)して、再貼り付けできるようにしておいて下さい。

ゲスト 様
投稿する場合はログインして下さい。 初めての方はこちらからご登録ください。


お知らせ
ユーザーランキング

* ランキング情報は約1時間おきに更新されます。
EDN NOW


  個人情報保護方針会社情報お問い合わせ

copyright(c) 2010 - 2011 ITmedia Inc.