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の書き込みをする画面が現れるので、下から、コピペします。
http://www.instructables.com/id/Mach3-Zero-Probe-Tool/
'VB Code Start
'-------------------
CurrentFeed = GetOemDRO(818)
DoSpinStop()
ZMove = 30.00 'Total lenght of Probe to move before Stop or no Contact Made.
ZOffset =25.5' Plate Hight
ZSal = ZOffset +4.55'+ Free Hight, Will possition the Proble 2 MM over the Material.
StopZmove = 0
If GetOemLed (825)=0 Then
DoOEMButton (1010)
Code "G4 P2.5"
Code "G31 Z-"& ZMove & "F25"
While IsMoving()
Sleep(200)
Wend
Probepos = GetVar(2002)
If Probepos = - ZMove Then
responce = MsgBox ("**ERROR** " , 4 , "Probe **ERROR**" )
Code "G0 Z10"
StopZmove = 1
Code "F" &CurrentFeed
End If
If StopZmove = 0 Then
Code "G0 Z" & Probepos
While IsMoving ()
Sleep (200)
Wend
Call SetDro (2, ZOffset)
Code "G4 P1"
Code "G0 Z" & ZSal
Code "(Z zeroed)"
Code "F" &CurrentFeed
End If
Else
Code "(Check Ground Probe)"
End If
Exit Sub
'-------------------
'VB Code Stop


Code "G0Z0"
While IsMoving ()
Wend
Code "G0X0Y0"


これで、完了。
後は、本番ですが、台座をテーブルに載せ、エンドミルのセンターを台座に合わせ、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