Ил-18 Долгий путь к мечте

Гена_Большой

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

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

Гена_Большой

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

заодно разобрался, как можно будет дистанционно править код (через интернет) программы ).
иначе говоря, после того как изделие будет отправлено, я смогу дистанционно удалить выявленные баги.
для этого потребуется только компьютер с USB портом и кабель USB-TypeC

DIM76

Круто. Типа сервис по гарантии… 😀

Гена_Большой

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

а теперь маленькая презентация

DIM76

А скорость и реверс серв потом можно будет менять?

Гена_Большой

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

      	  if (_LFPos3 > _LFPos1) LFstep_ = (_LFPos3-_LFPos1) * cycle_ / timeF_  ;
      	  else LFstep_ = (_LFPos1-_LFPos3) / timeF_ * cycle_ ;
      	  if (_RFPos3 > _RFPos1) RFstep_ = (_RFPos3-_RFPos1) * cycle_ / timeF_ ;
      	  else RFstep_ = (_RFPos1-_RFPos3) / timeF_ * cycle_ ;

вот так считается шаг смещения на каждый такт выполнения операции.
есть конечные точки, есть время выполнения операции и есть длительность одного такта.
для каждой сервы они считаются отдельно.
cycle_ и timeF_ это константы в программе, длительность такта и время на полный цикл,
сейчас для закрылков они составляют 40 мс и 100 мс соответственно

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

вот сейчас заканчиваю “писать” кусок открытия/закрытия створок.

Гена_Большой

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

Гена_Большой

Итого, что на данный момент работает.

  • чтение настроек конечных точек из FLASH.
  • начальная установка сервоприводов.
  1. закрылки - первое положение - убраны
  2. фары - первое положение - убраны
  3. створки шасси - второе положение - открыты
  4. шасси - выпущены.
  • управление фарами с отдельного канала с замедлением
  • управление закрылками с отдельного канала три положения с замедлением
  • управление створками шасси с отдельного канала с замедлением

Что еще не сделано

  • программирование конечных точек надо дописать в части записи настроек во FLASH,
    сейчас во FLASH хранятся базовые настройки, +100 -100 по всем каналам
  • руление носовым колесом
  • не забыть добавить перевод рулевого колеса в среднее положение перед началом уборки шасси.
  • добавить в программирование номера каналов управления закрылками, шасси, фарами.

Пока вроде все что вспомнил.

Гена_Большой

расписал все это и возникла идея для продолжения проекта.
а состоит она в следующем,
у меня есть готовый девайс, который (чисто теоретически) в состоянии получать данные с любого приемника,
имеющего выход типа SBus/iBus и прочие асинхронные последовательные.
так же, есть куча свободных выводов микроконтроллера, на которые можно “повесить” кнопки и светодиоды.
и 12-14 (ограничено необходимостью иметь UART и i2c) PWM выходов.
по сути что то типа интерпретатора LUA (но его я не смотрел и не читал)

хочется замутить нечто типа интерпретатора,
описываешь поведение выходов в зависимости от входных данных,
разные переходы, циклы и прочее )
загружаешь эти данные во FLASH, а дальше программа внутри микроконтроллера их читает и управляет )

Гена_Большой
Гена_Большой:

Что еще не сделано

  • программирование конечных точек надо дописать в части записи настроек во FLASH,
    сейчас во FLASH хранятся базовые настройки, +100 -100 по всем каналам

  • руление носовым колесом

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

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

  • ну и самое главное, циклограмма выпуска/уборки шасси

Пока вроде все что вспомнил.

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

особенность программирования
номер канала считается методом деления значения в поле на 100.
т.е. 100-199 - будет считаться первым каналом, 1100-1199 - 11 каналом, все что больше 1200 - останется 12 каналом ))

в общем, пока хватит, думаю до конца выходных в первом приближении будет готово

Гена_Большой

