Encoders 013 - Absolute Encoders - Introduction

In earlier posts to this blog, we introduced incremental encoders in Encoders 009 and continued that discussion in Encoders 011, where we talked about Quadrature and Index. In today's post, we'll introduce another major category of encoders: Absolute Encoders.

Where Am I?

In our posts on incremental encoders, we developed a simplified picture showing essential components:

Drawing 001: Two Outputs - Quadrature

In the picture, the encoder has a resolution of 16 Cycles per Revolution (CPR). Two LEDs shine light at a transparent disk with 16 lines and 16 windows. When light shines through a window, the photo sensor on the other side outputs a signal that goes high. When the disk rotates and a line blocks the light, the signal goes low. As the disk moves through one rotation, the high/low cycle repeats 16 times—and then we're back where we started.

Let's look at just the disk, by itself.

Drawing 002: 16 CPR Disk

Notice anything special about any particular line? That's right—nothing! There is nothing special about any of the lines. In fact, if we zoom in and take a closer look at one single line, and then the line 5 lines later, and another 6 lines after that, here is what we see –

Drawing 003: Three Identical Lines

Each line looks like every other line; all the windows look the same. Even if we look closely at a line or window, we can't tell where it's located on the disk.

In applications that can use incremental encoders, this isn't a problem. We're mainly interested in the count as each line goes by the photo sensor. Applications that simply monitor speed or distance do just fine as each line passes; they don't need to know, "Hey! Which line was that that just went by?" They just need to start counting, and keep counting while the motion continues: "One, two, three…" and then a while later, "…nineteen, twenty, twenty-one…" and so on. For incremental encoders, what matters is the relative position—begin anywhere, move to the next position, and then the next…

But there are applications where we need to determine absolute position—and know exactly which part of the disk we're looking at.

Here I Am!

How can we find a specific location on an encoder disk? We could try numbering each line.

Drawing 004: Numbered Lines

That works if the one doing the counting is a human—but our count is generated by an LED and photo sensor, and they can't read numbers, they can only read black and white; on and off; one and zero…

Hmm, that sounds familiar… ones and zeroes…. 1's and 0's… 0001, 0010… Let's try a different way of numbering our 16-sector disk.

Drawing 005: Absolute Encoder 4-Track

We've created four bands. Each band represents a bit in a binary code, with the least significant bit on the outside rim. We've added an LED array, and photo sensors on the other side of the disk. Now when the disk rotates—or even if it's stopped—the sensors will output highs and lows, each determined by whether the band is black or transparent.

If we zoom in and look at three random positions, like we did with the incremental encoder, we might see something like this.

Drawing 006: Three Binary Positions

Which positions are they? No problem! In binary, left to right those are 0001, 0101, 1100 – or, in natural numbers, positions 1, 5 and 12.

I know where I am! I can now determine the absolute position of any location on the disk.

The Traditional Absolute Encoder

For a traditional absolute encoder, as we've shown it above, resolution is often expressed in bits, which refers to positions per rotation (also called codes per rotation). To increase resolution, manufacturers add a band for each bit. Here are two examples:

  • 10-bit encoders have 10 bands, and can identify:
    • 1,024 positions per revolution.
    • 0.35° rotation angle per position
  • 12-bit encoders have 12 bands, and can identify:
    • 4,096 codes per revolution.
    • 0.09° rotation angle per position

The encoder disk from our exercise above, with its 16 positions, has 4-bit resolution and a 22.5° rotation angle per position.

Other patterns besides the one we've shown have been used to make traditional absolute encoders, but the concept remains the same: bands of black lines and transparent windows generate digital numbers.

12-bit Resolution in a Single Band

For a completely different way to create an absolute encoder, consider the single band with a bar code along the rim, used by some manufacturers.

Drawing 007: Absolute Bar Code on Rim

The LED array and photo sensors are positioned along the circumference. As the disk rotates, the sensors see a unique bar code at each location.

An advantage of absolute encoders that employ bar codes is programmable resolution. The data sheet from one manufacturer, for example, shows a 12-bit absolute encoder whose resolution can be programmed anywhere from 2 to 4,096 positions per revolution. Users can select the best resolution for their application.

Pseudo-Absolute Encoders

At the end of our earlier post, Encoders 011, we introduced the Index feature for incremental encoders. Index is a single mark, located on its own band on the encoder disk.

