ARM 플랫폼 상에서 전력 효율적인 소프트웨어 시스템 개발



http://www.eetkorea.com/ART_8800609804_1103011_NT_4dccfb11.HTM?click_from=8800053702,9949901117,2010-07-07,EEKOL,ARTICLE_ALERT

'Embedded > Softwares' 카테고리의 다른 글

inline function  (0) 2010.05.16
유용한 ARM 어셈블리 (if, for, do_while, switch)  (0) 2010.05.05
유용한 ARM 어셈블리 매크로  (0) 2010.05.05
유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

inline function

Embedded/Softwares 2010. 5. 16. 16:47
From : http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gcc/inline.html

inline 함수란 간단히 말해서 함수 call 없이 함수의 code 를 호출한 부분에 그대로 넣어주는 것이다.

inline 함수에 대해서 잘 설명한 글이다. 실제로 MSDN 을 보면 __inline 으로 쓰이고 함수의 주소를 컴파일러가 갖고 있거나 너무 inline 으로 쓰기에 크면 inline 함수가 되지 않는다 정도인데 역시 gcc 에서 찾아봐야 한다.

위의 링크에 있는 내용을 간략히(?) 내맘대로 정리하면 다음과 같다.

일 단 inline function 은 ISO C99 표준에 포함된다. 그전에는 없다는 애기다~. 하지만 GCC 상의 inline 과 ISO C99 표준의 inline 함수의 구현에 상당히 다른 점이 있다고 하니 VS2005 환경에서의 inline 함수는 많이 다를 수 있다는 점을 생각해 둬야 겠다.

이 글에서 눈에 띄는 점은 static / extern keyword 를 inline 과 썼을 때의 효과이다.
먼 제 static / inline 조합을 보면, 일반적으로 생각하면 static 이란 scope 를 명시적으로 그리고 제한하는 효과가 있고 이 것이 inline과 조합을 하면 왠지 inline 이 forced 되지 않을 까 (좀 더 효과적으로 동작) 하는 생각이 든다. 실제 위의 글에서도 호출자(caller) 에 inline 함수의 모든 호출이 통합된다고 하니 (함수의 주소 참조가 없고, 함수의 어셈블러 코드가 참조되지 않을 때) 효과가 있음을 알 수 있다.
단, 주의해야 할점은 inline 함수가 정의하기 전의 그것을 호출하는 함수가 있다거나 recursive 함수의 형태의 inline 함수라면 inline 효과가 사라진다는 점이다.

inline 함수인데 static 으로 선언하지 않는 경우는 거의 inline 효과가 없다고 볼 수 있다. 이 경우에는 이 함수가 다른 sources 파일에서 사용 될 수 있다고 가정하기 때문에 (컴파일러가) 일반적인 방식의 함수로 컴파일이 되기 때문에 "통합"이 되지 않는다.

extern / inline 의 조합의 경우 효과가 좋다. 이 두개의 조합은 함수의 정의를 오직 inlining 을 위해서만 사용한다. 실제 함수의 주소를 참조하거나 함수를 선언한다 해도, extern 이므로 직접적으로 참조되지 않고 또한 정의되지 않는 것 처럼 보인다. extern inline 의 경우 거의 macro 에 준하는 효과를 보여준다.

.....

inline 의 세계도 심오하다는 것을 느낄 수 있는 글인거 같다. 시간 날 때 한 번 읽어보고 google codesearch 같은 곳에서 예제를 찾아보면 좀 더 쾌적한 코딩을 할 수 있을 것이다. :-)


출처 : http://songhl1.tistory.com/entry/Inline-Function

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

유용한 ARM Assembly

정리: 이채원 (ichijo99@hanmail.net)
Homepage: http://user.chollian.net/~hebb
Date: 2004.12.27.

본 문서의 내용은 ARM System Developer’s Guide의 Ch. 5, 6 의 일부분에서 발췌한 것임을 밝힙니다.

[1] Conditional Execution

(A)
// Converts an unsigned int i(0 <= i <= 15) to a hexadecimal character c

if(i<10)  c = i + '0';
else  c = i + 'A' - 10;

.......................................................................
c RN 0  ; Assign c to r0
i RN 1  ; Assign i to r1

 CMP i, #10
 ADDLO c, i, #'0'      ; == ADDCC   c, i, #’0’
 ADDHS c, i, #'A'-10   ; == ADDCS   c, I, #’A’-10
 
(B)
// If c is either 'a', 'e', 'i', 'o', or 'u', then vowel increases

if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u')  vowel++;

.......................................................................

c RN 0  ; Assign c to r0
vowel RN 1  ; Assign vowel to r1

 TEQ c, #'a'
 TEQNE c, #'e'
 TEQNE c, #'i'
 TEQNE c, #'o'
 TEQNE c, #'u'
 ADDEQ vowel, vowel, #1

.......................................................................
 
(C)
// If c is a letter, increase letter

if ( (c>='A' && c<='Z') || (c>='a' && c<='z') ) letter++;

.......................................................................

c RN 0  ; Assign c to r0
temp RN 1  ; Assign temp to r1
letter RN 2  ; Assign temp to r2

 SUB temp, c, #'A'
 CMP temp, #'Z'-'A'
 SUBHI temp, c, #'a'
 CMPHI temp, #'z'-'a'
 ADDLS letter, letter, #1

.......................................................................


 
[2] Loop

(1)
//Loop from 10 to 1
for(i=10; i>=1;i--) ...;

.......................................................................

i RN 0; Assign i to r0
N RN 1; Assign N to r1

 MOV N, #9
 MOV i, N
loop
 ; TODO: Loop body should be placed here...

 SUBS i, i, #1
 BGT loop

.......................................................................


(2)
// Loop from 9 to 0

for(i=9; i>=0;i--) ...;
.......................................................................
i RN 0; Assign i to r0
N RN 1; Assign N to r1

 MOV N, #9
 SUBS i, N, #1
loop
 ; TODO: Loop body should be placed here...

 SUBS i, i, #1
 BGE loop
 
(3)
// Loop from 0 to 9 => NOT efficient!
for (i=0; i<10; i++) …;

.......................................................................
i RN 0; Assign i to r0
N RN 1; Assign N to r1

 MOV i, #0  ; i = 0
loop
 ; TODO: Loop body should be placed here...

 ADD i, i, #1
 CMP i, #10
 BCC loop  ;  == BLO   loop  == BLT   loop

이 루틴은 앞서의 (2)번의 예제에 비해 3줄로 1줄이 더 추가되었다. 따라서 이런 비효율적인 방법보다 앞서의 (2)번 예제처럼 Counting down 하는 경우의 예제가 더 바람직하다.


(4)
//DO~WHILE
do
{
   …
}while(--N != 0);

.......................................................................
N RN 1; Assign N to r1

