임베디드시스템개론 -...

54
임베디드시스템개론 : Arduino 활용 Lecture #9: Motor 제어 2012. 5. 13 by 김영주

Upload: others

Post on 06-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

임베디드시스템개론: Arduino 활용

Lecture #9: Motor 제어

2012. 5. 13 by 김 영 주

Page 2: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

강의 목차

소형 모터 개요 트랜지스터를 이용한 DC 모터 제어 Motor Driver IC를 이용한 DC 모터 제어 Servo 모터 제어

2

Page 3: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

1. 소형 모터(Motor)

3

Page 4: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

소형 모터 (1) 소형 모터

전기 에너지를 회전 운동으로 변환하는 장치 모터 소형화로 다양하게 응용되고 있음

종류 : AC 모터

DC 모터

BLDC 모터

Servo 모터

Stepping 모터

Geared 모터

4

Page 5: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

2. 트랜지스터를 이용한 DC 모터 제어

5

Page 6: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (1) 트랜지스터(Tansistor)

전류흐름에 대한 스위칭 또는 증폭 동작을 수행하는 소자

트랜지스터의 스위칭 동작 : 트랜지스터와 기계적인 스위치를 이용한 LED ON/OFF 동작 비교

6

그림 2-1

Page 7: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (2) 트랜지스터의 직류 특성

활성 영역(Active Region) 직류 상황에서 전류 IC는 전류 IB보다 hFE배만큼 더 많은 전류가 흐름

hFE : 전류 이득 베이스(Base)와 이미터(Emitter)가 순방향으로 바이어스 컬렉터(Collector)와 베이스(Base)가 역방향으로 바이어스

차단 영역(Cutoff Region) 만일 IB가 0[A]이면 컬렉터 전류 IC는 거의 0[A], 트랜지스터는 차단

포화 영역(Saturation Region) 베이스와 이미터, 컬렉터와 베이스가 모두 순방향

IB 가 계속 증가하더라도 최대로 흐를 수 있는 이상으로 IC는 증가하지 않음

7

Page 8: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transisteor) (3) 트랜지스터 포화/차단과 스위치 ON/OFF 관계

트랜지스터 포화/차단 전기적 특성

기계적인 스위치 ON/OFF에 의한 전기적 특성

8

Page 9: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (4) 트랜지스터를 이용한 스위치 ON/OFF 동작 구현

[그림 2-1] 회로에서의 트랜지스터 스위치 ON 동작 Base에서 연결된 출력 핀에 High 디지털 전압레벨 출력

RB가 작으면 트랜지스터는 포화 영역에 있게 됨

트랜지스터는 스위치 ON 동작과 같게 됨

트랜지스터의 IC 정격 전류까지 흐르게 할 수 있음

[그림 2-1] 회로의 트랜지스터 스위치 OFF 동작 Base에 연결된 출력 핀에 Low 디지털 전압레벨을 출력

베이스 전류가 거의 0[A], 트랜지스터는 차단 영역에 있게 됨

트랜지스터는 스위치 OFF 동작을 하게 됨

9

Page 10: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (5) 트랜지스터 소자 유형 NPN-type Transistor PNP-type Transistor

범용 NPN 트랜지스터 2N2222A 베이스에 유입되는 전류의 크기에 따라 컬렉터에서 이미터로 전류

이득의 배수만큼 전류가 흐름 차단 및 포화 특성:

10

Page 11: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (6) 범용 NPN 트랜지스터 2N3904

11

Page 12: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (7) 범용 NPN 트랜지스터 2N3904

12

Page 13: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (8) 범용 PNP 트랜지스터

2N2907A NPN 트랜지스터와 스위칭

동작이 반대로 이루어짐

베이스에 전류 유입이 차단되면 이미터로 유입되는전류가 컬렉터로 흐름 베이스에 Low 디지털 전압

이 출력되면 베이스와 이미터 사이는 순방향으로 바이스되고, 컬렉터와 베이스사이는 역방향으로 바이스됨.

베이스에 High 디지털 전압이 출력되면 베이스와 이미터 사이가 역방향으로 바이스되어 전류 흐름이 차단됨.

13

Page 14: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (9) 범용 PNP 트랜지스터 2N3906

14

Page 15: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (10) 범용 PNP 트랜지스터 2N3906

15

Page 16: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

[ NPN 트랜지스터를 이용한 정격 초과전류 공급 회로 ]

트랜지스터 (Transistor) (11) 트랜지스터를 이용한 정격초과전류 공급 (1)

NPN 트랜지스터를 이용한 구동 회로 - ATmega128 정격을 초과하는전류 공급 사례 고휘도 LED 4개를 구동

