2020年3月14日土曜日

M5Stackのスピーカーを無効にして雑音(ノイズ)を消す方法


背景

M5Stackとは、ESP32というBluetoothやWiFiの通信ができる集積回路を利用し、LCD、スピーカー、電池などを備える装置です。
このM5StackはLCDの更新を行うとスピーカーから「ジッ」という雑音(ノイズ)が聞こえる性質(不具合?)があります。
本体上部と電池が入っている下部を切り離して利用すると、より大きく聞こえます。

気になったので回路を調べて対応方法をまとめてみました。
他の対応方法があれば、コメントなどで教えていただけると嬉しいです。

使ったもの

M5Stack
今回雑音対策を行う装置です。

音を止めるための道具として、対応方法に応じてどれかが必要です。
  • はんだ + はんだごて
  • ジャンパワイヤ
  • ニッパー + テープ
  • 六角レンチ + ハンダごて

スピーカーの回路と実装状況

M5Stackの回路図は2017年12月6日版がgithubで公開されています。

https://github.com/m5stack/M5-Schematic/blob/master/Core/Basic/M5-Core-Schematic(20171206).pdf


回路図によると、音データを配信する25番ピン(GPIO25)は 100nF(0.1μF)コンデンサ -> オーディオアンプ(NS4148) -> インダクタ(?) という経路でスピーカーに接続されているようです。


アンプで雑音が増幅されていると思うので、25番ピンかAMP_PWRのどちらかに問題があると推測します。
AMP_PWRはEA3036という3チャンネルの電流管理ICから供給されているようでした。


上記の回路図の左上に注目すると「Test Break for Disabling Audio Amplifer(多分Amplifierのスペルミス)」(オーディオアンプを無効化するための試験用断線)とあります。
この回路図のT1を接続することで、オーディオアンプに電力が供給されなくなり、スピーカーから音が出なくなるようです。


M5Stackのオーディオアンプ、電源管理IC、試験用断線の場所を確認します。


今回注目する回路は、ボタンとアンテナの近くにありました。


試験用断線ははんだを盛り付けて接続可能なジャンパだったので、以後ジャンパと呼びます。

対応1: オーディオアンプへの電力供給を止めるためのジャンパを盛る

AMFという文字の横にあるジャンパをはんだで盛り付けます。ジャンパの直径は約1.5mmです。


シールを焦がしましたが、盛れました。


ジャンパを盛り付けると電源ICからオーディオアンプに電力が供給されなくなり、雑音が消えました。
オーディオアンプが動いていないので、25番ピンを音出力以外の用途に使えます。

対応2: M5StackライブラリのSpeakerのbeginとmuteを呼ぶ

M5StackのArduinoライブラリでは、スピーカーから音を出すためのSpeakerという機能が提供されています。
このSpeakerにはmuteという関数があり、それを呼ぶことで25番ピンの電位を下げて雑音を減らせます。
ただし、M5.Speaker.begin()を実行して25番ピンを出力モードで動かしておかないと、mute関数を実行しても変化が無いので注意してください。

下記のようにsetupで呼び出し、以後の処理で25番ピンを扱わなければ、LCD更新時の雑音を低減できます。
#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Speaker.begin(); // これが無いとmuteしても無意味です。
  M5.Speaker.mute();
}

void loop() {
  ..
}

この方法は25番ピンを音量0のスピーカーとして動かしているので、他の用途には使えません。

対応3: 25番をGNDに接続する

ジャンパワイヤで25番ピンをGNDに接続します。


耳を近づけると雑音を感じますが、何もしていないときと比べると雑音が小さくなります。
この方法は25番ピンはGNDに接続されているので、他の用途には使えません。

なお、雑音の音量は先ほど解説したSpeaker.begin + Speaker.mute を呼び出す方法の方が自分は少なく感じたので、 ソフトウェアを変更できるのでしたらそちらをお勧めします。

対応4: スピーカーの信号線を切断する

基板にはんだ付けされているスピーカーの信号線をハンダごてで溶かすて外すか、スピーカーの信号線をニッパーで切ります。
25番ピンからの信号はアンプには渡りますがスピーカーには渡らなくなるので、この対応後は25番ピンを他の用途に使えます。

はんだ付けされた部分を溶かして外す

M5Stackをケースから外すとスピーカーがはんだ付けされている部分が見えるので、そこをハンダごてで加熱して取り外せます。
今回紹介する方法の中で1番手間です。
スピーカーの復活を考慮すると、最初に紹介したジャンパを盛る対応をお勧めします。

六角レンチでネジ2本を外します。



基板をケースから滑らせて浮かせます。
LCDが接続されている関係で、あまり隙間はできません。


LCDの線をちぎらないように基板を起こすと、LCDとスピーカーのはんだ付けされている部分が見えます。


ここをハンダごてで加熱すれば、スピーカーを取り外せます。



ニッパーで切断

ニッパーで線を切るとスピーカーの復活が難しくなりますが、音機能を使う予定が無く、25番ピンを別の用途で使いたいのなら、最も手っ取り早い方法だと思います。


黒と赤片方でも両方でも、スピーカーから出ている線を切れば音が出なくなります。
線が他のピンに触れないように、切断後は線の断面をテープかなにかで覆うのが良いと思います。

余談: 試したものの効果がなかったこと

  • D25を3.3Vに接続する
    LCDの更新時以外も雑音が発生する用になって、対応前よりうるさくなりました。

まとめ

紹介した方法の利点と欠点をまとめます。
  • オーディオアンプへの給電を止めるためのジャンパをはんだで盛る
    利点: オーディオアンプが止まる分省電力化できる。持ったはんだをハンダ吸い取り線などで取り除けばスピーカーを復活させられる。
    欠点: 1.5mmのジャンパを盛るという器用なはんだ付が必要。
  • M5StackライブラリのSeakerのbeginとmuteを呼ぶ
    利点: ソフトウェアで対応できる
    欠点: オーディオアンプは動いているので、耳を近づけると雑音を感じる
  • 25番ピンをGNDに接続する
    利点: ジャンパワイヤを挿すだけで対応できる。ジャンパワイヤを抜けばスピーカーが使える状態に戻る。
    欠点: スピーカーへの信号を完全遮断はできていないので、耳を近づけると雑音が聞こえる。
  • スピーカーのはんだ付けされている部分を溶かして外す
    利点: スピーカーを別の用途に使える。
    欠点: スピーカーの無効化も復活も、ジャンパとジャンパワイヤに比べると手間。
  • スピーカーの線を切る
    利点: ニッパーで切れば良いので、スピーカーの無効化がジャンパワイヤの次に容易。
    欠点: スピーカーの復活が、信号線の修理から必要になるので、手間。

自分のお勧めは「オーディオアンプへの給電を止めるためのジャンパをはんだで盛る」方法です。
利点に挙げた通り、M5Stack省電力化できる上に、ジャンパのはんだを取ればスピーカーを復活させられるからです。

スピーカーを使わないのに雑音が気になる方は、都合の良い方法をお試しくださいな。

変更履歴

2020.03.15
Speaker.begin + Speaker.mute で25番ピンをGNDに接続するのと同等の効果を得られることが分かったので、追記しました。

0 件のコメント :