렌더링
물체의 모양을 그 형이나 위치, 광원 등의 외부 정보를 고려하면서 실감 나는 화상을 표현하는 컴퓨터 도형의 기법. 즉 2D나 3D에서 컴퓨터 그래픽스(CG) 영상 작성 시 최종 단계로 영상을 생성하는 것을 말한다. 2D CG에서 렌더링은 동화상에 대한 화상 처리 공정의 최종 단계로서 처리 완료된 화상을 생성하는 공정을 말한다. 또한 3D CG의 경우에는 컴퓨터 내부에 기록되어 있는 모델 데이터를 디스플레이 장치에 묘화(描畵)될 수 있도록 영상화하는 것을 말한다. →묘화 프로그램.
by 범도리 | 2004/10/08 21:35 | Graphic | 트랙백(2)
벌새 [humming bird]
벌새 [humming bird]

요약
칼새목 벌새과의 총칭.

분류 칼새목 벌새과
종수 320여 종
생활방식 단독 생활
크기 몸길이 6.5∼21.5cm
색 녹색·갈색·검정색
생식 난생(1회에 2개)
서식장소 열대 산림 및 덤불
분포지역 남아메리카, 중앙아메리카 북부

본문
몸길이 6.5∼21.5cm이다. 조류 중에서 가장 작은 새로 320여 종이 있다. 날개는 좁고 길며 꽁지는 길거나 짧다. 다리는 짧고 발가락은 작고 약하다. 목은 짧다. 부리는 곧게 뻗거나 밑으로 굽었고 짧거나 길다. 깃털 색깔도 다양하지만 녹색·갈색·검정색이 주를 이룬다. 종에 따라 머리 꼭대기에 장식깃이 있다. 몸빛깔은 암수 비슷한 종이 많다. 날개를 빠른 속도로 움직여서(1초 동안 55회나 날개를 퍼덕이는 종도 있다) 경쾌하게 공중 행동을 하는 것이 특징이다. 반대로 걷기 능력은 거의 없고 발은 나무에 앉을 때만 사용한다. 주로 단독 생활을 하며 성질이 공격적이고 물가에서 목욕을 즐긴다.

활동량이 많기 때문에 먹이도 곤충·거미·꽃꿀 등 영양분이 많은 것을 즐겨 먹는다. 꽃의 꿀을 먹을 때는 항상 날개를 빠르게 퍼덕여 정지 상태로 날면서 빨아먹는다. 곤충은 날면서 잡아먹는다. 일부 종은 일부다처제이다. 거미줄·이끼·솜털 등을 재료로 하여 깊은 컵 모양 둥지를 틀되 대개 암컷이 틀고 한배에 2개의 알을 낳아 암컷이 품는다. 암수 함께 새끼를 기르는 종도 있으나 대개 암컷이 맡아 키우는데, 알은 품은 지 14∼17일 지나면 부화하고 새끼는 부화 후 19∼31일 동안 어미새로부터 먹이를 받아먹는다. 주로 열대의 산지 숲과 덤불에 산다. 주로 남아메리카에 분포하나 일부는 중앙아메리카 북부에도 분포한다.


by 범도리 | 2004/08/22 00:36 | M. A. V. | 트랙백
대역폭과 전송 속도
대역폭과 전송 속도

-------------------------------------------------------------------------

전송 신호와 전송 매체의 속도 및 용량은 대역폭 또는 전송 속도에 의해 표현된다.
대역폭은 신호가 차지하고 있는 주파수 범위(스펙트럼)의 크기 또는 전송 매체가 수용할 수 있는 주파수 범위의 크기를 말한다. 전송 매체의 대역폭은 일반적으로 전송하고자 하는 신호의 대역폭보다 크거나 같아야 하는데, 아래 표에서는 음성, 영상 신호의 대역폭과 이들 신호를 전송할 수 있는 대표적인 전송 매체인 전화선, 동축 케이블의 대역폭을 보여 주고 있다.

신호 대역폭 전송 매체 대역폭
음성 3,100 hz 전화선 4,000 hz
영상 4 Mhz 동축 케이블 350 Mhz

전송 속도는 두 가지 단위에 의해 표현되는데, bps와 baud(보오)가 바로 그것이다. bps는 초당 전송되는 비트수를 나타내며 baud는 초당 전송되는 단위 신호의 수를 나타낸다. 이렇게 두 가지 단위가 사용되는 이유는 하나의 이진 비트를 디지탈 신호로 표현할 때 다양한 갯수의 단위 신호, 예를 들면 0.5, 1, 2 개 등의 단위 신호로 표현할 수 있기 때문이다(인코딩 기법 참조). 이 두 가지 단위 중에서 bps는 사용자 측에게 중요한 의미를 가지게 되고 baud는 전송 장비 구현자에게 중요한 의미를 가지게 된다.


>>대역폭

신호가 차지하고 있는 주파수 범위(spectrum)의 크기
전송 매체가 수용할 수 있는 주파수 범위의 크기
예: 음성 신호의 대역폭 - 3,100 hz (3,400 - 300 hz)
예: 전화선의 대역폭 - 4,000 hz

- 대역폭이 넓을수록 채널의 전송 능력은 커진다.

- 대역폭을 향상하는 방법

① 넓은 대역폭 확보 ⇒ 높은 주파수 활용, 광통신 기술 개발
② 대역폭을 효율적으로 나누어 쓰는 방법 ⇒ 다중화


>>전송 속도

데이터 전송의 속도 : bps 또는 baud로 표시됨
bps (bit per second) : 초당 전송할 수 있는 비트의 수
baud : 초당 전송할 수 있는 단위 신호의 수
by 범도리 | 2004/08/08 00:28 | Hardware | 트랙백(1)
M. A. V. (Micro Air Vehicle) 개요
< 초소형 비행체 M.A.V.(Micro Air Vehicle)>

1. 정의

