見出し画像

汎用CMOS ICでAMラジオを設計しながらLTspiceの実践的な使い方を学ぶ

LTspiceの基本的な使い方などを説明した実用書は沢山ありますが、LTspiceを使って実用的なシステム設計を体験できるようにまとめた書物はあまり見かけません。

そこで、実際に動作する回路設計(AMラジオの回路設計)を通して必要なLTspiceの使い方をまとめてみました。

店頭や通販などで簡単に購入可能な汎用CMOS IC(オペアンプIC、ロジックIC、アナログスイッチIC)と抵抗とコンデンサーだけで構成し、実際に動作確認ができるように設計してみました。

汎用部品を使って設計するときに必要なノウハウ、LTspiceのノウハウなどをLTspiceでシミュレーションすることにより体験できると思います。

■CMOS ICを利用したAMラジオシステム

なぜ今更、AMラジオを選んだかと言うと

①周波数範囲が高周波からオーディオ帯の低周波まで広帯域を処理
②BPF、LPFのフィルタ設計
③周波数変換回路の設計
④発振回路の設計
⑤包絡線検波回路の設計

など色々と応用できる回路を沢山使う必要があるためです。

一番シンプルなAMラジオはバーアンテナを利用したゲルマニウムラジオと呼ばれるもので電池なしでクリスタルイヤホンを使うことにより受信できますが、一般のイヤホンなどを鳴らすことはできません。

今回は普通のイヤホンで受信できるラジオを設計したいと思います。

今回のAMラジオシステム構成

一般にAMラジオにはAGC(自動利得制御)機能があって回路が飽和しないように動作しますが、今回はシンプルにするために手動でレベル調整をします。

その他の仕様としては「入力段は非同調、部品はCMOS IC、R、Cの3種類のみで、音量調整と受信周波数調整はボリュームを使用、電源電圧は電池を考慮して3V以上」とします。

設計を開始する前にLTspice標準ライブラリ以外のICは追加部品としてLTspiceに登録する必要があります。今回選んだICはライブラリにないAD8656、PA2337、CD4066、74HCU04の4種類なので追加登録する必要があります。これらは「個人でも簡単に購入可能」「spiceデータが無登録でダウンロード可能」なICです。

■新規部品をLTspiceへ追加及び動作確認

追加部品登録前の準備

最初に部品を追加する場所を新規に作成します。以下のフォルダの下に
\Documents\LTspiceXVII\lib\sub

私の場合はmylib(名前は何でもいい)というフォルダを新規に作成しました。
C:\Documents\LTspiceXVII\lib\sub\mylib

ここに新規に追加する部品のデータファイル(拡張子がlib、cir、mod)を保存しておけば標準ライブラリか追加部品かが容易に判断できます。また、追加部品を他のユーザーと共有するときに簡単に見つけることができます。

次に、追加部品のシンボルは元々ある以下のフォルダを利用します。
Documents\LTspiceXVII\lib\sym\AutoGenerated

このフォルダはspiceデータから自動でシンボルを作成した時に保存される場所ですが、既存のシンボルデータを流用するときも、ここに保存しておけば新規部品を簡単に選択できます。

それではAD8656、PA2337、CD4066、4HCU04をLTspiceに登録して動作確認をしてみましょう。

部品のデータファイル及びシンボル作成

AD8656(アナログデバイス)
アナログデバイスのICですが、もう主流でないのか標準ライブラリには入っていなかったのでホームページから「AD8656.cir」をダウンロードします。

ファイル自体は文字データなのでメモ帳などで簡単に内容確認できますが、以下の手順でファイルを開きます。

①「mylib」のフォルダにファイルを保存
②LTspiceを起動して、上記ファイルをLTspice上にプルダウン
  →ファイルが開きます。
③ファイル内の「.SUBCKT AD8656……」ラインにカーソルを移動し右クリック
④「Create Symbol」→「はい(Y)」を選択
  →自動でシンボルが作成されます。
⑤シンボル上でピンにカーソルを移動して右クリックし、ピン表示を変更
  →例では番号「2」→「in-」に変更しています。
