加工台の面だし

| コメント(1)
記事日付:2013/01/27
通常のCNCフライス盤を用いて基板加工を行う場合にはZ軸の精度が重要である。
基板加工では生基板を加工台のうえにのせて加工するが、このとき基板表面が加工機ヘッドのXY移動面と精度よく平行であることが求められる。
加工台を加工機自身で削りだせば、加工機のXY移動面と加工台表面を平行にすることができる。

★樹脂板のとりつけ

加工台そのものを削ってしまうと取り返しがつかないので、加工機の加工台のうえに厚さ10mmのジュラコン板を設けることにした。
ジュラコン板は、はざい屋購入した。同店の取り扱い商品にあわせてサイズ決定した結果、ジュラコン板のサイズは350×245となった。

また、CNC3040の加工台はワーク固定に使えるみぞがあるので、ジュラコン板をしいても固定用のみぞが使えるよう、あらかじめCNC3040でスリットの加工をした。

スリット配置の製図にはフリーの SolidEdge 2D Drafting (筆者は最初にさわった機械CADがSolidWorksだったので、パラメトリックな製図が好き) 、
Gコード生成にはNCVCを用いた。

スリットは以下のように配置した。筆者は機械製図をちゃんと勉強したことがないので、寸法の入れ方等々が適当なのはご容赦いただきたい。

なお、加工台とジュラコン板はネジ止めとした。ジュラコン板に深さ5mmのダボ穴を設け、ネジの頭がジュラコン板表面にでないようにした。
上記のCAD/CAMソフトの組み合わせでは3次元加工のプログラムが作成できないので、ダボ穴だけ手加工である。

板を取り付けすると、以下のようになる。
※写真は面だし加工後のものです。

左手の奥 (X軸原点側) に作業空間が余っているように見えるが、実際は加工機の加工可能範囲ギリギリである。
スピンドルが手前側についているためである。
一方、右手前(X軸+側)と右奥(Y軸+側)は加工機の加工範囲をジュラコン板がカバーしきれていない。

★面だし加工用プログラムの作成

面だしを行うには、加工台の上を一定の高さで動き回り、面全体を塗りつぶすような動きの加工用プログラムが必要である。
自動で作ってくれるCAMソフトはたくさんあるような気がするが、今回は勉強をかねて自分で加工用プログラムを作成した。
自分で作成するといってもGコードの加工用プログラムを手書きするのは大変なので、
Gコードの加工用プログラムを自動生成するパソコン用のプログラムを作成した。
筆者はC言語しか使えないので、このプログラムもC言語である。
以下のような具合である。
/*
 * 面だしGコード生成
 *  Created on: 2012/05/01
 */

#include "stdio.h"
#include "stdlib.h"

const double AREA_X_MAX = 355; //面だし領域のX方向広さ (X方向移動量の最大値)[mm]
const double AREA_Y_MAX =  248; //面だし領域のY方向広さ (Y方向移動量の最大値)[mm]
const double VERTICAL_OFFSET =  20.0; //はじめの垂直方向切り込み量 (表面からの原点位置の高さ+初回切り込み量)[mm]
const double VERTICAL_GRINDING_DEPTH =  0.2; //垂直方向の切削量 [mm] (正の値で下方向、1加工あたり)
const double HORIZONTAL_GRINDING_DEPTH =  1.5; //水平方向の切削量[mm] (正の値、1加工あたり)
const int VERTICAL_FEEDING_SPPED =  100;  //垂直フィード速度
const int HORIZONTAL_FEEDING_SPPED =  300;  //水平フィード速度
const int NUMBER_OF_REPEAT = 1; //繰り返し回数

FILE *outputfile;

