Каталог RSS-каналов
Статистика

RSS-каналов в каталоге: 3393

Добавлено сегодня: 0

Добавлено вчера: 0

Hi-Tech / Hardware

Счетчик оборотов шпинделя на ИК-сенсоре

Самопал.pro 31.10.2017 в 13:24

Счетчик оборотов шпинделя на ИК-сенсоре

Недавно собрал новый станок ЧПУ для сверления и гравировки печатных плат, корпусов и прочих мелочей.

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

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

Данный модуль применяется в основном в ардуинщиками в роботостроительстве как ИК датчик препятствия. Представляет маленькую очень бюджетную платку (особенно если покупать партиями штук по 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 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,"M",rpm/10); } else{ dot = 0; sprintf(buf,"M",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% результат с тестового генератора. При включенном моторе с сенсора показывались стабильные обороты, которые хорошо коррелировали с режимом работы мотора. На том и остановимся

Корпус

Корпус делаю на станочке из обрезков ПВХ пластика 3мм

Еще одна проблема нартсовалась при выборе места установки счетчика на станок.

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

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

Как работает станок с датчиком можно посмотреть здесь

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

The post Счетчик оборотов шпинделя на ИК-сенсоре appeared first on самопал.pro.

Другие записи ленты

Мотор-шпиндель для станка ЧПУ 300Вт с патроном, кронштейном и БП регулирующим обороты 31.10.2017 в 11:55

Новый станок ЧПУ с рамой из алюминиевого профиля 11.09.2017 в 11:49