⑥ピンの位置を一般的な表示に合わせて移動
  →ピンの位置に合わせてTOP/LEFT/BOTTOM/RIGHTなども変更
⑦部品枠、品名&部品番号位置を調整

自動で追加部品シンボルを作成
ピンの変更
自動作成タイプのAD8656

以上で無事、追加部品AD8656のシンボルが完成です。簡単にシンボルが完成しましたが一般的なオペアンプのシンボルと違います。

一般的なオペアンプのシンボルを使いたい場合は
①メモ帳などでファイル「opamp2.asy」を開くDocuments\LTspiceXVII\lib\sym\OpAmps\opamp2.asy
②ファイル内のテキストを以下のように変更
「SYMATTR Value opamp2」→「SYMATTR Value AD8656」
③ファイル名をAD8656.asyに変更して以下のフォルダに保存
Documents\LTspiceXVII\lib\sym\AutoGenerated\AD8656.asy

今回は最初に自動作成したシンボルのファイル「AD8656.asy」が存在するので上書き保存します。

同様にOPA2337(TI)のシンボルも作成して登録します。

CD4066(TI)
「4066」系のアナログスイッチは各社が出していますがTIのホームページだけでなく他社でもspiceデータは見当たりません。

幸運なことにLTwikiサイトからメジャーな部品なら見つけることができます。アナログスイッチも以下の場所にあります。

http://ltwiki.org/files/LTspiceIV/lib/sub/SwitchAna.Lib

ファイルをメモ帳などで開き、検索で以下の「CD4066」ラインを見つけ、自動生成でシンボルを作ります。後は自分に合わせてピンのレイアウトなどを変更して保存します。

・・・・・・
.SUBCKT CD4066 1 2 3 4 5
* 1 ANALOG INPUT
* 2 ANALOG OUTPUT
* 3 CONTROL
* 4 VDD (POSITIVE SUPPLY)
* 5 VSS (NEGATIVE SUPPLY)
・・・・・・

74HCU04
ロジックICも同様にLTwikiサイトを利用させてもらいます。一般的な部品は以下の場所で検索します。

http://ltwiki.org/files/LTspiceIV/lib/sub/

「74hc.lib」にありそうなのでファイルを開いて検索すると見つけることができました。

74hc.libファイルの内部

このサイトにはシンボルも準備されています。74HCU04のシンボルは

http://ltwiki.org/files/LTspiceIV/lib/sym/Dig_Add/74HC/74hcu04.asy

で入手可能なので以下のフォルダにコピーしておきます。
Documents\LTspiceXVII\lib\sym\AutoGenerated\74HCU04.asy

このシンボルには電源端子がないので外部電源としてVCCで電圧設定する必要があります。

このシンボルは便利で良かったのですが、普通に立ち上げると初期設定ではフォントサイズが最小に設定されています。このシンボルをLTspice上で開いて必要な場所の文字を右クリックすることにより変更できます。

私は、フォントサイズ「1.0」で使っています

フォント変更
フォント比較

【コーヒーブレイク】~トランジスタなどの新規追加

ここまでは「.SUBCKT」で構成される部品の話をしてきましたがトランジスタなど「.model」で構成されるトランジスタなどは

Documents\LTSpiceXVII\lib\cmp

の下に「standard.bjt」などのファイルがあります。拡張子で色々なディスクリート部品がまとめられています。メモ帳などで開いて、ダウンロードした新しいトランジスタなどの部品を文末などに追加することで使用することができるようになります。

オペアンプの動作確認

追加登録したオペアンプが正常に動作しているかを簡単に評価するにはオープンループゲインをシミュレーションしてデータシートと比較することで分かります。

先ずは高周波段で使用するAD8656で比較してみましょう。測定回路は正帰還アンプで帰還抵抗を直流と交流に分離して設定します。直流帰還抵抗は5KΩ、交流帰還抵抗は1GΩ(と1TΩの2種類)に設定しました。

