59
1/20/14 1 DC MOTORS 101 Servos, DC motors, Stepper motors, motor drivers Agenda Start with PWM (Pulse Width Modulation) “analog” output feature of Arduinos – equivalent to varying output voltage Use for dimming LEDs or speed control of DC motors DC motors Basic operation Driving with transistors Bi-directional drive with H-Bridge Stepper motors Unipolar and Bipolar versions Stepper driving circuits Example of Arduino-based stepper object library

DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

Embed Size (px)

Citation preview

Page 1: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

1  

DC MOTORS 101 Servos, DC motors, Stepper motors, motor drivers

Agenda

¨  Start with PWM (Pulse Width Modulation) ¤  “analog” output feature of Arduinos – equivalent to varying

output voltage ¤ Use for dimming LEDs or speed control of DC motors

¨  DC motors ¤  Basic operation ¤ Driving with transistors ¤  Bi-directional drive with H-Bridge

¨  Stepper motors ¤ Unipolar and Bipolar versions ¤  Stepper driving circuits ¤  Example of Arduino-based stepper object library

Page 2: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

2  

Analog vs. Digital Input

¨  digitalRead(pin); ¤ Returns true/false, 1/0,

off/on ¤ Great for switches

¨  analogRead(pin); ¤ Returns a range of values ¤ Actual voltage on the input should be between 0-5v ¤ Converted to 0-1023 discrete steps using ADC ¤ ADC is why the analog pins are special…

Analog vs. Digital Output

¨  Digital Out = on/off, up/down, left/right, black/white, etc ¨  Analog Out = how hot, how fast, how bright, how loud, how grey? etc. ¨  As with digital output, we have current considerations, this time, how can we

generate enough energy to control analog devices? ¨  Can we generate an analog voltage between 0-5v on the output?

Page 3: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

3  

ADC and DAC

Arduino version is a 10-bit ADC Arduino has no built-in DAC…

Pulse Width Modulation

Page 4: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

4  

Arduino PWM

¨  The Arduino has 6 PWM pins (3, 5, 6, 9, 10, 11) that can receive an analogWrite() command. ¤ analogWrite(pin, pulsewidth);

¨  0 = 0 volts, 255 = 5V ¤ a number in between will provide a specific PWM

signal. ¤ 128 will be seen as 2.5v, for example

Knob Fade

int knobPin = A0; // the analog input pin from the potentiometer int ledPin = 9; // pin for LED (a PWM pin) int val; // Variable to hold light sensor value void setup () {

pinMode(ledPin, OUTPUT); // declare ledPin as output pinMode(knobPin, INPUT); // knobPin is an (analog) input } void loop () {

val = analogRead(knobPin); //read the value from the pot val = map(val, 0, 1023, 100, 255); // map to reasonable values val = constrain(val, 0, 255); // Make sure it doesn’t go out of range analogWrite(ledPin, val); // write it to the LED using PWM

}

Page 5: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

5  

Arduino PWM Alternative

¨  It is also possible to create a pwm signal by simply ‘pulsing’ a digital out pin very quickly: ¤ digitalWrite(pin, HIGH);

delayMicroseconds(pulsewidth); // note: “Micro…!” digitalWrite(pin, LOW); delayMicroseconds(pulsewidth);

¨  Or, use a Motor Shield…

Dimming Lights

¨  Incandescent blubs ¤  Vary the voltage, or use PWM

¨  LEDs ¤  Use PWM

¨  Fluorescents (compact or regular) ¤  In general you can’t dim them…

¤  There are a few “dimmable” compact fluorescents

Page 6: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

6  

Dimming Lights

¨  Fixed resistance and varying voltage = varying current ¤  V = IR, V/R = I

¨  Pay attention to the lamp ratings ¤  Remember P = IV

¨  For high current devices, you will need to electrically isolate the Arduino from the high current circuit.

Activity: Arduino “flickering candle”

