2017年9月6日水曜日

小型工作機CNC2418 その31(もう1枚 v1.1f Upgrade不可の真の原因)

緊急公開です!
ここでATmega328Pを交換して復活した”Woodpeckerモドキ”です。
もはや”モドキ”を付けない訳にはいきません!

ブートローダーを書き込んだチップ交換して
一度は、GRBL v1.1f 2017-07-17版を書込めました。
が
GRBL v1.1f 2017-08-01にUpdateしようと
Arduino IDE v1.8.3でやると
また同じエラーがでて、できないのです。
何で~~と叫びたくなる。
*****
Arduino:1.8.3 (Windows 10), ボード:"Arduino Nano, ATmega328"

~中略~

         Using Port                    : COM3
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x8c
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x8e
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x0d
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x95
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xd5
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x46
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x48
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x48
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x0e
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xbc

avrdude done.  Thank you.

スケッチの書き込み中にエラーが発生しました
*****
一度は書き込みに成功しているこのWoodpecker。
ブートローダーも入れているのに同じエラー!
これはおかしい!
一度だけ書き込まれたということは、
ブートローダーが起動していないとしか考えられません。
ここにブートローダー起動の詳しい説明があります。
USBからUploadのタイミングでDTR信号が1から0になり
それをC6で微分してリセット信号を作っているわけです。
Arduinoのブートローダーは、リセットがかかると、
まず、スケッチ(hexですが)が来ていないか見るそうです。
”一定時間が経過すると”内部のArduinoソフトを起動します。
が、DTRによるRESET信号が出ないと
”直ぐに”内部Arduinoソフトが起動していると考えられます。

一回目は、ブートローダーしか入っていなく
電源ONでそれが起動して書込待機状態なので
GRBL v1.1をうまく書き込めたのでしょう。

以上の推察からUSBから書き込めない原因は、
DTR~RESETの部品かパターンに違いありません。
となると
このR1かC6が怪しいです。
秋月電子のLCRメーター DE-5000で測ると
C6:0.09728μF
OKです。
R1
えっ! 2.281KΩ
普通のテスターで測っても同じくらい
怪しいですね~
R1を外します。
外したものは10KΩありました。
RESET端子の内部インピーダンスはえらく低いんですね~
でもこれは原因ではないです。
チップはもう付けることできないので
この10KΩを裏面に付けます。
左側のダイオードは以前付けた保護用。
(追記2017.9.7:ここで書き込むもエラーでました)
残るは、C6不良か?
まさかのパターンミスか?

CH340Gの13ピン(DTR)を浮かせて
C6も削除します。
何も部品がついていない13ピンのパターンは、
抵抗値無限大ですね~、無罪でしょう。
13ピンとC6の片側ランドに0.1μFを付けます。
新品はこのディスクリード品しかないのです。
(追記2017.9.7:取付後の測定値:0.099μF)
では、書き込んでみましょう!
Arduino IDE v1.8.3を起動して
設定を確認します。
いざ書き込み!
成功しました!
ということは、
C6に関する不良であることは間違いないようです。
C6はLCRメーターでは悪くなかったのです。
取り外したチップ部品はどこかに飛んで行って逃亡です。

それにしてもお騒がせのボードです。
国内にも海外にも書き込めない方がいらっしゃるので
単品不良ではなく傾向的に何かあるのでしょう。
C6のボンドが付き過ぎてハンダ不良とか
チップ端子の不良とか
でしょうかね?
意外とC6を半田付けし直すだけで治ったのかも?

こんな不良というかモドキ品があるんですね~
製造者も1回の書込で成功するので気づくはずもなく...

一応、Woodpeckerモドキさんの写真です。
チップ部品が全て表側についています。
マーティーが最初に購入したDZT's storeの
CNC2418のオリジナルのものとは違います。

2017年9月2日土曜日

小型工作機CNC2418 その30(GRBL v1.1f Laser Mode)

GRBL v1.1で新しく追加された
レーザーモードを試してみます。

