Контроллер для кордовых электричек
все что касается обработки прерываний от мотора, включая расчет текущих оборотов,
буду убирать внутрь обработчика прерываний,
не получилось, два дня бился и ОНО меня в итоге добило,
пока программа в прерывании сбивается цикл библиотеки 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 все немного поменяется.
Здравствуйте Геннадий, подскажите пожалуйста, каким образом у Вас происходит измерение изменения оборотов двигателя? Спасибо.
Добрый вечер, чуть выше было, в двух словах беру сигналы с двух фаз мотора,
фильтрую от высокочастотных помех и вычитаю на операционном усилителе,
работающем в режиме насыщения, на выходе получаю чистый меандр.
Подаю меандр на вход прерывания МК, а дальше уже простая математика.
А изменение оборотов двигателя, методом изменения длительности PWM на регулятор.
Вот только сейчас процесс опять притормозил, здоровье шалит, а основная работа напрягает.
Но есть надежда к концу марта рабочий таймер сделать.
И это работает? Но ведь сигнал идёт с регулятора на двигатель, заставляя его вращаться с определённой скоростью, которая не постоянна и всё время изменяется под воздействием внешних факторов. Например, полёт по ветру, двигатель раскручивается и наоборот, против ветра, обороты падают, а длительность импульса меандра будет неизменна пока на входе регулятора не изменится длительность PWM сигнала.
На некоторых регуляторах JETI есть режим “Heli constant RPM” его используют пилоты F2B для стабилизации оборотов двигателя. Интересно, каким образом там отслеживается изменение оборотов двигателя?
И это работает? Но ведь сигнал идёт с регулятора на двигатель, заставляя его вращаться с определённой скоростью
само собой работает )).
на фазовых проводах мотора всплески при прохождении магнитов,
они сдвинуты по фазе, кроме того, поэтому требуется вычитание сигналов.
Контроллер для кордовых электричек #259
а длительность импульса меандра будет неизменна пока на входе регулятора не изменится длительность PWM сигнала.
а вот про это выше ыло видео, на котором я притормаживал мотор рукой и частота импульсов уменьшалась,
при этом длительность PWM оставалась постоянной.
На некоторых регуляторах JETI есть режим “Heli constant RPM”
не только Jeti, на вертолетных регуляторах есть режим Гувернера,
настраиваются “полки” оборотов мотора и есть возможность переключения между ними.
Гувернер старается, в меру сил, обеспечить заданные обороты,
в том числе и в случае снижения напряжения батареи
Собственно говоря, данная “прослойка” между регулятором и Ардуинкой
предназначена для реализации функции Гувернера на любом, даже самом дешевом регуляторе )
Ну вот, скрестил ежа и ужа
пока
- на макетке
- реакция только на угол тангажа, при превышении 30 градусов гироскоп поднимает обороты на 15 процентов.
но главное симбиоз работает, дальше дело за алгоритмом оценки положения модели в пространстве
дальше только “причесывание” алгоритма и доведение кросс платы.
кста, вот теперь можно делать вторую версию кросс-платы.
с кнопкой, светодиодами состояния, разъемом для программатора и прочими (а вдруг) фенечками
Надо добавить работу гироскопа на ноже, обязательно, так как на ноже угол тангажа равен нулю, но при этом модель находится на вершине сферы.
И после нажатия кнопки старта, надо сделать кратковременный пуск мотора и потом отсчет на добежать на ручку. А то лампочки не видно под капотом.
И в начале на разгоне обороты как то на много меньше полетных, надо разгон побыстрее, либо сделать обороты равным полетным, так привычнее взлетать будет.
это уже все - "про алгоритмы"©
главное гироскоп поженил с гувернером,
ну в том смысле, что они одновременно работают и друг другу не мешают.
Надо добавить работу гироскопа на ноже
там на самом деле много вопросов,
пока не совсем понятно, как определять положение модели в пространстве,
какие углы будет выдавать гироскоп в перевернутом полете,
тоже самое касается вопроса полета на ноже.
в общем буду строить “таблички и графики” ))
может придется данные акселерометра задействовать,
иначе как определить, где верх, а где низ.
но это все вторично.
потом отсчет на добежать на ручку
время “добежать” определяется в режиме программирования,
светодиод, а может даже пару, вместе с кнопкой управления
можно вообще вынести на проводах
если так стоит сделать, надо сразу предусмотреть.
хотя, я могу на плате контактные площадки сделать и при желании три провода припаять.
И в начале на разгоне обороты как то на много меньше полетных
эти обороты тоже настраиваемые,
для демонстрации я сделал маленькими, что бы разница была ощутимая,
в реале на взлете обороты должны быть выше полетных номинальных,
разогнать модель надо.
в этом режиме ни гироскоп ни гувернер не работают.
заданное время мотор отрабатывает с заданными оборотами,
а точнее на регулятор подается заданный в режиме программирования PWM
Это уже большой прогресс, так как пока только один таймер есть на котором и то и то работает.
Обычно гувернер на регуляторе, а гироскоп на таймере, а тут уже все вместе и на дешевой ардуинке, это здорово!
В общем, на днях, а может даже раньше, допилю кросс-плату,
осталось совсем не много )), собственно говоря начать и закончить (шутка 80 процентов сделано) )
и попробую собрать до кучи первый прототип.
возникла маленькая трудность.
модуль MPU-6050 лучше всего работает, если проинициализирован в горизонтальном положении.
если его в момент инициализации поставить на ребро, не очень охотно калибруется
и даже после калибровки данные сильно “плывут”.
в общем варианта два, таймер единым блоком и размещение на крыле модели горизонтально,
либо делать выносной модуль с гироскопом и индикацией.
Первый вариант мне нравится больше ), но не все потеряно, попробую разобраться, а вдруг …
Я сразу предлагал делать все отдельными модулями. 6050 есть несколько форм факторов , искать именно под кросс плату, не факт что будут в наличии. И с размещением вопросов меньше. Просто выносим гироскоп на проводах, как отдельный модуль, индикация там не нужна.
У Clim and Dive таймера, калибровка вообще веселая, как у квадрика, но только по двум осям)) Сначало в одном положении подержать, потом в другом. Благо это делается всего один раз. Оси для калибровки, можно задать программно, т.е. нет необходимости крепить его горизонтально.
у меня нет другого варианта исполнения модуля MPU6050,
да если бы был, не факт что сама микросхема была бы другой.
с осью Z у этого модуля реальные трудности,
сейчас достал из закромов полудохлый модуль GY521, у него те-же трудности.
он тоже не хочет нормально работать, если его поставить на ребро.
так что крепить все равно горизонтально.
калибровку делать каждый раз необходимости не будет.
но периодически делать калибровку все таки придется,
эти датчики реагируют на изменение магнитного поля.
У Clim and Dive
я не знаю как оно сделано у них,
я вижу, что поставленный на ребро гироскоп не правильно выдает углы по оси Z.
это та которая направлена перпендикулярно кристаллу.
при изменении угла на 90 градусов гироскоп показывает отклонение не больше чем на 45.
в принципе, если понять закономерность, можно и с такими цифрами “иметь дело”
а кроме того, данные по другим осям тоже начинают скакать, вероятно связано с модулем акселерометра
он то реагирует на ускорение свободного падения.
Я сразу предлагал делать все отдельными модулями.
Виталий, отдельные модули это куча проводов.
вот например, вынести гироскоп отдельно потребует шлейф из пяти проводов /SDA-SCL-+5V-GND-INT/
кнопка со светодиодом еще три провода
гувернер повесить на проводах к ардуинке и ESC, это еще 6 проводов )
ИМХО моноблочная конструкция предпочтительнее, ну разве что кнопку и с/диод вынести на отдельную плату.
ну в общем с калибровкой в вертикальном положении вроде разобрался,
но если это положение базовое, то ошибки накапливаются просто с огромной скоростью.
есть подозрение, что все варианты калибровок заточены под горизонтальное расположение кристала.
Ну в принципе это не проблема, можно и площадку примастырить под горизонтальное положение.
А если использовать не гироскоп, а акселерометр? Там так же все печально?