Лимитер отчечественного производства.

blade
dENISCA:

А тараканов он не ловит =(

“Кому- и кобыла невеста” (С) дворник Тихон)
Но вообще то, Протеус и АВР студио- вещи очень разные, если не сказать- абсолютно?
И именно тарканов (т.е. схемотехнические ошибки, после которых идет дым) Протеус ловит отлично.У меня во всяком случае:)

V_Alex:

жаловался, что Протеус джиттер не отлавливает

Ну, я тут уже писал, чтобы не нарываться на джиттер- надо просто аппаратный шим использовать? Хотя, наикрутейшие ассы и бают, что путем немыслимых ухищрений- они его бороли программно, встает вопрос: а зачем? Тем более, в измерительном приборе с заявленной точностью 1%?
Там как раз мельчайший джиттер- обломает всю малину:(
И потом -придется плату переразводить, ноги менять…

dENISCA

Нет,
шим на точность не влияет почти совсем. Шим влияет на канал газа, типа можно словить помеху на канале.
Но если так то это дурдом а не контроллер =)

blade
dENISCA:

типа можно словить помеху на канале. Но если так то это дурдом а не контроллер =)

Из моего типа опыта, когда я делал лет 10 назад самодельный автопилот- именно канал газа был наиболее чувствителен к помехам и джиттеру, вплоть до остановки и перезагрузки ESC.
Ну, если у вас получится сделать это без аппаратного ШИМ- я только порадуюсь.

V_Alex
blade:

Ну, я тут уже писал, чтобы не нарываться на джиттер- надо просто аппаратный шим использовать? Хотя, наикрутейшие ассы и бают, что путем немыслимых ухищрений- они его бороли программно, встает вопрос: а зачем?

Это были не Вы, это было не тут,
а в другом совершенно разделе…😃
А именно, в разделе про самодельную электронику. Джиттер не нужно бороть программно, достаточно просто не создавать предпосылок для его появления. Достигается это генерацией фиксированного такта следования импульса и разрешением самого импульса более высоким, чем мертвая зона сервы. А аппаратный ШИМ бывает одновременно нужен для других задач. Впрочем, рецепты приготовления кошек у каждого свои 😃

dENISCA

Не успеваю в теме отписываться. Стоко всего хотелось рассказать…

Для затравки скэтч из первых версий для разговора (мясо)

//spisok const_start
float energy = 0.0;
float voltage = 0.0;
float current = 0.0;
// float startCurr = 1.3;
// float powerMax = 1001.0;
long prevMill = 0;
long prevMillA = 0;
unsigned long currMill = 0;
int ledState = LOW;
int sensorI = 0;
int sensorU = 0;

#include <Servo.h>
Servo trot_esc;
int imp_s = 1000;
int imp_s_bk = 1000;

void setup() {
// инициализируем СОМ-порт на скорости 9600:
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(6, INPUT);
trot_esc.attach(5, 1000, 2000);
trot_esc.writeMicroseconds(imp_s);
}
void loop() {
//инициализируем лимитер, ждем превышение стартового тока выше 286 квантов
while (sensorI < 2){
imp_s_bk = imp_s;
imp_s = pulseIn(6, HIGH);
if(imp_s >= 2500) { imp_s = 1000; }
if(imp_s > 2000 && imp_s < 2500) { imp_s = 2000; }
if(imp_s < 1000 && imp_s > 500) { imp_s = 1000; }
if(imp_s <=500) { imp_s = imp_s_bk; }
trot_esc.writeMicroseconds(imp_s);
sensorI = analogRead(A7) / 100;
// Serial.println(sensorI);

//мигаем светодиодом в режиме ожидания
currMill = millis();
if(currMill - prevMill > 1000) {
prevMill = currMill;
if(ledState == LOW) ledState = HIGH; else ledState = LOW;
digitalWrite(13, ledState);
}
}
//активируем цикл подсчета энергии до 1001Вт/мин)
while (energy < 1000.0){
imp_s_bk = imp_s;
imp_s = pulseIn(6, HIGH);
if(imp_s >= 2500) { imp_s = 1000; }
if(imp_s > 2000 && imp_s < 2500) { imp_s = 2000; }
if(imp_s < 1000 && imp_s > 500) { imp_s = 1000; }
if(imp_s <=500) { imp_s = imp_s_bk; }
trot_esc.writeMicroseconds(imp_s);
//считываем показатели каждые 50мсек
currMill = millis();
if(currMill - prevMillA > 49) {
prevMillA = currMill;
// чтение U, делитель 51/15 аналоговый вход А4:
sensorU = analogRead(A4);
// чтение I, делитель 0/15 аналоговый вход А7:
sensorI = analogRead(A7);
// конвертируем уровни квантования в вольты (кванты 0 - 1023) вольты (0 - 22V):
voltage = sensorU * (22.0 / 1023.0);
// конвертируем уровни квантования в амперы (кванты 0 - 1023) амперы (0 - 100А):
current = sensorI * (100.0 / 1023.0);
energy = energy + (voltage * current * 0.05 / 60);
//Serial.println(current);
//Serial.println(voltage);
Serial.println(energy);
}
//мигаем светодиодом в режиме подсчета
if(currMill - prevMill > 150) {
prevMill = currMill;
if(ledState == LOW) ledState = HIGH; else ledState = LOW;
digitalWrite(13, ledState);
}
}

// print out the value you read:
// Serial.println(voltage);
// print out the value you read:
// Serial.println(current);
//Serial.println(voltage);
//Serial.println(current);
digitalWrite(13, HIGH);
trot_esc.writeMicroseconds(1000);
delay(10000);
}

sasha2
dENISCA:

амперы (0 - 100А)

Извините, не силен в программировании и не очень понимаю, что это значит, но по возможности измерение тока лучше не ограничивать 100 амперами, так как трехбаночная мотоустановка (некоторые на таких летают, я тоже их использую) потребляет более 120А на старте.

dENISCA

Это версия 4-5S, на 3S будет 150А.
Но это не программное ограничение, это ограничение шунта.
В общем есть над чем поразмыслить, т.к. все равно чем-то надо жертвовать.
У меня скорее всего без разницы каким концом втыкать в батарею, в отличие от Юнилога2. Хотя тоже не совсем понимаю почему там не реализовать так же.
Скорее вся хитрость в метрологии.

Вопрос по Юнилогу2:
Форматнул флэшку на ФАТ32, оказалось надо ФАТ16.
Форматнул на ФАТ, но ЮниТулз не хотел создавать системные папки на флэшке, пришлось копировать старые папки.
Это нормально?

dENISCA

Когда стал решать проблему с ШИМом, поначалу казалось просто =))
Потом когда пришел к практике, понял что знания у меня не НОЛь, а даже не знаю с какой стороны подойти!!! Это была сцена из басни “Мартышка и очки”.
Просто был в шоке. Но самое интересное что через 3 часа задача была решена!
Уже начал писать процедуру по измерению длины импульса. Она конечно с первого раза не заработала )))) Но зато дала понять что это уже написано за меня и со второй попытки просто стал искать нужную процедуру и вот что получилось =))))

dENISCA

Ни у кого нет вопросов?
Или видео не понравилось ? =)

blade
dENISCA:

Ни у кого нет вопросов?

На все вопросы- мы с V_Alex ответили в самом начале.Я в частности писал, что сформировать нормальный ШИМ импульс- непростая задача?
А ответы появятся, когда изделие заработает по полной программе, а не диодиками замигает:)

dENISCA:

Когда стал решать проблему с ШИМом, поначалу казалось просто =)) Потом когда пришел к практике, понял что знания у меня не НОЛь, а даже не знаю с какой стороны подойти!!!

Так задача еще и не решена: где исполнительное устройство (серва а лучше- движок с регулятором) который повторяет входной импульс в состоянии “работа” и молчит, как рыба об лед- когда ручка газа в “0”?
Причем, даже написав процедуру формирования ШИМ можно нарваться на то, что при дальнейшем развитии программы- она начнет глючить от какого нибудь нового прерывания и все придется переписывать по- новой 😦
Так что, до победных маршей- еще ой, как далеко.

