ブログ / 2024/07/06 21:25

回路シミュレーションやってみた

回路シミュレーションやってみた Moddoreの製作を始めた当初、電気周りは、買った部品を繋ぐだけで作れると思っていました。それが、電磁クラッチが弱すぎて滑って使えないことがわかり、モーターを一方向ではなく逆回転もさせたくなった辺りから、ややこしくなりました。単純な回路ではあるものの、日頃やらない回路設計もそれなりにやることになったわけです。

作っていくうちに、モータードライバの信号Hi/Lowレベルが思っていたのと逆だったり、リモコン駆動リレーが箱に入らないから物理的に小さく作る必要が生じたり、モーターを止める追加機能を作ったりしていくうちに、規模もだんだん大きくなりました。

ネットには素人でもわかるように書かれた情報がたくさんあるので、勉強しつつ試しながらでも設計できて、ちゃんと動くようにもなりました。ですが、思っていたのとはちょっと違う動作になってしまったりしたこともあったので、今さらながら、電子回路の設計段階でのシミュレーションができないものかやってみました。

なお、非常に高度なものも含めて、回路設計がシミュレーションベースでできることは、知識としては前々から知ってはいました。とはいえ、自分が直接やることはない領域の話だと思っていたので、右も左もわからず、まずは道具を探すところからです。仕事でやるわけではないので、コストはかけられません。自ずと、OSS(Open Source Software)でいいものがないか探すことになります。

ネットで調べると、素人が使う回路設計CADとしては、KiCad(https://www.kicad.org/)を使っている人が多そうだったので、それを使うことにしました。

KiCadは、個人でプリント基板を起こすときなどによく利用されているようです。ゼロから回路設計ができて、プリント基板(PCB:Printed Circuit Board)のレイアウトまでかなりちゃんとできるようです。しかも、SPICEと呼ばれる回路シミュレータがインテグレートされているようです。

これが良さそうなので、まずは使ってみることにしました。最新リリース版の8.0.3をダウンロードするところからです。

右も左もわからないので、チュートリアル的なサイトを見ながら、始めました。

シミュレーションの題材としては、動作が想定とは違った結果になったところがちょうど良いので、そこでやってみることにしました。具体的には、デジタル遅延タイマーの出力がONになったところで、0Vパルスを生成する回路と、その後にOFFになったところで0Vパルスを生成する回路の部分です。

シミュレーションの前に、そもそも電気CADを使うのも初めてです。今までは、回路図をパワポお絵描きか手描きで描いていたので、まずはKiCadで回路図を描いてみるところからです。最初は操作にかなり戸惑いましたが、めっちゃ回路が描きやすいですね。さすが専用ツール。もっと前から探して使ってみれば良かった(^^;。

そしてこれが、今現在、Moddoreに組み込んでいるその部分の回路図です。(シミュレーション用に少し加工)

やりたいことは、動作のシミュレーションなので、トランジスタ(2SC1815)とダイオード(1N4148)の特性を示すSPICEモデルデータをダウンロードして読み込ませたりしています。そのままでは、作図上のピンと動作モデル上のピンアサインがずれていたり等があって、いろいろ弄ってそれなりに苦労して、シミュレーションができるようになりました。まとまった情報にはたどり着けず、結局、自分でいろいろ探りました。

本当は、フォトカプラ(TLP785)のシミュレーションもしたかったのですが、暗号化されていない無償のモデルを見つけることができず、トランジスタで置き換えて代用することにしました。厳密には微妙に動作が違うと思いますが、ほとんど同じと見做していいでしょう。

KiCadで描いた回路図の上に、回路上の電圧変化を確認する場所をパワポで追記した図がこちらです。

回路の入出力は以下の通りです。

・Vinは、デジタル遅延タイマーの出力(load)のON/OFFを示します。シミュレーション上では、10秒間ON→10秒間OFFを繰り返す動作にすることにしました。

・Vout1が、モーター順回転(引き込み動作)の開始信号で、DPDTリレーをもつモータードライバに入力するものです。

・Vout2が、その回転を止める信号で、同じくモータードライバに入力します。これが、最近の改良で追加した回路です。

回路の途中のV1, V2, V3, V4が、途中の回路の動作(電圧)を確認するためのポイントを示しています。

まずは、Vinの波形がこちら。

横軸0秒でいきなり12Vに立ち上がり、その後10秒間12V、10秒間0V、10秒間12V、10秒間0Vとなっています。これがシミュレーションの入力信号です。

そして、出力であるVout1の波形を見てみたのがこちらです(緑線)。Vinに重ねて表示しています。

VinがONになった直後の2箇所で1秒弱0Vになって、それ以外は12Vとなっています。ちゃんとモーター開始のための0Vパルス信号となっていますね。問題なしです。

それに対して、モーター停止のための出力であるVout2の波形はこちらです(オレンジ線)。

VinがOFFになった直後に0Vパルスになっていなくて、2秒弱程度12Vが続いた後に0Vパルスが生成されています。これが思った通りにできていなかったところで、まさに実機と一緒です。

もしもシミュレーションを先にやっておけば、実機を実装した後に初めて気がつくようなことにはならなかったですね。

さて、この原因は実機でもオシロで確認しましたが、そのときと同じV1の電圧をシミュレーション上で見たものがこちら。

紫線がそれですが、Vinが0Vに立ち下がっても、上側回路の開始信号側のコンデンサの放電のために4Vまでしか下がらず、その後に徐々に0Vに漸近していっています。オシロで見た通りです。

これを受けて、V2はこうなっています。

本来は、VinとHi/Lowが反転した信号にしたかったのですが、V1が0Vに(Lowに)なりきらないために、Hiになるのが遅れています。信号の立ち上がりも鈍っていますね。

これがその後ろのワンショット回路の開始遅れとなり、Vout2も遅れてしまっているわけです。

次に別件ですが、モーター回転開始信号を作る上側の回路の方のV3を見てみました。

Vinが立ち上がった直後にV1と同じ電圧に一気に上がり、その後にコンデンサが充電されるとともに0Vに漸近していっています。

これは、コンデンサと抵抗で決まる充電時間でパルス幅(Vout1)を決めていることも含めて、想定通りです。

しかし、トランジスタのベース・エミッタ間の逆電位を保護したかったのに、それができていませんね。ダイオードで保護したつもりでしたが、逆方向に大電流が流れないような保護になっているだけで、逆電位にならないようにはなっていません。

う~む、これでも壊れないような気もしますが、逆電位にそもそもならないようにした方がいい気がします。

さらに、モーター停止側の類似部位のV4を見てみるとこうなっています。

V2の立ち上がりが鈍っているのを受けて、トランジスタをONにするプラス側のピークも鈍っていますが、それよりも、こちらにもマイナスになる盛大な逆電位が生じています。電流はほぼ流れないと思いますが、これもイマイチでした。

以上のシミュレーションを受けて、それらのイマイチなところを設計上で直して見ました。

それがこちらです。

この改良後の回路で改めてシミュレーションしてみました。

上側の回路の影響を下側が受けないようにダイオードを追加することで、V1は、紫からオレンジに変わりました。

V2も以下の通り緑から青になりました。立ち上がりの遅れ時間がなくなり、鈍っていた信号の立ち上がりも急峻になりました。

なお、Hiレベルが下がっているのは、その後のコンデンサの放電のために抵抗を増やしたことで分圧されたためです。Hiレベルは3Vもあれば十分以上なので、この程度はまったく問題なし。

これを受けて、Vout2もVinがOFFになった直後に0Vパルスが出るようになります。

これが本来の狙った信号です。いい感じになりますね。

V3とV4は、保護ダイオードの入れ方を正しくしたというか、コンデンサの放電をバイパスするようにダイオードを入れることで、それぞれ以下のようになりました。

V3: オレンジ→緑

V4: 緑→赤

こうすれば、ベース・エミッタの逆電位そのものをなくせます。こちらもいい感じになりますね。なお、V4はV2と同じく立ち上がりも急峻になっています。

さて、Moddore実機の動作に問題はないので、今さらより良い設計に気が付いたとしても、わざわざ回路を作り直すことまではしません。

ただし壊れる可能性はある気がするので、ついでに回路全体を書き直してみました。

もしも、壊れたりして作り直すことになるならば、遅延タイマーをなくしたり、別基板に分かれているリモコン駆動回路も組み込んだりもして、全体を改良したいところです。

そしてさらに、KiCadで設計するなら、ユニバーサル基板を使うのではなく、PCB(プリント基板)も作ってみたいですね~。

そう思うと、何か作りたくなりますね。Moddoreはできちゃっているし、何か新しいネタないかな〜。

ブログ一覧 | 日記

元ページ: https://minkara.carview.co.jp/userid/3409363/blog/47824842/