ИК датчик в счетчике оборотов двигателя

  • Цена: $0.37 + $0.72 доставка

Для станка ЧПУ приобрел мотор шпиндель с регулировкой оборотов.
Радиолюбительский зуд не давал покоя — захотелось иметь на станочке показометр оборотов. Вариант с оптическим энкодером показался слишком сложным. Датчика холла, который применяется во всех автомобилях, не было под рукой. И тут на одном форуме подкинули идейку — попробовать ИК сенсор. Как раз без дела лежал ИК датчик препятствий, который не знал куда применить. Решил его попробовать — результат под катом.

Данный модуль применяется в основном в ардуинщиками в роботостроительстве как ИК датчик препятствия. Представляет маленькую очень бюджетную платку (особенно если покупать партиями штук по 10)

Схема у этого сенсора очень простая

В основе лежит ИК пара диод-транзистор. Что вроде L-53P3C/L-53F3C работающие в диапазоне 940нм
Компаратор LM393 сравнивает уровень фоторанзистора с уровнем, выставляемым подстроечным резистором.
Подцепил к валу шпинделя кусочек фольги, поднес сенсор к валу, покрутил подстроечник — модуль стал моргать светодиодом в так вращения.

Поковырявшись в своей барахолке нашел ATmega328 в DIP корпусе и четырехразрядный семисегментный индикатор
Максимальная скорость вращения у мотора 12000RPM и лучше было бы применить 5-разрядный индикатор, но будем работать с чем имеем
Накидал такую схему

Порядок подключения выводов индикатора к микроконтроллеру значения не имеет (так как настраивается в программе) и обусловлен исключительно из удобства проектирования печатной платы

«Квадратный» дизайн платы потому что на данном этапе я осваивал изготовление печатных плат на станке ЧПУ
Закругленные полигоны сложнее, а главное, дольше выбирать гравировкой.
Основным достоинством изготовления плат на станке является то, что весь процесс происходит не отрывая зада от кресла. С покупкой ламинатора я отказался от этого метода, оставив для станка сверление отверстий и обрезку плат.
Итак гравируем, сверлим, режем



И вот можно отлаживать готовую плату

Сразу делаю корпус из обрезков ПВХ пластика









Для работы индикатора применяется простая и удобная библиотека SevSeg, позволяющая подключать индикатор к каким угодно выводам МК, применять индикаторы как с общим катодом, так и анодом да еще и яркостью управлять.
Для измерения частоты попробовал библиотеку FreqMeasur. МК с ней отлично мерит сигнал с генератора от 10 до 200Гц (а больше мне и не нужно)




А вот когда на вход контроллера подал с сигнал с сенсора, результат получился плачевным.
Частота прыгала как ненормальная. Виной этому оказался «дребезг» сигнала с оптического датчика. Фольга давала массу помех. Попытка настроить сигнал подстроечником или заменить кусочек фольки на другой не дали ощутимого результата.
Тогда я решил давить «дребезг» программно. Осциллограф показал, что помехами являются импульсы в 0.3 — 1 мкс, тогда как сигнал — это импульсы 5мс (При частоте 12000RPM) и больше.
В результате родилась такая программка с подавлением помех длительностью менее 2мкс

// Библиотека работы с 7-сегментным индикатором
// https://github.com/sparkfun/SevSeg
#include <mSevSeg.h>

SevSeg myDisplay;
byte displayType = COMMON_CATHODE; //Your display is either common cathode or common anode

byte digit1 = 18; 
byte digit2 = 19; 
byte digit3 = 8; 
byte digit4 = 10; 

byte segA   = 17; 
byte segB   = 9; 
byte segC   = 12; 
byte segD   = 14;      
byte segE   = 15; 
byte segF   = 16; 
byte segG   = 13; 
byte segDP  = 11; 
byte numberOfDigits = 4;     

int  dot       = 0;
uint32_t ms, ms1 = 0, ms0 = 0, ms2 = 9;
uint32_t rps = 0;
uint32_t count = 0;
char buf[10];

void setup(){
// Инициализация индикатора
    myDisplay.Begin(displayType, numberOfDigits, digit1, digit2, digit3, digit4, segA, segB, segC, segD, segE, segF, segG, segDP);     
    myDisplay.SetBrightness(100); 
    myDisplay.DisplayString("----", 0); 
// Инициализация входа для счета импульсов   
   attachInterrupt(0, pulseCount, RISING);   
}


