State Variable 発振器の振幅安定回路の考察

低歪率の State Variable 発振器では、発振回路自体よりも振幅を安定させる回路のほうがはるか複雑で、難しい設計になります。
その点に関して深く掘り下げた記事をあまり見かけないので、ここで考察してみることにします。
難しさは、特に発振最低周波数(今回は 10Hz)において:
1.安定期に振幅の揺れが無いこと(C/N)
2.振幅安定期までの立ち上がりが早いこと
3.ノイズやリップルを含まないこと
といった要件を全部満足させることに矛盾があるためです。
解析にあたっては
前の記事でも懲りたように、理論式での解法はほぼ不可能なので、Spice
を使って適当な値を模索する方法を取ることにします。
しかし、今回のように多重のループのあるケースでは Spice ですら途中で過渡解析計算が困難になり、Error を吐き出して放り出すことがしばしばあります。
回路ブロックとしては振幅検出と、レベルシフトと、LPF (Low Pass Filter)と振幅抑制とで構成しましょう。
別の原理で振幅制御ができるかもしれませんが、まあこの方法が一般的でしょう。
振幅検出:
振幅を検出するということは、交流を直流にする(整流)ということなのですが方法は様々です。
すぐ思いつくこととしては両波整流、90度の信号があることを使った4相整流、それを変形した8相整流、
90度位相差信号の2乗和をとる、といったことがあげられます。
また、8相整流の高調波分を少し落とすためにキャパシタを追加する方法もあります。
さらに、アナログスイッチを使ってピーク時の電圧を取り出して保持する方法もあります。
例えば、コサイン信号がゼロクロスするときにサイン信号をキャパシタに移すといった方法です。
しかし、これはデジタル信号を使いますのでノイズの観点から避けることにします。
両波整流はリップルが大きいので比較から外し、残り4つを比較してみます。
条件として、入力は 8V ピークとし、検出後にリップルの上端が 8V になるように増幅して揃えます。
また、積分器の片方の R が 1% 増加したときのリップルの変化も見ることにします。
| R1 誤差なし | R1= +1% |
| 4相整流 |  |
 |
| 8相整流 | |
|
8相整流 10u 付加 | |
|
| 2乗和 | |
|
上の図を見れば、必然的にキャパシタ付きの8相整流と、2乗和とが有利だということが分かります。 R1 に誤差が無い時は2乗和が有利です。
1% の誤差があるときは 80Hz は(一次のフィルターを仮定すると)20Hz に比べ 12dB 下げることができるので、20Hz 換算のリップルは 40mV 程度になり8相整流の方が少し有利になります。
8相整流のキャパシタの役目は、無い時のリップルの下側がとがっていて 80Hz の偶数次の高調波成分が大きいから、それを除去することによって振幅を小さくすることです。
しかし、このキャパシタは時間遅れを持ち込みますので、それが問題になるかもしれません。
よく見ると、この遅延時間は 10ms 程度なので、次段のフィルターの遅延時間とは(あとで述べる例とは)50 倍のスタガーがあり、10Hz 発振のときは大きくは影響しないでしょう。
なお、2乗和で R1=+1% の時のリップルに関してですが、発振回路の1つ目の積分器の 90 度差の信号から作る Out 信号上の 20Hz と、
2つ目の積分器から作ったそれとは(同振幅ですが)同相であるため、加えることで帳消しにする、という手法は使えません。
残念でした。 Nice try, though.

