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

ESP32 ( ESP-WROOM-32 )

電波を飛ばすには、電圧だけ高くてもダメ。結局は電流を流さないと飛ばない

では、前で作った 40kHz サイン波を使って、電波を飛ばすことを考えてみたいと思います。
回路や無線に詳しい方には、ツッコミどころ満載なことをつらつらと書きます。
もちろん、電波法違反なことはしません。
違反にならない微弱電波の範囲です。
そもそも、トランジスタやFETなどの増幅するパーツは使わず、パッシブパーツ(受動部品)だけで構成するので、10センチも飛びません。
伸ばしたワイヤーに電流を流して、その付近に置いた電波時計を合わせる程度です。

実は、思い付きで、引き出しの奥に眠っていた、トランス(サンスイST-75)を引っ張り出して、この回路に接続してみる実験をして見ました。
このトランスは昔、オーディオ系でよく使っていたものです。
サイン波電圧を上げられるのではないかと安易に思ったのです。

単純にサイン波の電圧を上げて、ダイポールアンテナっぽいことをすれば、ちょっとは遠くに電波が届くかなと安易な考えでやってみました。

トランス ST-75 は 600Ω:10kΩ のもので、共振回路に 600Ω側を接続し、反対側に共振コンデンサを接続して、無負荷のダイポールアンテナもどきを作ってみたりしました。
バーアンテナなどを使わなくても電波が飛ぶのかどうかという安易な実験です。
無線ド素人の実験ですので、ツッコミどころ満載だと思います。
ダイポールアンテナといっても、40kHzは波長が長いので、私の手持ち材料では同調するものは作れませんでした。
アンテナ端子間のサイン波のピーク電圧は 12Vp-p まで上げられ、約4倍の電圧に変換できた。
トランスを通すと、サイン波形がさらに美しくなって、ほぼ純粋なサイン波になりました。
これはいける!・・・と思いました。
ちょっとくらい電波は飛ぶだろうと予想したのです。

ですが・・・、

残念ながら、電波は殆ど飛びません。

電波時計を ESP32 マイコンの近くまで持ってきてようやく受信できる程度でした。
ネットの情報では、電圧を上げれば電波が遠くへ飛ぶという説明もあったので、そのまま言葉通りに真に受けてしまいました。

ならば、電圧がダメならやっぱり電流かと思い、このトランスに100Ω以下の重い負荷をかけて、ワイヤーに電流を流して見ました。

しかし、この回路とトランスの性質上、取り出せた電流は微々たるものでした。
Twitter上でも、ある方からツッコまれましたが、その通りでした。

トランスって、とっても難しい計算式があって、ちゃんと計算すれば電流は取り出せないとすぐ分かると思うのですが、私はもうすっかりその方法を忘れてしまいました。
やっぱりエネルギー保存の法則に従っているようで、パッシブパーツだけでは GPIO からの出力以上の電流は取り出せませんね。

ということで、このトランスを使う方法は破綻しました。
もちろん、後段に FET などの回路を設ければ、多大な電力増幅ができますが、今回はパッシブパーツだけで構成したかったのです。

では、トランスを外して、元の LC 共振回路に 30Ωの抵抗と1mほどの長いコードワイヤーだけの重い負荷を作って、電流を多く取り出してみました。
取り出せたとしても 4mA ほどですが、先ほどのトランスを使った時よりも 100倍以上の電流が流せました。
すると、電波時計がバッチリ受信してくれるようになりました。
もちろん、電波を空中に遠くに飛ばしたわけではありません。
コードワイヤー付近に電波時計を置いただけです。
でも、コードワイヤーをかなり長く伸ばしても、その付近に電波時計を置けば確実に合ってくれます。
やっぱり、電波は電流なんですね。

ということで、私なりの結論として、
電波を飛ばすには、電圧を高くするだけではなく、電流を多く流すべし
ということが、やっと腑に落ちました。

2年以上前から共振回路と電波発信についてモヤモヤしていたことが、ようやく晴れたわけです。
これも大きな収穫でした。
これを体感したことによって、回路から出るノイズ原因の理解も深まったような気がします。
電流が多く流れている回路には、それだけ多くの電波が飛んでいるっていうっていうことですね。

このことは、回路や無線を良く知っている方には
「当たり前だろ!」
と怒られるでしょうね~・・・。

特性の良い共振回路に重い負荷を接続して電流を大きくすると、波形が崩れる

では、私の個人的なモヤモヤが晴れたので、LR共振回路に 30Ω の抵抗と1mの長いワイヤーを接続して重い負荷として、電流を多く流してみます。

回路は以下のようになります。

では、この負荷電圧波形をオシロスコープで見てみると、以下のようになりました。

電流の実効値は約3mAで、かなり電流が流れていますが、負荷が30Ωなので、電圧波形が小さく、サイン波が崩れてしまっています。

(追記 2019/01/17)
この記事アップ後、Twitter である方から「Qダンプ」という用語を聞きました。
これは、共振回路に並列に低めの抵抗値の抵抗を入れることで、共振の振幅を小さくすることのようです。
それは、共振ノイズが発振してしまった場合、ダンピング抵抗を入れて共振を小さくして、Q値を低くすることを、Qダンプするというらしいです。
逆に、大き目のダンピング抵抗を入れれば、Q値を大きく維持できるとのことです。
つまり、ここでやったことは、せっかく綺麗な共振サイン波を作ったのに、低めのダンピング抵抗で Qダンプしてしまったこのとようです。
(にわか知識のため、間違えているかも)
本来ならば、共振を減衰させずに、そのままトランジスタで増幅して電流を増やものみたいです。

 

これでも、電波時計はガッツリ受信してくれますが、やっぱりもっとキレイなサイン波にしたいところです。

次では、この回路にフィルタを入れてみたいと思います。

RC ローパスフィルタを入れてみる

そこで、以下のような抵抗とコンデンサでローパスフィルタ(ハイカットフィルタ)を追加してみました。

10Ωという低い抵抗は、できるだけ電圧降下を起こしたくなかったので、出来るだけ小さい抵抗値にしてみました。
そして、とりあえず 0.1uF のコンデンサを入れてみました。
RC ローパスフィルタ回路の定数計算ツールも自分用に作ってみました。
以下のページです。

RC ローパスフィルタ回路計算ツール

これによると、遮断周波数(カットオフ周波数)は

f  =  159154  = 159kHz

となります。
ただ、この周波数は、元の電圧より 3dB 下がる周波数です。
3dB というと、元の電圧の 70% くらいですから、かなり下がってしまいます。
40kHz の電圧を下げたくなかったので、この定数で良いと思います。

波形は以下のようになりました。

サイン波にはまだちょっと遠い形ですが、それなりに良くなりましたね。

ただ、直流成分カット用のカップリングコンデンサを入れたにもかかわらず、GNDの中心線がマイナス側に振れています。
ESP32の GPIO のLOWレベルがGNDレベルまで落ちていなかったことによるものと思われます。

では、FFT解析のスペクトルを見てみます。

なかなか優秀です。
このままでも問題無いのですが、更に一手間加えたフィルタを作ってみます。

さらに強力な LCR ローパスフィルタに替えた最終決定回路

では、RC ローパスフィルタの前に 100uH のマイクロインダクターを追加してみます。
これを追加すると、LCR ローパスフィルタになります。
これにすると、RC フィルタよりも不要な高周波をガッツリカットできることが分かりました。
結果、今回の最終決定回路は以下のようになりました。

写真では以下の様な感じで詰め込んでいます。