- 초소형 비행체는 개인이 일종의 휴대품으로 취급할 정도로 크기가 작아야 하고, 최소한의 원격 조종 훈련만으로도 운용이 가능하며, 필요에 따라 제한된 지역을 비행하면서 영상과 소리 등의 정보를 수집하여 송신할 수 있는 기능을 가진 운항체이다.

* 개인 휴대용 정도의 초경량 비행체 구조(15cm, 100g 이하)
* 제한된 지역을 비행하며 영상과 소리등의 정보를 송신
* 30-60km의 속도로 20-60분 비행
* 일회용 개념으로 운용($1,000/EA 이내의 제작비)

2. 용도

- 초소형비행체가 개발되면 군사적 목적으로 활용될 것이 예상되고 교통이나 환경감시, 테러 진압 등 민간용으로도 응용될 것이다. 미국의 경우, 21세기의 전투에서는 군인 개개인이 초소형 항공기와 컴퓨터를 간단하게 휴대하고 다니며 필요한 경우, 항공기를 미리 띄워 보내서 제한된 지역을 정찰하고 화학, 생물학 및 방사능 오염도 등을 측정하여 영상과 탐지 정보를 실시간 송신하며 적진의 상황을 모두 파악 한 후 작전을 수행하는 계획을 가지고 있다. 또한 초소형 비행체를 이용하면, 도시 시가전의 경우에 있어서, 좁은 골목이나 건물과 건물 사이 비행, 환기구나 굴뚝을 통한 정탐 및 공격이 더욱 효과적일 것이다. 좀 더 공격적인 용도로는 순항미사일 또는 레이더 시스템 교란장치로도 이용될 수 있다. 유인 항공기 개발 초기에는 군사적 목적의 정찰용으로 활용되다가 성능과 공격무기가 발달되면서 공격용으로도 확대 되었듯이 초소형 비행체의 용도도 같은 추세로 전환될 것이다.
민수용으로는 교통이나 환경 위반을 장소에 구애받지 않고 감시하거나 적발할 수 있지만?
교통의 혼잡도를 파악하여 자동차를 유도 함으로써 교통의 흐름을 수월하게 할 수도 있을 것이다. 또한 여러 대의 초소형 항공기를 정렬시켜서 통신 중계용 임시 안테나나 기상 풍선을 대신할 수 있고 대기 오염도 관측할 수 있을 것이다. 그 외에도 테러 상황 파악 및 진압, 화재나 건물 붕괴 등에 의한 재해 지역에서의 생존자 확인과 구출 및 오염도 측정, 농작물의 병충해 조사 및 작황 예측, 야생동물의 이동 추적, 유해 곤충의 퇴치 등에도 쓰일 수 있다.
초소형 비행체의 개발이 가시화 되어 목적에 따라 다양하게 개발되고 응용범위가 넓어질 경우, 소설이나 만화에서 상상으로만 진행되던 첩보 활동 및 비밀 작전 등이 머지 않아 실제로 구현되어 21세기의 인간 생활에 커다란 영향을 미칠 것이다.

* 지상군 개인장비로 지역 정찰
* 화생방 오염도 측정 등에 사용
* 도시 시가전에서 건물 내부나 골목 정탐 및 공격
* 도심지역의 교통 상황 등의 정보제공
* 테러 상황 파악 및 진압
* 인간 접근이 어려운 재해지역 생존자 확인 및 구출
* 농작물 병충해 조사 및 작황예측, 유해 곤충 퇴치
* 야생동물 이동 추적

3. 탑재물

- 초소형 비행체의 비행과 운용에 필요한 탑재물로는 에너지원(배터리, 화석연료 혹은 연료전지), 추진 기관(전기 모터 혹은 엔진), 촬영용 카메라 및 영상 전송 시스템, 자이로 및 나침반, 제어용 작동기(서보 혹은 압전 작동기) 등이 있다. 이들은 현재까지 개발된 제품 중에서 가장 소형이며 경량이고 비행체의 요구 성능을 만족시킬 수 있는 부품들로 구성되어야 한다. 기계 및 전자 부품의 소형화와 집적화 및 경량화 기술의 발달로 초소형이면서 우수한 성능을 낼 수 있는 각 종 부품들이 개발되어서 초소형 비행체에 사용되기에 충분한 종류도 있고, 아직 성능이나 규모면에서 충분하지 않을 경우 초소형 비행체를 위한 부품의 개발이 필수적이다.

* 조종계통(Flight Control System)
* 추진계통(Propulsion System)
* 항법계통(Navigation System)
* 통신계통(Communication System)
* 감지계통(Sensors) - Video Camera, Radiation Sensors, Chemical Sensors, GPS


4. MAV 개발현황

- 초소형비행체에 대한 연구는 1990년대 초 미국 RAND사에 의하여 마이크로 시스템에 대한 개념 제시와 MIT의 Lincoln Lab.의 Micro Flyer에 대한 조사로 시작되었다. 그 후 1994년 미국 GTRI(Georgia Tech Research Institute)에서 대학의 자체 연구로 진행 되었고 이에 대한 관심과 활용 가능성이 커지면서 미국 DARPA와 NASA 및 그 외의 연구기관에서 많은 연구비 지원을 통하여 매우 활성화 되어 가고 있다.
1997년 미국 DARPA는 최대크기 15cm, 항속거리 10km, 순항속도 64-90km/h, 항속시간 20-120분의 성능을 가질 수 있는 초소형 비행체의 RFP(Request For Proposal)를 정하고, 10개의 연구기관과 중소 연구개발 업체에 각각 매년 65-300만불 정도의 연구비를 1단계 3년 동안 지원하기로 결정하였고 2, 3단계에서는 가능성이 있는 과제에 집중적으로 지원하기로 하였다. 앞에서 언급한 연구팀 외에도 GTRI Michelson의 곤충형 비행기 (Entomoptor)와 왕복형 화학근육 (RCM, Reciprocating Chemical Muscle)을 이용한 곤충형 비행기 연구, Intelligent Automation Inc.의 MAV 개발 등 다양한 연구 개발이 다른 종류의 연구비 지원을 받으며 진행 되고 있다. MAV에 대한 연구는아직 초기단계이어서 앞에서 언급된 성능의 초소형 항공기가 개발되어 성공적으로 비행하며 임무를 수행하였다는 보고는 아직 없으나, 2-3년 이내에 기본 요구 조건을 충족시킨 기종이 개발될 것으로 예상된다.



