3Dプリンタ(RepRapPro Huxley)のCPU交換(ソフト)

投稿 2016年07月15日 17時57分18秒 | 3Dプリンタ | hotall

前回は3DプリンタのCPU破損に伴い、MelziボードのCPU(ATMEGA1284P)を交換しました。
今回は、交換したCPUにソフトをインストールします。

この文書は個人的なものであり、読者による修理を推奨するものではなく、内容について一切の責任を負いかねます。


CPUに制御ソフトをインストールするにはMAC,Linux,Windowsのいずれかのパソコンが必要です。
私のパソコンはWindows10/64bitですので、この環境で作業を進めます。

ブートローダーの書込み

RepRapの制御ソフトはArduinoで開発されています。従って、Arduinoの開発環境を使ってターゲットCPUにインストールする訳ですが、その前提としてパソコンからファームウェアを転送するために、事前にブートローダーがCPUに書き込まれている必要があります。

Melziを含め、市販のArduinoボードには既にブートローダーが書き込まれています。しかし、今回、CPUを新しく置き換えたため、自身でこれを書き込む必要があります。

ブートローダーを書き込むには、書込み装置とソフトが必要です。今回、書込み装置にはAVRISP mkIIを、ソフトにはAtmel Studioを使用します。


AVRISP mkIIは秋月電子通商から購入しました。

Atmel StudioはAtmelのホームページから最新版(Atmel Studio 7.0 (build 1006) web installer)をダウンロードします。

このツールはVisual Studio2015をベースにしているので、インストーラを起動すると、まずこれがインストールされます。インストール後、再起動が求められこれを行いますが、インストールはまだ終わっていないので注意が必要です。再度、インストーラを起動して後続の処理を行います。

尚、このツールはファイルパスに日本語があるとエラーになるので、名前に日本語を含まないユーザーでログインする必要があります。

次にCPUに書込むブートローダープログラムを入手します。

これはファームウェアプログラムに含まれていますので、これら一式をここからダウンロードします。ファームウェアの名前はMarlinで、このリンクのバージョンはReprapproによりフォークされたものです。

入手したファイルは解凍して、適当なフォルダに配置します。ファイルは後述のファームウェアのインストール時にも使用します。


書込み装置をパソコンと制御ボードに接続します。制御ボードには電源を接続し、給電しておきます。

Atmel Studioを起動します。
画面上部の各入力欄に次の設定を行い、Applyボタンを押します。
Tool: "AVRISP mkII"
Device: "Atmega128P"
interface: "ISP"


AVRISP mkIIのファームウェアにアップデートがある場合はアップデートが求められるので、これを行います。

[Read]ボタンを押してDevice SignatureとTarget Voltageを取得します。

[Memories]をクリックして、メモリ操作画面を表示します。
念のため、[Erase Chip]-[Erase now]ボタンを押して、メモリをクリアします。

Flashデータに先ほどダウンロードしたファームウェア内のブートローダープログラムファイルを指定します。
sanguino\bootloaders\atmega\ATmegaBOOT_1284P.hex

[Program]ボタンを押して、ブートローダーを書き込みます。

[Fuse]をクリックし、ヒューズ情報を表示します。

Fuse Registerに次の値を入力します。
EXTENDED: 0xFD
HIGH: 0xDC
LOW: 0xD6
この値は、ダウンロードしたファームウェアファイルのboards.txtで指定されている値です。

[Program]ボタンを押して書き込みます。

警告メッセージが出ますが[Continue]ボタンを押して継続します。

[Lock bits]をクリックしてロックビット画面を表示します。

LOCKBIT欄に0x0Fを設定します。この値もboards.txtで指定されています。

[Program]ボタンを押して書き込みます。

これでブートローダの書込みは完了です。

制御ボードのリセットボタンを押すことにより、ブートローダは起動します。ファームウェアはUSB経由でArduino開発ツールから書込み可能となりました。


ファームウェアの書込み

ブートローダーに続き、ファームウェアを書き込みます。

まず、Arduino開発環境を構築します。

Arduino開発ツール(Arduino IDE)のWindows Installer版をここからダウンロードし、インストールします。

このパッケージにはMelzi関連のハードウェア情報が含まれていないので、先ほどダウンロードしたファームウェアファイルの中からハードウェア情報ファイルを取り出し、IDEのインストールディレクトリ上にコピーします。