シミュレーションするときにデータファイルとシンボルを関連付けしなければ動作しません。メニューの一番右の「.op」をクリックして「SPICE directive」で以下のように記入してOKを押します。

.include mylib\AD8656.cir
SPICE detective画面

「.include」コマンドの代わりに「.lib」コマンドでもOKです。

出力の周波数特性の縦軸と横軸をデータシートと同じにして比較してみるとほぼ同等と見なせる曲線になりました。

AD8656の特性

今回、シンボルを自動と手動で試しましたがどちらも(帰還抵抗は2種類)完全に一致していて正常に動作することが確認できました。

追加ICの場合、部品を変えるたびに関連付けのコマンドを書くのが少し面倒なので私は以下の方法で関連付け用コマンドを省略しています。

①AD8656.asyファイルをメモ帳などで開く
②以下の一行を挿入して保存

→「SYMATTR ModelFile mylib\AD8656.cir」

これでコマンドラインを省略できます。

次に低周波段で使うTI社製のオペアンプOPA2337で動作確認をしてみましょう。TIのホームページにはPspice用のデータがダウンロードできるのでこれを使います。ZIPファイルの中にあるOPA2337.libを取り出しシミュレーションしてみると

ログ画面

エラー警告文が出てきましたが一応、計算自体はしてくれたようです。 

OPA2337の特性

計算結果自体はデータシートとほぼ同じなのですが、計算毎に警告文が表示されるのは気持ち的に良くありません。

そこでOPA2337.libファイルをメモ帳などで開いて、LTspiceでは使用していないvfbの項目2ヶ所を削除します。再度、シミュレーションしてみると今度は何事もなく計算が終わりました。

しかし、最初の警告文に

Direct Newton iteration failed to find .op point. (Use ".option noopiter" to skip.)
Starting Gmin stepping
Gmin = 10
・・・・

が出ていると言うことは、どうも動作点が定まりにくいようです。回路構成によってはシミュレーションに時間がかかってしまうことがありそうです。

アナログスイッチの動作確認

スイッチング動作が正常かどうかは、理想的なスイッチ素子と比較して確認します。

理想スイッチはLTspiceライブラリの「sw」素子を選択し、以下のように定義して動作させます。ON抵抗は10mΩ、OFF抵抗は10MΩ、ON/OFFレベルは1Vを表します。

.Model SW1 SW(Ron=10m Roff=10meg Vt=1)
アナログスイッチ動作

理想的なスイッチング素子と比べるとCD4066は制御信号の漏れなどが実際に近い感じで現れています。

入力レベルが1Vppでも意外と制御信号の影響がありますが、20mVppと小信号にした時を調べてみましょう。

入力レベルが低い時のアナログスイッチ

かなりの信号が漏れてくるのがわかります。回路設計をするときにはこれが影響するかどうか確認しながら設計する必要があります。

NOTゲートの動作確認

外部電源を使用するシンボル作成は経験がないので、電圧を変更しても正常に動作しているかどうか確認してみます。

外部電源は「VCC」で指定するようなので、電源の出力ライン(ノード名)にカーソルを置いて右クリックしてライン名を「VCC」として設定します。

次に出力電圧がこのVCC電圧を3,4,5Vと変化させて変化するか確認してみます。コマンドラインとしては変数を「VDD」、回路図上の電源電圧を{VDD}として記入

.step param VDD list 3 4 5 →リストで直接電圧を指定する方法

或いは

.step param VDD 3 5 1 →開始電圧 終了電圧 変化電圧

で設定します。

74HCU04の電圧依存性

電源電圧を変化させると出力も連動して変化しているのがわかります。

■AMラジオの回路設計

ここからは追加登録したCMOS部品と抵抗、コンデンサーで回路設計を行います。

RFアンプの設計

初段は高インピーダンスにするため正帰還アンプ、二段目は音量調整(利得制御)がしやすいように反転アンプとして、それぞれのゲインを20dBとし、全体で40dBのRFアンプ構成なっています。

500K~1.6MHzでの感度偏差は2dB以内なのでAM放送帯域全体をカバーすることができます。

RFアンプ

