エレキ素人が何か考える（その７）：マイナス電圧

# マイナス電圧をつくる
マイコンのPWMを利用してマイナス電圧をつくる。実回路と[シミューレーター](https://www.falstad.com/circuit/circuitjs.html)との比較も行う。

## 情報（サイト）
- [Arduinoなどのマイコンでサクッと負電圧をつくる（チャージポンプ回路）](https://qiita.com/uhey22e/items/3c482cc3689b44b53d5f) ※全面的に参考にしたサイト
- [マイナス電源の簡単な作り方は？自作回路を作って検証してみました。](https://jitaku-yasai.com/home-made/negative-voltage/)
- [チャージポンプの仕組み、動作原理を回路図とシミュレーション波形を使って解説](https://analogista.jp/chargepump/)
- [ダイオード チャージポンプ回路(倍電圧・負電圧)](https://zawa2.com/ZZsim/basics_chargepump.html)

## 回路
上記の全面的に参考したサイトの回路図は次のようなものである。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/a99f0d5c-ed7d-3773-f76b-381dc167907f.png", width=80%>
ここでは、10kHzのPWM、10μFのコンデンサ（以降、左をC1、右をC2とする）、1kΩの抵抗を基本とし、それぞれを変化させてみた。なお、ダイオードは1N4148を利用。また、実際の配線状況は下記のとおり。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/661ad9de-0e06-1b1d-0a66-f9e32d2c8435.png", width=50%>

## ソースコード
上記の全面的に参考したサイトのコードと同じ。

```c++
#define PIN 3
#define FREQ_HZ 10000

void setup()
{
    pinMode(PIN, OUTPUT);
    tone(PIN, FREQ_HZ);
}

void loop()
{
}
```
tone()を使うところがミソらしい。

## 測定状況
[その３](https://qiita.com/infinite1oop/items/dcc81d2f9ce79bc19bec)で利用したオシロスコープや[その７](https://qiita.com/infinite1oop/items/180248ddd0a9cbf094ba)で利用したpokitMeterを利用。上述した基本の組み合わせの測定状況は下記のとおり。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/6986cd1f-5759-3332-a028-1a2fbd7f0eac.png", width=80%>
マイナス電圧が得られている。

## 検証
ArduinoのGPIO出力は実測値で4.9Vくらいであった。なので、シミュレーションでも4.9Vを最大値とした。

### 10kHz, C1:10μF, C2:10μF, 1kΩ
右端の抵抗における電圧の実測値は下記のとおり。なお、横軸は400ms単位で表示されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/17586e2a-bd18-b210-4642-0d07ea85dbcb.png)
-3.14V〜-3.08Vくらいだろうか（差は0.06V）。次にシミュレーションの結果は下記のとおり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/4198feef-f32d-e0d3-2b8e-dd0d2b86d9e8.png)
-3.485V〜-3.47V（差は0.015V）。実測値とシミュレーションとで絶対値で10％程度の差があるが、用いた部品やマイコンの精度を考えるとまずまずの結果であろう。

### 10kHz, C1:1μF, C2:1μF, 1kΩ
実測値は下記のとおり。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/c1d6d782-ec16-6309-71d2-832420cb5bb4.png", width=70%>
-3.15V〜-2.96Vくらい（差は0.19）。コンデンサ容量が小さいと電圧のブレ幅が大きい。シミュレーションの結果は下記のとおり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5b539298-d5f7-85d8-05e0-9c819c05a199.png)
-3.353V〜-3.331V。シミュレーション結果（差は0.022）の方が電圧のブレ幅がかなり小さい。

### 10kHz, C1:470μF, C2:470μF, 1kΩ
実測値は下記のとおり。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/931211e6-1274-1b90-1b39-1ab8dc51425e.png", width=70%>
コンデンサ容量が大きいと電圧のブレ幅は小さい。シミュレーションの結果は下記のとおり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/9520c37f-c492-21e7-0c0c-33097ff67cc3.png)
こちらも同様で、ほぼ変化なし（最小値も最大値も、-3.482V）。

### C1, C2とが異なる容量のケース
実測値のみ表示。
#### 10kHz, C1:10μF, C2:1μF, 1kΩ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/4b18f98c-9669-c50d-df63-fc632297418d.png", width=70%>
#### 10kHz, C1:10μF, C2:470μF, 1kΩ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/0eade167-6412-c0e9-ee21-7a941d56313e.png", width=70%>
#### 10kHz, C1:1μF, C2:10μF, 1kΩ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/cb8f9317-3520-a9cd-f3d2-bd649b490393.png", width=70%>
#### 10kHz, C1:470μF, C2:10μF, 1kΩ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/3f093d66-5dcf-ca94-ed58-7c401bbd323a.png", width=70%>
#### まとめると
- C1容量大 --> マイナス電圧大
- C2容量大 --> 電圧のブレ幅小

素人なので説明できず、、、論理的な説明は参考サイトなどにお任せしたい。

### 周波数を変化させる
ここでも実測値のみ表示。
#### 1kHz, C1:10μF, C2:10μF, 1kΩ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/2e16775c-f962-acfa-1198-a2d4ca970baf.png", width=70%>
#### 50kHz, C1:10μF, C2:10μF, 1kΩ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/3e434298-740b-1a10-49c3-3bccc5f38008.png", width=70%>
#### まとめると
低周波数では、時間的に電圧が安定しない。50kHzの結果（マイナス電圧値が低め）の理由はよくわからず。

### 抵抗値を変化させる
#### 10kHz, C1:10μF, C2:10μF, 220Ω
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/1d8008ad-ac1e-e96f-0d39-f1625e03cb5e.png", width=60%>
#### 10kHz, C1:10μF, C2:10μF, 10kΩ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/85366c5d-0db3-684d-8304-c700b27c5044.png", width=70%>
#### まとめると
抵抗値大で、マイナス電圧値大かつ電圧のブレ幅小。こちらも、論理的な説明は参考サイトなどにお任せしたい。

## 補足
PWMではなく、正弦波を用いるとどうなるかもトライ。正弦波を発生させるソースコードは[その３](https://qiita.com/infinite1oop/items/dcc81d2f9ce79bc19bec)参照。種々の理由で、周波数や電圧は、PWM利用時と異なるものを利用した（なので、単純比較はできない）。

シミュレーションの結果は下記のとおり。
![Sin3.3V20kHz10uF10uF1Kohm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/47c80ea3-cb83-2dc0-7ce6-a74a0ef994da.png)
-1.773Vが得られている。ある程度の繰り返し（周波数が）があれば、マイナス電圧が得られると推測。そこで、実回路でも試すことに、、、。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e08df059-cec8-2749-2c84-14a1b2172f80.jpeg", width=60%>
単位が見えていないが、-56.2mV。シミュレーションとの差の理由は、シロートにはわからず。

## 終わりに
とりあえず、マイナス電圧をつくることができたので、成功としたい。