chapter. 12 스텝모터(step motor)...

24
스텝모터(Step Motor) 구동하기 Chapter. 12 Jaeheung, Lee HBE-MCU-Multi AVR

Upload: doannhan

Post on 05-Feb-2018

258 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor) 구동하기

Chapter. 12

Jaeheung, Lee

HBE-MCU-Multi AVR

Page 2: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

목차

1. 스텝모터(Step Motor)

2. 스텝모터 돌리기

Page 3: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor)

¨ 스테핑 모터(스텝모터, 펄스 모터)

¤ 1902년에 영국에서 처음 개발되어 1960년대 일본에서 NC 공작 기계에처음 도입

¤ AC 서보, DC 서보 모터에 비하여 값이 싸고 정확한 각도제어에 유리

¤ 기계적인 이동량을 정밀하게 제어하는 곳에 스테핑 모터가 많이 사용

¤ 펄스에 의해 디지털적으로 제어하는 것이 가능하므로 마이크로컨트롤러에서 사용하기에 적합한 모터

¤ 샤프트(축)의 위치를 검출하기 위한 별도의 피드백 신호없이 정해진 각도를 회전하고 (Open Loop Control), 상당히 높은 정확도로 정지할 수 있음.

¤ 다른 모터에 비해 정지시 매우 큰 유지 토그가 있기 때문에 전자 브레이크등의 위치 유지 기구를 필요로 하지 않음.

¤ 회전 속도가 펄스 속도에 비례하므로 간편하게 제어 할 수 있음.

Page 4: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor)

¨ 스테핑 모터의 구조

스텝모터 구조 고정자와 회전자의 구조

Page 5: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor)

¨ 스테핑 모터 구동방법

¤ 스테핑 모터제어 회로

n 여자 신호 발생부 : 펄스를 인가하여 각상의 여자 신호를 발생함.

n 구동 회로부 : 신호를 받아서 권선에 여자 전류를 흘려줌.

¤ 마이크로 컨트롤러

n 방향 신호와 펄스열을 발생

스테핑 모터 제어 회로 구성

Page 6: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor) 구동방법

¨ 1상 여자방식 (Full step)

¤ 구동방법

n 스텝핑 모터를 구동하기 위한 최소한의 구동 방법

n STEP_A -> STEP_/A -> STEP_B -> STEP_/B -> STEP_A ->>> 정회전

¤ 특징

n 1개의 코일만을 차례로 여자하는 방식

n 소비 전력이 낮고 1스텝당 각 정밀도가 높음

n 감쇠 진동이 크고 탈조하기 쉬움

구분 1 2 3 4 5 6 7 8 9

A 1 0 0 0 1 0 0 0 1

B 0 1 0 0 0 1 0 0 0

/A 0 0 1 0 0 0 1 0 0

/B 0 0 0 1 0 0 0 1 0

1주기

Page 7: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor)

¨ 스테핑 모터 구동방법

1상 여자 방식 동작 타이밍

Page 8: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor) 구동방법

¨ 2상 여자방식¤ 구동방법

n 항상 2상이 여자되므로 기동 토크가 주어져 난조가 일어나기 어렵고 항상 2개의 상에서 전류가 흐르게 하도록 해야 한다.

n STEP_A,STEP_/A -> STEP_/A, STEP_B -> STEP_B, STEP_/B -> STEP_/B,STEP_A ->>> 정회전

¤ 특징n 2개의 코일을 동시에 여자하는 방식

n 1상 여자구동에 비해 2배의 전류가 필요하지만 토크가 크고 감쇠진동이 적음

n 주파수(damping)특성이 양호하여 가장 널리 이용되는 방법

구분 1 2 3 4 5 6 7 8 9

A 1 0 0 1 1 0 0 1 1

B 1 1 0 0 1 1 0 0 1

/A 0 1 1 0 0 1 1 0 0

/B 0 0 1 1 0 0 1 1 0

1주기

Page 9: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor)

¨ 스테핑 모터 구동방법

2상 여자 방식 동작 타이밍

Page 10: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor) 구동방법

¨ 1-2상 여자방식

¤ 구동방법

n 하나의 상과 두개의 상에 교대로 전류를 흐르게 하는 방식

n 스텝각은 1,2상 여자방식의 1/2 이며 응답 스텝비율은 1,2 상의 2배이다.