by 범도리 | 2004/07/25 00:20 | 트랙백
[8051] IRRI_Key Ver. 1.4 (키패드 키 자동 연속 누름 장치) Keil C 버젼..
// 키패드 자동 누름 제어 프로그램 Ver 1.4
// 2004. 7. 17
// 제작 : 심주현


#include <AT89X51.H>

typedef unsigned char byte;

// **************************************************
// 상수 선언 부
// **************************************************

// 시간 간격 값 상수 설정
byte Term0 = 50; //
byte Term1 = 20;
byte Term2 = 10;
byte Term3 = 5;
byte Term4 = 2;

// 누름 속도 값 상수 설정

byte Speed0 = 50;
byte Speed1 = 20;
byte Speed2 = 10;
byte Speed3 = 5;
byte Speed4 = 2;
// **************************************************
// 포트 이름 설정
// **************************************************

// Port 0
sbit Speed_up = P0^0;
sbit Speed_down = P0^1;
sbit Term_up = P0^2;
sbit Term_down = P0^3;
sbit Loop_on = P0^4;
sbit Start = P0^5;

// Port 2
sbit Speed_LED = P2^7;
sbit Speed_Clock = P2^6;
sbit Speed_Clear = P2^5;
sbit Term_LED = P2^4;
sbit Term_Clock = P2^3;
sbit Term_Clear = P2^2;
sbit Stop_mode = P2^1;
sbit Loop_mode = P2^0;

//Port 1
sbit Key1 = P1^0;
sbit Key2 = P1^1;
sbit Key3 = P1^2;
sbit Key4 = P1^3;

// **************************************************
// 선언 부
// **************************************************

// 변수 선언
byte Speed_count; // 현재 속도 값 지정 카운터
byte Term_count; // 현재 시간 간격 값 지정 카운터
byte Speed; // 현재 속도 값
byte Term; // 현재 시간 간격 값
byte Loop_state; // Loop모드 = 1, 정지 모드 = 0
byte int_buffer; // 인터럽트 시 Port 0의 상태 저장 버퍼

// 함수 선언
void init_system(void); // 시스템 초기화 프로시져
void init_T0(void); // 타이머 초기화 프로시져
void Delay_Time(byte); // 지연 시간 함수
void Speed_Up(void); // 속도 증가 프로시져
void Speed_Down(void); // 속도 감소 프로시져
void Term_Up(void); // 시간 간격 증가 프로시져
void Term_Down(void); // 시간 간격 감소 프로시져
void Loop_Change(void); // Loop모드 변환 프로시져
void Display_Speed(byte);// 속도 표시 함수
void Display_Speed_main(byte);
void Display_Term(byte); // 시간 간격 표시 함수
void Display_Term_main(byte);
void Clock_74164(byte, bit); // 74164칩 클럭 지연 함수, bit(1) = speed, bit(0) = term
void Clock_74164_main(byte, bit);



// *************************************************
// System Area
// *************************************************

// 시스템 초기화 함수

void init_system(void)
{
Speed = Speed0;
Term = Term0;
Loop_state = 1;
Loop_mode = 0;
Stop_mode = 1;
init_T0();
IE = 0x81;
TCON = 0xF1;
Speed_count = 0;
Term_count = 0;
P1 = 0x00;
P3 = 0xFF;

}

// 타이머 초기화 함수

void init_T0(void)
{
TF0 = 0;
TMOD = 0x01;
TH0 = 0xDB;
TL0 = 0xFE;
}

// 시간 지연 함수

void Delay_Time(byte Time)
{
int count;
count = 0;
do
{
if(TF0)
{
count++;
TH0 = 0xDB;
TL0 = 0xFE;
TF0 = 0;
}
}while(count < Time);
}


// 인터럽트 루틴

void Button_int(void) interrupt 0
{
int_buffer = P0;

if(int_buffer == 0xE1)
Speed_Up();

else if(int_buffer == 0xE2)
Speed_Down();

else if(int_buffer == 0xE4)
Term_Up();

else if(int_buffer == 0xE8)
Term_Down();

else if(int_buffer == 0xF0)
Loop_Change();

}

// 속도 증가 루틴

void Speed_Up(void)
{
switch(Speed_count)
{
case 0 :
Speed_count ++;
Display_Speed(Speed_count);
Speed = Speed1;
break;

case 1 :
Speed_count ++;
Display_Speed(Speed_count);
Speed = Speed2;
break;

case 2:
Speed_count ++;
Display_Speed(Speed_count);
Speed = Speed3;
break;

case 3:
Speed_count ++;
Display_Speed(Speed_count);
Speed = Speed4;
break;

case 4:
// Speed_count = 0;
Display_Speed(Speed_count);
// Speed = Speed0;
break;
}
}


// 속도 감소 루틴

void Speed_Down(void)
{
switch(Speed_count)
{
case 4:
Speed_count --;
Display_Speed(Speed_count);
Speed = Speed3;
break;

case 3:
Speed_count --;
Display_Speed(Speed_count);
Speed = Speed2;
break;

case 2:
Speed_count --;
Display_Speed(Speed_count);
Speed = Speed1;
break;

case 1:
Speed_count --;
Display_Speed(Speed_count);
Speed = Speed0;
break;

case 0:
// Speed_count = 4;
Display_Speed(Speed_count);
// Speed = Speed4;
break;
}
}


// 시간 간격 증가 루틴