¨  Connect an LED to the Arduino on a PWM output pin ¤ Always remember current-limiting resistor…

¨  Write a program to make that LED “flicker” like a candle ¤ Chose between random brightness values ¤ Choose random times to change the value

Page 7: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

7  

Servos Also Use PWM

¨  From Tod Kurt, totbot.com

Servos Also Use PWM

¨  From Tod Kurt, totbot.com

Page 8: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

8  

Servo Innards

Servo Specs

¨  From Tod Kurt, totbot.com

Page 9: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

9  

Servo Control

¨  From Tod Kurt, totbot.com

Servo Control

¨  From Tod Kurt, totbot.com

Page 10: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

10  

Programming Servo Motors

¨  The first thing to do when programming servos is work out the pulse range of the specific servo you are using. ¤  With the arduino, this can be between 0.5 and 2.5 ms. ¤  Servos also need ‘refresh’ time between pulses -- usually 20ms

¨  The frequency of the Arduino’s built-in pwm pins is too high for servos, so we have to use the pseudo-pwm method instead: digitalWrite(servoPin, HIGH); delayMicroseconds(pulse); digitalWrite(servoPin, LOW); delayMicroseconds(refreshTime);

¨  Or alternatively, use the Arduino servo library

¨  Black = gnd ¨  Red = +5v ¨  Yellow = signal

Servo Example Program #include <Servo.h> // include the built-in servo library Servo myservo; // create a servo object to control the servo (one per servo) int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attach servo control to pin 9 } void loop() { for (pos = 0; pos < 180; pos++) { // go from 0 to 180 degrees myservo.write(pos); // move the servo delay(20);l // give it time to get there } for (pos = 180; pos>=1; pos--) { // wave backwards myservo.write(pos); delay(20); } }

Page 11: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

11  

Servo Functions ¨  Servo is a class

¤  Servo myservo; // creates an instance of that class ¨  myservo.attach(pin);

¤  attach to an output pin (doesn’t need to be PWM pin!) ¤  Servo library can control up to 12 servos on our boards ¤  but a side effect is that it disables the PWM on pins 9

and 10

¨  myservo.write(pos); ¤ moves servo – pos ranges from 0-180

¨  myservo.read(); ¤  returns the current position of the servo (0-180)

Servo Object (class instance)

Name: myservo position: 67 deg

Attached to: pin 9

.attach

.read

.write 0 to 180

Pin number

return current deg position

Pin 9

Page 12: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

12  

Moving on…

¨  Write a program to control the position of the servo from a pot, or from a photocell ¤  remember analogRead(); values are from 0-1023 ¤ measure the range of values coming out of the

photocell first? ¤ use Serial.print(val); for example ¤ use map(val, in1, in2, 0, 180); to map in1-in2 values to

0-180 ¤ Can also use constrain(val, 0, 180);

Side Note - Power

¨  Servos can consume a bit of power ¤ We need to make sure that we don’t draw so much

power out of the Arduino that it fizzles ¤  If you drive more than a couple servos, you probably

should put the servo power pins on a separate power supply from the Arduino

¤ Use a wall-wart 5v DC supply, for example

Page 13: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

13  

Moving on: Electromagnetism

¨  Permanent magnets have magnetic fields that flow from North to South poles of the magnet

Electromagnets

¨  Current flowing through a conductor creates a magnetic field ¤  Right hand rule: Point your thumb in direction of current, and your fingers

curl in the direction of the magnetic field

Page 14: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

14  

Electromagnets

¨  Current flowing through a coiled conductor creates a magnetic field ¤  Right hand rule: Point your thumb in direction of current, and your

fingers curl in the direction of the magnetic field ¤  Alternately, curl your fingers in the direction of the current, your

thumb points to North magnetic pole

Electromagnets

¨  Current flowing through a coiled conductor creates a magnetic field ¤  Important implication: When the current it reversed, so is the

magnetic field!

Page 15: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

15  

Aside: Current dir vs. Carrier dir

¨  Current (amps) flows from positive to negative ¤  “positive current”

¨  BUT – the charge carriers are (usually) electrons ¤  Electrons have negative charge ¤  So – the electrons move from

negative to positive

¨  Charge carriers move in opposite direction from current! ¤  Yes, it’s confusing… ¤ We’ll tackle this again talking

about transistors!

Electromagnets and Motors

¨  Motors use the reversing feature of an electromagnet, and magnetic attraction ¤ Permanent magnets on one side, electromagnets that

can switch polarity on the other

Page 16: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

16  

Basic DC Motor Behavior

¨  Electrical energy -> mechanical motion

¨  Motors have fixed parts (stator) and moving parts (rotor)

¨  A DC motor consists of: ¤  Commutator

n  Rotary switch n  Reverses current twice every cycle

¤  Electromagnetic coils n  Opposing polarities switched by

commutator n  Inertia causes them to continue

rotating at the moment of polarity switching

¤  Fixed Magnets n  Opposing polarities

Basic DC Motor Behavior

¨  Electrical energy -> mechanical motion

¨  Motors have fixed parts (stator) and moving parts (rotor)

¨  A DC motor consists of: ¤  Commutator

n  Rotary switch n  Reverses current twice every cycle

¤  Electromagnetic coils n  Opposing polarities switched by

commutator n  Inertia causes them to continue

rotating at the moment of polarity switching

¤  Fixed Magnets n  Opposing polarities

Page 17: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

17  

Basic DC Motor Behavior

¨  Electrical energy -> mechanical motion

¨  Motors have fixed parts (stator) and moving parts (rotor)

¨  A DC motor consists of: ¤  Commutator

n  Rotary switch n  Reverses current twice every cycle

¤  Electromagnetic coils n  Opposing polarities switched by

commutator n  Inertia causes them to continue

rotating at the moment of polarity switching

¤  Fixed Magnets n  Opposing polarities

Motor Speed Control

¨  For a simple DC motor, PWM works great ¤ Motor “integrates” the pulsing waveform for an

effective lowering of the drive voltage ¤ Motors have inertia, and also minimum operating

voltages. Therefore, often it will seem that the motor will only operate at a high duty cycle initially.

¤ Connect motors up using external power supplies n Make sure to connect grounds together…

Page 18: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

18  

Transistors as Switches

¨  From Tod Kurt, totbot.com

Transistors (bipolar)

¨  3 terminals (emitter, base, collector): different voltages at the input terminal controls the conductivity between the other two. ¤  Faster and cheaper than relays ¤ DC only

¨  Bipolar (BJT) are common ¤  Polarity is PNP or NPN ¤ NPN has small input current and positive

voltage at Base to control a large Collector-to-Emitter current

¤  PNP has small output current and negative voltage at Base to control a large Collector-to-Emitter current

Page 19: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

19  

Transistors (mosfet)

¨  3 terminals (source, gate, drain): different voltages at the input terminal controls the conductivity between the other two. ¤ Faster and cheaper than relays ¤ Possible to use with AC

¨  MOSFETs are also common ¤ Polarity is Ntype or Ptype ¤ Ntype has positive voltage at gate

to control a large Source-Drain current ¤ Ptype has negative voltage at Gate to

control a large Source-Drain current

MOSFET symbols

Page 20: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

20  

BJT vs. MOSFET

¨  BJT involves current in/out of the Base ¤ Current gain is measure of how much

more current flows from C-E than in B ¤ Predictable gain response

¨  MOSFETs have high impedance inputs ¤ No current in/out of gate ¤ Can handle high power, but complex

gain response ¤ Can be more fragile – esp. to static

charge

Transistors for Motors

¨  Use a transistor to switch the motor’s voltage source ¤ Can be different from Arduino power

1000 Inductive loads (like motors) need a “kickback diode” to protect against reverse current ¨  From Tod Kurt, totbot.com

