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

ESP32 ( ESP-WROOM-32 )

こんばんは。

今回は、2年以上前に作った、ESP32 ( ESP32-WROOM-32 )を使った電波時計合わせ回路のリベンジをしたいと思います。

その時は AD9833 などのサイン波発生ドライバーチップを使っていましたが、ある熟練者の方から、チップなど使わないでもインダクターとコンデンサだけの共振回路で 40kHz のサイン波は作ることができる、と指摘されました。
しかし私は、共振回路については学生時代や資格試験で勉強はしたものの、良く分かっていなかったので、しばらく放置していました。
でも、ずっと頭に残っていたので、今年こそはリベンジしようと思い至りました。

ということで、今回は ESP32 ( ESP32-WROOM-32 )の GPIO からパルスを出力させて、LCR ( インダクター、コンデンサ、抵抗 ) 等のパッシブパーツ(受動素子)だけで回路を組んで 40kHz のサイン波を作り、市販の電波時計を合わせる実験をしたいと思います。
トランジスタやFETなどのアクティブパーツは一切使わずに、どこまでできるかという挑戦です。

スポンサーリンク

結果、たったこれだけの簡単なパッシブ回路で、かなりキレイなサイン波を作ることが出来、バッチリ、ガッツリ、市販の電波時計が合ってくれる回路ができました!!!
AD9833 のようなICチップは不要です!!!

そして、今回の最大の収穫は、私の大の苦手だったLC共振回路の理解が急速に深まったのです。
これがわかれば、タイマーIC555などでサイン波を作ることができると思いますし、回路のグランドループノイズ対策や、モーター、ソレノイドなどのノイズ対策もイメージが湧きやすくなったと思います。

今回の実験は、私のように共振回路の理解に苦しんでいる方々の助けになったら嬉しいなと思います。
ですが、複雑なベクトル計算はここでは一切しません。
もちろん、それを予め理解しておいた方がより一層良いと思います。

今回はパーツをいろいろ変えたり、オシロスコープで波形を見ながら共振を直感的に体感できると勝手に思っています。
一度、共振の理解に気付くと、

「あー! そういうことか!!!」

となるんではないでしょうか?
ということで、これからいろいろ説明してみたいと思います。
ただし、ド素人的な考察ですので、熟練者の方が読むと、多分、アホらしくなると思います

一つ念を押しておきますが、今回の実験では10センチも電波は飛びません。
ワイヤーに 40kHz のサイン波電流を流して、その付近に置いた電波時計が受信できる程度のものです。

ダイポールアンテナ等で遠くへ飛ばすような、電波法違反になるような物は作りません。
というか、アマチュア無線の免許さえ持っていないので、基地局を作ることができません。
因みに、電波法に違反にならない微弱無線については以下の総務省のホームページを参照してください。

https://www.tele.soumu.go.jp/j/ref/material/rule/

ここに書いてあることを改造して、電波法違反のものを作っても当方では一切責任を負いません。

因みに、何度も申し上げておりますが、私は無線や回路、プログラミングについては独学アマチュアの素人です。
この記事は自己満足で書いております。
誤りや勘違い等があるかも知れません。
もし何かお気づきの点があれば、コメント投稿欄等でご連絡いただけると助かります。

その後、PWM ( LEDC )ライブラリ関数を使えば、このソースコードよりも格段に安定した 40kHz パルスを出力できることが解りました。
以下の記事も合わせて参照してください。
(2019/04/04)

