Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Общие сведения о цифровом детекторе PYD 1588
В данной статье приведена работа с цифровым пассивным инфракрасным детектором движения PYD 1588.
Цифровой инфракрасный детектор движения PYD 1588 (далее детектор) фирмы Excelitas Technologies представляет собой малопотребляющий (3,0 мкА при напряжении питания 1,8 В согласно документации) пассивный компонент с расположенными внутри двумя чувствительными элементами, измеряющих поток инфракрасного излучения.
Сигнал с чувствительного элемента преобразуется в цифровые данные посредством встроенного сигма-дельта аналого-цифрового преобразователя и цифрового сигнального процессора (digital signal processor, DSP). Внутри детектора реализован конфигурируемый модуль обнаружения движения, который при регистрации движения может генерировать прерывание ведущего микроконтроллера (МК), а также способствует значительному повышению энергоэффективности устройства благодаря исключению необходимости периодического запроса на получение сырых цифровых данных детектора и их последующего анализа.
По заявленным техническим показателям с имеющимся в корпусе световым фильтром и без применения внешних дополнительных линз Френеля детектор способен регистрировать движение нагретого тела при угле обзора до 115 градусов. Следует отметить, что цифровой детектор PYD 1598 является полным аналогом рассматриваемого детектора PYD 1588 за исключением угла обзора: детектор PYD 1598 конструктивно имеет более широкое окно, что соответствует углу обзора 130 градусов.
Детектор PYD 1588 выпускается в четырёхвыводном металлическом корпусе TO-5.
В детекторе реализованы два различных по временным характеристикам и назначению однопроводных последовательных интерфейсов передачи данных: однонаправленный интерфейс “Serial In” (для загрузки конфигурационных параметров) и полудуплексный интерфейс “Direct Link” (для получения оцифрованных данных), причём интерфейс “Serial In” более медленный: допустимо длительное, в сравнении с “Direct Link”-интерфейсом, время тактирования вплоть до 2 мкс. Отсюда следует, что возможно использование микроконтроллеров с более низкой частотой тактирования, если использовать встроенный в PYD 1588 модуль обнаружения движения после загрузки в него необходимых параметров по интерфейсу “Serial In”.
Чувствительные к инфракрасному излучению элементы детектора PYD 1588 подключены к встроенной микросхеме, функциями которой изображены на приведённой в документации блок-диаграмме (рисунок 2).
Функциями цифровой обработки сигнала занимается встроенная ASIC-схема, включающая в себя тактовый генератор, микросхему источник опорного напряжения, аналого-цифровой преобразователь c мультиплексным выбором источника данных с пироэлектрического датчика и встроенного датчика температуры. Схема включает в себя уже упомянутый встроенный модуль обнаружения движения, а также фильтр низких (ФНЧ) и высоких (ФВЧ) частот.
Последовательный интерфейс “Serial In” используется для конфигурации внутренний регистров детектора. Регистры памяти детектора энергозависимые: после сброса по питанию содержат случайные значения.
Последовательный интерфейс “Direct Link” может быть сконфигурирован следующим образом:
на отправку прерывания, генерируемого встроенным модулем обнаружения движения;
чтения потока данных детектора.
На рисунке 3 изображён пример обработки сигнала, поступающего с пироэлектрического датчика после полосового фильтра, при выборе режима работы встроенного модуля обнаружения движения.
В данном режиме линия интерфейса “Direct Link” переводится в высокое состояние при срабатывании встроенного модуля обнаружения движения и автоматически не переводится обратно в низкое состояние. Для сброса прерывания детектора необходимо принудительно перевести линию “Direct Link” в низкое состояние на время не менее 160 мкс. После сброса тревоги детектора анализ сигнала, осуществляемый встроенным модулем обнаружения движения, игнорируется на так называемое время удержания (blind time).
Описание конфигурационного регистра
[24:17] - пороговое значение (threshold).
Задание порогового уровня напряжения, пересечение которого идентифицируется как факт тревоги при движении в зависимости от настройки счётчика импульсов.
[16:13] - время удержания (blind time).
Отключение датчика движения на заданное время во избежание мгновенного срабатывания после тревоги. Время удержания отсчитывается после того, как детектор переведёт вывод “Direct Link” из низкого состояния в высокое. Данный параметр задаётся в диапазоне от 0,5 с до 8,0 с с шагом 0,5 с.
[12:11] - счётчик импульсов (pulse counter).
Задание количества импульсов, превышающих заданное пороговое значение в течение указанного промежутка времени - времени развёртки (window time). В зависимости от применения (объёмный или лучевой датчик движения) возможен выбор от одного до четырёх количеств пересечений порогового значения.
[10:9] - время развёртки (window time).
Количество пересечений, инкрементируемое счётчиком импульсов, производится в течение задаваемого времени развёртки, которое может быть выбрано в пределах от 2 до 8 с.
[8:7] - режим работы (operation mode).
Доступны три режима работы детектора:
принудительное считывание (“Forced Readout”);
периодическое считывание (“Interrupt Readout”);
режим прерывания от встроенного модуля обнаружения движения (“Wake Up”).
В режиме работы принудительного и периодического считывания линия интерфейса “Direct Link” используется для получения сырых данных детектора и его конфигурационных настроек. В режиме прерываний детектора от встроенного модуля обнаружения движения вывод “Direct Link” используется для однозначного определения срабатывания датчика движения.
[6:5] - источник сигнала (signal source).
Доступен выбор трёх источников:
сигнал с инфракрасного датчика после полосового фильтра [00] (целое знаковое число - количество отсчётов АЦП от -8192 до 8192);
сигнал с инфракрасного датчика после фильтра низких частот [01] (целое беззнаковое число - количество отсчётов АЦП от 0 до 16383);
датчик температуры [11] (целое беззнаковое число - количество отсчётов АЦП от 0 до 16383).
Использование данных, поступающих от датчика температуры, возможно для игнорирование ложных срабатываний в случае резких температурных изменений (1К/мин).
[2] частота среза фильтра высоких частот (HPF cut-off).
Оптимальное значение параметра зависит от характера движения нагретого тела в зоне видимости детектора и в зависимости от применения детектора в конечном устройстве. Более низкому значению параметра (0.2 Гц [1]) соответствует настройка сенсора на регистрацию движения на более длинном расстоянии, большему значению параметра (0.4 Гц [0]) - регистрация движения на коротком расстоянии.
[0] режим счётчика (count mode).
При установке в ноль бита параметра [0] подсчёт импульсов производится в случае, если при превышении порогового значения знак сигнала после полосового фильтра меняется на противоположный. При установке бита параметра в единицу [1] подсчёт импульсов производится каждый раз при превышении заданного порогового значения напряжения (не требуется переход сигнала через ноль).
Описание последовательного интерфейса “Serial In”
Загрузка конфигурационных данных производится через однопроводный однонаправленный последовательный интерфейс “Serial In”. Принцип загрузки данных изображён на рисунке 4.
Во время передачи данных линия интерфейса “Direct Link” должна быть переведена микроконтроллером в низкое состояние. Внешний МК для инициализации передачи бита данных переводит линию интерфейса “Serial In” из низкого состояния в высокое и далее, в зависимости от передаваемого значения (единицы или нуля), удерживает линию в соответствующем состоянии (высоком или низком). Тактирующий импульс может быть минимальным (один такт МК). Длительность передачи бита данных (удержание линии в соответствующем состоянии) должна превышать 80 мкс (tshd). Как только детектор получает все 25 бит информации и передача прерывается переводом линии интерфейса “Serial In” в низкое состояние на время (tslt) более 650 мкс, полученные параметры загружаются конфигурационный регистр.
Описание последовательного интерфейса “Direct Link”
Интерфейс “Direct Link” - однопроводный последовательный полудуплексный интерфейс, предназначенный для генерации прерывания от встроенного модуля обнаружения движения или для непрерывного считывания данных детектора
[39] - валидность данных (out of range).
Встроенная микросхема имеет функцию детекции валидности данных: если сигнал, поступающий с пироэлектрического датчика изменяется скачком в любую сторону на 511 отсчётов АЦП, входная цепь закорачивается на время 16 мс, для того чтобы разрядить сенсор. В таком случае 39-ый бит выставляется в ноль, т. е., имеется наличие технической неисправности сенсора, вызванное нестабильностью состояния пироэлектрического элемента. При нормальной работе датчика 39-ый бит устанавливается в единицу. Данные могут считаться невалидными, например в случае резкого изменения температуры (более 1° в минуту).
[38:25] - данные АЦП (ADC counts).
Оцифровка данных может производиться от трёх разных источников: после фильтрации ФНЧ, полосового фильтра или от датчика температуры. Оцифрованные данные после полосового фильтра доступны каждые 20 мс после предыдущего считывания. Чтение данных чаще чем через указанный промежуток времени может привести к чтению из регистра детектора неактуальных данных.
[24:0] - содержание конфигурационного регистра (configuration).
Чтение параметров, загруженных в конфигурационный регистр детектора.
Таймслоты интерфейса.
Принцип чтения данных изображён на рисунке 5. Процесс чтения можно разделить на фазу инициализации (передача стартового условия) и, непосредственно самого чтения данных. Инициализация процесса чтения производится переводом линии “Direct Link” из низкого состояния в высокое на время не менее 120 мкс (tds). В зависимости от предварительно выбранного режима работы стартовое условие может инициироваться как внешним МК (принудительное считывание), так и самим детектором (периодическое считывание).
Режим прерывания от встроенного модуля обнаружения движения.
При регистрации движения встроенным модулем обнаружения детектор переводит линию из низкого состояния в высокое. Для сброса тревоги необходимо внешним МК перевести линию из высокого состояния в низкое на время не менее 160 мкс (). Получение данных после сброса тревоги от встроенного модуля обнаружения возможно не ранее чем через 120 мкс. Для распознавания тревоги в данном режиме работы детектора необходимо вывод внешнего МК, к которому подключена линия интерфейса “Direct Link”, должен быть сконфигурирован на вход.
Режим принудительного и периодического считывания.
В этих режимах процесс чтения данных детектора одинаковый, отличается только фаза инициализации: в режиме принудительного считывания отправка стартового условия (импульс 120 мс) производится внешним МК, в режиме периодического считывания детектор самостоятельно переводит линию в высокое состояние каждые 16 мс, а внешний МК должен перевести линию в низкое состояние не ранее, чем через 120 мс. Для того чтобы распознать готовность детектора к чтению данных, вывод внешнего МК, к которому подключена линия интерфейса “Direct Link”, также необходимо сконфигурировать на вход.
Процесс чтения данных.
После перевода линии из высокого состояния в низкое стартового импульса детектор ожидает следующего переднего фронта имплульса, генерируемого внешним МК, вывод которого после перевода линии в высокий уровень следует сконфигурировать на вход. При этом детектор удерживает линию в высоком состоянии, чтобы передать логическую единицу, либо переводит линию в низкое состояние для передачи нуля. Время, за которое детектор переводит линию в низкое состояние зависит от ёмкости линии, из этого следует настройку коммуникации начинать с максимального таймслота, но не превышая 22 мкс, постепенно уменьшая длительность интервала передачи одного бита для достижения максимальной скорости передачи пакета данных.
После считывания бита внешний МК снова переводит линию в низкое состояние для инициации передачи следующего бита пакета. Далее последовательность действий повторяется до тех пор, пока не будет передан последний бит данных, после получения которого внешний МК должен удерживать линию “Direct Link” в низком состоянии в течение 160 мкс. Рекомендуется длительность всего процесса считывания данных осуществлять в течение 800 мкс. Возможно прекращение процесса чтения в любой момент, для этого линия “Direct Link” переводится внешним МК в низкое состояния на аремя мне менее 120 мкс.
Пример работы с детектором PYD 1588.
Таблица 3 - Выбор загружаемых в детектор параметров:
параметр | значение | примечание |
порог срабатывания | 0x1F | 31 / 256 = 12% от максимального |
время удержания | 0x06 | 0,5 + 0,5 * 6 = 3,5 с |
счётчик импульсов: | 0x00 | одно пересечение |
время развёртки | 0x00 | 2 + 0 * 2 = 2 с |
режим работы | 0x10 | режим прерывания от встроенного модуля обнаружения движения |
источник сигнала | 0x00 | ИК-сенсор, полосовой фильтр |
частота среза ФВЧ | 0x00 | 0,4 Гц |
режим счётчика | 0x01 | без изменения знака сигнала |
Последовательность бит информации представлена в таблице 4. Циклограмма процесса записи выбранных параметров в конфигурационный регистр детектора по интерфейсу “Serial In”, полученная с помощью логического анализатора, приведена на рисунке 6.
Таблица 3 - Пример записи конфигурационного регистра детектора
count | reserved | cut off | reserved | signal source | operation mode | window time | pulse counter | blind time | threshold | |||||||||||||||
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
На рисунке 7 представлена циклограмма процесса записи и считывания параметров детектора:
запись режима работы принудительного считывания детектора (интерфейс “Serial In”);
чтение данных с датчика (интерфейс “Direct Link”);
переход на режим прерывания от встроенного модуля обнаружения (интерфейс “Serial In”).
Разработана функция записи необходимых параметров в конфигурационный регистр PYD 1588 по интерфейсу “Serial In”. Разработана функция получения данных с датчика по интерфейсу “Direct Link”. Библиотека доступна на github.
Максимальный диапазон измеряемых напряжений АЦП ИК-сенсора 100 мВ. Разрядность АЦП 14 бит (2^14 = ±8192 отсчётов = 6,1 мкВ/отсчёт АЦП).
Код функции записи параметров приведён ниже:
/* Serial In interface realization */
void load_parameters(uint8_t counting_mode, // pulse counting method with the signal sign accounting
uint8_t cut_off_frequency, // the high pass cut-off frequency in the band pass 1lter
uint8_t signal_source, // a choice of three data sources is available (PIR BPF, PIR LPF, temperature sensor)
uint8_t operation_mode, // three sensor operation modes are available
uint8_t window_time, // the pulse counter increment is performed during the selected time
uint8_t pulse_counter, // the amount of pulses above the threshold
uint8_t blind_time, // for avoid immediate re-triggering after a motion event detection
uint8_t threschold, // threshold voltage
uint16_t t_shd, // data bit time (not less than 80 us)
uint16_t t_slt) // hold time for detector data latching
{
DL_LINE_HIGH_TO_LOW;
SI_LINE_HIGH_TO_LOW; // initialization impulse
SI_LINE_LOW_TO_HIGH;
SI_LINE_HIGH_TO_LOW;
/* parameters setting */
uint8_t p_counting_mode = counting_mode;
uint8_t p_cut_off_frequency = cut_off_frequency;
uint8_t p_signal_source = signal_source;
uint8_t p_operation_mode = operation_mode;
uint8_t p_window_time = window_time;
uint8_t p_pulse_counter = pulse_counte;
uint8_t p_blind_time = blind_time;
uint8_t p_threschold = threschold;
uint16_t loaded_data[0x02] = {0x00};
uint8_t *bit_field[0x04] = {0x00};
bit_field[0x00] = &p_pulse_counter;
bit_field[0x01] = &p_window_time;
bit_field[0x02] = &p_operation_mode;
bit_field[0x03] = &p_signal_source;
#ifdef MSP430 // lsb (msp430) to msb (pyd1588) data format converting
p_blind_time = ((p_blind_time & 0x0A) >> 0x01) | ((p_blind_time & 0x05) << 0x01);
p_blind_time = ((p_blind_time & 0x0C) >> 0x02) | ((p_blind_time & 0x03) << 0x02);
for(uint16_t i = 0x00; i < 0x04; i ++) {
*bit_field[i] = ((*bit_field[i] & 0xAA) >> 0x01) | ((*bit_field[i] & 0x55) << 0x01);
}
lsb_to_msb(&p_threschold);
#endif
loaded_data[0] |= p_threschold;
loaded_data[0] |= (p_blind_time << 0x08);
loaded_data[0] |= (p_pulse_counter << 0x0C);
loaded_data[0] |= (p_window_time << 0x0E);
loaded_data[1] |= p_operation_mode;
loaded_data[1] |= (p_signal_source << 0x02);
loaded_data[1] |= (p_cut_off_frequency << 0x06);
loaded_data[1] |= (p_counting_mode << 0x08);
for(uint8_t i = 0x00; i < 0x02; i ++) {
for(uint8_t k = 0x00; k < 0x10; k ++) {
if((k == 0x09) & (i == 0x01)) {
SI_LINE_HIGH_TO_LOW;
break;
}
if((loaded_data[i] & (0x01 << k)) == 0x00) {
SI_LINE_HIGH_TO_LOW;
SI_LINE_LOW_TO_HIGH
SI_LINE_HIGH_TO_LOW;
}
else {
SI_LINE_HIGH_TO_LOW;
SI_LINE_LOW_TO_HIGH;
}
bit_time(t_shd);
}
}
SI_LINE_HIGH_TO_LOW;
bit_time(t_slt);
DL_LINE_INPUT_MODE;
}
Библиотека по работе с детектором PYD 1588, PYD 1588 размещена на github; режим периодического считывания здесь не реализован. Результаты экспериментов при питании устройства от химических источников на момент написания статьи недоступны. Вся информация при работе с детектором была взята из соответствующей документации, размещённой на сайте производителя.