Система автоматического тестирования ВМГ (народный проект)

Nesenin

утром не успел написать про “жесткость”.для опоры я использую 2 трубы с толщиной стенки 1.5мм (15*15 ). они стянуты друг к другу и образуют цельную опору с вертикальными полосами в середине и по краям. то есть в сумме 6мм*15мм(ширина*высота) балка препятствуют изгибу основания по вертикали . текстолит по всей площади опоры моста. сжать его сложнее чем алюминий. и стянуто это 2мя болтами М6. этим обеспечивается достаточная жесткость. сверку показаний я делал.

я тут подумал. так как тяга винта соответствует точному значению оборотов и моменту, можно будет, произведя тест набора популярных винтов, извлекать показатели для моторов из обычных тестов. что сильно облегчит мне жизнь при наполнении базы данных. а там может кто поможет сделать более детальные тесты моторов.
щя думаю заказать APC Slo-Flyer винты 9-12" с шагом 3.8 и 4.7 и 14" с шагом 4.7 какие еще заказать (по 1 чтоб не разорился я)?

22 days later
Nesenin

по поводу ПО для стенда которое для 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 // 0x8C

uint8_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

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

6 months later
Nesenin

Про стенд с измерением в добавок оборотов и момента. Вот результат:

добавились:
АЦП ADS1100 для измерения напряжения на датчике тока
еще 1 АЦП HX711 и тензомост на 1кг для измерения момента
датчик скорости оптический такой dx.com/…/lm393-beam-photoelectric-sensor-black-217…

Точность по датчику тока и моменту можно оценить по картинке по оборотам то же весьма норм(на этом скрине еще не работало)

Для стабилизации измеряемых данных время на 1 шаг выделяется 1 сек. Для избавления проблем с питанием я использую БП. Выглядит стенд так:

Исходники жить будут тут: yadi.sk/d/_SCP7BogbpLRA
В архиве исходники для arduino. Они уже вряд ли будут меняться.
Файл с расширением vi эт исходник под LAbVIEW2013 его я буду постоянно изменять по мере дальнейших работ. Будет обновляться.

evgen42

Вопрос в чем преимущество диода для измерения оборотов? Например с регулятором hobbywing в комплекте идет датчик оборотов вот здесб он показан www.falconsekido.com/products/rpm-sensor, можно же его использовать или все-же решение на оптике в чем-то выигрывает? По крайней мере не надо ничего подводить к двигателю и каждый раз клеить наклейки

Nesenin

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

сегодня начал модифицировать программку для вывода всех новых данных. интересные графики получаются. например по КПД

график гр\Вт(механ) эт какрас независимые характеристики пропеллера. я тут тестировал карбоновые всякие. например пара левого и правого направления вращения 1 из них имеет брак( чуть сильнее загнут на глаз еле видно) и полный хлам по тестам, другой норм. а другие хоть и оба норм, все равно где то не одинаковы и на тесте это видно. в разделе “анализ” можно будет быстро любые графики построить.

а то я пока не знаю какие данные то нужны. пусть будет возможность вывести что угодно.

evgen42

Labview как я понимаю исходники вы не открываете? А так все можно бы выложить в гитхаб, можно и порефакторить на досуге, например удивительно видеть аж 2 дублирующихся файла hx711 отличающихся парой констант 😃
Теже adafruit библиотеки для датчиков все в гитхабе давно

Nesenin
evgen42:

Labview как я понимаю исходники вы не открываете?

тут они yadi.sk/d/_SCP7BogbpLRA файл superTest.vi обновляю каждый раз.

7 days later
evgen42
Nesenin:

тут они

Бинарный исходник? Это не удобно для гита будет надо что-то другое придумывать.

Попробовал этот датчик, припаял к 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, в итоге показания стали сходится - ну или оба врут пропорционально теперь или все-же более менее правду гоорят

Nesenin
evgen42:

Бинарный исходник? Это не удобно для гита будет надо что-то другое придумывать.

labVIEW использует визуальный “язык” программирования. никакой читабельный текст от туда не извлечь. эт для таких как я - не программистов. по этой же причине я не могу разделить ваше желание рефакторить код.

IDDQDesnik

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

#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 - максимальные обороты. Это как то калибруется, или это чей-то баг?

IDDQDesnik

