USB Tester 



6) PADS Layout 설계


 모든 부품 선택과 회로 설계를 마치고 PADS Layout을 통하여 PCB 아트웍을 하였습니다.




 회로 설계할 때는 PADS VX.2.1로 했는데 제가 가지고 있는 PADS는 9.5버전이라 Layout은 호환이 되질 않네요. 아쉽지만 설계할 때 찍은 사진으로 대신하겠습니다.


 보시면 위에 가장 두꺼운 선은 전원단입니다. 왼쪽은 USB MALE이고 오른쪽은 USB FEMALE 입니다. MALE로 들어온 전원이 FEMALE로 연결되어 FEMALE 쪽에서 벅 컨버터(Buck Converter)를 통하여 5V 전원을 만들도록 하였습니다. 그리고 그 옆에 바로 전류센서를 달아 전류를 측정하도록 하였습니다.


 2층으로 설계하여 앞면에는 Text LCD와 스위치, 그리고 USB 커넥터를 달았고 나머지 소자들은 모두 Bottom에 놓았습니다.


 컴퓨터의 USB에서는 많은 전류가 나오지 않지만 USB 충전기에서는 높은 전류가 출력이 됩니다. 그래서 USB 전원은 1.3mm의 굵기로 깔았고 5V 전원은 0.5mm 그리고 나머지 선들은 0.2mm의 디자인 룰을 가지고 설계하였습니다.


 마지막으로 넓게 Ground Cooper를 깔아 따로 Ground 선을 연결하지 않고 Cooper를 통해 연결하도록 하였습니다.

'Project > USB Tester' 카테고리의 다른 글

[USB Tester] 5. PADS Logic 설계  (0) 2018.01.06
[USB Tester] 4. Text Lcd  (0) 2018.01.06
[USB Tester] 3. 레귤레이터(Buck Converter)  (0) 2017.12.12
[USB Tester] 2. ATmega328과 전류 센서 ACS712  (0) 2017.12.12
[USB Tester] 1. 개요  (0) 2017.12.06

USB Tester 


USB Tester를 만들면서 글을 작성하려고 했는데 그게 잘 안되었네요.

현재 USB Tester를 완성하였습니다. 하지만 글은 제가 진행했던 순서대로 작성하도록 하겠습니다.


5) PADS Logic 설계


 3주라는 짧은 시간 동안 USB Tester를 제작하기 위하여 1주일 동안 부품들을 선택하고 ATmega328과 그 주변 회로를 설계하였습니다.

소자들을 선택함에 있어서 최대한 크기를 작게 하기 위해 SMD 타입의 소자들을 선택하였습니다.


  • MCU


[그림 1] ATmega328과 주변회로


 위의 그림은 ATmega328과 주변 회로도입니다. 위에 보시면 커패시터 4개와 인덕터 1개가 보입니다. 커패시터 4개는 모두 Decoupling Cap입니다. 그러면 인덕터 L1은 무엇일까요? 바로 아날로그 노이즈 제거를 위하여 사용되었습니다. ATmega328 데이터 시트의 아날로그 노이즈 제거 기술 편을 참고하면 아날로그 신호는 가능한 짧게 연결하도록 되어있습니다. 그리고 디바이스의 AVCC 핀이 LC를 통해 디지털 VCC 공급 전압에 연결되어야 하도록 되어있습니다.


[그림 2] AVCC 회로


 저는 데이터시트에서 제공한 대로 회로를 작성하였습니다.

다음은 리셋입니다. 리셋을 보면 풀업저항이 달려있고 그 옆에 다이오드가 있습니다. 풀업저항은 왜 달아야 하는지 아실 것입니다. 그렇다면 다이오드는 왜 있을까요? 다이오드는 스위치가 눌리고 떨어질 때 생기는 노이즈를 제거하기 위하여 달았습니다. 다이오드의 문턱전압은 0.7V인데 스위치가 눌리고 떨어질 때 5V 이상의 전압이 발생할수 있습니다. 이때의 전압이 그대로 MCU에 들어간다면 MCU가 오작동 할 수 있기 때문에 5V를 기준으로 0.7V 이상 되는 전압은 다이오드를 통하여 5V로 흘러가도록 해 준 것입니다.

 그리고 MCU의 동작 주파수는 16MHz로 설정하였고 크리스탈(Crystal) SX-8을 선택하였습니다. 또한 박스 헤더 6핀을 놓아 SPI 통신으로 ATmega328에 펌웨어를 올리도록 하였습니다.

 마지막으로 PORT C와 D를 보면 Text LCD가 8비트 제어로 동작할 것임을 알 수 있고 제가 선택한 전류센서 ACS712가 ADC0으로 연결 되었다는 것을 볼 수 있습니다.


  • Text LCD

[그림 3] Text LCD 회로


 위의 회로는 Text LCD 회로입니다. 여기도 MCU와 똑같이 0.1uF의 Decoupling Cap을 사용하였습니다. 백라이트를 위해 15번 핀에 10Ω의 저항을 달았고  3번 핀은 명암 조절을 위한 핀인데 주로 가변저항을 달아 명암을 조절합니다. 하지만 저는 가변저항을 사용하지 않았습니다. 대신 10:1의 저항비를 사용하여 명암을 나타내었습니다.


  • 전류센서

[그림 4] 전류센서 회로


 다음은 전류센서 회로입니다. 이전에 전류센서 파트에서 설명하였다시피 데이터시트에서 제공하는 대로 회로를 구성하였습니다. 마찬가지로 전원에는  Decoupling Cap를 달았습니다. IP+ 와 IP-는 USB의 전원 라인입니다. IP+는 USB MALE의 전원이고 IP-는 USB FEMALE의 전원입니다.


  • 전원 회로와 USB 커넥터