void Term_Up(void)
{
switch(Term_count)
{
case 0:
Term_count ++;
Display_Term(Term_count);
Term = Term1;
break;

case 1:
Term_count ++;
Display_Term(Term_count);
Term = Term2;
break;

case 2:
Term_count ++;
Display_Term(Term_count);
Term = Term3;
break;

case 3:
Term_count ++;
Display_Term(Term_count);
Term = Term4;
break;

case 4:
// Term_count = 0;
Display_Term(Term_count);
// Term = Term0;
break;
}
}

// 시간 간격 감소 루틴

void Term_Down(void)
{
switch(Term_count)
{
case 4:
Term_count --;
Display_Term(Term_count);
Term = Term3;
break;

case 3:
Term_count --;
Display_Term(Term_count);
Term = Term2;
break;

case 2:
Term_count --;
Display_Term(Term_count);
Term = Term1;
break;

case 1:
Term_count --;
Display_Term(Term_count);
Term = Term0;
break;

case 0:
// Term_count = 4;
Display_Term(Term_count);
// Term = Term4;
break;
}
}


// 속도 표시 루틴

void Display_Speed(byte count)
{
Speed_Clear = 1;
Speed_Clear = 0;
Clock_74164(2,1);
Speed_Clear = 1;

switch(count)
{
case 0:
Speed_LED = 1;
Clock_74164(7,1);
Speed_LED = 0;
Clock_74164(1,1);
break;

case 1:
Speed_LED = 1;
Clock_74164(6,1);
Speed_LED = 0;
Clock_74164(1,1);
Speed_LED = 1;
Clock_74164(1,1);
break;

case 2:
Speed_LED = 1;
Clock_74164(5,1);
Speed_LED = 0;
Clock_74164(1,1);
Speed_LED = 1;
Clock_74164(2,1);
break;

case 3:
Speed_LED = 1;
Clock_74164(4,1);
Speed_LED = 0;
Clock_74164(1,1);
Speed_LED = 1;
Clock_74164(3,1);
break;

case 4:
Speed_LED = 1;
Clock_74164(3,1);
Speed_LED = 0;
Clock_74164(1,1);
Speed_LED = 1;
Clock_74164(4,1);
break;
}
}


// 시간 간격 표시 루틴

void Display_Term(byte count)
{
Term_Clear = 1;
Term_Clear = 0;
Clock_74164(2,0);
Term_Clear = 1;

switch(count)
{
case 0:
Term_LED = 1;
Clock_74164(7,0);
Term_LED = 0;
Clock_74164(1,0);
break;

case 1:
Term_LED = 1;
Clock_74164(6,0);
Term_LED = 0;
Clock_74164(1,0);
Term_LED = 1;
Clock_74164(1,0);
break;

case 2:
Term_LED = 1;
Clock_74164(5,0);
Term_LED = 0;
Clock_74164(1,0);
Term_LED = 1;
Clock_74164(2,0);
break;

case 3:
Term_LED = 1;
Clock_74164(4,0);
Term_LED = 0;
Clock_74164(1,0);
Term_LED = 1;
Clock_74164(3,0);
break;

case 4:
Term_LED = 1;
Clock_74164(3,0);
Term_LED = 0;
Clock_74164(1,0);
Term_LED = 1;
Clock_74164(4,0);
break;
}
}


void Clock_74164(byte count, bit select)
{
while(count > 0)
{
count--;
if (select == 1)
{
Speed_Clock = 0;
Speed_Clock = 1;
Speed_Clock = 0;
}
else
{
Term_Clock = 0;
Term_Clock = 1;
Term_Clock = 0;
}
}
}

void Loop_Change(void)
{
if(Loop_state == 1) //루프모드
{
Loop_state = 0;
Stop_mode = 0;
Loop_mode = 1;
}
else // 스탑모드
{
Loop_state = 1;
Stop_mode = 1;
Loop_mode = 0;
Key1 = 0;
Key2 = 0;
Key3 = 0;
Key4 = 0;
}
}



// 메인 함수

void main(void)
{
init_system();

TR0 = 1;
Display_Speed_main(Speed_count);
Display_Term_main(Term_count);



while(1)
{
while(Start == 1)
{
Key1 = 1;
Delay_Time(Speed);
Key1 = 0;
Delay_Time(Term);
Key2 = 1;
Delay_Time(Speed);
Key2 = 0;
Delay_Time(Term);
Key3 = 1;
Delay_Time(Speed);
Key3 = 0;
Delay_Time(Term);
Key4 = 1;
Delay_Time(Speed);
Key4 = 0;
Delay_Time(Term);

if(Loop_state == 0)
{
Key1 = 1;
Delay_Time(Term);
Key2 = 1;
Delay_Time(Term);
Key3 = 1;
Delay_Time(Term);
Key4 = 1;

while(Loop_state == 0)
{

}
}
}
}


}




// 속도 표시 루틴

void Display_Speed_main(byte count)
{
Speed_Clear = 1;
Speed_Clear = 0;
Clock_74164_main(2,1);
Speed_Clear = 1;

switch(count)
{
case 0:
Speed_LED = 1;
Clock_74164_main(7,1);
Speed_LED = 0;
Clock_74164_main(1,1);
break;

case 1:
Speed_LED = 1;
Clock_74164_main(6,1);
Speed_LED = 0;
Clock_74164_main(1,1);
Speed_LED = 1;
Clock_74164_main(1,1);
break;

case 2:
Speed_LED = 1;
Clock_74164_main(5,1);
Speed_LED = 0;
Clock_74164_main(1,1);
Speed_LED = 1;
Clock_74164_main(2,1);
break;

case 3:
Speed_LED = 1;
Clock_74164_main(4,1);
Speed_LED = 0;
Clock_74164_main(1,1);
Speed_LED = 1;
Clock_74164_main(3,1);
break;

case 4:
Speed_LED = 1;
Clock_74164_main(3,1);
Speed_LED = 0;
Clock_74164_main(1,1);
Speed_LED = 1;
Clock_74164_main(4,1);
break;
}
}


// 시간 간격 표시 루틴

