Arduino Motor Shield

Uit Private Rotor Designs
Naar navigatie springen Naar zoeken springen
Crystal Clear action run.png
ARDUINO

Release status: Documentation

A0000079-2.png
Description
Arduino Motor Shield
License
Author
Contributors
Based-on
[[]]
Categories
CAD Models
External Link

Introductie

Het Arduino Motor Shield is gebaseerd op de L298 (datasheet), een dubbele full-bridge driver die is ontworpen om inductieve belastingen zoals relais, solenoïden, DC en stappenmotoren aan te drijven. Hiermee kunt u twee DC-motoren aandrijven met uw Arduino-bord, waarbij u de snelheid en richting van elk afzonderlijk regelt. U kunt ook de motorstroomabsorptie van elke motor meten, naast andere functies.

Power

De Arduino Motor Shield mag alleen worden gevoed door een externe voeding. Omdat de L298 IC die op het schild is gemonteerd twee afzonderlijke voedingsaansluitingen heeft, één voor de logica en één voor de motorvoedingsdriver. De vereiste motorstroom overschrijdt vaak de maximale USB-stroomclassificatie.

Externe (niet-USB) voeding kan afkomstig zijn van een AC-naar-DC-adapter (wall-wart) of batterij. De adapter kan worden aangesloten door een 2,1 mm middenpositieve stekker aan te sluiten op de arduino-aansluiting waarop het motorschild is gemonteerd of door de draden aan te sluiten die de voeding leiden naar de Vin- en GND-schroefklemmen, waarbij ervoor wordt gezorgd dat de polariteiten worden gerespecteerd.

Om mogelijke schade aan het Arduino-bord waarop het schild is gemonteerd te voorkomen, raden we aan een externe voeding te gebruiken die een spanning tussen 7 en 12V levert. Als uw motor meer dan 9V nodig heeft, raden we u aan de voedingskabels van het schild en het Arduino-bord waarop het schild is gemonteerd, te scheiden. Dit is mogelijk door de "Vin Connect" jumper aan de achterkant van het schild te knippen. De absolute limiet voor de Vin bij de schroefklemmen is 18V.

De stroompennen zijn als volgt:

  • Vin op het schroefklemmenblok, is de ingangsspanning van de motor die op het schild is aangesloten. Een externe voeding die op deze pin is aangesloten, levert ook stroom aan het Arduino-bord waarop is gemonteerd. Door de "Vin Connect" jumper te knippen maak je hier een speciale power line voor de motor van.
  • GND Ground op het schroefklemmenblok.

Het schild kan 2 ampère per kanaal leveren, voor een totaal van maximaal 4 ampère.

In- en uitgang

Dit schild heeft twee afzonderlijke kanalen, genaamd A en B, die elk 4 van de Arduino-pinnen gebruiken om de motor aan te drijven of te voelen. In totaal zijn er 8 pinnen in gebruik op dit schild. U kunt elk kanaal afzonderlijk gebruiken om twee DC-motoren aan te drijven of ze combineren om één bipolaire stappenmotor aan te drijven. De pinnen van het schild, verdeeld per kanaal, worden weergegeven in de onderstaande tabel:

A0000079-4.png
Functie Ch. A Ch. B
Richting D12 D13
PWM D3 D11
Rem D9 D8
detectie A0 A1

De extra sockets op het schild worden als volgt beschreven:

Motor & Voeding

M1-
9zRaY.jpg
M1+
M2-
M2+
VM+
VM-

TWI & Tinker sockets

De extra sockets op het schild worden als volgt beschreven:

H7mnt.jpg
BAIkc.jpg
cenetr
Out5.png
InA2.png
InA3.png
TWI'/ I2C

SDA => A4 | SCL => A5

'Digitale I/O & PWM
D5
'Digitale I/O & PWM
D6
Analoog-in
A2
Analoog-in
A3
  • 2 TinkerKit-connectoren voor twee analoge ingangen (in het wit), aangesloten op A2 en A3.
  • 2 TinkerKit-connectoren voor twee Aanlog-uitgangen (in oranje in het midden), aangesloten op PWM-uitgangen op pinnen D5 en D6.
  • 2 TinkerKit-connectoren voor de TWI-interface (in het wit met 4 pinnen), een voor invoer en de andere voor uitvoer.

Motor aansluiting

A0000079-3.png

Geborstelde DC motor. U kunt twee geborstelde DC-motoren aandrijven door de twee draden van elk in de (+) en (-) schroefklemmen voor elk kanaal A en B aan te sluiten. Op deze manier kunt u de richting regelen door de DIR A- en DIR B-pinnen HOOG of LAAG in te stellen, u kunt de snelheid regelen door de PWM A- en PWM B-duty cycle-waarden te variëren. De rem A- en rem B-pinnen, indien hoog ingesteld, zullen de DC-motoren effectief remmen in plaats van ze te laten vertragen door het vermogen te verminderen. U kunt de stroom die door de DC-motor gaat meten door de SNS0- en SNS1-pinnen af te lezen. Op elk kanaal staat een spanning evenredig met de gemeten stroom, die kan worden afgelezen als een normale analoge ingang, via de functie analogRead() op de analoge ingang A0 en A1. Voor uw gemak is het gekalibreerd om 3,3 V te zijn wanneer het kanaal zijn maximaal mogelijke stroom levert, dat wil zeggen 2A.

Fysieke kenmerken

De maximale lengte en breedte van de Motor Shield PCB zijn respectievelijk 2,7 en 2,1 inch. Met vier schroefgaten kan het bord aan een oppervlak of behuizing worden bevestigd. Merk op dat de afstand tussen digitale pinnen 7 en 8 160 mil (0,16") is, niet eens een veelvoud van de 100 mil afstand van de andere pinnen.

Voorbeeld Code

// Definitions L298P Full Bridge to connect arduino input pins
// Init for arduino motor shield left channel
const int dirL = 12;
const int brakeL = 9;
const int pmwL = 3;
// Init for arduino motor shield right channel
const int dirR = 13;
const int brakeR = 8;
const int pmwR = 11;

//set l298p to output pins
void setup()
{
pinMode(dirL, OUTPUT);
pinMode(brakeL, OUTPUT);
pinMode(pmwL, OUTPUT);
pinMode(dirR, OUTPUT);
pinMode(brakeR, OUTPUT);
pinMode(pmwR, OUTPUT);
}

void loop()
{
    // Forward
    digitalWrite(dirL, LOW);
    digitalWrite(dirR, HIGH);
    digitalWrite(brakeL, LOW);
    digitalWrite(brakeR, LOW);
    analogWrite(pmwL, 255); // Sets speed variable via PWM (0-255)
    analogWrite(pmwR, 255); // Sets speed variable via PWM (0-255)
    delay(1000);

    // Backward
    digitalWrite(dirL, HIGH);
    digitalWrite(dirR, LOW);
    digitalWrite(brakeL, LOW);
    digitalWrite(brakeR, LOW);
    analogWrite(pmwL, 255); // Sets speed variable via PWM (0-255)
    analogWrite(pmwR, 255); // Sets speed variable via PWM (0-255)
    delay(1000);

    // Turn Left
    digitalWrite(dirL, HIGH);
    digitalWrite(dirR, HIGH);
    analogWrite(pmwL, 255); // Sets speed variable via PWM (0-255)
    analogWrite(pmwR, 255); // Sets speed variable via PWM (0-255)
    delay(1000);

    // Turn Right
    digitalWrite(dirL, LOW);
    digitalWrite(dirR, LOW);
    analogWrite(pmwL, 255); // Sets speed variable via PWM (0-255)
    analogWrite(pmwR, 255); // Sets speed variable via PWM (0-255)
    delay(1000);

    // Turn Right
    digitalWrite(dirL, LOW);
    digitalWrite(dirR, LOW);
    analogWrite(pmwL, 255); // Sets speed variable via PWM (0-255)
    analogWrite(pmwR, 255); // Sets speed variable via PWM (0-255)
    delay(1000);
}