¤ 특징

n 1상 여자구동에 비해 1.5배의 전류가 필요

n 1펄스에 대한 스텝 각은 1상 여자와 2상 여자에 의한 스텝 각의 1/2

n 각도를 정밀하게 제어하는 경우에 사용

구분 1 2 3 4 5 6 7 8 9

A 1 1 0 0 0 0 0 1 1

B 0 1 1 1 0 0 0 0 0

/A 0 0 0 1 1 1 0 0 0

/B 0 0 0 0 0 1 1 1 0

1주기

Page 11: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

스텝모터(Step Motor)

¨ 스테핑 모터 구동방법

1-2상 여자 방식 동작 타이밍

Page 12: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 실습 개요

¤ ATMega128의 GPIO핀에 스텝 모터의 제어 신호를 연결하여, 스텝모터를 회전시키도록 한다.

¤ 모터가 1바퀴 돌 때마다 신호를 보내주는 인코더를 이용하여, 모터가2바퀴 돌 때마다, 방향을 전환하도록 한다

¤ 스텝모터의 구동 방식은 1-2상 여자 방식을 쓰도록 한다

¤ 앞에서 배운 타이머와 인터럽트 기능을 복합적으로 이용하여야 한다.

¨ 실습 목표

¤ 스텝 모터의 동작원리를 이해

¤ ATmega128의 GPIO를 이용한 스텝모터 구동 방법 습득

¤ 타이머, 인터럽트, GPIO 제어의 복합적인 프로그램 능력 배양

Page 13: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 사용 모듈 : MCU 모듈, STEP Motor 모듈

MCU 모듈 포트 D

CNT 신호

MCU 모듈 STEP MOTOR 모듈

제어신호 MCU 모듈 포트 C

Page 14: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 사용 모듈 : 스텝모터 모듈의 회로

Page 15: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 사용 모듈 : 스텝모터 모듈의 모터회전 감지부 회로

Page 16: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 모듈 결선 방법

¤ MCU 모듈 포트 C의 PC0~PC3은 스텝모터 모듈의 D0~D3 핀에 연결

¤ MCU 모듈 포트 D의 PD0는 스텝모터 모듈의 CNT에 연결

Page 17: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 구동 프로그램 : 사전지식

¤ 스텝모터의 1상 여자 방식 신호 만들기

n D(3:0)에 차례대로, 0x1, 0x2, 0x4, 0x8을 한주기로 하여 계속 보내주면 된다.

n 반대방향으로 돌리고 싶다면, 0x8, 0x4, 0x2, 0x1 순서로 데이터를보내면 된다.

신호 1 2 3 4 5 6 7 8 9

D0(A) 1 0 0 0 1 0 0 0 1

D1(B) 0 1 0 0 0 1 0 0 0

D2(/A) 0 0 1 0 0 0 1 0 0

D3(/B) 0 0 0 1 0 0 0 1 0

D() 0x1 0x2 0x4 0x8 0x1 0x2 0x4 0x8 0x1

Page 18: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 구동 프로그램 : 사전지식

¤ 스텝모터의 1-2상 여자 방식 신호 만들기

n D(3:0)에 차례대로, 0x1, 0x3, 0x2, 0x6, 0x4, 0xC, 0x8, 0x9를 한주기로 반복해서 보내면 된다.

n 역회전하려면 순서를 역순으로 바꾸어 보낸다.

신호 1 2 3 4 5 6 7 8 9

D0(A) 1 1 0 0 0 0 0 1 1

D1(B) 0 1 1 1 0 0 0 0 0

D2(/A) 0 0 0 1 1 1 0 0 0

D3(/B) 0 0 0 0 0 1 1 1 0

D() 0x1 0x3 0x2 0x6 0x4 0xC 0x8 0x9 0x1

Page 19: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 구동 프로그램 : 사전지식

¤ 타이머 사용

n 1-2상 여자 방식 신호 만들기를 위해서는 D(3:0)에 데이터를 보내는 시간 간격은 일정하게 유지를 해야 한다.

n 이를 위한 타이머가 필요하게 된다. 여기서는 타이머/카운터 0를 사용하며, 타이머의 주기는 45KHz로 한다

¤ 인터럽트 사용

n 자기 센서에 의해 스텝모터의 회전수를 체크해야 함.

