Arduino Motor Shield R3

Код:00515
Артикул:MSH-R3
В наличии:есть
840 руб
1
Arduino Motor Shield R3

Arduino motor shield r3

Модуль Motor Shield R3 предназначен для управления различными индуктивными нагрузками: одновременно двумя двигателями постоянного тока или одним шаговым, соленоидами, реле, контакторами. Управление происходит по двум каналам мощной коммутации А и В. Модуль ориентирован на работу совместно с Arduino UNO R3. Устройство прекрасно подходит для использования в системах не относящихся к категории Arduino. Motor Shield R3 может встраиваться в различные электромеханические приборы. Позволяет хорошо изучить возможности микросхемы L298.

Простой пример включения 1

Простой пример включения 2

Видео



Применение Motor Shield R3 в платформе на гусеничном ходу.

Управление и контроль

Автоматика прибора, в который входит Motor Shield R3, командует его работой с помощью цифровых логических сигналов: скорость, направления вращения двигателя, тормоз. Установка скорости происходит с помощью широтно-импульсной модуляции (ШИМ). Направление вращения определяет уровень сигнала Direction на соответствующем контакте. Каждый из эти сигналов свой для каналов А и В. Существует возможность контролировать потребляемый ток в каждом канале.
Электроника модуля включает двигатель, соединяя контакты двигателя с питанием и общим проводом. Остановка двигателя происходит когда цепь двигателя разомкнута или оба его контакта соединены с общим проводом, также остановка произойдет если оба контакта соединены с линией питания – ток не протекает. Для контроля уровня каждого контакта моторов предусмотрена светодиодная индикация.
Сигналом тормоз можно пользоваться при установке соответствующей перемычки на обратной стороне платы. Сигнал тормоз останавливает шпиндель двигателя при высоком уровне.

Основные компоненты

Основа модуля – микросхема L298. Она содержит мощные полупроводники, управляющие нагрузкой. Для контроля тока Motor Shield R3 содержит микросхему операционных усилителей LMV358MMX .Сигналы управления поступают на L298 через логические элементы микросхемы 4077d   Возле клемм подключения двигателей расположены желтые светодиоды, помогающие определить уровень напряжений на двигателях. Они светятся при подаче высокого уровня на соответствующую линию. Имеется кнопка сброса Arduino и всех модулей, входящих в микроконтроллерную систему. Модуль имеет множество контактов для соединения с Arduino или другими устройствами, установки поверх Motor Shield R3 модулей Arduino, подключения нагрузок и питания.

Соединители, контакты и подключение

Motor Shield R3

По краям платы расположены соединители с множеством контактов. Штыри в нижней части вставляются в соединители Arduino UNO R3.

Модуль использует цифровые контакты Arduino 3, 8, 9, 11, 12, 13 и аналоговые контакты 0 и 1. Разъемы TinkerKit используют:
Интерфейс TWI (I2C) контакты SCL и SDA
ШИМ контакт 6
ШИМ контакт 5
аналоговый вход контакт 2
аналоговый вход контакт 3



Назначение боковых контактов кроме сигналов TWI.

Сигналы Motor Shield R3 соединены со следующими контактами боковых разъемов:
 
Сигнал Контакты канала А Контакты канала В
Скорость вращения, ШИМ управление (PWM) D3 D11
Направление вращения (Direction) Dir A D12 Dir B D13
Тормоз (Brake) D9 D8
Измерение тока (Current Sensing) A0 A1

Arduino motor shield r3

Подключение двигателей постоянного тока.

На плате расположены вилки соединителей имеющие 3 или 4 контакта для подключения устройств TinkerKit. Контакты соединителей кроме информационного сигнала подводят питание к подключаемому устройству.

Arduino motor shield

1 – сброс
2 – для установки модулей сверху
3 – белые вилки с 4 контактами TinkerKit интерфейса TWI
4 – оранжевые вилки TinkerKit. Их контакты соединены с контактами D5 и D6. На плате они подписаны – 5, – 6.
5 – белые вилки TinkerKit для подключения датчиков. Они соединены с контактами A2 и A3 для подключения к аналоговым входам Arduino
6 и 7 – подключение двигателей
8 – питание

TinkerKit – класс датчиков и исполнительных устройств Arduino подключаемых с помощью соединителей одного типа.

Перемычки

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

Arduino motor shield

Расположение контактов перемычек на нижней стороне платы.

 
Контакты перемычки Функция сигнала Контакты Arduino
BRAKE A Тормоз канал A D8
BRAKE B Тормоз канал B D9
SNS0 Контроль тока нагрузки А A0
SNS1 Контроль тока нагрузки B А1
Vin Connect Линия питания Питание

Если торможение и измерение тока нагрузки не используется, то перемычки BRAKE A, BRAKE B, SNS0, SNS1 должны быть разорванными. Это высвобождает контакты Arduino D8, D9, A0, А1 для других целей.

Питание