loop
 ; TODO: Loop body should be placed here...

 SUBS N, N, #1
 BNE loop  ;  == BLO   loop
 
[3] Switches on the range 0 <= x <= N

(1)
Switches to the absolute blocks (Position dependent)

switch(x){
 case 0: return method_0();
 case 1: return method_1();
 case 2: return method_2();
 default: return method_d();
}

.......................................................................

x RN 0 ; Assign x to r0

switch_absolute
 CMP x, #3
 LDRLT pc, [pc, x, LSL #2]
 B method_d
 DCD method_0
 DCD method_1
 DCD method_2

.......................................................................


 
(2)
Switches to the relative blocks (Position independent)

switch(x){
 case 0: return method_0();
 case 1: return method_1();
 case 2: return method_2();
 default: return method_d();
}

.......................................................................

x RN 0 ; Assign x to r0

switch_relative
 CMP x, #3
 ADDLT pc, pc, x, LSL #2
 B method_d
 B method_0
 B method_1
 B method_2

.......................................................................


☞ CMP, TST, TEQ에 대한 부연 설명
(1) CMP   r0, r1
“r0–r1”를 한다. “r0-r1”은 내부적으로 “r0 + ~(r1) + 1”로 처리된다.
이 때 “r0 >= r1”이면 “r0 + ~(r1) + 1” 이 overflow를 일으키고 Carry가 발생한다.

(2) TST    r0, r1;   r0 & r1
“r0 & r1”을 한다. 예를 들어 TST r0, #0x10 은 r0 & 0x10을 하여
그 결과가 ‘1’이면 (r0의 4번 비트가 ‘1’이면) Z = 0으로 만든다.
그리고 그 결과가 ‘0’이면 (r0의 4번 비트가 ‘0’이면) Z = 1 로 만든다.

(3) TEQ    r0, r1;   r0 ^ r1
r0 ^ r1을 한다. (^는 XOR)
r0와 r1이 같으면 결과가 0이므로 Z = 1로 만든다.
r0와 r1이 다르면 결과가 1이므로 Z = 0으로 만든다.

CMP 대신 TEQ를 쓰면 C플래그에 영향을 주지 않고 Z플래그 만으로 같은지 아닌지를 판별할 수 있다.


 
☞ Condition Code 표

출처 : http://www.aesop.or.kr

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

이 문서는 2004년 이채원님이 정리해 주셨던 문서 입니다.

본 문서의 내용은 Red Hat GNUPro Toolkit의 Manual 자료 중 하나인 GNUPro Auxiliary Development Tools 문서의 Using as 부분에서 8장 Assembler Macro Directives의 내용을 참조 및 발췌한 것임을 밝힙니다.

또한 일부분에 예제로 사용된 Macro 예제의 일부는 CLABSYS (http://www.clabsys.co.kr)의 자료실에 공개된 소스에서 발췌한 것임을 밝힙니다.
 
[1] ADS, SDT에서의 MACRO

 MACRO
 WR32 $ADDR, $DATA  ; [ADDR]=DATA

 LDR r0, =$ADDR
 LDR r1, =$DATA
 STR r1, [r0]
 MEND
;………………………………………………………….

WR32  INTMSK, 0xFFFFFFFF


[2] GNU AS에서의 MACRO

.macro   WR32  addr, data
   ldr      r0, =\addr
   ldr      r1, =\data
   str      r1, [r0]
.endm

@………………………………………………………….

WR32  INTMSK, 0xFFFFFFFF


 
[3] ADS, SDT에서의 Data Memory 세팅 반복 처리
- 특정 영역에 0 ~ 5의 값을 DCD로 할당하는 예제
(MMU 세팅 등에 이용할 수 있음.)

 GBLA count

 AREA    |Data$$PageTable|, DATA, READONLY, ALIGN=14

 EXPORT  PageTable

PageTable

count SETA 0
 WHILE count <= 5
 DCD count
count SETA count + 1
 WEND

 END



출처 : http://www.aesop.or.kr

'Embedded > Softwares' 카테고리의 다른 글

inline function  (0) 2010.05.16
유용한 ARM 어셈블리 (if, for, do_while, switch)  (0) 2010.05.05
유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

[유용한 ARM 분기 명령어와 숫자 라벨 이용법]


/** 여기서 b는 back이며 숫자 label이 앞부분에 있음을 나타낸다.
그리고 f라고 하면 forward이며 숫자 라벨이 뒷부분에 있음을 나타낸다. **/


[EX1]
;이 명령은 r1의 값이 5면 LABEL로 가서 반복하고, 아니면 빠져 나간다.

LABEL
   cmp r1, #5
   beq LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   cmp r1, #5
   beq %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   cmp r1, #5
   beq 0b


 
[EX2]
;이 명령은 r1의 값이 5가 아니면 LABEL로 가서 반복하고, 5면 빠져 나간다.

LABEL
   cmp r1, #5
   bne LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   cmp r1, #5
   bne %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   cmp r1, #5
   bne 0b


 
[EX3]
;이 명령은 r1의 8번 비트가 ‘0’이면 LABEL로 가서 다시 반복하고, ‘1’이면 빠져 나간다.
LABEL
   tst r1, #0x00000100
   beq LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   tst r1, #0x00000100
   beq %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   tst r1, #0x00000100
   beq 0b


 
[EX4]
;이 명령은 r0의 8번 비트가 ‘1’이면 LABEL로 가서 반복하고, ‘0’이면 빠져 나간다.
LABEL
   tst r1, #0x00000100
   bne LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   tst r1, #0x00000100
   bne %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   tst r1, #0x00000100
   bne 0b

[EX5]
LABEL
 tst r0, #0xff
 beq LABEL
 
; r0의 하위 8비트 값이 하나라도 0이면 LABEL로 되돌아가 반복하고
; r0의 하위 8비트 값이 모두 1이면 빠져나간다

[EX6]
LABEL
 tst r0, #&0x03
 beq LABEL

; r0의 하위 0번, 1번 비트 값이 하나라도 0이면 LABEL로 되돌아가 반복하고
; r0의 하위 0번, 1번 비트 값이 모두 1이면 빠져나간다



출처 : http://www.aesop.or.kr/

'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 (if, for, do_while, switch)  (0) 2010.05.05
유용한 ARM 어셈블리 매크로  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03
mobm 이 뭔가요?  (0) 2009.06.03

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

# CAN이란?


 CAN 몇 년도에 만들어지고 누가 만들었고와 같은 이야기는 각자 게시물 아래 참고 사이트에서 확인하시길 바라고, 해당 이야기는 배제하고 제 나름대로 간단하게 정리해 보겠습니다. CAN은 알려진 바와 같이 자동차에 있는 다양한 노드를 제어하기 위해 탄생한 통신 프로토콜 입니다. 기존 RS-232나 485와 같은 시리얼 통신방식이고 비동기식 입니다. 다만 앞서 말씀드린 통신 프로토콜은 물리계층(Layer 1)부분만 명시되어 있지만 CAN의 경우에는 OSI 7계층 기준으로 볼 때 물리 계층(Layer 1)과 데이터 링크 계층(Layer 2)을 정의 하고 있습니다. 데이터 링크 계층을 정의하고 있기 때문에 에러에 대한 처리가 확실하기 때문에 상당히 안정성이 높은 프로토콜이 되겠습니다.


간단하게 특징을 RS-485와 비교하여 살펴보면 다음<표 1>과 같습니다.


<표 1> CAN 및 RS-485 비교

특징 / 통신 프로토콜

CAN

RS-485

토폴로지

Bus / Multi-point

Bus / Multi-point

통신 메소드

Master/slave, peer to

peer, multi-cast, multimaster

Master/Slave, Multi-master

통신 회선(전원 제외)

2-wire Twisted-pair / Differential

2, 4-wire Twisted-pair /

Differential

통신 속도

< 1Mbps

12Mbps 이하 또는 이상

에러처리

O (5가지의 에러 처리)

X

(상위 프로토콜을 이용한

수동적 에러처리)

최대 노드

2의 29승

256

최대거리

25-1000m

1.2km


직접적인 비교 대상이 아니라고 할 수도 있지만 일단 비교를 해보면 비슷합니다.


 먼 저 둘 다 버스형의 토폴로지 형태입니다. 쉽게 말하자면, 하나의 회선에 다수의 디바이스가 연결 된 형태로 디바이스가 증가하더라도 따라 회선 추가로 요구되지 않는 저비용 측면에서 유리한 토폴로지 구조입니다. 기본적으로 멀티 캐스트나, 브로드 캐스트가 가능하며, 디바이스의 구분은 어드레스 방식을 사용하게 됩니다. 다만 하나의 어떤 디바이스가 회선을 액세스 한 상태에서는 그 외의 디바이스는 회선을 사용할 수 없기 때문에, 스타형에 비해 실시간성이 떨어질 수 있는 단점이 있고, 서로 전송을 시도할 경우 이더넷과 같이 신호 충돌이 발생할 수 있습니다.

 하지만 버스형태가 산업 현장에서 각광을 받는 이유는 회선 즉, 설비 비용이 적게 작용하기 때문에 대부분의 산업용 필드버스는 버스형을 기본적으로 채용 하고 있습니다. (CAN, CC-LINK, Modbus, Profibus, Foundation Fieldbus 등등)


 통신 방식은 기본적으로 두 통신 프로토콜의 물리 계층이 버스형에 멀티 포인트(n:n)이기 때문에, 사실상 통신 방식은 상위 프로토콜의 정책에 따라 달라질 뿐 거의 같다고 볼 수 있습니다.


 통 신 회선은 RS-485와 같이 Twisted-pair에 Differential 방식을 기본으로 하고 있습니다. 노이즈에 강한 형태로서, 두 라인의 전압차를 논리의 기준으로 삼기 때문에 노이즈로 인해 두 라인의 전압이 변경되어도 기본적으로 두 라인의 전압차는 달라지지 않으므로 노이즈 특성을 적게 받습니다. (더 자세한 부분은 검색해서 보세요 ^^;)


 에 러처리는 CAN의 경우 자동차라는 매우 열악한(다이나믹 하고 거친) 환경을 고려하였기 때문에 물리계층에서 부터 데이터 링크 계층까지 에러에 대한 대비가 잘 되어 있습니다. CAN은 이러한 에러처리를 하드웨어에서 대부분 해주는 장점이 있습니다. ( 이부분은 확실한 검증이 필요합니다. 아시는 분들은 이야기를) 물론 RS-485의 경우에도 해당 레이어 프로토콜 스택을 MCU에 펌웨어 형태로에 올려주면 되지만(대표적으로 MODBUS), 아무래도 그럴 경우에는 하드웨어에서 자동으로 처리해주는 것보다 고려사항이 많아지고 검출할 수 있는 에러가 데이터로 한정되며, 계산적인 오버헤드가 크게 작용합니다.


 통신 속도나 최대 노드, 거리 등은 이론상으론 해당 수치보다 높을 수 있지만.. 상황에 따라 다르므로 설명은 생략합니다.


 이와 같이 물리적인 특징위주로 CAN을 살펴보았는데요.. 이를 한번 더 간단히 정리하자면..

CAN은 노이즈와 에러처리에 강력한 산업 통신 프로토콜이라는 것을 알 수 있었습니다.



용어정의

 

필드버스(Fieldbus) : 산업용 프로토콜을 전반적으로 부를 때 사용하는 말, 그러나 Foundation Fieldbus는 필드버스를 지칭하는 것이 아니라 필드버스 프로토콜 중 하나이다.

 

CSMA/CD : (Carrier Sense Multiple Access with Collision Detection)

 Ethernet에 이용되고 있는 통신 방식으로, 발신하려고 하는 노드가 충돌을 회피하기 위해 다 른 노드가 발신하고 있지 않는가를 캐리어 신호로 검출한다. 검출했을 경우, 어느 노드도 소정 시간 대기 후 발신을 재시행한다.


CSMA/NBA : (Carrier Sense Multiple Access with Non-destructive Bitwise Arbitration)

 DeviceNet 로 이용되고 있는 통신방식. CSMA 방식으로 각 노드의 우선도를 가미한 룰을 부가해 통신 충돌을 회피하는 방식이다. CSMA/CD 방식은 버스가 일시적으로 모두 비우기 위해 효율이 저하하는데 대해, CSMA/NBA에서는 어느 쪽인가가 발신을 하므로 버스 사용 효율이 높다.



본 내용은 CAN 스펙의 PART B를 중심을 작성되었음을 밝힙니다.


1. CAN 프로토콜의 구성

 

the Data Link Layer

   - the Logical Link Control (LLC) sublayer

   - the Medium Access Control (MAC) sublayer

the Physical Layer

[그림 1] CAN 프로토콜 구조


 CAN 은 2개의 계층으로 구성 된 프로토콜입니다. 우리가 일반적으로 알고 있는 RS-232와 RS-485 등이 Layer 1에 해당하는 물리 계층(Physical Layer)만 해당 된다면, CAN은 Layer 1 뿐만 아니라 Layer 2인 데이터 링크 레이어(Data Link Layer)도 포함을 합니다. 보통 우리가 UART 물리 계층 프로토콜 레이어를 기반위에 펌웨어로 간단하게 데이터 링크 계층을 적절하게 작성하였다면, CAN은 이것을 기본 스펙으로 정의를 하고 있다는 점 입니다.

 그래서 CAN 트렌시버에서 프레임 형식이 아마 고정되어 있고 MCU에서는 트렌시버의 데이터 필드 영역에 정해진 크기만큼만 데이터를 쓸 수 있을 거라 봅니다.(이부분은 직접 해보신 분들이 지적 해주세요 ^^;) 이 점은 CAN의 데이터 링크 계층 스펙에 구속을 받는다는 단점이 있지만, 데이터 링크 계층까지 트랜시버에서 하드웨어로 대부분 구성이 되어있을 것이므로 데이터 링크 레이어 스택을 작성해야하는 수고를 덜어줌과 동시에 고려사항이 적어지게 됩니다. 또한 Layer 2에서 MAC 부분 그림을 보시면 기존 소프트웨어 방식으로 작성하는 Layer 2에 비해 다양한 에러 처리가 가능함을 볼 수 있습니다. 참고로 CAN에서는 5가지 정도의 오류 발견할 수 있습니다.


2. CAN 프로토콜의 간략한 특징


 CAN 프로토콜은 다양햔 특징을 갖고 있는데 몇가지를 나열하면 아래와 같습니다.

 

메시지의 우선순위

 CAN 은 메시지에 우선 순위를 갖습니다. 이는 무엇을 의미하냐면, 만약 두 개 이상의 노드가 메시지 전송 시 버스 기반이기 때문에 신호 충돌이 나고, 이럴 경우 문제가 생깁니다.(RS-485는 죽는다고 하더군요..) 그러나 CAN 버스는 이를 알아차리고 재 전송을 요구합니다. 이더넷은 신호 충돌이 난 두 노드 각각 일정 시간 후 재 전송을 요청하지만, CAN은 충돌난 메시지 중 우선 순위가 높은 경우에는 우선순위 높은 메시지가 우선 전송이 되고 낮은 메시지가 일정 시간 후 재 전송을 시도 하게 됩니다.(CSMA/NBA)이는 기존 이더넷 방식의 CSMA/CD 보다 실시간성이 높고 빠른 반응 속도를 갖을 수 있는 장점이 있습니다. 메시지 우선 순위는 메시지 프레임에서 IDENTIFER 필드 부분의 값이 적을 수록 높은 우선순위를 갖습니다.

 

• 시스템 유연성

 노드가 추가 되거나 제거 되더라도 소프트웨어 또는 하드웨어를 변경없이 적용이 가능한 장점을 갖고 있습니다.


• 메시지 라우팅

 CAN 은 조금 특별하게 메시지 프레임에 주소를 포함하고 있지 않습니다. 기본적으로 멀티캐스트로 전송하면서 해당 노드는 메시지 프레임에 포함됨 해당 IDENTIFIER를 보고 자신에게 필요한 데이터일 경우 수신받고 그렇지 않을 경우 배제를 합니다.


멀티캐스트 수신

 기본적으로 버스형 토폴로지를 하고 있기 때문에 한 노드가 전송한 데이터는 모든 노드에게 전달 됩니다. 그렇기 멀티캐스트로 한번에 데이터를 전송할 수 있습니다.

 

멀티 마스터

 CAN은 기본적으로 메시지 충돌 회피를 지원하기 때문에 마스터에 의한 폴링 방식으로 데이터를 전송할 필요가 없습니다. 어느 노드든지 원하는 시간에 자유롭게 메시지를 전송하고 수신할 수 있습니다.

 

에러 검출 및 복구

 CAN은 다양한 에러를 검출 할 수 있습니다. CAN 자체로도 5가지 정도의 에러를 검출 할 수 있고 복구가 가능하기 때문에 신뢰성 있는 데이터 전송이 가능합니다.

 

훼손된 데이터 자동 재전송

 데이터가 정상적으로 전송이 되었더라도 데이터 자체가 훼손이 되거나 이상이 있을 경우 이를 자동적으로 재전송 할 수 있습니다.

 

일시적인 에러 및 지속적인 에러를 구분 검출하여 격리

 버스형 토폴로지에서는 에러를 발생시키는 노드는 상당히 문제가 됩니다. CAN에서는 3가지 정도로 에러를 발생시키는 노드를 구분하여 만약 문제가 많은 노드일 경우 CAN 버스에서 격리를 시킬 수 있습니다.



출처 : http://cafe.naver.com/micropc

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,
EEPROM(Electrically Erasable PROM)은 On-Board상태에서 사용자가 내용을 Byte단위로 Read하거나 Write 할 수 있으므로 사실상 SRAM처럼 사용 할 수 있는 불휘발성 메모리이다.(NVRAM, Non-Volatile RAM이라고 부르기도 한다.) 그러나, 이것의 Read 동작은 Access동작이 다소 느릴지라도 SRAM과 유사하므로 별 문제가 없는데 비하여, Write 동작을 수행하는 경우에는 1byte를 write 할 때마다 수 ms 이상의 시간지연이 필요하므로 SRAM과 동일하게 사용할 수는 없다. 따라서 EEPROM은 실시간으로 사용되는 변수를 저장하는 메모리나 스택 메모리로는 사용될 수 없으며, 한번 내용을 저장하면 비교적 오랫동안 이를 기억하고 있으면서 주로 이를 읽어 사용하기만 하거나 전원을 꺼도 지워져서는 않되는 중요한 데이터를 백업하여 두어야하는 설정값 저장용 메모리로 적합하다. 이 메모리 소자는 28Cxxx의 형태로 이름을 짓는 경우가 많다.



Flash Memory는 On-board 상태에서 사용자가 내용을 Byte단위로 자유로이 Read 할 수는 있지만, Write는 Page 또는 Sector라고 불리는 Block 단위로만 수행 할 수 있는 변형된 EEPROM이다. 블록의 크기는 Memory 소자나 Maker에 따라 다르지만 대체로 64Byte, 128Byte, 246Byte 등에서 부터 128KB까지도 사용한다. 이렇게 Flash Memory는 EEPROM과 매우 유사하지만 Byte단위로 Write하는것이 불가능하므로 Page mode write 기능만 가지는 EEPROM이라고 생각하면 되며, 따라서 역시 SRAM처럼 실시간 Data memory로 사용하는 것은 불가능하다. 그러나, Flash memory는 EEPROM보다 Memory Cell 구조가 간단하여 휠씬 대용량의 메모리 소자를 만드는데 적합하며, 1개의 Block 전체를 Write하는데 수 ms 정도가 걸리므로 대용량 Data를 Write할 때는 EEPROM보다 훨씬 빠르다는 장점을 가진다.



그런데, Flash memory는 내부 구조에 따라서 NOR형 Flash와 NAND형 Flash memory로 나누 수 있다. NOR형 Flash는 다른 Memory 소자와 같이 외북 구자가 Address bus, Data bus, 그리고 몇가지의 제어신호 및 전원으로 되어 있어서 프로그램 저장용으로 널리 사용된다. NOR형 Flash memory는 대부분 29Cxxx 형태의 이름을 가지고 있다. 그러나, NAND형 Flash memory는 Address bus와 Data bus가 따로 있는 것이 아니고 8개(또는 16개)의 Data 신호와 몇 개의 제어신호 및 전원핀을 가지고 있다. 8개의 Data 신호선은 Address 및 제어명령을 Write하거나 Data값을 읽고 쓰는 용도로 사용된다. 이렇게 하면 Memory를 읽고 쓴느 동작은 좀 번거로워지지만 Memory 용량이 증가하더라도 핀 수가 늘어나지 않으므로 하드웨어 규격을 통일 할 수있어서 Flash memory를 마치 Hard disk처럼 사용하는 것이 가능하다. 특히, 요즈음에는 휴대용 기기를 염두해 두고 1.8[V]나 3.3[V]의 저전압에서 동작하는 수십 MB~ 수 GB짜리 대용량의 NAND형 Flash memory가 많이 개발되어 휴대용 통신기기, 디지털 카메라, MP3 Player, 이동형 USB Memory등과 같은 용도에 널리 사용되고 있다.



참조: AVR ATmega128 마스터, 44Page (Oho사, 윤덕용 저)

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,


WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

개요

과학 기술의 발전 및 전기 전자기기의 사용증가와 더불어 FA, OA, 시스템의 대규모화등 컴퓨터화에 의해 전자 장치의 역할이 더욱 크게 되었고, 정보를 고속으로 교환하는 다양한 정보 통신망의 실현에 따라 이용 주파수 스펙트럼도 확장되었다.

텔레비전, 라디오 등과 같이 전파를 수신해서 기능을 발휘하는 제품이나 컴퓨터와 같이 MHz대의 펄스를 사용하는 제품에서는 환경 오염의 일종인 전자파가 존재하는데, 이 전자파가 공간으로 방사 또는 전원 코드를 통해서 다른 제품에 영향을 줄때 이러한 전자파를 『노이즈』또는 EMI(Electro Magnetic Interference)라 한다
.

이러한 노이즈는 전기 전자기기의 목적과 기능을 방해하는 불필요한 전기적 에너지라 할 수 있으며 이런 장해 전자파가 발생하는 이유는 반도체와 디지털기술의 발전으로 부품이 소형화, 고밀도화, 고속도화로 짧은 시간에 전압이나 전류가 급격하게 변화하기 때문이다

 

1.      노이즈의 종류

 

노이즈는 전기를 띤 구름이 뇌방전을 일으킬 때 발생되는 『자연노이즈』와 사람이 장치등을 사용할 때 부수적으로 발생되는 『인공노이즈』로 크게 분류되며, 자 연노이즈는 구름의 기단 사이에 기상 변화가 심할 때 낙뇌가 송전선 또는 통신 회선등에 직접 인가 되었을때 발생하는 직격 뇌써지와 뇌방전시에 구름과 구름 사이 또는 구름과 대지 사이에서 대전된 전하가 소멸되는 현상 즉 매우 큰 방전류에 의한 유도 현상으로 인하여 송전선이나 통신회선등에 이상 전압이 발생하는 유도뇌써지 등이 있다.

인공노이즈는 『방사노이즈』와『전도노이즈』가 있으며, 방사노이즈는 방송이나 휴대 무선기등의 통신용 전파에 의한 장해는 물론 송전선의 코로나 방전, 오토바이의 점화시의 노이즈 등 공간으로 직접 피해측에 전파하는 것이고, 기기나 회로간을 연결하는 신호선이나 제어선, 전원선 등이 본래 전송해야 할 신호들과 달리 이들 도선을 통해 피해측에 유도되는 전자파를 전도노이즈라 한다.

전도노이즈Transient, Impulse 등과 같이 전원선을 타고 들어와 Line간을 왕복하는 『노멀 모드 노이즈(Nomal Mode Noise)와 전원선을 타고 들어온 뒤 Earth Line을 타고 나타 나거나 그 반대의 경우와 같이 Line Earth간에 전달되는 커먼모드 노이즈(Common Mode Noise) 구분되며, 노멀 모드 노이즈는 대부분 짧은 시간에 높은 전압을 주고 사라지는 것으로 기기는 예고없이 에러를 내게되고 특히 전송중에 있는 데이터는 치명적이 될 수 있으며, 커먼 모드 노이즈는 Ground를 기준 전위로 채택하는 Logic 회로가 내장된 전자기기나 Memory계통에 에러를 유발 시킬수 있다.

 

2.      노이즈 대책

 

기기들이 서로 조화를 이루어 공조할 수 있는 능력을 적합성( EMC:Electro Magnetic Compatibility ) 이라 하며 EMC EMI EMS로 구성되며, 노이즈 문제를 해결하기 위해서는 두가지 방법으로 접근할 수 있는데, 하나는 불용전자파의 방사를 억제하는 것이고(EMI:Electro Magnetic Interference, 전자파장해) 다른 하나는 어느 정도의 전자파 환경내에서도 그 장해를 견디며 정상적으로 동작할 수 있도록 내성(EMS:Electro Magnetic Susceptibility)을 강화시키는 방법이다.

노이즈 문제가 발생하려면 다음의 3가지 요소가 반드시 조합되어야 하며 이중 어느 하나만이라도 제거 되면 문제가 발생하지 않는다.

 

효과적인 EMI 노이즈 대책이란 회로 메카니즘의 적절한 밸런스를 이루는 것으로 좁은 영역에서의 EMC를 말하는 것이라 할 수 있으며, 이와 같은 노이즈를 저감하기 위한 실제 기술로는 접지(Grounding), 필터링(Filtering), 차폐(Shielding) 등이 있다.

1)접지기술

전자 기기 내부의 접지는 신호 그라운드(SG)와 프라임 그라운드(FG)로 나누어 볼 수 있는데, 노이즈에 의한 트러블은 이와 같은 SG계통과 FG계통의 레벨 변동이 원인인 경우가 많다.
SG
는 회로 전류를 귀환시키는 그라운드이므로, 전류가 흐르는 그라운드이고, FG는 전류가 흐르지 않는 그라운드로서 FG에 전류가 흐르면 외부로 노이즈 방사의 원인이 되기도 하고, 외부의 전자계에 대한 감수성을 높이기도 한다.

따라서 어스회로의 임피던스를 가능한 적게 하고. 어스회로에 전류가 흐르지 않게 하며, 또한 그라운드 루프를 형성하지 않도록 하는 것이 기본이다.

 

2)Lay-out

