マイコンの信号混線：実はワイヤーがコンデンサーになっていた

こんにちは:wave:。ますます寒くなるのですが、お茶を飲んで体を温めながらLabBaseのアドベントカレンダーをお楽しみいただければと思います:santa:。

# 概要

マイコンのIOでノイズが現れた時の一つの要因、混線という現象とその対象方を解説します。

## 用語

本記事で以下の略を使います：

| 略語 | 意味 |
| --- | --- |
| V<sub>IH</sub> | デジタル回路のインプット電圧をHIGH（1）として受信する際の最低閾値 |
| V<sub>IL</sub> | デジタル回路のインプット電圧をLOW（0）として受信する際の最高閾値 |
| V<sub>OH</sub> | デジタル回路のアウトプットで電圧をHIGHとして送信する際の最低電圧 |
| V<sub>OL</sub> | デジタル回路のアウトプットで電圧をLOWとして送信する際の最高電圧 |
| 主要コントローラー | 複数のマイコンを制御するマイコン、従来のマスター |
| 従事コントローラー | 制御される端末マイコン、従来のスレーブ |



# 混線とは？

混線とは、デジタル電気回路のIOのO（アウトプット）に、別のアウトプットのシグナルが干渉として入ってしまうこと。つまり、シグナルAとシグナルBがあるとして、シグナルAを受信している機器のところに、受信してほしくないシグナルBがなぜか受信されてしまうということです。

これはマイコン同士のUART通信などに起きる現象ですが、シグナルAがデータの通信だとして、本当は1を送信しているのに、シグナルBの混線のせいで、受信する時の電圧がギリギリ論理HIGHの最低閾値電圧（V<sub>IH</sub>）を下回ってしまい、論理LOWとして読まれてしまいます。

例えば、以下のシグナルをとある主要コントローラーから、従事コントローラーに送っているとします。これが何らかのデータをシリアル化して送信しているともしましょう。

