Monster Moto Shield: Difference between revisions
Jump to navigation
Jump to search
| (8 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
[[Image:MonsterMotoShield+STNucleoF401.jpg|200px|right|thumb|Monster Moto Shield with ST Nucleo F401]] |
|||
[[Image:DrillDCMotor-for-Robot-9.jpg|200px|right|thumb|Monster Moto Shield driving hacked drill motors]] |
|||
==Features== |
==Features== |
||
* pair of [[VNH2SP30]] full-bridge motor drivers |
* pair of [[VNH2SP30]] full-bridge motor drivers |
||
| Line 12: | Line 15: | ||
==Motors== |
==Motors== |
||
* [[Hack de Moteur perceuse/viseuse sans fil 12V (bon marché)|12V DC Drill motor]] |
* [[Hack de Moteur perceuse/viseuse sans fil 12V (bon marché)|12V DC Drill motor]] |
||
* [[Dagu Wild Thumper 6WD Chassis]] |
|||
==Program== |
==Program== |
||
* Arduino Sketch : [[Media:MonsterMotoShieldSketch.zip]] |
|||
<pre> |
|||
* [[Mbed]] program for [[STM32 Discovery & Nucleo|ST Nucleo F401]] : http://mbed.org/users/donsez/code/NucleoF401_MonsterMotoShield/ |
|||
/* MonsterMoto Shield Example Sketch |
|||
* Android app for piloting : [http://www.instructables.com/id/Arduino-bot-Android-remote-control/step7/The-Android-App/ Arduino bot Android remote control] |
|||
date: 5/24/11 |
|||
code by: Jim Lindblom |
|||
hardware by: Nate Bernstein |
|||
SparkFun Electronics |
|||
License: CC-SA 3.0, feel free to use this code however you'd like. |
|||
Please improve upon it! Let me know how you've made it better. |
|||
This is really simple example code to get you some basic |
|||
functionality with the MonsterMoto Shield. The MonsterMote uses |
|||
two VNH2SP30 high-current full-bridge motor drivers. |
|||
Use the motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) |
|||
function to get motors going in either CW, CCW, BRAKEVCC, or |
|||
BRAKEGND. Use motorOff(int motor) to turn a specific motor off. |
|||
The motor variable in each function should be either a 0 or a 1. |
|||
pwm in the motorGo function should be a value between 0 and 255. |
|||
*/ |
|||
#define BRAKEVCC 0 |
|||
#define CW 1 |
|||
#define CCW 2 |
|||
#define BRAKEGND 3 |
|||
#define CS_THRESHOLD 100 |
|||
/* VNH2SP30 pin definitions |
|||
xxx[0] controls '1' outputs |
|||
xxx[1] controls '2' outputs */ |
|||
int inApin[2] = {7, 4}; // INA: Clockwise input |
|||
int inBpin[2] = {8, 9}; // INB: Counter-clockwise input |
|||
int pwmpin[2] = {5, 6}; // PWM input |
|||
int cspin[2] = {2, 3}; // CS: Current sense ANALOG input |
|||
int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin) |
|||
int statpin = 13; |
|||
void setup() |
|||
{ |
|||
Serial.begin(9600); |
|||
pinMode(statpin, OUTPUT); |
|||
// Initialize digital pins as outputs |
|||
for (int i=0; i<2; i++) |
|||
{ |
|||
pinMode(inApin[i], OUTPUT); |
|||
pinMode(inBpin[i], OUTPUT); |
|||
pinMode(pwmpin[i], OUTPUT); |
|||
} |
|||
// Initialize braked |
|||
for (int i=0; i<2; i++) |
|||
{ |
|||
digitalWrite(inApin[i], LOW); |
|||
digitalWrite(inBpin[i], LOW); |
|||
} |
|||
// motorGo(0, CW, 1023); |
|||
// motorGo(1, CCW, 1023); |
|||
} |
|||
void loop() |
|||
{ |
|||
motorGo(0, CW, 1023); |
|||
motorGo(1, CCW, 1023); |
|||
delay(500); |
|||
motorGo(0, CCW, 1023); |
|||
motorGo(1, CW, 1023); |
|||
delay(500); |
|||
if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD)) |
|||
digitalWrite(statpin, HIGH); |
|||
} |
|||
void motorOff(int motor) |
|||
{ |
|||
// Initialize braked |
|||
for (int i=0; i<2; i++) |
|||
{ |
|||
digitalWrite(inApin[i], LOW); |
|||
digitalWrite(inBpin[i], LOW); |
|||
} |
|||
analogWrite(pwmpin[motor], 0); |
|||
} |
|||
/* motorGo() will set a motor going in a specific direction |
|||
the motor will continue going in that direction, at that speed |
|||
until told to do otherwise. |
|||
motor: this should be either 0 or 1, will selet which of the two |
|||
motors to be controlled |
|||
direct: Should be between 0 and 3, with the following result |
|||
0: Brake to VCC |
|||
1: Clockwise |
|||
2: CounterClockwise |
|||
3: Brake to GND |
|||
pwm: should be a value between ? and 1023, higher the number, the faster |
|||
it'll go |
|||
*/ |
|||
void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) |
|||
{ |
|||
if (motor <= 1) |
|||
{ |
|||
if (direct <=4) |
|||
{ |
|||
// Set inA[motor] |
|||
if (direct <=1) |
|||
digitalWrite(inApin[motor], HIGH); |
|||
else |
|||
digitalWrite(inApin[motor], LOW); |
|||
// Set inB[motor] |
|||
if ((direct==0)||(direct==2)) |
|||
digitalWrite(inBpin[motor], HIGH); |
|||
else |
|||
digitalWrite(inBpin[motor], LOW); |
|||
analogWrite(pwmpin[motor], pwm); |
|||
} |
|||
} |
|||
} |
|||
</pre> |
|||
Latest revision as of 22:33, 1 August 2014
Features
- pair of VNH2SP30 full-bridge motor drivers
- Voltage max: 16V
- Maximum current rating: 30 A
- Practical Continuous Current: 14 A
Resellers
Motors
Program
- Arduino Sketch : Media:MonsterMotoShieldSketch.zip
- Mbed program for ST Nucleo F401 : http://mbed.org/users/donsez/code/NucleoF401_MonsterMotoShield/
- Android app for piloting : Arduino bot Android remote control