次に最大入力レベルを確認してみましょう。AM100%変調だと振幅は2倍になってしまいます、一般的な検波回路だと歪が発生するので測定上は最大80%で設計します。AM変調波はBV(ビヘービア)電源で定義します。変数は以下のparamコマンドで変更します。

.param fc=999k fa=2k mod=0.8 amp=7.5m

VC=3Vの時、利得調整のVR1が最大10Kに設定すると最大入力搬送波レベルは7.5mV×2=15mVpp程度(出力搬送波レベルは750mV×2=1.5Vpp)になります。

2段目アンプは利得制御ができますが、初段アンプは固定なので初段アンプの最大出力レベルがRFアンプの最大入力レベルを決めることになります。2段目のアンプを0dB(VR1=1K)に設定すると 初段アンプの最大入力搬送波レベルは75mVになります。

最大利得時の波形(VR1=10k) Vin=15mVpp
最大入力時の波形(VR1=1K) Vin=150mVpp

RFアンプ全体の最大入力搬送波レベルは150mVppになりますが、これ以上のレベルは外付けANTを調整することにより耐入力レベルを上げることができます。

MIX回路の設計

周波数変換機能で、今回は受信周波数を80KHzに変換します。原理は2個の周波数をそれぞれfc、fosc(可変)とすると

  sin(fc)×sin(fosc)=(sin(fc-fosc)+sin(fc+fosc))/2

周波数関係

しかし、丁度foscの上側に妨害波があると同様に80KHzに周波数変換されて重なってしまいます。その場合だけfosc→fosc-160KHzに変更して受信することにより妨害波が80KHzに周波数変換することを避けます。

バーアンテナを使わない非同調入力なので2ヶ所で受信でます。イメージリジェクションMIX(IQMIXとも呼ばれる)を使えばこの問題を解決できますが、回路構成が複雑になるので今回は採用しませんでした。

ツイッチ型MIX

周波数変換の乗算をアナログスイッチ構成にすると上図の左側になりますが、より簡素化して右側の構成にします。

理想スイッチとアナログスイッチで比較してみましょう。SpecialFunctionsにある理想LPFを挿入して80KHzを取り出し見ました。乗算操作とスイッチを半分にしたため出力レベルは入力レベルのほぼ1/3になっています。

MIX動作波形

変換効率が少し低すぎるのでRとCで構成したサンプルホールド回路をアナログスイッチの出力に追加してみます。

どうもPULSE電源のパラメータ設定で演算時間がかなり変わるため、検討は理想スイッチで比較しました。

次段の入力インピーダンスをR7=10KΩと想定で試してみましたが、変換効率を少し増やすことができました。

MIXの改善

以下サンプルホールドした波形です。

サンプルホールド波形

IF BPF(80KHz)の設計

このラジオの選択度がここのBPF特性で決まります。抵抗値はE24シリーズで決めたので帯域内(平坦部分が1dB以内)が少し暴れていますが、実用上は問題ないレベルです。隣接局の選択特性は約20dBです。

MIXの乗算器がリニア型ではなくスイッチング型なので若干、変換利得が高いため利得は4dBで設計しました。

BPFの特性

BPFの設計は色々なサイトで行えますが今回はLTspiceと同じアナログデバイス系サイトの以下のツールを使わせていただきました。

https://tools.analog.com/jp/filterwizard/

BPFのバラツキ検証(モンテカルロ解析)

BPFのQは80KHz/6KHz=14と結構高く設定したので、通常の部品の誤差±5%でどのくらい特性が変化するか見てみましょう。

ランダムに抵抗値、コンデンサー容量を変化させるにはモンテカルロ解析を使うのが一般的です。設定の仕方は抵抗誤差「tol1」を5%、容量誤差「tol2」を5%として11回ランダムで変化させる設定は

.param tol1=0.05 tol2=0.05
.step param X 0 9 1 

この設定では回数のパラメータXが0 1 2 3 4 5 6 7 8 9 10と変化してランダムに11回計算します。

.step param X 0 9 2

