Приветствую! Столкнулся с проблемой, разрабатываю коптер на бесколлекторных моторчиках. Столкнулся с проблемой, моторы рывками дергаются при перемене тяги. Тягу меняю используя библиотеку Sero, методом servo.writemicroseconds , где 1000 минимальная а 2000 максимальная. При запуске простенькой программки проблемы не возникает. Возможно ли что программа слишком загружает ардуину (pro mini)? или существуют конфликтующие прерывания? или может быть пины которые использованы, используются другими службами? Прикрепляю видео, на котором слышно рывки, а на 0:45 гладкая работа на программе по простому разгону моторчика. Также прикрепляю код, на 175 строке в файле ArduinoFrimware.ino идет управление моторами. Видео: Код: https://puu.sh/C3bzg/003010d86c.zip
Код мой, использую сторонние библиотеки для MPU. А также незнание как работают встроенные библиотеки вроде Servo.h создают предположения
Навскидку предложу идею - если ваши моторчики с явно-выраженными полюсами (ротора) - такие называются Синхронники. Если резко менять частоту на обмотках, особенно когда ротор нагружен инерцией, он выходит из синхронизма и начинаются биения. Единственный способ здесь - медленное изменение частоты. Если же у вас асинхронники - я пасс. ПС. Возможно использование датчиков поворота ротора с соотв. алгоритмом изменения частоты - могло бы препятствовать вылету из синхронизма.
Я тоже так думал. Делал тест, рандомно прибавлял или отнимал тягу в разных промежутках (delay) на простой программе. Все работало гладко.
Вопрос из любопытства - Моторчики- синхронники или асинхронники ? Дела с этими вертолетами не имел...
Ничего я там не понял, или мне это не дало. Важно мне понять, влияют ли сторонние прерывания на работу Servo.h ?
Проблема решена! Причиной было что SoftwareSerial и Servo используют прерывания. Что недопустимо для работы второго. Решить проблему можно тремя путями Альтернативной библиотекой СофтСериала - AltSerial Альтернативной библиотекой Сервы - Servo2, ServoTimer2 Использование хардварных RX, TX с обесточиванием или замыканием резета на другом серийном устройстве при перепрошивке.