- Код: Выделить всё • Развернуть
#define NUM_SERVOS 1
#define SERVO0_PIN 31
#define ENABLE_AUTO_BED_LEVELING
#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 165,60} // X,Y,Z Axis Extend and Retract angles
В общем, все как полагается. Использую Arduino 0023. Серва запитана и включена в нужный сигнальный пин. Комплирую, заливаю прошивку. Даю в пронтерфейсе команду M280 P0 S90 - (повернуть серву 0 на какой-то угол) - реакции нет. Даю команду с другим углом - тоже никакой реакции. Подключаю осциллограф - сигнала нет.
Чтобы проверить серву, делаю тестовую программу, двигающую серву. Заливаю программу - серва двигается. Делаю вывод что все подключено правильно.
Начинаю разбираться с прошивкой. В файле marlin_main.cpp нахожу ветку, отвечающую за код M280. Убеждаюсь, что все нужные переменные определены и команда servos[servo_index].write(servo_position); должна выполняться. Для пробы делаю следующее - в месте, где дается команда на поворот вставляю свой код типа
- Код: Выделить всё • Развернуть
Servo s;s.attach(31);s.write(180);s.detach();SERIAL_PROTOCOL("Test servo moving");
В общем, вопрос понятен - куда смотреть? В комплекте прошивки marlin идут свои файлы servo.cpp/servo.h, они отличаются от аналогичных файлов для arduino 0023. Заменить прошивочные файлы ардуиновскими не получилось - ругается на что-то там. Куда смотреть, подскажите? В общем варианта 2 - либо мой порт 31 используется чем-то еще - но я пробовал несколько портов, результата нет. Либо тайминги для сервы выставлены неправильно в марлиновской прошивке. Серва TowerPro MicroServo SG90.