V_Alex
dENISCA:

Ни у кого нет вопросов?

Рано еще вопросы задавать 😃

dENISCA

Чувствую себя преподавателем, который после лекции задает вопрос: “Вопросы есть?” - а в ответ “нет”.
Значит лекция прошла в пустую, и все невнимательно слушали или смотрели =))

Сервотестер - это имитация приемника.
Лимитер стоит между сервотестором и регулятором.
Мигание светодиодом - это сигнализация-визуализация, для ориентирования.

А теперь смотрим еще раз внимательно.
При подключении батареи, контроллер пропиликал все мелодии, мотор стоит как вкопанный. Начинаем поворачивать ручку, мотор стоит, следовательно лимитер внес мертвую зону (для удобства и для контроллеров Маркус).
Далее мотор запустился, на мониторе видно что график шумов не изменился по сравнению с остановкой. Дрейф в норме.
Доходим до отметки в 7А (это сделано для прогрева), график изменился и светодиод замигал по другому - это значит что мы перешли в другой режим - “подсчета”. В этот момент мотор как работал так и работал - т.е. сбоя в ШИМе не было при переходе между циклами. Прерывания специально не использовал дабы не понятно к чему это приведет.
Увеличиваем мощность, мотор работает ровно до поры до времени пока не просела “батарея” - она мертвая, и еще стенд получился пружинистый - мотор прыгает на нем. На графике/мониторе видно плавное увеличение тока.

Можно конечно было продемонстрировать “принудительное отключение” но 1000Вт на дохлой батарее 3S и 7А нужно было долго ждать. Но по мертвой зоне можно догадаться что это бы произошло 99%. Вот тут то у меня используется прерывание для “ожидания/остановки мотора”.

Прошивка залита уже боевая, поэтому буду тестировать уже погрешность. Потому как что я увидел меня ввергло в шок, и как это считать ХЗ =)))

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

dENISCA

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

Тест в параллель с ЮНИЛОГОМ показал ошибку подсчета в районе 50% =)))))
Дома подцепив шлейф, данные показали что подсчет идет правильно но почему-то медленно, раза в 1,5. Т.е. Ток и Напряжение измеряю точно, но суммирование идет медленно.
Покумекав, вот что пришло в голову:

Шунт работает в обе стороны, т.е. нулевая точка у него равна 511-512 квантов.
Но ноль плавает в районе "±"3-5 квантов, т.е. если мы вычитаем из текущего значения 512, то можем получить отрицательное значение, что в итоге в сумме будет занижать суммарную энергию. Данным побочным эффектом я пренебрег, т.к. при увеличении тока мы в итоге уходим от отрицательного значения, а в начале такие маленькие токи игнорируются при подсчете.

Но на практике оказалось, что при токе 12-14А и 5S, график тока просто шокирует, он летает в обе стороны все время. График очень походит на модулированный сигнал. Конечно может на него влияет сам ШИМ управления, не могу это полностью отрицать, но мне больше верится что причина в переходных процессах, которые не до конца понимаю. И скорее всего инженеры КАСТЛа не лукавили, когда говорили о максимальных импульсах тока в раза три больше чем номинальный ток. Вот так.

В итоге в первой итерации, нулевую точку снизил на 7 квантов - до 504. Все значения стали больше нуля. Значение суммарной энергии выровнялось с ЮНИЛОГОМ. Надо еще пару тестов сделать, единственно проблема посчитать на макс мощности - уж больно страшно =)

Но скорее всего надо оставить за НОЛЬ 512 квантов, а значение делать по модулю, т.е. в любом случае получать положительное значение при любом направлении тока.
Как думаете?

п.с. В общем, обработка данных - это та еще штука, надо иметь опыт для этого.

dENISCA

ТИшина на форуме =)

Вчера сделал НОЛЬ по модулю, ноль стал кучнее =)
Но считает все равно медленнее.
Есть два пути: быстрый и правильный
быстрый - зарезать лимит энергии.
правильный - разобраться в чем соль.