Page 21: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

21  

Transistors for Motors

¨  Use a transistor to switch the motor’s voltage source ¤ Can be different from Arduino power

1000

¨  From Tod Kurt, totbot.com

Bidirectional DC Motor

¨  By reversing the current, you can change motor direction ¤ Clever circuit – H-Bridge ¤ Can be switches or transistors…

Page 22: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

22  

Bidirectional DC Motor

¨  By reversing the current, you can change motor direction ¤ Clever circuit – H-Bridge ¤ Can be switches or transistors…

Bidirectional DC Motor

¨  By reversing the current, you can change motor direction ¤ Clever circuit – H-Bridge ¤ Can be switches or transistors…

Page 23: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

23  

H-Bridge

¨  Could build this from individual transistors (like TIP120)

H-Bridge

¨  OR, you could get this in a handy chip form ¤ Quad Half H-Bridge ¤ L293D or SN774410

Page 24: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

24  

H-Bridge

¨  OR, you could get this in a handy chip form ¤ Quad Half H-Bridge ¤ L293D or SN774410

Quad Half H-Bridge

M

Vmotor

Ctl1 Ctl2

En En

Not shown – built-in inversion at Ctl inputs - one switch is always on, other is off… Can use PWM on the En signal to modulate speed

Page 25: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

25  

Quad Half H-Bridge

Real Life (big) example

¨  Saltgrass Printmakers in Salt Lake City ¤  www.SalrtgrassPrintmakers.org

¨  We have a Vandercook proof press with a powered carriage

Page 26: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

26  

Vandercook Electronics

¨ ¼ HP DC motor moves the press bed back and forth ¤ Large mechanical “reversing contactor” is the H-Bridge

Vandercook Schematic

Page 27: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

27  

Vandercook Schematic

Vandercook Schematic

Page 28: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

28  

Vandercook Schematic

Activity: Bidirectional Motor

¨  Grab a SN754410 or L293D ¤ Wire it up for a bidirectional motor ¤ Connect a DC motor – use external power ¤ Control directional switching and speed from Arduino ¤ Look at DC_motor_hbridge on class page

Page 29: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

29  

Stepper Motors

¨  DC motors with precise control of how far they spin ¤ They have a fixed number of “steps” the take to turn

one full revolution ¤ You can control them one step at a time ¤ Makes for very precise and repeatable positioning

Why use steppers?

¨  Very precise ¨  Much stronger than servos

¤ But, they use more current than Arduino can provide ¤ So, you need some sort of external power source

¨  They’re a little tricky to drive ¤  It’s handy to have some sort of code library, or external

driver board

¨  I suggest to use both – a library, and an external board

Page 30: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

30  

They always have multiple wires

How do they Work?

¨  Like all motors – electro-magnets get energized and push/pull the rotor around.

Page 31: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

31  

Steppers have precise internals

Steppers have precise internals

Page 32: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

32  

Steppers have precise internals

Steppers have precise internals

Page 33: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

33  

Stepper Internals

Different Flavors of Steppers

¨  Unipolar vs. Bipolar

Page 34: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

34  

Different Flavors of Steppers

¨  Unipolar vs. Bipolar

Unipolar used as Bipolar

Page 35: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

35  

Make it Turn

¨  Energize the coils in a very specific sequence

Make it Turn

¨  Energize the coils in a very specific sequence

Page 36: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

36  

Use a Library

Simple Example

Page 37: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

37  

Knob Example

Stepper Object

Stepper name: mystepper

Internal state:

What step am I on? What sequence

do I use?

.setSpeed

.step

Page 38: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

38  

Stepper Object

.setSpeed

.step Driv

ers Stepper

name: mystepper

Internal state: What step am I on?

What sequence do I use?

Driver Circuits… (unipolar)

Page 39: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

39  

Driver Circuits… (bipolar)

Driver Circuits… (chips)

Page 40: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

40  

Driver Circuits

