見出し画像

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でコントロールしているんでしょうかね?


で、何なんでしょうか?この木綿豆腐痕は???

画像2

木綿豆腐の縦溝の間隔ですが 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」に成ります。

そこら辺の事は今回いじっている間に分かったので、次回以降に。


この記事が気に入ったらサポートをしてみませんか?