乗算器をいくつか探してみました。 AD633 という Chip が目に留まりました。 これは4象限の乗算器で電圧入出力です。
右図で、X1-X2 と Y1-Y2 の値の積を取ってからそれを 10 で割り、Z を足しこんで W に出します。
原理的にはピタゴラスの定理により:
(A*Sin(θ))^2 + (A*Cos(θ))^2 = A^2
なので、
乗算器を使って2乗和を作れば、どんな位相の瞬間でも一定電圧になります。
7.071V ピークのサイン波とコサイン波を入力すると、常に 5V の直流が出てきますし、8V 入力なら 6.4V です。
注意:出力直流電圧値は入力振幅の比例ではありません。 入力の微小(微分)の変化は出力変分2倍(ゲイン 6dB)となります。
何となれば:
((8Sin(θ))^2/10+(8Cos(θ))^2/10)*1.25=8
((8.001Sin(θ))^2/10+(8.001Cos(θ))^2/10)*1.25=8.002000125 ... 1mV 増えると 2mV 増えるわけ
発振回路の積分器の素子が誤差を持った時のリップル:
上の実験で積分器の定数誤差は2乗和の出力のリップルに大きく影響することが分かりました。 R1 だけでなく C1 C2 の ESR などについても調べます。
Case0. 元の状態
Case1. R1 が 1% 大きくなったとき (C1 の +1% も同様なのでそれは除外)
Case2. r (ESR)が 30mohm くわえられたとき
Case3. G (誘電体損失/基板汚れ)が 3Mohm 入ったとき
というそれぞれについて、
A から C に至る位相が 180 度以上回って A から C までのゲインが1になる周波数を求め、
その周波数において、各条件下で、B の振幅と位相がどう動くかを計算し、
D にどの程度のリップルが発生するか計算しました。
入力は 7.071V ピークのサイン波です。

R1 については上記のシミュレーションの結果と振幅が少し異なりますが、大まかには合っています。
C の誘電体損失や基板の汚れも(3MΩを想定したときは)同程度の問題になることが分かります。
でもまあそれは半田付け後に基板のクリーニングをすればなんとかなるでぐらいでしょう。
レベルシフト:
整流回路の出力は直流に近い波形で、正か負の数 V になります。
これに対して、AGC 素子に FET を使うと、ゲート電圧は 0V 付近の値にします。 でないと、ドレインにオフセット電圧がでてしまうことになるからです。
この2つの動作位置を合わせるために電圧差分だけシフトさせる必要があります。
ここに単なる抵抗の電圧分割を使うと整流電圧に含まれる検出すべき変分も分割されますから、損失になります。
そこで、次段に Op-Amp の反転入力を使って、逆電位との和をとることにすればゲインロスをなくすことができます。
LPF:

Sin 入力に対する Cos 入力の誤差によって発生する 20Hz のリップルは落とさねばなりません。
右の回路では 22uF と 22k は安定性と早期立ち上がりの観点からかなり頑張って大きくしたものです。
R は 33k ぐらいがギリギリです。
この「大きくした」というのは、後で述べますが、発振のビルドの時間に対して、時定数を短いほうから迫っていった、という意味です。
フィルターのゲイン:
フィルターではノイズや歪を避けるため、発振周波数以上の領域では十分減衰していなければなりません。
逆に、振幅の安定性を考えると、DC ゲインは大きいほど歓迎されます。 この 2 つは完全な矛盾ではありませんが、難しい両立です。
どこで妥協しましょうか。

この図で、R3 はレベルシフトなので議題から外します。
R1*C 積がフィルターのスロープを右に位置させるか左に位置させるかを決定します。
ω=R1*C で 0dB の位置が決まるので、20Hz での減衰量は R1=4.7k を固定すると C で決まります。 20Hz で -20dB を確保したければ 22uF になります。
R2 が直流でのゲインを決めます。 R2*C 積でスロープと直流ゲインとのロールオフの周波数が決まります。 遅延時間も決まることになります。