Drawing 008: Three Outputs - Index

With Index, you can identify a single location on the disk—and from that location, you can count and keep track of every other location. Using this technique, it's possible to operate an incremental encoder with index as a pseudo-absolute encoder.

Why the qualifying word 'pseudo'? Because you know where you are on the disk—but only until the power goes off. If there's a power failure, or you cycle power off and on, you will lose all position information. In that event, your system will need to perform a homing move to find the index position, and then start counting from that point.

Single-Turn versus Multi-Turn

Everything we've said so far has been about finding your location within a single revolution of the disk. What happens when the disk keeps rotating? That depends on which type of absolute encoder you have.

  • Single-Turn Absolute Encoders : will restart the count and begin from zero for each rotation.
  • Multi-Turn Absolute Encoders : will retain position information for additional rotations.

There is usually a limit to the number of turns a multi-turn encoder will keep track of.

When Do You Need an Absolute Encoder?

Incremental encoders are less expensive than absolute encoders, so to save costs most users will choose incremental encoders. But for some applications, an absolute encoder is the only solution. How do you tell the difference?

It comes down to this: in your system, if you power off and then power back on, do you need to know where you are (the shaft angle) after the power cycles?

  • If you can move your system to a home position, find an index, and restart from there – you don't need an absolute encoder
  • If you need to know where you are right away, and cannot move your system to a home position first—then you need an absolute encoder

An absolute encoder will tell you where you are, with no need for motion beforehand.

In this post, we've used optical encoders for illustrative purposes, but absolute encoders are also available in other encoder technologies (some of which we'll address in our next post), such as magnetic and capacitive. The same requirements for distinctive reporting apply to those technologies as well.

Coming Up in Absolute Encoders…

In this post, we've seen a few different ways to create an encoder disk that generates unique, absolute positions. But what do the output waveforms look like? We saw with incremental encoders that their output waveform is a series of high and lows, +5V and 0V. How about absolute encoders? We'll discuss that soon, when we continue this topic in Absolute Encoders – Part 2.

It is my goal to make this blog as informative, engaging and as accurate as possible. If you ever have some additional or contrary information, please contact me directly and I will be glad to make any appropriate corrections in a future post. Previous Post

Written by Steve Mathis
Director of Customer Relations & Marketing

"My goal at US Digital is to work with the excellent teams here to contribute to the success of our customers by eliminating pain points and making it easy for them to do business with us."

Encoders 012 - Encoder Applications - Encoders Used on Drones

The surge in popularity of drones in recent years has been remarkable. Although sometimes we hear about them when they cause trouble-like flying too close to commercial aircraft-more frequently we hear about drones because of the interesting new ways they’re being put to use.

Drones are used in agriculture, to monitor crop growth and field conditions. Home inspectors for insurance companies use drones to check on the condition of a roof-without having to risk injury by climbing ladders. Workers on oil pipelines have used drones to improve pipeline inspection.

And of course, many companies are developing autonomous drones that will deliver packages-or pizza-directly to a customer’s doorstep. The company Flirtey, for example, has made successful pizza delivery demonstration flights; their next step is to develop a service to deliver automated external defibrillators (AEDs) to 911 callers, via autonomous drones.

No matter what type of drone or how it’s put to use, there are often many moving parts. Drone developers who need to sense the position, angle or speed of mechanisms in motion find that encoders are ideal for the task.

Typical applications for encoders used on drones include the following:

  • Control Surfaces: flaps, ailerons, vertical elevators, speed brakes
  • Airflow Indicators: angle of attack (A0A); angle of sideslip (AOS)
  • Landing Gear: to verify extension or retraction
  • Payload: gimbals for video cameras and optical devices; packages

Let’s look at a few examples of how people who develop drones use encoders in their research.

The Angle of Attack (AOA) probe is a sensor that measures the angle between an aircraft control surface and the oncoming airflow. The video shows a probe moving up and down in the wind. Notes below the video reveal that the sensor that converts probe motion to an electrical signal is an absolute magnetic encoder.

Groups of drones can be flown in coordinated formations, sometimes known as “swarms”. This is useful if you need to monitor a large area, or measure many points at once. In our next example, researchers are developing sensors to measure angle of attack (AOA), and angle of sideslip (AOS). The information is shared between drones to coordinate their flight formation. Here’s a photo of how the sensors are mounted:

AOA and AOS sensors