전자 부품 및 내부와이어 같은 것들의 Lay-out 이 의외의 노이즈 특성을 좌우하는 경우가 많다. 기본적으로 전기적인 성격이 다른 부분은 분리하는 것이 좋다.
예를 들어

입력 <-> 출력, 디지털 <-> 아날로그, 고속 <-> 저속, 고압 <-> 저압, 저임피던스 <-> 고임피던스 를 분리하여 부품배치와 배선패턴을 최적화하여 용량결합, 유도결합, 공통 임피던스 결합에 의한노이즈 발생 메카니즘을 피하는 것이 좋다.

 

3)전자부품 선정

IC TR과 같은 능동소자, 콘덴서, 인덕터, 트랜스와 같은 수동소자 및 콘넥터, 스위치와 같은 기구품등의 특성, 성능을 노이즈 발생 메카니즘과 관련시켜 컴토하고 최적인 부품을 선정함으로서 노이즈에 대한 내력(Immunity)을 강화시키고 노이즈성분의 발생을 억제 시킨다.

 

4)차폐기술(Shielding)

차폐는 노이즈의 영향을 받고있는 회로나 기기의 장해 방지 수법 중 가장 근본적이고 넓게 사용되고 있는 방법으로 일반적으로 용량 성분적인 결합을 방지하는 것을 『정전쉴드』 , 자계 및 전자파에 의한 결합을 방지하는 것을 『전자쉴드』 라고하며, 정전쉴드는 알루미늄이나 동 등의 금속케이스나 쉴드 케이블을 사용하는 대책으로 낮은 레벨의 회로나 고주파 회로에 효과적이며, 전자쉴드는 외부로부터 자속의 영향을 받기 쉬운(또는 외부로 자속을 누설하기 쉬운) 트랜스, 인덕터와 같은 것을 니켈 등과 같이 고투자율 금속의 케이스를 사용하여 내부(또는 외부)에 대하여 자속의 침입이나 누설을 방지하는것이다.

 