https://www.mgo-tec.com/blog-entry-ledc-pwm-arduino-esp32.html

 

    【目次】

  1. 共振回路を今さらながら実験することなった理由
  2. コイルなどのインダクターは苦手すぎで避けていた
  3. 使用したもの
  4. Arduino – ESP32 を予めインストールしておく
  5. Arduino 標準 Time ライブラリをインストールしておく
  6. 共振回路を理論通りに作ってみる
  7. マイコンを故障させる恐れのあるダメ回路で、敢えて共振回路の挙動を見てみる
  8. 保護ダイオードで、共振回路から ESP32 の故障を防ぐ
  9. 共振回路ってそういうことだったのかー! と突然、理解できるようになった
  10. 電波を飛ばすには、電圧だけ高くてもダメ。結局は電流を流さないと飛ばない
  11. 特性の良い共振回路に重い負荷を接続して電流を大きくすると、波形が崩れる
  12. RC ローパスフィルタを入れてみる
  13. さらに強力な LCR ローパスフィルタに替えた最終決定回路
  14. 電波時計を合わせるためのプログラム(スケッチ)入力
  15. コンパイル書き込み実行
  16. アンテナ用ワイヤーと電波時計の設置方法
  17. まとめ

共振回路を今さらながら実験することなった理由

2年以上も前、以下の記事で ESP32 で電波時計を合わせる実験や工作をしました。
以下の記事です。

ESP32 の GPIO から 疑似的に 日本標準電波 JJY を出してみる実験、第1弾

ESP32 で 市販の 電波時計 を合わせてみた

波形発生器( AD9833 ) と ESP32 でサイン波を発生させ、電波時計を合わせる実験

Circuit Simulator Applet のユニバーサル基板的な使い方

最終的に完成したのは、AD9833 というサイン波発生ドライバーチップを使った工作でした。
個人的にはこれで十分完成していて、もう電波時計関連工作は完結したと自己満足していました。

ですが、ある日、とある熟練者から、
「LCR回路だけでサイン波は作ることができる」
とのご指摘を受けました。
でも、その時はインダクターや共振回路が大の苦手で、あまりちゃんと理解しておらず、もう一度勉強する気力も無かったので、その時は回路の再実験はせず、そのまま放置していました。
この約2年間、そのことがずっと頭の奥で引っかかっていたので、今年こそはリベンジして、回路を組んでみようと思った次第です。

ところでみなさん、こんなこと言ったら失礼かもしれませんが、LC共振回路ってちゃんと理解していますか???

私は学生時代に習って、机上の計算で頭では理解したつもりになっていました。
社会人になって資格試験で勉強しても、同じく頭では理解したつもりになっていました。
それで、中高年の今を迎えています。

今、改めてその計算をやろうとすると、あまりにも小難し過ぎて、心が折れますね。
できるだけ見たくない計算式です。

そんな状態で、いざ、自分で回路を作って電波を飛ばしてみようと思った時、どうやって組んだら良いのかサッパリ分かりません。

Webや書籍の回路図を見ても、電波発信回路の肝心のところがよくわかりません。
(そもそも無線の書籍はあまり持っていませんが・・・)

マイコンの GPIO からの四角い矩形パルス波(方形波)をフィルタ回路で鈍らせて、サイン波に近づけるくらいならば想像はできます。
ですが、Webや書籍でよく見る送信回路には、必ずと言ってよいほど矩形波パルスの先にLC共振回路があるのです。

そう! フィルタではなく、共振回路を使っているのです!

もう一度言います。
フィルタではないんです。

いや、共振回路がフィルタの一種だと言われればそうかも知れません。
が、RCローパスフィルタとは明らかに振る舞いが異なるんです。
ですから、私の頭ではフィルタではないと勝手に思っています。
(バンドパスフィルタ―にはなります)

この辺が
「なぜ?」
っていう感覚なんです。

実際に回路を組まない状態で、机上の計算と頭の中だけのイメージだと、共振回路ってとっても不思議な現象という感覚で一杯になってしまいます。
L成分とC成分インピーダンスが相殺されて延々と振動し続けるっていうことは、普通に考えてどうも理解不能だったんです。
もちろん、計算式やベクトル複素数計算などの理解が必要なことは分かっています。
ですが、それを机上の計算で理解した気になっても、実際に回路を組んだことが無いので、やっぱり不思議なものは不思議なんです。

電波送信器の回路図を見ると、なぜここで共振回路が必要なのか?
という肝心要のところがどこも書いてありません。
そんなものは基礎的過ぎて、当然だからですかね?

