Simscape Electricalの弾き方

# どんな記事ですか？
Simscape Electricalの弾き方をご紹介します。

#え？ふざけずに
ごめんなさい。
Simscape Electricalで５５５タイマICを使ったPWM出力回路を作り、
その出力電圧波形を音に変換して鳴らしてみました。

# Simscape Electricalって？
SimscapeはSimulinkの機能の一つで物理シミュレーションが行えます。
特徴は様々なドメインのシミュレーションを連携させることができるという点です。
油圧システムやエンジン、電気回路のシミュレーションの結果を互いに連携させることができます。

Simscape：https://jp.mathworks.com/products/simscape.html#ssfam

このSimscapeのうち、電気回路の物理モデリングができる機能がSimscapeElectricalです。

#555タイマーって？
[Wikipediaによると](https://ja.wikipedia.org/wiki/555_%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC)名前のごとくタイマーとして動作するICです。
シンプルな構成になっているのに、ICの周辺回路を少し変えるだけで
SR Flip-FLop,タイマー、PWM波形出力など様々な用途に使えるところが人気だそうでロングセラーICとなっているようです。

#どうしてこんなことをしようと思ったの
[@EN_gelou](https://twitter.com/EN_gelou)さんのこちらの投稿を拝見したのがきっかけです。
https://twitter.com/EN_gelou/status/1240203451247652864?s=20

ロジック回路で作成したパルスパターンに応じて、
周波数が異なるPWM回路が順番にブザーとつながるように回路が組まれているのです。

##私なりの回路の理解
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/46a46086-2e29-8b52-0868-2a1b700e9c69.png)
【[@EN_gelou](https://twitter.com/EN_gelou)さんより引用許可済み】
https://twitter.com/EN_gelou/status/1240220379706085376?s=20

回路図右側に３つのNE555回路が見えます。
回路の下に　E、C♯、Aとみえますがこれは音階を意味してます。　ミとド♯とラということですね。
じつはこの３つの回路定数を紐解くと　上段はEの周波数、中断はC#の周波数、下段はAの周波数で3番PinからPWM波形が出力される回路になっています。

各NE555の３番Pinの先にはトランジスタを介してGNDに落とされています。
これはこのトランジスタのベースがOFF（Low）になったら一番右にあるスピーカーにつながって、そのPWM波形の周波数で音が鳴るようになっています。逆にON（High)になったらOUTPinはGNDに接続され、スピーカーにPWMは印加されません。

回路図左側は　これら３つのNE55　３番Pinの直近にあるトランジスタをON/OFFするタイミングを指定するロジック回路です。

回路図一番左のNE555は言うなればBPM、リズムの速さを決めるパルスです。
その後段にはカウンタ回路がついておりBPMパスルの数をカウントしてくれます。
カウント値を２進数でPin1，12，14，15から出力されます。
そのパルスパターンに対して、いつ、どのタイミングで、どのNE55を鳴らすのかを決めているのです。(多分）

##これ、Simscapeで作れる気がする
私は電源制御ICしか触ったことなく５５５タイマには触れたことがないのですが、
こんなシンプルな回路でミュージックフォンができるんだ〜すごい！
一度試してみたいなぁ。と思いました。

しかし、そもそも家に自分だけの部屋がなく（最近在宅で急遽仕事部屋を作りましたが妻と共用）、
４歳、２歳が走り回る我が家では無理だなと思ったのですが、

もしかして、Simscapeならできるかも・・・と気が付きました。
普通の回路シミュレータは音は鳴らせないです（いや、あるかもしれないけど・・・もしあったら教えて下さい）。

しかしSimscapeはSimscape内だけでなくSimulinkとも連携できます。
電圧波形を音として保存することもできるはずです。

#本当にできるか実験してみた

##PWM周波数調整
いきなりロジック回路にいくと難しいのでまずはシンプルに。
555回路でどのようにPWM周波数を変更できるのかを確認してみます。
これも[Wikipediaの記事](https://ja.wikipedia.org/wiki/555_%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC#%E5%8D%98%E5%AE%89%E5%AE%9A_(Monostable))に書いてあります。

![無安定モード](https://upload.wikimedia.org/wikipedia/commons/3/3d/555_Astable_Diagram.svg)
>無安定モードでは、パルス出力の周波数はR1、R2、Cの値で決定される。
>
>${\displaystyle f={\frac {1}{\ln(2)\cdot C\cdot (R_{1}+2R_{2})}}}[15]$
>
>各パルスのハイ時間は次のようにして与えられる。
>
>${\displaystyle \mathrm {high} =\ln(2)\cdot C\cdot (R_{1}+R_{2})}{\displaystyle \mathrm {high} =\ln(2)\cdot C\cdot (R_{1}+R_{2})}$
>また、各パルスのロー時間は次のようにして与えられる。
>
>${\displaystyle \mathrm {low} =\ln(2)\cdot C\cdot R_{2}}{\displaystyle \mathrm {low} =\ln(2)\cdot C\cdot R_{2}}$
>R1とR2はオームを単位とする抵抗値で、Cはファラドを単位とするコンデンサの容量。


なるほどなるほど、じゃあこの式をもってR1,R2,Cを決めて回路作ればいんだということがわかりました。
##Simscapeで５５５タイマでPWM出力

なんとSimscape Electricalには５５５のモデルがありました。
[555 タイマーを使用した PWM 回路](https://jp.mathworks.com/help/physmod/sps/examples/pwm-circuit-using-555-timer.html)

これを参考にはじめはシンプルに440Hz、A4,ラの音をだしてみましょう。
周波数の計算式によると、R1＝2.7kΩ、R2＝15ｋΩ　C1＝0.1uFでだいたい440Hzになりそうです。

回路図はこんなかんじ。
![スクリーンショット 2020-05-29 22.48.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/2bdf9752-345e-8363-962e-504af990dfb3.png)
出力電圧をScopeで計測。確かに４４０Hzだ
![スクリーンショット 2020-05-29 22.45.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/41514208-2022-5dd1-8812-9eec33fbeabe.png)

##どうやって音を鳴らせばいいかな
おや？Audio Toolboxにこんなのがあるぞ。WAVファイルに出力できるみたいだ。つないでみよう。
![スクリーンショット 2020-![undefined]()
05-29 22.56.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/b783307b-6cd8-3a7f-82a6-85dda1b5f264.png)

直接つなぐとサンプルタイムがわからないよ！と怒られましたので、
ちゃんと４４１００Hzでサンプリングを行ってからTo Multimedia Fileブロックにつなげました。
ついでに振幅は-1~1の間とのことなのでそこもゲインで調整。
![スクリーンショット 2020-05-29 22.59.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/9b34eb37-d198-8fc4-cd87-2a89f8c10419.png)
これで動作させると.wavファイルが出力されました！ちゃんと音も聞こえます！

##本当に４４０Hzなのか？
そうでなければおかしいのですが、確認してみました。
ちゃんとチューナーが４４０Hzって言っているのできっと大丈夫。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ほおぉーー当たり前ですけどちゃんとできてますね。 <a href="https://t.co/XpByTisxFb">pic.twitter.com/XpByTisxFb</a></p>&mdash; griffin921 (@griffin921) <a href="https://twitter.com/griffin921/status/1263841832821092352?ref_src=twsrc%5Etfw">May 22, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

うまくいったみたいです！
![スクリーンショット 2020-05-29 23.17.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/a1a416ce-5859-7ef8-75ea-4f9916047cc0.png)

ちゃんと音が出ることがわかりましたので５５５PWM回路図部分をサブシステム化して、コピー。
そして、作りたい曲に必要な音階に合わせて回路定数を変更しました。


##ロジック回路の作成
下記の通りロジック回路を作成しました。本当もここはSimscapeで作りたかったんですが、
論理回路はSimulinkのほうが作りやすいのでこっちでかいちゃいました。

一番左がBPMを決めるパルス、Booleanへの型変換を介して、次が4Bitの2進数カウンタ、その次が各音を鳴らすタイミングを決めるロジック回路です。
ロジック回路は音を出したいときにHighになるように作ってしまったので、
回路側に接続する前にNOTをかまして反転させています。

![スクリーンショット 2020-05-29 23.19.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/bfa5f1ee-4e1a-49fa-047c-2cb8ecf1f17d.png)

これを先程のSimscapeの５５５の３番Pinにつながっているトランジスタに繋げば完成です！やったー！
#完成した曲はどうする・・・

さてここで困ったのがSimscapeが出力した曲の公開方法です。
出力されたメロディは私自身がつくった曲ではないです。
いかなる曲には著作権があります。　でてきたWavファイルをここにはっつけるのはもちろん、
タイミングを決めるロジック回路はメロディの情報なので公開するのはまずい気がします。
（だから伏せてあります。でも耳コピしたメロディなので正確なものかはわかんないですけど。）

ところが、JASRACで以下のようなページを見つけました。

[動画投稿（共有）サイトでの音楽利用](https://www.jasrac.or.jp/info/network/pickup/movie.html)
<img width="709" alt="スクリーンショット 2020-05-29 23.26.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/331637/436c26a8-146d-e8b6-d03b-0f2f95444d15.png">
どうやら国内曲のみでJASRACにリストがある曲は
「JASRACと許諾契約している動画投稿サイト」であればアップ可能なんですね。
だから、Youtubeで「弾いてみた」とか「歌ってみた」というのはBANされないのですね。
何となくそうだろうとおもていましたがしっかり調べたのは初めてでした。

ということは・・・・
私がやっていることは、「Simscapeという楽器で〇〇を演奏してみた」・・・
ってことになるのかな？？？　

#というわけで弾いてみた
だって「動画で使用する音源は自作したもの」ですから。
のでこちらがSimscapeを弾いてみた結果になります。ご確認ください！
ここまで読んでくださってありがとうございました！
https://youtu.be/pGZKi7bhGVg



#使ったToolbox
・Simulink
・Simscape
・Simscape Electrical
・Audio ToolBox