5)필터기술(Filtering)

도체를 통해 전달되는 전도노이즈 및 자유공간으로 방사되는 방사노이즈에 대한 대책에서 양쪽 모두의 대표적인 방법으로 필터링 기술이 있다. 필터는 인덕턴스와 커패시턴스의 조합으로 구성되며 전원계에 사용되어지는 것과 신호계에 사용되어지는 것으로 구분된다. 전원용 필터는 고전압, 대전류에 견디도록 설계되어 일반적으로는 30MHz 이하의 낮은 주파수 대역에서 주로 사용되고, 통상 30MHz이상의 주파수 대역에서 적은 전류의 신호계에 사용되는 신호용 필터는 실제의 제품에 적용해보면서 각각의 경우에 맞는 최적의 필터를 결정하는 경우가 많다.

 

노이즈 관련 용어

A. RFI(Radio Frequency Interference)
『무선주파장해』로 무선통신의 통신장해, 혼신을 일컬음.

B. EMI(Electro Magnetic Interference)
『전자파장해』로 무선통신기기, 전자기기, 기계, 자동차 등 모든 물체에서 발생하는 직류에서 초고주파까지의 전자기 방해를 일컬음.
C. EMS(Electro Magnetic Susceptibility)
『전자파감수성』으로 기기가 외부방해의 영향을 얼마나 쉽게 받는지를 나타낸 것.

