引用事例
次の事例があったのでそのとおり行ってみたのですが、どうもしっくりいきませんでした。
下図はデューティを0から1まで0.1刻みで変えた計算ですが、デューティ0.1(青色)と0.9(うす紫)のときには時系列波形と ふたつの .meas コマンドで測定された値がおかしくなっています。
この原因はPWMの波形にありそうです。LTspiceの解析は .tran 0 1 0.9 として、波形の安定する 0.9sから1s を取り込むように指定をしているのですが、デューティ0.1(青色)と0.9(うす紫)のときには、取り込み初期にパルスが発生していません。
何度か繰り返して検証したのですが、結果は同じでした。
何となくおかしな結果になる現象は、途中からの取り込み指定をしない場合でも下図のように発生します。このケースでは、デューティ0.1(青色)と0.9(うす紫)のときは、それぞれV(out)が0.5Vと4.5Vになるはずが、0Vと5Vになってしまっています。
わかりやすくするため、デューティ 0.5 のケースで図式化すると次のようになります。時間を周波数に応じてパルスに変換する関数には問題ないので、おかしな結果になるケースはLTspice側の意地悪だと思います。
代替案
① 電圧源:Pulse or PWL
- PULSE(0 1 0 1p 1p {1/FREQ*Duty-2p} {1/FREQ})
- PWL Repeat forever (0 0 1p 1 {1/FREQ*Duty+1p} 1 {1/FREQ*Duty+2p} 0 {1/FREQ} 0) Endrepeat
時間によって変化しない固定のデューティならば、これで行けます。
② キャリアと変調用の電源信号をビヘイビア電源でコンパレートする
上記の方法は、param変数のDutyを時間の関数 Duty=f(time) とすることができません。色々試してみましたがダメのようです。
パルス幅の変調ができるようにキャリア信号(CAR)と変調信号(MOD)を電圧源でそれぞれ組み、それらをビヘイビア電源のif関数で比較してパルス波を得ます。変調信号は任意の関数にすることができるので、PWM(パルス幅変調)になります。
しっくりこなかった前項と同じ条件でシミュレーションします。デューティに比例して1次ローパスフィルタの出力V(OUT1)がリニアに変化する様子をシミュレーションできました。
50Hzの三角波(赤色線)で変調した事例を載せます。1次のローパスフィルタでは±0.05V程度のノイズ(キャリア信号)が残っています。これをオペアンプを使った2次のローパスフィルタにするとほとんど無視できるレベル(3.6mVp-p)にできます。