int main(void){
 double X_MIN;
 double X_MAX;
 double Y_MIN;
 double Y_MAX;
 double Z;
 int repeat_counter;
 int lineNumber;
 int firstTime;

 outputfile = fopen("out.ncd", "w");
 if(outputfile == NULL){
 printf("file cannot opened \n");
 return 1;
 }

 lineNumber = 10;

 //アブソリュートにする
 fprintf(outputfile, "N%2d G90\n", lineNumber++);

 //工具をZ機械原点に戻す
 fprintf(outputfile, "N%2d G91G28Z0.0\n", lineNumber++);
 fprintf(outputfile, "N%2d G90\n", lineNumber++);

 //最大加工範囲の対角まで移動して一時停止
 fprintf(outputfile, "N%2d G00X%3.2fY%3.2f\n", lineNumber++, AREA_X_MAX, AREA_Y_MAX);
 fprintf(outputfile, "N%2d G04P3\n", lineNumber++);

 //加工開始
 Z = 0.0;
 repeat_counter = NUMBER_OF_REPEAT;
 firstTime = 1;
 while(repeat_counter > 0){
 //工具をZ機械原点に戻す
 fprintf(outputfile, "N%2d G91G28Z0.0\n", lineNumber++);
 fprintf(outputfile, "N%2d G90\n", lineNumber++);
 //XYZワーク原点に戻す
 fprintf(outputfile, "N%2d G00X0.0Y0.0\n", lineNumber++);
 fprintf(outputfile, "N%2d G00Z0.0\n", lineNumber++);

 //ヘッドを下げる
 if(firstTime == 1){
 Z-= VERTICAL_OFFSET;
 firstTime = 0;
 }
 Z -= VERTICAL_GRINDING_DEPTH;
 printf("Z: %3.2f\n", Z);
 fprintf(outputfile, "N%2d G01Z%3.2fF%d\n", lineNumber++, Z,VERTICAL_FEEDING_SPPED);

 //塗りつぶし加工。外側から内側に向かってぐるぐる加工。
 X_MIN = 0.0;
 Y_MIN = 0.0;
 X_MAX = AREA_X_MAX;
 Y_MAX = AREA_Y_MAX;

 while(1){
 printf("XMIN:%3.2f XMAX:%3.2f YMIN:%3.2f YMAX:%3.2f\n",X_MIN, X_MAX, Y_MIN, Y_MAX);
 fprintf(outputfile, "N%2d G01X%3.2fY%3.2fF%d\n", lineNumber++, X_MAX,Y_MIN,HORIZONTAL_FEEDING_SPPED);
 Y_MIN += HORIZONTAL_GRINDING_DEPTH;
 fprintf(outputfile, "N%2d G01X%3.2fY%3.2fF%d\n", lineNumber++, X_MAX,Y_MAX,HORIZONTAL_FEEDING_SPPED);
 X_MAX -= HORIZONTAL_GRINDING_DEPTH;
 fprintf(outputfile, "N%2d G01X%3.2fY%3.2fF%d\n", lineNumber++, X_MIN,Y_MAX,HORIZONTAL_FEEDING_SPPED);
 Y_MAX -= HORIZONTAL_GRINDING_DEPTH;
 fprintf(outputfile, "N%2d G01X%3.2fY%3.2fF%d\n", lineNumber++, X_MIN,Y_MIN,HORIZONTAL_FEEDING_SPPED);
 X_MIN += HORIZONTAL_GRINDING_DEPTH;

 if(X_MIN >= X_MAX){
 break;
 }

 if(Y_MIN >= Y_MAX){
 break;
 }
 }
 repeat_counter--;
 }

 //工具をZ機械原点に戻す
 fprintf(outputfile, "N%2d G91G28Z0.0\n", lineNumber++);

 //原点に戻る
 fprintf(outputfile, "N%2d G91G28\n", lineNumber++);
 fprintf(outputfile, "N%2d G90\n", lineNumber++);
 return 1;
}
上記のプログラムが生成したGコードは以下のような具合である。
N10 G90
N11 G91G28Z0.0
N12 G90
N13 G00X352.00Y245.00
N14 G04P3
N15 G91G28Z0.0
N16 G90
N17 G00X0.0Y0.0
N18 G00Z0.0
N19 G01Z-2.40F100
N20 G01X352.00Y0.00F300
N21 G01X352.00Y245.00F300
N22 G01X0.00Y245.00F300
N23 G01X0.00Y1.50F300
N24 G01X350.50Y1.50F300
N25 G01X350.50Y243.50F300
N26 G01X1.50Y243.50F300
N27 G01X1.50Y3.00F300
N28 G01X349.00Y3.00F300

~中略~

N341 G01X232.00Y125.00F300
N342 G01X120.00Y125.00F300
N343 G01X120.00Y121.50F300
N344 G01X230.50Y121.50F300
N345 G01X230.50Y123.50F300
N346 G01X121.50Y123.50F300
N347 G01X121.50Y123.00F300
N348 G91G28Z0.0
N349 G91G28
N350 G90
NCVCで軌跡を見ると、以下のような具合である。合計で60mも切削するのか・・・

★面だし加工

加工台の上にジュラコン板をネジ止めし、加工を開始する。
加工にはφ3.0のエンドミルを使用した。一度の切削で、Z軸方向に0.2mm、XY軸方向に1.5mmずつ切削する。
前述のプログラムでは送り速度を300mm/minとしていたが、実際にはもっと速くできそうである。
筆者は途中で速度をあげ、500mm/min程度で加工した。
切削を開始して待つこと2時間、面だしの終わった面が以下である。
工具の経路にあわせたしましま模様となっており、さわると少しでこぼこしている。
スピンドルが少し傾いているのかもしれないが、今回の加工は表面粗さを要求しないので気にしないこととする。

★結果の確認

筆者の環境では作業台全体が正確に平坦であるかどうか測定するすべがないので、
Z軸原点と作業台間の距離だけ測定する。測定方法は、Z軸原点の自動設定の方法を応用したものである。
測定の様子は以下のとおり。
なお、面だし作業は2012年の7月に行ったのだが、その後ステッピングモータの誤動作に気がついたため、
2013年の1月に面だし作業をやりなおしした。
その結果が以下である。
12年7月に実施した面だし加工
加工直後の測定データが手元に残っていなかったことから13年1月に再測定したものである。
中央手前側が低く、中央奥側が高い傾向にある。
高さが最高の部位と最低の部位で0.1mm以上の差があり、基板加工の障害になりうる。
加工直後の測定では、(データは残っていないものの) 最高と最低の差が0.1mmに達してがっかりした覚えがある。
そのため、加工直後から状況に変化は無いのかもしれない。
②13年1月に実施した面だし加工
対して、13年1月に実施した面だしでは、加工台全体でほぼ一様な高さが得られていることがわかる。
今後、時間の経過とともにゆがみが生じるかどうかは別途調査が必要である。

★まとめ

・樹脂板の切削により、加工機のXY移動面とおおよそ平行な面が得られた。
・基板加工に要求されるZ軸加工量の調整レベル (数100um程度)に対して、それなりの精度である。
・繰り返しになるが、今回の測定結果は加工機のZ軸原点と加工台表面の間の距離を測定しただけである。
加工機のXY移動面自体が持つZ軸方向のゆがみについては、その影響を全く考慮していない。
・正確な定盤でもあればきちんと測定できるかな?今後の課題である。

コメント(1)

Howdy! This article could not be written any better! Looking at this post reminds me of my previous roommate! He constantly kept preaching about this. I'll send this information to him. Fairly certain he's going to have a good read. Thanks for sharing!

コメントする

本ページの管理人

Likipon

埼玉在住の一応エンジニア。最近はシステムエンジニア気味で回路が本業でなくなってしまった。

うなりくんのファン。

メニュー

広告