My Linux Car Project

Also available in English and Japanese (日本語).

전원 제어 회로

기본적으로, 엔진을 시동하면, PC가 자동으로 부팅하고, 시동 키를 끄면, 자동으로 셧다운(단지 파워를 끄느게 아니라) 하게 하고 싶었다. 

게다가 리부팅하는 시간을 줄이기위해, 차를 떠나는 동안 5분이나 10분 정도 계속 동작되면 좋을 것이다.

부팅은 시동키 스위치를 감지하여 쉽게 수행할 수 있다. 그러나 (엔진을 시동할 동안) 전압이 낮게 되면, 리부팅 하거나 행업된다.  이런 현상를 해결하기 위해, 시동 키가 온 된 후에 일정 시간 동안 기다리게 지연 할 수 있으나, 안정적이지 않다. 나는 공급되는 전압 자체를 사용하여, 콘트롤러가 아날로그 레벨로 감지하게 하였다. 

PC를 동작 시키기 위해, 릴레이로 전원을 연결만 하는 것은 충분하지 않다. 파워 버턴을 눌러야만 한다. (EPIA는 BIOS 옵션으로 오토 부트 기능이 있는데 생각한 대로 동작되지 않았다.) ACPI 호환 PC는 파워 버튼이 눌러질 경우 셧다운 되도록 구성할 수 있다. 이 기능을 사용하여, 어떤 OS가 동작하든지 상관 없이, 특별한 프로그램 없이, PC를 셧다운 할 수 있다.  그래서, 콘트롤러를 제작하여 메인보드의 파워 스위치 핀 헤더로 펄스를 보낼 수 있도록 설계하였다.

셧다운을 시작한 일정 시간 후에, 릴레이를 끄게된다. PC가 자체적으로 전원을 끄는것이 더 유용하다고 생각할 수있다. 그러나 별 의미는 없다. 왜냐하면, PC가 꺼진 후에 아주 작은 스탠바이 전류가 흐르고, 셧다운 동안에 행업되면 일정한 시간 후에 PC를 끄기 때문이다. 셧다운중에 엔진을 켜기 위해, 시동키가 다시 동작되면, 강제로 릴레이를 오프 시킨다.

따라서, 콘트롤러의 동작은 다음과 같다.

  1. 초기 상태로 릴레이를 오프한다. 
  2. 시동 스위치가 켜질때까지 기다린다.
  3. 공급 전원이 하이가 될때 까지 기다린다. (엔진 시동되고 안정화된다)
  4. 릴레이를 온 하고 전압이 안정될 때까지 기다린다.
  5. 파워 스위치로 펄스를 보내고, 전원이 안정화 될때까지 기다린다 (PC는 시작)
  6. 점화 스위치가 오프될때까지 기다린다 (PC 동작중)
  7. 파워 스위치로 펄스를 보낸다 (셧다운 시작)
  8. 일정 시간 지난후 , 1번 상태로간다

부팅하는 중에, 점화가 오프되면, 즉시 초기 상태로 가 릴레이를 오프한다. 마찬가지로 셧다운중에 점화가 온되면 즉시 초기 상태로 간다. 

이런 동작은 아날로그 컴패래터와 RC 타이머로 구현할 수 있으나, 아날로그 회로를 잘 알지 못하므로, PIC microcontroller를 사용하였다. PIC는 8비트 마이크로 컴퓨터로 메모리와 입출력회로가 포함되어 있다. 플래쉬 타입 디바이스가 호비스트 사이에 인기를 끌고 있는데, 비싸지도 않고 구하기 쉽다. 이번에 18핀 16F628를 사용하였는데, 전압 탐지를 위해 아날로그 비교기가 포함되어있다. 리셋 회로와 클럭 발생기도 있으며, 파워 핀을 제외한 모든 핀은 I/O로 사용 할 수 있다. 프로그램 사이즈와 스피드르 ㄹ고려하면 더욱 작은 8핀  12Fxxx 로도 충분하지만, 내가 가진 라이터가 지원하지 않아 사용 할 수 없었다. 

회로 설계

Developing circuit and PIC program
+5V 정류기 ,  PIC 용

5V PIC 전원으로 부품 박스에있는, S81350을 사용하였다. 78L05으로 대치해서사용해도좋다. 최대 입력 전압은 15V이고, 정류됮 않은 전원을 사용하는 것은 별로 좋지 않아, 정류기 보드로 부터 정류된 12V를 사용하였다.

시동 키 스위치 입력 

점화 키 시그널은 12V로 사용하기 때문에, PIC 레벨인 5V로 받아주는 회로가 필요하다. 보통 다이오드 클램프를 사용하나, PIC를 고장나게 할 수도 있다. 전체 회로의 전류 소모가 적기 때문에 12V 전류를 5V PIC 파워로  변환한다. 큰 저항은 입력 전류를 작게 만들 수 있으나, 노이즈에 취약하다. 그래서 트랜지스터를 사용한다. 입력 전류는 GND로 흐른다. 2SC1815를 사용하였는데, 많이 가지고 있기 때문이며, 거의 모든 저전력 NPN 트랜지스터를   사용할 수 있다. (핀 아웃 주의) 입력 임피던스는 노이즈를 감안해 상당히 낮게 한다. 입력 전압을 약 1/10정도 나눠, 스래쉬홀드는  VBE=0.6Vdml 10배, 약 6V 정도이다. 트랜지스터는 오픈콜렉터 처럼 보이는데, 실지로 PIC 내장 풀업 레지스터로 풀업되어 있다. 

전압 감지 입력