C を小さく(0.1uF 程度)にして R2 (ゲイン)の効果を調査しました。
1.1k 以下では R3 と -15V によって Out の電圧が 1.4V 以上にならず、FET の抵抗値が限定されて、Build できなくなります。
よって 1.1k 以上でなければなりません。
10k から 1M 辺りまで調べると、大きいほどフィードバックが良く効いて Build の時間が短くなります。 1M で3秒程度(Build-Boot 付き)。
では R2 が大きいほど良いかというとそうでもありません。
C を元の 22uF に戻すと、R2*C 積が大きくなります。
この時間値は、Build-Boot が無い状態の時の Build 時間との競合を避けるために、1/50 程度までスタガーしておきたいのです。
でないと、オーバーシュートやリンギングを起こし、結局セトリング時間が長くなります。
1秒だとすると、22uF なら 47k ということです。
この右の図は R2=100k にして、リンギングを起こしたところです。
47k ではわずかにリンギングがありますが、 22k なら少しのオーバーシュートですみます。
1回程度の振動を許すなら 33k というのも選択できます。
22k でフィルターの直流ゲインは 4.68 です。 33k なら 7 程度。
4.68 が十分であるか計算してみると、8V 入力が 1mV 変化すると、
サミングアンプの + 入力に 0.033mV 程度のフィードバックになり、振幅が安定するまでに 30 ないし 50 サイクルを要することが分かりました。
(J309 で、 Vctrl=-0.3V で使うことを仮定)
これは下に出てくるシミュレータでもその様子がみえます。
なので本当はもう 10 倍ほどゲインが欲しいところですが、そうすると(遅れ時間があるので)次のサイクルまでにはるかに行き過ぎてしまい、
ブロッキング発振まで行ってしまいます。
精一杯上げるとすると 33k というところでしょうか。 下の方の例ではそうしています。
フィルターの遅延時間:
FET が働いているときの発振ループは歪を下げる意味からフィードバック量をぎりぎりまで下げているので、時定数はおよそ 50 秒から 100 秒程度になっています。

これに対し、LPF で遅れがあると、Build-up の時間との競合が発生し、振幅のオーバーシュートやリンギングや、リンギングが永遠に続くハンティングが起きます。
飽和まで行くとブロッキング発振します。
なので、遅延の大きい高次の LPF は避けることにします。
図は1次から6次までのベッセルフィルターの反応で、高次になるほど遅れる様子が分かります。
ベッセルフィルターはバタワースなどのほかのフィルターに比べて遅れが少なく、それ自体のオーバーシュートが少ないものですが、それでもこの有様です。
計算条件は -3dB 点を ω=1rad/s(f=0.16Hz) にそろえて出力は正規化しています。
くわしくみると、次数を 2 にしたときは遅延が 1.5 倍ほどになりますが、方や減衰は 2 倍になるので、うまく狙えば隙間をつくことができるかもしれません。
やってみましたがうまくいきませんでした。
時間遅れが無く、発振周波数帯でのノイズやリップルが極端に少なく、直流でのゲインが大きい LPF という要求は無理なので、どこかの点で妥協するしかありません。
ここまでの実験では、LPF の時間遅れをビルドの時定数より短いほう(0.5秒)に設定して、スタガー比は 100 ほどにしています。
考え方によってはスタガーを逆方向にして、LPF の時定数を非常に大きく、例えば 10000 秒とか、にする方法もありえます。
それには R2 を解放し、C を 100uF や、もっと大きい値とします(これは
以前の記事で使っています)。
そのやり方は収束がとても遅くなるので、振動を抑制する手法に苦労します。
LPF の時定数をスタガーの上側(長いほう)に取るか、下側に取るかは戦略によります。
上側に取った場合は LPF のカットオフを低くできるのでリップルを抑制できますが、そのままでは振幅抑制が遅いので振幅はどんどん大きくなって飽和することになります。
その対策が必要でダンピング抵抗を入れるなどするのですが、振動を抑えるのは難しいし、20Hz の減衰が取れなくなります。
下側の場合は短時間で安定な領域に入れますが、リップルの減衰が苦手になります。
2乗和を使って、積分器の CR の誤差を小さくできれば LPF による 20Hz の減衰要求は少なくてすむので、ここの時定数は下側(短い方)が良いと考えました。
下側に取ったときの注意点として、発振周波数が高くなったときはスタガー比が小さくなるので、それに伴って LPF の時定数を小さくしないとリンギングが発生してしまうことがあります。
スイッチが余分に必要です。
振幅抑制:
振幅の制限は、交流信号の振幅を、別の直流(に近い)信号で振幅変調する、という作業です。 その変調は交流信号から見たときに直線から外れないことを求められます。
方法としては FET などの電圧による可変抵抗器や、乗算器が上げられます。 非直線性を使う変調器は論外です。 また、ノイズを持ち込むことも嫌われます。
ここに乗算器を使うことは、理論的には可能なのですが、直線性とノイズの観点から極めて不利なので排除することにします。
残りは FET しかありません。 CdS/LED カップラは反応に時間遅れがありますので、これは最初から除外します。
FET を使った場合に、制御電圧がドレインに漏れてきてオフセットになるという問題があります。
これを避けるためにドレインへの接続点を大容量のキャパシタによって DC を遮る、という方法がありますが、10Hz での移相を避けるにはものすごく大きい値になります。
別の方法として、制御信号を 0V 近くにし、かつ抵抗値の低い FET を使い、ゲートのフィードバック抵抗を大きくする方法があります。 下の例では後者を使っています。
J309 の抵抗値をシミュレータで出しておきました(右上図)。
Vctrl が -0.3V の位置で、感度 Rfet/Vctrl は 15Ω/V です。
ドレインにかける信号振幅を小さくするともう一つ良いことがあって、
Cdg はドレイン電圧で変化しますが、それによる偶数歪を小さくすることができるのです。
今ちょっと計算してみたら、ドレインの信号振幅は 27mV になります。 どのぐらいの歪になるかは解析していません。
J309 は比較的 Cdg が小さい FET ですので、問題があった場合は改善は難しいでしょう。 LSK489C よりも小さい容量です。
FET のフィードバック抵抗(図の 22k)は大きいとドレインへの漏れ電圧(オフセット)が小さくなりますが、ノイズを出しますので、まあ 22k か 47k 辺りを使うことにしましょう。

もっと Idss の大きい J910 の場合は右図のようになります。 Rfet/Vctrl は 7Ω/V で、半分ぐらいになってしまうのでちょっと使いにくい素子です。
2SK30A GR の特性は
以前の記事で測定していますが、Vctrl が -0.3V の位置で 300Ω ほどで、感度は 50Ω/V ほどです。
ノイズに関する考察:
振幅制限の信号(Vctrl)にノイズが乗ると発振信号が AM 変調を受けてジタを起こし、 C/N が悪化します。
ですから振幅制御回路はノイズを押さえた設計をします。 これはリップルを押さえるのと同じ意味ですが、周波数が特定されません。
乗算器 AD633J のノイズは、仕様書では 0.8μV/sqrt(Hz) と非常に大きい値になっています。 LM49710 の OpAmp が入力換算で 2.7nV/sqrt(Hz) であるのと比較して桁違いです。
これをフィルターで落とします。 計算すると:
帯域は 0.33x
1.57(注:Link) で 0.52Hz、 ノイズ密度は 0.8uV/sqrt(Hz)、
フィルターのゲインを 4.68 にしたときは、ノイズレベルはフィルターの出口で
0.8 x sqrt(0.52) x 4.68 = 2.7 uV
となります。 何とかなる程度ですね。
リップル キャンセル:
どうやら以前使ったリップル・キャンセルの回路を再度使わないといけないようです。

解析の前に考察してみました。 FET による利得制御の箇所では、次の3種類の歪が導入されることに気が付きました。
1.20Hz のリップルが2つの 47k を通ってドレインに出てくることによって 10Hz 信号に重畳する歪。
これは、単に漏れるだけではなく、非直線であるため 20Hz の偶数調波も発生する。
2.発振信号がドレインを駆動することによる非直線歪(あまり大きくない)。
これには FET の Cdg が変化することによる歪も含むがシミュレータでは入ってこない。
3.20Hz のリップルが、10Hz の信号を変調することによって発生する 30Hz/40Hz/50Hz の側帯波による歪。

