цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

Автор: Mike(admin) от 25-02-2016, 11:25

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


Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

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


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


Схема


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


Далее идет микросхема сдвоенного компаратора LM393 (IC1), настроенная в качестве простого триггера Шмита. Зелёный светодиод (LED1) показывает наличие приложенного к схеме напряжения, а красный светодиод (LED2) контролирует выход модуля датчика скорости двигателя. Рекомендуемое рабочее напряжение модуля составляет от 4.5 до 5.5 В.


Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

Обратите внимание, что резистор R1 (180 Ом) используется здесь для ограничения рабочего тока светодиода внутри оптического датчика OS25B10 (OC1). При необходимости вы можете изменить его номинал для вашего прототипа. Также вы можете подкорректировать значение резистора R2 (10 КОм) для получения необходимого напряжения для вашей схемы. Резистор R7 (10 КОм) является опциональным подтягивающим резистором.


Энкодерный диск


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


Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

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


Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

Подключение и код


Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

Подключение:
Arduino и модуль фотоимпульсного датчика скорости вращения двигателя

Код:



int encoder_pin = 2; // импульсные сигналы от модуля
unsigned int rpm; // количество оборотов в минуту
volatile byte pulses; // количество импульсов
unsigned long timeold;
// количество импульсов на оборот
// в зависимости от вашего энкодерного диска
unsigned int pulsesperturn = 12;
void counter()
{
   //обновление счета импульсов
   pulses++;
}
void setup()
{
   Serial.begin(9600);
   pinMode(encoder_pin, INPUT);
   //Прерывание 0 на цифровой линии 2
   //Срабатывание триггера по спаду сигнала
   attachInterrupt(0, counter, FALLING);
   // Инициализация
   pulses = 0;
   rpm = 0;
   timeold = 0;
}
void loop()
{
   if (millis() - timeold >= 1000) {
      //Не обрабатывать прерывания во время счёта
      detachInterrupt(0);
      rpm = (60 * 1000 / pulsesperturn )/ (millis() - timeold)* pulses;
      timeold = millis();
      pulses = 0;
      Serial.print("RPM = ");
      Serial.println(rpm,DEC);
      //Перезагрузка процесса обработки прерываний
      attachInterrupt(0, counter, FALLING);
   }
}



Перевод © digitrode.ru


<Via>


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий