9. 모터 제어

임베디드시스템개론
: Arduino 활용
Lecture #9: Motor 제어
2012. 5. 18 by 김 영 주
강의 목차
소형 모터 개요
트랜지스터를 이용한 DC 모터 제어
Motor Driver IC를 이용한 DC 모터 제어
Servo 모터 제어
`
`
`
`
2
1. 소형 모터(Motor)
3
소형 모터 (1)
소형 모터
`
`
전기 에너지를 회전 운동으로 변환하는 장치
모터 소형화로 다양하게 응용되고 있음
`
종류 :
`
`
`
`
`
`
`
4
AC 모터
DC 모터
BLDC 모터
Servo 모터
Stepping 모터
Geared 모터
2. 트랜지스터를 이용한 DC 모터 제어
5
트랜지스터 (Transistor) (1)
트랜지스터(Tansistor)
`
`
전류흐름에 대한 스위칭 또는 증폭 동작을 수행하는 소자
`
트랜지스터의 스위칭 동작 :
`
트랜지스터와 기계적인 스위치를 이용한 LED ON/OFF 동작 비교
그림 2-1
6
트랜지스터 (Transistor) (2)
트랜지스터의 직류 특성
`
`
활성 영역(Active Region)
`
직류 상황에서 전류 IC는 전류 IB보다 hFE배만큼 더 많은 전류가 흐름
…
…
…
`
차단 영역(Cutoff Region)
`
`
만일 IB가 0[A]이면 컬렉터 전류 IC는 거의 0[A], 트랜지스터는 차단
포화 영역(Saturation Region)
`
`
7
hFE : 전류 이득
베이스(Base)와 이미터(Emitter)가 순방향으로 바이어스
컬렉터(Collector)와 베이스(Base)가 역방향으로 바이어스
베이스와 이미터, 컬렉터와 베이스가 모두 순방향
IB 가 계속 증가하더라도 최대로 흐를 수 있는 이상으로 IC는 증가하지 않
음
트랜지스터 (Transisteor) (3)
트랜지스터 포화/차단과 스위치 ON/OFF 관계
`
8
`
트랜지스터 포화/차단 전기적 특성
`
기계적인 스위치 ON/OFF에 의한 전기적 특성
트랜지스터 (Transistor) (4)
트랜지스터를 이용한 스위치 ON/OFF 동작 구현
`
`
[그림 2-1] 회로에서의 트랜지스터 스위치 ON 동작
`
`
`
`
`
[그림 2-1] 회로의 트랜지스터 스위치 OFF 동작
`
`
`
9
Base에서 연결된 출력 핀에 High 디지털 전압레벨 출력
RB가 작으면 트랜지스터는 포화 영역에 있게 됨
트랜지스터는 스위치 ON 동작과 같게 됨
트랜지스터의 IC 정격 전류까지 흐르게 할 수 있음
Base에 연결된 출력 핀에 Low 디지털 전압레벨을 출력
베이스 전류가 거의 0[A], 트랜지스터는 차단 영역에 있게 됨
트랜지스터는 스위치 OFF 동작을 하게 됨
트랜지스터 (Transistor) (5)
`
트랜지스터 소자 유형
`
`
`
NPN-type Transistor
PNP-type Transistor
범용 NPN 트랜지스터 2N2222A
`
`
10
베이스에 유입되는 전류의 크기에 따라 컬렉터에서 이미터로 전류
이득의 배수만큼 전류가 흐름
차단 및 포화 특성:
트랜지스터 (Transistor) (6)
`
범용 PNP 트랜지스터
2N2907A
`
`
NPN 트랜지스터와 스위칭
동작이 반대로 이루어짐
베이스에 전류 유입이 차
단되면 이미터로 유입되는
전류가 컬렉터로 흐름
`
`
11
베이스에 Low 디지털 전압
이 출력되면 베이스와 이미
터 사이는 순방향으로 바이
스되고, 컬렉터와 베이스
사이는 역방향으로 바이스
됨.
베이스에 High 디지털 전
압이 출력되면 베이스와 이
미터 사이가 역방향으로 바
이스되어 전류 흐름이 차단
됨.
트랜지스터 (Transistor) (7)
`
트랜지스터를 이용한 정격초과전류 공급
`
NPN 트랜지스터를 이용한 구동 회로 - ATmega128 정격을 초과하는
전류 공급 사례
`
`
고휘도 LED 4개를 구동
PC0에 HIGH 디지털 전압레벨이 출력
…
…
`
정격규격:
3.2V / 20mA
Q1의 스위칭 동작은 ON
LED 켜기에 충분한 전류가 흐름
LOW 디지털 전압레벨이 출력
…
…
Q1의 스위칭 동작은 OFF
LED 꺼짐
[ NPN 트랜지스터를 이용한 정격 초과전류 공급 회로 ]
12
트랜지스터 (Transistor) (8)
`
트랜지스터를 이용한 정격초과전류 공급
`
NPN 트랜지스터를 이용한 구동 회로 - ATmega128 정격을 초과하는
전류 공급 사례 (계속)
`
IC = 75[mA] 계산 값
…
`
IB = 6[mA] 계산 값, 출력 핀으로 충분히 공급할 수 있음
…
`
13
VCE(Sat)=0.3[V], LED 전압강하 3.2[V]
20[Ω] 양단의 전압강하는 5-3.2-0.3 = 3.5[V]
측정값 77[mA]
트랜지스터를 이용한 DC 모터 제어 (1)
`
H-Bridge 회로를 이용한 소형 DC 모터 정·역 회전
`
H-Bridge 회로
`
모터의 전류 흐름 : 좌 Æ 우
…
…
`
모터의 전류 흐름 : 우 Æ 좌
…
…
`
A, D 단락
B, C 개방
A, D 개방
B, C 단락
M+
M-
모터 전류 차단
…
…
A, B, C, D 모두 개방
(혹은) A, B 개방 혹은 C, D 개방
[ H-브리지 회로와 스위치]
14
트랜지스터를 이용한 DC 모터 제어 (2)
`
소형 모터 구동을 위한 H-브리지 회로
[ H-브리지 회로를 이용한 DC 모터 정·역방향 제어 회로 ]
15
트랜지스터를 이용한 DC 모터 제어 (3)
`
소형 모터 구동을 위한 H-브리지 회로 (계속)
`
베이스 저항값이 470[Ω]일 때
`
`
DC 모터 양단에 걸리는 전압
`
16
직류 전류 이득을 50이라 가정하면 450[mA] 까지 구동할 수 있음
4.6[V], 450[mA] 범위의 소형 또는 마이크로 DC 모터를 구동
트랜지스터를 이용한 DC 모터 제어 (4)
`
소형 모터 구동을 위한 H-브리지 회로 (계속)
`
17
DC 모터 회전을 위한 A, B, C, D 입력 신호
트랜지스터를 이용한 DC 모터 제어 (5)
`
소형 모터 구동을 위한 H-브리지 회로 (계속)
`
18
소형 모터를 위한 간소화된 회로
트랜지스터를 이용한 DC 모터 제어 (6)
`
소형 모터 구동을 위한 H-브리지 회로 (계속)
`
19
간소화된 회로에서의 DC 모터 회전을 위한 입력 제어
H-Bridge 회로를 이용한 DC 모터 제어실험 (1)
`
실험 개요
`
`
간소화된 H-Bridge 회로를 이용하여 DC 모터의 회전을 제어한다.
사전 요구사항
`
`
`
20
트랜지스터의 특성을 이해하여야 한다.
DC 모터의 동작 방식을 이해하여야 한다.
H-Bridge 회로의 동작 원리를 이해하여야 한다.
H-Bridge 회로를 이용한 DC 모터 제어실험 (2)
`
회로도 및 회로 구성
`
21
회로도
H-Bridge 회로를 이용한 DC 모터 제어실험 (3)
`
회로도 및 회로 구성
`
22
회로 구성
H-Bridge 회로를 이용한 DC 모터 제어실험 (4)
`
아두이노 프로그램 : H-Bridge 회로 제어
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 rotation
digitalWrite(BDPin, HIGH);
delay(2000);
digitalWrite(ACPin, HIGH); // reverse rotation
digitalWrite(BDPin, LOW);
delay(2000);
digitalWrite(ACPin, HIGH); // stop
digitalWrite(BDPin, HIGH);
delay(500);
}
23
H-Bridge 회로를 이용한 DC 모터 제어실험 (5)
`
실험 결과 및 검토 사항
`
`
24
간소화된 H-Bridge 회로에서는 단순히 DC 모터의 회전 방향만 전환
할 수 있다.
DC 모터의 속도를 제어할 수 있는 방법은?
Î DC 모터에서 양극 사이(M+과 M-사이)에 흐르는 전류량을 제어
Î 트랜지스터는 베이스에 공급되는 전류량에 따라 컬렉터와 이미
터 사이에 흐르는 전류량이 증가함.
Î 베이스에 공급되는 전류량을 PWM으로 제어 가능
H-Bridge 회로를 이용한 DC 모터 제어실험 (6)
`
속도제어 H-Bridge 회로
25
H-Bridge 회로를 이용한 DC 모터 제어실험 (8)
`
수정 회로도 및 회로 구성
`
26
수정 회로도
H-Bridge 회로를 이용한 DC 모터 제어실험 (9)
`
회로도 및 회로 구성
`
27
회로 구성
H-Bridge 회로를 이용한 DC 모터 제어실험 (10)
`
아두이노 프로그램 : 속도 조절 H-Bridge 회로 제어
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 rotation
digitalWrite(BDPin, HIGH);
delay(2000);
28
H-Bridge 회로를 이용한 DC 모터 제어실험 (11)
`
아두이노 프로그램 : 속도 조절 H-Bridge 회로 제어
digitalWrite(ACPin, HIGH); // reverse rotation
digitalWrite(BDPin, LOW);
delay(2000);
digitalWrite(ACPin, HIGH); // stop
digitalWrite(BDPin, HIGH);
delay(500);
}
}
29
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
reading
DC motor
High-torque gearing
Potentiometer to read position
`
`
`
Feedback circuitry to read pot and control motor
All built in, you just feed it a PWM signal
`
`
`
37
Can be positioned from 0-180º
Easy three-wire PWM 5V interface
RC 모형 등에 반복 동작 제어 등에 주로 사용
회전 운동을 직선 운동으로 변환 이용
Servo Motors (2)
`
Servo Motors (계속)
`
다양한 크기를 지원
모든 종류가 동일한 3-wire I/F 지원
`
서보 모터 사양 예:
`
`
`
`
`
`
38
weight: 9g
speed: .12s/60deg @ 6V
torque: 22oz/1.5kg @ 6V
voltage: 4.6~6V
size: 21x11x28 mm
Servo Motors (3)
`
Servo Motor 제어
`
`
PWM Freq. = 50Hz(i.e. every 20 millisecs)
Pulse width = from 1 to 2 millisecs
`
`
39
1 millisec = full anti-clockwise position
2 millisec = full clockwise position
Servo Motors (3)
`
Servo Motor 동작
`
40
실제로는 pulse 폭은 500 usec에서 2500 usec 사이에서 제어 가능
Servo Motors (4)
`
Servo Motor 동작 테스트
`
아두이노를 이용하여 servo 모터 회전 동작을 테스트한다.
Servo 모터를 0◦~180 ◦ 사이를 이동하도록 한다.
`
테스트 회로 :
`
41
Servo Motors (5)
`
Servo Motor 동작 테스트 (계속)
`
테스트 프로그램 #1
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);
}
42
Servo Motors (6)
`
Servo Motor 동작 테스트 (계속)
`
테스트 프로그램 #1
void loop() {
for (angle=0; angle <= 180; angle++) {
servoPulse(servoPin, angle);
}
}
43
Servo Motors (7)
`
Servo Motor 동작 테스트 (계속)
`
테스트 프로그램 #2
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…”);
}
44
Servo Motors (8)
`
Servo Motor 동작 테스트 (계속)
테스트 프로그램 #2
`
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);
}
}
}
45
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 모터를 지원 가능
`
`
이전의 B/D의 경우, 12개의 servo 모터를 지원가능
`
`
13개 이상의 모터를 사용할 경우 pin 11 & 12의 PWM 기능을 사용할 수 없음
pin 9 & 10의 pwm 기능을 사용할 수 없음
주요 함수
`
`
attach() : servo PWM 제어 핀을 설정 – attach(pin) / attach(pin, main, max)
write() : servo shaft을 원하는 각도만큼 이동 – write(angle)
…
`
`
`
`
47
연속적인 회전 동작인 경우는 속도를 의미
writeMicroseconds() : servo shaft 이동은 시간으로 지정
read() : servo의 현재 angle를 반환
attached() : servo가 attach되어있는지 검사
detach() : 연결된 servo의 연결 해제 – 제어 핀의 PWM 기능 복원
Servo Motors (10)
`
아두이노 Servo 라이브러리
`
테스트 프로그램 : sweep
#include <Servo.h>
Servo myservo;
int pos = 0;
void setup() {
myservo.attach(7);
}
// create servo object to control a servo
// variable to store the servo position
// 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 degree
myservo.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
}
}
48
Servo Motors (11)
`
아두이노 Servo 라이브러리
`
테스트 프로그램 : knob
#include <Servo.h>
Servo myservo;
int pos = 0;
int val = 0;
// create servo object to control a servo
// variable to store the servo position
void setup() {
myservo.attach(7);
}
// attaches the servo on pin 9 to the servo object
void loop() {
val = analogRead(0);
// read the value of potentimeter
val = 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
}
49
과제물 #4
`
과제 내용
Servo 모터를 이용하여 차단기를 구현하여라.
1.
9
2.
학기말 과제 최종 설계도를 작성하여 제출하여라
제출물
`
`
`
물체의 이동을 인식하여 물체가 접근하면 차단기를 올리고, 물체가 지나가
면 차단기를 내리도록 한다.
회로도, 프로그램 소스, 실행 예(사진)
제출일
`
50
차주 수업 시간