そもそも今まで電子工作をしていて、ラジオ製作やアマチュア無線をしておらず、共振回路を作る必要性が全くなかったのです。
そりゃ、延々と理解できませんですな。

今回のように、素人なりにもブログで記事を書いて、熟練者の方から指摘されないと、永遠に共振回路を避けて電子工作をしていたと思います。
良い切っ掛けをいただきましたので、その方には本当に感謝しています。
m(_ _)m

コイルなどのインダクターは苦手すぎで避けていた

共振回路を考える前に、まず私はコイルやインダクターが大の苦手で、できるだけ回路には使いたくありませんでした。
使ったとしても、コモンモードノイズ除去くらいでしょうか。

なぜかと言うと、マイコンの回路に繋げると、意図しない電圧が生じて、マイコンを破壊しかねないからです。

ですから、モーターやリレー、ソレノイドはなかなか使えず、避けていました。
以前、コイルを何となく使った時に、マイコンを壊してしまったことも有った為です。

コンデンサについては、意図しない変な起電力が生じず、交流信号の振る舞いもわかりやすいです。高周波はよく通すけど、低周波は通しにくく、フィルタとして使いやすく、よく使っています。

ですが、コイルやインダクターの場合は、交流信号に並列に繋いだ時には特に奇怪な振る舞いをします。
矩形波パルスのように、電位が急にHIGHになったり、LOWになったりする時に、逆方向に起電力が生じてしまうんです。
これが厄介で、私は今まで回路にインダクターを入れるのを敢えて避けていました。

そして、書籍などの回路説明では、インダクターを使うと意図しない共振が現れる可能性があると書かれているのをよく目にします。
コイルやインダクターを使わなかったとしても、配線を長くしたりするとコイルと同じ現象が現れて共振ノイズが出るというものもよく目にします。

共振ノイズを防ぐためには、配線を短く太くして、コンデンサのフィルタで除去すればOKみたいな感じで書いてあって、コイルやインダクターは常に悪者的に見ていました。

そんなことから、私にとっては、コイルやインダクターは出来るだけ使わない方が良いパーツという、固定観念ができてしまったんだと思います。

ですが、今回共振回路を自分で作ってみて、インダクターの挙動が良く分かり、とっても有効なパーツだと新たな発見をしました。
積極的に使ってみないと、永遠に苦手のままで終わっていたと思います。

では、いよいよ実際に共振回路を作って実験してみたいと思います。

使用したもの

ESP32 ( ESP32-WROOM-32 )関連マイコンモジュール

Espressif Systems 社製の Wi-Fi & Bluetooth デュアルコアマイコンを搭載し、日本で使用できる技適を取得した ESP32-WROOM-32 や、M5Stack等の以下のモジュールならばどれでも実験できます。
私は今回はスイッチサイエンス製の ESPr Developer 32 を使いました。
ESPr Developer 32 のレビュー記事は以下を参照してください。

ESPr Developer 32 ( スイッチサイエンス製 ) を使ってみました

ESPr Developer 32 ( スイッチサイエンス製 )

ESPr Developer 32
スイッチサイエンス(Switch Science)

ESP32-DevKitC ( Espressif Systems 社製 )

M5Stack

(追記)
M5Stack Basicは、この記事を書いた当時より格段にバージョンアップしております。
以下のスイッチサイエンスさんの公式サイトをご参照ください。
https://www.switch-science.com/collections/%E5%85%A8%E5%95%86%E5%93%81/products/9010

※M5Stack Gray(9軸IMU搭載)現在は販売終了しております

 

定電流ダイオード ( CRD ) E-103 2個

10mA のものが2個必要です。
ESP32 マイコンの GPIO への電流を制限します。

ショットキーバリアダイオード ( SBD ) 11EQS04 1個

手持ちの物を使いました。
共振回路による逆電圧から保護するために使います。