void Display_Term_main(byte count)
{
Term_Clear = 1;
Term_Clear = 0;
Clock_74164_main(2,0);
Term_Clear = 1;

switch(count)
{
case 0:
Term_LED = 1;
Clock_74164_main(7,0);
Term_LED = 0;
Clock_74164_main(1,0);
break;

case 1:
Term_LED = 1;
Clock_74164_main(6,0);
Term_LED = 0;
Clock_74164_main(1,0);
Term_LED = 1;
Clock_74164_main(1,0);
break;

case 2:
Term_LED = 1;
Clock_74164_main(5,0);
Term_LED = 0;
Clock_74164_main(1,0);
Term_LED = 1;
Clock_74164_main(2,0);
break;

case 3:
Term_LED = 1;
Clock_74164_main(4,0);
Term_LED = 0;
Clock_74164_main(1,0);
Term_LED = 1;
Clock_74164_main(3,0);
break;

case 4:
Term_LED = 1;
Clock_74164_main(3,0);
Term_LED = 0;
Clock_74164_main(1,0);
Term_LED = 1;
Clock_74164_main(4,0);
break;
}
}


void Clock_74164_main(byte count, bit select)
{
while(count > 0)
{
count--;
if (select == 1)
{
Speed_Clock = 0;
Speed_Clock = 1;
Speed_Clock = 0;
}
else
{
Term_Clock = 0;
Term_Clock = 1;
Term_Clock = 0;
}
}
}






by 범도리 | 2004/07/17 00:22 | Micro Controller | 트랙백
[8051] 다중 인터럽트 제어 방법
오늘 아침 내내 내 속을 썩이던 인터럽트 제어..

결국 TTL로 해결 했다.

7404(Inverter)를 이용해 각 스위치 포트의 신호를 독자적으로 받아내고

High 신호를 Low신호로 변환 시켜 Falling Edge를 생성 시킨것..

인터럽트 제어할 때

참고할 것은 TCON의 비트 0 값을 1로 만들어 줘야 컨트롤이 쉽다는거..
by 범도리 | 2004/07/17 00:06 | Micro Controller | 트랙백
About PWM...
PWM Motor Speed controller & DC Light Dimmer

----------------------------------------------------------------------------

DC 모터의 속도를 제어하거나 DC Lamp의 밝기를 제어할 때 가장 쉽게 생각 할 수 있는 것이 전압을 제어하는 것입니다. 그러기 위해 모터와 전지 사이에 가변저항을 삽입하여 속도를 제어한다고 가정해보면 (실제로 이 방법으로는 모터가 돌지 않겠지만) 모터의 회전수가 낮을때 가변저항에 큰 전압이 걸려서 손실이 상당히 커지기 때문에 그다지 좋은 방법이 아니라는 것을 알 수 있을것입니다.
그러면 적은 손실로 모터의 속도를 제어하는 방법은 어떤것이 있을까요?
모터의 전원선에 스위치를 붙여서 일정한 간격으로 스위치를 ON/OFF 하면 어떻게 될까요 ?
스위치를 계속 ON해놓은 때에 비해 모터의 속도가 떨어지리라는 것을 예상할 수 있을것입니다.
이것이 PWM 제어의 원리로 Pulse Width Modulation의 약자입니다.
ON폭이 넓어질수록 모터의 속도가 빨라지고 ON폭이 좁을수록 모터가 느려지게 되는것입니다.
다음회로는 ON/OFF 동작을 약 400Hz로 하고 있는 것으로 MOSFET의 용량을 키우면 얼마든지 큰 부하를 제어할 수 있습니다.물론 전류가 커지면 (1A 이상) 방열을 고려해야 하겠지요.

이러한 회로는 노이즈를 발생시키기 때문에 사용하는 전원에 필터링이 필요하며 특히 AM Radio에 잡음을 유발 할 수 있으므로 주의가 필요합니다.
by 범도리 | 2004/07/12 01:22 | Micro Controller | 트랙백
드뎌.. 나도 8051 개발자.. ㅋㅋ
샘플전자에서 파는 SE-516P를 그저께 구입하고.. 어제 새벽 겨우 납땜을 완료했다. ㅎㅎ 오랜만에 PCB에 직접 납땜해보는 거라 그런지 매우 매우.. 힘겨웠다.. ㅋㅋㅋ
열심히 공부해서.. 우선 이번 프로젝트를 완수 해야지.
by 범도리 | 2004/07/09 23:43 | Diary~!! 훔쳐보지 말것. ^^ | 트랙백
RS-422
산업용으로 많이 쓰이는 RS-422입니다.
알아놓는 것도 좋을 듯 합니다.


EIA-422-B 및 IEA-485 규격의 전기적 특성은 몇가지 조건으로 구성되어 있다. 두가지 규격의 전기적 특성은 세부에서는 차이가 있겠지만, 현재로서는 동일한 드라이버/리시버 IC가 EIA-422-B 와 EIA-485 의 양쪽에 사용되고 있다.

● 평형전압을 채용
EIA-422-B 및 EIA-485 는 평형전압 인터페이스이기 때문에 1대 2선의 신호선의 어느쪽 한 방향의 전압이 높은 경우에, 또 한 방향의 전압은 낮아야할 필요가 있다.
필요에 따라 2선의 신호선의 어느쪽의 전압이 높은가에 따라‘0’과‘1’이 결정되기 때문에 노이즈등에 의해 양방향의 전압이 상하로 변동되더라도 ‘0’과‘1’의 판단에 영향이 없다. 따라서 노이즈가 많은 환경에서 장거리의 확실한 데이터 전송이 가능하게 된다.
말하자면, A 단자가 B 단자에 대하여 전압이 낮은 경우는‘1’혹은 OFF, A 단자가 B 단자에 대하여 전압이 높은경우는‘0’혹은 ON 이 되는 것이다. 따라서 A 단자와 B 단자의 전압차는 일정하지 않아도 좋은 것이다.