まずは、GitHubのv1.1レーザーモードの解説を読みます。
 Grbl v1.1 Laser Mode
Sonny Jeon edited this page on 24 Feb · 10 revisions

まずは、Google先生にざっと翻訳してもらいます。
ふむふむ...そのままでも結構意味わかりますね~
便利な時代になりました。
逆に英語は上達しませんが...

既にこの時わかったことでありますが
衝撃的な事が書いてありました。
レーザーモードにすると
G0の移動命令の時にレーザーOFF
G1・G2・G3の切削命令の時にレーザーON
を自動でやってくれるというのです。
早く読んでいれば
この前のマスク作成でGcodeの手動編集なんてしなくてよかったのです!

で要約しますと
*****
通常Modeやv0.9までは
M3、M4、M5でレーザーをON/OFFしたり
途中でSxxxでパワーを変えると、
そこでGRBLが一瞬停止して変更を許可してから続行されるので、
焦げ目がつき不均一になる。

v1.1のレーザーモードで
・G1/G2/G3命令の時だけレーザー照射
 G0の移動命令ではレーザー照射しない。
・可能な限り不要な停止を防ぎ連続的に動く機能。
・速度に応じて自動パワー調整するダイナミックパワーモード
が追加された。

レーザーモードのON/OFFは、
・$32=1:レーザーモード有効
・$32=0:レーザーモード無効
通常のスピンドルを使用する場合は
必ず、$32=0で無効にしなければならない。

レーザーモード無効の時は
M3:スピンドル時計回りでON
M4:スピンドルを反時計回りでON
ですが
レーザーモード有効時は
M3とM4で動作が異なる。
M3:コンスタント・レーザーパワー・モード
・レーザーパワーはFeed速度に関係なく一定

M4:ダイナミック・レーザーパワー・モード
・Feed速度や加速に応じてレーザーパワーが自動制御される。
・マシンが動いている時のみレーザー照射。止まるとオフ。
*****
てなところでしょうか。

マーティーのは、GRBL v1.1f 2017-08-01版ですが
前回、ソースを少しいじってインストールして
PWM周波数は、7.8KHzにしています。
それでは、CNC2418で
GRBL v1.1fのレーザーモードを試用します。

Fusion360でテストパターンを作ります。
厚みは、0.01mmにしています。
星の曲がり角や円の大きさでスピードと変わるのかな?
という疑問に答えてくれるかと、この図形を作ってみました。
上中の細いスリット幅:0.1mmにしたので
工具は、0.05mmのフラットエンドミルを作り
擬似的にレーザーとしています。
[2D]-[輪郭]を使います。
Z軸は動かない方がいいので
全部「0」
セーフ距離も「0」
セーフ距離:0 だと警告が出ますが、無視して「はい」。
Candle v1.1.7に読み込みます。
紙をセットします
レーザードライブボードは宙ぶらりんです(^^ゞ
紙は厚み0.17mm(カレンダー紙)
これで色々やっていたら
わけがわからなくなったので(´-﹏-`;)
厚紙(0.8mm)のテスト結果を前に持ってきました。

【LaserMode:OFF】GRBL 0.9jと同じ
S60 F1000
移動時もレーザー照射しているので当然こうなります。
星の角でパワーが集中しています。
左のRが大きい所、真中の長いスリットの中央部は、
Feedが加速しているので薄めです。
逆に短い距離ではF1000に達していないということになりますね~?
レーザーモードにするため
Consoleから”$32=1”を送信
【LaserMode:ON】
M3:Constant Laser Power Mode
S70 F1000
上と同じGcodeです。
G1・G2・G3の切削命令の時だけレーザー照射されています。
これは、便利になりました。
だからFusion360のレーザーモードは未完成なのかな?
LaserMode:OFFよりわずかにパワーが下がるようです。
S60とS70が同程度になりました。
パワーが一定なので焦げ方は上とほぼ同じ。
直線用なのかもしれません。
【LaserMode:ON】
M4:Dynamic Laser Power Mode
S300 F1000
同じS値に対してかなりパワーが低くなります。
M3 Mode S70 と M4 Mode S300が同程度なのです。
パワーが制御されているのがわかります。
星の角の焦げは少なくなっています。
左のRが大きい所、真中の長いスリットの中央部も、割りと均一な焦げ方です。
次は動画で
$32=0のLaserMode:OFFです。
最初の方にカレンダー紙(0.17mm厚)撮ったものです。
当然、G0でもG1命令でもレーザー照射しっぱなし
スポット径も一定です。
この動画は、
【LaserMode:ON】
M3:Constant Laser Power Mode
S40 F1000
G0命令の移動時は、レーザーオフ
G1・G2・G3命令の時だけレーザーオンしています。
途中で誤動作で照射していない所があります、バグかな?
そしてこの動画は
【LaserMode:ON】
M4:Dynamic Laser Power Mode
S200 F1000
レーザーON/OFFは上と同じですが
パワーがFeed速度に連動してダイナミックに変化しているのがわかります。
ちょっと思いついて別の実験です。
上から写真立てのガラスを乗せてみました。
青色レーザーはほとんど透過するだろうから
空気に触れない分、焦げ部分が広がらず
綺麗に出来そうな気がしたのです。
カレンダー紙(0.17mm厚)です。
ガラスあり
【LaserMode:ON】
M4:Dynamic Laser Power Mode
S100、F300
上と同条件のガラスなし
結構なパワーがガラスに吸収されていますね~
ちょっとパワーを上げます。
ガラスあり
【LaserMode:ON】
M4:Dynamic Laser Power Mode
S150、F300
かなり綺麗です。
中上の0.1mmのスリットも輪郭と中の島がわかります。
上のは、
このガラスなし、S150、F500と同じくらいですが
特に細いスリット部は、延焼しまくっています。
思い付きですが予想的中です。
が!
ガラスには灰が付く程度だろうと思っていたら
結構なパワーがガラスにも吸収され
ガラスには灰がつくだけでなく
一部溶けてエッチング状態になってしまいました。
細い所の延焼を防ぐガラス効果は良いのですが、
これでは使い捨てですね~
上:紙、下:ガラス(洗浄前)
ガラス板を綺麗に洗浄して
カットした紙と並べました(下)
触ってザラザラ感がわかる程エッチングされています。
擦りガラスよりもザラザラです。
見えにくいですが、上側の薄いのがその部分です。
右の4つの白い丸は、マイクロスコープのLED光。
下はベニヤ板などの木にすると火災の原因になりかねないので
キッチンにあったアルミ箔(12μm厚)を敷いてみました。
これは、薄い紙(0.17mm)で貫通カットした場合です。
右下に薄~く星の輪郭が見えます。
Laser Mode:ON、M4 Mode
S100、F300です。
右上は、S150、F500
意外といけますね~
これは、今後、正式下敷きとして採用です!
最後に教訓です。
【LaserMode:ON】M3 Modeでも
不要なレーザー照射がでた例です。
上の方に向かって変な線が!
この上に伸びる線の原因です。
Fusion360でGcode吐き出す時に
[useG28]で[いいえ]にしておくのを忘れておりました。
これを[はい]にすると
最後に
G28命令が入ります。

最後にマシン座標0位置(Machine Cordinate:0位置=
電源orRESET時のマシンゼロ位置)に戻るんです。
下の欄のゼロ位置に戻るのです。
しかし、レーザーモードなのに
ホーミングサイクル移動でレーザー照射しています。
[useG28]は、必ず[いいえ]にしておかないと怖いです。
Gcodeを見ると(上の上)
Fusion360が吐出したGcodeには
最後にM30:プログラム終了はありますが
M5:スピンドル/レーザー停止 がないのです。
通常のLaser Mode OFFでは、
M30でスピンドル/レーザーは停止します。
が、最後にM5がないので(今まで気づかなかった)
レーザーモード $32=1のままにしておくと
終了後、ジョグで動かしただけでも
最後のS設定値でレーザーが照射されます。
大変危険!!!
最後に"M5"を追加するか
終了後に$32=0するのを忘れないようにしないといけません。

そこで
Gcode内に$32=1と$32=0を入れてみました。
$32=1 --- OK になっています。
移動時にレーザーOFFになっています。
$32=0 は、
最後の"M30"プログラム終了の直前に入れると
うまくいきました。
これより前に記述するとエラーで止まります。
その前に"M5"の追加も忘れずに。

終了後、"$$"コマンドで設定を見ると
$32=0に戻っています。
Gcodeプログラム内に$32が記述できることがわかったので
マーティーが追加するのを忘れなければ(^^ゞ ・・・安心です。
GRBL v1.1のレーザーモードは、
なかなか便利であることがわかりました。

小型工作機CNC2418 その29(Probe-A5端子の変更)

この前のPWM周波数の変更の時に
cpu_map.hを眺めていたら
probeの入力ピン設定の項目が目に止まりました。
*****
  // Define probe switch input pin.
  #define PROBE_DDR       DDRC
  #define PROBE_PIN       PINC
  #define PROBE_PORT      PORTC
  #define PROBE_BIT       5  // Uno Analog Pin 5
*****

A5端子が壊れた時からチップを交換する準備を色々やってきたわけですが
A5から別の空き端子に変更できないかな?
ふと思い付きました。

GitHubのGRBL wikiのConnecting Grbl に
ピンアサインの写真がありました。
A4:not used / reserved
が空いているようです。
ついでに
ここからGRBLの最新版を見ます。
左の[Branch master]から[Tags]を見ると
現在のmaterのバージョンがわかります。
v1.1f 20170801ってのがReleaseされています。
リリース文はここです。
現在、マーティーのは、v1.1f 20170717版です。
拡大。
20170731ってのもありますね~
意外と頻繁にUpdateされているんですね~
右側の緑の[Clone or Download]で「grbl-master.zip」をダウンロードします。
ファイル名は変えられないので
そのまま「grbl-master.zip」の名前でダウンロードします。
いつも同じフォルダ名に解凍されるので
以前に解凍した古い[grbl-master]フォルダがあれば
削除していることを確認して解凍します。
で解凍すると[grbl-master]フォルダができます。
これからソースを変更するので
フォルダ名を「grbl_11f_20170801mod」に変更します。
中の「grbl」フォルダ名も「grbl_11f_20170801mod」に変更します。
これがArduino IDEにインストールした時の名称になります。

改めて「cpu_map.h」を眺めます。
所が!
空いているはずのA4ピンが使われていま~す。
COOLANT_MISTになっています。
上の写真では、
A3:COOLANT_MIST
A4:not used / reserved
なのに
どこかで変更され
COOLANT_FLOOD:A3
が追加され
COOLANT_MIST:A3→A4
に変わったようです。
*****
  // Define flood and mist coolant enable output pins.
  #define COOLANT_FLOOD_DDR   DDRC
  #define COOLANT_FLOOD_PORT  PORTC
  #define COOLANT_FLOOD_BIT   3  // Uno Analog Pin 3
  #define COOLANT_MIST_DDR   DDRC
  #define COOLANT_MIST_PORT  PORTC
  #define COOLANT_MIST_BIT   4  // Uno Analog Pin 4
*****

空きがないので
使用しないCOOLANT_MISTをA5に割り当て
PROBEにA4を割り当てることにします。
(MISTとFLOODの違いがわからんし)
で、cpu_map.hに黄色部を追記します。
「A5が壊れたボード」専用ということになります。
*****
  // Define flood and mist coolant enable output pins.
  #define COOLANT_FLOOD_DDR   DDRC
  #define COOLANT_FLOOD_PORT  PORTC
  #define COOLANT_FLOOD_BIT   3  // Uno Analog Pin 3
  #define COOLANT_MIST_DDR   DDRC
  #define COOLANT_MIST_PORT  PORTC
  // #define COOLANT_MIST_BIT   4  // Uno Analog Pin 4
  #define COOLANT_MIST_BIT   5  // Uno Analog Pin 5

~中略~

  // Define probe switch input pin.
  #define PROBE_DDR       DDRC
  #define PROBE_PIN       PINC
  #define PROBE_PORT      PORTC
  // #define PROBE_BIT       5  // Uno Analog Pin 5

  #define PROBE_BIT       4  // Uno Analog Pin 4
*****

マーティー仕様でPWM周波数の変更もしておきます。
この為です。
元の#defineの前に"// "を追記
(Used in v0.9)の#defineの前の"// "を削除します。
黄色部の所です。
*****
  // #define SPINDLE_TCCRB_INIT_MASK   (1<<CS20)               // Disable prescaler -> 62.5kHz
   #define SPINDLE_TCCRB_INIT_MASK   (1<<CS21)               // 1/8 prescaler -> 7.8kHz (Used in v0.9)
  // #define SPINDLE_TCCRB_INIT_MASK   ((1<<CS21) | (1<<CS20)) // 1/32 prescaler -> 1.96kHz
  // #define SPINDLE_TCCRB_INIT_MASK      (1<<CS22)               // 1/64 prescaler -> 0.98kHz (J-tech laser)
*****

それと
"$I"コマンドで何を変更しているか表示するようにします。
grbl.h の
黄色部を追記します。
*****
// Grbl versioning system
#define GRBL_VERSION "1.1f"
#define GRBL_VERSION_BUILD "20170801_PWM7.8KHz_A5toA4"
*****

既にArduino IDEに別のGRBLをインストールしている場合は、
インストールしているGRBLのスケッチが
"C:\Users\(User Name)\Documents\Arduino\libraries"
にコピーされているので
そのフォルダを削除してから(この場合[grbl]フォルダ)
Arduino IDE v1.8.3を起動してアンインストールしておきます。
残念ながら、フォルダ名を変えても
複数のGRBLをインストールすることはできないようです。
全て最後にインストールしたものになってしまいます。
Arduino IDE 1.8.3を起動して
[スケッチ]-[ライブラリをインクルード]
-[.ZIP形式ライブラリをインストール...]に進み
先ほどの[grbl_11f_20170801mod]フォルダ内の
「grbl_11f_20170801mod」を選択します。
Arduino IDEから[ファイル]-[スケッチの例]から
▼にカーソルを置いて一番下まで行くと
[grbl_11f_20170801mod]ができています。
インストールしたGRBLのスケッチが
"C:\Users\(User Name)\Documents\Arduino\libraries"
にコピーされています。
[ファイル]-[スケッチ例]-[grbl_11f_20170801mod]から
[grblUpload]を開きます。
A5端子が壊れているWoodpeckerをUSBで接続します。
設定を確認して
[マイコンボードに書き込む]します。
Arduino IDEを終了し
WoodpeckerをRESETして完了です。

Candle v1.1.7を起動して
Consoleから"$I"すると
[VER:1.1f.20170801_PWM7.8KHz_A5toA4]
と表示してくれました。
プローブ端子を確認するため
ここで作って、ここで改良した非金属用プローブを
スピンドルに装着します。
ソースでA5とA4の機能を入れ替えたので
正規のA5端子ではなくA4端子に繋ぎます。
ゼロ点調整の

ボタンを押すと

このコマンドが出ます。
まず、F100で降りてきて接触すると
一旦そこから1mm上がり
今度は、F10でジワジワと降りてきて
接触(Probe SWがON)すると止まります。
動画で
Probe端子と非金属プローブの確認が終わりました。
これでまた、ゼロ点調整とHeightMap機能の復活です。
ATmega328Pを交換せずに済みました。
めでたしめでたし。