Archive for 6月 2022
Let’s revive the broken M5Stack
壊れたM5Stackを復活しよう。 2022.06.08
M5Stackに ESP32 MiniKit, S2 mini , M5Stamp C3U を接続します。
修理費用: 640円です。
1. ESP32 MiniKit :640円。
2. ESP32 S2 mini:690円。
3. M5Stamp C3U:870円。
修理改造後の性能:
- ESP32 MiniIKit(MiniKIT_lgfx80M)は M5Stackより 2.6倍 高速です。
- ESP32 MiniKitとS2 miniは SPI 80MHz動作が可能です。
- M5Stamp C3Uは SPI 40MHz までです。
- Raytrace 速度比較:Minikit(M5MiniKit)は M5Stackの2.2〜2.4倍高速です。
.
経緯と故障状況:M5Stackを10台ほど購入。内3台が壊れました。
1. M5Stack Basic:Tip Partsを破損。
2. M5Stack Gray:MD5 error発生。原因は CP2104の不良。
3. M5Stack FIRE :MD5 error発生。原因は CP2104の不良。
-
.
🟢 Sample Down Load:
3D_CUBE_M5MiniKit.zip , LVGL802_demo_M5MiniKit.zip , MovingCircles_M5MiniKIT.zip
Raytrace_M5MiniKit.zip , Test_PDQ_M5MinKit.zip , Tetris_M5MiniKit.zip
uncannyEyes_M5MiniKit.zip
DL後 pdf(_.pdf)を削除しzipを解凍します。
SPI 80MHzです。ただし LVGL802_demo, Tetris, uncannyEyes は40MHz動作です。
記事の下に示す「LovyanGFX と SPI Frequency」を参照ください。
.
修理方法:
1. ESP32 MiniKit に交換。(SPI Clock 80MHz可能)
2. ESP32 S2 mini に交換。(SPI Clock 80MHz可能)
3. M5Stamp C3U に交換。(SPI Clock 40MHzまで可能)
4. Libraryは LovyanGFXを使用します。
.
準備:
1. M5Stack基板のLayoutを把握します。
- Parts arrangement of M5Stack。2020.04.01。pdfは 解析と部品配置が示されています。
- レイアウトから部品や信号の流れの把握、修理、改修が可能です。
2. M5StackのSchematicを把握します。
- M5-Core-Schematic(20171206).pdf
- 公式のSchrmaticは 意図的な誤記がありますので解析を把握します。
3. 部品リスト:640円 ( $5 ):価格は 円相場で変動します。
No. | Nomen | Purchase | Price |
1 | MH ET LIVE ESP32 MiniKIT |
WAGAT official Store . 10個:5585円 . 1個560円 . 輸送期間 10day . その後 価格上昇。 |
560円 |
1 | MH ET LIVE ESP32 MiniKIT | SAMIORE Store . 10個:5626円, 1個563円, 輸送期間 9day |
563円 |
1 | MH ET LIVE ESP32 MiniKIT | SAMIORE Store 698円 | 698円 |
1 | ESP32 S2 mini V1.0.0 |
LOLIN Official Store . $7.85 . 輸送期間 11day |
921円 |
1 | ESP32 S2 mini V1.0.0 | TENSTAR Store $4.37 | 603円 |
1 | ESP32 S2 mini V1.0.0 | SuperModule Store $4.42 | 611円 |
1 | M5Stamp C3 |
M5Stack Official M5Stamp C3 . $10.2 (1162円) . 5pcs販売は 3923円で 1個 785円 |
785円 |
2 | FFC 26pin (0.7mm to 2.54mm) |
JJiu Online Store . 5pcs 393円。個 79円 |
79円 |
3 | N ch FET AO3400A | 秋月電子通商 . 10pcs 220円。1個 22円 |
22円 |
4 | Tip Resistor 10K,100K, 両面テープ,, | ||
5 | 0.26mm ジュンフロン線 | 千石電商 |
.
S2 mini : Without TELEC:ソフトで送信停止 又は アンテナ部に50Ωダミーロードを接続します。
変換基板:LCDのPitchは 0.7mmです。よって 0.7mm to 2.54mm 変換基板を使用します。
N ch FET AO3400A:基板にある FET1 AO03402 が無い場合に使用できます。
4. Libraly:LovyanGFX。
.
以下の順に記載します。
1️⃣ ESP32 MiniKit , 2️⃣ ESP32 S2 mini , 3️⃣ M5Stamp C3U
1️⃣ ESP32 MiniKit
改造手順:
1.分解, 2.LCDの取り外し, 3.MiniKit RST Switch取り外し, 4.LCD配線,
5.基板加工, 6.A,B,C,Power Buttonの高さ調整, 7.基板の加工と配線の実例
の順で説明を致します。
1. 分解:
- Screw2本とSpeakerを外します。
- 基板を左に移動し 基板凹部とケース凸部を合わせ 基板を上げます。
- LCDのFront側(両面テープで固定されている)を外す方法もあります。
- LCDのFlex Wireは短い為 切れないように注意します。
2. LCDの取り外し:M5Stackの基板とLCDを外します。
- Flex Wireは 切れやすく難解ですので準備と注意をしてください。
- 注意:Flex Wireは短く 僅かの範囲で基板を浮かせて取り出します。
- 注意:LCDのFlex Wireは短く”力”で切断しやすい為 ”力”を加えない事。
- 2本のネジを外します。
- Speakerの線が切れないように引き出します。
- Speaker側に基板を移動し基板を上側に上げて引出します。
- 基板からFlex Wireをハンダゴテで外すには コテ先の長い部分で
- Flex Wireハンダ部の全体を溶かして ”力”を加えずに短時間で取ります。
–
- 補足:Flex wreを破損した場合の処置方法。
- 参照:Repair Repair M5Stack Display。
- より線Wreを 分解して1本にしハンダ付けします。
- Flex端子と変換基板(半田メッキ済)に半田付け済みのWireを
- 瞬時にハンダ付けします。上からチョンと押す程度です。
3. MiniKit RST Switch 取り外し:
- 参照:ESP32 Minikit schematic
_ MiniKitの部品がM5StackのPower Buttonに接触する為に
_ RST Switch(緑色)を外し 基板(黄色)をカットします。
_ RST Switch(緑色)を外した状態。
_ RST(SW4) , R29, C37, EN の位置。
_ M5StackのPower ButtonとMiniKitの基板が接触しなくなります。
.
4. LCD配線:
- LCDを変換基板へハンダ付けします。
- 配線図に従い 配線します。
- LCD, 変換基板, M5Stack基板の間は 隙間は ありませんので注意。
- BL(Back Light)用の FET(AO3402)は M5Stack基板の部品を使用します。
- 今回 BLは ESP32のGNDへ配線しています。
5. 基板加工:
- メモ:M5Stackの基板は 4層です。
6. A,B,C Button, Reset(Power) Button の高さ調整:
A,B,C Buttonに シールを4枚程 積み重ね 両面テープで固定します。 Power Buttonは 1枚です。 参考: Repair M5STACK Power Switch メモ:M5の設計は 0.1mm |
.
7. 基板の加工と配線の実例:
1. S4 Power Swicth 配線。
2. この基板のR13(100K)は 3. L2 を外します。 4. 3V3 Wire 配線。 5. GND Wire 配線。 |
|
1. EA3036 3V3 OUTPUTは L2の下。 _ VCC_3V3は L2の上から出力されます。 2. R13は 100KΩ,上のC7は1nf。 |
|
1. A Switch Wire配線。 + Resistor(100K)取付。 2. A Switch Wire配線。 3. A Switch Wire配線。 |
.
.
2️⃣ ESP32 S2 mini
配線:図の様に配線します。
- A,B,C Switch と Power Switchの配線は 省略しています。
- BLとGPIOの配線は 省略しています。
- 基板カットは Wireを通す為に カットします。
- BLは 全てGNDへ接続しています。
.
3️⃣ M5Stamp C3U
配線:図の様に配線します。
- A,B,C Switch と Power Switchの配線は 省略しています。
- BLとGPIOの配線は 省略しています。
- 基板カットは Wireを通す為に カットします。
.
LovyanGFX と SPI Frequency:
SPI Frequency ( cfg.freq_write ) は 最大80MHz, 80MHzを整数で割った値に丸められます。
20,30,40,50,60,70,80M に設定しますと 20,30,40,80MHz に丸められています。
MiniKit, S2 mini は 80MHzでも表示しますが
画像データーを含まれたものは 80MHzでは表示せず 40MHzで表示されます。
M5Stackは 80MHzでは表示せず 最大40MHzになります。
.
LovyanGFX設定:
M5stack の LCD は SPI ILI9342 です。
SPIは SPI2_HOST を使用します。
MiniKit と S2 mini の SPI Clockは 80MHz が可能です。
M5Stamp C3U の SPI Clockは 60MHz までです。
1️⃣ ESP32 MiniKit
//---------------------------------------------------------------------- // https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino //===================================================================== class LGFX : public lgfx::LGFX_Device{ lgfx::Panel_ILI9342 _panel_instance; lgfx::Bus_SPI _bus_instance; // SPIバスのインスタンス public:LGFX(void){ // バス制御の設定を行います。 auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。 cfg.spi_host = SPI2_HOST; // 使用するSPIを選択 ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。 cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3) cfg.freq_write = 80000000; // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます) cfg.freq_read = 16000000; // 受信時のSPIクロック cfg.spi_3wire = true; // 受信をMOSIピンで行う場合はtrueを設定 cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定 cfg.dma_channel = SPI_DMA_CH_AUTO; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定) // ※ ESP-IDFバージョンアップに伴い、DMAチャンネルはSPI_DMA_CH_AUTO(自動設定)が推奨になりました。1ch,2chの指定は非推奨になります。 cfg.pin_sclk = 18; // SPIのSCLKピン番号を設定 cfg.pin_mosi = 23; // SPIのMOSIピン番号を設定 cfg.pin_miso = 19; // SPIのMISOピン番号を設定 (-1 = disable) cfg.pin_dc = 27; // SPIのD/Cピン番号を設定 (-1 = disable) _bus_instance.config(cfg); // 設定値をバスに反映します。 _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。 {// 表示パネル制御の設定 auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。 cfg.pin_cs = 14; // CSが接続されているピン番号 (-1 = disable) cfg.pin_rst = 33; // RSTが接続されているピン番号 (-1 = disable) cfg.pin_busy = -1; // BUSYが接続されているピン番号 (-1 = disable) cfg.memory_width = 320; // ドライバICがサポートしている最大の幅 cfg.memory_height= 240; // ドライバICがサポートしている最大の高さ cfg.panel_width = 320; // 実際に表示可能な幅 cfg.panel_height = 240; // 実際に表示可能な高さ cfg.offset_x = 0; // パネルのX方向オフセット量 cfg.offset_y = 0; // パネルのY方向オフセット量 cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転) cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数 cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数 cfg.readable = true; // データ読出しが可能な場合 trueに設定 cfg.invert = false; // パネルの明暗が反転してしまう場合 trueに設定 cfg.rgb_order = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定 cfg.dlen_16bit = false; // データ長を16bit単位で送信するパネルの場合trueに設定 cfg.bus_shared = false; // SDカードとバス共有はtrueに設定 _panel_instance.config(cfg); } setPanel(&_panel_instance); // 使用するパネルをセットします。 } }; LGFX tft; // 準備したクラスのインスタンスを作成します。
.
LovyanGFX設定:
2️⃣ ESP32 S2 mini
//---------------------------------------------------------------------- // https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino //===================================================================== class LGFX : public lgfx::LGFX_Device{ lgfx::Panel_ILI9342 _panel_instance; lgfx::Bus_SPI _bus_instance; // SPIバスのインスタンス public:LGFX(void){ // バス制御の設定を行います。 auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。 cfg.spi_host = SPI2_HOST; // 使用するSPIを選択 ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。 cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3) cfg.freq_write = 80000000; // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます) cfg.freq_read = 16000000; // 受信時のSPIクロック cfg.spi_3wire = true; // 受信をMOSIピンで行う場合はtrueを設定 cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定 cfg.dma_channel = SPI_DMA_CH_AUTO; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定) // ※ ESP-IDFバージョンアップに伴い、DMAチャンネルはSPI_DMA_CH_AUTO(自動設定)が推奨になりました。1ch,2chの指定は非推奨になります。 cfg.pin_sclk = 7; // SPIのSCLKピン番号を設定 cfg.pin_mosi = 5; // SPIのMOSIピン番号を設定 cfg.pin_miso = 19; // SPIのMISOピン番号を設定 (-1 = disable) cfg.pin_dc = 11; // SPIのD/Cピン番号を設定 (-1 = disable) _bus_instance.config(cfg); // 設定値をバスに反映します。 _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。 {// 表示パネル制御の設定 auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。 cfg.pin_cs = 3; // CSが接続されているピン番号 (-1 = disable) cfg.pin_rst = 9; // RSTが接続されているピン番号 (-1 = disable) cfg.pin_busy = -1; // BUSYが接続されているピン番号 (-1 = disable) cfg.memory_width = 320; // ドライバICがサポートしている最大の幅 cfg.memory_height= 240; // ドライバICがサポートしている最大の高さ cfg.panel_width = 320; // 実際に表示可能な幅 cfg.panel_height = 240; // 実際に表示可能な高さ cfg.offset_x = 0; // パネルのX方向オフセット量 cfg.offset_y = 0; // パネルのY方向オフセット量 cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転) cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数 cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数 cfg.readable = true; // データ読出しが可能な場合 trueに設定 cfg.invert = false; // パネルの明暗が反転してしまう場合 trueに設定 cfg.rgb_order = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定 cfg.dlen_16bit = false; // データ長を16bit単位で送信するパネルの場合trueに設定 cfg.bus_shared = false; // SDカードとバス共有はtrueに設定 _panel_instance.config(cfg); } setPanel(&_panel_instance); // 使用するパネルをセットします。 } }; LGFX tft; // 準備したクラスのインスタンスを作成します。
.
LovyanGFX設定:
3️⃣ M5Stamp C3U
//---------------------------------------------------------------------- // https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino //===================================================================== class LGFX : public lgfx::LGFX_Device{ lgfx::Panel_ILI9342 _panel_instance; lgfx::Bus_SPI _bus_instance; // SPIバスのインスタンス public:LGFX(void){ // バス制御の設定を行います。 auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。 cfg.spi_host = SPI2_HOST; // 使用するSPIを選択 ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。 cfg.spi_mode = 0; // SPI通信モードを設定 (0 ~ 3) cfg.freq_write = 60000000; // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます) cfg.freq_read = 16000000; // 受信時のSPIクロック cfg.spi_3wire = true; // 受信をMOSIピンで行う場合はtrueを設定 cfg.use_lock = true; // トランザクションロックを使用する場合はtrueを設定 cfg.dma_channel = SPI_DMA_CH_AUTO; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定) // ※ ESP-IDFバージョンアップに伴い、DMAチャンネルはSPI_DMA_CH_AUTO(自動設定)が推奨になりました。1ch,2chの指定は非推奨になります。 cfg.pin_sclk = 5; // SPIのSCLKピン番号を設定 cfg.pin_mosi = 4; // SPIのMOSIピン番号を設定 cfg.pin_miso = 19; // SPIのMISOピン番号を設定 (-1 = disable) cfg.pin_dc = 7; // SPIのD/Cピン番号を設定 (-1 = disable) _bus_instance.config(cfg); // 設定値をバスに反映します。 _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。 {// 表示パネル制御の設定 auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。 cfg.pin_cs = 3; // CSが接続されているピン番号 (-1 = disable) cfg.pin_rst = 6; // RSTが接続されているピン番号 (-1 = disable) cfg.pin_busy = -1; // BUSYが接続されているピン番号 (-1 = disable) cfg.memory_width = 320; // ドライバICがサポートしている最大の幅 cfg.memory_height= 240; // ドライバICがサポートしている最大の高さ cfg.panel_width = 320; // 実際に表示可能な幅 cfg.panel_height = 240; // 実際に表示可能な高さ cfg.offset_x = 0; // パネルのX方向オフセット量 cfg.offset_y = 0; // パネルのY方向オフセット量 cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転) cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数 cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数 cfg.readable = true; // データ読出しが可能な場合 trueに設定 cfg.invert = false; // パネルの明暗が反転してしまう場合 trueに設定 cfg.rgb_order = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定 cfg.dlen_16bit = false; // データ長を16bit単位で送信するパネルの場合trueに設定 cfg.bus_shared = false; // SDカードとバス共有はtrueに設定 _panel_instance.config(cfg); } setPanel(&_panel_instance); // 使用するパネルをセットします。 } }; LGFX tft; // 準備したクラスのインスタンスを作成します。
.
感想:
愛着のある M5Stackが蘇ると嬉しいですね。
- 修理費:M5Stackは 価格高いですが MiniKit版の 640円は安いです。
- 速度の向上:ESP32 MiniKit により 2.6倍 高速化し気分が高まります。
- 変換基板:市販の変換基板は 1.6mmで厚いです。
- その為に A,B,C Switch の高さ調整が必要です。
- 1mm厚の基板であれば 調整不要か調整が容易になります。
- 1mm基板を製作し付加価値のある回路を追加すると
- 最強のM5Stackになるでしょう。
- ESP32 RST:
- S4 Power Switch を MiniKitのRST Switchに変更します。
- C7(1nF)とR13(100KΩ)(τ=4.7μsec)をそのまま使用するか
- R13=10KΩで τ=0.47μsec(MiniKitの時定数)でも良いです。
- 時定数は ある程度大きい方が安定した書き込みや起動をします。
- RST τ の値:書き込みや起動時に重要な τ(タウ) の値。τ=0.47CR
- ESP32 Dev Kit:0.22μsec:エラーが起きやすい値です。
- M5Stack Basic:0.564μsec:書き込みエラーの情報があります。
- ESP32 MiniKit:0.564μsec:正常に動作しています。
- ESP32 S2 mini:4.7μsec:従来よりも1桁値が増えています。
- M5Stamp C3U:221μsec:従来とは桁が違う値です。
- 他 新しいESP32 Boardの τ の値は 大きくなっています。
- SPI 80MHz:
- 60MHzでないと表示が乱れたり動作しない場合があります。
- 原因はスケッチ内の画像データーを読み込む時に発生します。
- MiniKitとGPIO:
- LCDのGPIOを同一にする事により Arduino IDE での
- Board Manager は M5Stack-core-ESP32 を選択できたり
- #include M5Stack.h を使用でき M5Stackの命令も動作します。
- IC と サーマルパッド(GNDパターン):
- サーマルパッド(GNDパターン)のある ICは ESP32 と IP5306 です。
- ESP32とIP5306を破損せず外すには 工夫してください。
- M5StackとMiniKit:
- ESP32-WROOM-32と言う同じMPUを使用しています。
- LovyanGFXでPDQ Graphics Testを実行すると
- M5Stackは SPI 40MHzまでの表示です。
- MiniKitは SPI 80MHzまで表示が可能でした。不思議です。
- この違いは 部品レイアウトや配線の太さの違いの為かと想像しています。
.
.
M5Stack , Gray , FIRE , ESP32 MiniKit , S2 mini , M5Stamp C3U ,