3Dプリンタのメインボードを交換してラズパイに繋げてしまった人が
魔改造をさらに楽しむための記事です
まだメインボード交換・ラズパイ接続が終わってない方は
この記事を読んで深い沼に思いを馳せながら
前回の記事を参考に改造を完了してください
NeoPixelをつけてみよう(★☆☆)
私がものづくり施設で使ってたUPBOXという30万円の3Dプリンタだと
印刷中にNeoPixelをつけることができて綺麗だったんです
3万円のEnder 3 ProにもNeoPixelをつけてみましょう
まずはNeoPixelのテープLEDを購入します
ファームウェアを書き換えよう
Githubに載っている回路図を見てみると
NeoPixel用のピンが用意されていることがわかります
回路図には1.24と書いてありますが
ファームウェアでNeoPixelのピンを指定するときはP1_24
と書きましょう
この記事を参考にしてファームウェアを書き換えていきましょう
// Support for Adafruit Neopixel LED driver
#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
#define NEOPIXEL_TYPE NEO_GRB // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
#define NEOPIXEL_PIN P1_24 // LED driving pin
//#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
//#define NEOPIXEL2_PIN 5
#define NEOPIXEL_PIXELS 30 // Number of LEDs in the strip, larger of 2 strips if 2 neopixel strips are used
#define NEOPIXEL_IS_SEQUENTIAL // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
#define NEOPIXEL_BRIGHTNESS 127 // Initial brightness (0-255)
#define NEOPIXEL_STARTUP_TEST // Cycle through colors at startup
// Use a single Neopixel LED for static (background) lighting
//#define NEOPIXEL_BKGD_LED_INDEX 0 // Index of the LED to use
//#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
#endif
#define NEOPIXEL_PIXELS
で何個LEDを使うか指定することができます
#define LED_CONTROL_MENU
#if ENABLED(LED_CONTROL_MENU)
#define LED_COLOR_PRESETS // Enable the Preset Color menu option
#if ENABLED(LED_COLOR_PRESETS)
#define LED_USER_PRESET_RED 255 // User defined RED value
#define LED_USER_PRESET_GREEN 255 // User defined GREEN value
#define LED_USER_PRESET_BLUE 255 // User defined BLUE value
#define LED_USER_PRESET_WHITE 255 // User defined WHITE value
#define LED_USER_PRESET_BRIGHTNESS 255 // User defined intensity
#define LED_USER_PRESET_STARTUP // Have the printer display the user preset color on startup
#endif
#endif
ファームウェアの変更ができたら電源をつけるとLEDテープが光るはずです
#define NEOPIXEL_STARTUP_TEST
によって電源をつけると赤→緑→青→白の順番に光るはずです
メニューのLED Control
からプリセットに入っている色を指定して
正しく光るか試してみましょう
このLEDテープの場合はNEO_GRB
と書くところをNEO_GRBW
と書いていると
ちゃんと色の指定ができないので注意です
Ender3に取り付けよう
LEDテープを取り付けるためのパーツを設計してもいいのですが
パイプの溝に入れてしまえば簡単に取り付けることができます
ただしLEDテープの幅が溝より少し広いので端を切る必要があります
こんな感じでパイプの溝に差し込めたらなんかおしゃれな3Dプリンタになります
本当におしゃれなのか?
個人的にはスターウォーズのライトセーバーに見える
Gコードでは
M150 B255 R20 U150
のようにすると色の指定ができます
R = Red B = Blue U = Green
M150コマンドの詳細はこちらを見てください
モータドライバをTMC2208にして静音化しよう(★★☆)
TMC2208ってすごいんです
SpreadCycleモードとStealthChop2モードの二つを切り替えることができるようになっています
SpreadCycleモード
- サイクル単位で高精度に電流制御を行う
StealthChop2モード
- 非常に静かな動作モード
- 電流変動を減らし磁気歪みによる低周波ノイズの発生を抑える
- 高速で動かすと脱調しやすい
らしいです(参考:Trinamicのカタログ,キットではじめる3Dプリンタ自作入門)
つまり
低速での動作時はStealthChop2モードでめっちゃ静か
高速での動作時はSpreadCycleモードで脱調防止
という風にうまく使い分けることができるんです
それではこのTMC2208を扱えるようにファームウェアを変更していきましょう
Teaching Techの動画1とTeaching Techの動画2を参考にしました
#define X_DRIVER_TYPE TMC2208
#define Y_DRIVER_TYPE TMC2208
#define Z_DRIVER_TYPE TMC2208
#define E0_DRIVER_TYPE TMC2208
#define INVERT_X_DIR true
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false
#define INVERT_E0_DIR true
#if HAS_TRINAMIC_CONFIG
#if AXIS_IS_TMC(X)
#define X_CURRENT 760
#if AXIS_IS_TMC(Y)
#define X_CURRENT 760
#if AXIS_IS_TMC(Z)
#define X_CURRENT 760
#if AXIS_IS_TMC(E0)
#define X_CURRENT 900
#define MONITOR_DRIVER_STATUS
#define HYBRID_THRESHOLD
#define TMC_DEBUG
#define HYBRID_THRESHOLD
では
StealthChop2モードとSpreadCycleモードの切り替えの閾値を設定することができます
向きを間違えないようにモータードライバを差し込めば完成です
SKR V1.4は裏面を見るとGNDとか書いてるので
モータードライバのGNDと合わせるとかすると安心感あると思います
これでメニューからMove Axis
で動作チェックをすると
静かすぎて驚くこと間違いなし
もうファンの音しか聞こえません
PID制御器のチューニングをしよう(★★★)
ホットエンドの温度制御にはPID制御が使われています
せっかくOctoPrintで温度推移のログを取れるようになったので
PID制御器のチューニングをしてみましょう
ログを取りたいときだけ
設定 > Serial Connection > Serial logging
をオンにしてあとで
設定 > Logging > serial.log
をダウンロードしましょう
終わったらserial.log
を削除してSerial logging
もオフにしておきましょう
ダウンロードしたserial.log
はこんな感じになっているわけですが ↓
MATLABなりPythonなりなんなり好きなツールを使ってデータを処理するとこんな風にプロットすることができます
ここでMarlinのコード(temperature.cppのget_pid_output_hotend)を読んでみると
ホットエンドの温度制御はBang Bang制御とPID制御を切り替えていることがわかります
- 目標値より10度低い値まではBang Bang制御
- 目標値より10度低い値に達したらPID制御
という風に早く目標値に達するための工夫がなされてたんですね
デフォルトのゲインは機種ごとに決まっているみたいです
// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
// Creality Ender-3
#define DEFAULT_Kp 21.73
#define DEFAULT_Ki 1.54
#define DEFAULT_Kd 76.55
またPIDゲインのオートチューニング機能というのがあって
M303
コマンドを使うとジーグラ・ニコルス法を用いてKp,Ki,Kdを算出してくれるらしいです(参考)
150度を8回前後してゲインを算出してくれます
bias: 154 d: 100 min: 196.93 max: 203.61 Ku: 38.12 Tu: 32.30
Classic PID
Kp: 21.51 Ki: 1.29 Kd: 89.44
PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h
ゲインはもちろん自分で変更することができて
M301
コマンドで設定することができます
M301 P21.51 I1.29 D89.44
というような感じです
Configuration.hを書き換えてもいいと思います
設定を保存したいときはM500
コマンドでできます(参考)
ではPID制御器のチューニングをしてみましょう
目標値より10度低いところで切り替え制御がなされているので
一旦140度で落ち着かせてから目標値を150度に設定したときの応答で評価してみようと思います
まずはオートチューニングで算出されたゲインを使ってみると
結構オーバーシュートしてますね
Pゲインを小さくしてみます
M301 P20.5 I1.29 D89.44
オーバーシュートがかなり抑えられていい感じです
今回は150度でチューニングしてみましたが
フィラメントを使うときの温度でチューニングすると良さそうですね
この記事ではここまでにしますが
もうちょっとチューニングしてみようと思います
ちなみにベッドはデフォルトではBang Bang制御みたいです
こちらもPID制御に変更可能です
PIDゲインの変更はM304
コマンドでできます
最後に
3Dプリンタ魔改造沼はまだまだ深いです
次は何しようかなあ
デュアルエクストルーダとかやってみたいですねっ
もしできたらまた記事に残そうと思います