それで、簡単な回路でシミュレートしてみました。 右の一番上の図は、シミュレータが持っている正弦波を使ったとき、 FFT の誤差も含めてどの程度歪を検出できるかを見たものです。
command を調整することによって、FFT のフロアレベルをずいぶん落とし込むことに成功しました。 これなら歪成分がよく見えます。
2つ目の図は上の1を検証するために 16V を切って、100mV だけを入れてみたものです。 20Hz が -90dB の位置にあるのが分かります。
リークだけでなく、ゲートがドライブされて、ドレインから見込んだ抵抗値が変化しますから偶数次の調波が発生します。
この 40Hz は 10Hz との間で 30Hz と 50Hz のスプリアスを生むでしょう(大きくはありません)。

3つ目の図は、16Vpp の発振信号だけを入れて、上の2がどのような値になるかを見たものです。 歪が若干入ってきていますが、あまり大きくはありません。
これは 47k の
フィードバック機構が働いてドレインから見込んだ抵抗が比較的直線になっているおかげです。
4つ目の図は 16Vpp の信号と、100mVpp のリップルとを同時に入れて、相互作用がどのような結果を生むかみたところです。
20Hz のレベルは2つ目の図と同じ位置にあり、10Hz 信号が原因の歪(3つ目の図)よりはるかに影響が大きいことが分かります。
30Hz のエレメントも3つ目の図よりはるかに大きくなっており、変調によって発生した量が大きいことが分かります。
おおざっぱに言うと
2次の歪は e1 のリップルから、3次の歪は変調から来る、いうことですね。
4次以上はあまり大きくありませんし、2つの積分器で減衰しますから2次と3次を攻めることにします。
グラフを拡大し精密に読んでレベルを抜き出すと次のようになります:
| (unit:dBVrms) | fundm'l | 2nd | 3rd |
| 57Ω Load | -40.6 | <-250 | -218 |
| 100mV only | <-250 | -93.1 | <-250 |
| 16V only | -40.6 | -154.2 | -130.8 |
| 16V&100mV | -40.6 | -92.9 | -84.6 |
e2 ポイントでの第2調波と第3調波のレベルを把握することができました。 Vctrl(e1) は 100mV を仮定しています。
さて、大問題は、
第3調波が意外に大きいことです。 -84.6dBVrms は 166.6uVpp にもなります。
リップルが 20Hz だけでしたのでこれは盲点でした。 20Hz 成分は 64.0uVpp です。

