Оглавление:

Использование Arduino для отображения оборотов двигателя: 10 шагов (с изображениями)
Использование Arduino для отображения оборотов двигателя: 10 шагов (с изображениями)

Видео: Использование Arduino для отображения оборотов двигателя: 10 шагов (с изображениями)

Видео: Использование Arduino для отображения оборотов двигателя: 10 шагов (с изображениями)
Видео: Панель управления шаговым двигателем на Arduino. 2024, Ноябрь
Anonim
Используйте Arduino для отображения оборотов двигателя
Используйте Arduino для отображения оборотов двигателя
Используйте Arduino для отображения оборотов двигателя
Используйте Arduino для отображения оборотов двигателя
Используйте Arduino для отображения оборотов двигателя
Используйте Arduino для отображения оборотов двигателя

В этом руководстве я расскажу, как я использовал Arduino UNO R3, ЖК-дисплей 16x2 с I2C и светодиодную ленту, которая будет использоваться в качестве индикатора скорости двигателя и индикатора переключения передач в моей гусеничной машине Acura Integra. Он написан с точки зрения человека, имеющего некоторый опыт или знакомство с программным обеспечением Arduino или кодированием в целом, математическим программным обеспечением MATLAB и созданием или изменением электрических схем. В будущем это может быть изменено, чтобы его было легче понять для тех, кто практически не знаком с этими темами.

Шаг 1. Выберите сигал

Выберите сигал
Выберите сигал

Вам понадобится сигнал, который коррелирует с частотой вращения двигателя. Можно добавить систему, измеряющую частоту вращения двигателя, но гораздо практичнее подключиться к существующему проводу, по которому передается информация о частоте вращения двигателя. Для одного автомобиля это может быть несколько источников, и оно может сильно различаться даже из года в год для одной модели автомобиля. Для этого урока я буду использовать в качестве примера мою машину, гусеничную модифицированную Acura Integra LS 2000 года выпуска. Я обнаружил, что на моем двигателе (B18B1 с OBD2) есть неиспользуемое выходное напряжение, которое составляет 12 В и падает до 0 В после завершения полного оборота.

Что поможет определить потенциальный сигнал частоты вращения коленчатого вала двигателя:

  • Схема подключения вашего автомобиля
  • Поиск на форумах по вашему автомобилю по сигналам двигателя / ЭБУ
  • Приветливый механик или автолюбитель

Шаг 2: подключите провод к плате Arduino

Протяните провод к плате Arduino
Протяните провод к плате Arduino
Протяните провод к плате Arduino
Протяните провод к плате Arduino

После того, как вы выбрали подходящий сигнал, вам необходимо расширить его везде, где вы размещаете ваш Arduino доски. Я решил разместить мину внутри автомобиля, где раньше была рация, поэтому я проложил новый провод от двигателя через резиновую втулку в противопожарной стене прямо к зоне радиоприемника. Поскольку уже существует множество руководств по снятию изоляции, пайке и защите проводки, я не буду объяснять этот процесс.

Шаг 3: Анализ сигнала

Анализ сигналов
Анализ сигналов

Здесь все может усложниться. Имея общее представление анализа сигналов и управления поможет вам долгий путь, но это выполнимо с небольшим количеством знаний.

Сигнальный провод выбирается наиболее вероятно не будет выплевывая точное значение скорости вращения двигателя. Это нужно будет иметь форму и модифицирована в давать точное число оборотов двигателя вы хотите. Поскольку каждый автомобиль и сигнальный провод могут быть разными, с этого момента я объясню, как я использовал сигнал положения от распределителя на моем Integra.

Мой сигнал обычно 12 и падает до 0В при заполнении одного полного оборота. Если вы знаете время, необходимое для выполнения одного полного оборота или одного полного цикла, это можно легко перевести в число оборотов в минуту, используя некоторые базовые концепции.

1 / (секунд на цикл) = циклов в секунду или Гц

Оборотов в минуту = Гц * 60

Шаг 4: Кодируйте свой анализ сигналов

Кодируйте свой анализ сигналов
Кодируйте свой анализ сигналов

Этот метод требует получения время, необходимое для входного сигнала для завершения одного полного цикла. К счастью, в программном обеспечении Arduino IDE есть команда PulseIn, которая делает именно это.