Контакты 3,3 V и 5 V предназначены для соединения с одноименными контактами Arduino UNO R3. Питание микросхем модуля происходит от напряжения 5 В. Для питания электродвигателей и других нагрузок используются отдельные линии питания. Подключение производится с помощью винтовой клеммы в углу платы. Напряжение питания двигателей подается на контакт VIN. Если оно выше 12 В, то перемычку Vin Connect следует разомкнуть, так как линия VIN соединена с соответствующим контактом Arduino. Лучше питать двигатели от одного источника, а модули Arduino от другого при разомкнутой перемычке Vin Connect. Это снизит влияние помех двигателя на работу АЦП.
Максимальное напряжение питания двигателей 18 В. Каждый из каналов А и В обеспечивает нагрузку током до 2 ампер. При максимальной нагрузке обоих каналов суммарный ток до 4 ампера.

Характеристики

Питание модуля 7 – 12 В
Питание нагрузки 5 – 18 В
Размеры платы 70 х 54 мм

Тормоз

Для торможения двигателя постоянного тока применяется простое решение. Для этого используется свойство обратимости. Двигатель работает как генератор если его вал вращается под действием механической силы. Вращение по инерции после отключения питания вызывает генерацию постоянного тока. Если в этот момент контакты двигателя замкнуть, то ему придется генерировать большой ток и провернуть вал будет сложнее, чем при разомкнутых контактах. Это физическое явление использовано в Arduino motor shield r3 для торможения двигателя.
Команда направления вращения по каналу А поступает на вход DIRA.

Arduino motor shield

Логические элементы микросхемы 4077d упрощают управление сигналами направление вращения и тормоз.

Уровень сигнала инвертируется на на выходе элемента IС2A и вместе с сигналом #DIRA они поступают на входы микросхемы L298. Благодаря применению в схеме логического элемента IС2A одним сигналом DIRA направления вращения происходит управления двумя входами IN1 и IN2 микросхемы L298, причем при работе двигателя уровни на IN1 и IN2 всегда будут иметь разные уровни. Это означает, что один контакт двигателя подключается к питанию, другой к общему проводу. При смене направления вращения наоборот.
При поступлении высокого логического уровня по линии BRAKEA эта закономерность нарушается, инверсии нет, микросхема L298 подключает оба контакта двигателя к одному проводу, двигатель оказывается замкнут и происходит торможение.
Разработчики не зря установили перемычку активирующую этот сигнал. Прежде чем принять решение о использовании тормоза нужно разобраться не будет ли генерируемый ток двигателя под влиянием внешних сил настолько велик, что повредит микросхему L298.

Контроль тока

Напряжение пропорциональное току нагрузки снимается с выхода операционного усилителя LMV358MMX. Микросхема содержит 2 ОУ для двух каналов.

Arduino motor shield

Схема включения операционного усилителя для контроля тока нагрузки в Arduino motor shield r3.

Входы SNSA и SNSB соединены с резисторами очень малого сопротивления подключенными к специальным выводам микросхемы L298. Напряжение на резисторах пропорционально току нагрузки. Сопротивление резисторов и коэффициент усиления подобраны так, что напряжению на выходе ОУ 3,3 вольта соответствует току через нагрузку 2 ампера. Выходы ОУ соединены с перемычками SNS0 и SNS1. При замыкании перемычек напряжения с выходов ОУ будут поступать на аналоговые входы A0 и A1 Arduino UNO R3. Напряжение на аналоговых входах измеряет АЦП микроконтроллера модуля Arduino UNO R3. Программная обработка результатов измерений возможна с помощью функции analogRead ().

Программа управления двигателем постоянного тока

Подключите двигатель постоянного тока к винтовой клемме канала А. Загрузите программу.

/*********************************

Motor Shield 1-Channel DC Motor Demo

**********************************/

void setup() {
 
 //Setup Channel A
 pinMode(12, OUTPUT); //Initiates Motor Channel A pin
 pinMode(9, OUTPUT); //Initiates Brake Channel A pin
 
}

void loop(){
 
 //forward @ full speed
 digitalWrite(12, HIGH); //Establishes forward direction of Channel A
 digitalWrite(9, LOW); //Disengage the Brake for Channel A
 analogWrite(3, 255); //Spins the motor on Channel A at full speed
 
 delay(3000);
 
 digitalWrite(9, HIGH); //Eengage the Brake for Channel A

 delay(1000);
 
 //backward @ half speed
 digitalWrite(12, LOW); //Establishes backward direction of Channel A
 digitalWrite(9, LOW); //Disengage the Brake for Channel A
 analogWrite(3, 123); //Spins the motor on Channel A at half speed
 
 delay(3000);
 
 digitalWrite(9, HIGH); //Eengage the Brake for Channel A
 
 delay(1000);
 
}

Программа управления шаговым двигателем

Приводими программу для управления шаговым биполярным двигателем, например вот таким. Он имеет четыре провода, две обмотки, подключаемые к каналам А и В. Схему не приводим, так как незнаем какой именно двигатель окажется в вашем распоряжении. Найти концы обмоток можно прозвонкой – концы проводов, относящиеся к одной обмотке, будут между собой звониться, а концы, относящиеся к разным обмоткам – нет. Перед подключением двигателя к Arduino motor shield r3 следует изучить теорию работы шагового биполярного двигателя.
В программе не используется широтно-импульсная модуляция и контроль тока.
 
