Pikap24.ru

Автомобильный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Датчик обороты для двигателя ардуино

Рассмотрим составные части сервопривода.

Электромотор с редуктором

За преобразование электричества в механический поворот в сервоприводе отвечает электромотор. В асинхронных сервоприводах установлен коллекторный мотор, а в синхронных — бесколлекторный.

Однако зачастую скорость вращения мотора слишком большая для практического использования, а крутящий момент — наоборот слишком слабый. Для решения двух проблем используется редуктор: механизм из шестерней, передающий и преобразующий крутящий момент.

Включая и выключая электромотор, вращается выходной вал — конечная шестерня редуктора, к которой можно прикрепить нечто, чем мы хотим управлять.

Позиционер

Для контроля положения вала, на сервоприводе установлен датчик обратной связи, например потенциометр или энкодер. Позиционер преобразует угол поворота вала обратно в электрический сигнал.

Плата управления

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

Выходной вал

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

Выходной шлейф

Для работы сервопривода его необходимо подключить к источнику питания и к управляющей плате. Для коммуникации от сервопривода выходит шлейф из трёх проводов:

Если сервопривод питается напряжением от 5 вольт и потребляет ток менее 500 мА, то есть возможность обойтись без внешнего источника питания и подключить провод питания сервомотора непосредственно к питанию микроконтроллера.

Тахометр на Arduino

Тахометр — это полезный инструмент для подсчета RPM (оборотов в минуту) колеса или всего, что крутится. Самый простой способ сделать тахометр — это использовать ИК передатчик и приемник. Когда связь между ними прерывается, вы знаете, что что-то вращается и можете применять код для вычисления RPM, ориентируясь на частоту прерывания связи.

В этой статье мы рассмотрим, как использовать ИК-передатчик и приемник для изготовления тахометра с применением Arduino. Результат отображается на ЖК-дисплее 16х2.

Целью данного проекта является создание системы с одним входом и одним выходом. На входе устройства присутствует сигнал, изменяющийся с высокого (+5В) на низкий (+0В) уровень при нарушении связи. Согласно этому сигналу, Arduino будет увеличивать значение внутреннего счетчика. Потом проводится дополнительная обработка и расчет, и по прерыванию триггера на ЖК-дисплей будет выводиться рассчитанное RPM.

Для связи мы будем использовать ИК-луч от ИК-светодиода, включенного через низкоомный резистор так, чтобы светиться ярко. В качестве приёмника мы будем использовать фототранзистор, который при отсутствии света ИК-светодиода «закрывается». Компьютерный вентилятор будет размешен между ИК-передатчиком и приёмником и включен. ИК-приёмник включенный через транзисторную схему, будет генерировать прерывания. Для вывода результата будет использоваться Arduino LCD интерфейс, поэтому мы можем вывести окончательное значение RPM на ЖК-дисплей.

Элементы:
Arduino UNO
16×2 LCD
Макетная плата
Подстроечный резистор 5 кОм
Перемычки
SIP разъёмы
2x 2N2222 NPN транзистор
Инфракрасный светодиод
Фототранзистор
Резистор 10 Ом
Резистор 100 кОм
Резистор 15 кОм или 16 кОм
Компьютерный вентилятор

Подробный список элементов

Все элементы используемые в проекте указаны выше, но я более подробно опишу функции основных элементов.

Arduino UNO
Это плата Arduino, которую мы будем использовать для обработки импульсов от прерывания ИК-луча, которые сообщают о нахождении лопасти компьютерного вентилятора между приемником и датчиком. Arduino будет использовать эти импульсы наряду с таймером, чтобы вычислить RPM вентилятора.

ЖК-дисплей 16×2
После того, как Arduino вычислило RPM, эта значение будет отображаться на дисплее в понятном для пользователя виде.

Подстроечный резистор 5 кОм
Этот подстроечный резистор будет использоваться для регулировки контрастности ЖК-дисплея 16×2. Он дает аналоговое напряжение в диапазоне от 0 до +5В, позволяя настроить яркость ЖК-дисплея.

