38
임베디드시스템 Lecture #8 : 아날로그 신호 출력

베디드시스템 - mclab.silla.ac.krmclab.silla.ac.kr/lecture/201901/es/es-lecture-08.pdf · DC Reduced Gear Motor ... Toshiba TB6612FNG Dual Driver 13 속성 TB6612FNG 모터전류

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

임베디드시스템

Lecture #8 : 아날로그 신호 출력

강의 목차

1. 아날로그 신호 출력 개요

2. DC 모터 제어

3. RGB LED 제어

2

1. 아날로그 신호 출력 (1) 아날로그 신호 출력

아날로그신호

Low와 High 사이의 다양한(연속적인) 전압 값을 가지는 전기 신호

아날로그신호 출력

다양한 동작 모드를 가지는 액추에이터(Actuator) 장치 등을 제어하기 위해 아날로그 신호 출력 필요

예:

LED On/Off 디지털 신호 출력

모터 회전/중지 제어디지털 신호 출력

모터의 다양한 속도 회전 제어아날로그 신호 출력

3

1. 아날로그 신호 출력 (2) 아날로그 신호 출력 방식

DAC(Digital-to-Analog Converter) 장치

디지털 데이터를 아날로그 전기 신호로 변환하여 출력하는 장치

상당히 복잡한 회로로 구현

일반적으로 경제적인 이유 등으로 MCU가 지원하지 않음

PWM(Pulse Width Modulation) 출력

디지털 신호 출력을 이용한 아날로그 신호 출력을 에뮬레이션(emulation)

펄스 신호(Pulse Signal)의 High 구간 폭을 조절하여 다양한 전압의 신호를출력

펄스 신호(Pulse Signal) – High와 Low 구간을 일정한 주기로 반복하는 출력하는 디지털 신호

Duty Cycle – 펄스 신호의 주기에 대해 펄스의 High 구간 폭의 상대적인 비율

4

1. 아날로그 신호 출력 (3) PWM(Pulse Width Modulation) 출력

PWM(Pulse Width Modulation) 출력

5

PWM 속성(3가지) :

1. 아날로그 신호 출력 (4) PWM(Pulse Width Modulation) 출력

PWM(Pulse Width Modulation) 출력 원리

카운터(Counter)와비교기(Comparator)을이용

6

1. 아날로그 신호 출력 (5) PWM(Pulse Width Modulation) 출력

MBED API - PwmOut

7

PwmOut (PinName pin)

지정된 핀에 연결되는 PwmOut을생성

voidwrite(float value)

float로 표현되는 퍼센티지로 출력 duty-cycle을설정.

float

read ()

float로 표현되는 퍼센티지로 측정된 현재 출력 duty-cycle의 설정

값을 반환

void

period (float seconds)

동일한 duty cycle을 유지하며 float로 표현되는초 단위의 PWM

주기를 설정.

void

period_ms (int ms)

동일한 duty cycle을 유지하며 int로 표현되는 밀리-초 단위의 PW

M 주기를 설정.

void

period_us (int us)

동일한 duty cycle을 유지하며 int로 표현되는 마이크로-초단위

의 PWM 주기를설정.

1. 아날로그 신호 출력 (6) PWM(Pulse Width Modulation) 출력

MBED API - PwmOut

8

PwmOut (PinName pin)

지정된 핀에 연결되는 PwmOut을 생성

void

pulsewidth (float seconds)

동일한주기를 유지하며 float로표현되는 초 단위의 PWM 펄스

폭을 설정.

void

pulsewidth_ms (int ms)

동일한 주기를 유지하며 int로표현되는 밀리-초 단위의 PWM 펄

스 폭을 설정.

void

pulsewidth_us (int us)

동일한 주기를 유지하며 int로표현되는 마이크로-초 단위의 PW

M 펄스 폭을 설정.

PwmOut &operator= (float value)

write()에 대한 연산자 표현

operator float()

read()에대한 연산자 표현

2. DC 모터 제어 (1) DC 모터

DC 전원을이용하여 회전하는모터

DC Reduced Gear Motor – 토크를 높이기위해 감속 기어를 장착한DC 모터

9

2. DC 모터 제어 (2) DC 모터

10

2. DC 모터 제어 (3) DC 모터

11

2. DC 모터 제어 (4) DC 모터 드라이브 IC

