Как подсоединять быстро два обычных мотора к Motor Shield R3

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Ответить
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1018
Зарегистрирован: 22 окт 2010, 23:57

Как подсоединять быстро два обычных мотора к Motor Shield R3

Сообщение Mr.Kubikus »

Можно ли где-то посмотреть как подсоединять быстро два обычных мотора и тестовую программку ? Моторы двухпроводные.
Обычные моторы (коллекторные ДПТ) можно подсоединять по следующей схеме:
motor-shield-r3-connection.jpg
motor-shield-r3-connection.jpg (81.42 КБ) 20129 просмотров
Простейшая тестовая программка получается из модифицированного скетча Fading:

Код: Выделить всё


int M1Pin = 3;    // M1  connected to digital pin 3
int M2Pin = 11;   // M2  connected to digital pin 11

void setup()  {
  // nothing happens in setup
}

void loop()  {
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
    // sets the value (range from 0 to 255):
    analogWrite(M1Pin, fadeValue);        
    analogWrite(M2Pin, fadeValue);        
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  }

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
    // sets the value (range from 0 to 255):
    analogWrite(M1Pin, fadeValue);        
    analogWrite(M2Pin, fadeValue);        
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  }
}
С уважением, Григорий
GitHub FB ВК
FLY-NC
Сообщения: 1
Зарегистрирован: 20 фев 2012, 11:44

Re: Как подсоединять быстро два обычных мотора к Motor Shiel

Сообщение FLY-NC »

Спасибо за ответ
OlegerCA
Сообщения: 38
Зарегистрирован: 28 фев 2012, 18:03

Re: Как подсоединять быстро два обычных мотора к Motor Shiel

Сообщение OlegerCA »

Программа для обычного моторчика


Из описания Arduino Motor Shield R3:

Для канала A:
ШИМ: D3
Направление вращения: D12
Торможение: D9
Токовое считывание: A0

Для канала B:
ШИМ: D11
Направление вращения: D13
Торможение: D8
Токовое считывание: A1

Приведу простой пример программы для управления двигателем канала A. В программе не будет использоваться торможение или токовое считывание. Реализовано простое движение мотора сначала вперёд в течение 3х секунд, пауза 1 секунда, затем тоже самое, но в обратном порядке. Обращаю ваше внимание, что действия будут повторяться так как программный код обрабатывается процессором циклически.

int ServoPin = 3; // Привод подключён к выводу №3
int ServoDirection = 12; // Направление для привода


void setup()
{
pinMode(ServoPin, OUTPUT); // Установка порта на выход
pinMode(ServoDirection, OUTPUT); // Установка порта на выход
}

void loop()
{
digitalWrite(ServoDirection, LOW); // Задаём направление для двигателя логическим "0"
analogWrite(ServoPin, 127); // Устанавливаем скорость 50% от полной, analogWrite должно быть в диапозоне от 0 до 255
delay(3000); // Задержка в 3 секунды [ВНИМАНИЕ!!! Процессор не будет обрабатывать команды в течение этого времени]

analogWrite(ServoPin, 0); // Устанавливаем скорость 0% от полной [ОСТАНОВКА], analogWrite должно быть в диапозоне от 0 до 255
delay(1000); // Задержка в 1 секунду

digitalWrite(ServoDirection, HIGH); // Задаём направление для двигателя логической "1"
analogWrite(ServoPin, 127); // Устанавливаем скорость 50% от полной, analogWrite должно быть в диапозоне от 0 до 255
delay(3000); // Задержка в 3 секунды

analogWrite(ServoPin, 0); // Устанавливаем скорость 0% от полной [ОСТАНОВКА], analogWrite должно быть в диапозоне от 0 до 255
delay(1000); // Задержка в 1 секунду
}
Сергей
Сообщения: 2
Зарегистрирован: 13 ноя 2012, 13:04

Re: Как подсоединять быстро два обычных мотора к Motor Shiel

Сообщение Сергей »

Вопрос к первому сообщению: как при подобном соединении моторов (как показано на картинке) в коде прописать полную остановку мотора?
п.с. пробую "analogWrite(M1Pin, 0);", загружаю, колеса колеса вращаются...в чем может быть проблема? соединил как на картинке.

int M1Pin = 3;
void setup()
{
}
void loop()
{
analogWrite(M1Pin, 0);
}
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1018
Зарегистрирован: 22 окт 2010, 23:57

Re: Как подсоединять быстро два обычных мотора к Motor Shiel

Сообщение Mr.Kubikus »

Попробуйте в setup() указать режим работы порта:

Код: Выделить всё

int M1Pin = 3;

void setup()
{
  pinMode(M1Pin, OUTPUT); // Установка порта на выход
}

void loop()
{
  analogWrite(M1Pin, 0);
}
С уважением, Григорий
GitHub FB ВК
Сергей
Сообщения: 2
Зарегистрирован: 13 ноя 2012, 13:04

Re: Как подсоединять быстро два обычных мотора к Motor Shiel

Сообщение Сергей »

Загрузил в ардуино, отключил юсб, включил от аккумулятора - мотор вращается, остановился через 10 секунд. Как сделать чтобы вообще мотор не крутился?
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1018
Зарегистрирован: 22 окт 2010, 23:57

Re: Как подсоединять быстро два обычных мотора к Motor Shiel

Сообщение Mr.Kubikus »

Если все подключено правильно и моторшилд не битый, то вышеприведенный код должен работать. По этому вопросу нашлось только следующее:
Notes and Known Issues
The PWM outputs generated on pins 5 and 6 will have higher-than-expected duty cycles. This is because of interactions with the millis() and delay() functions, which share the same internal timer used to generate those PWM outputs. This will be noticed mostly on low duty-cycle settings (e.g 0 - 10) and may result in a value of 0 not fully turning off the output on pins 5 and 6. (источник)
С уважением, Григорий
GitHub FB ВК
Ответить