임베디드시스템개론 -...
TRANSCRIPT
소형 모터 (1)소형 모터
전기 에너지를 회전 운동으로 변환하는 장치모터 소형화로 다양하게 응용되고 있음
종류 :AC 모터
DC 모터
BLDC 모터
Servo 모터
Stepping 모터
Geared 모터
4
트랜지스터 (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
트랜지스터 (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 모터 제어 (3)소형 모터 구동을 위한 H-브리지 회로 (계속)
베이스 저항값이 470[Ω]일 때
직류 전류 이득을 50이라 가정하면 450[mA] 까지 구동할 수 있음
DC 모터 양단에 걸리는 전압
4.6[V], 450[mA] 범위의 소형 또는 마이크로 DC 모터를 구동
16
H-Bridge 회로를 이용한 DC 모터 제어실험 (1)실험 개요
간소화된 H-Bridge 회로를 이용하여 DC 모터의 회전을 제어한다.
사전 요구사항트랜지스터의 특성을 이해하여야 한다.DC 모터의 동작 방식을 이해하여야 한다.H-Bridge 회로의 동작 원리를 이해하여야 한다.
20
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 모터 제어실험 (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);
TA8050P (1)TA8050P
간단한 모터 드라이버 IC회전 방향 전환만 제어 가능정격전류 3A까지 지원 가능별도의 주변 소자가 필요없음주의사항:
모터 전압이 아두이노 공급 전압보다 높아야 함.
IC와 아두이노가 동일한 접지를사용하여야 함.
L298 (1)L298 Series
대형 패키지 형태로 과열보호 기능지원DC 46V까지의 동작전압과DC4A까지의 전류제어 가능
PWM을 이용하여 속도 제어 가능
논리입력 1.5V, Dual Bidirectional 타입의 IC주로 중형 DC모터를 제어하는 데사용
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 (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