Pololu 3pi Robot User Manual

Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
Pololu 3pi Robot User's Guide
http://www.pololu.com/docs/0J21/all Page 1 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Contacting Pololu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3. Important Safety Warning and Handling Precautions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4. Getting Started with Your 3pi Robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.a. What You Will Need . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.b. Powering Up Your 3pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.c. Using the Preloaded Demo Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.d. Included Accessories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5. How Your 3pi Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.a. Batteries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5.b. Power management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.c. Motors and Gearboxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.d. Digital inputs and sensors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.e. 3pi Simplified Schematic Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6. Programming Your 3pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
7. Example Project #1: Line Following . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.a. About Line Following . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.b. A Simple Line-Following Algorithm for 3pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
7.c. Advanced Line Following with 3pi: PID Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
8. Example Project #2: Maze Solving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8.a. Solving a Line Maze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8.b. Working with Multiple C Files in Atmel Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8.c. Left Hand on the Wall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
8.d. The Main Loop(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
8.e. Simplifying the Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
8.f. Improving the Maze-Solving Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
9. Pin Assignment Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
10. Expansion Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
10.a. Serial slave program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
10.b. Serial master program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
10.c. Available I/O on the 3pi's ATmegaxx8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
11. Related Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
12. Revision History and Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Page 2 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation

1. Introduction

Note: Starting with serial number 0J5840, 3pi robots are shipping with the newer ATmega328P
[http://www.pololu.com/docs/0J20] now supports the ATmega328P).
The Pololu 3pi robot is a small, high-performance, autonomous robot designed to excel in line-following and line­maze-solving competitions. Powered by four AAA batteries (not included) and a unique power system that runs the motors at a regulated 9.25 V, 3pi is capable of speeds up to 100 cm/second while making precise turns and spins that don’t vary with the battery voltage. This results in highly consistent and repeatable performance of well-tuned code even as the batteries run low. The robot comes fully assembled with two micro metal gearmotors, five reflectance sensors, an 8×2 character LCD, a buzzer, three user pushbuttons, and more, all connected to a user-programmable AVR microcontroller. The 3pi measures approximately 3.7 inches (9.5 cm) in diameter and weighs 2.9 oz (83 g) without batteries.
The 3pi is based on an Atmel ATmega168 or ATmega328 microcontroller, henceforth referred to as the “ATmegaxx8”, running at 20 MHz. ATmega168-based 3pi robots feature 16 KB of flash program memory and 1 KB RAM, and 512 bytes of persistent EEPROM memory; ATmega328-based 3pi robots feature 32 KB of flash program memory, 2 KB RAM, and 1 KB of persistent EEPROM memory. The use of the ATmegaxx8 microcontroller makes the 3pi compatible with the popular Arduino development platform. Free C and C++ development tools are also available, and an extensive set of libraries make it a breeze to interface with all of the integrated hardware. Sample programs are available to show how to use the various 3pi components, as well as how to perform more complex behaviors such as line following and maze solving.
Please note that an external AVR ISP programmer, such as our USB AVR Programmer [http://www.pololu.com/product/
1300] is required to program the 3pi robot.
For a Spanish version of this document, please see Pololu 3pi Robot Guia Usuario
customer Jaume B.).
1. Introduction Page 3 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation

2. Contacting Pololu

You can check the 3pi product page [http://www.pololu.com/product/975] for additional information, including pictures, videos, example code, and other resources.
We would be delighted to hear from you about any of your projects and about your experience with the 3pi robot. You can contact us [http://www.pololu.com/contact] directly or post on our forum [http://forum.pololu.com/]. Tell us what we did well, what we could improve, what you would like to see in the future, or share your code with other 3pi users.
2. Contacting Pololu Page 4 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation

3. Important Safety Warning and Handling Precautions

The 3pi robot is not intended for young children! Younger users should use this product only under adult supervision. By using this product, you agree not to hold Pololu liable for any injury or damage related to the use or to the performance of this product. This product is not designed for, and should not be used in, applications where the malfunction of the product could cause injury or damage. Please take note of these additional precautions:
• Do not attempt to program your 3pi if its batteries are drained or uncharged. Losing power during programming could permanently disable your 3pi. If you have purchased rechargeable batteries for use with the 3pi, do not assume they come fully charged; charge them before you first use them. The 3pi has the ability to monitor its battery voltage; the example line-following and maze-solving programs we provide show how to use this feature, and you should include it in your programs so you can know when its time to recharge or replace your batteries.
• The 3pi robot contains lead, so follow appropriate handling procedures, such as not licking the robot and washing hands after handling.
• The 3pi robot is intended for use indoors on relatively flat, smooth surfaces. Avoid running your 3pi on surfaces that might scrape or damage the underside of your robot’s PCB as it drives around.
• Avoid placing the robot so that the underside of the PCB makes contact with conductive materials (e.g. do not place the 3pi in a bin filled with metal parts). This could inadvertently short out the batteries and damage your robot, even with the 3pi turned off. Shorting various pads or components together could also damage your 3pi.
• Since the PCB and its components are exposed, take standard precautions to protect your 3pi robot from ESD (electrostatic discharge), which could damage the on-board electronics. When picking up the 3pi, you should first touch a safe part of the robot such as the wheels, motors, batteries, or the edges of the PCB. If you first touch components on the PCB, you risk discharging through them. When handing the 3pi to another person, first touch their hand with your hand to equalize any charge imbalance between you so that you don’t discharge through the 3pi as the exchange is made.
• If you remove the LCD, take care to replace it in the right orientation such that it is over the rear battery back. It is possible to put the LCD in backwards or offset; doing so could damage the LCD or the 3pi.
3. Important Safety Warning and Handling Precautions Page 5 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation

4. Getting Started with Your 3pi Robot

Getting started with your 3pi can be as simple as taking it out of the box, adding batteries, and turning it on. The 3pi ships with a demo program that will give you a brief tour of its features.
General features of the Pololu 3pi robot, top view.
4. Getting Started with Your 3pi Robot Page 6 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
Labeled bottom view of the Pololu 3pi robot.
The following subsections will give you all the information you need to get your 3pi up and running!

4.a. What You Will Need

The following materials are necessary for getting started with your 3pi:
4 AAA batteries. Any AAA cells will work, but we recommend NiMH batteries, which are rechargeable and can be purchased from Pololu [http://www.pololu.com/product/1002] or at a local store. If you use rechargeable batteries, you will also need a battery charger. Battery chargers designed to connect to external series battery packs, such as the iMAX-B6AC [http://www.pololu.com/product/2260], may be used with the 3pi’s battery charger port.
AVR ISP programmer with 6-pin connector. The 3pi features an ATmegaxx8 microcontroller, which requires an external programmer such as the Pololu USB AVR programmer [http://www.pololu.com/product/1300] or Atmel’s AVRISP series. The 3pi has a standard 6-pin programming connector, so your programmer will need to have a 6-pin ISP cable [http://www.pololu.com/product/972] for connecting to the target device. (You will also need whatever cable your programmer requires to connect to a computer.
A desktop or laptop computer. You will need a personal computer for developing your code and loading it onto the 3pi. The 3pi can be programmed on Windows, Mac, and Linux operating systems, but Pololu support for Macs is limited.
4. Getting Started with Your 3pi Robot Page 7 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
You might find the following materials useful in creating an environment for your robot to explore:
• Several large sheets of white posterboard (available at crafts or office supply stores) or dry-erase whiteboard stock (commonly available at home/construction supply stores).
• Light-colored masking tape for joining multiple sheets together.
• 3/4" black electrical tape to create lines for your robot to follow.

4.b. Powering Up Your 3pi

The first step in using your new 3pi robot is to insert four AAA batteries into the battery holders. To do this you will need to remove the LCD. Pay attention to the LCD’s orientation as you will want to plug it back in this way when you are done. With the LCD removed your 3pi should look like the picture to the right.
Once the batteries are in place, you should return the LCD to its position over the rear battery holder. Make sure each male LCD header pin goes into a corresponding female socket.
Next, push the power button (located on the left side of the rear battery pack) to turn on your 3pi. You should see the two blue power LEDs on the underside of the 3pi light, and the 3pi should begin running its preloaded demo program. You can simply push the power button again to turn the 3pi off, and you can push the reset button (located just below the power button) to reset the program the robot is running.

4.c. Using the Preloaded Demo Program

Your 3pi comes preloaded with a program that demonstrates most of its features and allows you to test that it is working correctly. When you first turn on your 3pi, you will hear a beep and see the words “Pololu 3pi Robot”, then “Demo Program” appear, indicating that you are running the demo program. If you hear a beep but do not see any text on the LCD, you may need to adjust the contrast potentiometer on the underside of the board. When the program has started successfully, press the B button to proceed to the main menu. Press C or A to scroll forward or backward through the menu, and press B to make a selection or to exit one of the demos. There are seven demos accessible from the menu:
1. Battery: This demo displays the battery voltage in millivolts, which should be above 5000 (5.0 Volts) for a fully-charged set of batteries. Removing the jumper marked ADC6 will separate the battery voltage measurement circuit from the analog input, causing the number displayed to drop to some low value.
2. LEDs: Blinks the red and green user LEDs on the underside of the board. If you have soldered in the optional user LEDs, they will also blink.
3. Trimpot: Displays the position of the user trimmer potentiometer, which is located on the underside of the board, as a number between 0 and 1023. While displaying the value, this demo also blinks the LEDs and plays a note whose frequency is a function of the current reading. It is easiest to turn the trimpot using a 2mm flat-head screwdriver.
4. Sensors: Show the current readings of the IR sensors using a bar graph. Bigger bars mean lower reflectance. Placing a reflective object such as your finger under one of the sensors will cause the corresponding reading to drop visibly on the graph. This demo also displays “C” to indicate that button C has an effect—press C and the IR emitters will be turned off. In indoor lighting conditions away from bright incandescent or halogen lights,
4. Getting Started with Your 3pi Robot Page 8 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
all of the sensors should return entirely black readings with IR off. Removing the jumper marked PC5 disables control of the emitters, causing them to always be on.
5. Motors: Hold down A or C to run the motor on the corresponding side, or hold down both buttons to run both motors simultaneously. The motors will gradually ramp up to speed; in your own programs, you can switch them on much more suddenly. Tap A or C to switch the corresponding motor to reverse (the button letter becomes lowercase if pressing it will drive the corresponding motor in reverse).
6. Music: Plays an adaptation of J. S. Bach’s Fugue in D Minor for microcontroller and piezo, while scrolling a text display. This demonstrates the ability of the 3pi to play music in the background.
7. Timer: A simple stopwatch. Press C to start or stop the stopwatch and A to reset. The stopwatch continues to count while you are exploring the other demos.
Note: If the 3pi receives any serial data while the demo program is waiting for a button press from the user, it will switch into serial slave mode. See Section 10.a for more information.
The source code for the demo program is included with the Pololu AVR C/C++ Library described in Section 6, in the folder examples\3pi-demo-program.

4.d. Included Accessories

The 3pi robot ships with two through-hole red LEDs and two through-hole green LEDs. There are connection points for three optional LEDs on your 3pi: one next to the power button to indicate when the 3pi is on and two user-controllable LED ports near the front edge of the robot. Using these LEDs is completely optional as the 3pi will function just fine without them. You can customize your 3pi by choosing your desired combination of red and green LEDs, or you can even use your own LEDs [http://www.pololu.com/category/
20/leds] if you want more color/brightness options.
Note that you should only add LEDs if you are comfortable soldering, and you should take care to avoid desoldering any of the components near the through-hole LED pads. LEDs are polarized, so be sure to solder them such that the longer lead connects to the pad marked with the +. Before you solder them in you can press-fit them in place and check to make sure they light as expected. Once soldered in place, carefully trim off the excess portion of the LED leads.
Your 3pi also ships with three shorting blocks of each color: blue, red, yellow, black. This means you can customize your 3pi by selecting the shorting block color you most prefer, or you can use a mixture of colors!
4. Getting Started with Your 3pi Robot Page 9 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation

5. How Your 3pi Works

5.a. Batteries

Introduction to Batteries

The power system on the 3pi begins with the batteries, so it is important to understand how your batteries work. A battery contains a carefully controlled chemical reaction that pulls electrons in from the positive (+) terminal and pushes them out of the negative (-) terminal. The most common type is the alkaline battery, which is based on a reaction between zinc and manganese through a potassium hydroxide solution. Once alkaline batteries are completely discharged, they cannot be reused. For the 3pi, we recommend rechargeable nickel-metal-hydride (NiMH) batteries, which can be recharged over and over. NiMH batteries are based on a different chemical reaction from alkaline batteries, but you don’t need to know anything about the chemical details to use a battery: everything you need to know about it is measured with a few simple numbers. The first is the strength with which the electrons are pushed, which we measure in volts (V), the units of electric potential. An NiMH battery has a voltage of about 1.2 V. To understand how much power you can get out of a battery, you also need to know how many electrons the battery can push per second – this is the electric current, measured in amps (A). A current of 1 A corresponds to about 6×1018electrons flowing out one side and in to the other each second, which is such a huge number that it’s easier to talk about it just in terms of amps. 1 A is also a typical current that a medium-sized motor might use, and it’s a current that will put a significant strain on small (AAA) batteries.
Two rechargeable AAA Ni-MH
batteries.
For any battery, if you attempt to draw more and more current, the voltage produced by the battery will drop, eventually dropping all the way to zero at the short circuit current: the current that flows if you connect one side directly to the other with a thick wire. (Don’t try this! The wire might overheat and melt, and the battery could explode.) The following graph shows a good model of how the voltage on a typical battery drops as the current goes up:
Battery voltage vs. current.
The power put out by a battery is measured by multiplying the volts by the amps, giving a measurement in watts (W). For example, at the point marked in the graph, we have a voltage of 0.9 V and a current of 0.6 A, this means that the power output is 0.54 W. If you want more power, you need to add more batteries, and there are two ways to do it: parallel and series configurations. When batteries are connected in parallel, with all of their positive terminals tied together and all of their negative terminals tied together, the voltage stays the same, but the maximum current
5. How Your 3pi Works Page 10 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
output is multiplied by the number of batteries. When they are connected in series, with the positive terminal of one connected to the negative terminal of the next, the maximum current stays the same while the voltage multiplies. Either way, the maximum power output will be multiplied by the number of batteries. Think about two people using two buckets to lift water from a lake to higher ground. If they stand next to each other (working in parallel), they will be able to lift the water to the same height as before, while delivering twice the amount of water. If one of them stands uphill from the other, they can work together (in series) to lift the water twice as high, but at the same rate as a single person.
In practice, we only connect batteries in series. This is because different batteries will always have slightly different voltages, and if they are connected in parallel, the stronger battery will deliver current to the weaker battery, wasting power even when there is nothing else in the circuit. If we want more current, we can use bigger batteries: AAA, AA, C, and D batteries of the same type all have the same voltage, but they can put out very different amounts of current.
The total amount of energy in any battery is limited by the chemical reaction: once the chemicals are exhausted, the battery will stop producing power. This happens gradually: the voltage and current produced by a battery will steadily drop until the energy runs out, as shown in the graph below:
Battery voltage vs. time.
A rough measure of the amount of energy stored in a battery is given by its milliamp-hour (mAH) rating, which specifies how long the battery will last at a given discharge rate. The mAH rating is the discharge rate multiplied by how long the battery lasts: if you draw current at a rate of 200 mA (0.2 A), and the battery lasts for 3 hours, you would call it a 600 mAH battery. If you discharge the same battery at 600 mA, you would get about an hour of operation (however, battery capacity tends to decline with faster discharge rates, so you might only get 50 minutes).
Note: If you have purchased rechargeable batteries for the 3pi, you should fully charge them before you first use them. You should never attempt to program your 3pi if its batteries are drained or uncharged. Losing power during programming could permanently disable your 3pi.

5.b. Power management

Battery voltage drops as the batteries are used up, but many electrical components require a specific voltage. A special kind of component called a voltage regulator helps out by converting the battery voltage to a constant, specified voltage. For a long time, 5 V has been the most common regulated voltage used in digital electronics; this is also called TTL level. The microcontroller and most of the circuitry in the 3pi operate at 5 V, so voltage regulation is essential. There are two basic types of voltage regulators:
5. How Your 3pi Works Page 11 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
Linear regulators use a simple feedback circuit to vary how much energy is passed through and how much is discarded. The regulator produces a lower output voltage by dumping unneeded energy. This wasteful, inefficient approach makes linear regulators poor choices for applications that have a large difference between the input and output voltages, or for applications that require a lot of current. For example, 15 V batteries regulated down to 5 V with a linear regulator will lose two-thirds of their energy in the linear regulator. This energy becomes heat, so linear regulators often need large heat sinks, and they generally don’t work well with high-power applications.
Switching regulators turn power on and off at a high frequency, filtering the output to produce a stable supply at the desired voltage. By carefully redirecting the flow of electricity, switching regulators can be much more efficient than linear regulators, especially for high-current applications and large changes in voltage. Also, switching regulators can convert low voltages into higher voltages! A key component of a switching regulator is the inductor, which stores energy and smooths out current; on the 3pi, the inductor is the gray block near the ball caster labeled “100”. A desktop computer power supply also uses switching regulators: peek through the vent in the back of your computer and look for a donut-shaped piece with a coil of thick copper wire wrapped around it – that’s the inductor.
The power management subsystem built into the 3pi is shown in this block diagram:
The voltage of 4 x AAA cells can vary between 3.5 – 5.5 V (and even to 6 V if alkalines are used). This means it’s not possible simply to regulate the voltage up or down to get 5 V. Instead, in the 3pi, a switching regulator first boosts the battery voltage up to 9.25 V (Vboost), and a linear regulator regulates Vboost back down to 5 V (VCC). Vboost powers the motors and the IR LEDs in the line sensors, while VCC is used for the microcontroller and all digital signals.
Using Vboost for the motors and sensors gives the 3pi three unique performance advantages over typical robots, which use battery power directly:
• First, a higher voltage means more power for the motors, without requiring more current and a larger motor driver.
• Second, since the voltage is regulated, the motors will run the same speed as the batteries drop from 5.5 down to 3.5 V. You can take advantage of this when programming your 3pi, for example by calibrating a 90° turn based on the amount of time that it takes.
• Third, at 9.25 V, all five of the IR LEDs can be powered in series so that they consume the lowest possible amount of power. (Note that you can switch the LEDs on and off to save even more power.)
5. How Your 3pi Works Page 12 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
One other interesting thing about this power system is that instead of gradually running out of power like most robots, the 3pi will operate at maximum performance until it suddenly shuts off. This can take you by surprise, so you might want your 3pi to monitor its battery voltage.
A simple circuit for monitoring battery voltage is built in to the 3pi. Three resistors, shown in the circuit at right, comprise a voltage divider that outputs a voltage equal to two-thirds of the battery voltage, which will always be safely below the main microcontroller’s maximum analog input voltage of 5 V. For example, at a battery voltage of 4.8 V, the battery voltage monitor port ADC6 will be at a level of 3.2 V. Using 10-bit analog-to-digital conversion, where 5 V is read as a value of 1023, 3.2 V is read as a value of 655. To convert it back to the actual battery voltage, multiply this number by 5000 mV×3/2 and divide by
1023. This is handled conveniently by the read_battery_millivolts_3pi() function (provided in the Pololu AVR Library; see Section 6 for more information), which averages ten samples and returns the battery voltage in mV:
unsigned int read_battery_millivolts_3pi() {
}
return readAverage(6,10)*5000L*3/2/1023;

5.c. Motors and Gearboxes

A motor is a machine that converts electrical energy to motion. There are many different kinds of motors, but the most important for low-cost robotics is the brushed DC motor, which is the type used on the 3pi. A brushed DC motor typically has permanent magnets on the outside and several electromagnetic coils mounted on the motor shaft (armature). The “brushes” are sliding pieces of metal that switch the power from one coil to the next as the shaft turns so that magnetic attraction between the coil and the magnets continuously pulls the motor in the same direction.
The primary values that describe a running motor are its speed, measured in rpm, and its torque, measured in kg·cm or oz·in (pronounced “ounce­inches”). The units for torque show the dependence on both force and distance; for example, a motor that produces 6 oz·in of torque can product a force of 6 oz. with a 1-inch lever arm, 3 oz. with a 2-inch lever, and so on.
A typical small brushed DC
motor, with no gearbox.
Multiplying the torque and speed (measured at the same time) give us the power delivered by a motor. We see, therefore, that a motor with twice the speed and half the torque as another has the same power output.
Every motor has a maximum speed (when no force is applied) and a maximum torque (when the motor is completely stopped). We call these the free-running speed and the stall torque. Naturally, a motor uses the least current when no force is applied to it, and the current drawn from the batteries goes up until it stalls, so the free-running current and stall current are also important parameters characterizing the motor. The stall current is usually much higher than the free-running current, as shown in the graph below:
5. How Your 3pi Works Page 13 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
Motor operation: current and speed vs. torque.
The free-running speed of a small DC motor is usually many thousands of rotations per minute (rpm), much higher than the speed we want the wheels of a robot to turn. A gearbox is a system of gears that converts the high-speed, low-torque output of the motor into a lower-speed, higher-torque output that is a much better suited for driving a robot. The gear ratio used on the 3pi is 30:1, which means that for every 30 turns of the motor shaft, the output shaft turns once. This reduces the speed by a factor of 30, and (ideally) increases the torque by a factor of 30. The resulting parameters of the 3pi motors are summarized in this table:
Gear ratio: 30:1
Free-running speed: 700 rpm
The 30:1 gearmotor used on the
3pi.
Free-running current: 60 mA
Stall torque: 6 oz·in
Stall current: 540 mA
The two wheels of the 3pi each have a radius of 0.67 in, which means that the maximum force it can produce with two motors when driving forward is 2×6/0.67 = 18 oz. The 3pi weighs about 7 oz with batteries, so the motors are strong enough to lift the 3pi up a vertical slope or accelerate it at 2 g (twice the acceleration of gravity). The actual performance is limited by the friction of the tires: on a steep enough slope, the wheels will slip before they stall – in practice, this happens when the slope is around 30-40°.

Driving a motor with speed and direction control

One nice thing about a DC motor is that you can change the direction of rotation by switching the polarity of the applied voltage. If you have a loose battery and motor, you can see this for yourself by making connections one way and then turning the battery around to make the motor spin in reverse. Of course, you don’t want take the batteries out of your 3pi and reverse them every time it needs to back up – instead, a special arrangement of four switches, called an H-bridge, allows the motor to spin either backwards or forwards. Here is a diagram that shows how the H-bridge works:
5. How Your 3pi Works Page 14 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
If switches 1 and 4 are closed (the center picture), current flows through the motor from left to right, and the motor spins forward. Closing switches 2 and 3 causes the current to reverse direction and the motor to spin backward. An H-bridge can be constructed with mechanical switches, but most robots, including the 3pi, use transistors to switch the current electronically. The H-bridges for both motors on the 3pi are all built into a single motor driver chip, the TB6612FNG, and output ports of the main microcontroller operate the switches through this chip. Here is a table showing how output ports PD5 and PD6 on the microcontroller control the transistors of motor M1:
PD5 PD6 1 2 3 4 M1
0 0 off off off off off (coast)
0 1 off on on off forward
1 0 on off off on reverse
1 1 off off on on off (brake)
Motor M2 is controlled through the same logic by ports PD3 and PB3:
PD3 PB3 1 2 3 4 M2
0 0 off off off off off (coast)
0 1 off on on off forward
1 0 on off off on reverse
1 1 off off on on off (brake)
5. How Your 3pi Works Page 15 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
Speed control is achieved by rapidly switching the motor between two states in the table. Suppose we keep PD6 high (at 5 V, also called a logical “1”) and have PD5 alternate quickly between low (0 V or “0”) and high. The motor driver will switch between the “forward” and “brake” states, causing M1 to turn forward at a reduced speed. For example, if PD6 is high two thirds of the time (a 67% duty cycle), then M1 will turn at approximately 67% of its full speed. Since the motor voltage is a series of pulses of varying width, this method of speed control is called pulse-width modulation (PWM). An example series of PWM pulses is shown in the graph at right: as the size of the pulses decreases from 100% duty cycle down to 0%, the motor speed decreases from full speed down to a stop.
PWM speed control, showing gradual deceleration.
In the 3pi, speed control is accomplished using special PWM outputs of the main microcontroller that are linked to the internal timers Timer0 and Timer2. This means that you can set the PWM duty cycle of the two motors once, and the hardware will continue to produce the PWM signal, in the background, without any further attention.
The set_motors() function in the Pololu AVR Library (see Section 6 for more information) lets you set the duty cycle, and it uses 8-bit precision: a value of 255 corresponds to 100% duty cycle. For example, to get 67% on M1 and 33% on M2, you would call
set_motors(171,84);
To get a slowly decreasing PWM sequence like the one shown in the graph, you would need to write a loop that gradually decreases the motor speed over time.

Turning with a differential drive

The 3pi has an independent motor and wheel on each side, which enables a method of locomotion called differential drive. It is also known as a “tank drive” since this is how a tank drives. It is completely unlike the steering system
of automobile, which uses a single drive motor and steerable front wheels. Turning with a differential drive is accomplished by running the two motors at different speeds. In the previous set_motors() example, the left wheel will spin faster than the right, driving the robot forward and to the right. The difference in speeds determines how sharp the turn will be, and spinning in place can be accomplished by running one motor forward and one backward. Spinning is an especially effective maneuver for a round robot, and you won’t have to worry about parallel parking!
5. How Your 3pi Works Page 16 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
The 3pi demonstrating the effects of various motor
settings.

5.d. Digital inputs and sensors

The microcontroller at the heart of the 3pi, an Atmel AVR mega168 or mega328, has a number of pins which can be configured as digital inputs: they are read by your program as a 1 or a 0 depending on whether the voltage is high (above about 3 V) or low (below about 1.5 V). Here is the circuit for one of the pushbutton inputs:
Normally, the pull-up resistor R (20-50 k) brings the voltage on the input pin to 5 V, so it reads as a 1, but pressing the button connects the input to ground (0 V) through a 1 k resistor, which is much lower than the value of R. This brings the input voltage very close to 0 V, so the pin reads as a 0. Without the pull-up resistor, the input would be “floating” when the button is not pressed, and the value read could be affected by residual voltage on the line, interference from nearby electrical signals, or even distant lightning. Don’t leave an input floating unless you have a good reason. Since the pull-up resistors are important, they are included within the AVR – the resistor R in the picture represents this internal pull-up, not a discrete part on the 3pi circuit board.
A more complicated use for the digital inputs is in the reflectance sensors. Here is the circuit for the 3pi’s leftmost reflectance sensor, which is connected to pin PC0:
5. How Your 3pi Works Page 17 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
The sensing element of the reflectance sensor is the phototransistor shown in the left half of U4, which is connected in series with capacitor C21. A separate connection leads through resistor R12 to pin PC0. This circuit takes advantage of the fact the digital inputs of the AVR can be reconfigured as digital outputs on the fly. A digital output presents a voltage of 5 V or 0 V, depending on whether it is set to a 1 or a 0 by your program. The way it works is that the pin is set to an output and driven high (5 V) to charge the output node. The pin is then set to an input, and the voltage falls as current flows through the phototransistor. Here is an oscilloscope trace showing the voltage on the capacitor (yellow) dropping as current flows through the phototransistor, and the resulting digital input value of pin PC0 (blue):
The rate of current flow through the phototransistor depends on the light level, so that when the robot is over a bright white surface, the value returns to 0 much more quickly than when it is over a black surface. The trace shown above was taken when the sensor was on the edge between a black surface and a white one – this is what it looks like on pure white:
The length of time that the digital input stays at 1 is very short when over white, and very long when over black. The function read_line_sensors() in the Pololu AVR Library switches the port as described above and returns the time for each of the five sensors. Here is a simplified version of the code that reads the sensors:
5. How Your 3pi Works Page 18 of 63
Pololu 3pi Robot User's Guide © 2001–2014 Pololu Corporation
time = 0; last_time = TCNT2; while (time < _maxValue) {
}
// Keep track of the total time. // This implicity casts the difference to unsigned char, so // we don't add negative values. unsigned char delta_time = TCNT2 - last_time; time += delta_time; last_time += delta_time;
// continue immediately if there is no change if (PINC == last_c)
continue;
// save the last observed values last_c = PINC;
// figure out which pins changed for (i = 0; i < _numSensors; i++) {
if (sensor_values[i] == 0 && !(*_register[i] & _bitmask[i]))
sensor_values[i] = time;
}
This piece of code is found in the file src\PololuQTRSensors\PololuQTRSensors.cpp. The code makes use of timer TCNT2, which is a special register in the AVR that we have configured to count up continuously, incrementing every
0.4 μs. Basically, the code waits until one of the sensors changes value, counting up the elapsed time in the variable
time. (It is important to use a separate variable for the elapsed time since the timer TCNT2 periodically overflows,
dropping back to zero.) Upon detecting a transition from a 1 to a 0 on one of the sensors (by measuring a change in the input port PINC), the code determines which sensor changed and records the time in the array sensor_values[i]. After the time limit _maxValue is reached (this is set to 2000 by default on the 3pi, corresponding to 800 μs), the loop ends, and the time values are returned.

5.e. 3pi Simplified Schematic Diagram

A full understanding of how your 3pi works cannot be achieved without first understanding its schematic diagram:
5. How Your 3pi Works Page 19 of 63
Loading...
+ 44 hidden pages