Работа сервопривода и двигателей через Motor Shield

source
source аватар
Offline
Зарегистрирован: 20.05.2012

Столкнулся с проблемой при работе двигателей и сервопривода через Motor Shield.

При подключенном сервоприводе двигатели ведут себя странно. Движение назад еще отрабатывают, а на поворотах и вперед -  идет глюк. Если сервопривод отключить, то двигатели начинают работать нормально.

Сперва грешил на питание, но подключил достаточно мозный аккумулятор на 8 ампер 8 вольт и проблема не исчезлаю

Питаю и Arduino Mega 2560 и Motor Shield от этого аккумулятора - перемычка замкнута.

В проекте испольщую серву MG995.

Motor Shiela Adafruit Industries Motor Shield

На даном этапе пытался реализовать такой алгоритм работы:

Движение вперед в течении 5 секунд с поворотом сервы на угол 90 градусов
Поворот вправо в течении 2 секунд с поворотом сервы на угол 180 градусов
Движение назад в течении 5 секунд с поворотом сервы на угол 90 градусов
Поворот влево в течении 2 секунд с поворотом сервы на угол 0 градусов
Остановка двигателей на 3 секунды с поворотом сервы на угол 90 градусов

Мой скетч





#include <AFMotor.h> // Подключаем библиотеку для управления двигателями
#include <Servo.h>   // Подключаем библиотеку для сервоприводом

 //Создаем объекты для двигателей 
 AF_DCMotor motor1(1); //канал М1 на Motor Shield — задний левый
 AF_DCMotor motor2(2); //канал М2 на Motor Shield — задний правый
 AF_DCMotor motor3(3); //канал М3 на Motor Shield — передний правый
 AF_DCMotor motor4(4); //канал М4 на Motor Shield — передний левый.
 
 // Создаем объект для сервопривода
 Servo myservo; 
 
 void setup() {
   // Выбираем пин к которому подключен сервопривод
   myservo.attach(9); // или 10, если воткнули в крайний разъём
   // Поворачиваем сервопривод в положение 0 градусов при каждом включении
   myservo.write(0);  
   // Пауза 5 секунд
   delay(5000);   
 }

 void loop() {
 //Устанавливаем скорость 100% (0-255)
 motor1.setSpeed(255);
 motor2.setSpeed(255);
 motor3.setSpeed(255);
 motor4.setSpeed(255);
 
 // Задаем направление движение
 // FORWARD - вперед
 // BACKWARD - назад
 // RELEASE - стоп
 
 // Движение вперед в течении 5 секунд с поворотом сервы на угол 90 градусов 
 motor1.run(FORWARD);
 motor2.run(FORWARD);
 motor3.run(FORWARD);
 motor4.run(FORWARD);
 myservo.write(90); // Поворот сервы на угол 90 градусов
 delay(5000);
 
 // Поворот вправо в течении 2 секунд с поворотом сервы на угол 180 градусов 
 motor1.run(FORWARD);
 motor2.run(BACKWARD);
 motor3.run(BACKWARD);
 motor4.run(FORWARD);
 myservo.write(180); 
 delay(2000);

 // Движение назад в течении 5 секунд с поворотом сервы на угол 90 градусов 
 motor1.run(BACKWARD);
 motor2.run(BACKWARD);
 motor3.run(BACKWARD);
 motor4.run(BACKWARD);
 myservo.write(90); 
 delay(5000); 
 
 //Поворот влево в течении 2 секунд с поворотом сервы на угол 0 градусов 
 motor1.run(BACKWARD);
 motor2.run(FORWARD);
 motor3.run(FORWARD);
 motor4.run(BACKWARD);
 myservo.write(0); 
 delay(2000);
 
 // Остановка двигателей на 3 секунды с поворотом сервы на угол 90 градусов
 motor1.run(RELEASE);
 motor2.run(RELEASE);
 motor3.run(RELEASE);
 motor4.run(RELEASE);
 myservo.write(90); 
 delay(3000);
 }

Видео с демонстрацией глюка: http://youtu.be/0nWRduwPY9k

Объясните, пожалуйста, где я накосячил

 

maksim
Offline
Зарегистрирован: 12.02.2012

Дело именно в питании, питание серв на шилде берется с дуиновского стабилизатора на 5 вольт, от которого питается и сам МК, в момент когда серва стартует идет просадка напряжения и дуина перезагружается. Запитывайте серву отдельно, но не давайте на нее более 6 вольт, иначе сгорит.

source
source аватар
Offline
Зарегистрирован: 20.05.2012

Спасибо тёска. Откусил провод питания от разъема сервы и подключил его к контакту питания Motor Shield - проблема решилась.

Потом спаяю отдельный стабилизатор для нее.

Модераторы - перенесите пожалуйста тему в раздел Аппаратные вопросы - я не там косяк искал изначально.