超音波距離センサーモジュール「HC-SR04」の回路不具合の修正 2015.8.23


    はじめに

     随分と以前になります。今から約2年半前の2012年12月にアマゾンで、「超音波距離センサーモジュール HC-SR04」を1個購入しました。お値段は、990円でした。今なら秋月電子などから安く買えるかと思います。

     「HC-SR04」に関する情報は、ネットで検索すれば、たくさん見つかりますので、ここでは、詳細な説明は割愛したいと思います。

     このセンサー、購入はしたものの使うこともなくずっと部品箱で眠らせていました。最近、仕事の関係で、距離センサーが必要になり、その採用候補の一つとして、眠らせていた「HC-SR04」を試しに使ってみることにしました。

     手元にあったPIC32MX250F128Bを使ったマイコン基板に接続して動かして見た所、うまく動くには動くのですが、時折、エコー出力が出っぱなしとなります。再度トリガ入力を与えるとまた正常に動作します。

     秋月電子スィッチサイエンスの商品ページでも、つい最近になって、この不具合が報告されています。対策としては、一度電源を切ってリセットするようにとのことですが、これも面倒です。

     今回、色々と調査した結果、簡単な回路改造(チップ抵抗を外すだけ)でこの不具合を修正することができましたのでレポートしてみたいと思います。


    試用状況

     「HC-SR04」のTrigger 入力には、PICのRB4から10usecのパルスを与えます。Echo 出力は、RA4に接続します。RA4は、入力キャプチャモジュールIC1の入力ピンに設定し、Echo出力のパルス幅を計測します。

     Echoの出力レベルは、+5Vです。PICの入力は+3.3Vですので、5.1KΩと10KΩの抵抗を使って電圧を変換します。+5Vx10K/(5.1K+10K)=+3.3Vとなります。


    図-1 Triggerパルス
    図-2 トリガパルス(赤)とエコーパルス(青)
    図-3 繰り返し測定

     図-1は、RB4 から出力している10usecのパルスです。Trigger入力レベルは、+3.3Vでも問題ないようです。

     図-2は、2現象オシロスコープで観測しています。赤は RB4 からのトリガパルスです。青は、エコーパルスです。トリガパルスの後、400us遅れてエコーパルスが立ち上がっています。

     エコーパルスの幅は、約9msecとなっていますので 0.009s x 34000cm /2 = 153cm 先に障害物があることになります。これは、机の上でセンサーを天井に向けて測定したものです。天井までの距離は約150cmです。うまく測定できています。

     エコーパルスの立ち下がりにより計測を終えると、その60msec後に、再度トリガパルスを出力し、繰り返し測定を行っています。


    図-4 出力が出っぱなし
    図-5 再トリガで復帰している

     図-4が、エコー出力が出っぱなしとなる不具合を捕らえたものです。30数msec 後にパルスがたち下がりかけるのですが、2Vの出力が出たままです。次のトリガパルスを入力しないとずっと出たままになります。

     図-5は、再度トリガパルスを入力した所を拡大したものです。 トリガパルスの立ち下がりで、エコー出力は0となり、400us遅れて正常に立ち上がります。


    不具合の原因と対策

     今回は、再トリガを出力することで復帰しました。このようにマイコン側のプログラムを一工夫しないとセンサーモジュールの電源を切るしか手がないのかも知れません。プログラムでは無く、何かハードウエア的な対策は無いものでしょうか?

     図-4をもう一度良くみてください。30数msec 後に一度立ち下がりかけています。恐らく、モジュールの動作としては、30数msecで測定打ち切りの処理をしているのだと思われます。その後の電圧レベルが、+2Vと、中途半端な値を示しています。抵抗分圧してますので、モジュールの出力は、逆算すると+3Vになります。どうも奇妙な値です。

     そこで、HC-SR04の回路を調べて見ることにしました。

     回路図は右の通りです。aitendoのホームページからダウンロードしたものです。

     「HC-SR04」の実機とは、部品番号が異なっているので注意してください。

     TriggerとEchoには、10KΩのプルアップ抵抗が付けられています。回路図では、R2、R3 ですが、実機では、R1、R2 になります。

     Echoは、STC11と書かれたICから出力されています。このICは、実機では、U1になります。U1は、IC表面の刻印が無く型番不明ですが、ネットで検索してみると8ビットの「EM78P153S」というマイコンが使われているらしいです。

     これらの情報を元に、PICとの接続回路を書き直して見たのが次の図です。なお、U1の内部は概念図です。

     エコーパルスが不具合時に+2Vとなりますが、この2Vは、プルアップ抵抗の10KΩと分圧抵抗の5.1KΩと10KΩの3つの抵抗から、+5Vx10K/(10K+5.1K+10K)=2V と導き出すことができます。つまり、不具合時には、U1 内部のTr1、Tr2のいずれのトランジスタもオフしていることになります。

     Tr1がオフでTr2がオンすれば、P6-7 の出力は、0になりますし、Tr2がオフしてTr1がオンすれば、+5Vの出力が出ます。

     これらの事から、「HC-SR04」は、距離測定が正常に出来た時には、Tr2をオンにしてパルスを立ち下げますが、測定不能な時には、30数msで打ち切りにして、Tr2をオンにするべき所、仕様なのかバグなのか判りませんが、Tr1、Tr2ともにオフにしてしまうようです。

     Tr1,Tr2がともにオフになると、Echo 端子には、10KΩのプルアップ抵抗を通して+5Vが出力されることになります。

     再度トリガパルスが入力されると、Tr2は、オンとなり、400us後に、Tr1がオンとなってエコーパルスが立ち上がります。

     以上が不具合のメカニズムです。対策としては、R1の10KΩのプルアップ抵抗を取り外し、代わりに、プルダウン抵抗を取り付けます。プルダウン抵抗は、モジュールにではなく、Echo端子と接続するマイコンの入力ピン側に取り付ければ良いです。

     今回のように+3.3V系マイコンに接続する場合には、分圧抵抗がプルダウン抵抗の役目も兼ねてくれますが、+5V系マイコンと直接接続する時にはプルダウン抵抗を忘れないようにします。


    R1、R2がプルアップ抵抗
    R1-10KΩを取り外した。
    代わりにプルダウン抵抗が必要。
    図-6 対策後の動作

     図-6が、対策後の動作です。30数msで測定打ち切りとなった後、エコーパルスは、0に立ち下がるようになりました。図-4と比較して見ると良く判るかと思います。


    最後に

     測定打ち切り時のHighレベル出力の不具合はこれで直りましたが、時折り、測定不能となる事象そのものは、まだ解決した訳ではありません。値段も安くそこそこ正確に測定できますのでこれで良しとしておきます。

     今回は、+3.3V系マイコンとの接続なので分圧抵抗をつなぎましたが、このお陰で不具合時に+2Vという奇妙な電圧が出力され、それをきっかけに問題解決が図れました。+5V系マイコンでは、直結しますので、不具合時には、+5Vが出力され、原因究明の糸口も掴めなかったのではと思います。

     どんな些細な事でも見逃さない観察眼を持つことが大事だと改めて思いました。