Пока вспомнил,
Дмитрий, ОЧЕНЬ ВАЖНО, при включении питания этого устройства, чисто механически, шасси должны быть в убранном положении.
Просто потому, что совсем не понятно в каком состоянии при включении будут створки шасси, особенно в режиме первичного программирования.

DmitryK

А что случится, если шасси будут выпущены? Чисто с целью повышения образованности?
Как вариант - при включении сразу открываем створки, убираем шасси, ждем, закрываем створки.

Гена_Большой

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

  1. в режиме программирования, в первый раз, не понятно в каком положении окажутся створки шасси.
    и как только я дам команду на изменение положения стойки, а это надо будет сделать обязательно (начальная инициализация),
    то стойка может убраться через створки ну или выпуститься,
    просто программа не знает в каком положении ретракт
  2. при старте программы в принципе я могу прописать открытие створок и перевод шасси в заданное положение.
Гена_Большой

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

DmitryK
Гена_Большой:
  • программа не знает в каком положении ретракт

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

Гена_Большой

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

про руление носового колесо

  • не вижу смысла программировать конечные точки
  • достаточно запрограммировать реверс, среднее положение и процент от канала РН.

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

Гена_Большой

Закончил режим программирования для носового колеса.
В итоге остановился на трех параметрах:

  • средняя точка, позиция из которой осуществляется уборка стойки и она же начальная для руления.
  • процент реакции от канала РН с аппаратуры, по дефолту стоит 50 процентов, меняется вверх/вниз с шагом 1 за 0,3 секунды. При этом можно смотреть насколько реально будет повернуто носовое колесо, отклоняя стик РН.
  • реверс носового колеса, по дефолту стоит 0, т.е. реверс ОТКЛ, любое значение отличное от 0 трактуется как ВКЛ.
    так же как в предыдущем пункте можно сразу контролировать направление поворота, при движении стика РН.

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

В общем завтра сделаю видео (сегодня уже нет ни сил ни желания).
Постепенно приближаюсь к самому главному, выпуск/уборка шасси.
Но судя по всему это будет не сложная задача )).

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

DmitryK

ЗдОрово! Но у моего варианта руления колесом есть один серьезный недостаток. При слишком сильном отклонении сервы нога может выскочить из прорези в качалке. если, например оттриммировать РП после настройки, в крайнем положении стойка может выпасть, а этого бы не хотелось. А ограничить ход - радиус поворота вырастет. Пока не проверял, насколько, но предвижу …

Гена_Большой

Сначала с минимальным коэффициентом передачи от РН к рулевому колесу, что бы рулилось на взлете и посадке,
после первого полета и тримирования РН в воздухе настраивается среднее положение рулевого колеса,
положение РН и рулевого колеса не зависят одно от другого,
при старте программы она считывает показание канала РН и от этого положения уже пляшет.
суть в том, что после тримирования РН, даже если РН окажется отклонен на 45 градусов,
при следующем включении питания колесо встанет в среднее положение, заданное в программе.
а потом процентами настраивается максимальное отклонение рулевого колеса, при котором “не выпадает”.

Гена_Большой

И кстати, у тумблера GEAR может быть три положения,
вполне могу прикрутить два режима рулевого колеса руление и взлетный,
во взлетном режиме например отклонение колеса 50 процентов от руления или 60, сколько надо в общем ).
Памяти микроконтроллера пока съедено 18 процентов.

DmitryK
Гена_Большой:

И кстати, у тумблера GEAR может быть три положения,

Да, как-то так будет. Два наверное.

9 days later
Гена_Большой

В выходные приступлю к крайнему шагу выпуск-уборка шасси.
Вчера пришла из Китая мелочевка (резисторы, конденсаторы SMD),
сегодня перерисовал плату с учетом выявленных недостатков и переходом на другой камень.

выглядеть будет примерно так.
паять SMD будет тот еще квест )), а их там теперь очень много )

boss

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

Гена_Большой

она не на Ардуине, это на процессоре STM32, Ардуинка не потянула,.
а выпуск/уборка шасси потихоньку продвигаются.