Нашел на сайте производителя регулей упоминание о пробемах при использовании совместно с Ардукоптером и Мегапиратом, на которое изначально не обратил внимание, так как была куплена Наза. Там рекомендуется установить некий параметр в 1, но как это сделать на Ардуине?

evgen42
IDDQDesnik:

Мотор завелся, но смущает очень низкий диапазон углов: при 100 мотор стартует, при 110 - максимальные обороты. Это как то калибруется, или это чей-то баг?

Предлагаемое решение не использует стандартную библиотеку servo.h, посмотрите как сделал Никита, он использовал библиотеку pwmservo
Я тоже попробовал с ней, в принципе на регуляторе калиброванном на диапазон pwm 900-2100, большего не смог добиться с помощью сервотестера, библиотека крутит начиная с 33 и до 160. Что более чем достаточно для построения разного рода графиков.

IDDQDesnik:

Там рекомендуется установить некий параметр в 1, но как это сделать на Ардуине?

А вы пробовали традиционным способом регуль калибровать, написано же что проблемы могут быть при калибровке ?

IDDQDesnik

Кажется понял, где засада. 12 пин не умеет pwm.

А как калибровать без аппы?
Сработает ли скетч эмулирующий следующую последовательность? Или лучше не лезть?

Подключите один из ваших регуляторов ESC трехпроводным кабелей в  канал газа радиоприемника приемника. (Это, как правило 3-й канал.)
Включите аппаратуру и установите ручку газа в максимум (полностью вверх).Подключите аккумуляторную батарею LiPo
Вы услышите музыкальный тон, затем два звуковых сигнала.
После двух звуковых сигналов, опустите ручку газа полностью вниз.
Вы услышите несколько гудков (количество гудков соответствует количеству ячейк батарейки, которую вы используете)         и один длинный сигнал, указывающий конечные точки были установлены и ESC откалибровался.
Отключите аккумулятор и повторите эти действия для всех регуляторах ESC.
Если окажется, что регуляторы скоростей не калибруются то  возможно , канал газа находиться в инверсии (смотрите настройки  аппаратуры) и его необходимо настроить (влючить или выключить инверсию).
Если все же возникают проблемы после попытки калибровки  (например, регулятор по прежнему издает непрерывно звуковой сигнал)  попробуйте уменьшить ваш триммер газа на 50%.
Nesenin

так ведь стандартная процедура калибровки регулятора: подаем на выключенный регулятор максимальный сервосигнал, включаем регулятор, он подает определённые звуки , уменьшаем сигнал на минимум, регулятор запоминает диапазон. у меня регулятор RCtimer 30А нормально воспринимает диапазон 0-180 , а ZTW Spider 20А 0-160.

12 days later
evgen42
Nesenin:

тут они 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см провода, может это влиять?

Nesenin

evgen42 мало что я понял из написаного… данные завтра размещу. вот видео есть

youtu.be/ORiREhZC_kg

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

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

а вот серьезная проблем моего стенда
rcopen.com/forum/f123/topic218743/4545 частично исправил тут rcopen.com/forum/f123/topic218743/4556
потом буду еще пытаться улучшить. если будут положительные результаты отпишусь и сделаю некиы выводы\рекомендации по организации конструкции условий.
и будут перезамеры всего

evgen42
Nesenin:

потом сглаживаю их

Спасибо за видео. Проясняет многое. Все таки открыл ваш проект labview и увидел как же магическим образом графики становится таким гладким. Б-сплайны да понятно теперь, что скользящие окна ничего мне не давали. Я уж думал что у вас fft используются с вырезанием частотной области, а оказалось метод наименьших квадратов и б-сплайн как и написано в википедии это хороший вариант.
Из бесплатного простого софта сразу не нашел чтобы на своих данных проверить.

Читал про ваши винты правого и левого вращения, хотел попробовать, но пока нет б-сплайнов сравнивать 2 графика не представляется возможным.

7 days later
28 days later
jekmv

вот такая штука на ХК появилась, не нашел ее обсуждения что то
как думаете, стоит брать? или самому с нуля собирать?

Nesenin
jekmv:

вот такая штука на ХК появилась, не нашел ее обсуждения что то
как думаете, стоит брать? или самому с нуля собирать?

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

jekmv

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