2012年11月25日日曜日

買ったもの


加工用の生プリント基板、PCBカッターが届きました。


DealExtremeで。一枚56円というところ。
品質はいまいちですが、練習用にいいかなと。



PCB切削用のVカッター。
いろいろ条件出しをしているところ。うまくできるようになったら報告します。
スピンドルの回転数とか、結構調整が難しい感じ。


こちらは アリババ で購入。



CNCフライスもようやく実用域に入ってきました。

PICを使ったUSART通信


閑話休題。
仕事でちょいと必要になったので、この週末はPICを使ってUSART通信の実験をしました。
おおむね思い通りに動くようになったので、防備録としておいておきます。
仕事がらみなので、写真は無しの方向で。

それから、11/23日の金曜日は ニコニコ技術部吸収勉強会3 にCNCステージ持って参加してきました。参加者は30人くらいかな。結構な盛り上がりで楽しかったです。
もうすぐ動画がうPされるはず。

と言うことで、ソース。

******************main関数部**********************

//
// compiler: MPLAB XC8 Compiler
// 2012/11/24

// Configration
// RA0: RS for LCD
// RA1: read/write for LCD
// RA2: enable for LCD
// RB1: RX
// RB2: TX
// RB4-7: LCD data port

#include <pic.h>
#include <stdio.h>
#include "lcd.h"

#define _XTAL_FREQ  8000000
#define interval 200 // set here checking interval

__CONFIG(CLKOUTEN_OFF & FOSC_INTOSC & FCMEN_OFF & IESO_OFF & BOREN_ON &
                PWRTE_ON & WDTE_OFF & MCLRE_OFF & CP_OFF & CPD_OFF) ;
__CONFIG(PLLEN_ON & STVREN_ON & WRT_OFF & BORV_HI & LVP_OFF);

void putch(unsigned char); // defined function by printf
unsigned char TxData[16]; // data buffer for quotation
unsigned char RxData[20]; // data buffer for receive
char cnt; // variable for for-loop
char rcnt=0; // variable for receiving data count
char Lcd1Serial0=1; // switch for controling out put way
char Power; // for bar graph

void putch(unsigned char tx_data)
{
if(Lcd1Serial0)lcd_putch(tx_data);
else
{
while(!TXIF); // sending quotation via serial
TXREG=tx_data;
}
}

void interrupt ReceiveData()
{
if (RCIF == 1) // confirm USART interruption
{
RxData[rcnt] = RCREG; // receive data
RCIF = 0; // rest flag
}
rcnt++; // increment
}
void main()
{
    OSCCON=0b01110010; // internal clock 8MHz
    ANSELA=0b00000000; // No analog for PORTA
    ANSELB=0b00000000; // No analog for PORTB
    TRISA=0b00100000; // Set I/O according to configuration
    TRISB=0b00000010; // Set I/O according to configuration
    PORTA=0b00000000; // reset out put
    PORTB=0b00000000; // reset out put

lcd_init(); // initialize LCD screen
//__delay_ms(1000);

//Lcd1Serial0=1;
//printf("connection");
//lcd_goto(0x40);
//printf("   checker");
//__delay_ms(3000);
//lcd_clear();

コマンド部分は削除 ^^;

TXSTA  = 0b00100100 ; // asynchronous, 8bit, no-parity bit
RCSTA  = 0b10010000 ; // serial port enable, continuous receive enable
SPBRG  = 25; // baud rate 19200 error 0.16%
RCIF = 0; // reset USART interruption flag
RCIE = 1; // enable USART interruption
PEIE = 1; // enable peripheral interruntion

GIE  = 1; // enable general interruntion

while(1)
{
Lcd1Serial0=0;
for(cnt=0; cnt<=15; cnt++)putch(TxData[cnt]); // quotation
Lcd1Serial0=1;
lcd_goto(0x40);
printf("."); // show checking indicator

__delay_ms(interval);
//lcd_clear();
if(rcnt>=19)
{
Power=(RxData[12]-16)/3; // ignore low level & set number of bar
if((Power<=2) | (Power>=65))Power=0; // ignore low level

lcd_goto(0x40);
printf(" "); // erase "."
lcd_goto(0x00);
printf("                "); // erase bars
lcd_goto(0x00);
for(cnt=0; cnt<=(Power); cnt++)putch(0xFF); // renew bars

if(RxData[12]<=0x03)RxData[12]=0x00; // ignore low level
lcd_goto(0x4E);
printf("  "); // erase number
lcd_goto(0x4E);
printf("%d",RxData[12]); // show received data in number
rcnt=0;
}
__delay_ms(interval);
}
}
***********************LCD.c**************************