void loop(){
    ms = millis();
    char s[10];
    uint16_t rpm = 0;
// Перевыдача дисплея    
    myDisplay.DisplayString(buf, dot);  
// Каждую секунду перевыдаем значение скорости 
    if( ms2 == 0 || ms2 > ms || ( ms - ms2 )>1000 ){
      ms2 = ms;
// Переводим в коичество оборотов в минуту      
      rpm = rps*60;
// Отображение 10=тичной точки, сли число больше 4-х разрядов      
      if( rpm > 9999 ){
         dot = 2;
         sprintf(buf,"%4d",rpm/10);
      }
      else{
         dot = 0;
         sprintf(buf,"%4d",rpm);
      }
      rps = 0;          
   }    
}

/**
 * Счетчик импульсов
 */
void pulseCount(){
   uint32_t ms = micros();
// Убираем импулься менее 2 мс (дребезг)   
   if( ms - ms0 > 2000 )count++;
   ms0 = ms;
// 0.5 сек цикл подсчета импульсов   
   if( ms - ms1 > 500000 ){
      ms1   = ms;
      rps   = count*2;
      count = 0;
   }
}

Программа показала 100% результат с тестового генератора. При включенном моторе с сенсора показывались стабильные обороты, которые хорошо коррелировали с режимом работы мотора. На том и остановимчя





Еще одна проблема нартсовалась при выборе места установки счетчика на станок.
В длинных проводах наводились сильные помехи от мотора и БП и индикатор, отлично работавший «на коленках» никак не хотел работать на станке. В результате смонтировал контроллер в непосредственной близости от сенсора и запитал его через импульсный DC-DC преобразователь от 24В. (Напряжения для шаговиков, подсветки, вентиляторов охлаждения).




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

Пока собирал станок, приехали 5-ти разрядные индикаторы. Хотел переделать измеритель скорости вращения на них с более компактным Atmega8 в TQFP32. Но потом решил, что лучшее — враг хорошего.
А индикаторы пошли в другой проект - индикатор для любого Sonoff с управлением по UART





Но это уже другая история


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

Кот за любой кипишь кроме голодовки )))

Планирую купить +38 Добавить в избранное +51 +84
+
avatar
  • Aslan54
  • 15 сентября 2017, 06:08
0
Ну и что выяснили с помощью счетчика по оборотам под нагрузкой?

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

Тогда бы каждый знал какой именно шпиндель ему лучше покупать.
А то у нас набоум покупают самый мощный. ;)
+
avatar
  • sav13
  • 15 сентября 2017, 09:33
0
Обороты под «нагрузкой» не плавают. Это я в предыдущем обзоре написал
Но больше фанеры 6мм на скорости 200мм/мин за один проход пока не загружал

В принципе у шпинделя есть характеристики — мощность, обороты, крутящийся момент
А дальше все решается материалом, фрезой и скоростью подачи. Тут, мне кажется, у каждого свой опыт, сформированный загубленным заготовками и поломанными фрезами
+
avatar
0
Но это уже другая история
Интересно, нафига выключателю 5-ти разрядный индикатор?
+
avatar
  • dio45rus
  • 15 сентября 2017, 06:37
+1
Счётчик включений, например.
+
avatar
0
Зачем?
+
avatar
  • dio45rus
  • 15 сентября 2017, 09:33
0
Хочу! Это не противозаконно!
+
avatar
-7
+
avatar
  • sav13
  • 15 сентября 2017, 09:35
+1
У Sonoff серии не только выключатели
Есть доп. датчики температуры/влажности (можно и другие туда подключить), счетчики электроэнергии и прочее
Влажность мне удобно отображать «100.0%»
+
avatar
0
Примерная фотография была с выключателем.
+
avatar
  • sav13
  • 15 сентября 2017, 09:59
0
Это ведь не значит, что там не работает моя прошивка и не отображает кучу данных с MQTT сервера и интернета?
+
avatar
0
Т.е., индикация каких-либо параметров будет на модуле выключателя?
+
avatar
  • sav13
  • 15 сентября 2017, 10:58
