Контроллер для кордовых электричек
Кстати онлайн запись в таймер не нужна, записывать, я думаю лучше, после настройки всех параметров
Это само собой, крайний пункт меню, до которого я не до листал, как раз WRITE.
про секунды и минуты, все понял, это сделать не трудно, я могу сделать например
при изменении временных параметров множитель будет переключать секунды, десятки секунд, минуты.
т.е. х1 - секунды, х10 - десятки секунд до 60, х100 - минуты,
Вверх/вниз -шаг 60, влево/вправо -шаг 1
совсем не просто менять логику работы кнопок,
сейчас - вправо/влево - листаем пункты, вверх/вниз - меняем значения,
что бы поменять назначение кнопок, придется делать второй уровень вложенности программы.
а смысла в этом большого нет ), на мое скромное ИМХО.
завтра попробую поправить минуты и секунды
в общем, предлагаю пока ограничится - AS IS (как есть), а потом всегда можно доработать ))
завтра сделаю минуты/секунды и займусь обменом с таймером.
есть еще вариант, SELECT выбирает разряд, который надо поменять, он начинает мигать, UP/DOWN его меняют.
как заставить мигать я знаю, надо подумать про алгоритм )
Да, можно как в часах селект минуты, селект секунды и кнопка ввод (сохранить) . Это не принципиально. Если разделить на минуты и секунды, и избавиться от миллисекунд, то это то что надо.
Как бы основное назначение программатора, это облегчить настройку таймера, то как отказ от ноута, и упрощенная визуализация параметров.
Желательно получить обратную связь по программируемым параметра,
достаточно тех что есть или я что то важное упустил ?
Потом добавить будет сложнее, чем прямо сейчас “напихать лишних и ненужных”,
я могу, на всякий случай, впиндюрить в код штуки по три временных и числовых параметров,
ну и парочку булевых (включен/выключен), обозвать их Plug(заглушка)1-Plug(заглушка)8 например.
Наверное так и сделаю, пусть будут про запас
Моё видение: подключились к таймеру, прочитали настройки, изменили настройки, записали в таймер.
int Stack [] { // программирумые параметры Motor_ESC_Normall_THR, // нормальные обороты мотора Motor_ESC_Landing_THR, // обороты мотора при посадке InFly, // общее время полета с момента уборки шасси Takeoff, // время на "убежать к ручке" GearUp, // момент уборки шасси с момента старта Landing // время на посадку. };
нет параметра “выпуск шасси”
нет параметра “выпуск шасси”
в программе таймера выпуск шасси происходит после уменьшения оборотов двигателя до Motor_ESC_Landing_THR.
Параметр выпуска уборки шасси , можно сделать отключаемым, в спорте не используют. Это чисто для понтов)) Обороты мотора при посадке, так же надо добавить вкл выкл, так как посадка происходит с выключенным мотором. За работающий мотор судьи могут наказать. У многих на таймерах по окончании полета, включается тормоз мотора, и при планировании винт не вращается даже от набегающего потока.
Параметр выпуска уборки шасси , можно сделать отключаемым, в спорте не используют.
функционал есть в программе таймера, был изначально заложен “по просьбе”
все что касается шасси очень просто убирается,
#define Landing_Gear // если ретрактов нет, ставим коммент на эту стоку строку
но вот временные параметры в настройках убрать нельзя,
их достаточно игнорировать, они ни на что влиять не будут )
Обороты мотора при посадке, так же надо добавить вкл выкл, так как посадка происходит с выключенным мотором.
это лишнее, достаточно изменить параметр
Motor_ESC_Landing_THR
и сделать его равным
#define Motor_ESC_Min_THR 800 // двигатель стоп
но на самом деле, изначально “посадочные обороты” были сделаны для того,
что бы показать пилоту, что время полета истекает, пора подумать о посадке )
так что вполне можно сделать пониженными, но при этом уменьшить параметр
#define Landing 20 // время в секундах отводимое на посадку, в течении этого времени будут выпущены шасси и снижены обороты мотора до посадочных
кста, в скетче увеличение оборотов при старте и уменьшение при посадке происходит плавно,
постоянная времени тоже настраиваемая.
за изменение оборотов двигателя отвечает
boolean Engine_Proc(int j1, int i1)
ИМХО: по окончании полётного времени делаем три коротких сброса оборотов (0,75 от номинала на 1 сек с промежутками 1 сек.)
пример того как это сделано у меня на учебной
speedController.writeMicroseconds(fullPower * 0.75); //1500 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.95); //1900 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.75); //1500 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.95); //1900 мксек//
delay(500);
speedController.writeMicroseconds(fullPower); //2000 мксек//
и через 10 секунд глушим двигатель (примерно 2 круга, больше не надо). Тормоз настраивается в ESC (обязательно! Если винт при касании земли будет вращаться, то посадка в зачёт не пойдёт).
delay(500);
я его никогда не использую ), разве что при тестировании чего нибудь.
это правило плохого тона в программировании тормозить программу.
но идея понятна и реализуема, когда дойдет до правки программатора, добавлю.
это правило плохого тона в программировании тормозить программу.
Верю, но я в программировании не силён.
но на самом деле, изначально “посадочные обороты” были сделаны для того,
что бы показать пилоту, что время полета истекает, пора подумать о посадке )
так что вполне можно сделать пониженными, но при этом уменьшить параметр
Как Роман написал выше, не нужны обороты на посадке, делается именно кратковременный сброс оборотов. Если вдруг не рассчитал время и обороты упадут до посадочных на фигуре, то это дрова.
И изначально речь шла об этом же, за пять-десять секунд, до конца, кратковременный сброс оборотов. Видимо на том этапе как раз упустили этот момент.
пока ковыряю программатор )
на работе “дело было вечером, делать было нечего”(с)
прикинул в первом приближении как может выглядеть таймер в одноплатном варианте
слева ATMEGA328P, справа MPU6050, нижний левый разъем на регулятор, правый для программатора.
это так со скуки нарисовал, выдалось пол часика свободного времени, а ардуинки под рукой не было ).
но на этом макете отсутствует стабилизатор напряжения на 3,3В,
что бы не загонятся вопросом согласования уровней
и кварца, но без него думаю вполне можно обойтись.
опять же, кнопки режимов и индикатора (с/диод) показывающего, что все включено ))
но в этом решении есть подводные СКАЛЫ, ATMEGA328p и MPU6050 отдельными камнями,
стоят на Али дороже чем готовые платы Ардуино Мини и GY521
ATMEGA328p и MPU6050 отдельными камнями,
стоят на Али дороже чем готовые платы Ардуино Мини и GY521
О том и речь, а плюс еще обвес и платы где то заказать, одну две штуки делать никто не будет. Поэтому заменой ардуино, может быть любая другая плата в продаже.
ATMEGA328p и MPU6050 отдельными камнями,
стоят на Али дороже чем готовые платы Ардуино Мини и GY521
Верно, поэтому использование ардуино подобных платок с периферией считаю экономически обоснованными и наиболее простым в реализации руками пионерофф.
а плюс еще обвес и платы где то заказать, одну две штуки делать никто не будет.
JLCPCB изготовит и отправит от пяти штук в двухстороннем исполнении.
обвес стоит совсем копейки, рублей на 15 в том виде как на картинке.
Да все понятно, это так, от нечего делать )
Решил изменить немного логику переменных параметров.
Те параметры которые определяют обороты двигателя сделаю в процентах от максимальных.
Временные параметры сделаю минуты и десятки секунд.
Тогда не придется устраивать “лишние трудности” в виде разбиения на тысячи, стони, десятки и изменение каждого числа.
Если такой вариант не устроит, напишите.
Сегодня, позднее, продемонстрирую первую версию, осталось немного “причесать”.
Вот как раз вопрос стоит ухода от процентов, милисекунд и прочего, и привидение в читаемый вид. Так как не понято 10 000 оборотов, это сколько в процентах… . Если есть возможность использовать точные велечины, то лучше оставить их. Т. Е. Если я знаю, что мой винт работает в диапазоне от 10 до 12 тысяч, то на таймере выставляю 11 и дальше либо добавляю, либо убираю. И по времени так же, на полет у меня 6минут 15 секунд, их и выставляю, потом меняю в нужную сторону. Выщитывать проценты и милисекунды , ну очень не удобно.
Виталий, у нас нет данных о реальных оборотах двигателя.
На данном устройстве отсутствует датчик оборотов.
Может быть, потом смогу придумать, как его реализовать, но пока не придумал.
Моторы разные, количество витков тоже, можно измерить частоту фазы на выходе регулятора,
но это даст не много. Потому как, на разных моторах будут получаться разные обороты,
даже если у них одинаковый кВ
Пока речь идет только о длительности сигнала PWM либо о процентах от длительности.
Сейчас в скетче за базу взяты 2200 мкс для максимальных оборотов и 800 мкс для минимальных,
от этих значений калибруется регулятор.
Вот проценты от тех самых 2200 и будут меняться
Примерно обороты можно посчитать
3S 12В 1200кВ 80%
1200 х 12 х 0.8 = 10560, но это число совсем не точное, батарейки разные, реальное напряжение тоже
А дальше, в руках, дождались запуска, измерили обороты тахометром получилось например 11000
внесли поправку 0,9 и опять измеряем.
Но все равно должно быть меньше 1, потому как при увеличении тангажа таймер будет увеличивать обороты до максимальных