Инфракрасный светодиод и Фототранзистор
Фототранзистор открывается, когда мощный ИК-свет падает на него. Поэтому, когда ИК-светодиод горит, он держит фототранзистор открытым, но если ИК-светодиод закрывается например, лопастью вентилятора, то фототранзистор закрывается.

2N3904 и 2N3906
Эти транзисторы используются для преобразования уровня сигнала, с целью обеспечения выходных импульсов с фототранзистора для Arduino, в которых нет никаких напряжений кроме +0 и +5В.

Принципиальная схема

В схеме, интерфейс связи с ЖК-дисплеем упрощен и имеет только 2 линии управления и 4 линии передачи данных.

Особенности схемы

Интерфейс ЖК-дисплея 16×2
2 управляющих контакта и 4 для передачи данных подключены от Arduino к ЖК-дисплею. Это то, что указывает ЖК-дисплею, что и когда делать.

Схема обрыва ИК-луча
Сигнал обрыва ИК-луча идет на 2-ой цифровой контакт Arduino. Это прерывает Arduino, что позволяет ему засчитать импульс и позволяет тахометру получать данные.

Arduino LCD библиотека

Для этого проекта мы будем использовать Arduino LCD библиотеку. В основном мы будем просто обновлять значение RPM на второй строке на новое.

Читать еще:  421 инжекторный двигатель характеристики

В качестве подготовки, посмотрите на код приведенный ниже, в котором при помощи этой библиотеки на ЖК-дисплей выводиться «Hello, World!» В тахометре мы будем использовать похожий код, особенно: «lcd.print(millis()/1000);».

Разберитесь в функциях этой ЖК-библиотеки как можно подробнее, прежде чем двигаться дальше. Она не слишком сложна и хорошо документирована на сайте Arduino.

Подсчет RPM при помощи Arduino

Так как мы собираемся подсчитать RPM компьютерного вентилятора, мы должны понимать, что для подсчета мы используем прерывание ИК-луча. Это очень удобно, но мы должны учитывать, что у компьютерного вентилятора 7 лопастей. Это значит, 7 прерываний равно 1 обороту.

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

Время 1-го оборота = P * (µS/оборот)
RPM = кол-во оборотов/мин = 60 000 000 * (µS/мин) * (1/P) = (60 000 000 / P) * (кол-во оборотов/мин)

Для расчета RPM мы будем использовать формулу приведенную выше. Формула точная, и точность зависит от того, насколько хорошо Arduino сможет отслеживать время между прерываниями и посчитывать количество полных оборотов.

Сборка схемы

На фотографии ниже вы можете увидеть все необходимые детали и перемычки как на схеме.

Для начала подключается +5В и линии данных/управления ЖК-дисплея. Затем ЖК-дисплей, потенциометр контрастности и светодиод питания.

Схема обрыва ИК-луча собрана. Старайтесь, чтобы между ИК-светодиодом и фототранзистором было расстояние. На этой фотографии видно расстояние между ИК-светодиодом и фототранзистором, где я размещу компьютерный вентилятор.

Хватит разговоров о аппаратной части! Давайте начнем делать прошивку/программу, чтобы увидеть работу устройства!

Программная часть

Есть две основных части кода, которые показаны и подробно описаны ниже:
-Основной цикл обновления ЖК-дисплея
-Обновление времени прерываний

В основном цикле считаются обороты и обновления ЖК-дисплея. Поскольку основной цикл это гигантский while(1) цикл, то он будет работать всегда, RPM считаться, а ЖК-дисплей обновляться несколько раз в секунду. Функция в прерывании подсчитывает время между прерываниями ИК, поэтому считать RPM можно в основном цикле.

Помните, что компьютерный вентилятор имеет 7 лопастей, так что это тахометр предназначен для работы только с такими вентиляторами. Если ваш вентилятор или другое устройство дает только 4 импульса за оборот, измените в коде «(time*4)».

Два вентилятора работают на примерно 3000 оборотов в минуту и ​​2600 оборотов в минуту, с погрешностью около + / -100 оборотов в минуту.

Обзор тахометра на Arduino

Вентилятор генерирует импульсы прерывания, а на выходе мы видим RPM. Хотя точность не 100%, а примерно 95%, при стоимости элементов 10$ есть смысл построить этот тахометр на Arduino.

Что теперь делать?

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

Заключение

В целом, я считаю этот проект успешным. Но дело во времени и опыте.. Так или иначе, система работает как задумывалось и достаточно надежно, а мы получили ожидаемый результат. Надеюсь, вам понравилось прочитать эту статью и узнать как сделать свой собственный тахометр на Arduino!

Схема тахометра на основе платы Arduino представлена на следующем рисунке.

Схема содержит плату Arduino Pro Mini, модуль инфракрасного датчика и ЖК дисплей. Плата Arduino управляет всем процессом функционирования устройства: считывание импульса с выхода модуля инфракрасного датчика, вычисление частоты вращения (в оборотах в минуту) и передача значения этой частоты на ЖК дисплей. Инфракрасный датчик используется для обнаружения объекта. Мы можем регулировать чувствительность данного датчика с помощью встроенного в него потенциометра. Модуль инфракрасного датчика состоит из инфракрасного передатчика и фотодиода, который обнаруживает инфракрасные лучи. Инфракрасный передатчик излучает инфракрасные лучи, когда эти лучи падают на поверхность, они отражаются от нее и улавливаются фотодиодом (более подробно об этих процессах можно прочитать в статье про робота, движущегося вдоль линии). Выход фотодиода подключен к компаратору, который сравнивает значение с выхода фотодиода с опорным напряжением и результат сравнения выдает на плату Arduino.

Выход модуля инфракрасного датчика напрямую подключен ко контакту 18 (A4) Arduino. Vcc и GND подсоединены к контактам Vcc и GND arduino. ЖК дсиплей подключен к плате Arduino в 4-битном режиме. Его управляющие контакты RS, RW и En напрямую подсоединены к контактам 2, GND и 3 Arduino. Контакты данных D4-D7 подключены к контактам 4, 5, 6 и 7 Arduino. В схеме также присутствует кнопка, которую необходимо нажать для подсчета числа оборотов. Наш тахометр на основе платы Arduino подсчитывает число оборотов в течение 5 секунд а потом по вышеприведенной формуле осуществляет пересчет этого значения в число оборотов в минуту. Кнопка подключена к контакту 10 Arduino.

Читать еще:  Что такое компенсатор дизельном двигателе

Регулятор оборотов

Понадобился регулятор оборотов коллекторного двигателя. Регулятор оборотов на Ардуино с поддержанием оборотов. Двигатель от стиральной машинки-автомата.

В схеме были сделаны небольшие изменения. Кое что выкинул. Некоторые компоненты заменены другими. Были добавлены 2 аналоговых входа, на них можно повесить датчик температуры и следить за температурой двигателя, и радиатора на котором сидит симистор управляющий двигателем.

Если вы выполняете кратковременные работы, то датчик температуры и не нужен. Ну а если двигатель будет много работать, то неплохо с помощью датчика, Ардуино следило за температурой, и при перегреве отключало двигатель пока тот не остынет.

На этом двигателе уже присутствует тахогенератор, но в моем случае он не работает — вышел из строя. Вместо тахогенератора буду устанавливать датчик холла. Выкидываем катушку нерабочего тахогенератора, оставляем только магнит на валу. Устанавливаю датчик холла на электродвигатель.

Схема регулятора оборотов будет содержать в себе:

  • Ардуино Нано
  • Блок настроек, и управления оборотами
  • Силовая часть
  • Датчика скорости
  • Защита (реле)
  • Дополнительные входы и выходы

Ардуино Нано будет контролировать и управлять силовой частью

  • А0 — регулировка оборотов двигателя
  • А1 — настройка минимальных оборотов двигателя
  • А2 — настройка максимальных оборотов двигателя
  • А3 — выход управления симистором
  • А4 — дополнительный аналоговый вход (не задействован)
  • А5 — выход управления реле
  • А6 — дополнительный аналоговый вход (не задействован)
  • А7 — разгон или плавный старт
  • D2 — сигнал перехода через ноль
  • D4 — дополнительный выход
  • D6, D7 — тахогенератор
  • D8 — датчик холла

Блок настроек, и управления оборотами

Силовая часть будет управлять двигателем. Разъем Р1 — для подключении к сети 220В. Р3 — для установки перемычки в зависимости от блока питания.

