Найти в Дзене
oleg gorshkov

Дальномер на HC-SR04 без микроконтроллера. Часть I

HC-SR04 — это ультразвуковой датчик расстояния, который широко используется в DIY-проектах, робототехнике и системах автоматизации для измерения расстояния до объектов с помощью эхолокации. Датчик HC-SR04 работает по принципу эхолокации, аналогично тому, как это делают летучие мыши или дельфины. 1. Инициирование: Микроконтроллер (например, Arduino) подает короткий импульс высокого уровня длительностью 10 мкс на вход TRIG датчика. 2. Излучение: В ответ на этот импульс модуль автоматически генерирует пакет из восьми ультразвуковых импульсов на частоте 40 кГц. 3. Прием: После отправки сигнала датчик переходит в режим ожидания эха. Если сигнал отражается от объекта и возвращается, приемник (контакт ECHO) улавливает его. Расчет: Длительность импульса на выходе ECHO пропорциональна времени прохождения звука от датчика до объекта и обратно. Рабочее напряжение 5 В постоянного тока (существуют версии 3.3В-5В) Потребляемый ток 15 мА (в режиме работы), <2 мА (в режиме ожидания) Рабочая частота

HC-SR04 — это ультразвуковой датчик расстояния, который широко используется в DIY-проектах, робототехнике и системах автоматизации для измерения расстояния до объектов с помощью эхолокации.

Датчик HC-SR04 работает по принципу эхолокации, аналогично тому, как это делают летучие мыши или дельфины.

1. Инициирование: Микроконтроллер (например, Arduino) подает короткий импульс высокого уровня длительностью 10 мкс на вход TRIG датчика.

2. Излучение: В ответ на этот импульс модуль автоматически генерирует пакет из восьми ультразвуковых импульсов на частоте 40 кГц.

3. Прием: После отправки сигнала датчик переходит в режим ожидания эха. Если сигнал отражается от объекта и возвращается, приемник (контакт ECHO) улавливает его.

Расчет: Длительность импульса на выходе ECHO пропорциональна времени прохождения звука от датчика до объекта и обратно.

Рабочее напряжение 5 В постоянного тока (существуют версии 3.3В-5В)

Потребляемый ток 15 мА (в режиме работы), <2 мА (в режиме ожидания)

Рабочая частота 40 кГц

Диапазон измерения от 2 см до 400 см (4 м)

Точность измерения до 0.3 см (3 мм)

Эффективный угол обзора <15°

внешний вид
внешний вид

Простыми словами подаём импульс от 10 микросекунд на пин датчика TRIG и через некоторое время получаем на пине ECHO импульс, длительность которого соответствует измеренному расстоянию. Нам требуется сгенерировать импульс TRIG, измерить ECHO и рассчитать расстояние. Для расчёта расстояния в сантиметрах нужно просто разделить длительность импульса ECHO (в микросекундах) на 58.

Конечно обычно датчик используют в паре с ардуино, но я задался целью сделать дальномер на дискретных микросхемах , скорее из интереса.

Для измерения решил использовать микросхемы CD4026 — это десятичный счетчик с дешифратором и драйвером 7-сегментного дисплея.

Так как CD4026 имеет пин 2 - запрещающий счёт (Clock Inhibit), то на первый взгляд проще всего подать на тактовый пин 1 импульсы с тактового генератора, а на пин 2 подать инвертированный сигнал ECHO, так как разрешающим уровнем является нуль.

По этому пути первоначально и пошёл.

Попытка 1
Попытка 1

Три счётчика (DD2-DD4) соединены последовательно, к их выходам подключены семи сегментные светодиодные индикаторы.

Микросхема DD1 – 74 HC14 содержит шесть инвертирующих триггеров Шмита. На ней выполнены:

Тактовый генератор (DD1, R3, RP1, C3) обеспечивающий импульсы 17,24 кГц. Именно эта частота позволит видеть на индикаторах расстояние в сантиметрах. Частоту можно подстроить потенциометром RP1. Эти импульсы подаются на пин 1 (CLC) DD2.

Генератор сигналов запуска измерений (DD1, R1, C1, R2, C2). Он вырабатывает импульсы длительностью 10,3 микросекунды, с интервалом около двух импульсов в секунду. Эти импульсы подаются одновременно на пин датчика TRIG и на пины 15 (сброс) счётчиков.

Также на одном из элементов DD1 выполнен инвертор, опрокидывающий пришедший с датчика сигнал ECHO для подачи его на пины 2 (запрет счёта) счётчиков.

Спаял эту схему на макетной плате.

Собрал
Собрал

Подключил, и не работает. Точнее что-то измеряет, но показания отличаются в разы.

врёт, должно быть 10
врёт, должно быть 10

Так вместо 10 сантиметров показывает 120. Сначала думал, что датчик бракованный. Смоделировал работу датчика при помощи Ардуино. Скетч:

#define TRIG 3 //вход

#define EXO 4 //выход

void setup()

{

pinMode(TRIG, INPUT);

pinMode(EXO, OUTPUT);

}

void loop() {

if ( digitalRead(TRIG) == HIGH ) //если пришёл сигнал

{

delay(1);// у реального датчика есть задержка

digitalWrite(EXO, HIGH);

//delayMicroseconds(2900); //50sm

//delayMicroseconds(2800); //100sm

delayMicroseconds(588); //10sm

digitalWrite(EXO, LOW);

}

}

Наблюдения показали, что схема ведёт себя точно также как с реальным датчиком (врёт). Но если из скетча выкинуть задержку delay(1) после прихода TRIG, то появляются почти идеальные показания.

Такие наблюдения привели к выводу, что счётчики в какой-то момент продолжают считать, несмотря на наличие нуля на пине запрета счёта. Хотя ноль приходит точно, ошибок в схеме нет, блокировочные конденсаторы установлены.

Показания логического анализатора
Показания логического анализатора

На фото замеры логическим анализатором. Сверху вниз: Сигнал TRIG, сигнал ECHO, сигнал на запрещающих пинах счётчиков.

Мистика какая-то. Толи CD4026 бракованные, толи какие-то гонки состояний.

Если у кого-то есть предположения, почему схема не заработала, напишите в комментариях.

Я же вдоволь наругавшись с ИИ решил изменить концепцию – если не получается должным образом запретить счёт, то разрешу его постоянно, посадив пины 2 счётчиков на землю. А ограничивать буду тактовые импульсы. То есть тактовые импульсы будут поступать на счётчик только в момент наличия сигнала ECHO. Для этого понадобится логический элемент «И», на один вход которого будет поступать сигнал с генератора, на другой сигнал ECHO, и только при наличии единицы на обоих входах, будет единица на выходе. С выхода логического элемента сигнал подаётся на тактовый вход счётчика.

Изменения дали результат, схема заработала отлично. Но об этом в следующей статье читайте.

Продолжение