Контроллер для кордовых электричек

Маркс
VitalikV:

А как вы будете калибровать регулятор без питания?)

значит оставлю так, как это работает сейчас,
при подключении питания сначала идет калибровка регулятора, занимает процесс секунд 6.
в дальнейшем можно будет подумать об отдельной процедуре калибровки.

VitalikV
Маркс:

программатор не видит ни мотор ни обороты

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

У КР таймера нет экрана, там просто кнопки, и для установки оборотов запускается мотор и обороты контролируем тахометром или на слух

Маркс:

я по себе знаю, взлет всегда на максимальных оборотах, а потом я могу летать и на 2/3 газульки.

На кордах это не нужно, полетных оборотов достаточно на взлет с запасом, иначе на вертикалях гувернер не вытянет.

Маркс:

сделал, а в полете на вертикали “проскочил” дребезг контактов и двигатель остановился.
получили дрова.

Лучше самолет в полете, чем обрубленные пальцы при обслуживании модели. Нечаянно ударил по выключателю, дребезг, мотор стартонул.

Маркс
VitalikV:

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

я не знаю, что такое КР таймер, да мне и не интересно, если честно.

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

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

Маркс
VitalikV:

На кордах это не нужно, полетных оборотов достаточно на взлет с запасом, иначе на вертикалях гувернер не вытянет.

ДВС отстраивается на максимальные обороты, на вертикалях обороты растут за счет обеднения смеси.
в нормальном полете, бедная смесь убивает мотор

Маркс
VitalikV:

дребезг, мотор стартонул.

дребезг контактов не может “стронуть мотор”,
он не может запустить мотор, потому что на разомкнутых контактах дребезга не бывает.

VitalikV
Маркс:

ДВС отстраивается на максимальные обороты

Мотор отстраивается на обороты, обеспечивающие нормальные условия для полета, это не максимальные, иначе режим меняться не будет.

Кордовые пилотажные ДВС работают в максимально щедящем режиме и этого режима достаточно для взлета, полета и выполнения фигур.

VitalikV
Маркс:

дребезг контактов не может “стронуть мотор”,
он не может запустить мотор, потому что на разомкнутых контактах дребезга не бывает.

Я вас не понимаю, вы говорите, что замкнуто, это выключено, а теперь говорите что выключено это разомкнуто???

Маркс

резюмирую по вопросу управления.
Вы можете поставить тумблер, но в выключенном Вы должны будете использовать
нормально замкнутую пару контактов из трех.
После подключения питания модели, для активации полетного режимы Вы будете должны разомкнуть эти контакты.
Для остановки процедуры старта их требуется замкнуть.

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

Все мое нутро инженера противится нормально замкнутым контактам при нормальной работе,
чем больше таких контактов, тем больше вероятность отказа, это я еще в “школе” проходил.

Маркс
VitalikV:

вы говорите, что замкнуто, это выключено, а теперь говорите что выключено это разомкнуто???

я не оперирую понятиями включено выключено
потому что, далеко не всегда, ВКЛ обозначает замкнутое,
у тумблеров, как правило, контактов три, и если одна пара замкнута, вторая всегда разомкнута

Маркс:

поставьте выключатель, если Вам так удобнее, но рабочее состояние разомкнуто.

Маркс:

есть кнопка, нормально разомкнутое состояние,

Маркс:

рабочее разомкнутое состояние ?

Маркс:

переход из замкнуто в состояние разомкнуто - таймер стартует

Маркс:

если в первой фазе, опять стало замкнуто, программа останавливается

VitalikV

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

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

Маркс

если кнопка, то разомкнута, если тумблер, то все равно, но лучше разомкнуто.
хотя при постоянно замкнутых контактах тумблера все равно программа не запустится.

VitalikV
Маркс:

хотя при постоянно замкнутых контактах тумблера все равно программа не запустится

Да, но в этом положении, малейшее размыкание, стартует программу, например нечаянно выдернули разъем с тумблера, и таймер стартовал.

Маркс

оставляйте тумблер в разомкнутом состоянии.
я потому про кнопку и говорю, с кнопкой все однозначно.

VitalikV

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

Маркс

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

нельзя “совершенно случайно” нажать на пол секунды кнопку )

это из категории - “я к такому привык”,
но с точки зрения надежности, чем меньше контактов, тем надежнее.

Маркс

туго идет, на каждом шаге приходится совместимость проверять.
программатор к гувернеру уже пристегнул,
осталось этот сэндвич “вкрячить” в программу таймера, или наоборот.
в общем скрестить ежа и ужа )) и что бы оно работало

при этом выходной на работе совсем не означает, что меня не дергают ))
удаленка мать ее так, дернул меня черт в дом 300Мбит от Ростелекома завести.
раньше 40 км от города, интернет только мобильный ), снега по колено, все идут лесом.

Маркс

перенес программатор и гувернер в основную программу таймера,
хотя проще было таймер и программатор вставить в модуль гувернер.
потому как повылазили ошибки компиляции, но это все не беда ).

завтра попробую вычистить баги, их не так много на самом деле.

Маркс

похоже “допилил”, завтра окончательно проверю все в комплексе
выложу видео и все материалы по проекту для повторения и тестирования.
пока без гироскопа, только программирование, работа циклограммы и гувернера.

сделал два “спец модуля”, надоело каждый раз “изобретать велосипед”,
модуль чтения кнопки с программируемой задержкой на нажатие и отпускание (от дребезга).
и модуль “моргульчика” светодиодом с изменением длительностей горит/не горит.