정격 80mA 요구 MCP 포트 하나의 출력으로는 구동이 어려움

PC0에 HIGH 디지털 전압레벨이 출력 Q1의 스위칭 동작은 ON LED 켜기에 충분한 전류가 흐름

LOW 디지털 전압레벨이 출력 Q1의 스위칭 동작은 OFF LED 꺼짐

16

정격규격:3.2V / 20mA

Page 17: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터 (Transistor) (12) 트랜지스터를 이용한 정격초과전류 공급 (2)

NPN 트랜지스터를 이용한 구동 회로 - ATmega128 정격을 초과하는전류 공급 사례 (계속)

IC = 75[mA] 계산 값 VCE(Sat)=0.3[V], LED 전압강하 3.2[V]

IB = 6[mA] 계산 값, 출력 핀으로 충분히 공급할 수 있음 20[Ω] 양단의 전압강하는 5-3.2-0.3 = 1.5[V] 베이스와 이미터 사이 전압 : 0.7[V]

측정값 77[mA]

17

Page 18: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터를 이용한 DC 모터 제어 (1) H-Bridge 회로를 이용한 소형 DC 모터 정·역 회전

H-Bridge 회로 모터의 전류 흐름 : 좌우

A, D 단락 B, C 개방

모터의 전류 흐름 : 우좌 A, D 개방 B, C 단락

모터 전류 차단 A, B, C, D 모두 개방 (혹은) A, B 개방 혹은 C, D 개방

18

[ H-브리지 회로와 스위치]

M+

M-

Page 19: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터를 이용한 DC 모터 제어 (2) 소형 모터 구동을 위한 H-브리지 회로

19

[ H-브리지 회로를 이용한 DC 모터 정·역방향 제어 회로 ]

Page 20: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터를 이용한 DC 모터 제어 (3) 소형 모터 구동을 위한 H-브리지 회로 (계속)

베이스 저항값이 470[Ω]일 때

직류 전류 이득을 50이라 가정하면 450[mA] 까지 구동할 수 있음

DC 모터 양단에 걸리는 전압

4.6[V], 450[mA] 범위의 소형 또는 마이크로 DC 모터를 구동

20

Page 21: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터를 이용한 DC 모터 제어 (4) 소형 모터 구동을 위한 H-브리지 회로 (계속)

DC 모터 회전을 위한 A, B, C, D 입력 신호

21

Page 22: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터를 이용한 DC 모터 제어 (5) 소형 모터 구동을 위한 H-브리지 회로 (계속)

소형 모터를 위한 간소화된 회로

22

Page 23: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

트랜지스터를 이용한 DC 모터 제어 (6) 소형 모터 구동을 위한 H-브리지 회로 (계속)

간소화된 회로에서의 DC 모터 회전을 위한 입력 제어

23

Page 24: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (1) 실험 개요

간소화된 H-Bridge 회로를 이용하여 DC 모터의 회전을 제어한다.

사전 요구사항 트랜지스터의 특성을 이해하여야 한다. DC 모터의 동작 방식을 이해하여야 한다. H-Bridge 회로의 동작 원리를 이해하여야 한다.

24

Page 25: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (2) 회로도 및 회로 구성

회로도

25

Page 26: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (3) 회로도 및 회로 구성

회로 구성

26

Page 27: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (4) 아두이노 프로그램 : H-Bridge 회로 제어

27

const int ACPin = 2;const int BDPin = 3;

void setup() {pinMode(ACPin , OUTPUT);pinMode(BDPin , OUTPUT);

digitalWrite(ACPin, LOW);digitalWrite(BDPin, LOW);

}

void loop() {digitalWrite(ACPin, LOW); // forward rotationdigitalWrite(BDPin, HIGH);delay(2000);digitalWrite(ACPin, HIGH); // reverse rotationdigitalWrite(BDPin, LOW);delay(2000); digitalWrite(ACPin, HIGH); // stopdigitalWrite(BDPin, HIGH);delay(500);

}

Page 28: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (5) 실험 결과 및 검토 사항

간소화된 H-Bridge 회로에서는 단순히 DC 모터의 회전 방향만 전환할 수 있다.

DC 모터의 속도를 제어할 수 있는 방법은? DC 모터에서 양극 사이(M+과 M-사이)에 흐르는 전류량을 제어트랜지스터는 베이스에 공급되는 전류량에 따라 컬렉터와 이미터 사이에 흐르는 전류량이 증가함.베이스에 공급되는 전류량을 PWM으로 제어 가능

28

