2008/04/18 ス
テッピングモーターを回す。
EPSONのインクジェットプリンタのインクが詰まって出なくなり捨てようと思いましたが、ばらして見ました。
ハードオフ等のジャンク屋にも100円位の捨て値で出ています。
中からはヘッド移動用と紙送り用の2個のステッピングモーターが出てきました。
本体の大きさ42*42*25と42*42*31です。
コイル抵抗8オーム、5V掛けて600mA位でしょうか?
モーターにはEPSONの表示があります(型番EM-293)
他の1個はEM-288 shinano kenshi co ltd china
残念なことに線は4本コイル2個のバイ
ポーラ型のモーターです。
ギヤは圧入してあるので道具を使ってはずします
自分でも精度良く加工できれば圧入できると思うのですが、なかなかぴたりに加工できません。
簡単に回らないかとネットを見ましたが、あまり情報はありませんでした。
何事も好きな私 挑戦して見ました。
ジャンク基板からはずしたIC MC3479
が2個ありましたので使って作って見ました。
通販で400円くらいのようです。
• Single Supply Operation: 7.2 to 16.5 V
• 350 mA/Coil Drive Capability
• Clamp Diodes Provided for Back−EMF Suppression
• Selectable CW/CCW and Full/Half Step Operation
• Selectable High/Low Output Impedance (Half Step Mode)
• TTL/CMOS Compatible Inputs
• Input Hysteresis: 400 mV Minimum
• Phase Logic Can Be Initialized to Phase A
• Phase A Output Drive State Indication (Open−Collector)
• Pb−Free Package is Available*
基板設計して CNCで切削 穴あけ
少々電流容量が少ないですが、ゆっくり回せばそこそこに
利点はパソコンのプリンターポートに直結可能です。
資料を読むと電流調整やってくれるようですが、12V8オームでは電流流れすぎて回りますがちんちんになってしまいました。
IC壊したかと思いましたが、冷えたところ元に戻りました。
仕方ないので22オームの抵抗をコイルに直列に入れて電流調整しました。これで12V30オーム400mAのはずなんですが、
電流はこんなに流れません。?
このほうが高速回転させたときには自動的に電圧上がってよい方向になります。
回路図250kになっていますが、実際は100k使いました。
一軸分足りないのでPIC16F88で回路を追加しました。SOFT制御ハーフステップでユニポーラステッピングモーターを回しています。
;PC-CNC ユニポーラステッピングモーター駆動 2008/04/10
;RA0,1,2,3 OUT ;RB0 step INT ;RB6
DIR
LIST
P=PIC16F88 ;
INCLUDE "P16f88.inc"
__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF
& _CPD_OFF &
_LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF &
_WDT_OFF & _INTRC_IO & _PWRTE_ON
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
CNT EQU 20H
;カウンタ PICによって違いますが、16F88はRAMは20Hから始まっています
ORG 0
;Reset Start 電源を入れると此処からスタートします
goto init
org 4 ;割込みがかかった場合のスタート番地
goto init
;Initialize
; 入出力ピン初期化
init BCF INTCON,GIE ;割り込み禁止
BSF STATUS,RP0 ;
Bank 1 へ切替
MOVLW
B'01110000' ;内蔵クロック 8MHz
MOVWF OSCCON
MOVLW
B'11111111' ;PortB inモード
MOVWF TRISB
MOVLW
B'00000000' ;PortA 出力モードに設定
MOVWF TRISA
clrf ANSEL
;デジタル
bcf
OPTION_REG,NOT_RBPU ;PortB PU on
movlw
b'00000111' ;コンパレーターoff
movwf CMCON
BCF STATUS,RP0 ;
Bank 0 へ戻す
movLW
B'00000000' ;all off 初期出力
movwf PORTA
MOVLW 0H
;COUNTERリセット
MOVWF CNT
LOOP1 BTFSC PORTB,0
;stepが0なら進む
GOTO LOOP1
LOOP2 BTFSS PORTB,0
;stepが1なら進む
GOTO LOOP2
BTFSS PORTB,6
;dir(正逆)チェック
GOTO FWD
GOTO RVS
;逆転
FWD MOVF
CNT,W ;正転カウント処理
SUBLW 07H
BTFSC STATUS,Z
GOTO
SET0 ;C=7 なら 0 に
INCF CNT,F
GOTO P_OUT
SET0 CLRF CNT
GOTO P_OUT
RVS ;逆転カウント処理
MOVF CNT,W
SUBLW 0H
BTFSC STATUS,Z
GOTO
SET7 ;C=0 なら 7 に
DECF CNT,F
GOTO P_OUT
SET7 MOVLW 07H
MOVWF CNT
P_OUT MOVF CNT,W
CALL TABLE
MOVWF
PORTA ;TABLEから持ち帰ったデータを出力する
GOTO LOOP1
TABLE ;CNT値をPCLに+しでJMP,データを持ってretする
ANDLW 07H
;下位3ビット
ADDWF PCL,F
RETLW B'11111000'
;0下位4bitが有効
RETLW B'11111010' ;1
RETLW B'11110010' ;2
RETLW B'11110110' ;3
RETLW B'11110100' ;4
RETLW B'11110101' ;5
RETLW B'11110001' ;6
RETLW B'11111001' ;7
END
あちこちのサイトを参考にコピーしまくって作りました。ありがとうございます。動けばOK
MPLAB を使ってコンパイル、デバッグ
icprog を使ってICに書き込みました。
やる時々に使い方を忘れてしまいます。
Debugger Stimulus コマンドでPINの値を変化させてデバッグします。
電流調整はモーターコイルに抵抗を入れてください。
とりあえず回りました。
基板切削用ではこの程度のモーターで十分で格安簡易CNCが作れそうです。
2008/04/19
TA7774F
面実装 チップ
オークションで30個900円で購入
秋
月では2個300円 6線式のユニポーラステッピングモーターも中点線をフリーにして回せます。
バイポーラ駆動による1 チップモータドライバ(ブリッジドライバ2 組内蔵)
パワーセーブ機能、 スタンバイ機能を有する。
励磁切り替え時の貫通電流保護回路内蔵
入力TTL コンパチブル IN A、IN B、PS 端子
IO (START) 350mA (MAX.) : VS1 ENABLE 時
IO (HOLD) 100mA (MAX.) : VS2 ENABLE 時
ピンのピッチは1mmですが、私のCNCの切削可能最小ピッチです。
放熱はピンを使って基板に逃がすタイプですのでパターンを大きくとって半田たっぷり盛って放熱します。
このIC出力OFFができないようなのでハーフステップができません
回路は簡単なんですが!!
問題は入力がDIR・STEP入力ではないのでPICを使って信号変換する必要があります。
JWWによる基板設計
08/04/22
基板切削して見ました。切削直後の写真です。ICは1mmピッチ 足の太さは0.5mm 空けてある穴は0.9mmです。
切削幅は0.5mm位です。バリも出ず、きれいに切れています。
CNCの性能としては、先の細い刃物が手に入ればもっと細く加工することは可能かと思います。
この後ごみを掃除して表面にフラックスを塗って使います。
ところで話し変わりますが古い基板から部品をはずす時に便利に使っているバーナーです。
燃料は使い捨てライター。1300度の炎でスルーホールのメーカー基板から簡単に部品がはずせますのでお勧めです。
ヒシチューブを収縮させる時にもライターは使いやすいです。
MACHのDIR,STEP信号をINA,INBに変換するプログラムです。
;PC-CNC バイポーラステッピングモーター駆動
TA7774F 2008/04/20
;RA2 DIR RA3 step RB7 PS RB5,6 OUT
LIST
P=PIC16F88 ;
INCLUDE "P16f88.inc"
__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF
& _CPD_OFF &
_LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF &
_WDT_OFF & _INTRC_IO & _PWRTE_ON
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
CNT EQU 20H ;カウンタ
ORG 0
;Reset Start
goto init
org 4
goto init
;Initialize
; 入出力ピン初期化
init BCF INTCON,GIE ;割り込み禁止
BSF STATUS,RP0 ;
Bank 1 へ切替
MOVLW
B'01110000' ;内蔵クロック 8MHz
MOVWF OSCCON
MOVLW
B'11111111' ;PortA inモード
MOVWF TRISA
MOVLW
B'00000000' ;PortB 出力モードに設定
MOVWF TRISB
clrf ANSEL
;デジタル
bcf
OPTION_REG,NOT_RBPU ;PortB PU on
movlw
b'00000111' ;コンパレーターoff
movwf CMCON
BCF STATUS,RP0 ;
Bank 0 へ戻す
movLW
B'00000000' ;all off
movwf PORTB
MOVLW 0H
;COUNTERリセット
MOVWF CNT
LOOP1 BTFSC PORTA,3
;stepが0なら進む
GOTO LOOP1
LOOP2 BTFSS PORTA,3
;stepが1なら進む
GOTO LOOP2
BTFSS PORTA,2
;dir(正逆)チェック
GOTO FWD
GOTO RVS
;逆転
FWD MOVF
CNT,W ;正転カウント処理
SUBLW 03H
BTFSC STATUS,Z
GOTO
SET0 ;C=3 なら 0 に
INCF CNT,F
GOTO P_OUT
SET0 CLRF CNT
GOTO P_OUT
RVS ;逆転カウント処理
MOVF CNT,W
SUBLW 0H
BTFSC STATUS,Z
GOTO
SET3 ;C=0 なら 3 に
DECF CNT,F
GOTO P_OUT
SET3 MOVLW 03H
MOVWF CNT
P_OUT MOVF CNT,W
CALL TABLE
MOVWF
PORTB ;TABLEから持ち帰ったデータを出力する
GOTO LOOP1
TABLE ;CNT値をPCLに+しでJMP,データを持ってretする
ANDLW
B'00000011' ;下位2ビット
ADDWF PCL,F
RETLW
B'01100000' ;0下位2bitが有効
RETLW
B'01000000' ;1
RETLW
B'00000000' ;2
RETLW
B'00100000' ;3
END
あまり細かいことは気にせず、とりあえず回りました。
2008/4/30
PIC16F88を使って考えて見ました。
せっかくPICを使うのでカレントダウン機能も持たせました。
16ビットのタイマー1を使って1/8プリスケーラーを使いました。
STEPクロックが切れてから1/8M*4*8*256*256=0.26秒後にカレントダウンに入ります。
;PC-CNC バイポーラステッピングモーター駆動 2008/04/28
;RA2 DIR RA3 step RB7 PS RB5,6 OUT
LIST
P=PIC16F88 ;
INCLUDE "P16f88.inc"
__CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF
& _CPD_OFF &
_LVP_OFF & _BODEN_OFF & _MCLR_OFF & _WDT_OFF &
_INTRC_IO & _PWRTE_ON
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
CNT1 EQU
20H ;カウンタ
W_TEMP equ 21h
ST_TEMP equ 22h
ORG 0
;Reset Start
goto init
org 4
goto INTR
;Initialize
init BSF
STATUS,RP0 ; Bank 1 へ切替
MOVLW
b'01110000' ;内蔵クロック 8MHz
MOVWF OSCCON
MOVLW
b'11111111' ;PortA in=1 out=0 モード
MOVWF TRISA
MOVLW
b'00000000' ;PortB 出力モードに設定
MOVWF TRISB
clrf ANSEL
;デジタル
bcf
OPTION_REG,NOT_RBPU ;PortB PU on
movlw
b'00000111' ;コンパレーターoff
movwf CMCON
BSF PIE1,TMR1IE ;TMRオーバーフロー割込許可
BCF STATUS,RP0 ;
Bank 0 へ戻す
MOVLW b'00110000'
MOVWF T1CON ;T
CONレジスタ プリスケーラ1:8
BCF T1CON,T1OSCEN
BCF T1CON,TMR1CS
;int osc
CLRF CNT1
;CNT1変数を00Hにクリア
BSF INTCON,PEIE ;周辺割込の許可
BSF INTCON,GIE ;全体割込の許可
BSF T1CON,TMR1ON ;TMRのTMR
ONビットをセット カウント開始
LOOP1 BTFSC PORTA,3
;stepが0なら進む
GOTO LOOP1
LOOP2 BTFSS PORTA,3
;stepが1なら進む
GOTO LOOP2
CLRF TMR1H
;タイマー=0
BCF PORTB,7
;PS=0 power UP
BTFSS PORTA,2
;dir(正逆)チェック
GOTO FWD
GOTO RVS
;逆転
FWD MOVF
CNT1,W ;正転カウント処理
SUBLW 03H
BTFSC STATUS,Z
GOTO
SET0 ;C=3 なら 0 に
INCF CNT1,F
GOTO P_OUT
SET0 CLRF CNT1
GOTO P_OUT
RVS MOVF
CNT1,W ;逆転カウント処理
SUBLW 0H
BTFSC STATUS,Z
GOTO
SET3 ;C=0 なら 3 に
DECF CNT1,F
GOTO P_OUT
SET3 MOVLW 03H
MOVWF CNT1
P_OUT MOVF CNT1,W
CALL TABLE
MOVWF
PORTB ;TABLEから持ち帰ったデータを出力する
GOTO LOOP1
TABLE ;CNT値をPCLに+しでJMP,データを持ってretする
ANDLW
B'00000011' ;下位2ビット
ADDWF PCL,F
RETLW
B'01100000' ;0下位2bitが有効
RETLW
B'01000000' ;1
RETLW
B'00000000' ;2
RETLW
B'00100000' ;3
INTR ;割込処理
PUSH MOVWF W_TEMP
;Wレジスタ待避
SWAPF STATUS,W
;STATUS取出
MOVWF ST_TEMP
;STATUS待避
BCF PIR1,TMR1IF
;オーバーフローフラグのクリア
BSF STATUS,RP0
;メモリーバンクを1にセット
BSF PIE1,TMR1IE
;オーバーフロー割込許可
BCF STATUS,RP0
;メモリーバンクを0にセット
BSF PORTB,7
;PS=1
pop SWAPF
ST_TEMP,W ;STATUSを戻す
MOVWF STATUS
SWAPF W_TEMP,F
;Wレジスタを戻す
SWAPF W_TEMP,W
RETFIE
;割込を許可してリターン
END
基板裏側の面実装ICの状況
当たり前ですが、ICの規格のとおり電流350mAが限度のようです。結構熱を持ちます。
今回の反省
当初何気なく BSF
T1CON,TMR1CS とタイマー用の内蔵OSC回路をONにしてしまいました。
これは12,13番PINに32Kのクリスタルを付けて使う時計などの発振回路でした。
MPALBのシュミレーターを使って十分にバグ取りしたつもりだったのですが、モーターが動かず悩みました。
12,13番ピンはOUT端子に使っていたので余計です。
結局 BCF T1CON,TMR1CS で動きました。
home
CNCの構想
CNCの製作 CNCのSOFT
CNCの作品
ゲストブック