#define _XTAL_FREQ 8000000
#include <htc.h>
#include "lcd.h"

#define LCD_RS RA0
#define LCD_RW RA1
#define LCD_EN RA2

#define LCD_DATA PORTB

#define LCD_STROBE() ((LCD_EN = 1),(LCD_EN=0))

/* write a byte to the LCD in 4 bit mode */

void
lcd_write(unsigned char c)
{
__delay_us(40);
LCD_DATA = ( c & 0xF0 );
LCD_STROBE();
LCD_DATA = ( ( c << 4 ) & 0xF0 );
LCD_STROBE();
}

/*
 * Clear and home the LCD
 */

void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x01);
__delay_ms(2);
}

/* write a string of chars to the LCD */

void
lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)
lcd_write(*s++);
}

/* write one character to the LCD */

void
lcd_putch(char c)
{
LCD_RS = 1; // write characters
lcd_write( c );
}


/*
 * Go to the specified position
 */

void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}

/* initialise the LCD - put into 4 bit mode */
void
lcd_init()
{
char init_value;

init_value = 0b00110000;

LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;

__delay_ms(15); // wait 15mSec after power applied,
LCD_DATA = init_value;
LCD_STROBE();
__delay_ms(5);
LCD_STROBE();
__delay_us(200);
LCD_STROBE();
__delay_us(200);
LCD_DATA = 0b00100000; // Four bit mode
LCD_STROBE();

lcd_write(0x28); // Set interface length
lcd_write(0xC); // Display On, Cursor OFF, Cursor Blink OFF
lcd_clear(); // Clear screen
lcd_write(0x6); // Set entry Mode
}
*********************LCD.h************************



/* write a byte to the LCD in 4 bit mode */

extern void lcd_write(unsigned char);

/* Clear and home the LCD */

extern void lcd_clear(void);

/* write a string of characters to the LCD */

extern void lcd_puts(const char * s);

/* Go to the specified position */

extern void lcd_goto(unsigned char pos);

/* intialize the LCD - call before anything else */

extern void lcd_init(void);

extern void lcd_putch(char);

/* Set the cursor position */

#define lcd_cursor(x) lcd_write(((x)&0x7F)|0x80)

******************************************************

以上。

2012年11月18日日曜日

削ってみました


本体と分けておいていた制御部を本体に載せました。
新たに100円ショップのMDFを 200mm 角に切り出し、回路を上に、電源を下に再配置しました。
空きスペースができた上面には、スピンドルドライバ用の基板とリミットスイッチ/原点検出周りの基板を載せるつもりです。


電源が一階(というか裏)に下りたので空きが確保できました。
ファンがX軸とぎりぎり ^^; ファンの風は基板側に吹き出すので切削粉が散らないかちょっと心配。


前から見るとこんな感じ。けっこうな面積を使っていますが、ここまでスピンドルが後退することはないのです。 わりとワークのエリアは狭い ^^;


