0% found this document useful (0 votes)
456 views28 pages

DC Motor Circuits

This document discusses basic DC motor circuits and how to control DC motor speed using an Arduino. It explains the purpose of a snubber or flyback diode, how pulse-width modulation (PWM) can be used to simulate variable voltage to control motor speed, and an example circuit using a transistor and Arduino to provide PWM control of a DC motor. The document also presents an Arduino program that allows a potentiometer to be used as input to control the duty cycle and speed of the motor.

Uploaded by

Rob Cook
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
456 views28 pages

DC Motor Circuits

This document discusses basic DC motor circuits and how to control DC motor speed using an Arduino. It explains the purpose of a snubber or flyback diode, how pulse-width modulation (PWM) can be used to simulate variable voltage to control motor speed, and an example circuit using a transistor and Arduino to provide PWM control of a DC motor. The document also presents an Arduino program that allows a potentiometer to be used as input to control the duty cycle and speed of the motor.

Uploaded by

Rob Cook
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 28

Basic DC Motor Circuits

Living with the Lab Gerald Recktenwald Portland State University [email protected]

DC Motor Learning Objectives


Explain the role of a snubber diode Describe how PWM controls DC motor speed Implement a transistor circuit and Arduino program for PWM control of the DC motor Use a potentiometer as input to a program that controls fan speed

LWTL: DC Motor

What is a snubber diode and why should I care?

Simplest DC Motor Circuit


Connect the motor to a DC power supply

Switch open

Switch closed

LWTL: DC Motor

Current continues after switch is opened


Opening the switch does not immediately stop current in the motor windings.

LWTL: DC Motor

Reverse current
Charge build-up can cause damage

LWTL: DC Motor

Motor Model
Simple model of a DC motor:

Windings have inductance and resistance Inductor stores electrical energy in the windings We need to provide a way to safely dissipate electrical energy when the switch is opened

LWTL: DC Motor

Flyback diode or snubber diode


Adding a diode in parallel with the motor provides a path for dissipation of stored energy when the switch is opened

LWTL: DC Motor

Pulse-width modulation (PWM) for DC motor speed control

Controlling DC Motor Speed


The voltage supplied to a DC motor controls its speed

Arduino cannot supply variable DC output


Arduino lacks a true analog output Use Pulse-width modulation (PWM) to simulate a variable DC supply voltage PWM is a common technique for supplying variable power levels to slow electrical devices such as resistive loads, LEDs, and DC motors Arduino Uno has 6 PWM pins: Digital I/O pins 3, 5, 6, 9,10, and 11

LWTL: DC Motor

10

Arduno Uno has 6 PWM pins


Look for the ~ prefix on the digital pin label, e.g. ~3

LWTL: DC Motor

11

PWM: Pulsed with modulation


PWM simulates DC voltage control for slow loads
o Vs c

...

The effective voltage is is called the duty cycle

LWTL: DC Motor

12

Arduino PWM commands


Configure the output pin:
PWM_pin = ... ; // one of 3, 5, 6, 9, 10, 11

void setup() { pinMode( PWM_pin, OUTPUT); }

Set the duty cycle


void loop() { int duty_cycle = 150; // between 0 and 255

analogWrite( PWM_pin, duty_cycle ); }

The duty cycle is an 8 bit value: 0 duty_cycle 255


LWTL: DC Motor 13

Using a transistor to switch the load

Transistor as the switching device


Each Arduino output channels has a 40 mA limit The maximum current draw for an Arduino is 200 mA Use Arduino as the brain Let another switching element be the brawn

LWTL: DC Motor

15

Use an NPN Transistor as a switch

This device is designed for use as a medium power amplifier and switch requiring collector currents up to 500 mA

LWTL: DC Motor

16

Electronic components in the fan kit


Transistor Diode

220 or 330 resistor


LWTL: DC Motor 17

Replace the Switch with a Transistor


A transistor allows on/off control to be automated and it allows switching of more current than an Arduino digital pin can supply.

LWTL: DC Motor

Pin 9 or another PWM pin drives the transistor base

18

Diode and transistor orientation

LWTL: DC Motor

20

Arduno Uno has 5 PWM pins


Look for the ~ prefix on the digital pin label, e.g. ~3

LWTL: DC Motor

21

DC Motor Circuit on tiny breadboard

LWTL: DC Motor

22

+5V connections

LWTL: DC Motor

23

PWM signal is connected to transistor base

LWTL: DC Motor

24

Arduino program to spin the DC Motor


Code is in spin_DC_motor.ino
// spin_DC_motor.ino Use PWM to control DC motor speed int motorPin = 3; // Pin 3 has PWM, connected it to the DC motor void setup() { pinMode(motorPin, OUTPUT); }

// Set motor pin to output mode

void loop() { analogWrite(motorPin, 150); // Motor at 150/255 of full speed delay(1000); analogWrite(motorPin, 250); // Motor at 250/255 of full speed delay(1000); }

LWTL: DC Motor

25

User input to control fan speed

Adjust fan speed with potentiometer input


Use the potentiometer circuit from the earlier analog input exercise

LWTL: DC Motor

27

Adjust fan speed with potentiometer input


Code is in DC_motor_speed_control.ino
// File: DC_motor_speed_control.pde // // Use potentiometer input to set the speed of a DC motor // Output to the motor is PWM
int motorPin = 3; // pin connected to the DC motor int potPin = 1; // analog input connected to the potentiometer void setup() { pinMode(motorPin, OUTPUT); } void loop() { int PWMoutput, potReading; potReading = analogRead(potPin); PWMoutput = map(potReading, 0, 1023, 0, 255 ); analogWrite(motorPin, PWMoutput); }
LWTL: DC Motor 28

Adjust fan speed with potentiometer input


void loop() { int PWMoutput, potReading; potReading = analogRead(potPin); PWMoutput = map(potReading, 0, 1023, 0, 255 ); analogWrite(motorPin, PWMoutput); }

Each time through the loop:

Read the voltage at the potentiometer wiper


Input value is a 10-bit integer: 0 potReading 1023

Scale the 10-bit value (max 1023) to an 8-bit value (max 255)
for ); PWMoutput = map( potReading, 0, 1023, range 0, 255 potReading range for PWMoutput

Update the PWM signal


analogWrite(motorPin, PWMoutput);
29

LWTL: DC Motor

You might also like