本来この作業はコピーするだけの簡単な作業ですが、ファームウェアが開発された時点のAduino IDEと最新のAduino IDEのバージョンでは、ハードウェアファイルの形式に互換性がなくなっているので、以下のような多少面倒な作業となります。

ダウンロードしたファームウェア中の'sanguino’フォルダとその内容をIDEの'Arduino/hardware/’フォルダにコピーします。

コピーしたsanguinoフォルダの下にavrフォルダーを作成し、sanguinoフォルダ直下のファイル及びフォルダを移します。

\sanguino\avr\bootloaders\atmegaの下のブートローダー関連ファイルを\sanguino\avr\bootloadersに移動します。

\arduino\avr\platform.txtファイルを\Sanguino\avrフォルダにコピーし、内容を編集します。

name=Arduino AVR Boards

name=Sanguino AVR Boards
に変更します。

boards.txtを編集します。
atmega1284.upload.protocol=stk500v1

atmega1284.upload.protocol=arduino
に変更します。

atmega1284.bootloader.tool=arduino:avrdude
を追加します。

arduinoのスケッチフォルダ(<ドキュメント>\Arduino)にダウンロードしたファームウェアファイルのMarlinフォルダをコピーします。

制御ボードのUSBコネクターとパソコンのUSBコネクタをUSBケーブルで接続します。


Arduino IDEを起動します。
[ファイル]-[スケッチブック]メニューから"Marlin"を選択し、ファームウェアのスケッチブックを開きます。

ファームウェアファイルは書き込むハードに合わせてソースコードの変更が必要となります。

Configuration.hを編集します。

//#define REPRAPPRO_HUXLEY
行のコメントアウトを外します(先頭の//を削除)。

//#define REPRAPPRO_MELZI
行のコメントアウトを外します。

ホットエンドのサーミスタ直列抵抗(R5)の値により
//#define SERIAL_R 4700
または
//#define SERIAL_R 10000
行のコメントアウトを外します。


私のボードは472(4.7KΩ)なので前者の行のコメントアウトを外します

[スケッチ]-[検証・コンパイル]メニューでスケッチブックをコンパイルします。

今回ダウンロードしたファームウェアの場合、何故か関数重複定義エラーが発生しました。
Marlin:585: error: previous declaration 'bool code_seen(char*)....

調べてみると、引数が異なる同一名の関数:code_seenが2つ存在しています。
bool code_seen(char code_string[])
bool code_seen(char*)
コードを見ると、前者は使われていないので、削除しました。

書き込み先の設定を行います。

[ツール]-[ボード]メニューで"Melzi 1284p 16mhz"を選択します。

[ツール]-[シリアルポート]で制御ボードのUSBシリアルポート番号を選択します。

[スケッチ]-[マイコンボードに書き込む]メニューをクリックし、ファームウェアを書き込みます。

書込み後、制御ボードのリセットボタンを押下し再起動します。
後は、XYZ軸のキャリブレーション値などの後で設定した値について、組み立て時と同じ要領で設定して終了です。

以上の作業で無事、機能するようになりました。
ボードごと交換することに比べ、手間がかかってしまいましたが、古いボードが再利用できて良かったです。
実は、保険として安価なボードを購入していましたが、今回は出番がなかったので、将来の補修部品としてストックしておくことにしました。

3Dプリンタ(RepRapPro Huxley)のCPU交換(ハード)

投稿 2016年07月06日 17時36分13秒 | 3Dプリンタ | hotall


先日のヒーテッドベッドの修理でCPUを破損してしまったので、新たな修理が必要となってしまいました。
Huxleyの制御ボードはArduinoの派生基板でMelziと呼ばれるものです。バージョンは2です。
Melzi ver2のボードはネットで安く手に入りますが、多くはモータードライバがver1のままのA4988が実装されています。これに対し、私の購入したボードはebay経由のRepRapPro純正の純粋なver2で、モータードライバも熱トラブルの少ないA4982となっており、会社が撤退した今、手放すには惜しい製品です。
そこで、CPUのみ交換することにしました。
この文書は個人的なものであり、読者による修理を推奨するものではなく、内容について一切の責任を負いかねます。


まず、CPUを取り外さなければなりません。

パッケージはTQFP。狭ピッチの4辺ピン配置で表面実装になっています。
これらすべての足を同時に加熱しなければ、取り外せない、少々厄介な代物です。

ホットブローや低温はんだなど、外し方にはいくつかあるのですが、今回は以前ネットで見つけた銅線を使用する方法を試してみることにしました。


銅線を用意します。
私はホームセンターで1.2mmのものを購入しました。

CPUのすべての足と接触するように、銅線を写真のように折り曲げます。

銅線の下の面が平らになるようにハンマーで叩きます。

微調整を繰り返して、CPUのすべての足が銅線に接触するようにします。
地道な作業で、数十分を要します。

銅線に予備はんだをします。

CPUを持ち上げるために、ワイヤーを足に通します。
私はラッピング線の被覆を剥いたものを使用しました。

CPUの二辺にワイヤーを通し、その上から銅線を置き、ワイヤーを縛ります。

更に縛ったワイヤーが解けないように、はんだ付けします。

銅線とCPUの各足にはんだを盛ります。

銅線の中央部にはんだごてを押さえつけるように当て、ワイヤーをペンチでつまみます。

銅線のすべての半田が解ける必要があるので、半田ごてのこて先は大きめのものを使用し、温度は高めにします。
わたしの場合、白光FX600にT18-C3のこて先を装着し、420℃に設定しました。

こてを当てて、すべての半田が融けるまで待ちます。今回は20秒くらいで融けました。

はんだが融けたら、ペンチでつまんだワイヤーを持ち上げるように力を加えます。このとき基盤が浮き上がらないように小指で押さえます。

CPUが外れました。

外したCPUです。
足が数本取れてしまいました。
今回は、再利用しないのでこれでもOKとします。

基板の方は、半田の一部が流れ落ちていますが、思ったよりきれいな状態です。

よく見るとランドの1つがめくれあがっています。
折れないようにそっと元の状態に戻します。

古いはんだを吸い取ります。

ランドに予備はんだをします。

新しいCPUを用意します。
CPUはATMEGAの1284Pで、8bitのRISCプロセッサです。
私は秋月電子通商から購入しました。

ランドに合わせて、CPUを乗せ、2本の足をはんだで仮止めします。

すべての足をはんだ付けします。
細めのこて先で低めの温度にします。今回はこて先T18-C1で320℃としました。
余分なはんだは吸い取り線で取り除きます。

最後に念のため、隣り合う足にブリッジがないことをテスターで確認します。

これで、ハード的な作業は終わりました。

この後、ソフト的な作業が必要となります。

3Dプリンタ(RepRapPro Huxley)のヒーテッドベッドの接触不良とCPU破損

投稿 2016年07月05日 16時04分26秒 | 3Dプリンタ | hotall

3Dプリンタが出力するのを見るのは楽しいものです。X、Y、Z軸の駆動装置がダイナミックに動く様子は、まるで意思のある生き物のように見えます。
Huxleyの場合、特にX,Y軸方向にベッドが激しく動くので、ベッドに繋がっているケーブルが断線するのではないかと心配になったりします。
案の定、先日、ベッドの温度が計測できなくなるようになりました。





ケーブルコネクタ辺りを触ると、現象が出たり出なかったりするので、このコネクタの接触不良のようです。以前も接触不良があり、補修した場所です。

良く見ると、ランドが浮き上がっています。
この基盤は、片面基板です。ランドはスルホールではないので、力がかかると剥がれ易くなっています。そのうえ、このコネクタはテーブルの移動とともに頻繁に力がかかるので、接触不良が起きるのは必然的と言えます。

まず、コネクタを外します。

元の端子は、直立端子で、端子自身が比較的長く、てこの原理で、接続部分には大きな力が加わります。
今回、この端子をL字型して、高さを抑え、加わる力を軽減します。

L字の長いほうを基板に差します。

基板の表側に出たピンをパターンに沿って折り曲げます。これにより、コネクタが抜けにくくなるのと同時にパターンとの接触面積を広げることができます。

はんだ付けします。
ランドのいくつかは既に剥がれてしまっているので、パターンのレジストを剥がし、そこにはんだ付けしました。

本来ならケーブルを接続して修理は完了のはずでした。

しかし、次の瞬間"バチッ"と火花が散りました。
「あ、しまった。」

ケーブルの断線をチェックした時に、装置の電源を入れたことを忘れ、通電したまま作業をしていたのです。
「やってしまったか。」

ソフトを立ち上げ、動作を確認します。
通信はできますが、ベッドとホットエンドの温度が異常な値を示します。
アナログ入力の故障です。電源ラインとショートさせてしまったようです。

この制御ボードのアナログ入力はCPUに直結されています。
CPUを見ると、見事にパッケージに穴が開いていました。

新たな問題発生です。

[追記]
問題の対策としてCPUの交換をすることにしました。