で、作ったスピンドルで早速削ってみました。ミクさんです。
CDのプラスチックケース(おそらくポリスチレン)に先端が球状になっているミルをつかって削りました。
データはガリガリ博士(gari2)さんのモノを使わせていただいてます。データはこちら
JWcadのjwwデータをNCVCでCAMデータに変換しています。
MACH3がデモ版なので500ステップで停止します。その都度上から500行を削除してファイルを再読み込みさせ、つなぎつなぎで作業しておりますので時間がかかります。これは10分くらいかけて削りました。


いやあ、面白いです。
MACH3レジストすることにします。

2012年11月17日土曜日

スピンドル作製


ほとんど準備していなかったA軸に手をつけます。
数日間構想した結果こんな感じで行くことにしました。

買ったものは田宮のピンバイスAmazonで800円くらい、と内Φが8mmのベアリング360円、そして1/4インチねじ40mm長さです。1/4インチねじはちょっとだけ山を削って細くするとピンバイスの内側にがっちりはまりそうな太さだったのです。(M6ではやや細すぎてぐらつきが気になりました)




まず1/4インチねじの頭をグラインダで落とします。そして、寸切り状態になったねじを電動ドライバでチャックし、回転させながらヤスリをあててねじ山を少し落とします。こうすると均等にねじ山が削れます。
んで、エポキシをたっぷりつけてピンバイスにぶっ込みます。あとは固まるのを待つだけ。簡単。
こんな感じ。


次に、例のプリンタから取り外したDCモータのプーリー部分をカプラーの太い側(6.35mmΦ)にぴったりはまるまで削ります。これも回しながら行います。あっという間に削れます。
こんな感じ。上が削る前、下が削ったものです。


で、DCモータにカプラーをつけます。


そんなことやっているうちに、エポキシががっちり固まるので、反対側に取り付けます。


おっと、ベアリングを入れるのを忘れないようにしないといけませんでした。


で、カプラーを介してモーターからピンバイスまでが連結されれば完成です。