次に、e2 から e6 への倍率を出します。 20Hz と 30Hz では異なります。
詳細は省略しますが、まず キャンセラーからの 100k を切り離しておいて e2 として 20Hz や 30Hz の信号を入れ、e6 を見ました。
20Hz は 0.63 倍、30Hz は 0.24 倍でした。 位相はほぼ反転していますが、ほんの僅かだけずれています。 このずれは振幅の絶対値で見て 1% 以下ですので無視します。
キャンセラーは e2 をバッファして増幅してから 1k と 100k で合成します。
20Hzと 30Hz でキャンセルに必要な量が異なるので困ります。
20Hz のときは右図の R12 は 62k ぐらいになり、30Hz を狙うには 23k ぐらいになります。
どちらか片方だけなら 40dB は楽に落とせるのですが、両方同時にはできません。
それで、e6 に出てくる第2と第3が同じ程度になるように両側から追い込み、35k にしました。
これで、e6 中の 20Hz 成分は 40.4uVpp だったものが 19.0uVpp となり、6.6dB の改善です。 30Hz 成分は 40uVpp だったものが 18.5uVpp となり 6.7dB 改善になりました。
19uVpp は 16Vpp の信号に対して -119dBc です。
積分器の素子誤差が 1% の時は 80mV のリップルでしたが、それを LPF で 20dB 下げているなら -141dBc ということになります。
これは第2と第3それぞれの値ですから、両方を合わせると 3dB 悪くなって -138dBc です。 1% では不満で、0.2% 程度を狙うことになります。
FET のフィードバック抵抗 47k を上げることも対策になりますが、高い周波数で Cgs などの浮遊容量による誤差が出ます。
この量は検討していません。
余談で、e2 から e6 への伝達量を求めるときの話です:
シミュレーションの t=0 では、20Hz 信号が突然立ち上がる結果、フーリエ展開したときに非常に広い周波数成分を含むことになります。
当然 10Hz 成分もありますから、10Hz での発振が開始されて、e6 に含まれる 20Hz や 30Hz の波が見えなくなります。
振幅制限がありませんから 10Hz の振幅はどんどん大きくなり、FFT もままなりません。
対策として、正帰還分を少し小さくしておいて減衰振動させ、十分小さくなった辺り(今回は 40 秒後)の波をつかまえました。
これによる誤差はほとんどありません。
全体の回路例:
この回路は 10Hz の発振回路で、Build-Boot をうまく動かせるように実験したところです。
Boot が無い場合は 7V ピークの最終出力電圧まで上がるにほぼ 90 秒かかります。
JFET の影響を少なくするために正帰還量を最小限まで減らしているためです。
Build-Boot をかませて 1.5 秒で 7V まで持ち上げることができました。
しかし、この回路は誤差のない素子を想定しているので、現実的ではありません。
フィルターで 20Hz の減衰をさせていないので、積分回路の誤差を吸収することができないのです。

右の図では、積分回路に誤差があるときのリップルを下げるために LPF のカットオフを下げました。 乗算器のノイズも下げることができます。
犠牲としてループが非常に不安定になりますが、Bulid-Boot を切り離す時期を調整してほぼ安定化させることに成功しました。
リンギングは1回だけ許しています。
リンギングの振幅はわずかですが、安定まで6秒かかっています。
ブートの切り離しはレベルシフトのノードが 0V になる直前の、-0.3V 付近で行います。 この例では -294mV にしています。
この回路では、Boot のトリガを LPF より前でもらってスピードを上げる工夫をしていますが、寄与は 0.5 秒程度で大きくはありません。
この回路で、Build-Boot を外した場合、R8 を 1.28k に下げても安定になるまでに 150 秒かかります。(下図)