● 개방전압은 너무크거나 작으면 좋지 않다
개방전압은 지나치게 큰 레벨이면 탈이난다. 단락시에 대전류가 흐르면 위험하므로 차동전압과 단일전원전압은 6.0V 을 넘지않도록 한다. 실제로는 전원이 +5V 단일이므로 초과하는 경우는 없다.
반대로 개방전압이 너무 작으면 평형전송의 의미가 반감된다. 또한, 다수의 리시버가 접속되는 가능성이 있는 EIA-485 에 있어서는 최저전압이 1.5V 이상은 되어야 한다.

● 단락전류
EIA-422-B 의 단락전류는 150mA 이하로 결정되어 있다. 이것은 드라이버의 출력이 쇼트되어도 IC가 파손되지 않도록 하기 위함이다. 인터페이스 회로가 오래되면 쇼트가 자주 발생하여 고장으로 처리되기 때문이다. EIA-485가 오래되면 전원과 그라운드의 쇼트등과 다른 드라이버와의 쇼트등도 가정할 수 있다. 그것은 소프트웨어에 의해 발생할 가능성도 있고, 코넥터 핀의 쇼트에 의해서도 빈번히 발생할 가능성이 있기 때문에 피크전류는 250mA 이하로 되도록 해야한다.

● 전원이 끊어지는 경우의 leakage전류
전원이 끊어지는 경우의 leakage전류는 동일한 트위스트페어선 상에 전원이 끊어진 기기가 접속되어 있는 경우에 다른 기기간의 데이터 전송을 방해하지 않도록 규정되어야 한다.
leakage전류는 EIA-422-B에서 -0.25~ +6.0V 의 전원을, 전원이 끊어진 드라이버의 출력에 가할 때 100μA 이하가 되어야 한다.

● 출력의 상승/하강시
출력의 상승/하강시의 경사가 너무 완만하면 리시버의 입력에서 발진을 일으켜서 데이터 파형이 큰 변형을 일으키면서 에러의 원인이 된다. 오실로스코우프에서의 출력파형을 관측하면 EIA-422-B 에서는 비트 길이가 200ns 이상이 되면 비트 길이의 10% 이하를, 200ns 미만이면 20ns 이하로 정해진다. 또한, EIA-485 에서는 비트 길이의 30% 이하로 결정된다.

● 입력 임피던스
리시버의 입력 임피던스가 매우 작으면 복수의 리시버를 접속하는 경우의 동작이 불안정하게 되기 때문에 EIA-422-B 에서는 약 12kΩ내에 들어가도록 규정되어 있다.
EIA-485 의 경우는 입력 인피던스가 높아서 접속되는 리시버의 최대수가 EIA-422-B 의 10개에 비해서 EIA-485 는 32개까지 이다.
최근에는 이 입력 인피던스를 4배에서 8배까지 높이는 것으로, 트위스트페어선 상에서 128개에서 256개 까지의 드라이버와 리시버를 접속하는것이 가능하여 거의 Ethrenet와 같은 LAN 세스먼트에 필적하는 네트워크의 실현이 가능하게 되었다.

● 리시버의 유효한 값
리시버에 있어서 데이터의‘0’과‘1’을 구별라는 전압은, 어느쪽의 규격에도 ±0.2V 의 사이에 있을것이 요구되어진다. 그것은 어느정도 엄격한 조건이다.
초기의 리시버는 단순히 플러스인지 마이너스인지만을 판단하였으나 EIA-422-B 의 드라이버는 전원이 끊어진 경우와 입력이 오픈된 경우나, EIA-485 에서는 액티브된 드라이버가 없는 경우등에 리시버의 출력이‘0’과‘1’의 어느쪽도 아닌 경우의 상태를 구분한다. 단적으로 발진상태에서 잠깐의 노이즈에 의해 수신측의 수신손실이 빈번히 발생한다면 바람직하지 않다.
최근의 IC는 유효한 값를「0~ +0.2V 사이」로 업격히 관리하는 것으로 인해서 0~ +0.2V 사이의 무통신상태를 표시하는 마크상태(데이터‘1’)로 하는「페일 세이프」기능을 넣은것을 나오고있다
by 범도리 | 2004/07/06 02:01 | Micro Controller | 트랙백(1)
카나드 역사


카나드의 역사



<초기의 카나드>

카나드가 일반인에게 어느 정도 알려진 시기는 요 근래의 일이다. 그러면 카나드의 기원은 언제인가? 그것은 인류최초로 동력비행에 성공한 라이트형제의 플라이어(Flyer)호 까지 거슬러 올라가게 된다. 라이트 형제가 개발한 항공기가 최초의 동력항공기이자 최초의 카나드항공기라는 것을 아는 이는 거의 없다.

라이트형제가 키티호크에서 처음을 동력비행에 성공한 것은 1903년 12월이다. 일찍이 그들은 조종사가 몸을 움직여서 글라이더 등을 조종하는 방식은 조종하는 데 별로 유용하지 않고 게다가 위험하다는 사실을 알게 되었다. 1899년부터 그들은 이러한 생각에 기초하여 먼저 글라이더를 만들었다. 이 글라이더는 수평과 수직의 조종성능을 갖게 설계되어 있었다. 이 때부터 기수부분에 카나드가 사용되었다. 물론 이것이 처음부터 카나드라 불린 것은 아니었다. 이것은 이 당시 단지 하나의 수평조종면이었다.

그들은 지속적으로 글라이더의 형태와 크기를 변형시키며 실험과 연구를 계속하였다. 이 글라이더에서 수평 조종면은 주날개의 앞부분에 위치하여 세로 안정성을 갖게 되었다. 라이트 형제는 이 조종면이 보다 나은 조종성을 주며 기체가 아래로 곤두박질치는 nose dive현상을 막는다고 생각했다. 그들은 실제로 이 수평조정면인 카나드를 사용함으로서 위험한 실속 상황에서도 수차례 살아남게 되었다. 이들이 이 카나드를 이용해 얻은 또하나의 이점으로는 항공기가 갑자기 기수를 드는 nose up현상에서 주 날개가 실속되는 것을 방지하는 것이다.