D. EMC(Electro Magnetic Compatibility)
『전자환경적합성』으로 EMI EMS를 합친 것.

 

EMI 규격

미국, EU등을 비롯한 선진 각국에서는 EMI에 대한 법적규제를 실시하고 있고 EMI문제를 해결하기 위하여 정확한 측정방법, 대책 기술 개발 등에 노력을 기울이고 있다.
이에따라 전기전자 제품의 수출시 반드시 해당국가의 EMI 규제에 통과하지 않으면 안되며, 주요 규격은 다음과 같다
.

CISPR (IEC
국제 전자파장해 특별위원회
)
FCC (
미국연방통신 위원회
)
VDE (
독일 전기기술자 현회
)   
VCCI (
일본정보처리장치 등 전자파장해 자주규제협의회)

 

1.NOISE FILTER의 개요

AC전원 라인은 외부의 노이즈가 전자기기로 침입하기도 하고, 전자기기의 내부에서 노이즈가 외부로 유출되는 경로가 된다.

또한 AC 라인 노이즈에는 라인간에 발생하는 『노멀모드노이즈(Normal Mode Noise)』와 양쪽 전원 라인과 그라운드 사이에서 발생하는 『커먼모드노이즈(Common Mode Noise)』 가 있다.

 

따라서 노이즈 필터는 이러한 두 종류의 노이즈를 제거하는 회로망이 필요하다.
노이즈 필터는 3종류의 부품으로 구성된 것이 일반적으로 각각의 부품은 노이즈의 모드와 주파수에 따라 커먼 모드 초크코일이 저역의 커먼 모드 노이즈를 제거하고, 어크로스 라인 콘덴서가 저역의 노먼 모드 노이즈를 제거하며, 또한 라인 바이패스 콘덴서는 고역의 커먼 모드와 노멀모드 양방의 노이즈 제거 역할을 한다
.