と設定するとX→0 2 4 6 8 10となり、ランダムに6回計算することになります。回路図上では例えば、抵抗値R1=1kと設定した場合、以下のように書き換えます。

1k→{mc(1k,tol1)}

この条件でモンテカルロ解析してみましょう。

モンテカルロ解析結果

複同調構成なので利得も周波数特性も凄く変動してしまいます。今度は誤差を±1%で確認してみます。

改善した特性

利得も±2dBなので実用的です。折角、抵抗をE24シリーズで設計したのですが、E96シリーズで購入するか、テスターなどで抵抗値を選別して使う必要があります。また、コンデンサーは絶対精度は無理でも相対精度で1%以内を選別する必要がありそうです。

発振回路の設計

NOTゲート2個で構成するRC発振回路です。一般的には帰還抵抗100KΩだけですが、今回はスピードアップコンデンサー5Pを並列に接続しています。周波数は可変抵抗VRを0~11kΩの範囲で変化させて400KHz~2MHzをカバーしています。

発振回路動作

正常動作の場合、初段の電圧(例えばOSC1)は電源電圧を超えて、IC内の保護ダイオードに電流を流す構成のため、100KΩで電流制限をしています。しかし、スピードアップコンデンサーがない場合、高い周波数では100kΩとゲート入力容量の影響で、予定の周波数では動作しませんでした。

そこで、保護ダイオードが壊れない範囲で小さい容量のスピードアップコンデンサー経由で信号を流して動作させています。

発振波形

スピードアップコンデンサーを付けた状態の格段の波形です。まだ、保護ダイオードに電流が流れる電圧ではないですが初段入力が一番高くなっています。高い周波数の場合、スピードアップコンデンサーがない場合は1/3位の電圧になってしまいます。

また、スピードアップコンデンサーを付けることにより周波数も変わります。

FFTを使った発振周波数の測定

発振周波数は過渡解析で発振波形から確認しますが、そのままではあまり正確にはわかりません。

そこで、発振波形をトランジェント解析で表示させた後で

[View]→[FFT]→[測定したいノード番号 or 名前]

後は取りあえず自動設定でOKボタンをクリックします。一番低いピーク周波数が発振周波数になります。

発振周波数の確認

AM検波(半波整流)回路の設計

一般にAM検波はダイオードを使って簡単にできますが、ダイオード無しの検波回路を作ってみたいと思います。原理は受信したAM波から搬送波だけ急峻なBPFなどで取り出して下図の左側(全波整流)のように乗算して取り出します。

乗算型AM検波

BPFなどで抽出する代わりにPLL回路で搬送波を再生して使用する場合は「同期検波」と一般的には呼ばれます。

この構成は以前説明したMIX回路のfoscをfcに変えただけです。簡素化するためにMIX回路と同様にアナログスイッチを半分(半波整流)にし、BPFを省略するためにリミッタでAM波の振幅情報(1+A)を取り除いて搬送波sin(2πfc*t)を作り出しています。

AM検波波形

リミッタ回路はオペアンプをフルゲインで使用することにより構成しましたが、どうしても時間遅れが生じてしまいます。そこでAM波自体もアナログスイッチに入力する前に挿入したAPF(All Pass Filter)で時間差を調整して時間遅れを調整しました。

APFの周波数特性は出力レベルが一定で位相だけ遅れる特性になっています。今回は搬送波80KHzで位相が19°程度遅らせています。

APFの特性

実際のAPF前後の信号とスイッチング信号の関係です。調整しないと検波効率が若干悪くなります。

タイミング波形

【コーヒーブレイク】~bv(ビヘービア)電源のサイン波は挙動不審?

ビヘービア電源で100KHzのサイン波形を作成し過渡解析で1ms、2msを計算してみると電圧が1V未満で解析時間が長くなるほど波形が汚くなってくるのがわかります。(左にある1KHzのサイン波電源の有無は今回の計算結果には影響しません)

BV電源の波形

に右側のサイン波周波数を大体100KHz以上に設定して過渡解析を実行すると正常なサイン波が重なって出てきます。

正常な波形

