Использование Servo на Timer3 на Leonardo

Я хотел бы использовать библиотеку Radiohead и управлять сервоприводом с той же платы Leonardo.

Теперь библиотека Radiohead занимает timer1 и поэтому не может использоваться вместе с библиотекой servo. (Он предлагает использовать timer2, которого нет у Leonardo.)

Есть ли другие библиотеки Servo, использующие timer3 или timer4, которые есть у Leonardo?

Я уже пробовал:

  • https://github.com/nabontra/ServoTimer2 не компилируется
  • https://www.pjrc.com/teensy/td_libs_TimerOne.html не работает (вызов функции блоки)

, 👍2


3 ответа


1

Можно ли использовать эту ШИМ-версию библиотеки Servo, написанную для Arduino MEGA? Глядя на код, похоже, что вам придется удалить блоки кода «else if (pin == 44)» и «else if (pin == 45)» в функциях attach() и detach() в Update. Servo_Hardware_PWM.cpp. Тут только предположить. Я не пробовал.

https://github.com/dadul96/Arduino-Servo-Hardware-PWM-Library

,

Комментарий анонимного пользователя: «Извините, это не сработает. Я проверил таблицу данных ATMega32u4, и таймеры 3 и 4 не могут использоваться для изменения состояния контакта. Так что нет, аппаратное сервоуправление с использованием приведенного выше кода на Леонардо.`, @Greenonline


1

Вы можете попробовать вручную отправить сервоимпульсы, например:

digitalWrite(SERVOPIN,HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(SERVOPIN,LOW);

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

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

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

,

1

В файле ServoTimers.h стандартной библиотеки Arduino Servo измените таймер

#elif defined(__AVR_ATmega32U4__)
#define _useTimer3
typedef enum { _timer3, _Nbr_16timers } timer16_Sequence_t;

в Windows файл ServoTimers.h находится в C:\Program Files (x86)\Arduino\libraries\Servo\src\avr

,

спасибо, но это приводит меня к ошибке компиляции, описанной здесь: https://forum.arduino.cc/index.php?topic=527356.0, @clamp

вы получите эту ошибку, только если не измените номер таймера на 3, как я пишу в ответе., @Juraj

окей исправил ошибку компиляции. теперь проблема в том, что как только сервопривод подключен (контакт 5), библиотека Radiohead, похоже, перестает работать., @clamp

может ли это быть проблема с питанием?, @Juraj

возможно, я попробую запустить его с внешним источником питания, а не с USB., @clamp

Интересно, что внутренний светодиод начинает пульсировать через несколько секунд после того, как я подключаю контакт сервопривода. он останавливает это снова через несколько секунд после отключения., @clamp