n 모터가 한바퀴를 돌 때마다 자기센서로부터 펄스 신호가 발생하며, 그 펄스 신호를 세어서 2가 되면 모터의 방향을 전환해야 한다.

n 펄스 신호가 들어올 때마다 인터럽트를 발생시켜서 카운트를 하도록 한다.

n 인터럽트 0를 사용하고, 하강에지에서 인터럽트가 발생하도록 설정한다.

n 입력 신호의 채터링 방지를 위해 타이머를 사용하여 자기장센서가 반응하는 범위를 벗어날 때까지는 회전수 카운트를 하지 않도록 해야 한다.

Page 20: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

¨ 구동 프로그램 : 소스분석

¤ Step_Motor.c

1) #include<avr/io.h>

#include<avr/interrupt.h>

#define S_MOTOR_DDR DDRC

#define S_MOTOR_DATA_OUT PORTC

#define S_MOTOR_PORT 0x0F

#define DIR_CHANHE_CNT 2 //방향전환 카운트

#define DIR_L 0

#define DIR_R 1

#define ON 0

#define OFF 1

unsigned char mot_cnt=0,ecd_cnt=0;

unsigned char dir=DIR_R; //처음방향은 우측부터

unsigned char flag=OFF; //채터링 방지

unsigned char flag_cnt=0;

Page 21: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

2) //1-2 상 여자 값을 사용

unsigned char mot_tbl[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};3) SIGNAL(SIG_INTERRUPT0);4) SIGNAL(SIG_OVERFLOW0);5) int main(){

S_MOTOR_DDR |= S_MOTOR_PORT;6) EICRA = 0x02; //1비트를 “1”로 두어 인터럽트 0에서 하강 에지를 발생한다.

EICRB = 0x00;

EIMSK = 0x01; /* 0비트가 “1”로 셋되고, SREG 레지스터의 I비트가 1로 설정 되어

있으면 외부인터럽트는 enable된다. */

EIFR = 0x01; /* 0~1비트가 “1”로 셋되고, SREG 레지스터의 I비트와 EIMSK

레지스터의 INT7~INT0비트가 “1”로 설정되어 있으면,

MCU는 해당하는 인터럽트 벡터로 점프한다. */

TCCR0 = 0x07; /* WGM0(1:0) = “00” 일반동작 모드

COM0(1:0) = “00” normal 포트 동작(OC0 사용안함)

CS(2:0) = “111” Prescaler 1024분주 */

TCNT0 = 0xff - 160; // (1 / (7.3728 Mhz / 1024 prescaler )) * 160 => 22ms :45khz

TIMSK |= 1 << TOIE0; //오버플로우 인터럽트 허용

TIFR |= 1 << TOV0; //TOV0 Timer/Counter0 overflow flag 클리어

Page 22: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

6) sei();

while(1);

return 0;

}

SIGNAL(SIG_INTERRUPT0){

cli();

flag=ON; //자기장센서 채터링 방지하기 위함.

if(ecd_cnt == DIR_CHANHE_CNT){ //2바퀴째마다 방향전환

dir = (dir == DIR_R ? DIR_L : DIR_R ); //간단히 하려면 dir^=1 이렇게 해도 된다.

ecd_cnt=0;

}

sei();

}

Page 23: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 19 : 스텝 모터 돌리기

6) SIGNAL(SIG_OVERFLOW0){

cli();

TCNT0 = 0xff - 160;

if(flag == ON) //자기장센서 채터링 방지가 설정되면

flag_cnt++; /* 카운트시작 ,적어도 자기장센서가 반응하는 범위를 벗어날 때

까지 카운트 */

if(flag_cnt == 10){

flag = OFF;

flag_cnt=0; //범위를 벗어나면 플래그 해제

ecd_cnt++;

}

S_MOTOR_DATA_OUT = mot_tbl[mot_cnt];

if(dir == DIR_R){

If(mot_cnt++ == 7) mot_cnt=0;

}

else {

if(mot_cnt-- == 0) mot_cnt=7;

sei();

}

Page 24: Chapter. 12 스텝모터(Step Motor) 구동하기artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제12장 스텝... · 스텝모터(Step Motor) ¨스테핑모터(스텝모터,

실습 16 : TWI(I2C)로 EEPROM 붙이기

¨ 실행 결과