![Screenshot 2024-11-19 at 10.16.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/e82b9d48-5511-cb2f-766c-6e05fde38a29.png)
_引用：[MIT SpinningNumbers Circuit Sandbox](https://spinningnumbers.org/circuit-sandbox/index.html?value=%5B%5B%22v%22%2C%5B176%2C64%2C0%5D%2C%7B%22name%22%3A%22Sig1%22%2C%22value%22%3A%22square(10%2C100%2C9.6k%2C50)%22%2C%22_json_%22%3A0%7D%2C%5B%224%22%2C%220%22%5D%5D%2C%5B%22r%22%2C%5B264%2C-56%2C5%5D%2C%7B%22name%22%3A%22R1%22%2C%22r%22%3A%221K%22%2C%22_json_%22%3A1%7D%2C%5B%22Vpin1%22%2C%224%22%5D%5D%2C%5B%22r%22%2C%5B304%2C64%2C0%5D%2C%7B%22name%22%3A%22Rp3%22%2C%22r%22%3A%2210%22%2C%22_json_%22%3A2%7D%2C%5B%22Vpin1%22%2C%220%22%5D%5D%2C%5B%22L%22%2C%5B296%2C64%2C2%5D%2C%7B%22label%22%3A%22Vpin1%22%2C%22_json_%22%3A3%7D%2C%5B%22Vpin1%22%5D%5D%2C%5B%22g%22%2C%5B304%2C112%2C0%5D%2C%7B%22_json_%22%3A4%7D%2C%5B%220%22%5D%5D%2C%5B%22g%22%2C%5B176%2C112%2C0%5D%2C%7B%22_json_%22%3A5%7D%2C%5B%220%22%5D%5D%2C%5B%22v%22%2C%5B472%2C64%2C0%5D%2C%7B%22name%22%3A%22Sig2%22%2C%22value%22%3A%22triangle(800m%2C50%2C19.6K)%22%2C%22_json_%22%3A6%7D%2C%5B%223%22%2C%220%22%5D%5D%2C%5B%22g%22%2C%5B472%2C112%2C0%5D%2C%7B%22_json_%22%3A7%7D%2C%5B%220%22%5D%5D%2C%5B%22r%22%2C%5B440%2C-56%2C1%5D%2C%7B%22name%22%3A%22R2%22%2C%22r%22%3A%22100%22%2C%22_json_%22%3A8%7D%2C%5B%223%22%2C%22Vpin2%22%5D%5D%2C%5B%22g%22%2C%5B360%2C112%2C0%5D%2C%7B%22_json_%22%3A9%7D%2C%5B%220%22%5D%5D%2C%5B%22w%22%2C%5B296%2C64%2C304%2C64%5D%5D%2C%5B%22w%22%2C%5B304%2C64%2C304%2C64%5D%5D%2C%5B%22w%22%2C%5B304%2C16%2C304%2C16%5D%5D%2C%5B%22r%22%2C%5B360%2C64%2C0%5D%2C%7B%22name%22%3A%22Rp2%22%2C%22r%22%3A%2210%22%2C%22_json_%22%3A13%7D%2C%5B%22Vpin2%22%2C%220%22%5D%5D%2C%5B%22L%22%2C%5B376%2C64%2C0%5D%2C%7B%22label%22%3A%22Vpin2%22%2C%22_json_%22%3A14%7D%2C%5B%22Vpin2%22%5D%5D%2C%5B%22w%22%2C%5B304%2C16%2C304%2C16%5D%5D%2C%5B%22w%22%2C%5B304%2C16%2C304%2C16%5D%5D%2C%5B%22v%22%2C%5B64%2C64%2C0%5D%2C%7B%22name%22%3A%22VIH%22%2C%22value%22%3A%22dc(0.8)%22%2C%22_json_%22%3A17%7D%2C%5B%222%22%2C%220%22%5D%5D%2C%5B%22g%22%2C%5B64%2C112%2C0%5D%2C%7B%22_json_%22%3A18%7D%2C%5B%220%22%5D%5D%2C%5B%22s%22%2C%5B64%2C64%2C0%5D%2C%7B%22color%22%3A%22magenta%22%2C%22offset%22%3A%220%22%2C%22_json_%22%3A19%7D%2C%5B%222%22%5D%5D%2C%5B%22v%22%2C%5B-16%2C64%2C0%5D%2C%7B%22name%22%3A%22VIL%22%2C%22value%22%3A%22dc(0.2)%22%2C%22_json_%22%3A20%7D%2C%5B%221%22%2C%220%22%5D%5D%2C%5B%22g%22%2C%5B-16%2C112%2C0%5D%2C%7B%22_json_%22%3A21%7D%2C%5B%220%22%5D%5D%2C%5B%22s%22%2C%5B-16%2C64%2C0%5D%2C%7B%22color%22%3A%22orange%22%2C%22offset%22%3A%220%22%2C%22_json_%22%3A22%7D%2C%5B%221%22%5D%5D%2C%5B%22w%22%2C%5B376%2C64%2C360%2C64%5D%5D%2C%5B%22w%22%2C%5B472%2C-56%2C440%2C-56%5D%5D%2C%5B%22w%22%2C%5B392%2C-56%2C360%2C-56%5D%5D%2C%5B%22w%22%2C%5B304%2C16%2C304%2C16%5D%5D%2C%5B%22w%22%2C%5B304%2C-56%2C304%2C16%5D%5D%2C%5B%22w%22%2C%5B304%2C64%2C304%2C16%5D%5D%2C%5B%22w%22%2C%5B304%2C16%2C304%2C16%5D%5D%2C%5B%22w%22%2C%5B304%2C-56%2C304%2C-56%5D%5D%2C%5B%22w%22%2C%5B176%2C-56%2C176%2C64%5D%5D%2C%5B%22w%22%2C%5B176%2C112%2C176%2C112%5D%5D%2C%5B%22w%22%2C%5B176%2C-56%2C216%2C-56%5D%5D%2C%5B%22w%22%2C%5B264%2C-56%2C304%2C-56%5D%5D%2C%5B%22c%22%2C%5B360%2C16%2C1%5D%2C%7B%22name%22%3A%22Cparasitic%22%2C%22c%22%3A%225n%22%2C%22_json_%22%3A35%7D%2C%5B%22Vpin2%22%2C%22Vpin1%22%5D%5D%2C%5B%22w%22%2C%5B360%2C64%2C360%2C16%5D%5D%2C%5B%22w%22%2C%5B360%2C-56%2C360%2C16%5D%5D%2C%5B%22w%22%2C%5B312%2C16%2C304%2C16%5D%5D%2C%5B%22w%22%2C%5B472%2C64%2C472%2C-56%5D%5D%2C%5B%22s%22%2C%5B304%2C64%2C0%5D%2C%7B%22color%22%3A%22cyan%22%2C%22offset%22%3A%220%22%2C%22_json_%22%3A40%7D%2C%5B%22Vpin1%22%5D%5D%2C%5B%22view%22%2C125%2C-86.25%2C2%2C%2250%22%2C%2210%22%2C%221G%22%2Cnull%2C%22100%22%2C%22800u%22%2C%221000%22%5D%5D)_

青い線がV<sub>IH</sub>の閾値であり、オレンジの線がV<sub>IL</sub>の閾値です。これが理想の信号で何らノイズもありませんし、綺麗に受信できます。上記の信号はV<sub>IH</sub>が800mVでV<sub>IL</sub>が200mVです。こちらがUARTの伝送速度が9,600です。

この理想の状況にコーヒーをこぼすところが、実はこのマイコンが新しいもので、古いシステムを部分的に置き換えていきたい感じです。そして、ワイヤーのハウジングを新しく作るのもお金がかかるからといって、両方のマイコンのワイヤーは同じパイプを通っているとします。

さらに、古いシステムの信号はV<sub>OH</sub>がなんと5Vなのです。しかも、UARTの伝送速度が19,600と高めです。この信号は以下のようなアウトプットです。緑色の線の電圧として出力しています。

![Screenshot 2024-11-19 at 10.19.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/b5b2f5b7-25ec-7735-78f2-639064abceb3.png)

理想的な状況だったら以下のように両方の信号がそれぞれの従事コントローラーに以下のように受信されます。

![Screenshot 2024-11-19 at 10.23.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/d2834094-c311-fc1d-b3a7-07edbe743d4c.png)

現実世界がこんなに甘かったら筆者には書くネタもないでしょう！:wink:

状況をさらに複雑化するために、同じパイプに収まっている通信ケーブルが26AWGと細めであり、さらに、受信先まで10メーターも走るとします。新しいシステムをインストールして起動してみたら、従事コントローラーが予測できない動きをし始めるのです。デバッグして、通信エラーが起きていることが判明します。試しに受信するところの電圧をオシロスコープで測ってみたのですが、驚くことに以下の信号が出力されました。

![Screenshot 2024-11-19 at 11.16.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/5a1ce8d5-f7ac-9dcd-b3a8-8246468f961e.png)


:scream:

きゃー
何が起きているのでしょうか？これは**混線**だと疑った方がいいでしょう。今回の伝送速度で以下の黒い点で従事コントローラーがインプットの電圧を測定しているのだとします。

![Screenshot 2024-11-19 at 11.19.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/17b142d6-aa30-a1b2-c237-6f6b99b6d42a.png)



そうすると、アウトプットがHIGHだったのに、受信する時にV<sub>IH</sub>を下回った200mVだったので、LOWとして読まれてしまうのです。

これはかなり異常な状況で無理に作った例ですが、実際にこういうことが起きるのです。

## なぜ混線が起きるのか？

混線が起きる原因は、電気容量にあります。電気容量は、コンデンサなどが電荷を保持することです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/045b75a4-ace7-6026-8447-4aa461279719.png)
_引用：[コンデンサ Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%87%E3%83%B3%E3%82%B5)_

