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

blade
dENISCA:

Решил заняться их изготовлением

Как с решимостью?
Не угасает?😃
А еще до изготовления “в железе дело” дойдет…

dENISCA
blade:

Как с решимостью? Не угасает? А еще до изготовления “в железе дело” дойдет…

Не понял вопроса.
Я пока никаких трудностей не встретил.

blade
dENISCA:

Осталось решить вопрос аппаратным шимом

Думается, там еще много вопросов по ходу вылезет: это только со стороны кажется, ну подумаешь-фигня какая? Чего там делать?
А как паяло в руки возьмешь:(
А Протеус почему не используешь? Позволяет оттестировать схему без “загона компа в синий экран” и прочих неприятностей.:)Вообще, если бы меня спросили, я бы купил датчик Аллегро, настроил платку с ним (гарантированно- ничего не спалишь) а уж потом- изобретал бы шунты и все прочее.

dENISCA
blade:

А Протеус почему не используешь? Позволяет оттестировать схему без “загона компа в синий экран” и прочих неприятностей.

После прочтения форума по программированию понял чтот это вариант уже пройден и в голове сидит.
Т.к. одно и тоже действие можно реализовать 10 способами, а они в корне зависят от железа и компилятора.
Протеус не одно из условий не выполняет, следовательно этот этап пройден. (архитектуры)
Вторая причина - нет времени на изучения Протеуса.

blade
dENISCA:

Протеус не одно из условий не выполняет,

Вот те раз!
Лет уж 10-15 (не помню, когда он появился) все свои поделки на Протеусе, (причем не только программы, но и схемотехнику) разрабатывал- а тут “не выполняет”?
Сломался он, что ли?😦

V_Alex

Народ неоднократно жаловался, что Протеус джиттер не отлавливает на прерываниях. В компе вроде все гут, а в реале - увы и ах. Кстати, я тоже Протеусом не пользуюсь, первоначальную отладку делаю в АВР-Студио, а дальше - как карта ляжет 😃

dENISCA
V_Alex:

первоначальную отладку делаю в АВР-Студио

Я про тоже, что Протеус только для начала хорош очень. А тараканов он не ловит =(

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

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

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

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