Настольная динамическая балансировка маховика

Дело было вечером, делать было нечего ©

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

Ну и нужен маховик. Быстренько нарисовал чертёж, отправил токарю, чутка подождал и получил готовое изделие.

cad08670d0c44f45e496599758a74cad.png

Одно прикрутил у другому и получил вот такую незамысловатую конструкцию.

Здесь стопка из 4-х маховиков и только к верхнему прикручен моторЗдесь стопка из 4-х маховиков и только к верхнему прикручен мотор

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

311ee4093c0bfef5da86fbf469a2e583.png

При запуске вся эта неведома конструкция неистово вибрирует, того и гляди — сейчас развалится. От этого становилось страшно и как-то не по себе. Было решение собрать самодельный стенд для балансировки. Т.к. опыта разработки электроники и прошивок для контроллеров у меня крайне мало, т.е. по сути нет, то и пришлось информацию собирать в разных источниках.

Я примерно понимал как работает балансировочный станок-ищем пик вибрации, запоминаем или как-то указываем место, где этот пик был найден. Всё просто. В моём случае — буду использовать светодиод для подсветки «тяжёлого» места маховика.

В качестве датчика я решил использовать акселерометр. Начитался этих ваших интернетов и понял, что нужно использовать аналоговый акселерометр, например ADXL-335. Связано с тем, что у цифровых на выходе стоят фильтры, а мне нужны прям сырые данные и обрабатывать я их хочу сам. Возможно, это не так. Если не так, поправьте. Кстати, частоту больше 400Гц этим акселерометром не измерить.

В качестве светодиода решил использовать 1Вт светодиод. Поставил его через ограничивающий ток резистор в 27Ом, с надеждой что ардуинка его (светодиод) вытянет по нагрузке. В принципе, она и вытянула, перебоев каких-то не было.

В качестве контроллера взял платку с Arduino Nano. Она недорогая и прикольно мелкая.

Сначала всё повесил на сопли на имеющийся кронштейн для проверки работоспособности всей идеи. Выглядело это довольно печально.

На фото не видно светодиода, он висит отдельно на проводе и в кадр не попал.На фото не видно светодиода, он висит отдельно на проводе и в кадр не попал.

Собрал всё, решил посмотреть что там на выходе с акселерометра. А вот же что там, такая себе синусоида.

3efce152f9218da7b0688d7563bc1534.png

Что я думал и как себе представлял. Пока буду находиться на вершине синусоиды — буду включать светодиод. Выглядело это для меня крайне логично и вполне работоспособно. Добавил потенциометр для регулировки «высоты» порога срабатывания

Написал вот такую коротенькую программу.

Первая прошивка

int axel = A0; // аналоговый акселерометр
int reg = A1; // потенциометр
int ledPin = 13; // светодиод

void setup() { pinMode(ledPin, OUTPUT);} //мегакоТ

void loop() {
if (analogRead(axel)>analogRead(reg)) digitalWrite(ledPin, HIGH); //чтение. сравнение и включение светодиода
else digitalWrite(ledPin, LOW);// выключение светодиода
}

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

2dbaf476e73334c7de73adcf3b8bc996.png

Посоветовавшись с умными людьми я понял, что детектировать пик нужно более точно и однозначно, это первое, второе — длину импульса светодиода нужно задавать самостоятельно, а не как у меня было (длина подсветки зависит от частоты вращения и порога срабатывания). А ещё можно специальной магией увеличить скорость работы АЦП.

На основе этих изменений родилась прошивка 2. Ничего не придумывал, взял готовые формулы.

Вторая прошивка

int axel = A0 ; // аналоговый акселерометр
int ledPin =13 ; // светодиод

int minADC = 1023; // присваиваю начальное значение переменной
int maxADC = 0; // присваиваю начальное значение переменной
int nowADC = 0; // присваиваю начальное значение переменной
bool maxIsWorked = true; // присваиваю начальное значение переменной
bool minIsWorked = true; // присваиваю начальное значение переменной
uint32_t timer; // присваиваю тип переменой (целые числа)
float freq, ampV, A, S, V, m; // присваиваю тип переменой (числа с плавающей запятой)

void setup() {
pinMode(ledPin, OUTPUT); // ledpin будет выход
Serial.begin(2000000); // настройка скорости com порта
ADCSRA |= (1 << ADPS2); // магия 1
ADCSRA &= ~ ((1 << ADPS1) | (1 << ADPS0)); // магия 2
}

void loop() {
nowADC = 1023-analogRead(axel); //реверс сигнала, изменения направления оси

if (nowADC > maxADC) {
maxADC = nowADC;
}
else if (nowADC < minADC) {
minADC = nowADC;
}
else if (maxADC > nowADC + 10 and minIsWorked) {

maxIsWorked = true;
minIsWorked = false;

//кусок выше - условия, при которых ищу пик на синусоиде

uint32_t nowTime = micros(); //записываю текущее время в мкс в переменную nowTime
Serial.println("xx");
freq=1000000 / (nowTime - timer); //вычисляю частоту сигнала с акселерометра, Гц
ampV=(maxADC-minADC)4.87;//вычисляю амплитуду сигнала, мВ A=ampV/3009.8;//вычисляю виброускорение в м/с^2
S=A25.35/freq/freq;//вычисляю виброперемещение, мм V=S0.63freq;//вычисляю виброскорость, мм/с m=8040.3V/(2.5freq*60); // вычисляю массу на радиусе 2 см, при массе всего ротора 300 г, пытался вычислить массу, которую необходимо убрать с маховика. не вышло

Serial.println(freq, 0);
Serial.println(ampV);
Serial.println(S, 3);
Serial.println(V);
Serial.println(m, 3);
Serial.println(" ");
timer = nowTime;
digitalWrite(ledPin, HIGH);
delayMicroseconds(12); //время свечения светодиода в мкс
digitalWrite(ledPin, LOW);
minADC = 1023;

//кусок выше - вывод данных в порт

}
else if (minADC < nowADC - 10 and maxIsWorked) {
maxADC = 0;
maxIsWorked = false;
minIsWorked = true;
}
}

И только после этого случилось то, что случилось!

5636aa32dd689405c56d9b728cc86021.png

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

ebf3a75d78b5e1f11bc82091227e3990.png

Поставил мотор с маховиком на стенд, разметил маховик, раскрутил, измерил виброкорость (именно по этому параметру решил оценивать вибрацию). Нашёл место для облегчения маховика.

Виброскорость до балансировки составляла 1,9 мм/с.

58d9a33df23418ff541d42d7306cb063.png

Найденное место, с которого необходимо снять материал (около девяточки).

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

37e0ab61294abdc5c1375555fa9f3bc5.png

После сверловки запускаю маховик и смотрю на сколько изменилась картина. Сверлю или дальше отверстие по глубине, или сверлю отверстие в другом месте.

В результате виброскорость упала до 0,6 мм/с.

ecd32d4737a272fc0378afe9af9386d6.png

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

d76b6cb3a04402bd89f2d078062f2105.png

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

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

Ниже — немного другое представление информации, но там голые ножки и зима.

18+

© Habrahabr.ru