HOME > ステップモータ制御

 ステップモータ制御 

PICでプログラムを組んで,バイポーラ型のステッピングモータを回してみました. 1相,2相励磁の切り替えと,ステップ動作と,スピードの加減速ができるようにしました.

DCF_0346.JPG
実験した回路

IMG.jpg
回路図

動画はこちら.

プログラムは以下の通り. 最初,加速するまで何度も加速ボタンRA3を押さないといけませんが.

プログラム

#include "pic.h"
#include "delay.h"
__CONFIG(HS & WDTDIS & PWRTDIS & UNPROTECT);

unsigned char fr;						// moter direction, forward:1, reverse:0 
unsigned char moter;					// variable for moter rotation
unsigned char phase;					// phase: 1 or 2
unsigned long speed;						// couter for delay   
unsigned char i,j;
unsigned char ph1[]={17,34,68,136};  // output pattern for phase 1 
unsigned char ph2[]={51,102,204,153};  // output pattern for phase 2

main(){

/*	
RA0: LED, off-> 1 phase, on-> 2 phase
RA1: change direction, forward -> reverse -> forward ....
RA2: step rotation
RA3: speed up
RA4: speed down
RB0-3: moter 1
RB4-7: moter 2
*/
	TRISA=0b11111110;
	TRISB=0b10000000;
	RA0=0; RB0=0; RB1=0; RB2=0; RB3=0; RB4=0; RB5=0; RB6=0; RB7=0; // initiallize output off
	fr=1;
	phase=1;
	speed=0;
	moter=0;

	while (1){
		if (phase==1) RA0=0; else RA0=1;   					// LED ON-OFF to show phase 1 or 2

		if (!RA1){ if (phase==1) phase=2; else phase=1;}	// change phase
		while (!RA1);										// wait untouch RA1

		if (!RA2){ 											// step ratation
			speed =0;
			rotation();
		}
		while (!RA2);										// wait untouch RA1

		if (!RA3){ 
			if (speed<255) speed++;
		}
		while (!RA3);
	
		if (!RA4){ 
			if (speed>2) speed--;
		}
		while (!RA4);
		
		if (speed!=0){
			for(i=speed; i<255; i++){DelayUs(250); DelayUs(250);}
			rotation();
		}
	}
}

rotation(){
	if (fr){
			if (moter==3) moter=0; else moter++;
		} else {
			if (moter==0) moter=3; else moter--;
	}
	if (phase==1) PORTB=ph1[moter]; else PORTB=ph2[moter];
}

< 前の記事へ次の記事へ >


ページトップに戻る



ESP32 Wifi Bluetooth開発ボード

Arduino Nano Every
​​
Raspberry Pi pico

FPGA XILINX Artix-7