DC 모터 제어의 고려 사항

모터는 Nucleo STM32F401RE의 구동전압 3.3volts 보다 높은 전압이 필요

모터는 Nucleo STM32F401RE의 구동 전류 보다 높은 전류를 필요

모터 코일에 의한 voltage spike는 MCU를 손상 시킬 수 있다

위의 고려 사항으로 인해 MCU가 직접 모터를 구동시키지 못함

모터 드라이브 IC를 활용

12

2. DC 모터 제어 (5) 실습 보드 모터 드라이브 IC

Toshiba TB6612FNG Dual Driver

13

속성 TB6612FNG

모터 전류 3.2A peak, 1.2A ave

모터 전압 2.5 ~ 13.5 volts

구동 (driver) dual (two)

2. DC 모터 제어 (6) 실습 보드의 모터 드라이브 IC

회로 구성

14

2. DC 모터 제어 (7) 실습 보드의 모터 드라이브 IC – 핀 기능

15

2. DC 모터 제어 (8) 실습 보드의 모터 드라이브 IC

모터 제어 방법

채널A의AOUT1 (1, 2번)과AOUT2 (5, 6번)은AIN1(21번), AIN2 (22번),

PWM (23번) 그리고 STBY (19번)에 의해 제어

채널 B에 대해서도 채널A와 동일한 방식으로 제어

모터 제어 기능

16

2. DC 모터 제어 (9) 실습 보드의 모터 드라이브 IC

모터 제어 방법

모터 드라이버 IC 회로 구성

STBY 핀Vcc 연결

TTL 논리 게이트(74C00)을 이용하여 IN1 핀과 IN2 핀은 서로 반전

IN1 핀과 PWM 핀 만을 이용하여 모터 제어 가능

채널A 모터

AIN1 핀(PC_8) – 회전 방향 제어

PWMA 핀(PA_7) – PWM 출력으로 회전 속도 제어

채널 B 모터

BIN1 핀(PD_2) – 회전 방향 제어

PWMB 핀(PA_6) – PWM 출력으로 회전 속도 제어

17

2. DC 모터 제어 (10) DC 모터 제어 실습

실습 개요

DC 모터를 양쪽 방향으로 다양한 속도로 회전하도록 제어

모터 제어 코드 모듈(Class)을 별도로 구현

프로젝트생성

프로젝트 이름: motor_control

“Nucleo_mbed_template” 폴더를 복사

폴더 이름 “10_motor_control”,

프로젝트 설정 파일 이름 “motor_control”

18

2. DC 모터 제어 (11) DC 모터 제어 실습

Motor class 헤드 파일 정의

“include” 코드 그룹을 추가하고 Motor 클래스 헤드 파일 구현

19

2. DC 모터 제어 (12) DC 모터 제어 실습

Motor class 헤드 파일 정의 : motordriver.h

20

2. DC 모터 제어 (13) DC 모터 제어 실습

Motor class 헤드 파일 정의 : motordriver.h

21

#ifndef MBED_MOTOR_H

#define MBED_MOTOR_H

#include “mbed.h”

class Motor {

public:

Motor(PinName pwm, PinName dir); // 생성자 함수void forward(double speed);

void backward(double speed);

void stop(void);

protected:

PwmOut _pwm; // PWM 출력 핀DigitalOut _dir; // 모터 회전 방향 제어 핀int sign; // 모터의 현재상태. 이를 이용하여 순방향에서 역

방향으로 바로 방향을 바꾸는 것을 방지한다.

};

#endif

2. DC 모터 제어 (14) DC 모터 제어 실습

헤드 파일 검색 경로 추가

22

2. DC 모터 제어 (15) DC 모터 제어 실습

헤드 파일 검색 경로 추가

23

2. DC 모터 제어 (16) DC 모터 제어 실습

Motor 클래스 구현 : motordriver.cpp

24

2. DC 모터 제어 (17) DC 모터 제어 실습

Motor 클래스 구현 : motordriver.cpp

25

#include “mbed.h”

#include “motordriver.h”

Motor::Motor(PinName pwm, PinName dir):

_pwm(pwm), _dir(dir)

{

// Set initial condition of PWM

_pwm.period(0.001);

_pwm = 0;

// Initial condition of output enables

_dir = 0;

sign = 0; // i.e nothing.

}