二つの伝導力のある板の間に電荷の違いが発生して、電圧ができるのです。それが電気容量なのですが、上記の例にはワイヤーだけが走っていてコンデンサを挟んでいるわけではないでしょう？そう思うかもしれません。しかし、実は、その１０メーターもある長いワイヤー同士が上記の板に似ていると思えませんか？面積は少ないのですが、長くなればなるほど、お互いに向いている面積が大きくなっていくことが想像できるかと思います。さらに、ワイヤー同士が狭い保護パイプを通っているとすると距離も少ないでしょう。

以下の数式が理想リニアコンデンサの電気容量を計算する時に使うものです。

```math
C=\frac{εA}{d}
```
___ε___ が被覆の材質による不変値です。___A___ は面積で、___d___ は板同士の距離です。面積はワイヤーの距離が長くなればなるほど増えます。ワイヤーに電気容量が発生する現象を**寄生容量**と言います。実際の数式は上記より複雑になりますが、基本的な直感は一緒です：ワイヤ同士の距離が短くて走る距離が長ければ増えるのです。

上記の例の受信機側を電気回路で表すと、下記の画像になります。V<sub>pin1</sub>が新しく設置する従事コントローラーで、V<sub>pin2</sub>が従来の端末です。Sig1が新規主要コントローラーによる信号でSig2が古いシステムの信号です。古いシステムは高い電圧を高電流で流して早い伝送速度を実現しているので、**R2**を低く設定しています。

![Screenshot 2024-11-19 at 11.26.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/04dba247-cd32-3704-6c7c-353148323e28.png)