[그림 5] 전원 회로와 USB 커넥터


 마지막으로 전원과 USB 커넥터입니다. 저는 USB Tester를 제작하면서 USB 통신도 할 수 있도록 모든 데이터 선을 연결하였습니다. 또한 USB 3.0까지 동작하기 위하여 USB 3.0 커넥터를 선택하였습니다. USB 3.0은 USB 2.0보다 5개가 핀이 더 많습니다. 그리고 전원을 끊어 전류센서와 연결하여 전원에 들어오는 전류를 측정하도록 하였습니다.

 그리고 전원단에는 스위치를 달았습니다. 제가 짧은 시간 내로 USB Tester를 제작하고 블랙프라이데이가 겹치다 보니 부품 수급에 어려움이 있었습니다. 그래서 국내에서 구하기 쉬운 LM2596을 선택하였습니다. 하지만 LM2596은 Buck Converter이기 때문에 1.5~2V의 전압강하가 일어납니다. 그 말은 5V의 전원을 인가했을 때 5V의 전압이 출력이 될 수 없다는 것입니다. 그래서 5V 전원을 사용하는 USB일 경우에는 USB 전원으로 동작을 수행하도록 하기 위해 스위치를 달았습니다.


'Project > USB Tester' 카테고리의 다른 글

[USB Tester] 6. PADS Layout 설계  (0) 2018.01.06
[USB Tester] 4. Text Lcd  (0) 2018.01.06
[USB Tester] 3. 레귤레이터(Buck Converter)  (0) 2017.12.12
[USB Tester] 2. ATmega328과 전류 센서 ACS712  (0) 2017.12.12
[USB Tester] 1. 개요  (0) 2017.12.06

USB Tester 


4) Text Lcd


Text LCD(Character LCD) LCD화면에 정해진 형태의 문자를 정해진 개수만큼 표시할 있도록 만들어진 LCD 디스플레이 장치로서, 간단한 문자 표시가 필요한 각종 임베디드 장치들에서 널리 사용되고 있다. TEXT LCD 실생활에 매우 많이 사용되고 있는 주변장치이다. USB Tester 사용된 Text LCD 구조는 16문자*2라인의 표시부를 가지며, 표시부 상단에 커넥터가 위치한다. LCD에는 Backlight 기능이 포함되어 있다. 아래의 표는 사용되는 인터페이스 커넥터 핀의 기능을 요약한 것이다.


[표 1]인터페이스 커넥터 핀 기능

Signal Name

 

1

VSS

전원 GND

2

VDD

전원 +5VDC

3

VEE

Contrast 제어 전압레벨 (VDD-VEE = 13.5 ~ 0V)

4

RS

Register Select ( 0 = instruction, 1 = data )

5

R/W

Read/Write ( 0 = FPGA -> LCD, 1 : FPGA <- LCD )

6

E

Enable Signal for read/write LCD

7

DB0 (LSB)

DATA

8

DB1

9

DB2

10

DB3

11

DB4

12

DB5

13

DB6

14

DB7 (MSB)

15

A

+LED (backlight LED용 전원 +4.4 ~ 4.7V)

16

K

-LED (backlight LED용 전원 GND)

 

TEXT LCD 보통 LCD 표시부와 LCD 제어부를 하나로 하여 LCD 모듈로 시판된다. LCD 제어기는 다음과 같이 구성된다.

LCD제어기 내부에는 명령(Instruction) 데이터(Data) 위한 2개의 레지스터, BF (Busy Flag), AC(Address Counter), 문자발생램(CGRAM), 문자발생롬(CGROM), 데이터표시램(DDRAM) 있다.

LCD 제어기의 내장 레지스터는 다음과 같다.

  • 명령레지스터(IR): DDRAM CGRAM 대한 어드레스와 클리어, 커서시프트 제어명령을 보유

  • 데이터레지스터(DR): DDRAM CGRAM 데이터나 읽은 데이터를 일시적으로 저장

 

위의 레지스터들은 RS(4번핀) R/W(5번핀) 사용하여 선택을 있다. 선택 방법은 다음과 같다.

 

 [표 2] RS, R/W 신호에 따른 TEXT LCD 제어기 레지스터 선택방법

RS

R/W

레지스터 접근

0

0

IR쓰기(각종 제어 명령 쓰기)

0

1

BF읽기, AC읽기

1

0

DR쓰기

1

1

DR읽기


  • AC : DDRAM CGRAM 주소를 지정할 사용하는데 IR 주소 정보를 쓰면 주소 정보가 AC 전송되고 DDRAM이나 DDROM 데이터를 쓰면  AC 자동으로 +1 혹은 -1 된다.

  • DDRAM(Data Display RAM) : 80x8비트 용량으로 80개의 8비트 아스키(ASCII)코드를 저장할 있다. 0x00-0F 주소가 LCD 1행의 1-16번째, 0x40-4F  주소가 LCD 2행의 1-16번째 문자로 표시된다.(1 2행의 번호 불연속임에 주의해야 한다.)

  • CGRAM(Character Generator RAM) : 사용자가 자유로이 문자를 만들 사용하는 램으로 5x7 8, 5x10 4 만들어 저장 가능하다.

  • CGROM(Character Generator ROM) : 5x7, 5x10 도트의 문자를 내장하고 있다. 특수기호, 숫자, 영문자의 문자코드는 아스키코드와 일치한다.

 

LCD 모듈을 제어할 때는 제어신호의 동작 타이밍을 고려하여야 하며, 일반 반도체 소자들에 비해 엑세스 타임이 편이므로 유의하여야 한다. 아래의 그림은 LCD 모듈의 Read Write 동작시의 타이밍이다.

 

[그림 1] TEXT LCD R/W Timing

 

다음의 표는 LCD 모듈에 문자 등을 표시하기 위한 제어 명령이며, LCD 모듈은 명령을 실행하기 위해 일정한 시간을 요구하므로 다음 명령을 보내기 전에 충분히 지연시키거나, BUSY FLAG 체크하여 앞에서 전송한 명령의 실행완료 상태를 체크하여야 한다.

 

[3] LCD 모듈 표시 제어명령

기능

제어신호

제 어 명 령

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Clear Display

0

0

0

0

0

0

0

0

0

1

Return Home

0

0

0

0

0

0

0

0

1

0

Entry Mode Set