Маркс

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

//************************************************************************************
//  массив настроек программы (скоро уберу)
//************************************************************************************
  uint16_t stack[14] 
  {
  Motor_RPM,                  // обороты мотора в полете
  Motor_ESC_Min_THR,          // минимальный уровень газа, в процентах от максимального
  Motor_ESC_Start_THR,        // уровень газа на старте в процентах от максимального
  Engine_POL,                 // полюсов у мотора
  0,
  Start,                      // время на "убежать к ручке" в секундах    
  Takeoff,                    // время разгона и  взлета                  
  GearUp,                     // момент уборки шасси с момента начала разгона
  InFly,                      // общее время полета с момента старта двигателя минуты секунды
  0,
  0,
  0,
  0,
  0
  };

Добавил

//#define _landingGear      // если ретрактов нет, ставим коммент на эту стоку строку
//#define _debugOn          // если отладка нужна убрать коммент
//#define _gyroOn           // если гироскопа нет, ставим коммент на эту стоку строку
#define CLEAR_EEPROM

что бы не плодить флаги
нижний обозначает, что перед стартом программы она очистит EEPROM и запишет данные из стека.
нужно что бы при отладке гироскопа на компьютере каждый раз не очищать EEPROM

//****************************************************************************************
// обработка нажатия/отпускания кнопки
//****************************************************************************************
#include <Arduino.h>
volatile boolean lastButState;
volatile uint32_t lastButtTime;

void _setupButton (int port)
{
  pinMode(port, INPUT_PULLUP);
}

boolean _button (int port, int timeOut)
{
  if (lastButState && digitalRead(port) && millis()-lastButtTime > timeOut)
  { 
    lastButState = 0;
    lastButtTime = millis();
    return (lastButState);
  }
  if (!lastButState && !digitalRead(port) && millis()-lastButtTime > timeOut)
  { 
    lastButState = 1;
    lastButtTime = millis();
    return (lastButState);
  }
  if (!lastButState && digitalRead(port) || lastButState && !digitalRead(port)) lastButtTime = millis();
//  lastButtTime = millis();
  return (lastButState);
}

обработка кнопки теперь “умная”, но требует инициализации
зато при вызове можно определить минимальное время нажатия или отпускания,
которое будет считаться за действие

//****************************************************************************************
// моргульчик с/диодом
//****************************************************************************************
#include <Arduino.h>
volatile boolean lastLedState;
volatile uint32_t lastLedTime;

void _setupLed (int port)
{
  pinMode(port, OUTPUT);                
  digitalWrite(port, LOW);              
}


void _blinker (int port, int i, int j)
{
  if (lastLedState && millis()-lastLedTime > i)
  {
    lastLedTime = millis();
    lastLedState = !lastLedState;
    digitalWrite(port, HIGH);
    return;
  }
  if (!lastLedState && millis()-lastLedTime > j)
  {
    lastLedTime = millis();
    lastLedState = !lastLedState;
    digitalWrite(port, LOW);
    return;
  }
}

добавил программу моргульчика, в параметрах порт кнопки, время не горим, время горим

Timer_for_Plane_v6.1_wo_Gyro.zip

С ПРОГРАММАТОРОМ ПОКА ИЩУ ПОСЛЕДНИЙ БАГ,
по какой то причине, если два раза подряд считать данные с таймера, данные получаются кривыми
и при записи в таймер все начинает сыпаться, включая таймер, разбираюсь

Маркс

ну и маленькое видео

photos.app.goo.gl/MQAKVWtpDVgAVDC49

сейчас можно все определить в

#define pinButton 11                // порт сервисной кнопки
#define pinMotorESC 9               // порт к которому подключен ESC

#define Motor_RPM 4000              // номинальные обороты мотора в полете об/мин
#define Motor_ESC_Min_THR 10        // минимальны уровень газа, что бы гувернер не остановил мотор, в процентах
#define Motor_ESC_Start_THR 70      // уровень газа при старте модели, в процентах

#define Start 5                     // время отведенное на добежать до ручки, в течении этого времени процедура старта может быть отменена, в секундах  
#define Takeoff 5                  // время отведенное на разгон и взлет, в течении этого времени процедура старта может быть отменена, в секундах  
#define GearUp 5                   // время после начала разгона, начало уборки шасси -  5 секунд 
#define InFly 20                    // время полета в секундах с момента завершения процедуры старта - сейчас стоит 20 секунд

#define delay_g 100                 // коэффициент торможения ))
#define Engine_POL 7                // количество полюсов у мотора разделенное на два


#ifdef _landingGear
#define Port_Left_Wheel 6           // порт к которому подключена серва ретракта левого шасси
#define Port_Right_Wheel 7          // порт к которому подключена серва ретракта правого шасси
#define Left_Wheel_Down 2000
#define Left_Wheel_Up 1000
#define Right_Wheel_Down 1000
#define Right_Wheel_Up 2000
#define Up 1   
#define Down 0                      
#endif

Что сейчас можно делать, даже если у Вас нет кросс платы

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

И МОЖНО ЛЕТАТЬ, но без гувернера
по гироскопу снимать комментарии тоже пока не стоит, я его работоспособность не проверял.
но чисто теоретически, управление оборотами двигателя сейчас немного поменялось,
так что скорее всего он все равно не будет.