寄生容量をシミュレートするために、**R1**と**R2**の間にコンデンサを起きます。

![Screenshot 2024-11-19 at 11.29.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/08a572be-95a7-6afe-f167-587c1ff4fb21.png)

すると、以下の5nFコンデンサでも以下のようなノイズが発生します。トゲのような電圧の突起が現れますが、現れる場所は19.6KhZのタイミング、つまり古いシステムの信号とピッタリです。

![Screenshot 2024-11-19 at 11.30.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/c651e2d3-09ff-884c-8fba-6f9bc0609152.png)

なぜ寄生容量があると電圧が発生するのか、その答えは、コンデンサの性質にあります。コンデンサはZIR（Zero Input Response、ゼロ入力応答）時に、一瞬だけまるで閉回路のように電気を流します。これは、充電されていないコンデンサが満充電になるまで、電流を発するからです。コンデンサの板同士の電荷が同等になるまでは電子が流れるのでそれが電流になり、V<sub>pin1</sub>で測定する電圧に加算するのです。ワイヤー同士の電気容量はそれでも小さいので、すぐ満充電になり断線のようになります。**それが一瞬でも、デジタル回路では致命的な打撃になりかねます**。

# 寄生容量を解消する方法

さて、寄生容量が混線の原因であることがわかりましたが、どうやったら解消できるのでしょうか？

## ワイヤー同士の距離を増やす

まあこれは述べるまでもないでしょう。上記の電気容量の数式でご理解いただいたように、___d___ を増やせば減るのです。

ただ、電気工学および工学全般の問題は、基本的に制約のもとで解決せねばならない問題ですので、こういう極論の答えが通じない場合も多いでしょう。それでも、実現するのが簡単だったらまずは混線が発生しているワイヤーを離して設置すればいいでしょう。

## V<sub>OH</sub>を上げる

まだ試作段階での実験で混線問題が見つかった場合、上記の例だと出力電圧を例えば、5Vまで上げたらノイズの影響を減らせます。そして、V<sub>IH</sub>とV<sub>IL</sub>も1Vと4Vに調整したら、クリアできます。

![Screenshot 2024-11-19 at 11.46.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/32efa2ac-4aa0-43ab-72ff-8a6f12571edb.png)

## ノイズ元の信号を三角信号にする

こちらはもしかして古いシステムをいじることが許されないからできないのかもしれませんが、例えば古いシステムのアウトプットを三角信号に変えることができるとします。以下が三角信号時の古いシステムの信号：

![Screenshot 2024-11-19 at 11.52.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/3bdd2807-767a-3fbd-ae66-e8efdd1b7f8f.png)

すると、新規システムの信号を再度観察すると、以下のように電圧の突起が穏やかになったことがわかります。これだと、V<sub>IH</sub>もV<sub>IL</sub>も守っています。

![Screenshot 2024-11-19 at 11.54.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/8d5140a6-4fc2-3042-a37b-aa27ce3a7fae.png)

なぜ古い信号を三角信号に変えることで寄生容量によるノイズが減ったか気になるかと思いますが、これはコンデンサの充電の仕方によるものです。通常の四角信号の場合、寄生容量によって発生するワイヤー同士のコンデンサ電圧は以下の数式で表現できます。

```math
V_c = V_{OHsig2}(1- e^{\frac{-t}{RC}})
```

これはZIR時の電圧ですが、ここで**R**は古いシステムの信号の回路の[テブナンの等価回路](https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%96%E3%83%8A%E3%83%B3%E3%81%AE%E5%AE%9A%E7%90%86)の抵抗値です。それをR<sub>THsig2</sub>と表記します。

新規従事コントローラーのPin1に発生する電圧を計算するために、その最初のZIRの瞬間、つまり`t=0`の瞬間の電流を計算してみます。ZIRなので、ワイヤー同士のコンデンサが充電されていない前提です。

```math
I_c = C\frac{dV_c}{dt} = \frac{V_{OHsig2}C}{R_{THsig2}C}e^{\frac{-t}{R_{THsig2}C}}=\frac{V_{OHsig2}}{R_{THsig2}}e^{\frac{-t}{R_{THsig2}C}}
```

つまり、t=0なら、I_c = V<sub>OHsig2</sub>/R<sub>THsig2</sub>です。そして上記の寄生電流によるV<sub>pin1</sub>の電圧は以下の数式で表せます。

