ESP32 を使って LC共振回路の理解を深め、電波時計をガッツリ合わせてみる実験

記事公開日:2019年1月16日


スポンサーリンク

Arduino – ESP32 を予めインストールしておく

パソコンに Arduino IDE をインストールしておいてください。
ver 1.8.8 で動作確認しております。

Arduino core for the ESP32 は stable 版 1.0.1 で動作確認しておりますので、それもインストールしておいてください。
インストール方法は以下の記事を参照してください。

Arduino core for the ESP32 のインストール方法

Arduino 標準 Time ライブラリをインストールしておく

Arduino IDE に Time ライブラリをインストールしておいてください。
GitHub の以下のリンクにあります。

https://github.com/PaulStoffregen/Time

ZIP ファイルをダウンロードして、インストールしてください。
ZIP形式ファイルのまま Arduino IDE にインストールする方法は以下の記事を参照してください。

GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )

共振回路を理論通りに作ってみる

まずは、とにかく共振回路を作っちゃいます。

インダクターとコンデンサで並列共振回路を構成します。
インダクタンスの値とコンデンサ容量値は、ネット上に沢山計算ツールがありますが、私自身も自分だけが使いやすいようにJavaScriptで作って、このブログ上に公開してみました。

LC 共振回路計算ツール

私は手持ちのパーツで、インダクタンスが 100uF のマイクロインダクターがありましたので、それ、それを固定とします。
電波時計の搬送波が 40kHz なので、共振周波数 40kHz と入力してツールで計算して、コンデンサ容量値を決定します。

すると、

f = 40000 Hz
L = 100 × 10の-6乗 = 100e-6

と入力して計算させると

C  =  1.5831435484225622e-7  F

と表示されます。
つまり、
1.58×10の-7乗 = 0.158uF = 158nF

となります。
この近辺ならば、私の手持ちの積層セラミックコンデンサで何とか構成できそうです。

コンデンサは低ESRで高周波特性の良いセラミックコンデンサが適しています。
結果、下図のようになりました。

esp32_resonance10.jpg


コンデンサは並列と直列を組み合わせて、0.158uF に近づけました。
交流のコンデンサの容量の測定は LCRインピーダンスメーター を使わないと正しい値は測定できません。
私は長年愛用のインピーダンスメーター ( LCRメーター ) キーサイト U1733C があります。

Amazon.co.jp

40kHz レンジが無かったので、10kHz レンジでコンデンサ容量を測定しました。
実測値は下図の様でした。

esp32_resonance11.jpg


実測値は
C = 157nF = 0.157uF
でした。

また、インダクターの実測値は以下でした。

esp32_resonance12.jpg


10kHz で測定すると約 98uH でした。

この値で再度、LC 共振回路計算ツールで計算してみると、

f  =  40575  Hz

となりました。

ヨシ!

そこそこ理想的な値が出ました。
これで実際に回路を組んでみたいと思います。

マイコンを故障させる恐れのあるダメ回路で、敢えて共振回路の挙動を見てみる

では、上記の回路に ESP32 の GPIO からパルス電圧をかけたらどんな挙動になってしまうのか見てみたいと思います。
そこで、絶対にやってはいけないと思われる回路を敢えて組んで、ESP32 マイコンが故障するかもしれないことを覚悟で見てみたいと思います。

プロの方々からは突っ込まれそうな回路を以下のように故意に組んでみて、オシロスコープで波形を見てみます。

esp32_resonance13.jpg


そして、GPIO #17 を HIGH → LOW を切り替えるプログラム(スケッチ)をArduino IDE に入力します。
delay(1) を入れて、1ms 毎に切り替えます。

const int gpio = 17;

void setup() {
  Serial.begin(115200);
  Serial.println();
  pinMode(gpio, OUTPUT);
  digitalWrite(gpio, LOW);
  Serial.println("Start!!!");
  delay(10000);
  digitalWrite(gpio, HIGH);
}

void loop() {
  delay(1);
  digitalWrite(gpio, LOW);
  delay(1);
  digitalWrite(gpio, HIGH);
}

setup関数内で、マイコンを起動させてから、10秒間 LOWレベルになるので、その間にオシロスコープ測定開始させ、電圧がHIGHレベルに上がってトリガーがかかるのを待ちます。

すると、下図の様な結果になります。
まずは、GPIO が LOWレベルから3.3Vの HIGHレベルに切り替わる瞬間を見てみます。

esp32_resonance14.jpg


こんな感じで、サイン波の様な波形が出て、時間と共に減衰しています。

この間、GPIOの出力はHIGHレベルです。

ここがポイントです!!!
3.3V の電圧がかかっているにも関わらず、振動して、GNDレベル以下の負電圧がかかってしまっています。
(このことは、後で述べる共振回路のひらめきにもなりました。)

これでは、ESP32 マイコンのGPIOの負電圧の絶対定格値を超えてしまう可能性があります
-0.48V も下がっています。

では、3.3VのHIGHレベルから0VのLOWレベルに切り替わった瞬間の波形は以下のようになりました。

esp32_resonance15.jpg


HIGHレベルが長く続くと、回路のコードやパーツの銅線の抵抗熱等でエネルギーが失われて、減衰していき、交流波形は消えていきます。
すると、直流状態になって、インダクターやコイルは機能せず、単なる短絡状態となって、インダクターの持つ抵抗値だけの電圧降下だけになります。
100uH のインダクターの直流抵抗値は 3Ω 程の微々たるものです。
殆ど短絡状態ですね。
GPIO から3.3V供給しているのに、ほぼ短絡状態なので、上図のように0.18Vほどしかありません。
電流に換算すると、何と約60mA も流れています。
GPIO の絶対定格値を超えてしまっている可能性がありますね。

こんな状態でも、GPIO をHIGH からLOWレベルに切り替えると、それだけでも上図のようにインダクターから逆起電力が生じて、-0.54V まで下がってしまいます。
LOWレベルからHIGHレベルに変化する時よりも、エネルギーが小さいからでしょうか、減衰も速いですね。

こんな感じで、インダクターはコイルですから、電圧が急激に変化して、コイルに流れている電流が急激に変化しようとする時、電流が変化しないように妨げるための逆起電力が発生します。
その為マイナス電圧まで下がってしまうものと思います。
マイナスに振れている間は順方向に電流が流れ続けますから・・・。
これはコイルの独特の挙動ですね。
これはほんとに不思議な現象で、とっても魅力的ではあります。
ですが、このおかげで、マイコンやパーツを壊してしまうかもしれないので、私はちょっと前までは大の苦手なパーツで、長年、あえて使うのを避けていました。

特にモーターやソレノイド、リレーなどは、めちゃめちゃ起電力が発生するコイルなので、保護回路を作るのは大変だろうなぁと思いますね。

では、次では共振回路から保護する回路を紹介します。


スポンサーリンク


コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください