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により、接触後、ブザーがある一定時間になるようにしましたが、、
自分なりに加除修正。



// タイマー0割込みPIC16F1827
//RB0をタッチプローブとSEC基板へ
//RA0,RA1ブザー3秒間点灯
// 'C' source line config statements
#include
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) #pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = OFF // PLL Enable (4x PLL disabled) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset) #pragma config BORV = HI // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming) // __delay_ms(), __delay_us()関数が使用する #define _XTAL_FREQ 1000000
// プロトタイプ宣言
void InitInterTimer0(void);
// メイン関数
void main(void) {
OSCCON = 0b01011010; // 内部クロック周波数を1MHzに設定
OPTION_REGbits.nWPUEN = 0; //内部プルアップ有効 // 電圧レベルの初期設定
PORTA = 0x00;
PORTB = 0x00;
// 入出力設定 TRISA = 0b00000000;
TRISB = 0b00000001;
ANSELA = 0b00000000; //全てデジタルI/Oとする ANSELB = 0b00000000; // タッチプローブの電圧読み込み用のRB0のみアナログ
// タイマ0割込み設定関数の呼び出し
InitInterTimer0();
// 割込み全体の許可
GIE = 1;
event = 0; //初期値イベント無しRB3ロー
// 永久ループ
while (1) {
if (event == 0) { LATA1=LATA0 = 0;
}
if (event == 1) { LATA1=LATA0= 1; __delay_ms(3000); //3秒まつ
LATA1=LATA0= 0;
event = 0;
}
} } // 割込みサービスルーチン
static void interrupt isr() { if (RB0 == 1) {//pullupイベントが起きていなかったら
event = 0;//
} else {
event =1; } T0IF = 0; // タイマ0割込みフラグをクリア
} // タイマ0割込み設定関数
void InitInterTimer0(void) {
OPTION_REG = 0b000000000; //プリスケラ000  5ビット=0内部クロック使用 WDTは使わない
TMR0 = 0x00;
INTCONbits.TMR0IF = 0; //TMR0フラグクリアー
INTCONbits.TMR0IE = 1; //TMR0割り込み許可
INTCONbits.GIE = 1; //全体割り込み許可
}

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