0
Да.
Если сценарий работы выключателя связан с другим модулем
+
avatar
0
Значит, выключатель должен стоять на видном месте. Достаточное специфичное применение.
+
avatar
  • ksiman
  • 15 сентября 2017, 06:38
0
Осциллограф показал, что помехами являются импульсы в 0.3 — 1 мкс
Странно, C2 должен давить эти помехи аппаратно. Видимо его ёмкость слишком мала
+
avatar
  • sav13
  • 15 сентября 2017, 07:23
0
10к*0.1мкФ получается около 1 мс
Кондер может и меньше стоять
+
avatar
  • ksiman
  • 15 сентября 2017, 08:12
0
Он наверняка меньше и стоит. Скорее всего 1nF
+
avatar
  • dio45rus
  • 15 сентября 2017, 06:38
+3
В длинных проводах наводились сильные помехи от мотора и БП и индикатор, отлично работавший «на коленках» никак не хотел работать на станке.
А экранированный проводок бросить?
+
avatar
  • ksiman
  • 15 сентября 2017, 06:46
+1
Саму плату с оптикой тоже неплохо-бы экранировать
+
avatar
  • ksiman
  • 15 сентября 2017, 06:39
+2
Максимальная скорость вращения у мотора 12000RPM и лучше было бы применить 5-разрядный индикатор
Можно в диапазоне 10000-19999 отбрасывать старший разряд и например зажигать все точки
+
avatar
  • sav13
  • 15 сентября 2017, 09:39
+1
зачем все
Я зажигаю точку декадного делителя:
12000 = 12.00 — типа 12К RPM
+
avatar
  • kalobyte
  • 15 сентября 2017, 06:58
0
а в самом бп для шпинделя часом нет выхода на счетчик?
+
avatar
  • vasilio
  • 15 сентября 2017, 07:00
+5
Датчика холла, который применяется во всех автомобилях, не было под рукой
Да был он у вас под рукой.
В любом кулере есть такой датчик внутри.
+
avatar
  • Kartus
  • 15 сентября 2017, 08:02
0
В любом кулере есть такой датчик внутри.
Все кулеры при деле)))
+
avatar
0
Может не проснулся ещё, но не понимаю… тест-сигнал 10Гц — 600 оборотов, 100 — 6000… 200 -12к… А почему так?
+
avatar
  • ksiman
  • 15 сентября 2017, 08:14
+1
А почему так?
В одной минуте 60 секунд
+
avatar
  • kn_dima
  • 15 сентября 2017, 08:42
-1
стандартной единицей измерения является количество оборотов в минуту.
Герцы — это у радистов :)
+
avatar
  • mikuni
  • 15 сентября 2017, 08:46
0
А шурупов -то, шурупов!
+
avatar
  • sav13
  • 15 сентября 2017, 09:40
+1
Да. Почти стимпанк )))
+
avatar
  • Kembrik
  • 15 сентября 2017, 11:04
0
А скомпилированного файла прошивки для тех, кто не силён в программировании не будет?
ATmega8 для этого проекта не хватит?
Для чего кнопка сброс?
+
avatar
  • sav13
  • 15 сентября 2017, 12:06
+1
Для меги 8 нужно чуть переписать. Там вроде прерывания другие
Для 328 могу бинарник выложить
+
avatar
  • -LexX-
  • 22 мая 2019, 21:44
0
Где можно скачать бинарник?
+
avatar
0
Почти олдскульная компьютерная мышь (что на шарике и оптопарах) :)
+
avatar
0
У этого МК вроде есть на таймерах поддержка счетчика по внешнему сигналу с некой возможностью простейшей фильтрации (Noise Cancellation), якобы как раз для защиты от коротких мусорных импульсов… только настроек толком нет для этой фильтрации, только вкл/выкл.
+
avatar
  • sav13
  • 15 сентября 2017, 13:32
0
Может быть
В принципе на частоте 200-1000Гц без проблема и самому фильровать
Вон спектроанадизаторы на звуковой частоте FFT применяют
+
avatar
0
Наверно глупый вопрос. — а почему не датчик хола? Влез бы на туже плату что подсветка.
+
avatar
  • sav13
  • 15 сентября 2017, 17:19