이와 같은 많은 실험과 경험을 통해 1903년 최초의 동력비행에 성공하게 되었다.

라이트 형제의 비행성공소식이 유럽등지로 알려진 후 많은 사람들이 항공기 제작에 뛰어들었다. 영국과 프랑스를 선두로 유럽 각지에서 많은 항공기가 제작되었는데 이들은 한결 같이 카나드 형식을 취하는 것이었다. 마치 카나드의 전성시대인양 모든 기종들이 이 형식으로 항공기를 만들었다.

하지만 1913년 이후 이 형태의 항공기는 거의 자취를 감추게 되었다. 가장 일반적인 형식인 Conventional 형식이 개발된 것이다. 카나드 항공기는 전방의 카나드가 조종사의 시계를 방해하여 조종하는데 문제가 있고, 기체 뒤에 위치한 수평꼬리날개가 그 당시로서는 더 안정한 비행성능을 지녔다는 결론을 얻었기 때문이다.



<안정성 입증(1927-1930)>

1913-1927년 사이에는 위와 같은 이유로 카나드 항공기가 거의 만들어지지 않았다 이 후 독일의 Fokewolf Flugzeghau항공기 제작소에서 엔테(ENTE : 오리)라는 카나드 항공기를 만들었다. 이 회사는 제 2차 세계대전중 전투기 제작사로 유명한데 이전에는 루프타자항공의 여객기를 만들고 있었다. 당시 이곳에서는 A38항공기를 제작하고 있었다. 이 A39의 사업만으로도 회사를 유지하는데는 충분히 안정했지만 초기의 카나드 형태가 실속극복능력을 가진다는 점에 착안하여 1930년 ENTE F-19A를 제작하게 되었다.

이항공기는 앞의 카나드가 실속이 되어도 카나드 항공기의 특징인 실속극복특성을 안정성과 조종성을 잃지 않았다. 앞의 카나드는 주날개보다 많은 하중을 받게 되었고 중력중심(CG)은 주날개의 앞부분에 위치하게 되어 보다 안정한 비행을 할 수 있게 되었다.

하지만 이 항공기도 회사내의 경영상황과 아래와 같은 문제점으로 개발이 중단되었다.

1. 작은 마력에 비해 기체자체의 무게가 초과했기 때문에 상업적으로 가치가 떨어진다.

2. 기체설계의 문제로 이륙성능이 불량하였다.

3. 조종사의 바로 앞부분에 카나드가 위치하여 조종사의 시야를 가리게 되는 카나드의 치명적인 단점이 존재했었다.

비록 이 항공기가 위와 같은 단점을 극복하진 못하고 개발이 중지하게 외었지만 카나드를 사용함으로써 큰 받음각을 가질 수 있게 되었고 주날개가 실속이 되기 전에 카나드가 먼저 실속이 되어 피치자세를 정상으로 복원하는 특성 등은 명백한 실적이고 이후 제작된 카나드 항공기에도 많은 영향을 끼쳤다.



<고속에의 도전 (1939-1945)>

이 시기는 2차 세계대전이 태평양지대까지 확대되어 세계열강들이 한창전쟁에 열을 올리던 시기이다 .이 때 각국의 군용기 중 전투기는 고속과 뛰어난 조종성을 확보하게 되었다. 이 시기에 개발된 카나드 항공기로 알려진 것은 미국 커티스사의 XP-55(Ascender : 주권자)를 들 수 있다. XP-55는 주익이 큰 후퇴각을 가지며 기체의 모든 부분이 금속제로 이루어 진 것이 특징이다. 하지만 이 항공기는 완전한 연구가 뒷받침되지 안흔 채 제작되어 1945년 5우러 시험비행에서 추락하게 되었다. 이후 XP-55는 불량한 실속특성과 극도로 긴 활주거리, 기초설계의 미흡으로 인해 개발이 중지되었다. 하지만 이 항공기 또한 성능의 불량이라는 취약점만을 가진 것이 아니다. 이 항공기로 인해 최대 속도 670 ㎞/h 라는 고속의 카나드항공기 시대를 열게 된 것을 간과할 수 없다.



<제트 항공기에의 적용 (1965년 이후)>

제트 전투기에 최초로 카나드를 이용한 성공적인 예를 들라고 하면 단연 JA-37 VIGGEN이다. 당시 스웨덴은 소련이라는 초강대국과 국경을 마주하고 있으며 지형적으로도 산이 많고 험한 특성을 가지고 있다 .이런 상황에서 스웨덴에서 독자적으로 개발한 전투기가 바로 JA-37 VIGGEN이다. 상대적으로 약소국인 스웨덴에서 자국의 특성에 맞는 이런 걸작 항공기를 만들어 세계의 이목을 집중시켰다. 이 항공기는 카나드를 이용해 고양력을 얻을 수 있게 되었고, 주날개 내측에서 발생하는 간섭현상을 방지하는 역할을 하여 기류를 보다 안정하게 하였다. 이 전투기는 델타익 형식이 가지는 양호한 세로 안정성을 가지고 있기 때문에 카나드는 안정면 역할 보다는 조종면과, 양력증강 역할이 더욱 커지게 되었다. 또한 카나드가 비교적 후방에 위치하기 때문엔 전투기에 치명적인 시계방해의 약점을 보완하게 되었다. 한마디로 카나드를 이용한 항공기의 대표자라 해도 과언은 아닐 것이다. 스웨덴은 최근 JA-37을 기본으로 하여 JAS-39 그리펜을 또다시 개발하여 카나드 항공기 부문의 선진국가임을 확인시켜 주었다.





1960년대는 카나드 형식의 항공기가 다시 항공기 제작자들의 관심을 끌게 된 시기이다. 이것은 스웨덴의 다목적 전투기 JA-37 VIGGEN의 성공과, Elbert L. Rutan이라는 한 아마추어 항공기 제작자에 의해 이루어졌다. Rutan은 자기가 직접 제작한 스포츠 항공기를 통해 카나드형식을 가진 항공기가 세로의 안정성도 충분히 가지며 적합한 실속특성도 가진다는 것을 명확하게 보여 주었다.

