ANYCUBIC MEGA-S 静音ステップモータードライバーへ交換の巻② Serial接続をしてみる(木綿豆腐感消えないか実験)
前回、静音ステップモータードライバーに交換をしたのですが、今回は Serial接続に Tryしてみました。
設定を色々と変更出来る様になるので、印刷表面の木綿豆腐感のある仕上がりが改善出来ればと思っています。
Serial接続を行うと下記の機能を使用出来る様になります。
TMC2208/2209共通
・電流値の設定
・256,128, 64, 32, 16, 8, 4, 2, FULLSTEP のマイクロステップ設定
・StealthChop2™モード、SpreadCycle™モードの切り替え 及び、速度の閾値を設定してHybridでの使用。
・MicroPlyer™。入力されるパルスを補完して256Step相当の滑らかな動作にする機能。
・過剰な発熱を感知して不具合が出る前に電流を下げる機能
・他?
TMC2209のみ
・StallGuard™を使用した SensorLess Homing
・CoolStep™
・他?
SpreadCycleモードに興味を持っている人は多いかと思いますが、もともと SpreadCycleと StealthChopは速度によって切り替えて使用する事が想定されているようです。下の図は TMC2208のデータシート内の図をもってきました。
「各モードを簡単に説明すると」
StealthChop = 静音性を重視するモード。特徴は低速域での静音性とトルクの両立。欠点は高速域では逆起電力が云々でトルクが出ないこと。
SpreadCycle =高速域で静音性とトルクを両立しようとしたモード。しかし静音3Dプリンターとしては音が出過ぎる。低速域では音が出るデメリットだけが発生する事に成る。
なので Hybridでの使用が想定されているのですね。ファームウェアは下図の辺りで設定が出来るようになっていますが、かなりの高速域でない限り SpreadCycleは使用しない設定となっています。
低速域 < 100mm/S < 高速域
defaultでは StealthChopのみの使用となっています。Hybridを使用するには2859行目のコメントアウトを外して有効にする必要があります。
普通の3Dプリンターでは StealthChopモードのみの使用で十分という事が言えると思います。
実際にSpreadCycleを使用してみました。
動画で音の確認をどうぞ。
12864LCDがあると印刷中でもモードの変更や電流の調整も出来てしまったりします。表示上OFFが SpreadCycleで ONが StealthChopです。
Microstepというのは、本来のステップモーターの1ステップを Fullstepと呼びFullstep毎にコントロールするのが基本ですが、微小な動きを実現する為にコントローラーが電流を制御して中途半端な位置で停止出来るようにするのが Microstepです。 A4988は 1/16が採用されていますが、TMC22xxでは 1/256stepが使用できるようになっています。それなら256に設定して滑らかに動かそうと思う所ですが、実際はパルス数が多くなり過ぎてマイコンの処理能力が間に合わなくなるのか? 64microstep以上では状況によりMarlinがハングルります。(経験談)
1/16Microstepなどの低い?解像度に設定している場合の移動は1/256stepに比してカクカク動く事になりますが、補完を行い256stepの様にに滑らかに動くようにするのが INTERPOLATE(MicroPlyer™)機能です。
ファームウェアでの設定はこの辺りです。
各軸が実際どの位のSTEP数で動いているか考えたことって有りますか? XY軸だと1mmの移動で80ステップの設定がデフォルトですね。これは1/16microstep込みのステップ数なので、実際のモーターのステップは 80/16= 5stepにしか成りません。1step=0.2mmです。これでは3Dプリンターが成立しないのでMicrostepは3Dプリンターにとって欠かせない機能とう事が出来ます。
ではそれぞれの機能が印刷品質に与える影響はどうか?という興味があると思いますが、色々な機能を色々な組み合わせで試すこと3日間。こ捏ね繰り回した結果ですが、
残念ながら印刷品質には「気のせい」を超える影響はありませんでした。
Microstepも INTERPOLATEも 電流値も印刷に変化有りません。技術的な興味を満たす以外に利は無かったので細かい事は今回書きません。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ADAPTIVE_STEP_SMOOTHING(これはMarlinの機能)とかもあるのですが、これも印刷品質にこれといった変化は出ませんでした。
あとは [M122]でTMCの接続状態のレポートとか見れたり、、(ファームウェアの調整が必要。)
>>> m122
SENDING:M122
Y E
Enabled true true
Set current 800 700
RMS current 795 673
MAX current 1121 949
Run current 25/31 21/31
Hold current 12/31 10/31
CS actual 12/31 10/31
PWM scale
vsense 1=.18 1=.18
stealthChop true true
msteps 32 32
interp true true
tstep max max
PWM thresh.
[mm/s]
OT prewarn false false
pwm scale sum 27 45
pwm scale auto 1 3
pwm offset auto 66 125
pwm grad auto 27 28
off time 3 3
blank time 24 24
hysteresis
-end -1 -1
-start 1 1
Stallguard thrs
uStep count 332 68
DRVSTATUS Y E
sg_result
stst
olb
ola
s2gb
s2ga
otpw
ot
157C
150C
143C
120C
s2vsa
s2vsb
Driver registers:
Y 0xC0:0C:00:00
E 0xC0:0A:00:00
Testing Y connection... OK
Testing E connection... OK
TMCの機能では無いですが Serial設定したピンがちゃんと設定されているかとかの確認は[M43]で確認が出来たりします。(ファムウェアの調整が必要)
>>> M43
SENDING:M43
PIN: 0 Port: E0 RXD0 protected
PIN: 1 Port: E1 TXD0 protected
PIN: 2 Port: E4 X_MAX_PIN protected
. Z_MIN_PROBE_PIN protected
PIN: 3 Port: E5 X_MIN_PIN protected
. X_STOP_PIN protected
PIN: 4 Port: G5 SERVO3_PIN Input = 0 TIMER0B PWM: 128 WGM: 3 COM0B: 3 CS: 3 TCCR0A: 3 TCCR0B: 3 TIMSK0: 5 compare interrupt enabled overflow interrupt enabled
PIN: 5 Port: E3 SERVO2_PIN Input = 0 TIMER3A PWM: -25536 WGM: 0 COM3A: 0 CS: 2 TCCR3A: 0 TCCR3B: 2 TIMSK3: 2 non-standard PWM mode compare interrupt enabled
PIN: 6 Port: H3 SERVO1_PIN Input = 0 TIMER4A PWM: 0 WGM: 1 COM4A: 1 CS: 3 TCCR4A: 1 TCCR4B: 3 TIMSK4: 0
PIN: 7 Port: H4 CONTROLLER_FAN_PIN protected
. FAN1_PIN protected
PIN: 8 Port: H5 HEATER_BED_PIN protected
. RAMPS_D8_PIN protected
PIN: 9 Port: H6 FAN_PIN protected
. RAMPS_D9_PIN protected
PIN: 10 Port: B4 HEATER_0_PIN protected
. RAMPS_D10_PIN protected
PIN: 11 Port: B5 SERVO0_PIN Output = 0 TIMER1A PWM: 2000 WGM: 4 COM1A: 0 CS: 2 TCCR1A: 0 TCCR1B: 10 TIMSK1: 2 non-standard PWM mode compare interrupt enabled
PIN: 12 Port: B6 <unused/unknown> Input = 0 TIMER1B PWM: 0 WGM: 4 COM1B: 0 CS: 2 TCCR1A: 0 TCCR1B: 10 TIMSK1: 2 non-standard PWM mode
PIN: 13 Port: B7 LED_PIN Input = 0 TIMER0A PWM: 0 WGM: 3 COM0A: 3 CS: 3 TCCR0A: 3 TCCR0B: 3 TIMSK0: 5 overflow interrupt enabled
. TIMER1C is also tied to this pin TIMER1C PWM: 0 WGM: 4 COM1C: 0 CS: 2 TCCR1A: 0 TCCR1B: 10 TIMSK1: 2 non-standard PWM mode
PIN: 14 Port: J1 <unused/unknown> Input = 1
PIN: 15 Port: J0 <unused/unknown> Input = 1
PIN: 16 Port: H1 LCD_PINS_RS Output = 0
PIN: 17 Port: H0 LCD_PINS_ENABLE Output = 0
PIN: 18 Port: D3 <unused/unknown> Input = 1
PIN: 19 Port: D2 <unused/unknown> Input = 1
PIN: 20 Port: D1 <unused/unknown> Input = 1
PIN: 21 Port: D0 <unused/unknown> Input = 1
PIN: 22 Port: A0 <unused/unknown> Input = 0
PIN: 23 Port: A1 LCD_PINS_D4 Output = 1
PIN: 24 Port: A2 E0_ENABLE_PIN protected
PIN: 25 Port: A3 LCD_PINS_D5 Input = 1
PIN: 26 Port: A4 E0_STEP_PIN protected
PIN: 27 Port: A5 LCD_PINS_D6 Input = 1
PIN: 28 Port: A6 E0_DIR_PIN protected
PIN: 29 Port: A7 BTN_ENC_EN Input = 1
. LCD_PINS_D7 Input = 1
PIN: 30 Port: C7 E1_ENABLE_PIN protected
. Z2_ENABLE_PIN protected
PIN: 31 Port: C6 BTN_EN1 Input = 1
PIN: 32 Port: C5 <unused/unknown> Input = 0
PIN: 33 Port: C4 BTN_EN2 Input = 1
PIN: 34 Port: C3 E1_DIR_PIN protected
. Z2_DIR_PIN protected
PIN: 35 Port: C2 BTN_ENC Input = 1
PIN: 36 Port: C1 E1_STEP_PIN protected
. Z2_STEP_PIN protected
PIN: 37 Port: C0 BEEPER_PIN Output = 0
PIN: 38 Port: D7 X_ENABLE_PIN protected
PIN: 39 Port: G2 <unused/unknown> Input = 0
PIN: 40 Port: G1 E_MUX0_PIN Input = 0
PIN: 41 Port: G0 KILL_PIN Input = 1
PIN: 42 Port: L7 E_MUX1_PIN protected
. Y_MIN_PIN protected
. Y_STOP_PIN protected
PIN: 43 Port: L6 <unused/unknown> Input = 0
PIN: 44 Port: L5 E_MUX2_PIN protected
. E0_AUTO_FAN_PIN protected
. E1_CS_PIN protected
. FAN2_PIN protected
PIN: 45 Port: L4 <unused/unknown> Input = 0 TIMER5B PWM: 0 WGM: 1 COM5B: 1 CS: 3 TCCR5A: 1 TCCR5B: 3 TIMSK5: 0
PIN: 46 Port: L3 Z_STEP_PIN protected
PIN: 47 Port: L2 <unused/unknown> Input = 0
PIN: 48 Port: L1 Z_DIR_PIN protected
PIN: 49 Port: L0 SD_DETECT_PIN Input = 0
PIN: 50 Port: B3 AVR_MISO_PIN Input = 0
PIN: 51 Port: B2 AVR_MOSI_PIN Output = 1
. DOGLCD_MOSI Output = 1
PIN: 52 Port: B1 AVR_SCK_PIN Output = 0
. DOGLCD_SCK Output = 0
PIN: 53 Port: B0 AVR_SS_PIN Output = 1
. SDSS Output = 1
PIN: 54 Port: F0 (A 0) X_STEP_PIN protected
PIN: 55 Port: F1 (A 1) X_DIR_PIN protected
PIN: 56 Port: F2 (A 2) Y_ENABLE_PIN protected
PIN: 57 Port: F3 (A 3) <unused/unknown> Analog in = 439 Input = 0
PIN: 58 Port: F4 (A 4) <unused/unknown> Analog in = 0 Input = 0
PIN: 59 Port: F5 (A 5) FILWIDTH_PIN Analog in = 80
PIN: 60 Port: F6 (A 6) Y_STEP_PIN protected
PIN: 61 Port: F7 (A 7) Y_DIR_PIN protected
PIN: 62 Port: K0 (A 8) Z_ENABLE_PIN protected
PIN: 63 Port: K1 (A 9) <unused/unknown> Analog in = 707 Input = 1
PIN: 64 Port: K2 (A10) <unused/unknown> Analog in = 731 Input = 1
PIN: 65 Port: K3 (A11) <unused/unknown> Analog in = 634 Input = 1
PIN: 66 Port: K4 (A12) FIL_RUNOUT_PIN Input = 0
. TEMP_0_CS_PIN Input = 0
PIN: 67 Port: K5 (A13) TEMP_0_PIN protected
PIN: 68 Port: K6 (A14) TEMP_BED_PIN protected
PIN: 69 Port: K7 (A15) TEMP_1_PIN protected
. Z_MIN_PIN protected
. Z_STOP_PIN protected
PIN: 70 Port: G4 (A16) <unused/unknown> Input = 0
PIN: 71 Port: G3 (A17) <unused/unknown> Input = 0
PIN: 72 Port: J2 (A18) <unused/unknown> Input = 0
PIN: 73 Port: J3 (A19) <unused/unknown> Input = 0
PIN: 74 Port: J7 (A20) <unused/unknown> Input = 0
PIN: 75 Port: J4 (A21) <unused/unknown> Input = 0
PIN: 76 Port: J5 (A22) <unused/unknown> Input = 0
PIN: 77 Port: J6 (A23) <unused/unknown> Input = 0
PIN: 78 Port: E2 (A24) <unused/unknown> Input = 0
PIN: 79 Port: E6 (A25) <unused/unknown> Input = 1
PIN: 80 Port: E7 (A26) <unused/unknown> Input = 0 TIMER0A PWM: 0 WGM: 3 COM0A: 3 CS: 3 TCCR0A: 3 TCCR0B: 3 TIMSK0: 5 overflow interrupt enabled
PIN: 81 Port: D4 (A27) <unused/unknown> Input = 0 TIMER0B PWM: 128 WGM: 3 COM0B: 3 CS: 3 TCCR0A: 3 TCCR0B: 3 TIMSK0: 5 compare interrupt enabled overflow interrupt enabled
PIN: 82 Port: D5 (A28) <unused/unknown> Input = 0 TIMER5A PWM: 0 WGM: 1 COM5A: 1 CS: 3 TCCR5A: 1 TCCR5B: 3 TIMSK5: 0
PIN: 83 Port: D6 (A29) <unused/unknown> Input = 0
PIN: 84 Port: H2 (A30) <unused/unknown> Input = 0
実はこれを見て Timer/Counterでパルスをコントロールしていない事に気が付きました。マイコン違いでも同じようなコードが使えるようにCPUでコントロールしているんでしょうかね?
で、何なんでしょうか?この木綿豆腐痕は???
木綿豆腐の縦溝の間隔ですが 30mm/sの印刷速度で 3mmの中に4本か4mmの中に5本位発生するので0.75mm~0.8mm毎、30/0.75 =40Hz~30/0.8=37.5Hzなので電源ノイズなのかな?とも思いましたが、印刷速度を変えても縞模様の間隔は変わらなかったので周波数の問題ではないようです。
STEP数毎の問題なのかな?という所ですが、Microstepを変更しても縦溝の間隔が変わりません。モーターの実ステップ毎の問題?という事で計算すると、約4ステップ毎(0.8mm/(1mm/80step*16microstep))に何か発生しているのかもしれません。
E軸の検討もしましたが、印刷のG-CODEを見ると
G1 X122.925 Y90.524 E3144.51058
G1 X108.111 Y90.524 E3144.79696
こんな感じで X軸14.814mmの移動に対してE軸は 0.28638mmの押し出しがされていました。 1mmの印刷距離で0.0193mmの押し出しをしているので、StepにするとX軸1mm当たり7.92600243step(410*0.0193mm)、実stepにすると 0.495375152step(410*0.0193mm/16) E軸が動いているようですが、0.75~0.8mmに関連する数字は見当たりませんでした。
X軸の1mm当たり80stepに比べてE軸の解像度がだいぶ低いので、試しにMicrostepを振りましたが縦溝の間隔に変化は出ませんでした。また吐出量を振っても間隔に変化が出かった為、E軸のStep数とは関係が無いようです。
あとはベルトの歯の間隔は2mmだし、他に思い当たる節はありません
X軸 4Fullstep毎説が可能性が高いですが、ステップモーターには詳しくないので、もう分らないので諦めます。
という、「骨折り損だった」という記事になりました。
。
。
。
。
あと、MEGA-S(TITANエクストルーダー)のE軸のステップ数って記事を書く人によって違う問題ってありますよね。 384stepだったり410step前後だったり。
正解は「384stepの設定で指示通りの送り出しをしない状態は 何かが変」になります。ひどい言い方をすれば「製品がxxxx」に成ります。
そこら辺の事は今回いじっている間に分かったので、次回以降に。