Лимитер отчечественного производства.
А тараканов он не ловит =(
“Кому- и кобыла невеста” (С) дворник Тихон)
Но вообще то, Протеус и АВР студио- вещи очень разные, если не сказать- абсолютно?
И именно тарканов (т.е. схемотехнические ошибки, после которых идет дым) Протеус ловит отлично.У меня во всяком случае:)
жаловался, что Протеус джиттер не отлавливает
Ну, я тут уже писал, чтобы не нарываться на джиттер- надо просто аппаратный шим использовать? Хотя, наикрутейшие ассы и бают, что путем немыслимых ухищрений- они его бороли программно, встает вопрос: а зачем? Тем более, в измерительном приборе с заявленной точностью 1%?
Там как раз мельчайший джиттер- обломает всю малину:(
И потом -придется плату переразводить, ноги менять…
Нет,
шим на точность не влияет почти совсем. Шим влияет на канал газа, типа можно словить помеху на канале.
Но если так то это дурдом а не контроллер =)
типа можно словить помеху на канале. Но если так то это дурдом а не контроллер =)
Из моего типа опыта, когда я делал лет 10 назад самодельный автопилот- именно канал газа был наиболее чувствителен к помехам и джиттеру, вплоть до остановки и перезагрузки ESC.
Ну, если у вас получится сделать это без аппаратного ШИМ- я только порадуюсь.
Ну, я тут уже писал, чтобы не нарываться на джиттер- надо просто аппаратный шим использовать? Хотя, наикрутейшие ассы и бают, что путем немыслимых ухищрений- они его бороли программно, встает вопрос: а зачем?
Это были не Вы, это было не тут,
а в другом совершенно разделе…😃
А именно, в разделе про самодельную электронику. Джиттер не нужно бороть программно, достаточно просто не создавать предпосылок для его появления. Достигается это генерацией фиксированного такта следования импульса и разрешением самого импульса более высоким, чем мертвая зона сервы. А аппаратный ШИМ бывает одновременно нужен для других задач. Впрочем, рецепты приготовления кошек у каждого свои 😃
Не успеваю в теме отписываться. Стоко всего хотелось рассказать…
Для затравки скэтч из первых версий для разговора (мясо)
//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);
}
амперы (0 - 100А)
Извините, не силен в программировании и не очень понимаю, что это значит, но по возможности измерение тока лучше не ограничивать 100 амперами, так как трехбаночная мотоустановка (некоторые на таких летают, я тоже их использую) потребляет более 120А на старте.
Это версия 4-5S, на 3S будет 150А.
Но это не программное ограничение, это ограничение шунта.
В общем есть над чем поразмыслить, т.к. все равно чем-то надо жертвовать.
У меня скорее всего без разницы каким концом втыкать в батарею, в отличие от Юнилога2. Хотя тоже не совсем понимаю почему там не реализовать так же.
Скорее вся хитрость в метрологии.
Вопрос по Юнилогу2:
Форматнул флэшку на ФАТ32, оказалось надо ФАТ16.
Форматнул на ФАТ, но ЮниТулз не хотел создавать системные папки на флэшке, пришлось копировать старые папки.
Это нормально?
Когда стал решать проблему с ШИМом, поначалу казалось просто =))
Потом когда пришел к практике, понял что знания у меня не НОЛь, а даже не знаю с какой стороны подойти!!! Это была сцена из басни “Мартышка и очки”.
Просто был в шоке. Но самое интересное что через 3 часа задача была решена!
Уже начал писать процедуру по измерению длины импульса. Она конечно с первого раза не заработала )))) Но зато дала понять что это уже написано за меня и со второй попытки просто стал искать нужную процедуру и вот что получилось =))))
Ни у кого нет вопросов?
Или видео не понравилось ? =)
Ни у кого нет вопросов?
На все вопросы- мы с V_Alex ответили в самом начале.Я в частности писал, что сформировать нормальный ШИМ импульс- непростая задача?
А ответы появятся, когда изделие заработает по полной программе, а не диодиками замигает:)
Когда стал решать проблему с ШИМом, поначалу казалось просто =)) Потом когда пришел к практике, понял что знания у меня не НОЛь, а даже не знаю с какой стороны подойти!!!
Так задача еще и не решена: где исполнительное устройство (серва а лучше- движок с регулятором) который повторяет входной импульс в состоянии “работа” и молчит, как рыба об лед- когда ручка газа в “0”?
Причем, даже написав процедуру формирования ШИМ можно нарваться на то, что при дальнейшем развитии программы- она начнет глючить от какого нибудь нового прерывания и все придется переписывать по- новой 😦
Так что, до победных маршей- еще ой, как далеко.
Ни у кого нет вопросов?
Рано еще вопросы задавать 😃
Чувствую себя преподавателем, который после лекции задает вопрос: “Вопросы есть?” - а в ответ “нет”.
Значит лекция прошла в пустую, и все невнимательно слушали или смотрели =))
Сервотестер - это имитация приемника.
Лимитер стоит между сервотестором и регулятором.
Мигание светодиодом - это сигнализация-визуализация, для ориентирования.
А теперь смотрим еще раз внимательно.
При подключении батареи, контроллер пропиликал все мелодии, мотор стоит как вкопанный. Начинаем поворачивать ручку, мотор стоит, следовательно лимитер внес мертвую зону (для удобства и для контроллеров Маркус).
Далее мотор запустился, на мониторе видно что график шумов не изменился по сравнению с остановкой. Дрейф в норме.
Доходим до отметки в 7А (это сделано для прогрева), график изменился и светодиод замигал по другому - это значит что мы перешли в другой режим - “подсчета”. В этот момент мотор как работал так и работал - т.е. сбоя в ШИМе не было при переходе между циклами. Прерывания специально не использовал дабы не понятно к чему это приведет.
Увеличиваем мощность, мотор работает ровно до поры до времени пока не просела “батарея” - она мертвая, и еще стенд получился пружинистый - мотор прыгает на нем. На графике/мониторе видно плавное увеличение тока.
Можно конечно было продемонстрировать “принудительное отключение” но 1000Вт на дохлой батарее 3S и 7А нужно было долго ждать. Но по мертвой зоне можно догадаться что это бы произошло 99%. Вот тут то у меня используется прерывание для “ожидания/остановки мотора”.
Прошивка залита уже боевая, поэтому буду тестировать уже погрешность. Потому как что я увидел меня ввергло в шок, и как это считать ХЗ =)))
п.с. Посмотрел еще раз видео. Извиняюсь, сервотестер плохо попал в кадр. В следующий раз буду иметь ввиду.
Первые боевые испытания провалились )))
Вернее вышел глюк, который предчувствовал, и который рано или поздно должен всплыть.
Тест в параллель с ЮНИЛОГОМ показал ошибку подсчета в районе 50% =)))))
Дома подцепив шлейф, данные показали что подсчет идет правильно но почему-то медленно, раза в 1,5. Т.е. Ток и Напряжение измеряю точно, но суммирование идет медленно.
Покумекав, вот что пришло в голову:
Шунт работает в обе стороны, т.е. нулевая точка у него равна 511-512 квантов.
Но ноль плавает в районе "±"3-5 квантов, т.е. если мы вычитаем из текущего значения 512, то можем получить отрицательное значение, что в итоге в сумме будет занижать суммарную энергию. Данным побочным эффектом я пренебрег, т.к. при увеличении тока мы в итоге уходим от отрицательного значения, а в начале такие маленькие токи игнорируются при подсчете.
Но на практике оказалось, что при токе 12-14А и 5S, график тока просто шокирует, он летает в обе стороны все время. График очень походит на модулированный сигнал. Конечно может на него влияет сам ШИМ управления, не могу это полностью отрицать, но мне больше верится что причина в переходных процессах, которые не до конца понимаю. И скорее всего инженеры КАСТЛа не лукавили, когда говорили о максимальных импульсах тока в раза три больше чем номинальный ток. Вот так.
В итоге в первой итерации, нулевую точку снизил на 7 квантов - до 504. Все значения стали больше нуля. Значение суммарной энергии выровнялось с ЮНИЛОГОМ. Надо еще пару тестов сделать, единственно проблема посчитать на макс мощности - уж больно страшно =)
Но скорее всего надо оставить за НОЛЬ 512 квантов, а значение делать по модулю, т.е. в любом случае получать положительное значение при любом направлении тока.
Как думаете?
п.с. В общем, обработка данных - это та еще штука, надо иметь опыт для этого.
ТИшина на форуме =)
Вчера сделал НОЛЬ по модулю, ноль стал кучнее =)
Но считает все равно медленнее.
Есть два пути: быстрый и правильный
быстрый - зарезать лимит энергии.
правильный - разобраться в чем соль.
М.б. у меня происходит измерение по спаду импульса, поэтому ТОК в подсчет попадает ниже среднего.
Как проверить?
М.б. попробовать увеличить частоту измерений или уменьшить?
Или “откалибровать” по факту - ручным подбором коэффициентов?
Денис!
Только сейчас заметил вашу тему. Имею кое что сообщить. Делал я однажды счетчик махов в рамках темы тут. Я там все сделал на шунте, правда контроллером был PIC и токи были поскромнее. И шунт я калибровал программно.
Сейчас кое чего сделал бы не так…
Во-первых, перед АЦП настоятельно рекомендуется поставить RC-фильтр.
Во-вторых, питать контроллер (или как минимум его АЦП) хорошо бы через LC-фильтр (да и в даташите так написано), обеспечивая максимальную стабильность по питанию. В-третьих, по мнению авторитетного товарища DIHALT’а, чей опыт для меня не достижим, так что я ему доверяю полностью, в контроллерах AVR АЦП устроен так, что в последних двух разрядах всегда какой-то непобедимый шум, так что АЦП следует считать 8-битным.
Крепко жму руку, с удовольствием бы помог в разработке девайса, но в связи с рождением сына времени нет от слова совсем.
RС - с какими параметрами ставить ? емкость?
Вот как раз размышляю что не хватает “буфера” для данных, вот их и теряем.
Питание идет с аналогового стабилизатора, к нему вообще нет нареканий.
но в связи с рождением сына времени нет от слова совсем.
Лиха беда начало.
=))
RС - с какими параметрами ставить ? емкость?
Я тут не стану расписывать все тонкости, да и наврать что-нибудь могу, но вот тут очень доходчиво про это рассказано. В вашем случае, очевидно, параметры надо подобрать так, чтобы в результате получился фильтр, через который не проходили бы частоты выше вашей частоты дискретизации, а лучше половины ее.
Питание идет с аналогового стабилизатора, к нему вообще нет нареканий.
Эх, если бы все было так просто… Не существовало бы тогда дорогущих источников опорного напряжения, и не было бы у контроллеров отдельных входов для питания АЦП-модулей. А они есть, а схема подключения через LC в любом даташите нарисована. Это ж-ж-ж не с проста…
Лиха беда начало.
Денис, как это верно…
чтобы в результате получился фильтр, через который не проходили бы частоты выше вашей частоты дискретизации, а лучше половины ее.
Точно! Эта мысль меня бы посетила завтра или через неделю. Но спасибо за подсказку, зачем время терять.
Правда у меня мотор сломался, теперь нагрузку негде взять.
По питанию тоже согласен со всем, но мне кажется что в данном случае это пока достаточно.
у меня мотор сломался
Как ты это умудрился сделать?
ж:0))
Поставил винт АРС, вроде отбалансировал.
Первый взлет - вырвало мотор с мотошпангоутом, с кишками. Возник резонанс.
Тушка рухнула вертикально как есть. Вал погнуло. Дома плоскогубцами выпрямил.
Второй полет вроде нормально было, решил дать полный газ и
как то так
Вал погнуло. Дома плоскогубцами выпрямил.
Мощно задвинул!(С) Уж если приходится такими фокусами заниматься- вал правят на рихтовочной плите с дальнейшей проверкой?
Если учесть, что диаметр мотора (по фото)- 45-50мм, то моща там- в районе 1кВТ? И “дать полный газ” на кривом валу- можно и в лоб винтом получить?
И он вот так стоит, без всякого обдува?Отчаянный вы человек.