Control inputs from Arduino You can use the <Stepper.h> library for this

Make sure you consider power!

Page 41: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

41  

Stepper Specs

¨  Degrees/Step ¤ Common values: 15, 7.5, 3.6, 1.8 deg/step ¤ This is the same as 24, 48, 100, and 200 steps/full-rev

¨  Coil Resistance ¤ Measured resistance of motor coils

¨  Volts/Amps ¤ Rated values for running the motor ¤ Amps is the important one! ¤ Remember V=IR, so V/R = I ¤ Example: 6VDC, 7.9Ω = .76A

So far…

¨  Steppers move very precisely and are relatively powerful

¨  But are a bit of a pain to drive ¤ Four wires from the Arduino ¤ External driver circuits ¤ Extra power supply to worry about ¤ Use stepper library to make stepper “objects” for each

one that you use ¤ Your program needs to keep track of how far you’ve

turned

Page 42: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

42  

Easier Motor Driving…

¨  There are chips specifically designed for driving steppers ¤ They manage the sequence of signals ¤ They manage the higher voltages of the motors ¤ They have “chopper drives” to limit current ¤ They can even do “microstepping”

n This lets you do ½, ¼, 1/8, or 1/16 step n  Increases resolution and smoothness, but might reduce power

Easy Driver

¨  Available from Sparkfun (among others)

Adjustable from 150mA to 750mA per coil

Motor power from 6v to 30v Onboard regulator for 5v or 3.3v power for Arduino Microstepping full, ½, ¼, and 1/8th step

Page 43: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

43  

Pololu A4988 driver

Up to 2A per coil (with heat sink) 8 – 35V on motor Provides 3.3v or 5v to Arduino Limits current to a set level

Uses only 2 wires for control: Dir, Step

Pololu A4988 driver

Page 44: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

44  

“Chopping” current driver…

¨  These boards have a little magic in them: Chopping Current Driver ¤ Constant current source – you set limit

¨  This means you can use a higher voltage than your stepper is rated for ¤ Chip will limit current to correct value ¤ Higher voltage means more torque ¤ Make SURE you set the current limit correctly though…

Wiring up the EasyDriver

Note: MS1 and MS2 default high if you don’t pull them low. This defaults to 1/8th microstepping

Page 45: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

45  

EasyDriver chip

A3967

One EasyDriver per Stepper…

Page 46: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

46  

Wiring the Pololu A4988 driver Minimal Connection

Using the Pololu A4988 driver Minimal Connection

Need one driver for each motor

Need to set this pot to set current limit

Check REF to see what the current limit will be

Page 47: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

47  

Current Limit on Pololu

¨  Turn pot (use a tiny screwdriver) and check REF

¤ Rs = 0.05Ω

V REF Current Limit

.1v .250A

.15v .375A

.2v .500A

.25v .625A

.3v .750A

.35v .875A

.4v 1.000A

.45v 1.125A

Using a Dir/Step driver

¨  Set the Dir pin – 0 is one dir, 1 is the other ¨  Toggle the Step pin up and down

¤ You get one step per rising edge

for (int i=0; i < steps; i++) { digitalWrite(STEP_PIN, HIGH); delayMicroseconds(usDelay); digitalWrite(STEP_PIN, LOW); delayMicroseconds(usDelay); }

Page 48: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

48  

Use StepperDS Library

StepperDS name: mystepper

Internal state:

DirPin StepPin

.setSpeed

.step

.setMicrostepping

.stepDeg

Use the StepperDS Library

Page 49: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

49  

Use the StepperDS Library

Installing StepperDS

¨  Grab the zip file from the class web site ¨  unpack – put the StepperDS folder in your

Arduino/libraries folder ¤ This is your “Sketchbook Location” , libraries sub-folder ¤ Find out where this is using the Preferences dialog in

Arduino n Mine is in Documents/Arduino/libraries on my Mac