0
Писал же что не было под рукой
Да и не нравится мне магнит на валу. Вдруг он вибрацию даст еще
+
avatar
0
Не очень понятно с фольгой по фото. Фольга металл? Сам вал металл. Нужен же хороший контраст. Самое простое бумажная лента по окружности черное с белым. А еще с частотомерами идут самоклеющиеся полоски из световозвращающего материала. Такой, что в темноте фар ночью отражается. Я например а Ашане видел продаются фликеры- браслеты. Такие же полоски, только на руку. Можно от такой отрезать попробовать.
+
avatar
  • sav13
  • 15 сентября 2017, 21:48
0
Кусочек обычно самоклеящейся пленки
+
avatar
  • sim31r
  • 15 сентября 2017, 22:58
0
Еще есть вариант ток измерять. Выше ток — меньше обороты. При постоянном напряжении. Думаю можно по нескольким точкам откалибровать и далее измерять ток, так как это проще и надежней.
+
avatar
  • sav13
  • 16 сентября 2017, 07:38
0
Во первых у двигателей постоянного тока ток нелинейно увеличивается при оборотах
Во вторых ток будет зависеть от нагрузи шпинделя

В моем случае проще было откалибровать положения переменного резистора регулировки оборотов
+
avatar
  • sim31r
  • 17 сентября 2017, 03:34
0
>>>Во вторых ток будет зависеть от нагрузи шпинделя

Да, ток так же даст информацию о моменте на двигателе, что может спасти фрезу при заклинивании. В отличие от оптического датчика.
+
avatar
  • ksiman
  • 16 сентября 2017, 09:29
0
Еще есть вариант ток измерять. Выше ток — меньше обороты. При постоянном напряжении.
Это полный изврат — измерять ток и напряжение, калибровать и в результате получить низкую точность. Всё равно, что удалять гланды через…
+
avatar
  • sim31r
  • 17 сентября 2017, 03:33
0
Частотные инверторы достаточно точно измеряют скорость и момент по току в обмотках, а там сложнее всё на порядок. Точность какую нужно, такую и можно получить. При более высокой надежности без глючного оптодатчика.
Вот зависимость оборотов, нагрузки (момента) от тока, информации больше, схема проще и надежней
+
avatar
  • ksiman
  • 17 сентября 2017, 08:33
0
Частотный привод сам задаёт двигателю с какой частотой вращения ему работать.
Небольшое скольжение поля легко компенсировать
+
avatar
  • sim31r
  • 17 сентября 2017, 15:56
0
Да, легче не бывает, всего то по 500 раз в секунду решать уравнения )))


Легко как-раз в двигателе постоянного тока.
+
avatar
  • sav13
  • 17 сентября 2017, 13:22
+1
Только там другой тип двигателя и цена на порядок больше.
Для дома вряд ли это целесообразно
+
avatar
  • sim31r
  • 17 сентября 2017, 15:59
+1
Для дома и считать обороты оптическим датчиком вряд ли целесообразно. Но интересно, по мне так и ток мотора измерять не менее интересно.
+
avatar
0
Вообще, в промышленных датчиках подобного типа от помех избавляются простейшим кодированием пакета. И соот-но декодированием. И да, выше правильно написали- белая бумажка и черная полоска на ней… Еще извращеннее только советские военные моторчики, не помню марки, у которых на валу была вторая генераторная катушка. Для счетчика оборотов.
+
avatar
  • AL_Kur
  • 17 сентября 2017, 19:43
0
в стиралках с коллекторным мотором на оси таходатчик стоит (ибо последовательное возбуждение). сигнал в контроллер заведён.
+
avatar
0
rps надо volatile объявлять, а то если умножение на 60 в основном цикле совпадёт с прерыванием, то может часть байт взять из старого значения и часть из нового
+
avatar
  • AL_Kur
  • 17 сентября 2017, 19:50
0
вообще-то, в каждом компьютерном вентиляторе, от 40 до 150мм brushless motor и датчик Холла присутствует.
а те «кулеры», что с тремя проводами, еще и выход импульсного таходатчика (ключ) имеют, 2 замыкания на оборот.
измерял скорость вентилятора: подключил пищалку-прозвонку к таходатчику и записал звуковые пакеты микрофоном на компе.