この現象は回路にもよりますが、ビヘービアモデルだけではTIMEの分解能が「自動」だと間延びしてしまうためです。

隣のサイン波の周波数を100KHz以上にすると表示的には実用的な分解能になって普通に表示されます。

オプション設定

試しに、サンプリング間隔の最大時間を100KHzの1/10→1uに過渡解析で設定してみると同じように表示されました。

.tran {t1} → .tran 0 {t1} 0 1u

[Stop time]と[Maxmum Timestep]を設定すると自動的に「0」「0」は設定されます。

AF LPFの設計

オーディオ帯のLPFの目的に周波数変換した80KHz搬送波成分を十分に減衰させることがありますが、オーディオ帯と周波数が近いため、段数を3段のLPF構成としました。

80KHzのIF周波数帯の信号を検波すると1/6程度のレベルになってしまうので最終段の反転アンプで6倍程度、増幅しています。

LPFの-3dB落ちの帯域は2KHzにしてあります。

LPFの特性

周波数変換した80KHzのIF周波数から最終出力までつなげて動作させてみます。ほぼ設計通りの出力が得られたことがわかります。

シミュレーション時に最大ステップ時間を「0.1u」に設定しました。設定しないで自動にしておくと演算時間が長くなってしまいます。

LPFの波形

フーリエ変換コマンド「.four」を使った歪率測定

発振周波数を測定した時と同じようにオーディオ波形をFFTして基本波と高調波の比率から歪率を測定する方法もありますが、なかなか正確に読み取るのは大変です。

同じフーリエ変換でもコマンド「.four」を設定して簡単に数値を取り込む方法があります。例えば、基本波1KHz、5次高調波までの歪、最終時間から1周期分、測定ノード(ここではoutと名前で指定)の4項目を次にように設定します。

.four 1k 5 1 V(out)

この過渡解析を行い、終了後、[View]→[SPICE Error Log]を選択します。このログファイルには色々と情報が出てきますが、最後の方までスクロールすると画面のような表示が出ます。

歪率測定

500mVで歪率は0.18%になります。因みに50mVで試してみると1.5%となりました。50mV未満だと急減に悪化します。

フーリエ解析の精度を高めるためには分析する信号の100倍以上でサンプリングする必要があります。そのためには過渡解析のオプションMaximum Timestepでサンプリング時間の上限を制御します。

【コーヒーブレイク】~収束時に時間が掛かかるなと思ったら

原因は色々考えられますが・・・・・

①回路的にリニア動作しないと時間が掛かることがある
→なるべく飽和やスイッチング動作は避ける
→理想部品で代替する

②初期収束に時間が掛かる、或いは発振しない
→初期バイアスを設定 .ic V(ノード番号 or 名前)
→過渡解析時にはオプションの[Maximum Timestep]を設定

LTspiceは普段は殆んど基本的なコマンド以外は自動設定でOKなのですが、上手くいっていない時はオプション設定を利用します。

どうしても上手くいかない時は一時的に標準ライブラリで特性の似た部品を使ってみるのもあります。

システム全体でシミュレーション

AMラジオの全体回路

ANT入力が「5mV、変調周波数2KHz、80%変調」の格段の出力レベルが以下のようになります。設計通り、各段の出力はほぼ同レベルになっています。

各段の出力波形

全体動作仕様としては
最大利得(40dB)時
入力レンジ 1mVpp~15mVpp
出力レベル 100mVpp~1.5Vpp

最大入力(20dB)時
入力レベル ~150mVpp
出力レベル ~1.5Vpp

実際に使う場合は出力に接続するイヤホンやスピーカによって最適出力レベルを最終段のLPF構成のアンプで調整(図ではR25=10kの抵抗値)することになります。

■全体回路図&追加シンボル ファイル

全体の「回路図」と新規に追加した関連付け1行を挿入した「シンボル」をZIP形式で添付します。シミュレーションするにはライブラリをダウンロードして下さい。


最後まで読んでいただいて有難うございます。 コメントは今後の参考に、フォローやサポートは今後の励みになります。