2. DC 모터 제어 (18) DC 모터 제어 실습

Motor 클래스 구현 : motordriver.cpp

26

void Motor::forward(double speed) {

float temp = 0;

if (sign == -1) { // 현재 역방향 회전 중임_pwm = 0; // 모터 멈춤wait (0.2);

}

_dir = 1;

temp = abs(speed);

_pwm = temp;

sign = 1;

}

2. DC 모터 제어 (19) DC 모터 제어 실습

Motor 클래스 구현 : motordriver.cpp

27

void Motor::backward(double speed) {

float temp = 0;

if (sign == 1) { // 현재 정방향 회전 중임_pwm = 0; // 모터 멈춤wait (0.2);

}

_dir = 0;

temp = abs(speed);

_pwm = temp;

sign = -1;

}

void Motor::stop(void) {

_pwm = 0;

sign = 0;

}

2. DC 모터 제어 (20) DC 모터 제어 실습

Main 함수 구현 : main.cpp

28

#include “mbed.h”

#include “motordriver.h”

Motor A(D11, PC_8); // pwm, dir

int main() {

while (1) {

// For speed test.

for (double s= 0; s < 1.0 ; s += 0.1) {

A.forward(s); wait(1);

}

A.stop(); wait(3);

for (double s= 0; s < 1.0 ; s += 0.1) {

A.backward(s); wait(1);

}

}

}

2. DC 모터 제어 (21) DC 모터 제어 실습

테스트

프로그램을 빌드하고 다운로드한다.

모터의 회전 동작을 확인한다.

29

2. DC 모터 제어 (22) DC 모터 – 참고 사항

외부 모터의 채널 B 연결

30

3. RGB LED 제어 (1) RGB LED

빨강, 초록, 파랑 색의 광원을 집적하여 다양한 색상을 출력할 수있는 Chip LED

각 광원의 밝기를 개별적으로 제어하여 다양한 색상 출력 가능

31

3. RGB LED 제어 (2) RGB LED

회로 구성

R, G, B 핀에 대해 PWM 출력을 통해 밝기를 개별 제어

32

3. RGB LED 제어 (3) RGB LED 출력 실습

실습 개요

R, G, B 핀으로 출력되는 PWM 신호에 대해 주기를 1msec로 하고, 각각의입력 duty cycle를 주기의 1/100씩 차례로 증가 또는 감소시키면서 색상변화를 확인

프로젝트생성

프로젝트 이름: rgb_led_control

“Nucleo_mbed_template” 폴더를 복사

폴더 이름 “11_rgb_led-control”,

프로젝트 설정 파일 이름 “rgb_led_control”

33

3. RGB LED 제어 (4) RGB LED 출력 실습

구현 – 프로그램 소스

main.cpp

34

#include "mbed.h"

PwmOut r (A1);

PwmOut g (PC_6);

PwmOut b (A3);

int main()

{

r.period(0.001);

g.period(0.001);

b.period(0.001);

while(1) {

for(double i = 0.0; i < 1.0 ; i += 0.001) {

3. RGB LED 제어 (5) RGB LED 출력 실습

구현 – 프로그램 소스

35

double p = 3 * i;

g = 1.0 - ((p < 1.0) ? 1.0 - p : (p > 2.0) ? p - 2.0 :

0.0);

r = 1.0 - ((p < 1.0) ? p : (p < 2.0) ? 1.0 : 2.0 - p);

b = 1.0 - ((p < 1.0) ? 0.0 : (p > 2.0) ? p - 2.0 :

2.0 - p);

wait (0.01);

}

}

}

3. RGB LED 제어 (6) RGB LED 출력 실습

소스 설명

36

g = 1.0 - ((p < 1.0) ? 1.0 - p : (p > 2.0) ? p - 2.0 : 0.0);

if (p < 1.0) {

g = 1.0 - (1.0 – p);

}

else if (p > 2.0) {

g = 1.0 - (p –2.0);

}

else {

g = 1.0;

}

3. RGB LED 제어 (7) RGB LED 출력 실습

소스 설명 – R, G, B 신호 변화

37

3. RGB LED 제어 (8) RGB LED 출력 실습

테스트

프로그램을 빌드하고 다운로드한다.

RGB LED의 출력 색상 변화를 확인한다.

38