Page 29: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (6) 속도제어 H-Bridge 회로

29

Page 30: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (8) 수정 회로도 및 회로 구성

수정 회로도

30

Page 31: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (9) 회로도 및 회로 구성

회로 구성

31

Page 32: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (10) 아두이노 프로그램 : 속도 조절 H-Bridge 회로 제어

32

const int ACPin = 2;const int BDPin = 3;const int speedPin = 8;

void setup() {pinMode(ACPin , OUTPUT);pinMode(BDPin , OUTPUT);

digitalWrite(ACPin, LOW);digitalWrite(BDPin, LOW);

}

void loop() {int duty;

for (duty = 20; duty < 255; duty += 20) {analogWrite(speedPin, duty);

digitalWrite(ACPin, LOW); // forward rotationdigitalWrite(BDPin, HIGH);delay(2000);

Page 33: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

H-Bridge 회로를 이용한 DC 모터 제어실험 (11) 아두이노 프로그램 : 속도 조절 H-Bridge 회로 제어

33

digitalWrite(ACPin, HIGH); // reverse rotationdigitalWrite(BDPin, LOW);delay(2000);

digitalWrite(ACPin, HIGH); // stopdigitalWrite(BDPin, HIGH);delay(500);

}}

Page 34: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

3. Motor Driver IC를 이용한 DC 모터 제어

34

Page 35: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

TA8050P (1) TA8050P

간단한 모터 드라이버 IC 회전 방향 전환만 제어 가능 정격전류 3A까지 지원 가능 별도의 주변 소자가 필요없음 주의사항:

모터 전압이 아두이노 공급 전압보다 높아야 함.

IC와 아두이노가 동일한 접지를사용하여야 함.

Page 36: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

TA8050P (2) TA8050P 사용 예:

Page 37: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

L298 (1) L298 Series

대형 패키지 형태로 과열보호 기능지원

DC 46V까지의 동작전압과DC4A까지의 전류제어 가능 PWM을 이용하여 속도 제어 가능

논리입력 1.5V, Dual Bidirectional 타입의 IC

주로 중형 DC모터를 제어하는 데사용

Page 38: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

L298 (2) L298를 이용한 모터 드라이버 회로 IC 동작 전압

과 Motor 공급전압이 틀림

Page 39: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

L298 (3) L298를 이용한 모터 드라이버 회로

Page 40: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

4. Servo 모터 제어

40

Page 41: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (1) Servo Motors

a motor with an inherent feedback mechanism that allows you to send position commands to it without requiring you to do the position reading

DC motor High-torque gearing Potentiometer to read position

Can be positioned from 0-180º

Feedback circuitry to read pot and control motor All built in, you just feed it a PWM signal

Easy three-wire PWM 5V interface

RC 모형 등에 반복 동작 제어 등에 주로 사용 회전 운동을 직선 운동으로 변환 이용

41

Page 42: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (2) Servo Motors (계속)

다양한 크기를 지원 모든 종류가 동일한 3-wire I/F 지원

서보 모터 사양 예: weight: 9g speed: .12s/60deg @ 6V torque: 22oz/1.5kg @ 6V voltage: 4.6~6V size: 21x11x28 mm

42

Page 43: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (3) Servo Motor 제어

PWM Freq. = 50Hz(i.e. every 20 millisecs) Pulse width = from 0.6 to 2.4 millisecs

0.6 millisec = full anti-clockwise position 2.4 millisec = full clockwise position

43

Page 44: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (3) Servo Motor 동작

실제로는 pulse 폭은 600 usec에서 2400 usec 사이에서 제어 가능

44

Page 45: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (4) Servo Motor 동작 테스트

아두이노를 이용하여 servo 모터 회전 동작을 테스트한다. Servo 모터를 0◦~180 ◦ 사이를 이동하도록 한다.

테스트 회로 :

45

Page 46: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (5) Servo Motor 동작 테스트 (계속)

테스트 프로그램 #1

46

#define DELAY_PER_ANGLE 3.3 // usec#define NEUTRAL_DELAY 1150 // usec#define SERVO_PULSE_PERIOD 20 // msec

const int servoPin = 7;int pulseWidth = 0;int angle;

void servoPulse(int servoPin, int angle) {pulseWidth = ((angle-90) * DELAY_PER_ANGLE) + NEUTRAL_DELAY; digitalWrite(servoPin, HIGH);delayMicroseconds(pulseWidth);digitalWrite(servoPin, LOW); Serial.print(“Pulse width = “); Serial.println(pulseWidth);delay(SERVO_PULSE_PERIOD);

}

void setup() {pinMode(servoPin, OUTPUT);Serial.begin(115200);

}

Page 47: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (6) Servo Motor 동작 테스트 (계속)

테스트 프로그램 #1

47

void loop() {for (angle=0; angle <= 180; angle++) {

servoPulse(servoPin, angle);}

}

Page 48: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (7) Servo Motor 동작 테스트 (계속)

테스트 프로그램 #2

48

#define DELAY_PER_ANGLE 3.3 // usec#define NEUTRAL_DELAY 1150 // usec#define SERVO_PULSE_PERIOD 20 // msec

const int servoPin = 7;int pulseWidth = 0;int angle;

void servoPulse(int servoPin, int angle) {pulseWidth = ((angle-90) * DELAY_PER_ANGLE) + NEUTRAL_DELAY; digitalWrite(servoPin, HIGH);delayMicroseconds(pulseWidth);digitalWrite(servoPin, LOW); Serial.print(“Pulse width = “); Serial.println(pulseWidth);delay(SERVO_PULSE_PERIOD);

}

void setup() {pinMode(servoPin, OUTPUT);Serial.begin(115200);Serial.println(“Servo Motor Test Ready…”);

}

Page 49: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (8) Servo Motor 동작 테스트 (계속)

테스트 프로그램 #2

49

void loop() {int val = Serial.read();

if (val >= ‘0’ && val <= ‘9’) {val -= ‘0’;val = val * (180 / 9);Serial.print(“moving servo to “);Serial.println(val, DEC);

for (int i=0; i < 50; i++) {servoPulse(servoPin, val);

}}

}

Page 50: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (8) 테스트 결과 및 검토 사항

Servo Motor 회전을 정확하게 제어할 수 없다 Servo Motor 종류에 따라 pulse width 사양이 다름. 정확한 pulse width 제어가 어려움

Servo Motor 동작 제어하는 동안 다른 동작을 병행할 수 없다. delay() 함수를 사용하여 시간을 조절하기 때문

Timer 장치를 이용하여 해결 가능

아두이노 servo 라이브러리를 사용

50

Page 51: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (9) 아두이노 Servo 라이브러리

아두이노에서 servo 모터를 사용할 수 있도록 지원하는 라이브러리 Mega B/D의 경우, 48개의 servo 모터를 지원 가능

13개 이상의 모터를 사용할 경우 pin 11 & 12의 PWM 기능을 사용할 수 없음

이전의 B/D의 경우, 12개의 servo 모터를 지원가능 pin 9 & 10의 pwm 기능을 사용할 수 없음

주요 함수 attach() : servo PWM 제어 핀을 설정 – attach(pin) / attach(pin, min, max) write() : servo shaft을 원하는 각도만큼 이동 – write(angle)

연속적인 회전 동작인 경우는 속도를 의미

writeMicroseconds() : servo shaft 이동을 시간으로 지정

read() : servo의 현재 angle를 반환

attached() : servo가 attach되어있는지 검사

detach() : 연결된 servo의 연결 해제 – 제어 핀의 PWM 기능 복원

51

Page 52: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (10) 아두이노 Servo 라이브러리

테스트 프로그램 : sweep

52

#include <Servo.h>Servo myservo; // create servo object to control a servoint pos = 0; // variable to store the servo position

void setup() {myservo.attach(7); // attaches the servo on pin 9 to the servo object

}

void loop() {for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees{ // in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position

}for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees{myservo.write(pos); // tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position

}}

Page 53: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

Servo Motors (11) 아두이노 Servo 라이브러리

테스트 프로그램 : knob

53

#include <Servo.h>Servo myservo; // create servo object to control a servoint pos = 0; // variable to store the servo positionint val = 0;

void setup() {myservo.attach(7); // attaches the servo on pin 9 to the servo object

}

void loop() {val = analogRead(0); // read the value of potentimeterval = map(val, 0, 1023, 0, 179)myservo.write(pos); // tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position

}

Page 54: 임베디드시스템개론 - silla.ac.krmclab.silla.ac.kr/lecture/201301/es/es-arduino-lecture-09.pdf · 트랜지스터(Transistor) (2) 트랜지스터의직류특성 활성영역(Active

과제물 #4 과제 내용

1. Servo 모터를 이용하여 차단기를 구현하여라. 물체의 이동을 인식하여 물체가 접근하면 차단기를 올리고, 물체가 지나가

면 차단기를 내리도록 한다.

2. 학기말 과제 최종 설계도를 작성하여 제출하여라

제출물 회로도, 프로그램 소스, 실행 예(사진)

제출일 차주 수업 시간

54