0

0

0

0

0

0

0

1

I/D

S

Display ON/OFF Control

0

0

0

0

0

0

1

D

C

B

Cursor or Display Shift

0

0

0

0

0

1

S/C

R/L

0

0

Function Set

0

0

0

0

1

DL

N

F

0

0

Set CG RAM address

0

0

0

1

CG RAM address

Set DD RAM address

0

0

1

DD RAM address

Read busy flag and address

0

1

BF

Address Counter

Data write to CG RAM or DD RAM

1

0

Write address

Data read from CG RAM or

DD RAM

1

1

Read address

 

  • CLEAR DISPLAY

모든 디스플레이 상태를 소거하고 커서를 Home 위치로 돌려놓는다.

  • Return Home

DD RAM 내용은 변경하지 않고 커서만을 Home으로 위치시킨다.

  • Entry Mode SET

데이터를 Read 하거나 Write 경우에 커서의 위치를 증가시킬 것인가 (I/D=1) 감소시킬 것인가 (I/D=0) 결정하며, 이때 화면을 이동 것인지 (S=1) 아닌지 (S=0) 결정한다.

  • Display ON/OFF Control

화면 표시를 ON/OFF 하거나(D) 커서를 ON/OFF 하거나(C) 커서를 깜박이게 것인지(B) 여부를 지정한다.

  • Cursor or Display Shift

화면(S/C=1) 또는 커서(S/C=0) 오른쪽(R/L=1) 또는 왼쪽(R/L=0)으로 이동한다.

  • Function SET

인터페이스에서 데이터의 길이를 8비트(DL=1) 또는 4비트(DL=0) 지정하고, 화면 표시 행수를 2(N=1) 또는 1(N=0)으로 지정하며, 문자의 폰트를 5x10 도트(F=1) 또는 5x7 도트(F=0) 지정한다.

전원 투입 최초에는 주로 명령을 보내게 되는데, LCD 모듈이 리셋 되려면 50ms 소요되므로 충분히 기다린 후에 코드를 보내야 한다. 또한, 4비트 인터페이스 경우에는 상위 4 비트를 먼저 전송하고 다음에 하위 4 비트를 전송해야 한다.

  • Set CG RAM Address

Character Generator RAM 어드레스를 지정한다. 이후에 송수신 하는 데이터는 CG RAM 데이터이다.

  • Set DD RAM Address

Display Data RAM 어드레스를 지정한다. 이후에 송수신하는 데이터는 DD RAM 데이터이다.

  • Read Busy Flag & Address

LCD 모듈이 내부 동작중임을 나타내는 Busy Flag(BF) 어드레스 카운터의 내용을 read 한다. LCD 모듈이 제어 코드를 실행하는 데는 일정한 시간이 필요하므로 MCU BF 읽어 1 경우에는 기다리고 0 경우 다음 제어 코드를 보내는 방법을 사용하면 보다 효율적인 처리가 가능하다

 

DD RAM 어드레스

DD RAM 표시될 문자의 ASCII 코드 데이터가 저장되어 있는 메모리이며 모두 80개의 번지가 있는데, 화면의 행과 열의 위치에는 고유한 어드레스 값이 부여된다. 그런데, 행과 사이의 어드레스가 연속하여 있지 않으므로 주의하여야 한다. 아래 표는 표시 문자의 위치에 대한 DD RAM 어드레스이다.

 

[표 4] 표시문자 위치에 대한 DD RAM 어드레스

구분

1

2

3

4

……

13

14

15

16

Line1

00

01

02

03

……

0D

0E

0F

10

Line2

40

41

42

43

……

4D

4E

4F

50

 

[표 5] ASCII 도형문자 종류 및 코드 값


구분

00H

10H

20H

30H

40H

50H

60H

70H

80H

90H

0

사용자 정의

영역

미사용 영역

 

0

@

P