При установке блока питания с выходным напряжением 5 вольт, на разъеме Р3 нужно установить перемычку на контакты 2 и 3. При выходном напряжении блока питания 7-12 вольт перемычку устанавливаем на контакты 1 и 2.

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

На выводы 220V0 И 220V1, подается сетевое напряжение 220 Вольт.

Схема будет питаться импульсным блоком питания с выходным напряжением 5 вольт. Импульсный блок питания, возьмём уже готовый. Так же схему можно питать от 7 до 12 вольт. На плате есть перемычка переключения напряжения 5/12v. Так же можно питать схему и зарядным от телефона, только проверьте выходное напряжение, там не должно быть выше 5 вольт.

При установки перемычки на 5 вольт напряжение поступает напрямую на шину +5 вольт. Реле надо будет установить на 5 вольт.

При установки перемычки на 12 вольт напряжение поступает на вход Ардуино Vin. В этом случае можно питать схему напряжением 7-12 вольт. но и реле должно быть на такое напряжение, какое выходит с блока питания.

Датчик скорости в двух исполнения. На тахогенераторе или на датчике холла.

Схема разрабатывалась так, что бы обороты можно было считывать с тахогенератора, уже установленные на двигателях машинок-автоматов. Разъем Р4 служит для подключения тахогенератора.

А так же при отсутствии или неисправности тахогенератора можно заменить на датчик холла.

Реле служит защитой от пробоя симистора. Когда симистор пробивает, двигатель будет выходить на максимальные обороты, и это очень опасно . А что бы этого не случилось, контроллер отслеживает частоту вращения двигателя, и при превышении установленных оборотов реле отключает двигатель. Как обороты упадут ниже нормы, реле включится. Разъем Р7 — для подключения коллекторного электродвигателя.

Дополнительные входы и выходы

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

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

Верхний слой печатной платы

В конце статьи находится архив со всеми файлами для повторения данного проекта

Настройка регулятора

Настройка не сложная, поэтапная, так же можно протестировать все узлы регулятора на правильную работу.

Re: БК для карбюраторного ВАЗ-2109 на Arduino Duemilanove

//#define RPMpin 2;
//#define SPEEDpin 3;
unsigned long microsRPM = 0 ;
unsigned long microsCKOP = 0 ;
int rpm = 0 ;
int ckop = 0 ;
float naprBS = 0 ;
int DRL = 9 ;
int brightness = 0 ;
int fading = 5 ;
void setup () <
Serial . begin ( 19200 );
//digitalWrite(2,1);
//digitalWrite(3,1);
attachInterrupt ( 0 , RPM , FALLING ); //прерывание на 0 порт, на тахометр, на ПАДЕНИЕ напряжения
attachInterrupt ( 1 , CKOP , RISING ); //прерывание на 1 порт, на спидометр, на ПОДНЯТИЕ напряжения
pinMode ( DRL , OUTPUT );
>
void loop () <
Serial . println ( «TAXOMETP» );
Serial . println ( rpm , DEC ); //для проверки, пишем в сериал показание тахометра
Serial . println ( «cnugoMeTp» );
Serial . println ( ckop , DEC ); //для проверки, пишем в сериал показание спидометра
Serial . println ( «HAnP» );
Serial . println ( naprBS ); //для проверки, пишем в сериал напряжение БС
Serial . println ( brightness );
float voltage = analogRead ( 0 );
naprBS = 3.000 * 5.0 / 1024.0 * voltage ;
delay ( 10 );
if ( ckop >( 0 )); <
analogWrite ( DRL , brightness );
brightness = brightness + fading ;
if ( brightness == 255 )
fading = ( 0 ) ;
>
/*if (digitalRead(7)!=1); <
analogWrite(DRL, brightness);
brightness = brightness — fading;
if (brightness == 0)
fading = (0);>*/
>
/* модуль тахометра*/
void RPM () <
rpm = ( 1000000.0 /( micros ()- microsRPM ))* 60 ; //вычисляем обороты для тахометра
microsRPM = micros (); //приравнивание старого значения времени к новому
>
/*модуль спидометра. вычитать из спецификации
датчика спидометра отношение импульсов к пройденному пути!!*/

