まんま!の備忘録

ソフトウェア・ファームウェア・ハードウェア関連の備忘録

KiCADで作成した基板を電磁界シミュレーション(その1:インストール)

作成した基板の電磁界シミュレーションするまでをまとめます。Macでの作業です。

今回のゴールは以下です。

  • openEMS のインストール
  • gerber2ems のインストール

なお、このシミュレーターはパターンのみの確認しかできません。
部品実装状態でのシミュレーションは調査して、後にまとめるかもしれません。

さて、まずはインストールを始めましょう。

環境構築

まずは作業環境作ります。Python3.11を使用します。
(3.10 以上である必要であります。3.10、3.11 でOKなの確認済み)

$ brew install python@3.11
$ mkdir Simulation
$ cd Simulation
$ python3.11 -m venv venv
$ . venv/bin/activate

openEMS のインストール

こちらの手順で進めます。(macOS)
docs.openems.de

[2024/03/28時点でエラー出ます。手動ビルドを行う必要があります。]
$ brew tap thliebig/openems https://github.com/thliebig/openEMS-Project.git
$ brew install --HEAD openems

エラー出ます。

 -- Unable to determine HDF5 C flags from HDF5 wrapper.
CMake Error at /opt/homebrew/Cellar/cmake/3.29.0/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_HL_LIBRARIES) (found
  suitable version "1.14.3", minimum required is "1.8")

cmakeのバグのようです。
github.com

しょうがないので手動でビルドします。

$ pip install cython numpy h5py matplotlib
$ git clone --recursive https://github.com/thliebig/openEMS-Project.git
$ cd openEMS-Project

以下3コマンドで CMakeLists.txt を書き換えます。

$ sed -i '.bk' 's/^find_package(HDF5 1.8 COMPONENTS C HL REQUIRED)/find_package(HDF5 COMPONENTS C HL REQUIRED)/g' AppCSXCAD/CMakeLists.txt && \
sed -i '.bk' 's/^find_package(HDF5 1.8 COMPONENTS C HL REQUIRED)/find_package(HDF5 COMPONENTS C HL REQUIRED)/g' CSXCAD/CMakeLists.txt && \
sed -i '.bk' 's/^find_package(HDF5 1.8 COMPONENTS C HL REQUIRED)/find_package(HDF5 COMPONENTS C HL REQUIRED)/g' openEMS/CMakeLists.txt

インストール実行

$ ./update_openEMS.sh ~/opt/openEMS
$ echo 'export PATH="$HOME/opt/openEMS/bin:$PATH"' >> ~/.zprofile
$ cat ~/.zprofile | tail -1
export PATH="$HOME/opt/openEMS/bin:$PATH"

./update_openEMS.sh ~/opt/openEMS --python とするとうまく仮想環境にインストールされないようで、gerber2ems のインストールチェックで以下エラーが出る場合があります。

ModuleNotFoundError: No module named 'CSXCAD'

なのでここで Pythonライブラリをインストールします。

$ cd ./openEMS/python
$ python setup.py build_ext -I ~/opt/openEMS/include -L ~/opt/openEMS/lib -R ~/opt/openEMS/lib
$ python setup.py install
$ cd ../../CSXCAD/python
$ python setup.py build_ext -I ~/opt/openEMS/include -L ~/opt/openEMS/lib -R ~/opt/openEMS/lib
$ python setup.py install

ターミナルを開き直してインストールチェックです。

$ openEMS
 ---------------------------------------------------------------------- 
 | openEMS 64bit -- version v0.0.36-15-g1ccf094
 | (C) 2010-2023 Thorsten Liebig   GPL license
  ---------------------------------------------------------------------- 
:

OK!!

gerber2ems のインストール

github.com


仮想環境を立ち上げます。

$ cd Simulation
$ . venv/bin/activate

[2024/03/28 時点で後のインストールでエラー出るので以下モジュールを個別でインストールします。(Mac M1のみ)]

$ pip install git+https://github.com/drufat/triangle.git

インストール。

$ brew install python3-dev
$ brew install gerbv
$ git clone https://github.com/antmicro/gerber2ems.git
$ cd gerber2ems
$ pip install .

インストールチェックです。

$ gerber2ems --help
usage: EM-Simulator [-h] [-c CONFIG_FILE] [-g] [-s] [-p] [-a] [--export-field] [--threads THREADS]
                    [-d | -l {DEBUG,INFO,WARNING,ERROR}]
:

OK!!


最後に、動作確認をしてみましょう。gerber2ems/examples/differential を実行してみます。

$ cd examples/differential
$ gerber2ems -a

1分30秒ほどかかりました。
ems/results ディレクトリ内に結果が格納されます。
以下は差動インピーダンスの結果。

おまけ

Paraviewを使用して綺麗に見せることもできるようです。

$ brew install paraview
$ gerber2ems -a --export-field

Paraviewを開いて確認します。

(実際はもっとぬるぬる動きます。)


結構時間かかるので、実際の基板では必要なところだけ切り取ってシミュレーションした方がようさそうですね。