Views: 1832
Страница в pdf
Ультразвуковой метод измерения расстояния является одним из самых распространенных. Ультразвуковой модуль HC-SR04 имеет 4 вывода.
Vcc – напряжение питания 5 вольт
Trig – вход запускающих импульсов для процесса измерения
Echo – выход импульса длительность которого пропорциональна расстоянию.
GND – общий провод питания.
Для демо примера будем использовать плату ILLISSI-4B-03-primum и плату индикации ILLISSI-4С-01-secundo.
В качестве управления будем использовать вывод RC2, для измерения длительности будем использовать вход T1G (RB5). Подключение:
Для измерения частоты используется таймер 1 и его Gate-модуль управления.
Gate-модуль управления появился в новых Pic-контроллерах серии PIC16F19xx. Теперь элементарно легко построить измерителей длительности и частоты сигнала, которые аппаратно, самостоятельно выполняют эти функции не отвлекая микроконтроллер от основной задачи.
Для измерения сигнала настроим таймер для измерение длительности импульсов. На вход будем подавать тактовую частоту 1 мГц. Что соответствует 1 мкс длительности. Измеряемый импульс (эхо от модуля HC-SR04) будем подавать на вход T1G.
T1CON=0b00110001; // настройка таймера T1CON
// |||||| |
// |||||| +-- TMR1ON таймер включить
// |||||+---- T1SYNC синхронизация отключена
// ||||+----- T1OSCEN генератор отключен
// ||++------ T1CKPS настройка предделителя 00 - 1:1
// ++-------- TMR1CS выбор тактовой частоты FOSC
T1GCON=0b11000100; // регистр ворот
// ||||||++-- T1GSS<1:0>: выбор входа для модуля ворот 00 - TGP1
// ||||||+--- T1GVAL: Флаг
// |||||+---- T1GSPM: выбор синхронизация от модуля единичного импульса
// ||||+----- T1GGO/DONE: запуск одиночного измерения
// |||+------ T1GSPM: управление триггером режима (отключен)
// ||+------- T1GTM: управление триггером режима (отключен)
// |+-------- T1GPOL: таймер 1 работает когда уровень высокий
// +--------- TMR1GE: регистр ворот включен и управляет таймером 1
Вариант настройки таймера выполнен с учетом, что тактовая частота контроллера 32 мГц. (хотя с успехом можно использовать и более низкие тактовые частоты от 1 мГц.).
Процесс измерения начинается с инициализации таймера и сброса флага переполнения таймера.
TMR1IF=0; // сброс флага переполнения TMR1H=0; // сброс регистров таймер TMR1L=0; //
Особенности работы модуля не соответствующие описанию.
Флаг переполнения будет использоваться для определения ситуации когда модуль HC-SR04 не может получить эхо. На практике было определено, что работа модуля немного отличается от описания, которое было найдено в инете. Дело в том что при отсутствия эха, модуль формирует непрерывный импульс.
Длительность импульса ответа непрерывна и прерывается только в момент формирования импульса запуска измерения. Вид на ответ от модуля в ситуации отсутствия эха.
Если эхо присутствует, то мы будем видеть следующие осциллограммы работы с модулем.
В начале формируется (на входе Trig) импульс запуска длительностью не менее 10 мкс. После этого модуль через 0,5 мс, начинает формировать ответ импульсом длительностью пропорциональной расстоянию. На нижнем рисунке, пример, формирования импульса (это расстояние от поверхности моего стола до потолка и составляет 1,74 м).
Длительность 10114 мкс. Что составляет 10114/58=174 см.
После инициализации регистров таймера и очистки флага переполнения, формируем импульс запуска длительностью не менее 10 мкс.
// формирование импульса запуска LATC2=1; __delay_us (10); LATC2=0;
После этого включаем таймер и запускаем режим измерения одиночного импульса.
TMR1ON=1; // включение таймера T1GGO=1; // запуск одиночного измерения
Далее ожидаем окончания измерения, при этот контролируем, флаг переполнения таймера и если такое “неподобство” наступит, будем подсчитывать количество таких измерений. Это необходимо, чтобы сделать индикацию отсутствия эха, приемлемой для восприятия.
while(T1GGO)// ожидания окончания измерения
{
CLRWDT(); // сброс сторожевого таймера
if(TMR1IF)
{
T1GGO=0;// останов измерения при переполнении таймера
ERROR++;// подсчет количества измерений когда отсутствует эхо
}
}
После выполнения измерения, останавливаем таймер:
TMR1ON=0;//остановить таймер
Далее по результатам измерения выводим на индикатор измеренное расстояние или сообщение, что нет эха, т.е. нет препятствий в зоне чувствительности модуля.
if(!TMR1IF)
{
// чтение регистров таймера
pwm_reg=TMR1L;
pwm_reg += TMR1H << 8;
// ФИЛЬТР устранения дрожания индикации при смене показаний "накапливающий интегратор"
if(pwm_reg^pwm_regp && porog)porog--;
else
{
pwm_regp=pwm_reg;
porog=2;
}
// преобразование в сантиметры длины
// bin_dec (pwm_reg/58,2); // индикации "не отфильтрованного" сигнала
bin_dec (pwm_regp/58,2);// индикация после фильтра
ERROR=0;
// индикация
indic (dmil,miln,stys,dtys,tysc,sotn,dest,edin,6); // вывод значения на дисплей
}
else
{
// индикация отсутствия эха
if(ERROR>4)indic (cM,cn,co,0,cE,ch,co,cM,0); // вывод значения на дисплей
}
Примечание: для устранения “дрожания” показаний применим «накапливающий интегратор». За это отвечают строки:
// ФИЛЬТР устранения дрожания индикации при смене показаний "накапливающий интегратор"
if(pwm_reg^pwm_regp && porog)porog--;
else
{
pwm_regp=pwm_reg;
porog=2;
}
И в конце, сформируем задержку, которая необходима для формирования периода подачи импульсов изменения не менее чем через 50 мс.
__delay_ms (50);// формирования периода запуска сенсора
Выводы: Датчик обладаем широким углом захвата, поэтому его рекомендуется устанавливать над плоскими поверхностями на расстоянии не менее 10 мм. В связи с этим он захватывает отраженные импульсы от предметов которые находятся от его оси до ±15 грд., что необходимо учитывать при конструировании устройств. Реальная чувствительность не более 3 метров. На большие расстояния не хватает или мощности формируемого импульса или чувствительности приемника. Мое мнение – я считаю, что для таких модулей вывод измеряемого параметра в виде ширины импульса не практично, так-как получается два цикла измерения, первое это измерение делает модуль, второе контроллер. Для таких устройств желательно, что-бы все эти преобразования были выполнены в самом модуле. А на выходе формировать уже значение расстояния в виде готовых цифровых данных. А получать данные из модуля, удобно через последовательные интерфейсы I2C, SPI или UART.
Фото демо проекта
Видео демо проекта
__
Проект
Это может быть интересно
PIC18F25K42 – v. A001 – выявленные баги.Views: 798 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …
Простой оптический сенсор приближенияОптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения...
CAN – Controller Area NetworkViews: 1244 Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, …
Универсальный терморегулятор ch-c3000Views: 3206 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …
Светодиоды со встроенным драйвером WS2812BViews: 1042 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …
Контроллер управления светодиодным освещением с дистанционным управлениемViews: 2061 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
Проект с использованием MCC часть 10Views: 1056 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
Audio-bluetooth modules F-6188 (BK8000L)Views: 2460Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …
Акриловый корпус для платы ch-4000Views: 857 Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус …
LCD индикаторы на драйвере ML1001Views: 2025 ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. …








