2015. 8.17 走行距離 68,500km ML4  Auto Tool Zero
バイクの方は、距離が伸びませんね〜、でも、たまに乗りたくなるので、手放せません。
話代わって、ML4、オプションは、MACHの機能である、 Auto Tool Zero、これは、是非やりたかった。 あるお方のブログをみて、そこのmaboさんに教わりました。
感謝 感謝です。



構  成
1、チャタリングの対策
2、バラックで実験
3、マッハの設定
4、プリセッター
5、作業を終えて

  2016/2/7 追記


1、チャタリングの対策

 チャタリングをネットで調べる、ザクザクと出てきます。 ↓
http://www.marutsu.co.jp/pc/static/large_order/1405_311_ph
このスイッチの小刻みな開閉というやつが、デジタルICの誤作動になるらしい、そこで、簡単そうな対策を手持ちの本で調べると、、、
あったね〜、CとRを組み合わせる。 前記のHPでは、スイッチにより異なるけど、数100μsec〜数10msec程度なのだそうです。 この間をじんわりと電圧を制御すればいいようです。
時定数といって、T=C×R という簡単式です。








写真は、没にしたので縮小。 理由は、この下側にある。 見たかったら、クリックしてください拡大します。
こういった例もあります。参考程度です。
コンデンサ 82pF、抵抗 2kΩ
時定数は、T=0.082μF×2kΩ なので、164μsec
某所の調べでは、某製品のコンデンサ抵抗は、コンデンサは、0.017μF、抵抗は、1.5kΩ ということは、
150μsec








2、バラックで実験
計算をして、目安ができたので、実験です。

発光LEDで、通電状況を目視できるようにしました。
発光側の電源は、DC24Vをつかいましたが、接触時にスパークが大きく感じたので、本番は、DC5Vにした。



実験をしてみて分かりましたが、誤差がありました。 そこで、SECさんに聞いてみると、チャタリングがあっても、支障ないとのことでしたので、
C・Rは、外しました。
そこで、また実験、結果は、C・Rを外しても、誤差がありました。 そこで、その誤差の分を増すことにしました。 誤差は、0.05mmほどの感じでした。


シンプルな左記の方法で行くことにした。
Ie=25mA これなら、問題なし。

DC5VはSEC基板の入力端子にセットされている端子からです。



    3、マッハの設定
先達者の方々から教わりました。
http://mabo52.sakura.ne.jp/index.php?c=7-6
かいつまんで言うと
1、Config−Port and Pine でポートとピンにそれぞれ、端子の番号を設定
2、Diagnostic(Alt 7)の画面で、Digitizeの四角がグリーンの点灯すれば、OK



3、Operator−Edit Button Scriptをクリック、Auto Tool Zero の四角が点滅します  ので、それをクリックして、VBの書き込みをする画面が現れるので、下から、コピペします。
CurrentFeed = GetOemDRO(818)
DoSpinStop()
ZMove = 2.00 'Total lenght of Probe to move before Stop or no Contact Made.
ZOffset = 1.6 ' Plate Hight
'FUSION360で作成したGコードの最後に G28 G91 コマンドがあり、
'プログラム切削後に起動すると相対座標系で動き出して誤動作するので、絶対座標系に変更する。
Code "G90"
ERR = 0
StartPos = GetDRO(2)
'G31コマンドで得られる座標は、常にWORK座標系なので、
'動作開始時に座標系を確認して、機械座標系の場合、WORK座標系に切り替える
'スクリプト内では状態が反映されないので、切り替えコマンド発行後、一旦終了
If GetOemLed (16) Then '座標系を確認
MSG = "DRO is Machine Coord."
Code "(**ERROR1**" & MSG & ")"
responce = MsgBox ( MSG , 0 , "DRO ERROR" )
DoOEMButton(256) '座標系を切り替え
ERR = 1 '開始時のZ軸座標は0である必要は無いが、動作が解りにくいので0スタートにする
'Z軸座標を確認して、0でなかった場合、0に設定して、一旦終了。
ElseIf StartPos<>0 Then 'Z軸座標確認
MSG = "DRO Z is not 0."
Code "(**ERROR2**" & MSG & ")"
responce = MsgBox ( MSG , 0 , "DRO ERROR" )
Call SetDro (2, 0) 'Z軸座標を0に設定
ERR = 1
ElseIf GetOemLed (825) Then 'プローブの状態を確認
MSG = "Check Ground Probe"
Code "(**ERROR3**" & MSG & ")"
responce = MsgBox ( MSG , 0 , "Probe ERROR" )
ERR = 1
End If
If ERR = 0 Then
StartPos = GetDRO(2) 'Z軸座標取得、表示されている座標系での値
StartPosM = GetOEMDRO(85) 'Z軸座標取得、機械座標系での値
StopPos = StartPos - ZMove
Code "G4 P2"
MSG = "move " & StartPosM & "/" & StartPos & "/" & StopPos
Code "( " & MSG & ")"
Code "G31 Z"& StopPos & "F6"
While IsMoving()
Wend
Probepos = GetVar(2002) 'プローブと接触した座標取得、常にWORK座標系の値になる
Code "G0 G53 Z" & StartPosM '誤動作対策のため機械座標のスタート位置へ戻る
While IsMoving ()
Wend
Code "F" & CurrentFeed
If Probepos <= StopPos Then
MSG = "overshoot " & StartPos & "/" & Probepos
Code "(" & MSG & ")"
Code "(**ERROR4**" & MSG & ")"
responce = MsgBox ( MSG , 0 , "Probe ERROR" )
Else
ZZ = StartPos - Probepos + ZOffset
Call SetDro (2, ZZ)
MSG = "Z zeroed " & Probepos & "/" & ZOffset & " " & StartPosM & "/" & StartPos
Code "(" & MSG & ")"
End If
End If
Exit Sub


これで、完了。
後は、本番ですが、台座をテーブルに載せ、エンドミルのセンターを台座に合わせ、MACHのAuto Tool Zeroボタンをクリックするだけです。


4、プリセッター

今回のインターフェースは、簡単、プリセッターはチャイナ製、LEDを付けておきましたので、接すると分かります。
H=25mm
余談ですが、写真の基板を初めて使ってみました。株式会社矢島製作所 : 両面スルーホールガラスコンポジット・ユニバーサル基板 Cタイプ めっき仕上げ
これは、穴の中に、すっと半田が入り込んで、大変使い安かったです。


5、作業を終えて
しかし、最初からこういった仕掛けがないのかというのが本音。
大変便利になると思います。
2015/8/23この日、今までの構想を全て完了しました。



2016/2/7 追記
先達者の方に教わって、PICにより、接触後、ブザーがある一定時間になるようにしました。


//***************************** //* 間欠タイマー //* 16F627A //* XC8 V1.35 //* No481 //* RA6←MACHからの入力想定 //* RA2←制御機器へ //***************************** #include #define _XTAL_FREQ 4000000 //delay用宣言 // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. // CONFIG #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming) #pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #define KanketuTime 2 #define DousaTime 1 #define On 0 #define Off 1 int Start; //関数宣言 void Second(int sec); void interrupt InterSyori( void ){//TMR0の割り込み処理 if(TMR0IF==1){//割り込みがあったら if(RA6==0){//MACHからの信号をしらべて0(Low)だったらスタートのフラグを1にする if(Start==0){ Start=1; } } if(RA6==1){//MACHからの信号をしらべて1(High)だったらスタートのフラグを0にして if(Start==1){ Start=0; //RA2=Off;//機器の動作を強制的に止める。 } } TMR0=0; TMR0IF=0; } } // メイン関数 void main (void){ OSCF=1;//内蔵発振器 4MHz使用に設定 CMCON = 0x07;// 1,2,17,18端子を入出力端子に設定 PORTA = 0x00;// 電圧レベルの初期設定 PORTB = 0xFF; // 入出力設定 TRISA = 0b01010000;//RA5は入力専用・RA6は入力他は出力 TRISB = 0b00000000;//RB0は入力 //初期設定 RA2=Off;//MACH RA6=Off; Start=0; int Buzer=0;// //割り込み設定 OPTION_REG=0b000000000;//プリスケラ? 2 5ビット=0 WDTは使わない TMR0=0; //TMR0カウンターを0に TMR0IF=0; //TMR0フラグクリアー TMR0IE=1;//TMR0割り込み許可 GIE=1;//全体割り込み許可 // 永久ループ while(1){ if(Start==1){//スタートフラグが1なら動作開始 RA2=On; Buzer=On; Second(DousaTime); //RA2=Off; //Second(KanketuTime); } if(Start==0){ if(Buzer==On){ Second(KanketuTime); RA2=Off; Buzer=Off; } } } } // 待ち時間関数} void Second(int sec){ while(sec >0){ sec--; __delay_ms(10); } }

【このページのTOPに戻る】 inserted by FC2 system