М.б. у меня происходит измерение по спаду импульса, поэтому ТОК в подсчет попадает ниже среднего.
Как проверить?
М.б. попробовать увеличить частоту измерений или уменьшить?
Или “откалибровать” по факту - ручным подбором коэффициентов?

xius

Денис!

Только сейчас заметил вашу тему. Имею кое что сообщить. Делал я однажды счетчик махов в рамках темы тут. Я там все сделал на шунте, правда контроллером был PIC и токи были поскромнее. И шунт я калибровал программно.

Сейчас кое чего сделал бы не так…
Во-первых, перед АЦП настоятельно рекомендуется поставить RC-фильтр.
Во-вторых, питать контроллер (или как минимум его АЦП) хорошо бы через LC-фильтр (да и в даташите так написано), обеспечивая максимальную стабильность по питанию. В-третьих, по мнению авторитетного товарища DIHALT’а, чей опыт для меня не достижим, так что я ему доверяю полностью, в контроллерах AVR АЦП устроен так, что в последних двух разрядах всегда какой-то непобедимый шум, так что АЦП следует считать 8-битным.

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

dENISCA

RС - с какими параметрами ставить ? емкость?
Вот как раз размышляю что не хватает “буфера” для данных, вот их и теряем.

Питание идет с аналогового стабилизатора, к нему вообще нет нареканий.

xius:

но в связи с рождением сына времени нет от слова совсем.

Лиха беда начало.
=))

xius
dENISCA:

RС - с какими параметрами ставить ? емкость?

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

dENISCA:

Питание идет с аналогового стабилизатора, к нему вообще нет нареканий.

Эх, если бы все было так просто… Не существовало бы тогда дорогущих источников опорного напряжения, и не было бы у контроллеров отдельных входов для питания АЦП-модулей. А они есть, а схема подключения через LC в любом даташите нарисована. Это ж-ж-ж не с проста…

dENISCA:

Лиха беда начало.

Денис, как это верно…

dENISCA
xius:

чтобы в результате получился фильтр, через который не проходили бы частоты выше вашей частоты дискретизации, а лучше половины ее.

Точно! Эта мысль меня бы посетила завтра или через неделю. Но спасибо за подсказку, зачем время терять.
Правда у меня мотор сломался, теперь нагрузку негде взять.

По питанию тоже согласен со всем, но мне кажется что в данном случае это пока достаточно.

Udjin
dENISCA:

у меня мотор сломался

Как ты это умудрился сделать?
ж:0))

dENISCA

Поставил винт АРС, вроде отбалансировал.
Первый взлет - вырвало мотор с мотошпангоутом, с кишками. Возник резонанс.
Тушка рухнула вертикально как есть. Вал погнуло. Дома плоскогубцами выпрямил.

Второй полет вроде нормально было, решил дать полный газ и

как то так

blade
dENISCA:

Вал погнуло. Дома плоскогубцами выпрямил.

Мощно задвинул!(С) Уж если приходится такими фокусами заниматься- вал правят на рихтовочной плите с дальнейшей проверкой?
Если учесть, что диаметр мотора (по фото)- 45-50мм, то моща там- в районе 1кВТ? И “дать полный газ” на кривом валу- можно и в лоб винтом получить?
И он вот так стоит, без всякого обдува?Отчаянный вы человек.

dENISCA

Когда я его исправил, то конечно же проверил на биение. Его не было совсем.

Udjin
blade:

И он вот так стоит, без всякого обдува?

Так бывает в некоторых классах моделей …
Похоже отломало, по фото коль судить.

blade
Udjin:

Так бывает в некоторых классах моделей …

А не бывает в этих классах, что мотор- сгорает? Иногда-прямо в полете: доводилось видеть.
ЗЫ: по теме: что то создание “отечественного, недорогого, из отечественных деталей, лимитера”(С)…отодвигается в немыслимую даль? :(В светлое, как раньше говорили, будущее?

Udjin
blade:

А не бывает в этих классах, что мотор- сгорает? Иногда-прямо в полете: доводилось видеть.

Бывает, если перегруженный мотор продолжать насиловать.
Однако, это спорт. Со всеми проистекающими.