The AOA and AOS sensors each use a magnetic absolute encoder, as the authors mention in their research paper (in the paper, see the paragraphs immediately above and below the photo).

The payload for a drone is often a video camera, used to transmit images from the air to the ground. The camera can be mounted in a gimbal, which allows the camera to move in the roll, tilt and pan directions. You can see a gimbal mounted below the nose of Georgia Tech’s research helicopter, the GTMax, in the photo below.

Georgia Techs research helicopter, GTMax

Here’s a close-up of the gimbal. In their research paper, the authors explain that the gimbal uses three incremental encoders, each with an Index. The quadrature output from the encoders transmits information about the roll angle, the tilt angle, and rotation about the pan axis, as well as direction of motion.

Close-up of GTMax gimbal

The Index channel transmits one pulse per encoder revolution; the system uses that pulse to enable positioning at power-up.

The requirements for a sensor used on a drone can be demanding, but with light weight and low power consumption, the right encoder can meet the test.

It is my goal to make this blog as informative, engaging and as accurate as possible. If you ever have some additional or contrary information, please contact me directly and I will be glad to make any appropriate corrections in a future post. Previous Post


Written by Steve Mathis
Director of Customer Relations & Marketing

"My goal at US Digital is to work with the excellent teams here to contribute to the success of our customers by eliminating pain points and making it easy for them to do business with us."

Encoders 011 - Incremental Encoders - Quadrature & Index

This post continues our discussion of incremental encoders which began in our Encoders 009 post.

One Output - Channel A

In that post, we started with a simple encoder which had a single window in the shape of a slot. We gradually increased the resolution by adding more lines and windows to the encoder’s disk. By the end of the post we showed a typical encoder signal, a square wave output. Let’s call it Channel A. The output went high (+5V) when the encoder’s sensor received light from an LED; and it went low (0V) when a line blocked light from the LED.

Drawing 001: Single Output

The Channel A output waveform looks like this.

Drawing 002: Single Output Waveform

But there’s more to the story. That single output might be fine if you only want to measure distance and speed in one direction, like in a cut-to-length machine.

In many applications, however, motion occurs in two directions: clockwise and counterclockwise, or forward and backward. With a single output channel, you can tell that something in the system is moving-but you can’t tell in which direction the motion is occurring.

A single output has another problem: every cycle looks the same… a line followed by a window… then a line followed by a window… then another line followed by a window… You can’t tell which segment of the disk is aligned with the sensor. You could count cycles from a known starting position-but if the power is turned off and then restored, you’ll lose position information.

These two problems can be solved by adding more output signals.

  • Quadrature Outputs - enable us to determine direction of motion.
  • Index Output - helps us locate a unique position on the encoder disk.

We’ll discuss quadrature first.

Two Outputs: Channel A and Channel B - Quadrature

Let’s begin by adding another LED and photo sensor. (In the drawing, we’ll extend the lines on the encoder disk so that everything fits.)

Drawing 003: Two Outputs - Not Quadrature

Now we have a second output-Channel B. The output from the two signals might look like this.

Drawing 004: Two Outputs - Not Quad - Waveform

We’re making progress, but we can’t determine direction yet. The two signals both rise and fall at the same time. We need a way to change that.

Here’s where the magic happens.

Let’s move the LED and sensor for Channel A over a bit; we’ll shift them a distance of 25% of a full cycle. (That’s one fourth, or one “quadrant” of a cycle-which is where the name “quadrature” comes from.)

Drawing 005: Two Outputs - Quadrature

Now the two output channels look like this.

Drawing 006: Two Outputs - Quadrature - Waveform

As the disk rotates in the clockwise direction, Channel A goes high when its sensor receives light. Then a quarter of a cycle later, Channel B goes high.

As the disk rotates in the counterclockwise direction, after Channel B goes high, one quarter of a cycle later, Channel A will go high.

We can now tell the direction of motion! The commonly used terminology to describe direction is “A leads B for clockwise shaft rotation, B leads A for counterclockwise shaft rotation.”

You also need to know from which end of the shaft we’re viewing the motion. A shaft moving clockwise when viewed from one end would appear to move counterclockwise from the other end! Because each encoder and motor manufacturer may use a different vantage point, ensure that your system follows that same perspective.

Quadrature’s Bonus - Extra Pulses per Revolution (PPR)

