壊れたArduino Nano を修理してみる

published_with_changes 更新日: event_note 公開日:

labelArduino

壊れたArduino Nano が2個あります。一度はゴミ箱に入れたのですが、ネットでUno/Nanoの記事を拾い読みしているうちに、これらの構成が見えてきました。そして、壊れた素子を交換すれば直るかもしれないと思い始めました。

2コイチにして治そうと思います。


壊れた内容

1つ目(以下、故障A)は電流測定モジュールINA219のVCCとGNDをショートさせてしまい、そこに繋げていたNanoの3.3Vが出なくなりました。通電すると表裏で同じ位置にあるAtmega328PかCH340Gが触れないほど発熱します。もちろんデバイスマネージャから消えました。

壊れた経緯からすると、電源のレギュレータ AMS1117がやられているようにも思えます。ただし、5Vは出ています。3.3Vが出ません。そこで調べていくと3.3V はUSBシリアル変換チップのCH340Gが作っているようです。これが壊れたようにも思います。

ショートの有無を調べると、AMS1117は#1 GNDと#2 OUT がショートしていました。CH340Gは #1 GND と#16 VCC がショートしていました。AMS1117の #2 OUTとCH340Gの #16 VCCはつながっているようなので、どちらが内部でショートしているかは外してみないとわかりません。

CH340Gの左にあるショットキーバリアダイオードは過電圧の保護目的に設けられているようです。これが壊れているケースがネットによく紹介されていましたが、私のケースではここは順方向電圧0.2V強で正常でした。


レギュレータのAMS1117とチップのCH340Gを外してみました。単体で確認したところAMS1117にショートはなく、CH340Gの#1 GND と#16 VCC がショートしていました。多分これが原因ではないかと思います。



2つ目(以下、故障B)はあるときから、それまで動いていたスケッチが動きません。スケッチの書き込みもできなくなりました。IDEには次のエラーメッセージが出ます。

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
...

これを手掛かりに探してみると、Arduino Help Centerに行きつきます。解決策はボードとプロセッサを確認して、問題ないなら別のプロセッサーを指定してみるように書いてあります。さらに、ループバックテストが適用できるボードならシリアル通信をチェックするように書いてあります。

これらの何をやっても状況は変わりません。ブートローダの異常かもしれないので、新しいブートローダーを書き込みをやってみました。

'Error: avrdude' when uploading

'Error: avrdude' when uploading

When uploading a sketch to your board you may get an error from the avrdude utility: stk500: avrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt X of 10: not in...


しかし、ブートローダの再書き込みを行おうとすると次の悲劇的なエラーメッセージがでます。

IDEを詳細モードにした時の書き込み処理の最後の部分です。

avrdude: Device signature = 0xffffff (probably .avr8x_mega)
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.
avrdude done.  Thank you.
Failed chip erase: uploading error: exit status 1

何のことかチンプンカンプンですが、直訳すると、”チップの消去に失敗。書き込みエラー。exit status 1” です。それ以上はわかりません。Googleで調べても出てきません。

故障Aと同様にショートをチェックすると、AMS1117とCH340Gともにショートはありませんでした。壊れる原因になるような扱い方をしたことはないので、電源系ではないと思っています。ショットキーバリアダイオードも正常でした。

疑わしいのはCH340Gか、主ICのAtmega328Pだと思います。

故障Bを修理

故障Aに故障Bの電源まわりを移植するか、故障Bに故障AのICを移植するかを思ったときに、私はむつかしい方につい手が出てしまいます。ダメージをさらに増やすかもしれないQFP32のAtmega328Pを2つ外して、そのうちの一つをハンダ付けする作業をやりたくなってしまいます。

そこで、故障AのAtmega328Pを故障Bに移植することにしました。これでダメならば、CH340Gの故障になるので、それの交換も視野に入れます。

Atmega328PはQFP32パッケージで0.8mmピッチです。これを外したり着けたりするのは初めてです。すぐ近くに部品があるので耐熱テープで保護しておきます。


低温ハンダをAtmega328Pの4辺にまんべんなく塗って、4辺を順番に繰り返しなぞっているとICが外れました。その瞬間に、ハンダが固まる前にピンセットで拾い上げます。同じことをもう一つのNanoにも行います。


下記の写真は、交換するAtmega328Pを故障Bに仮付けした段階の写真です。基板のパッドとのずれが無いように何度も確認してから2辺の一部をチョン付けしました。ここまでできれば、あとは小手先で足をなぞるだけです。最後にピン間のショートがないことをテスターで確認して完了です。



IDEで恐る恐るサンプルスケッチを書き込みしてみると、あっさりと書き込み完了です。安堵しました。余計なものも映っていますが、LCDのサンプルスケッチを書き込んで動かしてみました。正常に動いているようです。


本当のところは、あっさりと書き込み完了の前にひと悶着ありました。交換後初めてスケッチの書き込みを行おうとすると、交換前と同じで、スケッチ書き込みもブートローダ書き込みもできませんでした。直っていません。苦労した交換の効果がなく落胆しつつ、ダメ元でICを上から押えながらハンダごてをICのリードにあてて再加熱したら、正常に読み込みできるようになった次第です。