秋月電子通商さんで販売しています。
http://akizukidenshi.com/catalog/g/gI-08998

LED ( 発光ダイオード) 1個

5V程度のもので、順方向電圧降下 ( VF ) が2.1Vのもので良いです。

赤色のダイオードが良く光って良いと思います。

秋月電子通商さんの以下のダイオードでも良いと思います。

http://akizukidenshi.com/catalog/g/gI-11577/

半固定抵抗 3362P 100kΩ 0.5W 1個

半固定ボリュームとも呼ばれています。
JJY 信号の LOWレベルを作るために使います。

秋月電子通商さんで販売しています。
http://akizukidenshi.com/catalog/g/gP-03283/

積層セラミックコンデンサ 0.1uF 50V 4個

よく使う 0.1uF セラミックコンデンサです。
とりあえず、手持ちで 50V のものがあったのでそれを使いました。
4個必要です。

積層セラミックコンデンサ 0.01uF 50V 1個

秋月電子通商さんで以前買ったものを使っています。

http://akizukidenshi.com/catalog/g/gP-08138/

積層セラミックコンデンサ 1uF 50V 1個

秋月電子通商さんで昔買ったものを使っています。

http://akizukidenshi.com/catalog/g/gP-08150/

マイクロインダクター 100μH 2個

100 uH のものが2個必要です。

1/4W 100μH ±20% アキシャルリードインダクタ 20本入 <hen-335>
札幌貿易(Sapporo Boueki)
¥280(2024/03/29 01:25時点)

秋月電子通商さんでは以下にあります。
http://akizukidenshi.com/catalog/g/gP-03966/

抵抗 10Ω 1/4W 1個

抵抗 30Ω 1/4W 1個

φ0.65mm ビニル電線(単線)

ブレッドボードに挿せる、単線ワイヤーです。
ジャンパーワイヤーとしても使用できます。
アンテナ線として、1mくらいで使用します。

協和ハーモネット 耐熱通信機器用ビニル電線 H-PVC 0.65mm 2mX10色 茶赤橙黄緑青紫灰白黒
協和ハーモネット(Kyowa Harmonet)
¥1,448(2024/03/29 00:55時点)

ブレッドボード

サンハヤトの SAD-101 がおススメです。

サンハヤト SAD-101 ニューブレッドボード
サンハヤト
¥529(2024/03/29 15:33時点)

オシロスコープ

測定する周波数は 40kHz なので、最低でもその10倍以上のサンプリング周波数のオシロスコープが必要です。

私は 100MHz 級のものを使いましたが、25MHz でも今回はOKだと思います。
これが無いと、微調整は難しいと思います。

可能ならばインピーダンスメーター

後で紹介しますが、これは無くても何とかなります。
かなり高価ですからねぇ・・・。

WiFi インターネット環境等

2.4GHz帯のWi-Fiで、インターネットに接続できる環境が必要です。
ESP32 が接続できるように、ファイアウォール設定を済ませておいてください。

MACアドレスフィルタリングをかけている方は、以下の記事を参照して、MAC アドレスを確認しておいてください。

ESP-WROOM-32 ( ESP32 ) チップ・メモリ・MACアドレス情報取得方法

その他、パソコン、USBケーブル、