`

p

미사용 영역

1

!

1

A

Q

a

q

2

"

2

B

R

b

r

3

#

3

C

S

c

s

4

$

4

D

T

d

t

5

%

5

E

U

e

u

6

&

6

F

V

f

v

7

'

7

G

W

g

w

8

(

8

H

X

h

x

9

)

9

I

Y

I

y

A

*

:

J

Z

j

z

B

+

;

K

[

k

{

C

,

< 

L

¥

l

|

D

-

=

M

]

m

}

E

.

> 

N

^

n

F

/

?

O

_

o

 

다음은 TextLCD 구동회로를 보여주고 있다.

 


[그림 2] TEXT LCD 구동회로

USB Tester 


3) 레귤레이터(Buck Converter)


 레귤레이터는 어떠한 입력 전원에 대하여 미리 설정한 전압으로 일정하게 유지시켜주는 소자이다.

레귤레이터는 가지 방식으로 분류되는데 리니어 방식(Linear Regulator) 스위칭 방식(Switching Regulator : SMPS)으로 분류된다.

리니어 방식은 직접 전압 떨어뜨리는 방식이기 때문에 변환 과정에서 발열이 발생한다. 이때 발생되는 열은 전기에너지가 열로 소모될 때에 나타나는 것이기 때문에 전력 효율이 비교적 낮다는 단점을 가지고 있다. 이러한 이유로 전류량이 낮은 회로에 사용되며, 방열판으로 열을 식혀줘야만 한다.

스위칭 방식은 일반적으로 컴퓨터나 TV 등의 가전제품에서 전원을 공급하는 용도로 많이 사용되는데, 이는 펄스 양을 조절하여 출력단으로 보내 비교적 정밀하게 전압 조정하여 일정 전압 유지시킨다. 리니어 방식에 비해 발열이 적고 많은 전력을 사용할 있지만, 회로가 복잡하고 많은 양의 부품으로 만들어지기 때문에 가격이 비싸다는 단점이 있다.

USB Tester에서 사용되는 레귤레이터는 스위칭방식의 레귤레이터로 출력이 3A Step-Down Regulator이다.

 

다음은 모듈의 레귤레이터 부분의 회로이다.


[그림 1] 레귤레이터 회로


회로의 각 소자들은 데이터시트를 참고하여 설정하였다.


[그림 2] 인덕터 설정


본 그림 2와 같이 데이터시트에는 각 소자들의 부품값이 나와있었다.


회로상으로 부하의 최대 전류를 2A로 잡고 INPUT 전압이 최대 20V이므로 인덕터는 68uH의 값을 갖는 L38사이즈의 인덕터로 결정하였다.

다음 출력단의 커패시터는 다음과 같은 표를 갖고 결정하였다.


[그림 3] 출력 커패시터 설정


본 레귤레이터 출력전압은 5V이고 부하 전류는 2A로 잡은 상태에서 출력 커패시터는 INPUT 전압의 값에 따라 달라질수 있었다. 그러나 본 회로에서는 INPUT 최대 전압을 20V로 잡았기 때문에 출력 커패시터를 100uF/10V의 값으로 결정하였다.


마지막으로 입력단의 커패시터를 결정했다.


[그림 3] 입력 커패시터 설정


본 그림에서 Y축을 보면 커패시터의 전류 범위가 나와있는데 단위가 RMS mA이다. 본 회로에 사용된 LM2596 데이터시트를 보면 AC 전류의 RMS는 DC 부하 전류의 1/2로 계산해서 설계하라고 되어있었다. 그러므로 본 레귤레이터 회로는 2A의 부하전류로 설계되었으므로 RMS를 1A로 결정하였다. 그리고 PCB를 아트웍할때 소자의 규격을 맞추기 위해 330uF/35V의 커패시터로 설계하였다.

'Project > USB Tester' 카테고리의 다른 글

[USB Tester] 6. PADS Layout 설계  (0) 2018.01.06
[USB Tester] 5. PADS Logic 설계  (0) 2018.01.06
[USB Tester] 4. Text Lcd  (0) 2018.01.06
[USB Tester] 2. ATmega328과 전류 센서 ACS712  (0) 2017.12.12
[USB Tester] 1. 개요  (0) 2017.12.06

USB Tester 


 USB Tester은 아래 그림과 같이 ATmega328과 레귤레이터, 전류센서, 그리고 TEXT LCD로 구성되어 있습니다.


[그림 1] USB Tester 블럭 다이어그램


1) ATmega328


 ATmega328 Atmel사의 8비트 마이크로커느롤러로 다양한 분야에서 널리 상요되고 있으며 , 32kB ISP 플래시메모리, 1kB EEPROM, 2kB SRAM 가지고 있다. 그리고 전력 소모를 줄이기 위해 6가지의 Sleep Mode(Idle, ADC Noise Reduction, Power Down, Power save, Standby, Extended Standby) 지원한다. 인터페이스로는 6채널 10bit ADC, 3개의 Timer/Counter 모드와 시리얼 프로그램을 하기위한 USART 지원한다. 다음에 ATMega328 특징을 정리하였다.

  • 저전력 AVR 8bit Microcontroller
  • 향상된 RISC 아키텍쳐(20MIPS @ 20Mhz)
  • 131 명령세트 (in 1 cycle)
  • 32 x 8bit 범용 레지스터 + 주변 컨트롤 레지스터/Multiplie (in 2 cycle)
  • 20MHz에서 20MIPS progress
  • 32K Byte Flash memory
  • 선택적인 Boot code section (used In-System Programming by On-chip Boot Program)
  • ISP ( In System Programming ) 어플리케이션영역과 부트영역에 있어 F/W 다운로드 가능
  • 1K Byte EEPROM for Data
  • 2K Byte internal SRAM
  • 프로그램 Lock-ISP 위한 SPI 인터페이스
  • 분리된 프리스케일러와 비교모드를 가진 2개의 8비트 Timer/Counter
  • 분리된 프리스케일러와 비교모드, 켭쳐모드를 가진 1개의 16비트 Timer/Counter
  • 6개의 PWM 채널
  • 분리된 오실레이터에 의한 Real Time Count
  • 8 채널, 10bit ADC
  • Two-wire Serial 인터페이스
  • 1개의 시리얼 UART
  • Master/Slave SPI 시리얼 인터페이스
  • 프로그램 가능한 Watchdog 타이머
  • 아날로그 비교기
  • Power-on Reset, 안정된 전원공급을 위한 Programmable Brown-out Detection
  • 내부 RC 오실레이터
  • 외부와 내부의 인터럽트 소스
  • 6개의 Sleep 모드
  • 프로그램 가능한 23개의 I/O
  • 4.5 ~ 5.5V : ATmega128* 속도- 0 ~ 20

본 USB Tester에는 전류센서 1개와 TEXT LCD만을 사용하기 때문에 ATmega시리즈에서도 핀이 적은 ATmega328을 사용하였다.



2) 전류 센서 (ACS712)


 본 모듈의 사용된 전류 센서는 Vout 측정되는 전압값을 가지고 전류를 계산하는 센서이다. 칩은 VIOUT으로 2.5V 오프셋 전압을 갖는 전압이 출력된다. USB Teser 사용되는 전류센서는 ACS712ELCTR-20A-T -20~20A 전류륵 측정할 수있는 전류센서이며, Vnoise 11mV이다. 그리고 Sensitivity 100mV/A 1A 100mV 출력 전압의 변화를 보인다.

다음은 모듈의 전류 센서 부분의 회로이다.


[그림 2] 전류 센서 회로


 위의 그림에서 전원 +5V 그려진 DC3 디커플링 커패시터로 전원에 실려있는 고주파 성분의 Noise 제거하는 역할을 한다. 그리고 IP+, IP- 전류 센서를 통해 측정 전원 단이다. 이 부분은 USB VCC 직렬 연결될 것이며 전류 센서를 통해 VCC에서 흘러 나오는 전압과 전류를 측정하게 것이다.

 또한, ACS712 안에는 OpAmp 이루어진 필터와 버퍼가 포함되어 있기 때문에 FILTER 핀에서 커패시터를 추가하여 내부 저항과 FILTER 커패시터로 이루어진 간단한 RC필터를 구현 있다. RC필터는 장치 출력 신호 잡음비 그에 따른 출력 신호의 해상도를 향상 시킬 있습니다.


'Project > USB Tester' 카테고리의 다른 글

[USB Tester] 6. PADS Layout 설계  (0) 2018.01.06
[USB Tester] 5. PADS Logic 설계  (0) 2018.01.06
[USB Tester] 4. Text Lcd  (0) 2018.01.06
[USB Tester] 3. 레귤레이터(Buck Converter)  (0) 2017.12.12
[USB Tester] 1. 개요  (0) 2017.12.06

USB Tester 


 한동안 포스팅이 뜸하였는데 약 3주간 USB Tester를 만들어 보게 되었습니다. 그래서 약 3주간 포스팅에서는 USB Tester 제작과정을 포스팅 하겠습니다. USB Tester는 퀄컴의 퀵차지(Quick Charge 2.0)과 삼성 어댑티브 패스트 차지(Adaptive Fast Charge)를 만족하도록 제작할 것입니다.



1) Quick Charge


 Quick Charge 3.0은 2015년 9월 퀄컴(Qualcomm)이 스냅드래곤 820, 617, 430과 함께 발표한 기술입니다. 퀄컴은 발표에서 퀵차지 3.0은 배터리 충전 사이클을 보호하며, 2.0보다 최대 38%의 효율을 높였다고 하였습니다. 지난 2.0은 5V, 9V, 12V, 20V의 4가지 전압으로 충전하였지만 3.0은 최저 3.2V에서 최대 20V로 200mV단위로 전압을 설정 할 수 있도록 하였습니다.


[그림 1-1] Quick Charge 비교


2) Adaptive Fast Charge


 퀄컴 AP를 사용하지 않는 삼성은 자사 AP에서 어댑티브 패스트 차지(Adaptive Fast Charge, 이하 AFC)라는 급속충전 기술을 개발하였습니다. Quick Charge 3.0이 3.2 ~ 20V로 동작하는 반면 AFC는 9V 전압에 1.67A의 전류를 고정적으로 공급하도록 하였습니다. AFC는 엑시노스 AP를 사용하는 자사제품에만 사용되는 기술이므로 고정된 규격을 사용하여 안정적인 충전을 할 수 있게 만들었습니다. 대신 타 충전기에서 호환이 안될수 있으나 삼성은 플래그십 시리즈에 QC 2.0을 호환하여 타사의 충전기에서도 고속 충전이 되도록 하였습니다.

Cds Sensor

2N3903-D.PDFSEN-09088_Cds.pdf

 이번 포스팅에서는 Cds라는 조도센서를 이용하여 빛 감지 회로를 분석해 보겠다.

Cds는 조도센서, 광센서 라고 불리며 빛이 입사하면 전도성이 되는 반도체이다. 즉 빛의 세기에 따라 저항 값이 변하는 가변저항이라 할 수 있다. 일반적으로 Cds라고 하는 이유는 황화카드뮴(CdS)을 사용해서 만들어 지기 때문에 Cds라고 불린다.


이번에 분석할 회로는 다음과 같다. 본 포스팅에서는 Cds를 사용하기 위해 Pspice가 아닌 프로테우스를 활용하였다.



 회로를 분석할 때는 무엇을 먼저 봐야 할까? 가장 먼저 전원을 봐야한다. 본 회로는 현재 9V의 전원을 가지고 구동하고 있다. 그리고 저항 R1과 R2가 병렬연결되어있어 각각의 라인이 9V의 전압을 갖는 것을 알 수 있다. 그리고 R1은 Cds와 연결되어있고 R1과 Cds사이에 NPN타입의 트랜지스터가 연결되어있다. 그리고 트랜지스터와 저항 R2사이에는 LED가 연결되어 있다.


 회로를 둘러보았으니 이제 데이터시트를 보면서 각 소자에대한 분석을 해보자.

Cds의 데이터시트를 보면 다음과 같은 글과 그림을 볼수있다.



 첫번째 글을 보면 Cds의 구동 범위를 알 수 있다. 첫번째 문장 Light Resistance at 10Lux (at 25℃)는 상온 25도에서 Cds에 10Lux의 빛을 비추면 8~20KΩ의 저항을 갖는다는 것이다. 그리고 다음줄을 보면 Cds가 어두울때 1MΩ의 저항 값을 갖는다는 것을 알 수 있다. 그리고 Power Dissipation을 통해 Cds가 100mW의 전력을 견딜 수 있고 다음줄 Max Voltage를 통해 Cds에 가해지는 최대 전압을 알 수 있다.

 그리고 옆에 그림을 보면 Cds에 점점 밝은 빛을 비출수록 저항 값이 낮아짐을 알 수 있다.


 그리고 NPN형 트랜지스터의 데이터시트를 보자




 데이터 시트에서 Base-Emitter Saturation Voltage를 통해 Base와 Emitter에 최소 0.65 ~ (Ic = 10mA)0.85V, (Ic = 50mA)0.95V 의 전압차가 발생하면 전류가 Collector에서 Emitter로 흐를 것임을 알 수있다. 그리고 회로에서 쓰인 Led는 2.2V의 구동전압을 갖으며 10mA의 구동전류를 갖도록 설정했습니다.


 지금까지의 데이터시트를 통하여 트랜지스터의 Collector에는 10mA의 전류가 흐르고 Cds와 저항 R1의 직렬연결로 전압분배가 되어 트랜지스터의 Base단의 전압으로 들어가는 것을 알 수 있습니다.


 그렇다면 지금까지의 데이터시트 분석으로 회로가 어떻게 구동이 되는지 분석이 가능합니다.

회로를 동작하면 다음과 같은 반응이 일어납니다.



 회로를 보면 Cds에 빛이 들어오지않으면 Led가 켜지는 것을 알 수 있습니다. 왜냐하면 Cds에 빛이 들어오지 않으니 Cds의 저항 값이 데이터 시트에서 보듯이 1MΩ만큼 높아지고 저항 R1과 Cds에 9V의 전압분배가 일어나면서 Cds에 전압이 걸리기 때문입니다. 그리고 Cds와 트랜지스터의 Base단은 R1을 기준으로 병렬 연결되어있기 때문에 똑같은 전압 값을 갖습니다. 즉 R1과 Cds는 1:10의 저항비를 갖고있으므로 Cds와 트랜지스터의 Base 단에는 약 8V의 전압이 걸리게 됩니다.

 이전 데이터시트에서 트랜지스터의 Base단의 전압이 최소 0.65V에서 구동이 된다는 것을 보았습니다. 빛이 없을때 트랜지스터 Base단에 걸리는 전압은 약 8V이므로 트랜지스터 Collector단에서 Emitter단로 전류가 흐르게되어 Led에 불이 들어오게 됩니다.


만약 Cds에 빛을 준다면 어떻게 될까요?

다음 그림은 Cds에 빛을 주었을때 동작하는 모습입니다. 그림을 보면 Led가 켜지지 않는다는 것을 알수 있습니다.



 Cds의 데이터시트의 그래프를 보면 100lux에서 저항 값을 약 1Ω만큼 갖는다는 것을 보았습니다. Cds가 1Ω의 저항 값을 가지고 있으므로 R1과의 전압분배에서 Cds는 전압을 거의 갖지 않게 됩니다. 이는 트렌지스터의 Base단에 전압이 거의 걸리지 않는다는 것입니다. 따라서 트랜지스터의 Collector에서 Emitter로 전류가 흐르지않으면서 Led가 켜지지 않게 되는 것입니다.

 또한 100lux는 어두운 낮의 밝기 입니다. 본 회로는 밤에는 불이켜지고 낮에 불이 꺼지는 회로임을 알 수 있습니다.



 지금까지 Cds를 이용한 빛 감지 회로를 살펴보았습니다. 이번에는 저항 R1과 R2의 쓰임에 대해 이야기를 해보겠습니다.

저항 R1과 R2의 용도는 무엇일까요? R1의 쓰임은  본 포스팅을 보면서 눈치 채셨을 것입니다. 바로 Cds와 전압분배입니다. Cds주변이 어두워지면서 저항 값이 높아질때 전원 9V가 R1뿐만아니라 Cds도 걸리게 됩니다. 좀 더 공부를 하셨다면 이 전압분배가 어떤 용도인지 아실 것입니다. 현재 R1의 저항값은 100KΩ입니다. 만약 R1의 저항값을 10KΩ으로 10배를 낮춘다면 어떻게 될까요? 그렇다면 0lux에서 저항비는 1:100이 될것입니다. 이는 Cds에 더 많은 전압이 걸린다는 것을 의미합니다. 이 전압은 트랜지스터의 Base전압과 동일합니다. 다음 그래프를 보겠습니다.




 빨간색 그래프는 y=100x 그래프이고 초록색 그래프는 y=10x 입니다. 초록색 그래프가 빨간색 그래프에 비해 좀더 완만한 것을 볼 수 있습니다. 이는 회로에서 Cds와 R1간의 관계로 볼 수 있습니다. 저항 비가  1:100일 때 Cds에 더 높은 전압이 걸리게 되고 1:10에서는 낮은 전압이 걸리는 것입니다. 이를 해석하면 R1의 저항 값이 높아질수록 Cds에는 전압이 천천히 걸린다는 것입니다. 즉 R1은 Cds의 민감도를 조절하는 것으로 볼 수 있습니다.


 이번에는 저항 R2에 대해 얘기해보겠습니다. 본 회로를 해석할때 Led가 2.2V의 전압강하와 10mA의 전류가 필요하다고 했습니다. 그러므로 Led를 구동시키기 위한 10mA의 전류가 필요하다는 것입니다. 그러나 Led안에 있는 저항은 매우 작기 때문에 저항 R2가 없다면 매우 높은 전류가 흐르게 됩니다. 이는 Led 소자가 견딜수 있는 전력을 초과하게 되어 일시적으로는 Led에 이상이 없지만 Led의 수명을 깎을 수 있습니다. 이럴때 저항 R2를 통하여 전류를 조절하게 됩니다. Led에는 2.2V의 전압강하를 갖고 저항 R1과 직렬연결 되어있기 때문에 저항에는 9V에서 2.2V를 뺀 6.8V의 전압이 걸린다는 것을 알 수 있습니다. 이때 옴의 법칙을 적용하여 저항 값을 구할 수 있습니다.



 위와 같은 식에 6.8V과 10mA를 대입하여 저항값이 680Ω이 나오게 됩니다. 하지만 본 회로에서는 100Ω의 저항을 사용하였습니다. 저항에는 똑같이 6.8V가 걸리고 있으므로 현재 회로에는 68mA의 전류가 흐르고 있다는 것을 알 수 있습니다. 이는 Led소자에 과부하를 주어 수명을 깍되는 역할을 하게 됩니다. 하지만 본회로에서 Led의 전압강하가 2.2V 그리고 10mA의 구동전류가 있기 때문에 그럴 뿐이지 만약 40mA의 전류를 필요로 하는 Led가 사용된다면 본 회로에서 사용한대로 100Ω의 저항을 사용해야 할 것입니다.



 지금까지 빛 감지 센서의 회로분석을 해보았습니다. 포스팅에서 사용된 Cds와 트랜지스터의 데이터시트는 포스팅 처음에 첨부를 하였으니 데이터시트를 다운받아 본인이 해석을 해보시면 좋은 경험이 될 것 입니다. 다음 포스팅에서는 수위 경보기 회로를 분석해 보겠습니다.

C Compiler


 C언어는 다양한 컴파일을 가지고 있다. 가장 많이 사용하는 컴파일러는 MS에서 배포하는 Visual C++, 터보 C 그리고 GCC가 있다.

Visual C++은 MS 홈페이지에서 배포하는 Visual studio를 통하여 설치할수 있으며 터보 C는 1987년에 개발되어 현재는 거의 사용하고 있지 않다. 그리고 GCC는 1987년 GNU 프로젝트의 컴파일로 작성되어 지금까지 C, C++, Objective-C, 포트란, 자바등 다양한 언어를 지원하고 있다.


포스팅을 진행하면서 필자는 GCC컴파일을 사용하는 Dev-C/C++을 사용 할것이다.

Dev-C/C++을 설치하기 위해서 먼저 https://sourceforge.net/에 접속한다.



접속한 후 위에있는 Search에서 Dev C를 검색하면 된다.



맨 위에 검색된 Dev-C++을 들어가서 다운받고 설치하면 된다.


다운링크 : https://sourceforge.net/projects/orwelldevcpp/?source=directory


 포스팅을 하면서 MS의 비주얼 스튜디오를 사용하지 않고 Dev-C++을 사용한다고 하였다. 왜 필자가 Dev-C++을 사용하냐면 비주얼 스튜디오는 C/C++ 이외에 다양한 언어를 지원하는 만큼 프로그램이 무겁고 동작이 느리다. 이에 반에 Dev-C++은 C/C++의 통합 개발 환경이므로 오직 C와 C++을 지원한다. 그러므로 비주얼 스튜디오에 비해 프로그램이 가볍고 동작이 빠르다. 이후 포스팅에서 Dev-C++을 사용하면서 C언어를 공부해 볼 것이다.

2. 저항(R), 인덕터(L), 커페시터(C) 값 계산 실습


 이번 포스팅에서는 지난번 포스팅에 이어 저항, 인덕터, 커패시터의 직·병렬 계산 실습이다.

저항, 인덕터, 커패시터 각각 직·병렬된 회로 두개씩 실습을 할 것이다.



1) 저항의 계산


 첫번째 저항의 회로는 다음과 같이 저항 R1과 R2//R3로 묶인 병렬 저항, 그리고 R4//R5//R6로 묶인 병렬저항이 직렬로 연결되어 있다.

이 회로의 전체 저항은 몇일까?



 이전 포스팅에서 설명 하였듯이 직렬로 연결된 저항은 저항값의 덧샘으로 구할수 있었다. 그러나 병렬로 연결된 저항은 저항값의 역수를 취하고 계산을 시도했는데 회로를 잘 보면 R2와 R3가 같은 값을 가지고 있고, R4와 R5, R6도 마찬가지로 같은 저항값을 가지고 있다. 이러한 경우는 저항값에서 저항의 갯수만큼 나눈다고 지난 포스팅에서 설명 하였다. 그렇다면 R2//R3의 병렬연결은 2k / 2이고 R4//R5//R6의 병렬연결은 3k / 3일 것이다.

즉 각각의 병렬연결은 1k의 저항값을 가지게 되며 저항 R1과 각각의 병렬연결의 저항값을 더하면 1k + 1k + 1k의 식이 도출된다.

따라서 회로의 전체 저항은 3k의 저항값을 갖는다



 다음의 회로도 이전회로와 마찬가지로 저항 R1과 R2//R3로 묶인 병렬 저항, 그리고 R4//R5//R6로 묶인 병렬저항이 직렬로 연결되어 있다.

하지만 이전회로와 다르게 병렬연결된 저항들의 저항값이 다른 값을 가지고 있다. 이럴경우 회로의 전체 저항은 어느정도의 저항값을 가지고 있을까?



 이 회로도 마찬가지로 먼저 병렬연결된 저항들의 저항값을 구하고 직렬연결된 저항값을 더하여 전체 저항값을 구하면 된다.

먼저 R2//R3의 병렬 저항값을 구해보겠다. 이전 포스팅에서 두개의 저항이 병렬연결되었을때의 식을 도출해 보았다. 그 식은 다음과 같다.



 R2의 저항값과 R3의 저항값을 식에 대입하면 4.5k / 4.5k의 식이 나오고 이를 계산하면 1k가 된다. 그리고 R4//R5//R6의 병렬저항값을 계산할때는 3개의 저항값을 한번에 계산하는 것보다 두개씩 묶어서 두번 계산하는 것이 더 쉽다. 먼저 R4//R5의 저항값을 구하면 R4와 R5는 각각 동일한 저항값을 가지고 있다. 그러므로 R4//R5는 4k / 2가 될것이고 즉 2k의 저항값을 갖는다. R4//R5의 저항값을 알았으므로 이번에는 R4//R5와 R6의 병렬 저항값을 구하면 된다. R4//R5는 2k이였으며 R6도 마찬가지로 2k의 저항값을 가지고 있다. 이번에도 마찬가지로 같은 2k의 저항값을 가지고 있으므로 2k / 2를 통하여 R4//R5와 R6의 병렬저항은 1k를 갖는다는 것을 알 수 있다. 즉 저항 R1과 R2//R3, 그리고 R4//R5//R6는 각각 1k의 저항값을 갖는다는 것을 보았다. 따라서 회로의 전체 저항은 1k + 1k + 1k를 하여 3k의 전체 저항을 갖는다.



2) 인덕터의 계산


 첫번째 인덕터의 회로는 다음과 같이 L1과 L2, L3가 직렬 연결되어있다.

이 회로의 전체 인덕턴스은 얼마의 인덕턴스를 갖을까?



 인덕터의 계산은 이전 포스팅에서 저항과 똑같이 계산한다고 설명하였다. 그러므로 인덕터 L1~L3가 직렬연결 되어있기 때문에 10uH + 10uH + 10uH를 하여 전체 인덕턴스는 30uH를 갖음을 알 수있다.



 다음의 회로는 인덕터 L1과 L2가 병렬연결 되어있고 이 병렬연결과 L3의 인덕터가 직렬연결 되어있다.

이번 회로의 전체 인덕턴스는 어떻게 될까?



 이번 회로도 저항의 계산과 같이 인덕터 L1과 L2의 병렬연결을 구하고 L3와의 직렬연결 계산을 통하여 계산해야한다. 인덕터 L1과 L2는 각자 10uH라는 동일한 인덕턴스를 가지고 있다. 이때도 마찬가지로 동일한 저항값들의 병렬연결과 같이 계산하면 된다. 인덕턴스 10uH를 가지는 인덕터 2개이므로 10u / 2가 될것이고 즉 병렬연결은 5uH의 인덕턴스를 갖을 것이다. 이를 인덕터 L3와 직렬연결하면 총 15uH의 인덕턴스를 갖게된다.



3) 커패시터의 계산


 첫번째 커패시터 회로는 다음과 같이 C1과 C2, C3가 직렬 연결되어있다.

이 회로의 전체 커패시턴스은 얼마의 커패시턴스를 갖을까?



 커퍼시터의 커패시턴스 계산은 이전 포스팅에서 저항과 반대의 계산을 한다고 설명 하였다. 즉 커패시터의 직렬연결은 저항의 병렬연결과 같이 계산한다.

따라서 C1과 C2, C3의 커패시턴스의 역수를 더해 그 수를 다시 역수를 취하게 된다. 하지만 본 회로에서는 각각의 커패시터들이 동일한 커패시턴스를 갖고있다. 그러므로 동일한 저항값을 가지는 저항들의 병렬연결 처럼 계산하면 된다. 각각의 커패시터가 3uF의 커패시턴스를 갖고 있으므로 3u / 3을 하여 회로의 전체 커패시턴스는 1uF를 갖는다는 것을 알 수 있다.



 두번째 회로에서는 커패시터 C1과 C2가 병렬연결되어있고 나머지 C3가 직렬연결 되어있다. 이번 회로에서도 지난번들과 같이 병렬연결을 먼저 계산하고 직렬 연결을 계산하게 된다. 



 커패시터의 직렬 연결은 저항의 직렬연결과 같이 계산하게 된다. 그러므로 C1과 C2의 병렬연결은 3u + 3u가 되어 C1//C2는 6uF의 커패시턴스를 갖는다. 이 커패시턴스와 C3의 커패시턴스를 직렬연결하면 다음과 같은 식으로 계산한다.



 그러므로 (6u * 3u) / (6u + 3u)의 식이 도출되고 이를 계산하면 2u가 나온다. 즉 이번 회로의 전체 커패시턴스는 2uF이 됨을 알 수 있다.



 이번 포스팅에서는 저항, 인덕터, 커패시터들의 직·병렬 연결에서의 값들을 계산해 보았다. 단순한 수치계산이라 소홀히 넘어갈수 있지만 각 수동소자들의 직·병렬 연결은 회로를 설계할 때 매우 중요하게 작용한다. 저항의 병렬연결은 대전류 회로에서 전류분배를 통하여 소자에 걸리는 부하를 최소화 할 수 있으며 커패시터의 병렬연결을 통하여 저용량의 커패시터를 병렬연결하여 대용량의 커패시터를 만들수 있다. 다음 포스팅에서는 소자에 걸리는 전력값을 계산해보고 저항들의 병렬연결된 회로의 등가 저항을 구해보겠다.

1. 저항(R), 인덕터(L), 커페시터(C) 값 계산


 이번 포스팅에서는 저항, 인덕터, 커패시터의 직·병렬 계산을 해볼것이다.



1) 저항의 직렬, 병렬


 저항의 직렬, 병렬 연결의 계산을 다들 알 것이다. 저항이 직렬로 연결되었을 때는 각각 저항값들을 더하고 병렬로 연결되었을 때는 각각의 저항값들의 역수를 더하고 그 값을 다시 역수 취한것과 같다.


다음과 같이 직렬이 연결되어 있을 때,


전체 저항 다음과 같다.



반대로 다음과 같이 직렬이 병렬로 연결되어 있을 때,


전체 저항은 각각의 저항값들의 역수를 더하고 그 값을 다시 역수 취한것과 같으므로 1 / (1 / R1 + 1 / R2)일 것이고

이를 쉽게하면 다음과 같다.



만약 같은 저항값을 가지는 저항들이 병렬로 연결되어 있다면 어떻게 될까?


동일한 저항 2개가 있다면



위의 저항 병렬 계산식에 맞추어 (R*R) / (R+R)이 되어 R^2 / 2R이 될것이다.

즉 다음과 같은 식이 나오게 된다.



이번에는 동일한 값을 가지는 저항 3개가 있다.



먼저 저항 두개를 병렬계산하면 R/2가 되고 R/2와 R과 병렬계산을 하면 된다. ((R/2)*R) / ((R/2)+R)이므로 (R^2/2) / (3R/2)라는 식이 도출된다.

이 식을 풀면 다음과 같은 식이 나온다



따라서, 동일한 저항값을 가지는 저항들의 병렬 연결의 전체 저항은 저항값에서 병렬 연결된 저항의 갯수만큼 나눈것과 같음을 알 수 있다.

 


2) 인덕터의 직렬, 병렬


 인덕터의 직렬, 병렬 연결의 인덕턴스 계산은 저항과 같다. 인덕터가 직렬로 연결되어있을 때는 각각의 인덕턴스를 더하고, 병렬로 연결되었을 때는 각각의 인덕턴스들의 역수를 더하고 그 값을 다시 역수 취한것과 같다


다음과 같이 직렬로 연결되어 있을 때,



전체 인덕턴스는 다음과 같다.



반대로 인덕터들이 병렬로 연결되어 있을 때는,



저항과 똑같이 계산하면 된다.




3) 커패시터의 직렬, 병렬


 커패시터의 직렬, 병렬 연결의 커패시턴스 계산은 저항과 반대이다. 커패시터가 직렬로 연결되어있을 때는 각각의 커패시턴스들의 역수를 더하고 그 값을 다시 역수 취한것과 같으며, 커패시터가 병렬로 연결되었을 때는 각각의 커패시턴스를 더한것과 같다,


다음과 같이 직렬로 연결되었을 떄,



전체 커패시턴스는 저항과 반대로 계산하면 된다.



반대로 커패시터들이 병렬로 연결되었을 때,


저항과는 반대로 각각의 커패시터들의 커패시턴스를 더하면 된다.