Help us understand the problem. What is going on with this article?

3Dプリンタ魔改造沼を楽しもう

3Dプリンタのメインボードを交換してラズパイに繋げてしまった人が
魔改造をさらに楽しむための記事です

まだメインボード交換・ラズパイ接続が終わってない方は
この記事を読んで深い沼に思いを馳せながら
前回の記事を参考に改造を完了してください

NeoPixelをつけてみよう(★☆☆)

私がものづくり施設で使ってたUPBOXという30万円の3Dプリンタだと
印刷中にNeoPixelをつけることができて綺麗だったんです

3万円のEnder 3 ProにもNeoPixelをつけてみましょう

まずはNeoPixelのテープLEDを購入します

スクリーンショット 2020-07-06 17.09.03.png

ファームウェアを書き換えよう

Githubに載っている回路図を見てみると
NeoPixel用のピンが用意されていることがわかります

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3136343839372f35663430383562312d636539372d313630362d326230312d6634376163343265326534642e6a706567.jpeg

回路図には1.24と書いてありますが
ファームウェアでNeoPixelのピンを指定するときはP1_24と書きましょう

この記事を参考にしてファームウェアを書き換えていきましょう

Configuration.h
// 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を使うか指定することができます

Configuration_adv.h
  #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テープの幅が溝より少し広いので端を切る必要があります

BA6DDDFE-D1FF-4788-9D9C-3470144D9E22.jpeg

こんな感じでパイプの溝に差し込めたらなんかおしゃれな3Dプリンタになります
本当におしゃれなのか?
個人的にはスターウォーズのライトセーバーに見える

33BD11A7-0642-4368-93FB-D3494BCB2EC3.jpeg

8218B245-73B5-40CC-8F23-5E2B57E597C8.jpeg

07785B86-005D-456C-9697-A931489F8DC8.jpeg

Gコードでは
M150 B255 R20 U150
のようにすると色の指定ができます

R = Red B = Blue U = Green

M150コマンドの詳細はこちらを見てください

モータドライバをTMC2208にして静音化しよう(★★☆)

TMC2208ってすごいんです

HTB1jeMRa.WF3KVjSZPhq6xclXXak.jpg

SpreadCycleモードとStealthChop2モードの二つを切り替えることができるようになっています

SpreadCycleモード

  • サイクル単位で高精度に電流制御を行う

StealthChop2モード

  • 非常に静かな動作モード
  • 電流変動を減らし磁気歪みによる低周波ノイズの発生を抑える
  • 高速で動かすと脱調しやすい

らしいです(参考:Trinamicのカタログキットではじめる3Dプリンタ自作入門

つまり
低速での動作時はStealthChop2モードでめっちゃ静か
高速での動作時はSpreadCycleモードで脱調防止

という風にうまく使い分けることができるんです

それではこのTMC2208を扱えるようにファームウェアを変更していきましょう

Teaching Techの動画1Teaching Techの動画2を参考にしました

Configuration.h
#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
Configuration_adv.h
#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と合わせるとかすると安心感あると思います

6665A093-AB47-41B3-B37D-C3A74C2ECD5E.jpeg

これでメニューからMove Axisで動作チェックをすると
静かすぎて驚くこと間違いなし

もうファンの音しか聞こえません

PID制御器のチューニングをしよう(★★★)

ホットエンドの温度制御にはPID制御が使われています

せっかくOctoPrintで温度推移のログを取れるようになったので
PID制御器のチューニングをしてみましょう

ログを取りたいときだけ
設定 > Serial Connection > Serial logging
をオンにしてあとで
設定 > Logging > serial.log
をダウンロードしましょう

終わったらserial.logを削除してSerial loggingもオフにしておきましょう

ダウンロードしたserial.logはこんな感じになっているわけですが ↓
スクリーンショット 2020-07-06 11.32.35.png

MATLABなりPythonなりなんなり好きなツールを使ってデータを処理するとこんな風にプロットすることができます

default.png

ここでMarlinのコード(temperature.cppのget_pid_output_hotend)を読んでみると

ホットエンドの温度制御はBang Bang制御とPID制御を切り替えていることがわかります

  • 目標値より10度低い値まではBang Bang制御
  • 目標値より10度低い値に達したらPID制御

という風に早く目標値に達するための工夫がなされてたんですね

デフォルトのゲインは機種ごとに決まっているみたいです

Configuration.h
  // 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を算出してくれるらしいです(参考

例えばM303 E0 S150 C8を実行してみると
スクリーンショット 2020-06-26 17.48.49.png

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度に設定したときの応答で評価してみようと思います

まずはオートチューニングで算出されたゲインを使ってみると

auto_0706.png

結構オーバーシュートしてますね

Pゲインを小さくしてみます

M301 P20.5 I1.29 D89.44

auto_fine.png

オーバーシュートがかなり抑えられていい感じです

今回は150度でチューニングしてみましたが
フィラメントを使うときの温度でチューニングすると良さそうですね

この記事ではここまでにしますが
もうちょっとチューニングしてみようと思います

ちなみにベッドはデフォルトではBang Bang制御みたいです
こちらもPID制御に変更可能です
PIDゲインの変更はM304コマンドでできます

最後に

3Dプリンタ魔改造沼はまだまだ深いです

次は何しようかなあ

デュアルエクストルーダとかやってみたいですねっ

もしできたらまた記事に残そうと思います

参考

kemako
料理×工学をテーマに研究してる人 朝食ロボット作ってた人
https://www.makomiyatake.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away