以上を踏まえて原理的な回路を描いてみました。 若干の修飾は必要かもしれません。 まだ実験していないので注意してください。
Boot スイッチはリードリレーを使っています。 これはアナログスイッチだと漏れ電流の懸念があるためです。
キャパシタの切り替えにロータリースイッチを使っていますが、パネルとの距離があるでしょうからリレーにするべきでしょう。
オペアンプはすべて単独のものを使い、チップ内部での相互干渉がないように配慮しています。
左下の乗算回路はこのままでは C 付きの8相整流(と適当な増幅回路)に置き換えることはできません。
理由は、高い周波数では LPF の時定数を小さくするのですが、それが8相整流の C が持つ時定数と接近するためです。
なお、発振回路に使われる抵抗はすべて温度係数の小さい金属皮膜で、熱時定数の長い図体の大きいものにして、発熱による抵抗値変化を避けます。
でないと、低い周波数での奇数次歪になります。
積分器の C 群は、大きい容量のものを OpAmp の近くに配置します。 配線抵抗とリアクタンスとの比を有利にするためです。
出力バッファに反転入力を使っていますが、これは入力端子の電圧を振ることによってひずみが導入されることを嫌っているためです。
JFET のフィードバック抵抗はシミュレーションで使った値より大きくしました。 220k です。
最初ノイズを嫌って低くしていたのですが、ドレインにオフセットが出ます。 計算してみたところ
これによるノイズレベルは心配したよりずっと小さく、無視できる(-170dBc 以下)と分かりましたので 220k まで上げました。
ただし、Ciss/Crss によって位相が狂い、高い周波数で FB がうまく働かなくなるでしょうから極端に大きくはできません。
余談ですが、上のシミュレータの図の R5 と R8 は元は 47.98k と 1.3125k だったのですが、それをこの図のように切りのいい数字にしたらシミュレータが動かなくなりました。
Boot を切り離した時点で計算が立ち行かなくなるのです。 元の値なら動きます。 これは LTSpice の問題であって、回路の問題ではありません。
このように、ちょっとした変更で動かなくなる例はゴマンとあります。
コツがあって、そんな時は回路全体に大した影響のない要素をわずかに変えてやると動作するようになります。
今の場合は、発振信号の波が次の段階へつながるときに段差があるのが原因のようですので、振幅か位相をわずかに動かす(方向は試行錯誤)といいでしょう。
この特定の例では、発振開始の刺激を 0.1V だったものを、0.05V にするとうまくつながりました。 ほかにも方法はあります。
今回特筆するべきこと:
1.LPF の時定数を短いほうに選択して、短い時間で安定化させました。
2.2乗和の整流を使ってリップルを小さくすることに挑戦してみました。
3.Build-Boot の回路を工夫して、素早く安定領域に持ち込んでみました。
4.リップルキャンセラーを組み込み、その定数を見つけました。
5.積分器の素子誤差がどの程度歪に影響するか評価しました。
6.FET の AGC で、変調による歪みが大きいことが分かりました。
乗算器 AD633J の Spice Model について:
Analog Devices のサイトにある AD633/AD633J の Spice Model は、LTSpice で動かすことは困難です。
これらはその昔 SPICE 用に作られのですが、LTSpice はそれより後に作られました。
過渡解析の計算は一番最初や、状況が大幅に変化するとき(例えば Boot のスイッチが離れたとき)に初期値の設定をしないといけないのですが
それが失敗するのです。 決定するにはいくつか(4つ)の方法があるのですが、そのすべてで失敗してしまうことが多々あります。
Schematic 上に1つだけあるときはうまくいくときもありますが、2つ以上になったり、ほかの複雑な回路があると、
初期値の発見に数時間かかったり、ルンゲ・クッタ法による微分の解に失敗して、Time step too small のエラーを出してしまいます。
PSpice は試していませんが、LTSpice ではほぼ使えません。
モデルの中を少し変更して、うまく動作する確率を上げることはできましたが、それでもダメな時も発生します。
それで、そのモデルを諦め、このページに示したように、単純計算モデルを使うことにしました。
入力インピーダンスは無限大、出力インピーダンスは 0、利用電圧は無限大、電源不要、オフセットが無い、
などの現実から乖離した面があるので利用には注意がいります。
もう一つ:
実際の発振回路では、回路内のノイズを起源として発振が開始されますが、シミュレータではノイズがないので発振が開始できません。
今回のシミュレータ回路では、1番目の積分器の + 入力に [10Hz、0.1Vp、1サイクル]の刺激を与えて開始させています。
余談:
「ループ外でキャンセルができるのなら、そもそもループを無しにして、発振ゲイン制御にリミターを入れるほうが楽じゃあないの?
それで歪んだ分を抜き出して、ループ外でキャンセルすればいい」と考えるかもしれませんが、うまくいきません。
やってみたのが下の図です。 キャンセラが無い時は -57dBc ととても悪く、細かく調整したキャンセラを入れても -100dBc 程度です。
一応次数とともに減衰する回路をかましています。
コメントはこちらへ==>
Low distortion osclator audio frequency
| (08/29/2024) |  |
|
Ⓒ Copyright 2024 T. Fujiwara All rights reserved.
Archiving or copying this article without the author's permission is prohibited.
低歪率 発振器 low distortion audio oscillator ステート バリアブル state variable
作者: 藤原 武 Tak Fujiwara