001 /***********************************************/
002  
003 #define TIMEFASE 20
004 #define DEBUG
005  
006 #define PWMA 3
007 #define PWMB 11
008 #define DIRA 12
009 #define DIRB 13
010  
011 /**********************************************************/
012  
013 int nFase = 0;
014  
015 /**********************************************************/
016  
017 void setup() {
018  
019  #ifdef DEBUG
020  Serial.begin( 9600 );
021  Serial.println("Start");
022  #endif
023  
024  /**********************************************************/
025  
026  pinMode(PWMA, OUTPUT);
027  pinMode(PWMB, OUTPUT);
028  pinMode(DIRA, OUTPUT);
029  pinMode(DIRB, OUTPUT);
030  
031  /**********************************************************/
032  
033 }
034  
035 /**********************************************************/
036  
037 void loop() {
038  
039  eseguiStep( 50,true );
040  stop();
041  delay( 1000 );
042  eseguiStep( 100,true );
043  stop();
044  delay( 1000 );
045  eseguiStep( 200,true );
046  stop();
047  delay( 3000 );
048  
049 }
050  
051 /**********************************************************/
052  
053 int fase( int nFase ) {
054  
055  switch( nFase ) {
056  case 1:
057  digitalWrite(DIRA, HIGH);
058  digitalWrite(DIRB, LOW);
059  digitalWrite(PWMA, HIGH);
060  digitalWrite(PWMB, LOW);
061  break;
062  
063  case 2:
064  digitalWrite(DIRA, LOW);
065  digitalWrite(DIRB, HIGH);
066  digitalWrite(PWMA, LOW);
067  digitalWrite(PWMB, HIGH);
068  break;
069  
070  case 3:
071  digitalWrite(DIRA, LOW);
072  digitalWrite(DIRB, LOW);
073  digitalWrite(PWMA, HIGH);
074  digitalWrite(PWMB, LOW);
075  break;
076  
077  case 4:
078  digitalWrite(DIRA, LOW);
079  digitalWrite(DIRB, LOW);
080  digitalWrite(PWMA, LOW);
081  digitalWrite(PWMB, HIGH);
082  break;
083  }
084  delay(TIMEFASE);
085  
086  return nFase;
087 }
088  
089 /**********************************************************/
090  
091 int stop() {
092  delay( 500 );
093  
094  digitalWrite(DIRA, LOW);
095  digitalWrite(DIRB, LOW);
096  digitalWrite(PWMA, LOW);
097  digitalWrite(PWMB, LOW);
098 }
099  
100 /**********************************************************/
101  
102 void eseguiStep( int passi, boolean dir ) {
103  if ( passi <= 0 ) { return; }
104  if ( dir ) { for ( int p=1; p<=passi; p++) { gira(); } }
105  else { for ( int p=passi; p>=1; p--) { gira(); } }
106 }
107  
108 /**********************************************************/
109  
110 void gira() {
111  nFase = (nFase+1);
112  if ( nFase > 4 ) { nFase=1; }
113  fase( nFase );
114 }

03: определение константы TIMEFASE т.е. время, которое должно пройти между положениями ротора. Это значение определяет скорость вращения и может повлиять на то, что работает двигатель или нет
04: определение константы DEBUG для отображения любых отладочных сообщений по последовательному монитору
13: определение переменной nFase хранящей значение фазы, в которой оказался ротор
20-21: устанавливает связь с последовательным монитором последовательного порта на скорости 9600 бод и выводит "Start"
26-29: определяет режим работы контактов Arduino UNO R3 подключенных к модулю управления двигателем
39: вызывается функция eseguiStep(step,verso). Она описана в программе далее. В функцию передаются 2 параметра. Первый – количество шагов и второй параметр вращения: по часовой стрелке = true, против часовой стрелки = false
40-41: остановить двигатель, вызывая функцию Stop() и подождать секунду, прежде чем пойти далее
42-47: происходит тоже самое, что и в строках 39-41 для нескольких шагов шагового биполярного двигателя
53-87: функция fase(nFase) перемещает ротор к шагу, переданному через параметр nFase. Функция в линии 84 это задержка, установленная в TIMEFASE, определенная выше. Строка 86 возвращает nFase – значение фазы, в которой находится двигатель
91-98: определение функции остановки, ожидание 500 миллисекунд (строка 92), а затем сигнал низкого уровня формируется на всех контактах управления двигателем модуля Arduino r3
102-106: здесь определяется функция eseguiStep (шаг, направление). Обратите внимание на строки 39, 42, 45. Особенностью является, то что проверяется число шагов более 0.
110-114: определение функции gira(), целью которых является отправить информацию в функцию fase().

Arduino motor shield

Домашняя страница

Схема электрическая

Программная библиотека

 
Вверх