We’ve defined resolution as the number of Cycles Per Revolution (CPR) of the encoder disk. Although the number of lines printed on the disk is fixed, with quadrature you can get up to 4 times as many output pulses as the number of lines or windows.

Drawing 007: Resolution Multiplication

This is known as resolution multiplication and can be accomplished with an encoder to counter interface chip such as an LS7183N. As an example, consider an encoder with 100 lines and 100 windows on its disk-a resolution of 100 CPR:

  • x 1 - if we count the rising edge of each Channel A pulse as the disk rotates, we’ll get 100 pulses per revolution (100 PPR). This is the same number as the resolution of 100 CPR, like you would expect if you multiply by 1.
  • x 2 - if we count each rising edge and each falling edge of Channel A, we’ll get 2 pulses per cycle, which adds up to 200 pulses per revolution (200 PPR).
  • x 4 - if we count each rising edge and falling edge of both Channel A and Channel B, we’ll get 4 pulses per cycle, for a total of 400 pulses per revolution (400 PPR).

This technique of resolution multiplication can effectively double or quadruple the resolution of the encoder.

We’ve used quadrature to solve the direction of rotation problem, with an added bonus of enhanced resolution. Now, if we could just figure out where we are within that rotation…

A Third Output - the Index Channel

Let’s go back to the drawing board one last time, and add a solid ring with only one window. We’ll also add another LED and light sensor to detect that window.

Drawing 008: Three Outputs - Index

This thin window occupies its own track on the disk. The window is called an Index, and its output is a third channel called the Index Channel. (It’s sometimes called the registration marker or Z channel-where Z might stand for “zero position” aka the home location.)

Here’s what the outputs look like.

Drawing 009: Three Outputs - Index Waveform

As the encoder disk rotates, the Index Channel will change its output to high in precisely one position. It is common for a system to use this known position to perform a homing move upon powering up, or after an unexpected power cycle. You can also use the index to count rotations of a disk for an application with multiple turns.

That completes our introduction to incremental encoders. In a future blog post, Encoders 013, we’ll discuss absolute encoders, look at their output waveforms, and make some comparisons with incremental encoders.

It is my goal to make this blog as informative, engaging and as accurate as possible. If you ever have some additional or contrary information, please contact me directly and I will be glad to make any appropriate corrections in a future post. Previous Post


Written by Steve Mathis
Director of Customer Relations & Marketing

"My goal at US Digital is to work with the excellent teams here to contribute to the success of our customers by eliminating pain points and making it easy for them to do business with us."

Encoders 010 - Encoder Applications - Encoders Used on Mobile Robots

My plan for these posts has been to focus on technical concepts in posts released on the 2nd Tuesday of the month and focus on real world applications in posts released on the 4th Tuesday of the month. I’ll continue that pattern with today’s post and discuss the exciting application of Encoders Used on Mobile Robots.

Years ago, the world of science fiction promised us we would all have robots in our future. With the help of books from authors like Isaac Asimov and movies like Star Wars, we envisioned robots which could move about freely, communicate with us, and help us in many ways (Star Wars); or sometimes scare the living daylights out of us (Terminator).

When the first robots arrived in real life a few decades ago, they were very different than we imagined. They didn’t walk on two legs, or even four legs. They were industrial robots, firmly mounted on a pedestal, and they stayed in one place as they drilled holes, welded or painted.

Industrial robots have been great for automating manufacturing tasks—but where are those mobile robots that move around on their own and interact with us in our daily lives? Where are the science fiction robots?

Guess what—they’re here! And they rely on encoders to help them function.

A company named Savioke (pronounced SAVVY-oak) has developed their Relay robot to help in hospitality, medical and other settings.

Savioke robots in action

The robot is shaped like a tall cylinder. It can move throughout a hotel or hospital, navigating on its own and even calling for an elevator when necessary. The robot has a lid on top that opens to reveal a cargo compartment. Items for delivery are placed inside the compartment, and the robot rolls away to make the delivery.

If a guest in a hotel forgets their toothbrush or razor, they can call the front desk and the Relay robot can deliver a replacement for the forgotten item within minutes.

In a hospital, a nurse can draw a blood sample, place it in the Relay’s cargo bin, and the robot will quickly deliver the sample to the lab for analysis.

Savioke uses encoders on the drive wheels, to accurately sense and measure the distance the robot travels. They also use an encoder on the lid, to sense the angle of the lid when it opens.

