やりたい事
Anycubic Kossel の静音化として、モータドライバをTMC2208に変更する事を検討。検索すると大体でてくるのが、標準のモータドライバと極性が逆になっていることへの対策。
普通はプリンターのFirmwareで反転すればよいので、みなそうしている。ただ、問題は今使用している、AnycubicのAuto leveling firmwareのソースコードが公開されていない事。多分これを機にMarlinベースのFirmwareに移行するのがいいのだろうけど、面倒くさい。
TMC2208は電源投入の設定値をOTP(UART経由)領域で変更できるそうなので、おそらくこの極性とかも変更できるんじゃないかと思った。
まずは、TMC2208の書き換え方法を調査した。
準備
FYSETC TMC2208 V1.2
ずいぶん前に購入。V1.0との違いは?よく調べずに、せっかくなので新しいのを買ったはず。
FYSETC 2208 Tester
UART経由でアクセスできるとのこと。当時よくわからないが、上と同時購入していた。
FYSETC TMC2208について
https://wiki.fysetc.com/TMC2208/
を見る。まずはUARTのピンがモジュール上でつながっていないため、半田でジャンパーをショートする必要があるらしい。
一応もう少し調べてみる。なにやら、バージョンによって違いがあるようだ。
Versions | difference |
---|---|
V1.0 | The default is standalone mode,If you need UART mode,you must config by yourself. |
V1.2 | UART mode, it’s used for F6. |
ぱっと見、V1.0はStandalone、V1.2 はUART modeに見えるが、正直よくわからない。このページの下のほうのコメント(現在はコメントなくなっている)でも、回路図くれ、何が違うの?俺はうまくいっている、違ったバージョンを買ってしまった!とかかなり混乱している様子。FYSETCの人っぽい人も、今はみなV1.2にアップグレードされているよ、とか言っていて混沌とした感じ。
とりあえずちゃんと勉強しようと、本家のデータシートを見ることに。
TMC2208の勉強
ざっくり見て、General Configuration RegistersのGCONF(0x00)の3bit目がshaftで Inverse motor direction、となっていてこれで正逆を指定できそう。これのデフォルト値を書き換えられればいいはずだが、デフォルト値が特に書いていない。他のビットでは、Reset Default が OTP、となっているのはあるが、どういうことか。嫌な予感がして、5.1.1を見ると、
The OTP memory holds power up defaults for certain registers.
あ、certainだけか、という感じ。shaftのビットを変えようとすると、毎回起動後にUARTで書き換えないとダメそう。どうやら思っていたことが簡単にできそうにないのでやる気がなくなる。マイコンいれるか、Marlinに移行するかな。
一応モードの整理を続ける。
- OPTION 1: Standalone STEP/DIR Driver (Legacy Mode)
- OPTION 2: Standalone STEP/DIR Driver with OTP pre-configuration
- OPTION 3: STEP/DIR Driver with Full Diagnostics and Control
UART使うのはOPTION 2と3という事。多分OPTION 2がやりたかったこと。(3 mode of operation の説明なのに option というのはわかりにくい)
さて、起動後にUARTでshaftを書き換えるとすると、TXを束ねてUARTで1bitだけ書き換えればよいのでまだ楽そう。ただこのモードの行き来ってどうするのかと疑問に思ったところ、
The TMC22xx supports both, discrete control lines for basic mode selection and a UART based single wire interface with CRC checking. The UART interface automatically becomes enabled when correct UART data is sent. When using UART, the pin selection may be disabled by control bits.
とのことなので、そんなに意識しなくてもよさそう。まぁ、当初考えていたOTPでのモード指定ができたとしても、一回だけ書けるとはいえ、やっぱり戻したいとかなりそうなので、普通にUARTで流しこもう、と気を取り直してきたところで今日は終わり。
ShigezoneでいろんなAruduinoを買っているので、どれかにやらせるか、マイコンとか面倒なのでFPGAでやらせるか(もったいない)。