部品定数の決め方 - North Coast Synthesis Ltd. より翻訳
カナダのトロントに根拠を置くモジュラーシンセメーカー、North Coast Synthesis Ltd.の代表 Matthew Skalaさんが、電子回路設計の初心者向けに、部品の定数を決めるプロセスについての詳細な記事を公開しています。
Twitter にてご本人から許可をいただいたので、以下に私訳を掲載します。設計者がどういうことを考え、どういう手法を使って定数を決めているかがリアリスティックに書かれているので、特に(訳者のような)設計の経験が浅い読者には大変興味深い内容であると思います。
掲載のものは草稿で、順次修正を加えたいと思っています。誤字・誤訳、訳文が日本語として読みにくい箇所や、そのほかなんでも気になる箇所などありましたら、ぜひご指摘いただければ幸いです。
なお、原文は 2019年7月28日版(この投稿の時点での最新版)を翻訳のベースとしています。
訳者Twitter: https://twitter.com/KenSenda
記事原文: https://northcoastsynthesis.com/news/how-to-choose-component-values/
---以下訳文---
新しい回路設計に着手して、回路図を描き始めるとき、私はほとんどの場合まずはじめにトポロジーを描いて、部品定数は分かりきっている値でない限り空欄にしておきます。トポロジーというのは、「この回路にはどんな部品があって、お互いにどう接続されているか」のことで、これを考えるのは部品の定数を決めるのとは別のステップです。空欄にした定数は後になってから埋めます。トポロジーと部品定数はお互いに影響するので、設計が進んで要求がより明確になるにつれて、トポロジーに変更を加えることもよく起こります。それでもやっぱり、まずトポロジーを決めて、それから定数を決めていくという流れははっきりとあるのです。
回路設計の初心者は、この定数決定というステップを一体どう進めていけば良いのか途方にくれることが間々あります。教科書やネット上の情報は定数決定の細かい部分には触れるものの全体像の話はしないことが多く、また参考として示される回路は、部品の定数がどこから出てきたのか全く説明していないことがほとんどです。この記事では、定数を決めていく上で使われるいくつかの手法を紹介します。
一例として、上図に示す簡単なオペアンプ回路を考えてみましょう。これはモジュラーシンセの CV 入力部に使われているような回路です。
考え方は色々あるのですが、私の場合は定数決定をおおむね一種の制約付き最適化問題と捉えています。それぞれの部品が現実に取りうる定数には、いくつかの動かしようのない制限があります。例えば、どの部品の定数も、実際その定数の部品が入手可能でなくてはいけません。設計時にコンデンサの容量を 10F に決めたところで、実際に 10F のコンデンサを買うなり作るなりできないのではどうにもなりませんから…… また、部品の定格から来る制限もあります。例えば、抵抗における損失電力や、コンデンサの両端にかかる電圧は、それぞれ実際に使う部品の最大定格を超えてはいけません。これが先ほど「制約付き最適化問題」と言ったうちの「制約」の部分で、想像できる部品は無限にあっても、こうした決まりによって実際に使える部品は限られてくるのです。定数決定に絡む制約は突き詰めると複雑なもので、複数の部品の間で干渉しあったりもします。例えば、2つの抵抗の定数がお互いにある決まった比になっている必要があり、組み合わせは色々あるけれど、片方の定数を変えたらそれに合わせてもう片方も変えなくてはならない、というようなことがあります。
とはいえ、制約を考慮したあとでも、まだ選べる定数は色々残っているかもしれません。回路設計のワザというのは、煎じ詰めると「どれでもとりあえず動く定数の中から、最善のものを選ぶ」ことに帰着するところが大きいのです。この「最善のものを選ぶ」というのが、「制約付き最適化問題」の「最適化」という部分です。例えば、ちゃんと動く範囲で、一番値段の安い部品を選ぶ場合があります。一番手に入りやすいものを選ぶ場合もあるでしょう。見た目がカッコイイものを使う場合もあるかもしれません。外形の大きさの都合で選ぶときもありますし、また、ノイズや消費電力などにはっきりした要求がない中で、実際の計測値が一番良いものを選ぶ場合などもあります。
回路の外から決まる定数
ときには、設計している回路に対して外から強い要求があり、それによって定数がほとんど決まってしまうため、悩む余地がない部品というのがあったりします。上図の回路では、こういう反転増幅回路の性質として、R1 の値がそのまま回路の入力インピーダンスになります。ですから、もし Eurorack 規格の標準入力インピーダンス 100kΩ を守ることを絶対の要求と設定するならば、それで一丁あがり、R1 の値は 100kΩ に決まってしまいます。私だったらたぶん上図にある通り、トポロジーを決める段階でいきなりこの値を書き込んでしまうでしょう。最初から分かりきっているからです。
もちろん、こうした要求も常に絶対守らなくてはならないものばかりではありません。この回路の場合には 100kΩ に決めてしまってまず間違いないだろうと思いますが、例えばなにか他の理由があって、入力インピーダンスを 100kΩ にすることを諦めようと決める状況というのもあり得ます。そういうときには、この R1 の値を 100kΩ から書き換えたり、場合によってはとりあえず一旦空欄にしておいて、他の要求を考慮して定数を絞り込んでから改めて書き込んだりするでしょう。
都合のいい部品を使う
高品質のパネルマウント型ポテンショメータは高価で、入手性も良くありません。商品として生産する場合、あれこれ部品を揃えるのにあまりお金をかけすぎるのは望ましくないことです。趣味の電子工作も同じことで、ほんの数種類のポテンショメータを手元に揃えておいて、なにを作るのにもこれで間に合わせられたらそれに越したことはないでしょう。ですから、仮に私が新しいシンセモジュールを設計していて、Bカーブのパネルマウント型ポテンショメータが必要になったら、特に問題がない限りすでに他のモジュール(Leapfrogなど)で使っている 100kΩ のものを使いたいと考えるでしょう。どう工夫しても手元にある部品では間に合わないというのでなければ、わざわざ新しい値を使う理由はありません。そういうわけで、私なら上図の回路の R2 は 100kΩ のパネルマウント型ポットにすると思います。
こうして決められる部品というのは、「これでなくてはいけない」というものではなかったりします。例えば、NPNトランジスタを使う回路では、トランジスタの品種は汎用品であればなんでも良いことが多いのですが、私が設計する場合には大体 2N3904 か 2N5088 を指定します。理由は、単に他の回路でいつも使っている部品だから、今回も同じにしておいた方が都合がいい、というだけです。同じ回路を設計していても、別の品種を蓄えている人なら、きっとその品種を使って設計するでしょう。
時には、「これを使いたい」という部品が先に決まっていて、それに合わせて回路設計をすることもあります。これはどちらかというと設計のうちトポロジー決定の方に関わりの深い話で、例えば 2164 IC を使った VCA を作ろうと思ったら、IC のまわりにはこういう部品をこう繋がなくてはいけない…… というようなことが決まってきます。ですが、もし「これを使いたい」という部品が決まった定数を持っていたら、回路の定数決定もこれに左右されるわけです。
定数のはっきりした部品が先に決まっている場合でなくても、「こういう数字にしておいた方が無難」という値が決まっています。標準数列と呼ばれるものです。例えば、公称容量がぴったり 0.50μF のコンデンサよりは、0.47μF の品種の方がはるかに入手が容易です。ですから、仮に設計の中で約 0.5μF 程度のコンデンサが必要になり、かつ手元に適当なものがなくて新しく買わなくてはならないとなったら、きっと定数は 0.47μF に決めて、必要ならば容量がわずかに低いことを他の部分で補償するよう設計するでしょう。わざわざサプライヤのカタログを見なくても 0.47μF なら簡単に手に入るのは分かりきっているわけですが、不安がある場合にはいくつかのサプライヤを見比べて手に入りそうな部品を確かめ、実際に使えそうな定数の一覧を作っておいて、そこから選ぶこともあるかもしれません。
計算で出す
簡単な回路分析によって、定数が計算で求まるときもあります。例とした回路には、R1 を介して CV が入力されます。CV は 1V/Oct 仕様としておきましょう。フロントパネルに取り付けられたポット (R2) からも、同じパラメータがコントロールできるようになっています。R3 は R2 によるパラメータの可変幅をスケールする役割を果たします。この反転増幅回路のサミング・ノードには、最大で -12V から +12V まで、24V の範囲の電圧を印加できます。この R3 にふさわしい定数はなんでしょうか? 定数を大きくすれば、ポットによる電圧の可変幅は狭くなりますし、小さくすれば可変幅は広くなります。
例として、「ポットによるピッチの可変幅を 10 オクターブにしよう」と決めたとします。こういう決定がどこから来るかというと、他のモジュールを作るときにチューニングノブをつけた経験だったりします。そう決めると、ポットから出力される 24V の幅は、CV入力に入力される 10V の幅と等価にならなくてはなりません。24V / 10V = 2.4 ですから、R3 は R1 の 2.4倍の大きさ、つまり 240kΩ に決まります。
偶然ですが、240k というのはちょうど E24系列に含まれている数字ですから、この定数の抵抗を入手するのは難しくありません。実を言うと Leapfrogを生産するために調達した 240kΩ の抵抗が既に手元にあります(なお Leapfrog でも今回の例と同様、coarseチューニングノブの可変範囲を決めるのに使っています)。ですから、ここでは 240kΩ を使うことにすんなり決まります。もし計算で出した値が標準系列にない数字だった場合、標準系列から計算結果に最も近い数字を選ぶでしょう。また、計算で出した値がちょうど標準系列に含まれている数字であった場合でも、敢えて「大体同じ」程度の他の定数を選ぶ場合も考えられます。例えば回路中で他の箇所に 220kΩ の抵抗を何本も使っていた場合、「220 と 240 なら大差ない」ということにして、R3 も 220kΩ にしてしまうかもしれません。そうすると当初の予定よりチューニングの可変幅は少しだけ広くなってしまいますが、その代わり部品表にわざわざ新しく 240kΩ の行を追加せずに済みます。
こうした計算を行ったあとでは、一見すると単純な話であっても、求めた値が回路に及ぼす影響を違った角度から点検する必要が起こり得ます。この例について言えば、先ほど R2 と R3 の組み合わせを「-12V から +12V までの電圧と、それに直列している 240kΩ の抵抗」と分析しましたが、本当のところはちょっと違います。ポットをどちらかに回し切った状態では R3 が完全にインピーダンスを決めるので、可変幅の計算は先述の通りで正しいのですが、ポットの回転途中では R3 のインピーダンスにポットの出力インピーダンスが加わります。R2 の出力インピーダンスは回転の両端で最低の 0Ω となり、回転のちょうど真ん中で最大値 25kΩ となります(100kΩ の半分である 50kΩ が 2つ並列になるので)。したがって、オペアンプから見たこの入力のインピーダンスは、240kΩ から 265kΩ まで可変となり、その影響はなにかというと、ポットの回転とシンセの出力ピッチの関係が、聴覚上きっちり線形的ではなくなってしまいます。具体的には、ポットの回転の両端近くでは変化が急峻に、中央付近では変化が緩やかになります。
このことをよくよく検討した上で、私なら恐らく「実用上問題なし」と判断するでしょう。ポットの効き方はおおよそ線形的になるでしょうし、正確に線形である必要はこの場合ないからです。しかし、例えば多回転ポテンショメータと回転数カウンタつきノブ(マルチダイヤル)を使うような設計など、ポットの効き方を可能なかぎり線形に近づけたい場合もあるかもしれません。そのような場合は少なくとも R2 と R3 の比をもっと小さくする必要があるでしょうし、トポロジー自体を変えてポットと U1A の間にバッファを挿入する必要が出てくることも十分考えられます。この話の要点は、一見ある部品の値が簡単な計算で求まるように思える場合であっても、実はそこで話が終わりではないかもしれない、ということです。
信号レベル
R4 はオペアンプの増幅率を設定し、出力される信号レベルを決めています。信号レベルをどのくらいにするかは設計者が決めなくてはいけませんが、そこにはこの回路ブロックの出力を受ける側のブロックでどういう設計がされているかが関わってきます。R4 を決めようとすると、出力信号の行き先を見なくてはならないのです。このモジュールに入力される CV は 1V/Oct だということにしましたから、仮に R4 を 100kΩ にすると、出力は同じ 1V/Oct になります(極性は反転しますが)。もしこの回路が例えば指数変換回路などを駆動するのであれば、恐らく信号レベルをどこかで 18mV/Oct くらいまで下げてやる必要があります。そうなると、ひとつの選択肢としては R4 を 1.8kΩ にして(温度補償用抵抗を使うかもしれません)出力レベルを下げておけば、後段にはアッテネータがいらなくなります。とはいえ一方で、どうせ後段の入力部には調整用かなにかで抵抗ネットワークが入るだろうから、出力レベルを下げるのはそこでついでにやれば良く、こちらの回路の出力レベルは高いままにしておくのが良いのではないか、とも考えられます。私なら、多分両者の間を取るでしょう。つまり、R4 は 100kΩ と 1.8kΩ の中間の値にして(幾何平均となる 13.4kΩ に近い値がいいかもしれません)、後段のどこかにもアッテネータを入れておきます。
信号レベルの決定には考慮の余地が色々あります。例えば温度補償用抵抗の定数で手持ちのものや手に入りやすいものはどれか、回路のどこで温度補償をするか、オペアンプのオフセットを無視するのには信号レベルはどれくらい大きくすれば良いか、どれくらいの電圧範囲を歪みなく扱いたいか、抵抗値を大きくした場合のノイズの影響は問題ないか、などなど…… ただし、今回の回路に関して言えば、信号レベルをどう設定してもこうしたファクターはそうそう大きな問題になりません。もしこのブロックの出力を受ける次段がこれと同様に柔軟な回路であれば、信号レベルおよびそれを設定する R4 の値が取れる範囲は広く、わりあい適当に決めてしまって大丈夫です。
既存の回路を使う
既存のソースからトポロジーを流用した場合、流用元に定数の求め方や、定数そのものが書いてあったりします。例えば他の人が設計した回路をまるごとクローンする場合、トポロジーをコピーするのと同時に定数もコピーしてしまえるかもしれません。
本当に全く同じ回路を作る場合にはそれでいいのですが、回路の使い方が流用元とどこか変わる場合には、それにあわせて部品の定数を変えなくてはならないことがあります。そのため、もともとの設計者がどんな根拠でこの定数を選んだのか、そしてその根拠は新しい回路にも当てはまるかどうか把握しておくべきでしょう。例えば、ギター用エフェクタの回路を流用してシンセモジュールを作る場合、電源電圧や、扱う信号レベル、入出力インピーダンスが変わってきますから、それにあわせて色々なところの抵抗値を変える必要が出てくるかもしれません。さらに、元の設計者がそもそもあまり適切な定数設計をしていない可能性も無視できません。というのも、世の中に出回っている回路には間違いも多いからです。プロが設計している回路も残念ながら例外ではありません。
設計の原則として心がけておくと良いのは、「回路中のすべての部品について、その部品がどんな役割を持っていて、なぜその定数になっているのか理解すべし」ということです。これを満たしていないならば、まだ読み込みが足りていないのです!
設計初心者の中には、回路の細部がどの様な根拠で設計されているのか理解しないまま、その細部をそのままコピーしようとする人がいます。しかし、そうしてできた回路はカーゴカルト的なものになってしまいます。一例として、オペアンプの発振防止用コンデンサは、初心者が設計した回路だと往々にして意図が不明瞭な定数になっていますが、これは恐らくもともとの回路では全く性質の違う品種のオペアンプを使っていたり、他の部品の定数が違っていたりしたものを何も考えずにコピーしたせいで、本来の回路でこの容量を指定した根拠が、現在の回路には当てはまらなくなってしまっているのでしょう(ひょっとするとそんなことが孫引き・曽孫引きと何世代も繰り返された結果かもしれません)。こんなことをしていてもなんとかなってしまうのは、発振防止用コンデンサというのは多くの場合どうしても必要というものではなく、かなり色々の定数を入れても、少なくとも回路の動作に明らかな支障は来さないからです。それでも、もっときちんとしたやり方で定数を決めるに越したことはありません。具体的には、まずはそもそも発振防止用コンデンサがその箇所に必要かを評価し、それからちゃんとした根拠を持って定数を決定するべきです。「他の人がこの定数にして、それで問題なかったらしいから」というだけではいけません。
公表されているトポロジーには、定数の算出に使う方程式が付記されていることがあります。Leapfrog VCFにはそのようなものを使いました。IEEE Transactions on Circuits and Systems に掲載された Yichuang Sun の論文に、リープフロッグフィルタに使われる積分回路の時定数を伝達関数とポール数から導き出す方程式が示されているのを見つけ、これを使って Leapfrog VCF の時定数を算出したのです。この例に関して言えば、方程式からすぐに部品の定数が算出されたわけではなく、時定数から積分回路の部品定数を導き出すにはまたかなりの解析作業が必要でした。とはいえ各所で公表されている様々な方程式のおかげで、設計の難しい部分をいくらか楽にこなすことができました。このように、回路のアイディアを公開しているソースには、部品の定数を計算する方法を示しているものも多く、これを活用すれば自力で一から方程式を割り出す難しい解析作業を省略できますし、その方が間違いも少ないのです。
コンピュータによる検討
制約付き最適化問題を解くための汎用的な数学ツールや計算機科学ツールを、回路合成に関する特定の問題を解くのに使えることがあります。もっとも、当該の問題にとって有意味な変数をすべて特定し、満たさねばならないすべての要件や達成すべき目標を明確にし、さらにそれらをソフトウェアが扱えるコードの形にするのは、かなり大変な作業です。ふつうこんな手間をかける価値があるのは、どうしても手作業の解析では太刀打ちできないほどの非常に厄介な問題を扱うときだけでしょう。
一例として、MSK 010 Fixed Sine Bankを設計した際には、ECLiPSe-CLPを使った制約ソルバを利用して、周波数を決める抵抗とコンデンサの値を選びました。というのは、解くべき問題が以下のように複雑なものだったからです。
・値を決めたい部品は、抵抗 8本とコンデンサ 4つである
・これら全ての値について、最小値と最大値があらかじめ決まっている。これは、現実に無理のない価格で入手でき、外形的に基板に収まる部品の範囲を表している
・これら全ての値について、それぞれ標準系列に含まれる数字でなくてはならない(上と同じく入手性の問題から。なおコンデンサの方が選択肢は狭くなっている)
・さらに、抵抗とコンデンサの組み合わせを 3通り選ぶことで、8つの周波数のセットを 3つ作らねばならない
・こうして出来た 24 の周波数の中に、互いにある割合より近いものがあってはならない
・これらの条件を満たすうち、3つのセット内の 8つの周波数それぞれの差が最大の割合になるものを選ぶ
抵抗 8本とコンデンサ 4つを選ぶとなると、組み合わせは何十億通りにもなるのですが、組み合わせの中で接続方法を変えることで作り出せる周波数に重複が出ないようにしようとすると、より良い組み合わせと悪い組み合わせがあります。「基本的には問題ない」全ての組み合わせを逐一検討するというのは、コンピュータを持ってしても非現実的です(組み合わせが多すぎるので)。制約最適化ソルバは洗練されたアルゴリズムでこの膨大な組み合わせを絞り込み、残りはコンピュータで数時間かけて処理すれば逐一検討できるところまで小さくしてくれます(まだ大きいは大きいのですが)。設計者としてのうまみは、検討を手計算で行わずに済むこと、ソフトウェアがどういう仕組みで計算を行なっているのかはっきり理解していなくても、制約をソフトウェアに渡す方法さえ知っていれば使えること、そして、より素朴な方法を使っていては恐らく得られないであろう満足な解答が、設計上の問題に対して得られることです。
カット・アンド・トライ
いろいろ頭で考えて賢く解決しようとするよりも、とにかくまず回路を組んでしまって、うまく動く値が見つかるまで試すのが一番良い場合というのもあります。制約が複雑だったり、未知の制約があるかもしれないときには、回路を組んでみて実際の動きを見たほうが、回路図を理解して特定の部品に対する制約を書き出そうとするより効率的だったりするものです。
SPICE のようなシミュレータで回路を「組む」こともあれば、現実に部品を使って、ブレッドボードに組むこともあります。あるいは、問題となっている部品から PCB のレイアウト、その他問題に関係してくる可能性のあるあらゆる要素まで、できる限り最終的な製品に近づけた形のプロトタイプを作ることもあるでしょう。頻度の差はあれ、私はこれらいずれの手法も使っています。大抵は手間も費用もあまりできるだけかけたくありませんから、優先順位はシミュレータ、ブレッドボード、フル・プロトタイプの順になりますが、設計上出てくる問題の中には(例えば EMI 関連など)、事前の計算を確認するためだけでもフル・プロトタイプを組んで見なくては、結局確かな答えは得られないものが必ず出てきます。
実際に回路を組んでテストすることの短所は、部品の個体によるばらつきについてはこちらで考えてやらなくてはいけないことです。シミュレータは通常、部品定数は指定した数字ぴったりであるものとして計算を行います。一方、現実の部品を使ったテストで出る結果は、あくまでテストに使った個体に関する結果になります。どちらにしても、実際の生産で使われる部品は許容誤差の中でばらつきが出ますから、ふたつの製品では異なる部品個体が使われている以上、設計が同じでも性能が異なることがあり得るわけです。シミュレータの中には、まさにこの問題に対応するための機能が付いているものもあります。部品の許容誤差範囲内でランダムに値をばらつかせながら、シミュレーションを繰り返して統計を取り、回路の平均的な性能や、各計測値の最大・最小値などなどを表示するというものです。現実にプロトタイプを組んでテストを行うとしたら、部品のばらつきによってどんな影響があるか、同じ回路を何個も組んでみる必要があるかもしれません。
---以上訳文---
Original article by Matthew Skala (North Coast Synthesis Ltd.)
Translated & posted by Ken Senda, with permission from the author.