커먼모드 초크코일은 1개의 폐자로 Core에 동일한 인덕턴스의 코일을 반대방향으로 감아서 부하에 공급하는 전류에의한 코아의 포화를 방지하고(자속을 서로 상쇄시킴) 커먼 모드 노이즈에 대해서는 인덕터로 동작하며, 라인 바이 패스 콘덴서는 라인과 프레임 그라운드간에 접속하는 콘덴서이다.

 

2 사용상 주의사항

1)NOISE FILTER는 기기의 입출력 단자와 가장 가깝게 접속해야 하며, NOISE FILTER
입출력선은 서로겹치지 않도록 하여 NOISE FILTER의 감쇄 특성이 최대한 발휘되도록 한다.

2)NOISE FILTER
를 기기에 장착할 때는 가능한 고주파 저항을 최소화 하여야 하며
,
이를 위하여 금속 케이스의 NOISE FILTER를 접속할 때는 기기의 접속부분의 도장성분을 제거하여 전기 전도성을 좋게하며, 접지 단자가 있는 NOISE FILTER는 반드시
NOISE FILTER
의 접지 단자와 가장 가까운 거리에 접지한다.

3)
고전압의 SURGE IMPULSE가 침투할 우려가 있는 경우에는 NOISE FILTER 앞단에

SURGE ABSORBER
를 사용하는 것이 좋다.

4)NOISE FILTER
의 전압, 전류 정격 이내에서 사용하여 NOISE FILTER의 성능 및 신뢰성이 떨어지지 않도록 한다.

 

EMI Filter (Noise Filter)의 의미
Noise란 원하지 않는 신호를 말합니다.
특히, 전기전자 분야에서 노이즈는 불요전자파를 말합니다. 불요전자파는 전원선을 통해 다른 기기에 영향을 주는 전도노이즈(CE)와 공기중을 통해 다른 기기로 전달되는 방사노이즈(RE)가 있습니다.전기를 소비하거나 생성하는 모든 기기들은 전자파를 발생시키고 또 전자파의 영향을 받기도 합니다.컴퓨터와 주변기기들을 예로 들어 보면, 컴퓨터는 같은 전원 (Power Source)을 사용하는 TV, 선풍기, VTR, Lamp, 전동드릴에 전원선과 공기중을 통해 전자파의 영향을 주기(Emission)도 하고 그들로부터 전자파의 영향을 받기(Susceptibility)도 합니다
.

 

