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

VitalikV

Это конкурент, небось он сам работает над коммерческим проектом, а мы своей темой ему всю малину обломали))))

Не обращаем внимания и идем дальше))

Маркс

кручу по разному алгоритм, но 2мс в течении которых МК занят обработкой данных гироскопа
обойти красиво ни как не получается, два-три прерывания от мотора за это время проскакивают,
даже на оборотах 4000, а если 10000 то количество прерываний вырастет до10.
значит будем делать не очень красиво.
все что касается обработки прерываний от мотора, включая расчет текущих оборотов,
буду убирать внутрь обработчика прерываний,
предельно оптимизировав код и убрав из него все лишнее.
сейчас вся обработка укладывается в несколько микросекунд, думаю уменьшить до 2мкс
а учитывая, что я знаю все, чем занят процессор, эта “не красивость” ни на что не повлияет )
а корректировка оборотов мотора будет в основном цикле с периодом опроса гироскопа,
т.е. те самые 100 Гц. (100 раз в секунду), думаю этого будет достаточно

Маркс

Совершенно случайно на Али наткнулся на модуль GY25
aliexpress.ru/item/1005005294239615.html?spm=a2g2w…
Он хорош тем, что вся обработка и фильтрация данных от MPU6050 возложена на процессор STM32F030.
Вот бы такой модуль, да с несколькими дополнительными выводами, STM32F030 значительно мощнее процессора ATMEGA328

VitalikV

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

Маркс
Маркс:

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

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

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

Маркс

и что то мне подсказывает, что идея не лишена смысла

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

кстати, взвесил, модуль STM32F401

на картинке он нижний, всего на 2 грамма тяжелее Arduino Pro Mini,
при этом позволяет заливать прошивку через USB Type-C без всяких USB-UART.
И дружит с Uno+LCD-Key, уже проверял в паре проектов.

Маркс

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

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

Задача: до конца марта сделать первый рабочий прототип.
p.s. плату пока не разводил и правильно сделал, без DPM все немного поменяется.

7 days later
Aerobi

Здравствуйте Геннадий, подскажите пожалуйста, каким образом у Вас происходит измерение изменения оборотов двигателя? Спасибо.

Маркс

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

А изменение оборотов двигателя, методом изменения длительности PWM на регулятор.

Маркс

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

Aerobi

И это работает? Но ведь сигнал идёт с регулятора на двигатель, заставляя его вращаться с определённой скоростью, которая не постоянна и всё время изменяется под воздействием внешних факторов. Например, полёт по ветру, двигатель раскручивается и наоборот, против ветра, обороты падают, а длительность импульса меандра будет неизменна пока на входе регулятора не изменится длительность PWM сигнала.

На некоторых регуляторах JETI есть режим “Heli constant RPM” его используют пилоты F2B для стабилизации оборотов двигателя. Интересно, каким образом там отслеживается изменение оборотов двигателя?

Маркс
Aerobi:

И это работает? Но ведь сигнал идёт с регулятора на двигатель, заставляя его вращаться с определённой скоростью

само собой работает )).
на фазовых проводах мотора всплески при прохождении магнитов,
они сдвинуты по фазе, кроме того, поэтому требуется вычитание сигналов.
Контроллер для кордовых электричек #259

Aerobi:

а длительность импульса меандра будет неизменна пока на входе регулятора не изменится длительность PWM сигнала.

а вот про это выше ыло видео, на котором я притормаживал мотор рукой и частота импульсов уменьшалась,
при этом длительность PWM оставалась постоянной.

Aerobi:

На некоторых регуляторах JETI есть режим “Heli constant RPM”

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

Собственно говоря, данная “прослойка” между регулятором и Ардуинкой
предназначена для реализации функции Гувернера на любом, даже самом дешевом регуляторе )

Маркс

Ну вот, скрестил ежа и ужа

пока

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

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

дальше только “причесывание” алгоритма и доведение кросс платы.

Маркс

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

VitalikV

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

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

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

Маркс

это уже все - "про алгоритмы"©
главное гироскоп поженил с гувернером,
ну в том смысле, что они одновременно работают и друг другу не мешают.

Маркс
VitalikV:

Надо добавить работу гироскопа на ноже

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

но это все вторично.

VitalikV:

потом отсчет на добежать на ручку

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

VitalikV:

И в начале на разгоне обороты как то на много меньше полетных

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

VitalikV

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

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

Маркс

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

Маркс

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

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