コメント

  1. てる より:

    mgo-tecさま始めまして。
    あなたさまのHP楽しく拝見させていただいております。
    此処に有る電波時計のサーバーを作ってみました、動作はするのですがシリアルモニタのTotal 時間が 60000 msの所が上 60008 ms 下が 59994 ms と一寸バラツキが大きいように思っております。
    後は、特に問題なく時間もピッタリと会っております、ここだけの問題ですが気にしなければ特に問題はないのですが製作上何か何かまずいところがあったのでしょうか、ちょっと気になっております。
    Amazonの1,250円の安いwaves ESP32を使ってせいでしょうか?。

    • mgo-tec mgo-tec より:

      てるさん

      はじめまして。
      記事をご覧いただき、そして実際に作って頂きありがとうございます。
      別の記事で同じようなコメント投稿があったのですが、こちらで回答させていただきます。

      かなり昔に作った記事ですので、うろ覚えの記憶をたどってお答えしますが、トータル60000msのバラつきは必ず出ますので、ハードの不良ではありません。
      そもそも、この記事のプログラムでは、パルスの精度が悪く、CPUクロックカウントも誤差があり、しかもESP32のシステム関連の割り込みなどがあって、60000msピッタリとはいきません。
      ですから、しばらく動かしていていて、時刻と大幅にズレて来た場合、現行時刻の00秒に合わせるために1分少々動作がストップするようにプログラミングしています。
      なお、この記事内でも案内していますが、LEDCライブラリを使って出力パルスの精度を大幅に上げることができます。
      それは、この記事を作ってしばらく後でわかったことです。
      以下の記事を参照してみてください。

      ●https://www.mgo-tec.com/blog-entry-ledc-pwm-arduino-esp32.html

      ●https://www.mgo-tec.com/blog-entry-m5stack-jjy-watch-yhaoo-news.html

  2. てる より:

    mgo-tecさま、ご返答ありがとうございました。
    コメントをする時に、コメント送信ボタンを押すと、パ!と全て消えてしまうので送れていないと勘違いて何度か同じコメントを送ってしまったらしいです、お詫び申し上げます。
    LEDCライブラリを使って出力パルスの精度を上げてみたいと思っております、ありがとうございました。

    • mgo-tec mgo-tec より:

      そうなんですよね~。
      WordPressのブログでは、コメント投稿送信はそうなってしまうんです。

      LEDCライブラリはお勧めですよ~。
      (^^)

  3. てる より:

    それと
    3番目のセラミックコンデンサの乗数が1μFのが0.01μになっておりました。
    先に連絡すればよかったのですが、遅れて申し訳ありません。

    • mgo-tec mgo-tec より:

      おー!
      この記事は3年半以上前の記事ですが、気付きませんでした。
      早速修正しました~。
      ご連絡、ありがとうございました。
      m(_ _)m

  4. てる より:

    お忙しい中大変申し訳ありませんが又質問させていただきたくお願いいたします。
    時計サーバーですが、良くしようと色々といじくりまわしておりましたが、
    「task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:」と出て途切れ途切れになってしましました、サーバーの役目をしなく成ってしまいました、何が原因なのかわかりません、このような症状出たことありませんでしょうか。
    暇なときにでも、わかる範囲で宜しいのでお教えいただければと思っております。
    本当に暇な時で宜しいです。

    • mgo-tec mgo-tec より:

      私もウォッチドックタイマに関しては詳しくないのですが、当ブログで何回か扱ったので検索して参照してみてください。
      例えば、以下の記事を参照してみてください。
      https://www.mgo-tec.com/blog-entry-trouble-shooting-esp32-wroom.html/4
      ウォッチドッグタイマの自動リセット?が機能しなかったかもです。

      • てる より:

        ご回答ありがとうございます。

        >WiFiClientSecure ライブラリを使って

        とありましたので、プログラムには全く駄目な僕ですが、スケッチを下記のようにしてみました

        1://#include
        2:#include //安定化させる、てるが追加
        3:#include
        4:#include //Arduino time library ver1.5-

        今のところ非常に安定しています。

        もうこれ以上は、いじらない様にしたいと思います。

        ありがとうございました。

        http://monsirochou.blog.fc2.com/

  5. てる より:

    おはようございます。

    includenoの中身が記入されていないみたいですが、この様に送らておりましたか?。

    • mgo-tec mgo-tec より:

      実は、コメント投稿欄では半角の括弧<>以降は削除されてしまうんです。
      一般的なブログの場合、多くがそうだと思われます。
      私の場合、WordPressでブログを作成しているので、仕方のないところです。
      括弧だけ全角で投稿してみてください。
      例えばこんな感じです。
      #include<ESP32_lib.h>

タイトルとURLをコピーしました