Эта команда будет ждать сигнала о превышении порогового значения, начнет отсчет и прекратит отсчет, когда порог снова будет пересечен. При использовании команды следует учитывать некоторые детали, поэтому я включу ссылку на информацию о PulseIn здесь:

PulseIn вернет значение в микросекундах, и для упрощения математики его следует немедленно преобразовать в обычные секунды. После математики на предыдущем шаге, эта продолжительность времени может быть приравнена непосредственно в RPM.

Примечание: после проб и ошибок я обнаружил, что распределитель совершает два оборота за каждый оборот коленчатого вала двигателя, поэтому я просто разделил свой ответ на 2, чтобы учесть это.

Шаг 5: Определите фильтр

Определить фильтр
Определить фильтр

Если вам повезет, в вашем сигнале не будет «шума» (колебаний), и скорость вашего двигателя будет точной. В моем случае от распределителя исходил сильный шум, который часто давал напряжение, отличное от ожидаемого. Это приводит к очень ложным показаниям фактических оборотов двигателя. Этот шум необходимо отфильтровать.

После некоторого анализа сигналов почти весь шум пришел на частотах (Гц), намного превышающих то, что выдавал сам двигатель (что верно для большинства реальных динамических систем). Это означает, что фильтр нижних частот является идеальным кандидатом, чтобы заботиться об этом.

Фильтр нижних частот пропускает низкие частоты (желаемые) и ослабляет высокие частоты (нежелательные).

Шаг 6: Фильтрация: часть 1

Фильтрация: Часть 1
Фильтрация: Часть 1
Фильтрация: Часть 1
Фильтрация: Часть 1
Фильтрация: Часть 1
Фильтрация: Часть 1

Фильтр можно проектировать вручную, однако использование MATLAB значительно ускорит это, если у вас есть доступ к программному обеспечению.

Фильтр нижних частот можно приравнять к передаточной функции (или дробной части) в области Лапласа (частотной области). Входная частота будет умножена на эту дробь, а на выходе будет отфильтрованный сигнал, содержащий только ту информацию, которую вы хотите использовать.

Единственная переменная в функции - tau. Тау равно 1 / Омега, где Омега - это желаемая частота среза (должна быть в радианах в секунду). Частота среза - это предел, при котором частоты выше, чем она, будут удалены, а частоты ниже, чем она будет сохранена.

Я установил частоту среза равной оборотам, которых мой двигатель никогда не достигнет (990 об / мин или 165 Гц). Графики БПФ примерно показывают, какие частоты передавал мой необработанный сигнал, и частоты, выходящие из фильтра.

Шаг 7: Фильтрация: Часть 2

Фильтрация: Часть 2
Фильтрация: Часть 2
Фильтрация: Часть 2
Фильтрация: Часть 2

Здесь MATLAB был использован снова для времени. Частота среза определяется, а также от того, отображается в результате функция передачи. Имейте в виду, что эта доля применяется только к области Лапласа и не может быть напрямую использована на микроконтроллере с временной привязкой, таком как Arduino UNO R3.

Шаг 8: Фильтрация: Часть 3

Фильтрация: Часть 3
Фильтрация: Часть 3
Фильтрация: Часть 3
Фильтрация: Часть 3

MATLAB имеет команду, которая будет преобразовывать непрерывную функцию (в частотной области) в дискретной функции (временной области). Вывод этой команды будет обеспечивать уравнение, которое может быть легко включено в Arduino IDE кода.

Шаг 9: Фильтрация: часть 4

Фильтрация: Часть 4
Фильтрация: Часть 4
Фильтрация: Часть 4
Фильтрация: Часть 4

В Arduino эскиз, включают в себя переменные и и у перед установкой. Команда float просто определяет, как переменная будет хранить данные (например, максимальное значение, десятичные дроби и т. Д.), И ссылка на дополнительную информацию об этом будет предоставлена здесь: https://www.arduino.cc/reference/en/language / varia…

В цикл, в котором происходит преобразование необработанного сигнала в частоту вращения двигателя, включите переменную u и уравнение множественности y. Есть несколько способов использовать это, но переменная u должна быть установлена равной измеряемому необработанному входному сигналу, а переменная y будет отфильтрованным значением.

Рекомендуемые: