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

投稿 2016/07/15 | デジタル工作機 | 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軸のキャリブレーション値などの後で設定した値について、組み立て時と同じ要領で設定して終了です。

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


« PrevNext »

コメント

コメントはありません。

コメントする