¨  Restart Arduino and you should be good to go ¤ #include <StepperDS.h> ¤ Examples will show up in your “Examples” menu

Page 50: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

50  

Activity: Wire up a stepper

¨  Use a BigEasy stepper driver ¨  Use my StepperDS library if you like ¨  Or roll your own with your own code ¨  Make the stepper do

something… ¤ Follow a fixed pattern ¤ Follow a knob ¤ Follow a light sensor ¤ React from Processing over the serial port

for (int i=0; i < steps; i++) { digitalWrite(STEP_PIN, HIGH); delayMicroseconds(usDelay); digitalWrite(STEP_PIN, LOW); delayMicroseconds(usDelay); }

StepperDS

¨  Example of using classes/methods in Arduino ¤ Also example of making a library that you can

re-use and export to others

¨  Arduino language is really C/C++ ¤ Class definitions go in a .h file ¤ Class code goes in a .cpp file ¤ Both files go in a folder named for the library

¤ Examples go in an “Examples” sub-folder ¤ Each example gets its own sub-sub-folder ¤ Examples are “regular” Arduino sketches (.ino files)

Page 51: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

51  

StepperDS.h

Include LOTS of comments in the header to explain what’s going on…

StepperDS.h

Some standard housekeeping stuff for Arduino libraries…

Page 52: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

52  

StepperDS.h Define StepperDS class

Start with the public stuff Constructor functions, and method prototypes

StepperDS.h: Define StepperDS class

More method prototypes, and private information

Note “#endif” for “#ifndef StepperDS_h”

Page 53: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

53  

StepperDS.cpp: Fill in the methods

Start with comments again, of course! Make sure to include StepperDS.h Make some default definitions to use later…

StepperDS.cpp - constructors

Each constructor – with different number of arguments – needs to have its code filled in. Zero-arg constructor is all defaults… “this” refers to the object being constructed…

Page 54: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

54  

StepperDS.cpp - constructors

Three-arg constructor is probably the most common… Note that it calls the private function initStepperPins()

StepperDS.cpp: initStepperPins

This function is private to the class – it can’t be called by user code

Page 55: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

55  

StepperDS.cpp: method code

Each method needs to be filled in – basically they set internal values in the stepper object…

StepperDS.cpp: method code

Remember to comment things! Even you will have a hard time remembering what you did when you come back to your code later…

Page 56: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

56  

StepperDS.cpp: method code

Page 57: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

57  

StepperDS.cpp: method code Also versions with float and double as inputs…

StepperDS.cpp: method code

More standard housekeeping stuff Return a version number so that later on if there are multiple versions, the programmer could do something different based on the version being used

Page 58: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

58  

StepperDS library folder

Keywords is a text file that defines special words used in this library that should be colored differently in the Arduino IDE

StepperDS Keywords

Page 59: DC MOTORS 101 Agendacs5789/Slides/Motors-Erikx2.pdf · DC MOTORS 101 Servos, DC motors, ... Grab a SN754410 or L293D ! ... Look at DC_motor_hbridge on class page . 1/20/14 29

1/20/14  

59  

Whew! Summary…

¨  PWM is a standard way to approximate analog output ¤ Useful for dimming LEDs and speed control on DC motors

¨  Servos also use PWM ¤ Very handy, fairly precise positioning on limited range

(0-180 degrees)

¨  DC motors move bigger things ¤ Use H-bridge to reverse direction

¨  Stepper motors enable precise angular control ¤ Use stepper driver board for best results ¤ Pay attention to electronics (volts, amps, ground, etc.)

What to use?

¨  Your go-to motors should probably be: ¤ Servos – for anything that doesn’t require a huge range

of motion or lots of power ¤ Steppers – for anything that requires full rotation

and/or precise positioning n Use an EasyDriver or Pololu n You can often harvest steppers from broken printers and

scanners…

¤ DC motors for anything that just needs to spin without precise control n Could add a shaft encoder, but that’s another story…