ARDUINO (MPU6050)Дёргание сервоприводов при одновременной работе PID-регулятора и записи данных на SD-карту (Arduino Uno)

Кротовуха

✩✩✩✩✩✩✩
12 Май 2025
1
0
Здравствуйте! Возникла проблема с дёрганием двух сервоприводов при записи данных на SD-карту.

Оборудование:

  • Arduino Uno;
  • Модуль MPU6050;
  • SD-кардридер (5V версия);
  • 2 сервопривода (MG90S);
  • Сервоприводы подключены к отдельному источнику питания.
Описание проблемы:
При одновременной работе PID-регулятора (обработка данных с MPU6050) и записи данных на SD-карту сервоприводы начинают дёргаться. Без записи на SD-карту система работает стабильно. Пытался решить проблему:

  • Подключил сервы к отдельному блоку питания;
  • Увеличил скорость выполнения кода (оптимизировал циклы).
ВОЗМОЖНО ПРОБЛЕМА В ЛОГИКЕ СРАБАТЫВАНИЯ ПРЕРЫВАНИЯ
Помогите, пожалуйста, исправить, уже не знаю, что делать((
 

Вложения

poty

★★★★★★✩
19 Фев 2020
3,459
986
@Кротовуха, думаю, что скорости Uno не хватает, чтобы "параллельно" решать все поставленные Вами задачи. Большинство из того, что делается в коде, является блокирующими операциями. И, скорее всего, при последовательном выполнении (не пересечении блокирующих задач) ничего страшного бы не было, но Ваш "realtime" не даёт никакого шанса.
Впрочем, я могу быть неправ и ошибка может быть и в самом коде.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
591
177
Если в программе на UNO есть код, который запрещает прерывания на длительное время, то сервы будут дергаться при использовании штатной библиотеки Servo.h. Чтобы не дергались, надо использовать аппаратный PWM.
Если у вас только две сервы, и на UNO свободны выводы 9 и 10, то попробуйте использовать библиотеки для серво на аппаратном PWM.
Поиск в менеджере библиотек по словам Servo PWM. Я посмотрел, для UNO есть несколько вариантов (но сам не пробовал).
Servo328 - https://github.com/yashi/Servo328/tree/main
PWMServo - https://github.com/PaulStoffregen/PWMServo

Дополнение. Выше указаны причины возможного подергивания серво от заданного угла в большую сторону при запрете прерываний.
Но в вашем случае дело может быть не в этом, а как писали выше в изменении частоты вызова расчетов. Я не смотрел подробно ваш код.
Поэтому прежде чем пробовать другие библиотеки стоит проверить допустимость частоты вызова расчетов при записи на SD
 
Изменено:
  • Лойс +1
Реакции: Старик Похабыч