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

dENISCA

Почти финальная схема для лимитера F5D:

Даже если поставить шунтовый резистор, схема всего чуть изменится. Больше всего придется править код, т.к. там будет совсем другая математика.
В общем, что на хола что на шунте - нужно будет проверять направление тока, т.к. есть подозрение что при скачках будут отрицательные импульсы - мы же их не будем вычитать ))) правильно? =)

Датчик Хола измеряет ток в обе стороны в диапазоне -200 +200 А - автомобилисты счастливы наверное =)

п.с. вот уже два вопроса сняты =)

igor_bily

Напряжение мерить правильно до датчика тока или после?

V_Alex

ИМХО, без разницы. Для шунта оно принципиально, а в аллеграх медная шина идет.

dENISCA

Чет отвлекся на другие проблемы.
На неделе программирование встало 😃, но решил вот какую проблему:

В целях обратной связи было использование соединение по СОМ порту на скорости 9600.
С него получал калибровочные данные и проверял корректность работы.
В один прекрасный момент программатор стал вешать комп в синий экран. Причем комп не глючный, стоит 7ка.
Провозился 2 дня, причем само зависание происходит через несколько секунд после подключения меги328.
Методом подбора обнаружил что проблема в дровах. Стоят сейчас Prolific 1.12.
Откатывался на 1.09 - не помогло - разные манипуляции делал - не помогло, и с бубном прыгал и т.д. и т.п…
В итоге после апдейта с 1.09 на 1.12 сделал следующее:

  1. Подключил программатор с мегой328 в USB
  2. Очень быстро зажал кнопку РЕСЕТ и держал
  3. Запустил Ардуину, быстро выбрал скетч Blink
  4. Компильнул, нажал ЗАГРУЗИТЬ
  5. В момент зажигания синего диода ОТПУСТИЛ РЕСЕТ
  6. Мега перешилась
  7. Залил обратно свой скетч и все стало хорошо.

Видать в последнюю загрузку комп глюканул, в результате прошивка криво записалась.

Сейчас уверено считаем 1000вт/ч, с индикацией работы.
Старт сделал по достижении тока 7А
Осталось решить вопрос с аппаратным шимом.
После прихода датчиков инженеринг версия будет тестироваться.

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

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