GPIO #16 に電波時計 JJY信号の LOWレベル信号を入れるための回路を追加してあります。
これは、40kHz の信号電圧を 1/10 にまで下げた信号を作ります。
半固定抵抗でオシロスコープを見ながら電圧を下げます。
この JJY のLOWレベル信号回路は、無くても電波時計は受信してくれますので、好みによって追加してください。
ここでは、ショットキーバリアダイオードではなく、LEDを使っています。
ここは順方向電圧降下が大きい方が逆に好都合なので、ショットキーバリアを使うまでも無く、LEDにしました。
なにしろ、光って動作状況がわかるので便利です。

このJJY 1/10 LOWレベル信号については以下の記事を参照してください。

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

では、LCR ローパスフィルタを追加した波形は以下のようになります。

どうでしょう?
もう、パッと見た目だけでもかなり理想的なサイン波形になっていますね。
電流実効値も先ほどと変わらず、バッチリです。

後はこのスイッチングノイズを除去すれば、サイン波発生チップとそん色ない波形が完成です。

LCR ローパスフィルタの場合の遮断周波数は、基本的に LC 共振回路の周波数計算と同じ様です。
回路を良く見ると、インダクターとコンデンサの直列共振回路になっていますね。
ですから、共振すれば、そこが LCR 回路のカットオフ周波数(遮断周波数)ということみたいです。

つまりは、共振すれば、その周波数のサイン波が発生するわけで、その閉じた回路内では強制的にサイン波振動してしまうわけです。
ということは、RC ローパスフィルタよりも LCR ローパスフィルタの方がガッツリ効く意味が、何となくわかりますね。
そもそも、インダクターを直列に接続すること自体が高周波を遮断するので、効きが良いわけです。

(追記 2019/01/17)
この記事をアップした後、Twitterである方から情報を頂きました。
「Q値を勉強すれば良い」
というものです。
直ぐに、ネットで調べてみて、以下の記事を見つけました。
いつも参考にさせて頂いている、ANALOG DEVICES社さんの APS ページです。
Q値と周波数特性を学ぶ
これを読んでいたら、ふと気が付きました。
矩形波は、サイン波基本周波数の奇数倍の周波数の合成波ですので、共振回路に矩形波パルスを入れたら、強制的にサイン波共振してしまうことは、その基本周波数を抽出できたということです。
つまり、共振回路は超高性能なバンドパスフィルタ― ( BPF )と言えそうな気がします。
(あくまで個人的意見です。)
この、強制的にサイン波振動してしまうというところがポイントです。
ですから、LCローパスフィルタは、一種のバンドパスフィルタ―のような挙動を示すわけで、RCローパスフィルタよりガッツリ効く意味が分かったような気がします。

 

では、FFT解析のスペクトルはこんな感じです。

このスペクトル、スゴイじゃないですかッ!!!
これ、ヤバイですね。
申し分ない、大満足のサイン波特性が得られました。
これで、パッシブパーツの 40kHz サイン波発生回路は完成とします。

後は、スイッチングノイズを消せば完璧ですが、電波時計合わせには無視して良いレベルですので、それは今後の課題とします。
(スイッチングノイズ対策はフェライトビーズを使うと良いらしいのですが、ちょっと試してあまり効果無かったので、いつか試そうと思っています。)

では、最終的に完成した回路で、JJY信号のLOWレベル信号を作っていきます。
GPIO の端子を差し替えたりして、3.3V 信号を入れて、オシロスコープ波形を見ながら、下図のように半固定抵抗を調整します。

下図のように、元の 0.2Vサイン波波形が10分の1になるように調整します。
かなりの微小信号なので、電波は殆ど飛びません。
無くても良い回路です。

電波を飛ばす目的よりも、LEDを光らせることを目的としても良いと思います。
因みに、このLOWレベル信号は、HIGHレベル信号に影響しないような回路になっていると思います。

こう見ると、スイッチングノイズが気になると言えば気になりますねぇ・・・。

では、次では実際に電波時計を合わせるプログラムを紹介します。

コメント

  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をコピーしました