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

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

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 74. Регулировка скорости вращения двигателя без обратной связи. Измерение периода и частоты сигналов с помощью Ардуино.

Продолжение разработки ПИД-регулятора скорости вращения двигателя постоянного тока. В уроке запустим двигатель без обратной связи. Научимся измерять временные параметры импульсов дискретного сигнала.

Попробуем управлять двигателем только с помощью ШИМ, не используя датчик оборотов.

Регулировка скорости вращения двигателя без обратной связи.

Я написал простую программу, которая формирует ШИМ пропорциональный напряжению на входе A0.

  • Измеряет напряжение сигнала на входе A0.
  • Усредняет его для защиты от помех.
  • Формирует ШИМ с коэффициентом заполнения пропорциональным среднему напряжению на выводе A0.
  • При формировании ШИМ учитывает “мертвое время”.
  • Выводит значение ШИМ в последовательный порт для контроля.

Вот скетч программы:

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

Поясню, что такое “мертвое время”. Допустим, ШИМ работает с высокой частотой, например, 62,5 кГц. Если мы зададим ему коэффициент заполнения 1, то это означает, что с периодом 16 мкс будет формироваться импульс длительностью 0,0625 мкс. Импульс такой короткой длительности транзисторный ключ не отработает, не успеет. В результате транзистор будет какое-то время в полуоткрытом режиме и не к чему хорошему это не приведет. Особенно на высоком напряжении.

Поэтому необходимо искусственно ограничивать импульсы минимальной длины. Если значение 1 транзистор не способен отработать, значит, вместо него необходимо формировать 0. Тоже самое в конце диапазона ШИМ. Например, значение 254 необходимо заменить на 255.

Отработку ”мертвого времени» производит следующий блок программы.

#define DEAD_TIME 10 // мертвое время

// мертвое время
if( valPwm
if( valPwm > (MAX_PWM — DEAD_TIME) ) valPwm= MAX_PWM;

Если значение ШИМ меньше заданного, оно заменяется на 0. Если больше, то оно равно максимальному значению ШИМ.

В программе в определенных пределах можно изменять частоту периода ШИМ.

TCCR2B= 1; // 62 500 Гц
//TCCR2B= 2; // 7 812 Гц
// TCCR2B= 3; // 1 953 Гц
// TCCR2B= 4; // 977 Гц
// TCCR2B= 5; // 488 Гц
// TCCR2B= 6; // 244 Гц
// TCCR2B= 7; // 61 Гц

Для формирования ШИМ используется таймер 2 и вывод 11.

Можно переключиться на вывод 3. Изменения коснутся только строки.

Использование других выводов недопустимо.

Загружаем скетч в контроллер, открываем монитор последовательного порта.

Вращаю переменный резистор, подключенный к входу A0. Монитор показывает изменение ШИМ. В положении резистора от 0 до максимума ШИМ равен 0, затем скачком меняется до 10. Дальше плавное изменение до 245 и скачок до 255. Т.е. заданное ”мертвое время” 10 отрабатывается правильно.

Дальше подключаем к схеме питание 12 В и проверяем работу ключа с мотором-вентилятором. Я проверил для разных частот ШИМ. Как не странно, лучше всего работает на низких частотах 244 и 61 Гц. Мотор начинает вращаться с ШИМ равным 30. На частоте 62,5 кГц вентилятор начинает вращаться при значении ШИМ 60. На средних частотах он еще противно пищит.

Когда Игорь проводил эти испытания на мощном двигателе 500 Вт, он категорично выбрал высокую частоту 62,5 кГц. На высоких частотах его двигатель вращается равномерно, без вибраций. Тише работает, начинает крутиться с меньшего значения ШИМ. Т.е. для каждого двигателя лучше выбирать частоту ШИМ экспериментально.

В любом случае регулировка с помощью ШИМ без обратной связи работает, скорость двигателя изменяется плавно. Конечно, частота оборотов непредсказуема и зависит от механической нагрузки.

Измерение периода и частоты входных импульсов с помощью Ардуино.

Чтобы стабилизировать скорость вращения мотора необходимо ее измерять. А скорость в свою очередь определяется частотой импульсов датчика Холла. Об этом сказано в предыдущем уроке. Как следствие возникает задача – измерение периода и частоты импульсов. Давайте на короткое время забудем про двигатель и научимся измерять частоту импульсов дискретного сигнала.

Задача не очень простая. Скорость вращения мотора у Игоря достигает 12000 об/мин. При такой скорости и использовании с датчиком Холла двух магнитов надо измерять временные параметры с периодом 2,5 мс. Если мы хотим обеспечить точность не более 1%, то разрешающая способность измерителя должна быть не более 250 мкс.

Но бывают и более скоростные двигатели. Часто используются датчики, которые формируют более 2 импульсов на оборот. Это еще уменьшает время дискретности измерителя.

А с другой стороны двигатель может вращаться и со скоростью 60 об/мин. Это соответствует периоду импульсов 0,5 сек.

  • наш измеритель должен иметь высокую разрешающую способность по времени (не более десятков мкс)
  • и широкий диапазон измерения (не менее 1 сек).

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

Поэтому будем использовать аппаратный узел микроконтроллера – таймер в режиме захвата. У микроконтроллера ATmega328 только таймер 1 может работать в этом режиме.

Лучше будет, если вы почитаете об этом режиме в документации на ATmega328. Я расскажу коротко и чисто с практической точки зрения.

Входной сигнал подключаем к входу ICP1 (вывод 8). Использование других выводов недопустимо.

Микроконтроллер выделяет нужный фронт сигнала на входе ICP1 (я задал перепад с высокого уровня на низкий) и по нему перегружает содержимое таймера 1 в специальный регистр ICR1. Можно считать значение этого регистра и тем самым узнать, когда был перепад входного сигнала, даже если чтение произошло позже самого события.

Дальше немного сложно в понимании, но объем информации небольшой. При желании можно разобраться по шагам.

Мы задаем режим работы таймера 1. Переводим его в режим простого счетчика от внутреннего генератора с максимальной частотой. В этом режиме каждые 0,0625 мкс к счетчику прибавляется 1. При достижении максимального значения 65536, он начинает считать с 0. Также задаем режимы для захвата и разрешаем прерывания таймера 1 по захвату и переполнению.

// установка режима захвата таймера 1
pinMode (8, INPUT_PULLUP); // вход сигнала захвата ICP, входные измеряемые импульсы
TCCR1A = 0; // нормальный режим работы таймера 1
TCCR1B = 0; // выбор отрицательного фронта входного сигнала
TCCR1B = (1 включение подавления шума входного сигнала, частота тактирования — внутренний генератор, без деления
TCNT1 = 0; // сброс счетчика
TIMSK1 = (1 разрешения прерываний таймера 1 по захвату и переполнению

Создаем обработчик прерывания по захвату (фронту входного сигнала).

// прерывание по сигналу захват (по отрицательному фронту измеряемого сигнала)
ISR (TIMER1_CAPT_vect) <
periodTime = (unsigned long)ICR1 | (((unsigned long)numOverflowTimer1)
TCNT1 -= ICR1;
numOverflowTimer1 = 0;
>

В нем мы считываем значение регистра ICR1 и сохраняем его в переменной periodTime .

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

Что равносильно сбросу в 0 в момент захвата.

В результате вышеописанных действий в переменной periodTime оказывается время между захватами. Т.е. время между отрицательными фронтами входного сигнала. Реальное время будет равно значению periodTime , умноженному на дискретность таймера 0,0625 мкс.

Все было бы хорошо, но при периоде сигнала более 4096 мкс ( 65536 * 0,0625 мкс) таймер 1 переполнится. Значит, нам надо считать еще и переполнения таймера 1.

Для этого создаем обработчик прерываний по переполнению таймера.

// прерывание по переполнению таймера 1
ISR (TIMER1_OVF_vect) <
numOverflowTimer1++;
>

И полученное значение прибавляем к periodTime.

periodTime = (unsigned long)ICR1 | (((unsigned long)numOverflowTimer1)

Теперь все. В переменной periodTime получаем период входных импульсов. Для вычисления реального времени необходимо умножить его на 0,0625 мкс.

Пишем программу измерения временных параметров входного сигнала и проверяем ее работу.

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

Для проверки формируем на выводе 5 сигнал ШИМ с частотой 976,56 Гц.

analogWrite(5, 200); // формирование тестовых импульсов на выводе 5 (976,56 Гц)

Соединяем вывод 8 с выводом 5. Запускаем монитор последовательного порта.

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

Надо проверить работу нашего измерителя в полном диапазоне.

Для этого тестовый сигнал на выводе 5 формируем с помощью системного времени Ардуино.

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

Период задается в строке.

#define TEST_TIME 10 // время периода тестового сигнала (мс)

Проверяем для периода 10 мс.

Вот период 100 мс

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

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

В следующем уроке вернемся к двигателю. Будем измерять его скорость вращения.

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 73. ПИД-регулятор скорости вращения двигателя постоянного тока. Разработка аппаратной части.

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

Игорь из Москвы заказал мне разработку контроллера- регулятора скорости вращения двигателя постоянного тока.

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

Используется коллекторный двигатель постоянного тока мощностью 500 Вт и номинальным напряжением 100 В. Необходимо задавать и стабилизировать его скорость вращения.

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

Должен получиться учебный материал на несколько разных тем:

  • аппаратное подключение двигателя постоянного тока к Ардуино;
  • измерение частоты и периода сигнала ;
  • управление нагрузкой с помощью ШИМ;
  • ПИД-регулятор;
  • этапы разработки подобных устройств.

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

У Игоря используется достаточно мощный мотор 500 Вт, с номинальным напряжением питания 100 В. У меня такого двигателя нет. Поэтому я проведу разработку и испытания на компьютерном вентиляторе с номинальным напряжением 12 В. Не сомневаюсь, что все написанное и разработанное будет справедливо и для гораздо более мощных устройств. По крайней мере, Игорь проверит контроллер на 500 ваттном моторе.

Аппаратное подключение двигателя постоянного тока к Ардуино.

Существуют две основные задачи:

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

Сошлюсь на Урок 39, раздел ”Общие сведения о регуляторах”. Там написано, что необходимо выделить:

  • регулируемый параметр – что мы регулируем;
  • регулирующий элемент – с помощью чего мы регулируем.

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

Подключение двигателя к ШИМ Arduino.

Естественно для управления двигателем будем использовать ШИМ. Это значительно упростит схему, повысит КПД. Практически, независимо от мощности и напряжения мотора, для управления им достаточно одного ключа. Конечно, передельно-допустимые параметры ключа должны соответствовать двигателю. Для моего двигателя-вентилятора я выбрал такие элементы.

ШИМ с выхода Ардуино открывает и закрывает ключ, собранный на MOSFET-транзисторе. Можно, конечно, использовать и биполярный транзистор, но:

  • полевым проще управлять;
  • у него меньше падение напряжения в открытом состоянии, а значит он меньше греется;
  • в отличие от биполярного транзистора, он работает на высоких частотах 100 кГц и выше.

Я выбрал MOSFET-транзистор IRF7341: N-канал, 55 В, 4 А. Кроме предельно-допустимых параметров необходимо учитывать то, что транзистор должен быть низкопороговым, т.е. открываться при небольшом напряжении (не более 5 В). Иначе необходимо использовать дополнительный элемент – драйвер.

Диод в схеме абсолютно необходим. Двигатель – это индуктивная нагрузка, а иногда и электрогенератор. Поэтому при закрытии транзистора на выводах двигателя могут возникать броски высокого напряжения. Они должны замыкаться через диод, чтобы не сжечь транзистор.

В некоторых подобных схемах используют низкочастотные выпрямительные диоды, например, 1N4007. Это допустимо только для дискретного управления двигателем: включить или выключить. При управлении с помощью ШИМ, особенно с высокой частотой, диод должен быть высокочастотным, лучше с барьером Шоттки.

При закрытом транзисторе диод находится в открытом состоянии, через него течет ток размагничивания обмотки двигателя. Затем транзистор открывается. А диод закрывается только через время восстановления обратного сопротивления. Даже у “быстрых” (FR307) диодов это время составляет 150-500 нс, у “супербыстрых” 35 нс, а у выпрямительных 1N4007 этот параметр не нормируется. Представьте себе, что при частоте ШИМ 100 кГц 100000 раз в секунду будет происходить короткое замыкание. Это приведет к жутким помехам, уменьшению КПД и нагреву диода и транзистора.

При высоком напряжении все значительно усугубиться. В общем рекомендации по выбору диода:

  • Лучше всего диод Шоттки.
  • Если высокое напряжение (более 150 В) не позволяет использовать диод Шоттки, то лучшим вариантом будет карбидокремиевые диоды Шоттки.
  • Следующим приемлемым вариантом могут быть HEXFRED-диоды с ограничением обратного тока обратного восстановления;
  • На крайний случай остаются супербыстрые и ультрабыстрые диоды.

У меня напряжение всего 12 В. Я выбрал диод Шоттки SS16.

Наверное, понятно, что меняя коэффициент заполнения ШИМ, мы будем изменять среднее напряжения на двигателе, я значит, и его мощность. Частоту ШИМ определим экспериментально.

Измерение скорости вращения.

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

Конструкции измерителей скорости могут быть самыми разными. Можно закрепить на валу двигателя металлический диск с радиальными прорезями и использовать автомобильный датчик Холла.

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

Я поступил проще. Использовал дешевый, миниатюрный датчик Холла TLE4905L. В самых дорогих магазинах он стоит до 50 руб, а на АлиЭкспресс от 25 руб.

Это цифровой датчик Холла, настроенный на определенный порог магнитного поля. Он прекрасно срабатывает на расстоянии 8 мм от миниатюрного магнита диаметром 5 мм и толщиной 1 мм.

Конструкция измерителя очевидна. Я приклеил 2 магнита к диску вентилятора и над линией, по которой они двигаются при вращении, расположил датчик Холла.

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

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

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

Подключение датчика необходимо производить отдельными проводами. Все связи должны соединяться непосредственно на плате Ардуино. С точки зрения помехозащищенности это самое узкое место в системе.

Для задания скорости будем использовать переменный резистор. Подключим его к аналоговому входу платы Ардуино. Добавим еще сигнал включения/выключения двигателя и выход для тестовых импульсов. С помощью него будем проверять работу устройства без мотора.

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

В реальных приложениях обороты можно задавать напряжением на аналоговом входе A0. Получится стандартный аналоговый интерфейс 0…5 В. Если необходим диапазон 0…10 В, то достаточно добавить резисторный делитель напряжения.

Состояние контроллера для отладки ПИД-регулятора будем передавать на компьютер через последовательный порт. Я разработаю программу верхнего уровня с регистрацией данных и отображением их в графическом виде. Регистратор значительно облегчает настройку любого ПИД-регулятора.

В следующем уроке начнем “оживлять” контроллер.

МОДУЛИ СЧИТЫВАНИЯ УГЛОВОЙ СКОРОСТИ (ЭНКОДЕРЫ) ДЛЯ ARDUINO

Модуль считывания угловых скоростей используется для считывания числа оборотов двигателя робота. Обычно это необходимо знать при движения робота по заданной программе. Например: по нашей программе роботу нужно проехать 2 метра и повернуть налево, считаем что у робота 2 одинаковых колеса с 3-ей шаровой опорой как у тележки Lego и они равны диаметру D = 5 см. Вычисляем длину окружности колеса = P x D = 3,14 х 5 = 15,7 см; Вычисляем сколько оборотов должны сделать двигатели робота чтобы он проехал 2 метра = 200 : 15,7 = 12,7 оборотов. Включаем в программе двигатели, а по энкодеру в программе определяем сколько двигатели сделали оборотов, как только их станет 12,7 то двигатели отключаем и для поворота в зависимости от угла и направления поворота подсчитываем количество оборотов одного из колес робота.

Модуль считывания угловых скоростей для моделей роботов FC-03 или энкодер — это небольшая печатная плата с установленными на ней микросхемой LM393, а также несколькими другими электронными компонентами.

FC-03 модуль считывания угловых скоростей называют ещё датчиком оборотов или энкодером. Название происходит от принципа работы датчика.
Используется энкодер для определения скорости двигателя, подсчета импульсов. Датчик оборотов FC-03 снабжен специальным штырьковым разъемом (типа «папа») для подключения к плате микроконтроллера Arduino, AVR, ARM или д.р.

Модуль считывания угловых скоростей, созданный на основе двойного компаратора LM393 и щелевого датчика предназначен для совместного использования со специальными дисками, которые одеваются на вал редуктора или электродвигателя. Таким образом, микроконтроллер получает информацию непосредственно от энкодера о количестве оборотов, проделанных двигателем, и так определяется его скорость.

Диски одеваются на вал редуктора или электродвигателя, чтобы микроконтроллер получал информацию непосредственно от энкодера о количестве оборотов проделанных двигателем.

Рис.1 Щелевой датчик ITR9608

Принцип действия

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

Датчик скорости вращения FC-03 используется для измерения частоты вращения. Определить с его помощью направление вращения нельзя. На валу двигателя или шестерни редуктора устанавливается диск с отверстиями. Оптопара модуля имеет прорезь шириной 5 мм. При вращении диска, как изображено на анимации, постоянно в прорези чередуются отверстия и участки пластины. Датчик преобразует чередование элементов диска в электрические импульсы. Электроника модуля делает сигнал датчика пригодным для восприятия цифровыми логическими микросхемами или микроконтроллером.

Принципиальная схема энкодера FC-03:


Рис. 2

Датчик скорости вращения

  • Описание

Датчик скорости вращения FC -03

Модуль датчика скорости вращения или линейного перемещения. Тип модуля FC-03. Он предназначен для контроля механических параметров движущихся частей различных механизмов бытового и обучающего назначения. При установке в базовые платформы малой робототехники позволяет собирать системы управления двигателями и наладить управление движением объекта.

Установка датчика скорости вращения FC-03 на шасси колесного робота.

Характеристики

Питание 3,3 – 5 В
Ширина просвета для диска с прорезями 5 мм
Размеры модуля 38 x 14 x 7 мм
Крепежное отверстие под винт 3 мм

Контакты FC-03

Контакты промаркированы на плате.

VCC – питание.
GND – общий провод, отрицательный полюс питания.
DO – выход импульсного сигнала.
AO – непосредственный выход от оптопары ITR9608.

Принцип действия


Щелевой датчик ITR9608

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

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

Датчик скорости вращения FC-03 используется для измерения частоты вращения. Определить с его помощью направление вращения нельзя. На валу двигателя или шестерни редуктора устанавливается диск с отверстиями. Оптопара модуля имеет прорезь шириной 5 мм. При вращении диска, как изображено на анимации, постоянно в прорези чередуются отверстия и участки пластины. Датчик преобразует чередование элементов диска в электрические импульсы. Электроника модуля делает сигнал датчика пригодным для восприятия цифровыми логическими микросхемами или микроконтроллером.


Сигнал от ITR9608 поступает на вход компаратора LM393, с его выхода на контакт D0 и индикаторный светодиод поступает цифровой сигнал состоящий из высоких и низких логических уровней. На выход A0 сигнал идет непосредственно от ITR9608 без преобразования в логические уровни. Применение компаратора LM393 позволяет получить ровные фронты импульсов и немного увеличить токовую нагрузку выхода датчика, установить в схеме светодиод показывающий состояние выхода.

Индикация

На плате распложено 2 светодиода. Один показывает включение датчика скорости вращения FC-03, другой отсутствие преграды в датчике. При первом ознакомительном включении оба светодиода должны светиться. При внесении металлической пластины в свободное пространство прерывателя один светодиод должен погаснуть.

Применение

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


При вращении диска известное количество отверстий пересекает щель датчика за один оборот. Подсчитывая количество отверстий можно определить 1 оборот колеса или, например 15,5 оборотов. Измеряя количество оборотов в единицу времени, мы получаем частоту вращения колеса, а отсюда скорость движения объекта. Опираясь на сигналы от датчика и имея точное значение временных интервалов, прибор вычисляет параметры движения. Здесь актуально использование микроконтроллера.
Следующая программа для Arduino позволяет определить количество оборотов в минуту и выдает результаты в окно последовательного терминала.

#define PIN_DO 2 // Установка контакта используемого в Arduino
volatile unsigned int pulses;
float rpm;
unsigned long timeOld;
#define HOLES_DISC 15

void setup()
<
Serial.begin(9600);
pinMode(PIN_DO, INPUT);
pulses = 0;
timeOld = 0;
attachInterrupt(digitalPinToInterrupt(PIN_DO), counter, FALLING);
>

void loop()
<
if (millis() — timeOld >= 1000)
<
detachInterrupt(digitalPinToInterrupt(PIN_DO));
rpm = (pulses * 60) / (HOLES_DISC);
Serial.println(rpm);

timeOld = millis();
pulses = 0;
attachInterrupt(digitalPinToInterrupt(PIN_DO), counter, FALLING);
>
>

Читать еще:  Что такое испытания асинхронный двигатель
Ссылка на основную публикацию
Adblock
detector