本体を作ったときに余ったMDFの切れっ端に穴をあけ、適当に固定します。
今回使ったベアリングは国産(NTN!)なので非常に回転はスムースです。A軸は10000rpm以上で回す可能性がありますのでベアリングに中華製を使うわけには行きません(笑


おもちゃ箱の中に転がっていた±15V 0.6Aのスイッチング電源を差動で接続、ポテンショを回してそれぞれ17Vまで電圧をあげました。これで34Vかかることになります。
このA軸用のDCモータは、RS-455PAで12~42Vが定格です。42Vで5500rpmということになっておりますので、34Vでは4500rpmくらいですかね。A軸としてはちょいと速度が遅いですが、まあこれでまずは様子を見てみましょう。

こんな感じで100円ショップのシャコ万で固定します。


柔らかいケミカルボードに歯車を彫ってみました。
エンドミルではなくドリルを強引に横に動かしてます。





後ろのリズミカルなカタカタ音は息子がビーマニのキーをたたいている音です(笑




こんな感じで結構何とかなるもんです。



2012年11月10日土曜日

ニコニコ動画


CNCルータのステージ動作実験で作ったペンプロッタのペンを改良。
またミクさん描いてます。

これはこれで結構面白い。

CNCステージで使うペンを改良してみた


買ったもの


久々に怒涛の衝動買いシリーズ。

ステッピングモータの大き目のやつ3個。日米無線電機。 @1000円
ミネベアの23LM-C325-30V。 ずばりのデータシートはないけど、この辺によれば 定格24V コイル抵抗5Ω、ユニポーラ駆動、といったものだと思われます。


ステッピングモータの小さいやつ3個。日米無線電機。 @240円
ミネベア PM10S-020。 データシートはこちら。 バイポーラ、5V、20Ω、ステップ角18度、ドライバはL293Dとなっております。L293Dはたくさんある(笑


ステッピングモータのさらに小さいやつ。日米無線電機。 @180円だったかと
8216としか書いてない。怪しい。


モータドライバIC。何も考えないで買ったので、使えるかどうかは不明。
日米商事。小@50円と大@150円くらいだったかなあ。
小さいほうは TA7257P データシートはこちら。定格1.5A、1チャンネルのフルブリッジでした。あと3こ買っとけば良かった。

でっかいほうは TA8464K データシートはこちら
.......なんかオペアンプみたい。モータドライバじゃないぞ。兄ちゃん表示間違えてるぜ。


フォトインタラプタ。いやなんとなく。日米商事 @35円くらいだったかなあ
データシートはこちら。CNCルータに使うかも。


レンズ。日米商事。105円
レーザ刻印機を作るときのために。
レンズいっぱい持ってんだけど、つい。


セメント抵抗。日米商事。
いやステッピングモータも買ったことだし。抵抗値が合うのかどうかは不明ですが。


36pinのパラレルコネクタのちゃんとしたやつ。300円。2号機のために。
超音波振動子。250円。また買ってしまった。
いずれ超音波カッターを作ろうと思っているので。
1Z20D-SYX とあるけど、情報無し。
あと、LEDのお楽しみ袋。400円。 すべて鈴商。


リミットスイッチ@80円、タクトスイッチ@80円だったかな、集合抵抗@25円くらい。
アイテクで。


LEDお得袋(笑
こちらもアイテクで。


セメント抵抗。なんとなく。アイテク。


これもアイテク。さすが中華製は安いです。
使えるのだろうか.....


ここからボントン
抵抗のお得袋。5V系でプルアップ用、LEDの通常/高輝度用でよく使うあたりを買いだめ。


ステッピングモータ。いやあ、最近ブームなもので。
PFCU20。 データシートはこのあたり。 これもボントン。定格12V、160Ω、バイポーラ、ギアードで1:10に落としている様子。1秒に一回転がせいぜいみたい。


セメント抵抗(笑

DCモータ。詳細不明。1000円。トルクが強いらしいので(笑
切削用のスピンドル候補。

LED入れが大変なことに。



スライドボリューム。カホパーツセンターの決算セールで。
50KΩ。ワッテージ不明。5個で100円。
使う予定はまったくないけど、スライドボリュームってなんか手元においておきたい感じ。


セメント抵抗(笑


目玉品。珍しく有名メーカーサンハヤトのドリル。
決算セールで2000円になってたので迷わず購入。CNCルータでも活躍してくれるはず。分解されると思うけど。


4芯ケーブル2.5m 100円。
CNCルータのモータと制御基板をつなぐケーブルとして。


いやあ、思いっきり買い物しました。
じつはほかにも中華通販の品が届いているんだけど、また別途。

ニコニコ動画


ここまでの活動をニコニコ動画に投稿しました。
初投稿 ^^)

1万円以下で作るCNCステージ

2012年11月4日日曜日

ついに始動


試験運転を開始しました。
とりあえずはペンを持たせて紙の上で動作を確認しつつMACH3の使い方を勉強。CNCステージは円を描ければとりあえず動作は合格ですので、まずはそれからトライしました。

最初はへんな楕円しか描けず「何じゃこりゃ」という感じだったのですが、発泡スチロールで仮止めしていた送りねじと動作部分を接着剤で固定、レールとのがたつきを微調整すると、ついにきれいな真円を描きました。すごい!

長めですが、動画はこんな感じ。
ステッピングモータの音がかっこいいです。X/Y軸で刻々とスピードの比率が変わっていきます。


小さめの円をたくさん描かせてみました。モータのスピードが刻々と変わるのが良くわかります。
描画寸法もほぼパーフェクト。繰り返し精度もペンを持たせている範囲では10回繰り返して200μmはないと思われます。
心配していたバックラッシュもいまのところは問題を感じません。おそらく実際の切削を開始したらさらに調整が必要でしょう。


制御部はこんな感じ。
いいですね~。いかにも 制 御 し て い る 感 じ 。


さらに調整続行です。