Система автоматического тестирования ВМГ (народный проект)
поидее да , наибольшее усилие на датчике “влево\вправо” будет если ось двигателя будет по центру датчика , тут рычаг работает против нас … ну и датчик нужен с большой чувствительностью …
а вот датчик который работает “вперед/назад” можно брать менее чувствительный (на больший вес) так как рычаг работает на увеличение усилия …
Здоровэнькы булы!
Давненько я тут не был. 😃
Не особо вникая в выше изложенное, а не слишком ли вы фанатеите по поводу точности измерений при создании подобных стендов по теме?
Не особо вникая в выше изложенное, а не слишком ли вы фанатеите по поводу точности измерений при создании подобных стендов по теме?
точность никому не вредит, тем более что денежных затрат особо не требуется.
если вы вникните, то возможно согласитесь с мнением, что существующая методика тестирования и данные тестов не годятся ни для точных расчетов параметров мультироторов, ни для собственно качественного сравнения мотора\винта. сущесвует вероятность вообще сделать неверные выводы о том или ином моторе\винте.
а это все зря потраченное время, деньги, силы.
если же мы привяжем тесты тяги винта и потребления электроэнергии мотора к физическим параметрам вращения (мощность = углавая скорость * момент), мы как минимум избавимся от необходимости тестировать все возможные сочетание “мотор\винт”. то есть не надо покупать 100500 винтов и по очереди лепить их на мотор для подбора (а еще помножьте это на перебор батарей). мы просто протестируем все винты по 1 разу, запишем данные, потом протестируем моторы ( будет длительный цикл чтоб учесть зависимость по напряжению) и уже численными методами программа для нас будет искать подходящее сочетание мотор\винт\батарея и рассчитывать итоговые показатели. и в этом случае данные полученные кем то по какому то винту\мотору легко будет добавить в базу знания для последующего использования.
а максимум - это возможность построить точную матмодель с неограниченным применением. хоть свои винты\моторы\регуляторы проектировать\делать и тестировать\настраивать с сравнением результатов других.
в теории… дальше вопрос к реализации.
по деньгам. надо докупать мост для замера момента (например www.aliexpress.com/item/…/893631341.html)
и данные оборотов как то завести. (вообще есть регуляторы с отдельной линией данных по оборотам например www.castlecreations.com/…/phoenix-edge.html)
PS тензомост на 300гр я проверил, второй канал на АЦП тоже. сейчас воюю с кодом. пытаюсь заставить все вместе работать.
есть регули которые работают по СОМ порту и выдают обороты , и нетолько обороты …
autoquad.org/esc32/
но проще завести на ардуину одну фаза с мотора через делитель , и считать импульсы … количество полюсов можно и глазами посчитать …
Вы делаете лишнюю работу. Она не востребована будет. Добавляя, расширяя конструкцию вы наоборот накапливаете ошибки.
Например первоначальная ваша конструкция не достаточно жесткая. Привожу этот пример для указания на ошибки более влияющие на результаты измерений, чем то, на что вы щас заостряете свое внимание.
Между пластиной и тензодатчиком текстолит, очень изменит показания (эта ошибка более существенна). Так же квадратная труба не достаточно жесткая.
Не будет линейности в измерении, в начале и конце теста значения будут занижены (проверял на своем стенде, уж поверьте или проверьте).
А последующая доработка вообще существенно изменит показания, просто напросто вы загоняете проект в бесполезное, дорогое творчество, которое никто не будет повторять.
Для примера сравните информативность табличек на сайте СанниСкаев и моими измерениями, и то и другое содержит практически одну и ту же полезность, большего от этих данных не требуется.
Имеется немного расхождений в данных, но это практически не влияет на предварительные расчеты ВМГ для комфортных последующих подборов связки ВМГ.
Да и вообще, мне стенд помог понять множество факторов, которые могут повлиять но правильность подбора ВМГ. В этом его большая заслуга, а не в точности измерений.
не беспокойтесь, я даже ось вала по нормали выставляю пузырьковыми уровнями. про возможные причины не линейности в вашем стенде я писал, как рас таки после длительного изучения своей балочной конструкции.
со всеми ошибками я активно борюсь. как аппаратно так и программно. см мое ПО yadi.sk/d/eEj0iObbHuS9Z и сообщения тут.
“лишняя, бесполезная” эт субъективная оценка. кому то вообще это все не надо. а кому то нужны достоверные данные для работы над долголетами или еще чем.
утром не успел написать про “жесткость”.для опоры я использую 2 трубы с толщиной стенки 1.5мм (15*15 ). они стянуты друг к другу и образуют цельную опору с вертикальными полосами в середине и по краям. то есть в сумме 6мм*15мм(ширина*высота) балка препятствуют изгибу основания по вертикали . текстолит по всей площади опоры моста. сжать его сложнее чем алюминий. и стянуто это 2мя болтами М6. этим обеспечивается достаточная жесткость. сверку показаний я делал.
я тут подумал. так как тяга винта соответствует точному значению оборотов и моменту, можно будет, произведя тест набора популярных винтов, извлекать показатели для моторов из обычных тестов. что сильно облегчит мне жизнь при наполнении базы данных. а там может кто поможет сделать более детальные тесты моторов.
щя думаю заказать APC Slo-Flyer винты 9-12" с шагом 3.8 и 4.7 и 14" с шагом 4.7 какие еще заказать (по 1 чтоб не разорился я)?
по поводу ПО для стенда которое для LAbVIEW и arduino. дальнейшие разработки под 1 вариант стенда я остановил. последняя версия все там же yadi.sk/d/CYA3DLdHKxsv6
по сравнению с тем что было на видео, доработан раздел “обработка”, сделан раздел "анализ"с необходимым минимум функций. и как бонус есть раздел “3D картинки” там по загруженным графикам строятся поверхности.
код arduino не менял. в случае если кто надумает использовать упомянутый АЦП ADS1100 вот тут код forum.arduino.cc/index.php/topic,77794.0.html рабочий. его легко можно добавить в основной, ничего не сломав. достаточно воткнуть в нужные места куски из этого
/*
SDA ==> analog 4 PC4
SCL ==> analog 5 PC5
*/#include <Wire.h>
#define AD0 B1001000 // 7bit address
#define AD1 B1001001 // 7bit address
#define options B10001100 // 0x8Cuint8_t reg = 0;
int16_t result = 0;void setup() {
Serial.begin(115200);
Wire.begin();
Wire.beginTransmission(AD0);
Wire.write(options);
Wire.endTransmission();
}void loop() {
Wire.beginTransmission(AD0);
Wire.requestFrom(AD0, 3); // request 3 bytes from AD1
while(Wire.available()) {
result = Wire.read();
result = result << 8;
result += Wire.read();reg = Wire.read();
Serial.println(result, DEC);
}
Wire.endTransmission();
delay(5);
}
надо только настроить под свой чип (см выбор AD1 или AD0). для моего датчика , расчетная точность должна составить 0,003814697265625 [А] (шум не позволит так точно измерять). напомню сейчас шаг измерений у меня составляет 0,1237934195959 [А]. То есть точность должна улучшиться на порядок!
над вторым вариантом стенда я потихоньку работаю. Код для опроса 2х тензомостов я наваял. К сожалению методика опроса 2х каналов предполагает тратить по 1 запросу на смену выбора канала АЦП (в сумме 4 запроса к АЦП). В итоге скорость цикла измерений упала более чем в 4 раза, так как АЦП еще тупит между переключениями. Придется время теста сильно увеличивать. Как вариант использовать 2 АЦП. Вот тут banggood.com/HX711-Weighing-Pressure-Sensor-24-Bit… например цена с доставкой $2.40 ! да и версия с экраном тоже карман сильно не опустошает. может потом 2 будут. а пока вот рабочий код для 2 каналов yadi.sk/d/HSbal9N0L2VCm
теперь мне осталось решить вопрос с измерением оборотов и можно все собирать воедино. даже если данные момента ничего не дадут, все равно выйдет более точный , удобный, проработанный стенд, чем были до этого.
Про стенд с измерением в добавок оборотов и момента. Вот результат:
добавились:
АЦП ADS1100 для измерения напряжения на датчике тока
еще 1 АЦП HX711 и тензомост на 1кг для измерения момента
датчик скорости оптический такой dx.com/…/lm393-beam-photoelectric-sensor-black-217…
Точность по датчику тока и моменту можно оценить по картинке по оборотам то же весьма норм(на этом скрине еще не работало)
Для стабилизации измеряемых данных время на 1 шаг выделяется 1 сек. Для избавления проблем с питанием я использую БП. Выглядит стенд так:
Исходники жить будут тут: yadi.sk/d/_SCP7BogbpLRA
В архиве исходники для arduino. Они уже вряд ли будут меняться.
Файл с расширением vi эт исходник под LAbVIEW2013 его я буду постоянно изменять по мере дальнейших работ. Будет обновляться.
Вопрос в чем преимущество диода для измерения оборотов? Например с регулятором hobbywing в комплекте идет датчик оборотов вот здесб он показан www.falconsekido.com/products/rpm-sensor, можно же его использовать или все-же решение на оптике в чем-то выигрывает? По крайней мере не надо ничего подводить к двигателю и каждый раз клеить наклейки
evgen42, я о такой штуке только сейчас узнал. не знаю я про преимущества. с регулятора данные брать удобней конечно, когда он есть такой.
сегодня начал модифицировать программку для вывода всех новых данных. интересные графики получаются. например по КПД
график гр\Вт(механ) эт какрас независимые характеристики пропеллера. я тут тестировал карбоновые всякие. например пара левого и правого направления вращения 1 из них имеет брак( чуть сильнее загнут на глаз еле видно) и полный хлам по тестам, другой норм. а другие хоть и оба норм, все равно где то не одинаковы и на тесте это видно. в разделе “анализ” можно будет быстро любые графики построить.
а то я пока не знаю какие данные то нужны. пусть будет возможность вывести что угодно.
Labview как я понимаю исходники вы не открываете? А так все можно бы выложить в гитхаб, можно и порефакторить на досуге, например удивительно видеть аж 2 дублирующихся файла hx711 отличающихся парой констант 😃
Теже adafruit библиотеки для датчиков все в гитхабе давно
Labview как я понимаю исходники вы не открываете?
тут они yadi.sk/d/_SCP7BogbpLRA файл superTest.vi обновляю каждый раз.
тут они
Бинарный исходник? Это не удобно для гита будет надо что-то другое придумывать.
Попробовал этот датчик, припаял к 2 проводам регулятора, в плане ардуино такой же код как и в случае оптического - attachinterrupt, сигнальный провод во 2ой пин, и поехали считать.
Посмотрел в вашем коде зачем-то в каждом прерывании измеряется время потом это все сглаживается окном. Зачем так сделано, да и окно можно было уже на клиенте делать. У себя сделал проще, копипаст с сайта ардуино - в прерывании счетчик, далее в loop() все равно самая долгая операция это измерение + усреднение тяги, я например из 40 замеров делаю. За это время прерывание натикает иногда > 255 что надо учитывать если копипастим volatile byte с arduino.cc , тут то мы и измерим время которое счетчик тикал. В результате никаких окон, и миллионов вызовов функции millis(), не знаю как здесь но в виндовс любая функция QPC занимает не мало времени. Вобще даже без фильтрации окном получается почти монотонный график оборотов.
servoValue += dServo;
servo1.write(servoValue);
//reset rpm counter
timeold = millis();
half_revolutions = 0;
//account weight from scale
float weight = scale.get_units(40);
scale.power_down(); // put the ADC in sleep mode
delay(5);
scale.power_up();
//Update RPM
rpm = 4350.0/(millis() - timeold)*half_revolutions;
Калибровал регуляторный датчик по оптическому счетчику с HK, в итоге показания стали сходится - ну или оба врут пропорционально теперь или все-же более менее правду гоорят
Бинарный исходник? Это не удобно для гита будет надо что-то другое придумывать.
labVIEW использует визуальный “язык” программирования. никакой читабельный текст от туда не извлечь. эт для таких как я - не программистов. по этой же причине я не могу разделить ваше желание рефакторить код.
Заморочился постройкой коптера, заказал всякого, но пришли пока только моторы, регули и акумуляторы и пропелееры. Потому и решил опробовать все на ардуинке.
Накидал скетч:
#include <Servo.h>
Servo myservo;
int l_out_1 = 3;
int l_out_2 = 4;
int l_out_3 = 5;
int angle = 0;
void setup()
{
myservo.attach(12);
delay(5000);
myservo.write(angle);
delay(2000);
}
void loop() {
for (angle = 95; angle <= 130; angle += 5) {
myservo.write(angle);
led_out(angle);
delay(2000);
}
}
void led_out(int ang) {
int value = (ang - 95) / 5;
digitalWrite(l_out_1, (value & 1) * HIGH + (value & 1 == 0) * LOW);
digitalWrite(l_out_2, (value & 2) * HIGH + (value & 2 == 0) * LOW);
digitalWrite(l_out_3, (value & 4) * HIGH + (value & 4 == 0) * LOW);
}
Мотор завелся, но смущает очень низкий диапазон углов: при 100 мотор стартует, при 110 - максимальные обороты. Это как то калибруется, или это чей-то баг?
Нашел на сайте производителя регулей упоминание о пробемах при использовании совместно с Ардукоптером и Мегапиратом, на которое изначально не обратил внимание, так как была куплена Наза. Там рекомендуется установить некий параметр в 1, но как это сделать на Ардуине?
Мотор завелся, но смущает очень низкий диапазон углов: при 100 мотор стартует, при 110 - максимальные обороты. Это как то калибруется, или это чей-то баг?
Предлагаемое решение не использует стандартную библиотеку servo.h, посмотрите как сделал Никита, он использовал библиотеку pwmservo
Я тоже попробовал с ней, в принципе на регуляторе калиброванном на диапазон pwm 900-2100, большего не смог добиться с помощью сервотестера, библиотека крутит начиная с 33 и до 160. Что более чем достаточно для построения разного рода графиков.
Там рекомендуется установить некий параметр в 1, но как это сделать на Ардуине?
А вы пробовали традиционным способом регуль калибровать, написано же что проблемы могут быть при калибровке ?
Кажется понял, где засада. 12 пин не умеет pwm.
А как калибровать без аппы?
Сработает ли скетч эмулирующий следующую последовательность? Или лучше не лезть?
Подключите один из ваших регуляторов ESC трехпроводным кабелей в канал газа радиоприемника приемника. (Это, как правило 3-й канал.)
Включите аппаратуру и установите ручку газа в максимум (полностью вверх).Подключите аккумуляторную батарею LiPo
Вы услышите музыкальный тон, затем два звуковых сигнала.
После двух звуковых сигналов, опустите ручку газа полностью вниз.
Вы услышите несколько гудков (количество гудков соответствует количеству ячейк батарейки, которую вы используете) и один длинный сигнал, указывающий конечные точки были установлены и ESC откалибровался.
Отключите аккумулятор и повторите эти действия для всех регуляторах ESC.
Если окажется, что регуляторы скоростей не калибруются то возможно , канал газа находиться в инверсии (смотрите настройки аппаратуры) и его необходимо настроить (влючить или выключить инверсию).
Если все же возникают проблемы после попытки калибровки (например, регулятор по прежнему издает непрерывно звуковой сигнал) попробуйте уменьшить ваш триммер газа на 50%.
так ведь стандартная процедура калибровки регулятора: подаем на выключенный регулятор максимальный сервосигнал, включаем регулятор, он подает определённые звуки , уменьшаем сигнал на минимум, регулятор запоминает диапазон. у меня регулятор RCtimer 30А нормально воспринимает диапазон 0-180 , а ZTW Spider 20А 0-160.
тут они yadi.sk/d/_SCP7BogbpLRA
Добрый день, не могли бы вы выложить сырые данные с вашего стенда, вместе с servo уровнем, вы используете внешнее управление и не понятно пока по какому принципу, толи при стабилизациио боротов переключаете толи по времени, смотреть на vi файл не предлагать 😃 Т.к. фильтрация у всех может быть разная хотелось бы понять до какого уровня имеет смысл убирать вибрации с тензо датчика, играться с параметрами rc фильтра для датчика тока и делителя напряжения если вы их используете. Напряжение в вашем бп все равно как видно проседает поэтому думаю что он не идеален, использовал бп от питания диодной ленты 12в - легко получить просад в 1в при 10А.
Пока не могу собрать адекватные данные с тензо датчика - на определенных оборотах появляются вибрации не связанные с балансировкой винта на магнтном подвесе, т.е. эффект бабочки. Использовал следующую стратегию - добавляем 1 к значению servo сигнала, если начать собирать данные сразу то будем иметь плавно увеличивающиеся обороты тягу и остальные характеристики в течении некоторого времени разгона винта, т.е. переходные процессы, чтобы их не мерить, сразу после подачи нового значения на серво канал использовал delay(1000). Далее собираю 500 показателей всех датчиков в цикле, времени уходит много минут 5 на прогон. На сырых данных тензо датчика видны различимые ступени с ровными шумными горизонтальными полками, однако это не помогает при больших оборотах. Использовал демпфера на тензодатчике улучшений нет. Полки не ровные а кривые с кривизной больше уровня шумов, фильтровать такие данные считаю неверным, результаты будут не повторяемые.
Тоже есть проблемы с ecs758 и 10 битным ацп, фильтр 10nf+50кОм помогает но бывает что при увеличинии servo сигнала ток падает. Также у меня вопрос если не потреблять ток датчик выдает 0.6в 125 на ардуине использую 100U версию, понимаю что у все направленных датчиков есть оффсет коло 500 но почему у меня оффсет 125 не пойму. Проверил все датчики которые есть у меня все выдают 0.6в. Фильтр 0.1nf поставил далеко не возле датчика а уже на макетной плате после 10см провода, может это влиять?