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

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

Upload: duonglien

Post on 28-Jul-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

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

Lecture #9: Motor 제어

2012. 5. 18 by 김 영 주

강의 목차

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

2

1. 소형 모터(Motor)

3

소형 모터 (1)소형 모터

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

종류 :AC 모터

DC 모터

BLDC 모터

Servo 모터

Stepping 모터

Geared 모터

4

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

5

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

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

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

6

그림 2-1

트랜지스터 (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

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

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

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

8

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

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

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

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

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

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

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

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

9

트랜지스터 (Transistor) (5)트랜지스터 소자 유형

NPN-type TransistorPNP-type Transistor

범용 NPN 트랜지스터 2N2222A베이스에 유입되는 전류의 크기에 따라 컬렉터에서 이미터로 전류이득의 배수만큼 전류가 흐름차단 및 포화 특성:

10

트랜지스터 (Transistor) (6)범용 PNP 트랜지스터2N2907A

NPN 트랜지스터와 스위칭동작이 반대로 이루어짐

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

베이스에 Low 디지털 전압이 출력되면 베이스와 이미터 사이는 순방향으로 바이스되고, 컬렉터와 베이스사이는 역방향으로 바이스됨.

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

11

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

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

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

고휘도 LED 4개를 구동

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

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

12

정격규격:3.2V / 20mA

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

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

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

IB = 6[mA] 계산 값, 출력 핀으로 충분히 공급할 수 있음20[Ω] 양단의 전압강하는 5-3.2-0.3 = 3.5[V]

측정값 77[mA]

13

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

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

A, D 단락B, C 개방

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

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

14

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

M+

M-

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

15

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

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

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

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

DC 모터 양단에 걸리는 전압

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

16

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

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

17

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

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

18

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

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

19

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

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

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

20

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

회로도

21

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

회로 구성

22

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

23

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

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);

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

간소화된 H-Bridge 회로에서는 단순히 DC 모터의 회전 방향만 전환할 수 있다.DC 모터의 속도를 제어할 수 있는 방법은?

DC 모터에서 양극 사이(M+과 M-사이)에 흐르는 전류량을 제어트랜지스터는 베이스에 공급되는 전류량에 따라 컬렉터와 이미

터 사이에 흐르는 전류량이 증가함.베이스에 공급되는 전류량을 PWM으로 제어 가능

24

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

25

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

수정 회로도

26

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

회로 구성

27

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

28

const int ACPin = 2;const int BDPin = 2;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);

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

29

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

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

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

30

TA8050P (1)TA8050P

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

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

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

TA8050P (2)TA8050P 사용 예:

L298 (1)L298 Series

대형 패키지 형태로 과열보호 기능지원DC 46V까지의 동작전압과DC4A까지의 전류제어 가능

PWM을 이용하여 속도 제어 가능

논리입력 1.5V, Dual Bidirectional 타입의 IC주로 중형 DC모터를 제어하는 데사용

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

과 Motor 공급전압이 틀림

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

4. Servo 모터 제어

36

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 readingDC motorHigh-torque gearingPotentiometer to read position

Can be positioned from 0-180º

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

Easy three-wire PWM 5V interface

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

37

Servo Motors (2)Servo Motors (계속)

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

서보 모터 사양 예:weight: 9gspeed: .12s/60deg @ 6Vtorque: 22oz/1.5kg @ 6Vvoltage: 4.6~6Vsize: 21x11x28 mm

38

Servo Motors (3)Servo Motor 제어

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

1 millisec = full anti-clockwise position2 millisec = full clockwise position

39

Servo Motors (3)Servo Motor 동작

실제로는 pulse 폭은 500 usec에서 2500 usec 사이에서 제어 가능

40

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

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

테스트 회로 :

41

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

테스트 프로그램 #1

42

const int servoPin = 7;

int pulseWidth = 0;int angle;

void servoPulse(int servoPin, int angle) pulseWidth = (angle * 3.3) + 1150; digitalWrite(servoPin, HIGH);delayMicroseconds(pulseWidth);digitalWrite(servoPin, LOW); Serial.print(“Pulse width = “); Serial.println(pulseWidth);delay(20);

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

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

테스트 프로그램 #1

43

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

servoPulse(servoPin, angle);

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

테스트 프로그램 #2

44

const int servoPin = 7;

int pulseWidth = 0;int angle;

void servoPulse(int servoPin, int angle) pulseWidth = (angle * 3.3) + 1150; digitalWrite(servoPin, HIGH);delayMicroseconds(pulseWidth);digitalWrite(servoPin, LOW); Serial.print(“Pulse width = “); Serial.println(pulseWidth);delay(20);

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

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

테스트 프로그램 #2

45

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);

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

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

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

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

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

46

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, main, max)write() : servo shaft을 원하는 각도만큼 이동 – write(angle)

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

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

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

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

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

47

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

테스트 프로그램 : sweep

48

#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 degreesmyservo.write(pos); // tell servo to go to position in variable 'pos'

delay(15); // waits 15ms for the servo to reach the position

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

테스트 프로그램 : knob

49

#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

과제물 #4과제 내용1. Servo 모터를 이용하여 차단기를 구현하여라.

물체의 이동을 인식하여 물체가 접근하면 차단기를 올리고, 물체가 지나가면 차단기를 내리도록 한다.

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

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

제출일차주 수업 시간

50