Làm cách nào để đo độ rộng xung của tín hiệu IR bằng PIC 8 bit?


14

Bạn tôi và tôi muốn thiết kế một bộ điều khiển từ xa học tập phổ quát, như cái này , cho mục đích học tập. Những gì chúng tôi muốn làm về cơ bản là lưu trữ và phát lại các xung hồng ngoại.

Chúng tôi muốn phát hiện các tín hiệu 36kHz, 38kHz và 40kHz. Tín hiệu 40kHz sẽ có chu kỳ 25 s.μ

Chúng tôi muốn sử dụng bộ vi điều khiển PIC 8 bit, hiện tại chúng tôi đã chọn PIC16F616, nó sẽ chạy ở bộ dao động tinh thể tốc độ cao 20 MHz. Chúng tôi có hai lựa chọn có sẵn:

  1. Sử dụng Interrupt On Changemô-đun.
  2. Sử dụng chế độ chụp của mô-đun ĐCSTQ.

Tùy chọn đầu tiên sẽ như sau:

Giả sử một thanh ghi được đặt là : unsigned char _10_us = 0;. Đăng ký này sẽ giữ thời gian. Mô-đun TMR2 với thanh ghi thời gian được đặt để tạo ngắt trong mỗi 10 giây. Khi một ngắt xảy ra, nó sẽ tăng đăng ký và thoát. Điều này sẽ cho thời gian tối đa 2,55msec. Nếu cần thêm thời gian đo, các thanh ghi bổ sung như có thể được xác định và tăng lên khi cần thiết.μ_10_us_1_ms

Bây giờ, mỗi khi một ngắt được tạo bởi bất kỳ loại thay đổi nào (cao đến thấp hoặc thấp đến cao), chương trình sẽ lưu ý thời gian hiện tại, đó là giá trị của _10_usthanh ghi. Sau một thời gian, khi ngắt tiếp theo được tạo, chương trình sẽ trừ đi giá trị đã lưu từ thanh _10_usghi, và do đó sẽ là thời gian được thực hiện trong thời gian đó, với đơn vị là 10 giây.μ

Tùy chọn này làm tôi gãi đầu; Gián đoạn TMR2 sẽ xảy ra khoảng 50 hướng dẫn. Xử lý ngắt sẽ mất khoảng 20 hướng dẫn. Tôi còn lại 30 hướng dẫn để tính toán và lưu thời gian vào một mảng. Phương pháp này sẽ làm việc?

Tùy chọn thứ hai sẽ như sau:

Thiết lập chế độ chụp của mô-đun ĐCSTQ để nó sẽ tạo ra một ngắt khi xảy ra một sự kiện (từ cao đến thấp) trên chân của ĐTC1. Trong thói quen ngắt, nó sẽ đặt cờ để một tác vụ trong chương trình có thể tính toán (nếu cần) và lưu giá trị của CCPR1H (có thể sẽ không cần thiết) và CCPR1L. Sau đó, chúng tôi sẽ thay đổi cấu hình của chế độ chụp để nó sẽ kích hoạt ngắt khi xảy ra cạnh từ thấp đến cao. Và sau đó nó sẽ chờ sự kiện tiếp theo. Tôi không thể ước tính hiệu suất của phương pháp này vì tôi chưa bao giờ sử dụng nó.

Một lựa chọn khác?

Chúng ta có thể sử dụng IC giải mã hồng ngoại như sê-ri TSOP17xx . Điều đó sẽ giải quyết hoàn toàn vấn đề của chúng tôi. Tuy nhiên một số câu hỏi đến trong tâm trí.

Yêu cầu khoảng cách đọc của chúng tôi không nhiều; 1 mét (~ 3 feet). Nếu chúng ta chọn TSOP1738 có nghĩa là hoạt động ở tần số 38kHz, thì nó sẽ hoạt động tốt như thế nào với tín hiệu 36kHz và 40kHz?

Trang 4 của biểu dữ liệu của loạt TSOP17xx hiển thị biểu đồ "Sự phụ thuộc tần số của phản hồi". Theo như chúng tôi hiểu;

  • 40kHz, tức là ~ 1.053 của 38kHz, sẽ cho độ nhạy tương đối ~ 0,6.
  • 36kHz, tức là ~ 0,95 của 38kHz, sẽ cho độ nhạy tương đối ~ 0,65.

Những giá trị này nghĩa là gì? Chúng tôi có thể sử dụng TSOP1738 và ổn không?


Tại sao không chỉ viết một vòng lặp phần mềm đếm xem có bao nhiêu vòng lặp giữa các xung?
Rocketmagnet

@Rocketmagnet Tôi không hiểu. Bạn có thể viết một câu trả lời nếu bạn có thời gian? Ngoài ra, hãy nhớ rằng chúng tôi sẽ làm nhiều thứ khác như RS232 và SPI ngoài vấn đề được đề cập.
abdullah kahraman

Câu trả lời:


11

0,65

Đừng lo lắng về hiệu suất của PIC. TSOP1738 sẽ không phát tín hiệu 38 kHz. Đó là tần số sóng mang, được loại bỏ bởi TSOP1738 để lấy lại tín hiệu dải tần gốc, có tần số thấp hơn nhiều, với thời lượng xung theo thứ tự 1 ms, do đó có nhiều thời gian để đo thời gian giữa các cạnh một cách chính xác.

Các hình ảnh phạm vi sau đây minh họa điều này:

nhập mô tả hình ảnh ở đây

Đây là một mã RC5. Tín hiệu trên cùng là tín hiệu điều chế 36 kHz, tín hiệu dải cơ sở phía dưới với mã thực tế.

nhập mô tả hình ảnh ở đây

Điều này được phóng to trên một xung của tín hiệu băng cơ sở. Bạn có thể thấy các xung riêng lẻ của sóng mang 36 kHz.

Thêm một từ về tần số sóng mang. Bạn có thể đang sử dụng một điều khiển từ xa mà bạn không biết tần số này. TSOP1738 không cung cấp cho đầu ra của nó, vì vậy nếu bạn muốn đọc nó, bạn sẽ phải kết nối một điốt quang hoặc bóng bán dẫn IR với một trong các đầu vào của PIC và đọc thời gian giữa hai cạnh giống nhau . Điều đó khả thi. Thời gian cho các tần số sóng mang khác nhau:

40 kHz: 25 Lời chúc
38 kHz: 26.3 Âm sắc
36 kHz: 27.8.

PIC16F616 20 MHz có chu kỳ hướng dẫn 200 ns (nó chia đồng hồ cho 4!). Vì vậy, số đọc cho ba tần số nên vào khoảng 125, 131 và 139. Điều đó là đủ để phân biệt chúng. Nhưng nếu bạn muốn, bạn có thể để một số cạnh vượt qua và chỉ đọc bộ hẹn giờ sau khi ngắt thứ 10, ví dụ: 1250, 1316, 1389. Không quá lâu vì bạn phải giữ thời gian ngắn hơn một xung của tín hiệu dải tần gốc .

Sự thành công!


Đó là bây giờ thư giãn, cảm ơn. Tôi đã tạo ra một "người học IR" dựa trên TSOP1738 từ lâu, nhưng đó là một mớ hỗn độn.
abdullah kahraman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.