EMI Filter의 역할

 

EMI Filter는 기기의 전원 입력단에 설치되며 기기에서 방출되어 전원선을 통해 빠져나가는 불요전자파를 차단, 흡수, 대지로 Bypass 시켜주는 전자부품입니다.

-                                  EMC : Electromagnetic Compatibility(전자기 양립성)
- EMI : Electromagnetic Interference (
전자기 방해
)
- EMS : Electromagnetic Susceptibility(
전자기 감수성
)
- CE : Conducted Emission (
전도 방출
)
- RE : Radiated Emission (
방사 방출
)
- CS : Conducted Susceptibility(
전도 감수성
)
- RS : Radiated Susceptibility(
방사 감수성)

 

Permissible noise limits(노이즈 허용 규격치)
다양한 규격들이 전도 EMI에 대한 규격치를 설정하고 있다. 이러한 규격치들은 전압으로 측정되고 dB ㎶로 값이 주어진다. 여기서 0dB 1㎶이다
.
이 전자파 간섭은 Bandwidth Receiver로 불리우는 측정 계측기를 사용하여 측정되고, 이 두 가지 수신기들은 Quasi-peak(준첨두) detector Average(평균) detector로 사용된다
.
측정의 반복성을 유지하기 위해 main 전원의 impedance는 일정해야 한다. 규격에서는 인공 주전원 회로망이라고 하며 때로는 전원 임피던스 안정화 회로망(LISN)이라고 불리기도 한다.- 이것은 noise에 규정된 impedance를 실어주고 또 측정에 영향을 줄 수 있는 주전원에 대한 noise를 걸러준다
.

그림 1은 유럽 주거지역, 상업지역과 경공업 환경의 일반적인 기준을 보여준다
.
그림 2는 유럽 공업환경의 일반적인 기준을 보여준다.

30MHz이상에서는 전도 noise 대신 방사 noise 간섭을 측정한다. 이것은 지정 안테나를 사용하여 Open field site에서 측정된다.

 

Interference sources and spectrums
전도 EMI의 가장 일반적인 요인은 SMPS, PWM, Frequency Converter 또는 Motor drive Phase angle controller와 같은 전력전자 제품들이다
.
방사 spectrum은 일반적으로 낮은 주파수에서 매우 크게 발생한다. 그리고 주파수 증가에 따라 줄어든다
.
Noise
가 수용할 수 있는 규격치 이하로 떨어지는 point는 여러 가지 요인에 따르며, 가장 주요한 요소는 동작주파수와 반도체 부품의 rise time이다.

 

Interference propagation (간섭의 전달)
EMI
는 두 가지 방법으로 전달 된다
.
By radiation (
방사) - 에너지가 있는 곳에서는 자기장 또는 전기장을 통해서, 또는 source와 피간섭물 사이의 전자파로써 서로 결합될 수 있다
.
By conduction (
전도) - EMI energy는 전력 공급 선과 data cable을 따라 전파된다.

방사와 전도 EMI는 전체적으로 분리된 문제로 생각할 수 없다.
Cable
에 전도된 noise antenna로 작용하는 cable로 인해 방사될 것이다. 그 방사는noise의 파장과 비교하여 상대적으로 cable의 길이에 따라 증가할 것이다. 역시, cable은 수신 antenna로써 작용하여 방사 noise를 받아들이게 된다.

150MHz 부근 이하에서, system 내에서의 가장 영향을 미치는 방사 발생 부품들은 일반적으로 전원 공급 장치와 신호선들이다. 이러한 cable들의 적절한 filtering cable의 전도 noise 방사를 줄이는 것이다.
150MHz
이상에서, PCB 트랙과 짧은 내부의 cable들은 효과적인 안테나로 작용한다
.
PCB
의 방사를 감소시키기 위해서는 트랙의 길이와 루프의 면적을 감소시켜야 하고, 가능하면 접지판을 사용하여야 한다. Digital IC의 분리는 매우 중요하며 shield 처리도 요구될 것이다
.

Interference types(간섭의 종류)
전도 EMI와 연관된 문제들을 이해하기 위해서는 먼저 전도 noise의 두 가지 mode를 이해할 필요가 있다. , Differential mode-또는 symmetrical(대칭) mode common mode-또는 asymmetrical(비대칭) mode 이다
.
Differential mode noise
는 시스템의 상간에서 전압을 발생시키고 대지와는 무관하다.

대칭 모드 전류는 한 상을 따라 흐르고 다른 상을 따라 돌아 나온다.

Common mode noise는 각각의 상과 대지사이에 전압을 발생 시킨다. 비대칭 모드의 전류는 earth path(일반적으로 기생 capacitance)를 따라 noise원으로부터 대지로 흐르고 다시 각 상으로 돌아 온다. (그림 3. VCM) 전원라인 필터는 common mode differential mode noise를 함께 감쇄할 수 있도록 설계되어야만 한다.

 

Mains filters
최대 전력 전송은 전원과 부하 impedance가 일치했을 때 발생한다. Power line filter impedance 사이의 최대 불일치 발생을 목적으로 하는 inductor capacitor 회로망이다. 그러므로 noise source에서 전원 line cable로 전송되는 EMI 간섭량을 줄일 수 있다
.
 

Inductor L1 L2 -전류를 보상하는 형태로- 일반적으로 toroidal core에 감는다.
이 권선법은 differential mode current mains current를 서로 상쇄시키도록 자속을 발생시키고, 반면 common mode current는 배가가 될 것이다. 이것은 common mode current에 큰 inductance를 주고, 주전원 current에 의해 생성되는 큰 자속(magnetic flux)에 의해 inductor가 포화 되는 것을 막아준다
.
각 상간에 위치하는 X class capacitor라고 말하는 capacitor들은 높은 pulse 정격 전압을 가져야 하고 differential mode interference를 감쇄 시키는 데 사용된다. 상과 earth 간의 Y class capacitor로 알려진 capacitor들은 좀더 엄격한 등급이어야 하고 common mode interference를 감쇄 시키는 데 사용된다. Y capacitor의 용량은 허용 누설전류에 따라 제한된다.최대 누설전류는 규격과 법규와 장비의 형식에 의해서 제한된다.

누설전류는 다음에 의해서 주어진다.
lL=2
πUf
C
IL -
누설 전류

U - Capacitor
전압

f -
주전원의 주파수

C - Capacitor
용량

전원용 filter는 고주파 interference filter를 우회하지 않도록 가능하면 전원 입력부 가까이 설치 되어야 한다. IEC inlet module은 이 목적에 적합하도록 이상적으로 맞게 되어 있다.

