이제 스탭핑 모터 2단계로 제가 나눠드린 큰 모터 17PM시리즈 모터로 1상여자, 2상여자, 1-2상여자 스컨스를 만든 후에
호출하여 스탭모터를 돌려보도록 하겠습니다.
스탭모터 단계
1단계
== Arduino API 사용 == Arduino Kit 제공 스탭모터 사용 =
== udl2003 모터 드라이버 사용 = 유니폴라 구동방식
2단계
== 1상, 2상, 1-2상 상여자 스컨스 제작 == My Lib 사용 = 제가 드린 모터 사용 = 실전실무
= L298 모터드라이브 = 바이폴라 구동방식
3단계
== 마이크로 스탭 적용 == My Lib 사용 = 제가 드린 모터 사용 = 실전실무 =
== A4988 모터드라이브 사용 = 바이폴라 구동방식(부체꼴 초퍼방식)
== 풀 스탭, 하프스탭도 지원, == 상 여자신호 안 만들고 단순 펄스수만 계싼하여 제어하면 됨
st_motor.h
// 2026, 06, 23 AIOT 10기
#ifndef __ST_Motor__
#define __ ST_Motor__
// Pin
#define A 8 //1
#define B 9 //2
#define A_ 10 //4
#define B_ 11 //8
#define CW 1
#define CCW 2
#define PH_1 1
#define PH_2 2
#define PH_1_2 3
char mode = 1; // 1: 1상여자, 2: 2상여자, 3: 1-2상여자
char *p;
int delay_Time = 2;
// 1상여자
const char st_1ph_cw[] = {0x01, 0x02, 0x04, 0x08};
const char st_1ph_ccw[] = {0x08, 0x04, 0x02, 0x01};
// 2상여자
const char st_2ph_cw[] ={0x03, 0x06, 0x0c, 0x09};
const char st_2ph_ccw[] ={0x09, 0x0c, 0x06, 0x03};
// 1-2상 여자 = 1상 + 2상 여자를 합친것
// 1상, 2상, 1상, 2상, 1상, 2상, 1상, 2상
const char st_1_2ph_cw[] = {0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, 0x09};
const char st_1_2ph_ccw[] ={0x09, 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03, 0x01};
void st_motor(char mode, char dir)
{
if(mode == PH_1_2)
{
// 1-2상 여자방식 = 0.9도 = 400pulse
if(dir == CW) p = st_1_2ph_cw;
else p = st_1_2ph_ccw;
for(int k = 0; k <= 50; k++)
{
for(int i = 0; i <= 7; i++)
{
PORTB = p[i];
delay(delay_Time);
}
}
}
else
{
// 1상, 2상여자방식 = 1.8도 = 200 pulse
if((mode == PH_1) && (dir == CW)) p = st_1ph_cw;
else if((mode == PH_1) && (dir == CCW)) p = st_1ph_ccw;
else if((mode == PH_2) && (dir == CW)) p = st_2ph_cw;
else if((mode == PH_2) && (dir == CCW)) p = st_2ph_ccw;
for(int k = 0; k <= 50; k++)
{
for(int i = 0; i <= 3; i++)
{
PORTB = p[i];
delay(delay_Time);
}
}
}
}
#endif