By the way, an interesting book called The Sprint Book has a section that discusses an experiment Savioke performed in a real hotel with actual guests. The company worried about the reaction unsuspecting humans might have when they opened their doors to discover a robot outside. The short answer: humans loved it! Many guests even took selfies with the robot. (Amazon’s free “Look Inside” preview of the book includes the section about the experiment.)

Mobile robots are becoming popular in retail stores, too. Badger Technologies developed a mobile robot to monitor hazards in grocery stores like spills. They’ve continued to add features; Badger’s latest model roams store aisles and scans shelves for depleted inventory, misplaced items or incorrect price tags. Badger uses encoders on the drives that move the robot.

“Yes,” you say, “those are mobile robots. But they move by rolling. Where are the exciting science fiction robots? The ones that walk on their own two – or four, or six – legs?”

Researchers have been busy developing the capabilities of robots that walk, sometimes called “legged robots.” It hasn’t always been easy. This video from a few years ago shows researchers at the University of Michigan, plagued by an intermittent failure of what turned out to be an encoder interface board.

Engineers have been making steady progress. Students at Stanford are developing their cute “Doggo” robot, which can walk on four legs and even do backflips.

Doggo the robot

You can see Doggo go through its moves in this video:

The students designed Doggo to be open source. Anybody can download the plans and build their own Doggo robot.

The link for the Bill of Material (BOM) shows that Doggo uses 8 encoders and 8 motors. Each motor has an encoder used to track the motor angle.

The trend in legged mobile robots seems to be for development to start in university research laboratories. As researchers gain knowledge, they start spinoff companies, and then eventually team up with industrial partners for broader sales distribution.

Agility Robotics, located in Albany, Oregon is a good example. One of the co-founders is also a professor at Oregon State University. Agility developed the “Cassie” robot, a two-legged walking robot.

Agility Robotics Cassie robot

Cassie’s legs utilize encoders on their joints, to measure the joint angle, as detailed in this video and technical paper from researchers at the University of Michigan.

Agility Robotics’ YouTube channel has more videos of Cassie walking, like this one.

Agility’s next step was to add a torso and arms – and probably more encoders – mounted above Cassie’s hips and legs. They call their new robot Digit, and just a few weeks ago Ford Motor Company announced that it was teaming up with Agility Robotics to explore integrating Digit with Ford’s self-driving vehicles. The plan is to deliver packages straight to a customer’s doorstep, with Digit stepping over obstacles and climbing staircases along the way.

Among many others, CNN reported the story about Ford and Agility, and explained that Amazon and FedEx are also developing delivery robots—but those are rolling robots, and can’t climb stairs as well as Digit. Those robots also require that the customer unload the package from the robot. Digit, on the other hand, can drop off the package all by itself if no one is home.

The trend is clear: those sci-fi robots you’ve been wondering about are definitely coming. They might already be in your grocery store, and before long you could get a text message saying that your pizza is at your front door—delivered by a mobile robot, every inch of its progress monitored by its encoders.

It is my goal to make this blog as informative, engaging and as accurate as possible. If you ever have some additional or contrary information, please contact me directly and I will be glad to make any appropriate corrections in a future post. Previous Post


Written by Steve Mathis
Director of Customer Relations & Marketing

"My goal at US Digital is to work with the excellent teams here to contribute to the success of our customers by eliminating pain points and making it easy for them to do business with us."

Encoders 009 - Introduction to Incremental Encoders

This post continues our discussion of the various classifications of encoders identified previously

Form of Output

One of the most common classifications used for encoders is whether their architecture is incremental or absolute in design. This refers to the type of output the encoder emits, or what information is being provided by the encoder. This post will begin our discussion of incremental output and our future post will continue that discussion. Later, we'll have a discussion of absolute encoder output and make some comparisons between incremental and absolute encoders.

Incremental Output

The most common encoders are incremental encoders, for two main reasons. First, the information supplied by an incremental encoder is sufficient for most applications. The second reason is just a matter of economics and simplicity: it is much more cost effective to manufacture an incremental encoder than an absolute encoder.

Incremental Output

A very rudimentary form of an incremental encoder is shown above. It only involves a disk with one slot, an LED, and a photo detector. The detector provides an output each time it "sees" the LED.

The first piece of information that can be determined by an incremental encoder's output is distance. As the above disk rotates, each time the slot is aligned with the LED and detector, the detector produces an output. The disk has rotated through an angle of 360 mechanical degrees. A controller can use this information to calculate distance traveled in a system.