Читать еще:  Янмар дизельный двигатель характеристики

void CKOP () <
ckop = (( 1000000.0 /(( micros ()- microsCKOP )* 6 ))* 60 * 60 * 0.00105 ); //вычисляем скорость, по датчику ХОЛЛА спидометра, ДЕЛИТЕЛЬ менять!
microsCKOP = micros (); //приравниваем старое значение на новое
//delay(10);
>

вот то что я написал, пока в протеусе эмуляция вроде работает.
если что не так с кодом, прошу подсказать так как я только начинающий

Последний раз редактировалось hoster; 12.11.2012 в 15:52 .

JonRB

Матовый DC машина может быть смоделирована как

  1. источник напряжения
  2. индуктивность обмотки статора
  3. сопротивление обмотки статора

Источник напряжения будет иметь напряжение, пропорциональное скорости ротора, K e » role=»presentation» style=»position: relative;»> К K e » role=»presentation» style=»position: relative;»> K e » role=»presentation» style=»position: relative;»> е K e » role=»presentation» style=»position: relative;»> K e » role=»presentation» style=»position: relative;»> К K e » role=»presentation» style=»position: relative;»> е постоянная напряжения: Вольт на об / мин (или в зависимости от таблицы). Чем быстрее вращается ротор, тем выше это значение.

В равной степени будет напряжение из-за тока, протекающего через сопротивление, и одинаково изменяющийся ток вызовет напряжение на индуктивности.

Более высокая нагрузка -> больше ток потребления -> больше дополнительного напряжения из-за R.

Пока нагрузка и скорость считаются постоянными (возможно, нет . ) и пока частота ШИМ достаточно высока, вклад L можно игнорировать.

Все это можно измерить на клеммах двигателя.

Как использовать ШИМ для определения скорости? Минимальным условием является знание K e » role=»presentation» style=»position: relative;»> К K e » role=»presentation» style=»position: relative;»> K e » role=»presentation» style=»position: relative;»> е K e » role=»presentation» style=»position: relative;»> K e » role=»presentation» style=»position: relative;»> К K e » role=»presentation» style=»position: relative;»> е двигателя в использовании.

Если двигатель НЕ РАЗГРУЖЕН, и вы просто запитываете его с фиксированной нагрузкой ШИМ, скорость ротора можно оценить с помощью:

ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> ω = V ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> с с ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> ∗ D ∗ K ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> е ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> ω ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> знак равно ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> В ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> с ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> с ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> * ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> D ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> * ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> К ω = V c c ∗ D ∗ K e » role=»presentation» style=»position: relative;»> е

V c c » role=»presentation» style=»position: relative;»> В V c c » role=»presentation» style=»position: relative;»> V c c » role=»presentation» style=»position: relative;»> с с V c c » role=»presentation» style=»position: relative;»> V c c » role=»presentation» style=»position: relative;»> В V c c » role=»presentation» style=»position: relative;»> с V c c » role=»presentation» style=»position: relative;»> с будучи напряжением ШИМ на статор двигателя

D является фиксированной пошлиной

K e » role=»presentation» style=»position: relative;»> К K e » role=»presentation» style=»position: relative;»> K e » role=»presentation» style=»position: relative;»> е K e » role=»presentation» style=»position: relative;»> K e » role=»presentation» style=»position: relative;»> К K e » role=»presentation» style=»position: relative;»> е являясь константой backEMF в V / ω » role=»presentation» style=»position: relative;»> В V / ω » role=»presentation» style=»position: relative;»> V / ω » role=»presentation» style=»position: relative;»> / ω V / ω » role=»presentation» style=»position: relative;»> V / ω » role=»presentation» style=»position: relative;»> В V / ω » role=»presentation» style=»position: relative;»> / V / ω » role=»presentation» style=»position: relative;»> ω

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

Затем вы можете сэмплировать это время в течение периода выключения ШИМ, чтобы знать напряжение на клеммах двигателя.

Сколько вы тогда компенсируете за iR (считывание тока или игнорирование при разгрузке) или за wL (можно ли утверждать, что он незначителен для машины DC?), Зависит от ваших системных соображений.

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector