임베디드시스템개론 : Arduino 활용 Lecture #9: Motor 제어 2012. 5. 18 by 김영주
강의목차 소형모터개요 트랜지스터를이용한 DC 모터제어 Motor Driver IC를이용한 DC 모터제어 Servo 모터제어 2
3 1. 소형모터 (Motor)
소형모터 (1) 소형모터 전기에너지를회전운동으로변환하는장치모터소형화로다양하게응용되고있음 종류 : AC 모터 DC 모터 BLDC 모터 Servo 모터 Stepping 모터 Geared 모터 4
5 2. 트랜지스터를이용한 DC 모터제어
트랜지스터 (Transistor) (1) 트랜지스터 (Tansistor) 전류흐름에대한스위칭또는증폭동작을수행하는소자 트랜지스터의스위칭동작 : 트랜지스터와기계적인스위치를이용한 LED ON/OFF 동작비교 그림 2-1 6
트랜지스터 (Transistor) (2) 트랜지스터의직류특성 활성영역 (Active Region) 직류상황에서전류 I C 는전류I B 보다 h FE 배만큼더많은전류가흐름 h FE : 전류이득 베이스 (Base) 와이미터 (Emitter) 가순방향으로바이어스 컬렉터 (Collector) 와베이스 (Base) 가역방향으로바이어스 차단영역 (Cutoff Region) 만일 I B 가 0[A] 이면컬렉터전류 I C 는거의 0[A], 트랜지스터는차단 포화영역 (Saturation Region) 베이스와이미터, 컬렉터와베이스가모두순방향 I B 가계속증가하더라도최대로흐를수있는이상으로 I C 는증가하지않음 7
트랜지스터 (Transisteor) (3) 트랜지스터포화 / 차단과스위치 ON/OFF 관계 트랜지스터포화 / 차단전기적특성 기계적인스위치 ON/OFF 에의한전기적특성 8
트랜지스터 (Transistor) (4) 트랜지스터를이용한스위치 ON/OFF 동작구현 [ 그림 2-1] 회로에서의트랜지스터스위치 ON 동작 Base에서연결된출력핀에 High 디지털전압레벨출력 R B 가작으면트랜지스터는포화영역에있게됨트랜지스터는스위치 ON 동작과같게됨트랜지스터의 I C 정격전류까지흐르게할수있음 [ 그림 2-1] 회로의트랜지스터스위치 OFF 동작 Base에연결된출력핀에 Low 디지털전압레벨을출력베이스전류가거의 0[A], 트랜지스터는차단영역에있게됨트랜지스터는스위치 OFF 동작을하게됨 9
트랜지스터 (Transistor) (5) 트랜지스터소자유형 NPN-type Transistor PNP-type Transistor 범용 NPN 트랜지스터 2N2222A 베이스에유입되는전류의크기에따라컬렉터에서이미터로전류이득의배수만큼전류가흐름 차단및포화특성 : 10
트랜지스터 (Transistor) (6) 범용 PNP 트랜지스터 2N2907A NPN 트랜지스터와스위칭동작이반대로이루어짐 베이스에전류유입이차단되면이미터로유입되는전류가컬렉터로흐름 베이스에 Low 디지털전압이출력되면베이스와이미터사이는순방향으로바이스되고, 컬렉터와베이스사이는역방향으로바이스됨. 베이스에 High 디지털전압이출력되면베이스와이미터사이가역방향으로바이스되어전류흐름이차단됨. 11
트랜지스터 (Transistor) (7) 트랜지스터를이용한정격초과전류공급 NPN 트랜지스터를이용한구동회로 - ATmega128 정격을초과하는전류공급사례 고휘도 LED 4 개를구동 PC0 에 HIGH 디지털전압레벨이출력 Q1 의스위칭동작은 ON LED 켜기에충분한전류가흐름 정격규격 : 3.2V / 20mA LOW 디지털전압레벨이출력 Q1 의스위칭동작은 OFF LED 꺼짐 [ NPN 트랜지스터를이용한정격초과전류공급회로 ] 12
트랜지스터 (Transistor) (8) 트랜지스터를이용한정격초과전류공급 NPN 트랜지스터를이용한구동회로 - ATmega128 정격을초과하는전류공급사례 ( 계속 ) I C = 75[mA] 계산값 VCE(Sat)=0.3[V], LED 전압강하 3.2[V] I B = 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 단락 M+ M- 모터전류차단 A, B, C, D 모두개방 ( 혹은 ) A, B 개방혹은 C, D 개방 [ H- 브리지회로와스위치 ] 14
트랜지스터를이용한 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 회로제어 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) 실험결과및검토사항 간소화된 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 회로제어 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 를이용한모터드라이버회로
36 4. Servo 모터제어
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 모형등에반복동작제어등에주로사용회전운동을직선운동으로변환이용 37
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 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 position 2 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 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 모터를지원가능 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 #include <Servo.h> Servo myservo; // create servo object to control a servo int pos = 0; // variable to store the servo position void setup() { myservo.attach(7); } // attaches the servo on pin 9 to the servo object 48 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 } }
Servo Motors (11) 아두이노 Servo 라이브러리 테스트프로그램 : knob #include <Servo.h> Servo myservo; // create servo object to control a servo int pos = 0; // variable to store the servo position int 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 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 과제내용 1. Servo 모터를이용하여차단기를구현하여라. 물체의이동을인식하여물체가접근하면차단기를올리고, 물체가지나가면차단기를내리도록한다. 2. 학기말과제최종설계도를작성하여제출하여라 제출물 회로도, 프로그램소스, 실행예 ( 사진 ) 제출일 차주수업시간 50