World's Largest Encoder'

The "encoder & controller" represented by the picture shown above is a reconstruction of an odometer made over 2,200 years ago. Each time the cart's wheels rotate, a pin on the axle engages a cog on a system of cogwheels that keep track of total distance traveled.


A second piece of information which can be determined by an incremental encoder's output is velocity, or speed of movement - the encoder essentially acts as a tachometer. As the disk in our first drawing above rotates, each time the slot is aligned with the LED and detector, the detector produces an output. The number of outputs in a minute would be the RPM or speed of the disk.

Although in the rudimentary drawing of an encoder at the beginning of this post you will be able to determine if a full rotation has taken place, for most of the 360 degrees, movement can take place without that movement being reported. The disk rotates without a change in output until the slot is reached.

Disk Model

To resolve that issue, a disk can be used with multiple slots as is shown in the picture above from a blog post by Aditya Prasad. Please note in this specific design, it would work as shown with an optical sensor or with a magnetic sensor as described earlier in the same post.

Now with 15 slots and 15 teeth, the optical sensor will provide an output while the disk turns through 12 mechanical degrees and a slot is in front of the sensor. During the next 12 degrees, a tooth will block the light, and the optical sensor will provide no output.

Sensor Drawing

Most applications require an output when the movement is much less than 12 degrees so disks are made with much finer increments. The technical term used to define the size of increments used is resolution. We will discuss resolution in more detail in a future post but for now, we will define it as the number of outputs provided by the encoder based on the number of lines or windows on the disk.

Mmmm, pie!

To illustrate the resolution in everyday (or at least Thanksgiving Day) terms, think of resolution as the size of the pieces of a pie. Neither high resolution nor low resolution is better but the resolution should match the need. Speaking of pies, if one is extremely hungry, the pie on the left would be the best choice. However, if one is trying to limit their caloric intake, other than not eating the pie at all, a smaller piece would be the best choice.


All of the illustrations and examples have been focused on a single output as is further illustrated in the above drawing. The drawing is indicative of what that single output might look like on an oscilloscope. The bottom of the drawing represents an output of zero volts. The top of the drawing represents an output of five volts. The complete drawing is showing the changes in output or cycles as the disk rotates. When the sensor sees the LED, the output goes high (5 volts); when the disk via the line prevents the sensor from seeing the LED, the output goes low (0 volts).

One complete electrical cycle starts when the output goes high and ends just before it goes high again. One electrical cycle is 360 electrical degrees. For every mechanical revolution, the number of electrical cycles will be equivalent to the resolution or lines and windows on the disk.

The specification for resolution is CPR which stands for Cycles Per Revolution. An encoder with 512 CPR will have 512 lines and windows on the disk and, of course, produce a high and low output 512 times for each rotation of the disk.

NOTE: Unfortunately, there are some vendors who use the term CPR to mean counts per revolution which, depending on the vendor, that number can be twice as many or four times as many as the resolution. This will be discussed in more detail in a future post.


One drawback with incremental encoders is that with power cycling, there is no memory as to where the disk is, as all of the lines and windows on the disk are identical. If you have ever been lost, you know this feeling where your surroundings might look the same in every direction. Essentially the position of the disk in relation to the sensor is lost. We will show in our next post how we can use a search operation, like the search dogs shown above, to figure out where the disk is in its rotation.

Although we are able to calculate both distance moved and velocity from a single encoder output, one other piece of information provided by incremental encoders is direction of travel. Our future post will continue this discussion and explain how direction can be determined.

It is my goal to make this blog as informative, engaging and as accurate as possible. If you ever have some additional or contrary information, please contact me directly and I will be glad to make any appropriate corrections in a future post. Previous Post

Source for photo detector graphic - reviseomatic.org
Tachometer image source - boschperformance.com
Image source for ancient odometer - commons.wikimedia.org
Source for slotted disk on motor - technlab.blogspot.com
Pumpkin pie image source #1 - finecooking.com
Pumpkin pie image source #2 - bettycrocker.com
Image source for search dog team - vsar.org

Written by Steve Mathis
Director of Customer Relations & Marketing

"My goal at US Digital is to work with the excellent teams here to contribute to the success of our customers by eliminating pain points and making it easy for them to do business with us."

by Date