Як виміряти ширину імпульсу ІЧ-сигналу за допомогою 8-бітового ПОС?


14

Ми з другом хочемо розробити універсальний дистанційний контролер, як цей , для цілей навчання. Що ми хочемо зробити в основному - це зберігати та відтворювати інфрачервоні імпульси.

Ми хочемо виявити сигнали 36 кГц, 38 кГц і 40 кГц. Сигнал 40 кГц матиме період 25 .мк

Ми хочемо використовувати 8-бітний мікроконтроллер PIC, тому що зараз ми вибрали PIC16F616, який буде працювати на високошвидкісному кристалічному генераторі 20 МГц. У нас є два варіанти:

  1. Використовуйте Interrupt On Changeмодуль.
  2. Використовуйте режим захоплення модуля CCP.

Перший варіант буде наступним:

Припустимо , регістр встановлюється як: unsigned char _10_us = 0;. Цей реєстр матиме час. Модуль TMR2 з регістром періоду встановлюється для створення переривання кожні 10 . Коли станеться переривання, воно збільшить регістр і вийде. Це дасть максимальний час 2,55 мсек. Якщо потрібно більше вимірювання часу, додаткові регістри, такі як можна визначити та збільшити за потребою.мк_10_us_1_ms

Тепер, кожного разу, коли генерується переривання будь-яким типом змін (від високого до низького або від низького до високого), програма відзначатиме поточний час, тобто значення _10_usрегістру. Через деякий час, коли буде сформовано наступне переривання, програма відніме збережене значення з _10_usреєстру, і, таким чином, тепер буде час, який приймається тим часом, з одиницею 10 секунд.мк

Цей варіант змушує мене почухати голову; Переривання TMR2 відбуватиметься приблизно кожні 50 інструкцій. Порушення роботи триватиме близько 20 інструкцій. Мені залишається 30 інструкцій для обчислення та збереження періоду в масив. Чи буде цей метод спрацювати?

Другий варіант буде наступним:

Налаштуйте режим захоплення модуля CCP так, щоб він генерував переривання, коли на штифті CCP1 відбувається подія (від високої до низької). У режимі переривання він встановить прапор, щоб завдання в програмі могли обчислити (якщо потрібно) і зберегти значення CCPR1H (ймовірно, не знадобиться) та CCPR1L. Тоді ми змінимо конфігурацію режиму зйомки так, що вона спровокує переривання при появі краю від низького до високого. І тоді буде чекати наступної події. Я не можу оцінити ефективність цього методу, оскільки я його ніколи не використовував.

Ще один варіант?

Ми можемо використовувати ІЧ інфрачервоний демодулятор, такий як серія TSOP17xx . Це повністю вирішило б нашу проблему. Однак деякі питання приходять на думку.

Наша вимога до відстані читання не велика; 1 метр (~ 3 фути). Якщо ми виберемо TSOP1738, який повинен працювати в 38 кГц , наскільки добре це буде працювати з сигналами 36 кГц і 40 кГц?

Сторінка 4 таблиці даних серії TSOP17xx показує графік "Залежність частоти відповідальності". Наскільки ми зрозуміли;

  • 40 кГц, що становить ~ 1,053 38 кГц, дасть відносну чутливість ~ 0,6.
  • 36 кГц, що становить ~ 0,95 38 кГц, дасть відносну чутливість ~ 0,65.

Що означають ці значення? Чи можемо ми використовувати TSOP1738 і добре?


Чому б просто не написати програмний цикл, який підраховує кількість циклів між імпульсами?
Rocketmagnet

@Rocketmagnet Я не розумію. Чи можете ви написати відповідь, якщо у вас є час? Крім того, майте на увазі, що ми будемо робити багато інших речей, таких як RS232 та SPI, крім згаданої проблеми.
abdullah kahraman

Відповіді:


11

Так, TSOP1738 зробить на цій невеликій відстані. Відносна чутливість 0,65 означає, що на 36 кГц ваш ІЧ-світлодіод повинен бути = в 0,8 рази ближче, щоб побачити однакову силу сигналу, через закон зворотного квадрата . Отже, якщо ваш TSOP1738 бачить певний рівень 38 кГц на 1 м, вам доведеться утримувати передавач на 80 см, щоб отримати таку ж силу сигналу на 36 кГц. До речі, за допомогою пульта дистанційного керування зі свіжими батареями я виміряв ідеальний прийом на відстані понад 15 м, так що проблем взагалі не було.0,65

Не турбуйтеся про продуктивність PIC. TSOP1738 не виводить сигнал 38 кГц. Це несуча частота, яка видаляється TSOP1738 для повернення сигналу базової смуги, який має значно нижчу частоту, із тривалістю імпульсу порядку 1 мс, тому є достатньо часу для точного вимірювання часу між ребрами.

Наступні зображення сфери пояснюють це:

введіть тут опис зображення

Це один код RC5. Верхній сигнал - модульований сигнал 36 кГц, нижній - сигнал базової смуги з фактичним кодом.

введіть тут опис зображення

Це збільшується на один імпульс сигналу базової смуги. Ви можете бачити окремі імпульси носія 36 кГц.

Ще одне слово про частоту несучої. Можливо, ви використовуєте пульт, про який ви не знаєте цієї частоти. TSOP1738 не відображає його на своєму виході, тому, якщо ви хочете прочитати його, вам доведеться підключити ІК фотодіод або транзистор до одного з входів PIC і зчитувати час між двома однаковими краями. Це можливо. Періодичні періоди для різних частот несучої:

40 кГц: 25 мкс
38 кГц: 26,3 мкс
36 кГц: 27,8 мкс

PIC16F616 20 МГц має цикл інструкцій 200 нс (він ділить тактову частоту на 4!). Отже, показання для трьох частот повинні становити приблизно 125, 131 і 139. Цього повинно бути достатньо, щоб розрізнити їх. Але якщо ви хочете, ви можете дозволити пройти ряд ребер і прочитати таймер лише після 10-го переривання, наприклад: 1250, 1316, 1389. Не надто довше, тому що вам потрібно тримати час коротший, ніж один імпульс сигналу базової смуги. .

Успіху!


Це зараз розслабляє, дякую. Я давно створив "ІЧ-учня" на основі TSOP1738, але це було безладдям.
abdullah kahraman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.