높은 감쇄 또는 동작 주파수 범위에서의 효과를 증가시키기 위해 그림 4에서 보여주는 1단 회로보다 좀더 복잡한 filter를 여러 개의 common mode 또는 differential mode inductor 그리고 capacitor들을 사용하여 만들 수 있다.

 

Filters with earth line chokes
시스템의 모든 케이블에 전자파 간섭이 동시에 발생될 수 있다. 이 경우 earth cable에도 동일한 noise가 발생될 것이다.
표준 필터는 phase line noise를 감소시킬 수 있지만, 대지에 대해서는 그렇지 못하다. 접지선에 유기된 noise는 장비로 유입될 수 있고 장비의 장애를 발생시킬 수 있다. 이 간섭을 줄이기 위해 earth line choke를 장착하거나 filter와 조ㅜ 합한다. Earth line choke는 일반적으로 common mode current에 대한 별도의 감쇄효과를 줄 것이다.

시스템에서 earth line choke를 우회하지 않도록 주의가 필요하다. 예를 들어 PC earth line choke가 구성된 filter를 가지고 있을 것이다. 만약 이 PC main 전원으로부터 전력을 공급 받는 printer와 연결되어 있고, 만약 그 printer earth line choke가 없다면 noise는 아마도 주전원에서 printer로 가는 경로를 찾고 PC로 연결되는 신호선을 따라 PC안에 있는 earth line choke를 우회할 것이다.

EMC회로는 노이즈 필터이며, 인덕터(CHOKE), 캐패시터(CAPACITOR)로 구성되었다.

 인덕터는 Noise filter의 가장 중요한 부품이며 Normal mode choke Common mode

 choke로 나뉜다.

  Normal mode choke Iron powder가 주로 사용되며 이 코아는 포화 자속밀도가 높을

  뿐 아니라 투자율이 작은 대신 주파수 대역폭이 넓으므로 Line cross capacitor(X CAP)

  와 조합하여 Normal mode noise를 효과적으로 억제한다.(자속을 한 방향으로 가지게

   winding 한다).

  Common mode choke는 투자율이 크고 hysterisis 손실이 적은 페라이트 코아를 사용하여 자속이 합하여 지도록 winding하여 Line to ground capacitor(Y capacitor)와 결합하여 사용하면 Common mode noise를 억제 할 수 있다.


WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

회로를 꾸미다 보면 여러가지의 기능을 하는 모듈이 한 회로속에 들어가게된다. 한 회로속에 들어가게 된다는 것은 전원과 접지를 공유 하게 된다는 것이다.

 

그렇게 되면 어느 한 모듈에서 고주파 신호를 만들어 내게 된다면 그 신호가 다른 모듈에 영향을 미쳐서 그야말로 미쳐 버린다. 기판을 보면 모든게 다 얽혀 있는것 같지만 잘 보면 나름대로 기능별로 나뉘어 있다. 다만 전원과 접지를 공유하기 때문에 모든 회로가 얽혀 있는것 처럼  보이기 쉽상이다.

 

모듈간의 간섭 문제는 로봇같은 걸 만들다보면 필히 겪게된다. 여러 종류의 센서를 쓰게 되기 때문에 이 센서 회로가 저 센서 회로에 영향을 미치는 일이 생기는 것이다.

 

내 경우는 적외선 거리 센서를 달았더니 적외선 동작감지 센서에 엄청난 규칙적 노이즈가 끼는 문제가 있었다. 게다가 적외선 동작감지 센서 회로에는 아주 잘 필터링 된 떨림 없는 전류를 넣으라는 권장사항까지 있었다.

 

그러나 실험적인 방법(?)으로 필터회로에 들어갈 저항과 커패시터의 값을 찾기는 너무 어려웠다. 그래서 일단은 그걸 MCU에서 프로그램을 써서 연이은 6개 정도의 값을 평균내는 방식으로 노이즈를 줄여주는 기초적인 방식으로 해결했었다.

 

그것은 원하는 주파수대만을 걸러주는 필터회로를 어떻게 구성하는지 몰라서 프로그램을 쓸 수 밖에 없었다. 당시에는 여기 저기 찾아봐도 수식만 덜렁있을뿐, 예를 들어 계산을 해 놓은 곳이 한 군데도 없어서 수식에 뭘 넣어야 되는지도 모르는 나는 답답하기만 했다. 그런데 오늘 검색해보니 금방 나오네? TT

 

필터회로는 아래 그림 처럼 저항과 커패시터(콘덴서) 또는 저항과 코일의 조합으로 만들어 준다.

 


그림출처: MIT Open Course Ware, Anant Agarwaland Jeffrey Lang, course materials for 6.002

 

모듈로 들어오는 전원에 직렬로 저항을 연결하고 전원과 접지에 병렬로 전해 커패시터를 연결하면 간단한 로우패스 필터가 된다. 로우패스 필터는 특정 주파수 이하의 신호만 통과 시키는 회로이다. 그러니까 옆 회로에서 적외선 거리센서의 발진부처럼 40KHz의 발진을 일으키는 회로를 쓴다면 그 보다 좀 여유있게 낮은 10KHz이하의 신호만 통과시키는 회로를 달아 주거나 아예 확실하게 10Hz이하로 해버려도 좋을 것 같다.

 

방금도 누가 만들어 놓은 적외선 감지회로를 만들었는데. 회로도의 로우패스 필터보다 훨씬 더 낮게 했더니 겨우 제대로 작동하는 걸 보니 충분히 낮게 해주는게 좋은것 같다.

 

주파수 계산은 이렇게 한다고한다.

 

    필터링 주파수= 1/(2* 3.141592 * R * C )   

 

저항값은 그대로 넣고 커패시터는 보통 마이크로 패럿이니까 33uF(u는 마이크로의 의미로 쓴 것임)이면 0.000033 을 넣어야겠다.

 

내가오늘 만든 적외선 접근 센서회로에는 원래 저항은 50 오옴에 33uF의 커패시터를 쓰고 있었다. 계산해보니 1/(2 * 3.141592 * 50 * 0.000033) = 96.45756 이 나온다. 적외선 LED의 발진 회로는 40KHz를 쓰고 있으니 96Hz 정도면 센서회로 쪽의 전원으로 노이즈가 들어오지 않도록 충분히 커버를 해줘야 되는, 그러지 못했다.

 

그것은 아마  필터회로가 깔끔하게 어느 주파수이상 이하를 칼처럼 잘라주는게 아니라 위의 그림처럼 점차 줄여주는 방식이기 때문에 꼬리가 걸린게 아닌가 싶다. 그래서 저항을 좀 키워봤는데도 비슷해서 확 키워서 550오옴 짜릴 넣어줬더니 확실하게 작동한다. 약 8.7Hz이하의 전압변동만 전원으로 들어오기 때문에 수신회로는 노이즈로부터 확실히 격리된 것 같다.



WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,