8 비트 PIC를 사용하여 IR 신호의 펄스 폭을 측정하는 방법은 무엇입니까?


14

내 친구와 나는 같은 보편적 인 학습 원격 컨트롤러를 설계하려는 이 하나의 목적을 학습. 우리가 기본적으로하고 싶은 것은 적외선 펄스를 저장하고 재생하는 것입니다.

36kHz, 38kHz 및 40kHz 신호를 감지하려고합니다. 40kHz 신호의주기는 입니다.μ

8 비트 PIC 마이크로 컨트롤러를 사용하려고합니다. 지금은 20MHz 고속 수정 발진기에서 실행되는 PIC16F616을 선택했습니다. 사용 가능한 두 가지 옵션이 있습니다.

  1. Interrupt On Change모듈을 사용하십시오 .
  2. CCP 모듈의 캡처 모드를 사용하십시오.

첫 번째 옵션은 다음과 같습니다.

레지스터가 다음과 같이 설정되었다고 가정합니다 unsigned char _10_us = 0;. 이 레지스터는 시간을 유지합니다. 주기 레지스터와 TMR2 모듈은 매 10 인터럽트 만드는 설정 초. 인터럽트가 발생하면 레지스터 가 증가 하고 종료됩니다. 최대 시간은 2.55msec입니다. 더 많은 시간 측정이 필요한 경우 필요에 따라 추가 레지스터를 정의하고 증분 할 수 있습니다.μ_10_us_1_ms

이제, 어떤 종류의 변경 (고 / 저 또는 저 / 고)으로 인터럽트가 생성 될 때마다 프로그램은 현재 시간, 즉 _10_us레지스터 값을 기록합니다. 잠시 후, 다음 인터럽트가 생성되면 프로그램은 _10_us레지스터 에서 저장된 값을 빼고 , 그 동안 10 초 단위로 그 동안 걸린 시간을 갖게됩니다 .μ

이 옵션을 사용하면 머리가 긁 힙니다. TMR2 인터럽트는 약 50 개의 명령마다 발생합니다. 인터럽트 처리에는 약 20 개의 지침이 필요합니다. 기간을 계산하여 배열에 저장하는 30 가지 지침이 남았습니다. 이 방법이 효과가 있습니까?

두 번째 옵션은 다음과 같습니다.

CCP1 핀에서 이벤트 (하이-로우)가 발생할 때 인터럽트를 생성하도록 CCP 모듈의 캡처 모드를 설정하십시오. 인터럽트 루틴에서는 프로그램의 태스크가 CCPR1H (아마도 필요하지 않을 것임)와 CCPR1L의 값을 계산하고 (필요한 경우) 저장할 수 있도록 플래그를 설정합니다. 그런 다음 캡처 모드 구성을 변경하여 로우에서 하이 에지가 발생할 때 인터럽트를 트리거합니다. 그리고 다음 이벤트를 기다립니다. 이 방법을 사용한 적이 없기 때문에이 방법의 성능을 추정 할 수 없습니다.

다른 옵션?

TSOP17xx 시리즈 와 같은 적외선 복조기 IC를 사용할 수 있습니다 . 그것은 우리의 문제를 완전히 해결할 것입니다. 그러나 몇 가지 질문이 떠 오릅니다.

우리의 독서 거리 요구 사항은 그리 많지 않습니다. 1 미터 (~ 3 피트). 38kHz에서 작동하도록 TSOP1738을 선택하면 36kHz 및 40kHz 신호 에서 얼마나 작동합니까?

TSOP17xx 시리즈 데이터 시트의 4 페이지에 "책임의 주파수 의존성"그래프가 표시됩니다. 우리가 이해하는 한;

  • 38kHz의 ~ 1.053 인 40kHz는 ~ 0.6의 상대 응답 성을 제공합니다.
  • 38kHz의 ~ 0.95 인 36kHz는 ~ 0.65의 상대 응답 성을 제공합니다.

이 값들은 무엇을 의미합니까? TSOP1738을 사용해도 괜찮습니까?


펄스 사이의 루프 수를 계산하는 소프트웨어 루프를 작성하는 것이 어떻습니까?
Rocketmagnet

@Rocketmagnet 나는 그것을 얻지 못한다. 시간이 있다면 답을 쓸 수 있습니까? 또한 언급 된 문제 외에 RS232 및 SPI와 같은 다른 많은 작업을 수행한다는 점을 명심하십시오.
압둘라 카흐 라만

답변:


11

예, TSOP1738은이 짧은 거리에서 작동합니다. 0.65의 상대 책임 성은 36kHz에서 IR LED가 여야한다는 것을 의미합니다.0.65

PIC의 성능에 대해 걱정하지 마십시오. TSOP1738은 38kHz 신호를 출력하지 않습니다. 이것은 TSOP1738에 의해 제거되어 1ms 정도의 펄스 지속 시간으로 훨씬 더 낮은 주파수를 가진베이스 밴드 신호를 되찾기 위해 반송 주파수입니다. 따라서 에지 사이의 시간을 정확하게 측정 할 시간이 충분합니다.

다음 범위 이미지는이를 보여줍니다.

여기에 이미지 설명을 입력하십시오

이것은 하나의 RC5 코드입니다. 맨 위 신호는 36 kHz 변조 신호이며 맨 아래는 실제 코드와 함께 기저 대역 신호입니다.

여기에 이미지 설명을 입력하십시오

이것은베이스 밴드 신호의 한 펄스에서 확대됩니다. 36kHz 반송파의 개별 펄스를 볼 수 있습니다.

반송파 주파수에 대한 한 마디 이 주파수를 모르는 리모컨을 사용하고있을 수 있습니다. TSOP1738은 출력을 제공하지 않으므로, 읽으려면 IR 포토 다이오드 또는 트랜지스터를 PIC 입력 중 하나에 연결하고 두 개의 동일한 시간을 읽습니다. 에지 . 가능합니다. 다른 반송파 주파수에 대한 기간 시간 :

40 kHz에서 25 μS
38 kHz에서 : 26.3 μS
36 kHz에서 : 27.8 μS

20MHz PIC16F616의 명령주기는 200ns입니다 (클럭을 4로 나눕니다). 따라서 세 가지 주파수에 대한 판독 값은 약 125, 131 및 139 여야합니다.이를 구별하기에 충분해야합니다. 그러나 원하는 경우 여러 에지를 통과시키고 10 번째 인터럽트 후 타이머 만 읽을 수 있습니다 (예 : 1250, 1316, 1389). 시간을 기저 대역 신호의 펄스보다 짧게 유지해야하기 때문에 너무 오래 걸리지 않습니다. .

성공!


고마워요. 오래 전에 TSOP1738을 기반으로 한 "IR 학습자"를 만들었지 만 그게 엉망이었습니다.
압둘라 카흐 라만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.