이는 PIC 아날로그 비교기의 배터리 전압 디바이더이다. 비교기는 PIC 내장 비교전압 모듈에서 온 1.25V 와 입력 전압을 비교한다. 이 콜렉터는 비교 전압 IC에비해 정밀도를 요하지는 않는다. 이는 밧데리 구동(~12V)과 알터내이터 구동(~14V)를 구별하는데 사용된다. 따라서 VR은 PIC 입력에 , 13V 공급 전원이 1.25V를 만들도록 조정되어야 한다. 임피던스는 낮게되어 있고, 전류는 어느 정도 높다. 밧데리 보다 점화 스위치라인에서 뽑아와야 한다. 

클램프 다이오드 없이 간단한 RC 필터만 있다. 전압이 1/10로 분배되기 때문에 충분하다. PIC를 고장나게 하기 위해서 50V가 필요하기 때문에 , 1.25V 의 낮은 비교 전압을 선택하였다

릴레이 출력

릴레이 코일은 약 30mA의 전류가 흐르고, 12V용을 선택하였다. PIC로 부터 직접 연결된 것은 아니고 트랜지스터(2SC1815)로 부터 연결되었다. 릴레이 자체는 정류기 보드상에 있다. 풀다운 레지스터가 없다면 파워가 가해질 경우 잘 못 움직인다. 

PC 전원 스위칭 인터페이스

EPIA 파워 스위치 핀을 재본 결과, 하나는 GND이고, 하나는 3.3V로 풀업되어 있었다. EPIA는 +5VSB  부터 3V로 변환하는 정류기가 분명히 가지고있다. 버튼을 누르는 것 처럼 제어하기 위해, 오픈 콜렉터면 충분했다. 하지만, 근처에 뒹구는 오래된 모뎀 파워 서플라이 보드에서 포토커플러를 발견해서 사용하기로 했다. 이걸 사용하면, 스위치가 포지티브 레일이나 풀다운상태에서도 동작한다. 왜냐하면 보드는 전기적으로는 분리되어 있기 때문이다. 프론트 파넬의 진짜 파워 버튼은 병렬로 연결되어 평상시 처럼 쓸수 있다. 

PIC가 동작하는 것을 나타내기 위해  LED가 연결되었다. 5 모드로 프로그램되었다. 

오프 Off
모든 것이 오프, 점화 스위치가 들어오기 까지 대기
짧게 온 길게 오프 ( 1초 사이클) 
점화 가 온, 밧데리 전압은 아직 로우
짧은 사이클로 반짝임 ( 0.25 초/사이클당)
점화 온, 밧데리 전압 하이 (1초후 파워 동작 )
온 On
파워 온
길게 반짝임 ( 1초/사이클당)
셧다운

파워 스위치가 유도하는 100ms 동안, 라이트는 오프이다. LED만 으로 프로그램이 동작하는 것을 알 수 있고, VR을 조정하는 것도 충분하다.

제작

정류기 보드 처럼, pcb를 사용하여 배치하고, 만능보드에 동선으로 연결하였다. 이 보드는 흐르는 전류가 크지 않으므로 주위할 점이 많지 않다.

부품 배치 배선 솔더 사이드

PIC 프로그래밍

PIC 프로그램을 개발하기 위해, 리눅스에서 gpasm 어셈블러를 사용하였다. PIC에 프로그램을 굽기 위해, AKI-PIC Ver.3akipic 소프트웨어를 사용하였다.

PIC 굽기

클럭을 발생 시키기 위해, 외부 크리스탈, 세라믹 레조내이터, 내부 RC 오실레이터를 사용할 수 있다. 이번에는 고정밀 시간 계측이 필요한 것은 아니기 때문에 내부 오실레이터로 충분하다. 내부 RC오실레이터는 4Mhz나 37Khz가 선택 사용될 수 있다. 37Khz를 사용한다면, 전력 소비는 최소화된다. 따라서 SLEEP 명령어는, 아이들 시 , 불필요하다. 먼저 37Khz로 프로그램을 시도하고, 스피드가 요구되면 4Mhz로 스위치하기로 하였다. 

LED 반짝임을 안정적이고, 메인 프로그램과 비동기화 하기 위해, 타이머 인터럽트를 사용한다. 또한 모든 타임 계측에도 쓴다. 인터럽트 간격은 1초에 100번으로 정하고, 타임 정수는 10ms마다 쓴다.

프로그래밍은 지정한 패턴대로 반짝이도록 LED를 연결한 상태로 시작한다. 브링크 패턴은 0과 1의 8 비트로 지정되며, 1초의 사이클이다. 1/8초에 1 비트이며, 1/00초 타이머로 분배되지 않는다. 그러나 클럭은 저품질 RC 오실레이터를 사용하므로 걱정없다. 한번 하기는 어렵지만, 한번 하고 나면 , 나머지는 쉽다. 

1초에 한번 LED가 깜박이는 것은 실지보다 긴 것처럼 보인다. 그러나 이런 응용에는 충분하다. 

프로그램이 끝나고 나서, 37Khz 스피드도 충분하다고 판명되었다. 사용한 프로그램 메모리는 2K 워드 플래쉬 메모리중 겨우 189 워드이다. PIC는 20Mhz로 동작하지만, 500배 정도 느리게 하였다. 또한 많은 다른 기능을 사용하지 않는다. 데이터 EEPROM 이라든지, 시리얼 통신 기능등이다. 낭비적인 요소가 있지만, 칩은 300엔(2.5$, 우리돈으로 3000원) 정도이다. PIC 없이,  같은 기능의 회로를 만드는데 300엔 (3000원)으로는 불가능하다. 

다운로드


Next | My Linux Car Project