```math
V_{pin1} = 1V + \frac{V_{OHsig2}}{R_{THsig2}}R_{pin1}
```
これが最大のノイズの求め方ですが、三角信号だとZIRのような最悪ケースが発生しにくなるのです。なぜかというと、いきなり充電するのではなく、ゆっくり充電するからです。V<sub>OHsig2</sub>がゆっくりと上がってくれるので、ワイヤ同士のコンデンサが閉回路のようにならないのです。

この現象だけを実証するために、以下の回路をご観察ください。電源が1秒あたり1V上がるようになっています。

![Screenshot 2024-11-19 at 12.24.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/ee2ff355-767d-a419-90d5-847c1f6269cb.png)
_引用：[SpinningNumbers Sandbox](https://spinningnumbers.org/circuit-sandbox/index.html?value=%5B%5B%22v%22%2C%5B104%2C80%2C0%5D%2C%7B%22name%22%3A%22%22%2C%22value%22%3A%22step(0%2C5%2C0%2C1n)%22%2C%22_json_%22%3A0%7D%2C%5B%222%22%2C%220%22%5D%5D%2C%5B%22r%22%2C%5B104%2C56%2C3%5D%2C%7B%22name%22%3A%22%22%2C%22r%22%3A%221K%22%2C%22_json_%22%3A1%7D%2C%5B%222%22%2C%221%22%5D%5D%2C%5B%22w%22%2C%5B104%2C80%2C104%2C56%5D%5D%2C%5B%22c%22%2C%5B200%2C64%2C0%5D%2C%7B%22name%22%3A%22%22%2C%22c%22%3A%221m%22%2C%22_json_%22%3A3%7D%2C%5B%221%22%2C%220%22%5D%5D%2C%5B%22w%22%2C%5B152%2C56%2C200%2C56%5D%5D%2C%5B%22w%22%2C%5B200%2C128%2C104%2C128%5D%5D%2C%5B%22s%22%2C%5B200%2C56%2C0%5D%2C%7B%22color%22%3A%22cyan%22%2C%22offset%22%3A%220%22%2C%22_json_%22%3A6%7D%2C%5B%221%22%5D%5D%2C%5B%22g%22%2C%5B104%2C128%2C0%5D%2C%7B%22_json_%22%3A7%7D%2C%5B%220%22%5D%5D%2C%5B%22w%22%2C%5B200%2C112%2C200%2C128%5D%5D%2C%5B%22w%22%2C%5B200%2C64%2C200%2C56%5D%5D%2C%5B%22view%22%2C0%2C0%2C2%2C%2250%22%2C%2210%22%2C%221G%22%2Cnull%2C%22100%22%2C%225%22%2C%221000%22%5D%5D)_

こちらを5秒観察すると以下のようにコンデンサーの電圧が緩やかな直線に上がっていくのです。

![Screenshot 2024-11-19 at 12.26.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/2ddf6fa1-d876-3c27-c024-1aa61e9aed4e.png)

電源が5Vに対して、コンデンサの電圧が4Vですが、直線型に上がっています。これが三角信号時の電流の小ささの秘密です。ちなみに、四角信号の時のコンデンサ電圧は以下のようです。

![Screenshot 2024-11-19 at 12.32.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/63eecef6-3875-dc51-eb1d-cb84f6e31155.png)

![Screenshot 2024-11-19 at 12.29.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/959af282-64e4-4a96-ad11-d0f57fcb7d1c.png)

電流が電圧の微分だと考えれば、グラフのスロープが急なところに大きな電流が生まれることがわかります。

## ノイズ元の信号のスピードを下げる

もう一つの解決法は、古いシステムの伝送速度を避けて、信号の電流を下げることです。そうするとワイヤー同士のコンデンサを急速に充電することが少なくなり、発生する干渉が少なくなります。

![Screenshot 2024-11-19 at 12.38.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2344956/44ce35cb-5532-784d-0a39-8782fbeb72a6.png)

伝送速度が低ければ、大きな電流を流さなくても受信する側の負荷電気容量をV<sub>IH</sub>充電する時間が十分に獲得できます。

# まとめ

電気工学の観点からマイコンの信号混線について解説してきましたが、いかがでしたでしょうか？

とても複雑な現象でしたが、いくつかの対象方を紹介して、読者も解決できるアイデアが湧いたらいいと思います。

実際にはもっとプロの方の知恵でより優れた解決案がいっぱいあると思いますが、ぜひコメントにてお聞かせください。

また、混線のみならず、ワイヤの寄生インダクタンスも厄介な問題を生みますが、それは別の機会に改めましょう。