그는 학생시절부터 카나드 형식의 특이한 모습에 매력을 느꼈다. 이후 JA-37 VIGGEN의 개발에 영향을 받아 카나드 형식의 항공기를 만드는 데 전념하였다. 그는 이전에도 무선조종 카나드 항공기를 만들면서 많은 경험을 가진 상태였다. Rutan은 자동차를 이용해서 간단한 풍동실험장치를 개발해 비행특성을 연구하여 지속적으로 제작에 전념하였다. 이 특이한 풍동실험장치는 자동차의 상부에 고정지지대를 설치하여 실험할 모형항공기를 매단 후 자동차가 달릴 때의 공기의 흐름을 이용하여 간단한 실험을 하였다. 그리하여 제작한 것이 그가 Edward 공군기지에 일하고 있는 동안 만든 VariViggen이다. 1968년 원형제작에 들어가고, 1972년 5월에 처녀비행을 하였다. 이 항공기의 제작으로 그는 카나드 형식의 스포츠항공기 제작에 최고의 권위를 가지게 되었다. 이후에도 그는 개량형인 Vari-Eze, Long-Eze 등의 스포츠 항공기를 개발했으며, 최초로 무착륙 세계일주에 성공한 보이저(Voyager : 항해자)또한 그가 개발한 것이다. 이로 인해 그는 항공업계의 카나드 실용기 개발에 큰 영향을 미쳤다. 그가 경험한 분야는 카나드 외에도 Joint-Wing, Ring-Wing 항공기 등을 제작하였다. 이처럼 그가 항공기 개발에 공헌한 점은 대단히 크다.



<민간기에의 사용 (1980년대 이후)>

Rutan의 스포츠 항공기의 성공에 영향을 받아 1980년대에 들어서는 거의 모든 항공기 제작사가 카나드 형식의 상업용 항공기 개발에 가담하기 시작했다. 제작사는 중소기업에서 대기업까지 다양하지만 각 제작사가 개발한 카나드 항공기의 공통점은 엔진뒤에 프로펠러가 설치되는 Pusher형식의 터보프롭엔진을 장착하고, aspect비(날개의 가로세로비)가 큰 주익을 가지며, 대부분이 Composite구조를 가진다. 그런데 왜 가로세로비가 큰 주익을 선택한 것일까? 일반적으로 새의 날개를 보면 언제나 날개의 길이가 시위보다 풜씬 큰 것을 알 수 있다. 이렇게 가로세로비가 큰 항공기는 저속비행을 하며, 긴 비행거리를 가지고, 장시간의 비행을 요구하는 항공기에 사용한다. 앞에서 말한 카나드의 장점과 위와 같은 구조를 같이 사용하면 비행거리와 경제성을 중요시하는 민간기의 요구조건을 모두 만족시킨다. 이런 이유가 80년대 카나드 민항기 개발을 더욱 부추기는 역할을 했다.

민간기에 카나드가 적용된 대표적인 예를 보면 비치항공사의 Beech 2000 Starship을 들 수 있다. 1983년 가을 미국의 텍사스주 댈라스에서 열린 전미 비즈니스기 협회(NBAA)가 주최하는 대회에서 Starship의 실물크기와 원형 85%크기의 비행 모델이 전시되어 대중을 주목케하였다.

본기의 프로젝트는 1979년에 시작해서 82년 가을에 설계를 마쳤고, 83년 여름에는 85%스케일이 처녀비행을 했다. 수용 인원은 조종사 2명, 승객 6-9명이다. 중량을 줄이기 위해 복합구조를 채택하고 있으며, Starship의 조종석은 비행, 순항 등의 정보를 보내주는 계기판들을 모두 CRT를 이용해서 "all glass"화 했다. 이런 Starship의 내부 뿐만 아니라 외형 또한 영화 '스타워즈'에나 나올법한 특이하고 세련된 모양을 하고 있다.



앞으로의 전망

위에서 알아본 것처럼 카나드 항공기는 초기에는 한 시대를 풍미하던 주된 형식이었다. 하지만 당시로는 카나드 형식보다 우수하다고 인식된 Conventional 형식에 이 자리를 물려주고 제작자들의 관심에서 멀어졌었다. 몇몇 과학자와 Burt Rutan과 같은 관심있는 제작자들의 계속된 연구개발과 경험을 통하여 카나드의 이점이 알려지게 되었다. 여기에 항공기 제어기술의 발달이 가세하여 카나드는 다시 처음의 위치를 되찾으려 하고 있다. 미래에 날게 될 차세대 항공기의 외형을 보면 대부분이 카나드 형식을 취하고 있다.

앞으로도 다양한 항공기가 개발될 것이고 모양 또한 천차만별일 것이다.

이중에서 카나드는 더 나은 형식이 개발될 때까지 중요한 위치를 차지할 것이다. 아직까지 항공대학교 항공기제작연구회에서 만든 X-2를 제외하고는 국내에서 제작된 초경량항공기와 소형항공기에서는 카나드 형식을 적용한 예는 거의 없으나 머지않아 국내에서도 카나드의 이점을 살린 항공기가 개발될 것이다. 이 기사를 쓰기 위해 많은 자료를 모았지만 국내에서는 일부 논문집에만 간간이 실려 있을 뿐 별다른 자료를 구할 수가 없었다. 항공관련 연구소나 각 대학에서도 보다 다양한 분야의 연구가 시금한 것을 느낄 수 있었다. 그리고 이러한 연구는 단지 이론만으로 끝맺지 말고 실제로 항공기의 제작에 적용하는 것도 매운 중요할 것이다.




by 범도리 | 2004/07/06 01:21 | TermProject | 트랙백(1)


< 이전페이지 다음페이지 >