あらためて考えてみると

故障BのNanoは、何もしなくても突然読み込みできなくなったので、Atmega328Pのどこかにハンダクラックがあったのかもしれません。交換しなくてもコテ当てだけで直ったようにも思います。

そう考えると故障BについていたAtmega328Pは正常かもしれません。きっと正常だと思います。故障AにこのICを乗せ、正常なCH340Gをつけると直るような気がします。

故障Aを修理

秋月電子でAtmega328PCH340Gを購入しました。2つ合わせて470円です。直ることを期待して故障Aにハンダ付けしました。写真は裏面で、AMS1117レギュレータを元に戻し、新品のCH340Gをハンダ付けした様子です。


新品のAtmega328Pを動かすには、まずAtmega328pにブートローダを書き込みます。これはArduino Uno を書き込み装置にして、ターゲットのNanoにブートローダを書き込む流れです。UnoとNanoのつなぎ方と手順はArduino Help Center (下記の引用) がわかりやすかったです。

このとおりにやると、今回もあっさりとブートローダの書き込みができました。直った模様です。

Burn the bootloader on UNO, Mega, and classic Nano using another Arduino

Burn the bootloader on UNO, Mega, and classic Nano using another Arduino

The bootloader is a small piece of software that allows uploading of sketches onto the Arduino board. It comes preprogrammed on the microcontrollers on Arduino boards. Whether the bootloader has be...


ここからが課題

しかし、”そうは問屋がなんとか”です。直した故障BをUSBケーブルでPCに繋いでもポートを認識できません。はんだの接触不良の確認を手始めに、動いているUnoとの比較で各ピン端子の電圧、抵抗、実装されている素子の特性値などを比較しましたが、違いはありません。

Atmega328pを元の物に乗せ換えたり、また戻したり、考えられることを試してみたのですが、やはりポートを認識しません。

シリアルが成立していないようなのですが、CH340Gから3.3V は出ているし、TXDとRXDの電圧や絶縁にも問題ありませんでした。そこで、CH340Gに注目して、徹底的に調べることにしました。GNDを基準にした時の各端子の抵抗とUSBにつないだ時の電圧を調べた結果が次の表です。

正常動作する故障B修理品ポートが出ない故障A修理品
Pin #抵抗 [Ω]電圧 [V]抵抗 [Ω]電圧 [V]
2TxD5.35M4.675.33M4.71
3RxD5.36M4.675.33M4.69
4V33287K3.32307K3.28
5D+4.86M3.064.76M-10m
6D-4.86M-22m4.75M-10m
7Xi5.71M4.655.56M2.34
8Xo5.62M4.685.56M2.42
92.44.695.48M4.71
105.33M4.695.48M4.71
115.27M4.695.46M4.71
12287K4.695.46M4.71
13DTR4.85M4.695.46M4.71
144.86M4.695.46M4.71
155.69M4.695.46M4.71
16VCC1.73K4.691.58K4.71
mini B #2 to Pin#6導通OK導通OK
mini B #3 to Pin#5導通OK導通OK

赤色文字の部分がおかしいです。Pin#5から#8の電圧がおかしい原因がCH340G自体にあるのか、関連する他の素子の影響なのか、この先へ進むことができません。

買ったばかりのUSB・シリアル変換チップのCH340にぶら下がっている部品はコンデンサしかなく、測ってみても異常はありませんでした。CH340Gのドライバを入れ直してみても変わりありません。新品が故障しているとは考えずらく....

PCに繋いでもポートが出てこない症状からするとCH340Gが一番怪しいのですが、別のCH340Gを持ってないのでこれで行き詰まりになりました。

直接PCに繋いで認識させることはできませんが、Unoを書き込み装置にしてスケッチを書き込むことはできます。LCDのサンプルスケッチを書き込んでみましたが、正常に動作できています。



故障BのAtmega328pは正常なのか

推測では正常かもしれない故障Bに載っていたAtmega328Pの顛末を確認しようとQFP32をDIPに変換する基板にのせてみました。

単体で使えるボードになることを期待して、ブートローダの書き込みをしてみると、故障Bで出ていたエラーメッセージ(Failed chip erase: uploading error: exit status 1)と同じメッセージがでました。もちろんスケッチの書き込みでも同じエラーです。

つまり、故障Bの書き込みできなくなった原因は、ハンダクラックとか接触不良ではなくAtmega328pが壊れたからということになります。

成果

  • 外付け書き込み装置が必要なNano(故障A):1個
    1. Atmega328p 新品交換
    2. CH340G 新品交換するも、D+、D-、Xi、Xo の出力がおかしい
  • もとどおりに直ったNano(故障B) :1個
    1. Atmega328p 故障Aの物を実装

  • 部品費用 470円
  • 実装部品の取り外しとはんだ付けに、少しばかり経験と自信ができた。

Powered by Blogger | Designed by QooQ

keyboard_double_arrow_down

keyboard_double_arrow_down