Products for USB Sensing and Control
Products for USB Sensing and Control


Unit 1 - 6115 4 St SE
Calgary AB  T2H 2H9
+1 403 282-7335

Quadrature Encoder Phidget

ID: ENC1000_0
Recommended for new designs: This product (or a similar replacement with a compatible form, fit and function) is estimated to be available for ten years or more.

Interface a quadrature encoder at speeds of up to 100,000 quadrature cycles per second to a port on your VINT Hub.


Quantity Available: 1000+

Qty Price
5 $14.25
10 $13.50
25 $12.00
50 $10.50
100 $9.75
250 $9.00
500 $8.25
1000 $7.50

The Quadrature Encoder Phidget interfaces with any 5V quadrature encoder. A quadrature encoder is the most commonly used feedback device for a DC or stepper motor. With an encoder, you can keep track of how far your motor has turned, which then allows you to control the position and velocity in your code. This Phidget connects to your computer through a VINT Hub.


  • Works with all 0-5V quadrature encoders - read incremental encoders with line driver, open collector, or push-pull output circuits
  • Read at speeds of up to 100,000 quadrature cycles per second
  • Power Saving Options - Turn off your encoder using your program when the device is not turning. When the encoder is not being powered, this board draws 20μA of current.


This Phidget is a smart device that must be controlled by a VINT Hub. For more information about VINT, have a look at the VINT Primer. You can use a Phidget Cable to simply and easily connect the two devices. Here's a list of all of the different VINT Hubs currently available:

Product Board
Image Part Number Price Number of VINT Ports Controlled By
HUB0000_0 $30.00 6 USB (Mini-USB)
HUB5000_0 $60.00 6 Local Network (Ethernet or Wi-Fi)
SBC3003_0 $120.00 6

Phidget Cables

Use a Phidget cable to connect this device to the hub. You can solder multiple cables together in order to make even longer Phidget cables, but you should be aware of the effects of having long wires in your system.

Product Physical Properties
Image Part Number Price Cable Length
3002_0 $2.00 600 mm
3003_0 $1.50 100 mm
3004_0 $3.00 3.5 m
3034_0 $1.50 150 mm
3038_0 $2.25 1.2 m
3039_0 $2.75 1.8 m
CBL4104_0 $1.75 300 mm
CBL4105_0 $2.00 900 mm
CBL4106_0 $2.50 1.5 m

Encoder Cables

For an easy way to connect an encoder to the 5-pin connector on the ENC1000, you can use these handy cables.

Product Physical Properties
Image Part Number Price Cable Length Cable Gauge
3019_0 $5.00 500 mm 26 AWG

Rotary Encoders

The ENC1000 can be used with any incremental quadrature encoder. For more details on the different kinds of encoders, have a look at the Encoder Primer. All of the rotary encoders listed below are compatible with this Phidget:

Product Encoder Properties
Image Part Number Price Output Circuit Type Encoder Resolution Encoder Speed Max
3530_1 $50.00 Push-Pull (Single-Ended) 360 CPR 3000 RPM
3531_0 $25.00 Push-Pull (Single-Ended) 300 CPR 6000 RPM
3532_1 $50.00 Push-Pull (Single-Ended) 360 CPR 4500 RPM
ENC4109_0 $10.00 Push-Pull 40 CPR 6000 RPM

Linear Encoders

These linear encoders can all be used with the ENC1000:

Product Physical Properties
Image Part Number Price Travel
ENC4110_0 $90.00 300 mm
ENC4111_0 $95.00 500 mm
ENC4112_0 $100.00 700 mm
ENC4113_0 $110.00 900 mm
ENC4114_0 $120.00 1.1 m
ENC4115_0 $340.00 1.4 m
ENC4116_0 $360.00 1.7 m
ENC4117_0 $380.00 2 m

Draw Wire Encoders

Here are all of the draw-wire encoders that can be used with the ENC1000:

Product Encoder Properties Physical Properties
Image Part Number Price Output Circuit Type Length Resolution Wire Pull Length Weight
ENC4104_0 $145.00 Push-Pull 80 μm/cyc 1 m 305 g
ENC4106_0 $135.00 Push-Pull 100 μm/cyc 600 mm 255 g
ENC4107_0 $150.00 Push-Pull 100 μm/cyc 1.5 m 485 g
ENC4108_0 $165.00 Push-Pull 100 μm/cyc 2.5 m 580 g

Getting Started

Welcome to the ENC1000 user guide! In order to get started, make sure you have the following hardware on hand:

Next, you will need to connect the pieces:

ENC1000 Functional.jpeg
  1. Connect the ENC1000 to the VINT Hub using the Phidget cable.
  2. Connect the encoder to the Phidget using an encoder cable.
  3. Connect the VINT Hub to your computer using a USB cable.

Now that you have everything together, let's start using the ENC1000!

Using the ENC1000

Phidget Control Panel

In order to demonstrate the functionality of the ENC1000, the Phidget Control Panel running on a Windows machine will be used.

The Phidget Control Panel is available for use on both macOS and Windows machines.


To open the Phidget Control Panel on Windows, find the Ph.jpg icon in the taskbar. If it is not there, open up the start menu and search for Phidget Control Panel

Windows PhidgetTaskbar.PNG


To open the Phidget Control Panel on macOS, open Finder and navigate to the Phidget Control Panel in the Applications list. Double click on the Ph.jpg icon to bring up the Phidget Control Panel.

For more information, take a look at the getting started guide for your operating system:

Linux users can follow the getting started with Linux guide and continue reading here for more information about the ENC1000.

First Look

After plugging the ENC1000 into your computer and opening the Phidget Control Panel, you will see something like this:

ENC1000 Panel.jpg

The Phidget Control Panel will list all connected Phidgets and associated objects, as well as the following information:

  • Serial number: allows you to differentiate between similar Phidgets.
  • Channel: allows you to differentiate between similar objects on a Phidget.
  • Version number: corresponds to the firmware version your Phidget is running. If your Phidget is listed in red, your firmware is out of date. Update the firmware by double-clicking the entry.

The Phidget Control Panel can also be used to test your device. Double-clicking on an object will open an example.


Double-click on the Encoder object, labelled Quadrature Encoder Phidget, in order to run the example:

ENC1000 Encoder Example.jpg

General information about the selected object will be displayed at the top of the window. You can also experiment with the following functionality:

  • Position Change: the number of ticks (or quadrature cycles) that have occurred since the last change event.
  • Time Change: the amount of time in milliseconds that has elapsed since the last change event.
  • Position: the total position in ticks relative to where the encoder was when the window was opened.
  • Index Position: the position where the index channel was last encountered. Some encoders do not support index, check your encoder's datasheet for more information.
  • Velocity: the average velocity in rotations per second. A CPR must be specified to enable this functionality.
  • Specify a counts per revolution (CPR) value to enable velocity calculation.
  • Modify the change trigger and/or data interval value by dragging the sliders. For more information on these settings, see the data interval/change trigger page.
  • Modify the IO Mode with the drop-down menu. For more information on IO Mode, see the technical section.

Finding The Addressing Information

Before you can access the device in your own code, and from our examples, you'll need to take note of the addressing parameters for your Phidget. These will indicate how the Phidget is physically connected to your application. For simplicity, these parameters can be found by clicking the button at the top of the Control Panel example for that Phidget.

The locate Phidget button is found in the device information box

In the Addressing Information window, the section above the line displays information you will need to connect to your Phidget from any application. In particular, note the Channel Class field as this will be the API you will need to use with your Phidget, and the type of example you should use to get started with it. The section below the line provides information about the network the Phidget is connected on if it is attached remotely. Keep track of these parameters moving forward, as you will need them once you start running our examples or your own code.

All the information you need to address your Phidget

Using Your Own Program

You are now ready to start writing your own code for the device. The best way to do that is to start from our Code Samples.

Select your programming language of choice from the drop-down list to get an example for your device. You can use the options provided to further customize the example to best suit your needs.

Code Sample Choose Language.png

Once you have your example, you will need to follow the instructions on the page for your programming language to get it running. To find these instructions, select your programming language from the Programming Languages page.

Technical Details


The ENC1000 can be used with a wide assortment of mechanical and optical encoders. The encoder should be of incremental quadrature output type, indicating that there will be two output channels (usually labeled A and B).

The maximum rate of the ENC1000 is specified at 100,000 quadrature cycles per second. In your application, this number relates directly to the number of revolutions per second you wish to measure, and the number of counts per revolution specified for your encoder. If your encoder's wheel has 1000 cycles per revolution, then the limit on measurable revolutions per second is 100 (6000rpm).

Interfacing Encoders

The ENC1000 can connect to any of the encoders we sell without any modification just by setting the EncoderIOMode property to Push-Pull . If you're trying to use your own encoder, you may need to change the IO mode to Open Collector or Line Driver mode. Have a look at the Encoder Primer for more details on what to use.


The encoder input on the ENC1000 uses a 5-pin, 0.100 inch pitch locking connector. The connectors are commonly available - refer to the Table below for manufacturer part numbers.

Manufacturer Part Number Description
Molex 50-57-9405 5 Position Cable Connector
Molex 16-02-0102 Wire Crimp Insert for Cable Connector
Molex 70543-0004 5 Position Vertical PCB Connector
Molex 70553-0004 5 Position Right-Angle PCB Connector (Gold)
Molex 70553-0039 5 Position Right-Angle PCB Connector (Tin)
Molex 15-91-2055 5 Position Right-Angle PCB Connector - Surface Mount

Note: Most of the above components can be bought at Digikey.

Calculating Velocity

When your program captures an encoder change event, it will receive two variables: positionChange (measured in 'ticks', four of which equal one quadrature count for the ENC1000) and timeChange (measured in milliseconds). You can use these values to easily compute the instantaneous velocity of the encoder. For example, our C# encoder example implements this method of velocity calculation:

void enc_change(object sender, Phidget22.Events.EncoderEncoderChangeEventArgs e) {


// Convert time change from milliseconds to minutes
double timeChangeMinutes = e.TimeChange / 60000.0;
// Calculate RPM based on the positionChange, timeChange, and encoder CPR (specified by the user)
double rpm = (((double)e.PositionChange / CPR) / timeChangeMinutes);



This implementation may be useful if you're graphing the RPM on a line graph, but if it's being used to display the current RPM as a single number, it won't be very helpful because when the motor changes speed or direction frequently, it'll be hard to read the velocity as a meaningful value. This method can also be prone to variations in velocity if the encoder's CPR is low and the sampling rate is high. To solve these problems, you should decide on a time interval during which you'll gather data, and take a moving velocity calculation based on that data. You can use the Queue data type to make this easy:

Queue<double> positionChangeQueue = new Queue<double>();
Queue<double> timeChangeQueue = new Queue<double>();

void enc_change(object sender, Phidget22.Events.EncoderEncoderChangeEventArgs e) {

double totalPosition = 0;
double totalTime = 0;
int n = 500; // sampling window size, duration is 500*t where t is the data interval of the ENC1000

// add the newest sample to the queue

// If we've exceeded our desired window size, remove the oldest element from the queue
if ( positionChangeQueue.Count >= n ) {

// Calculate totals for position and time
foreach( double positionChange in positionChangeQueue ) {

     totalPosition += positionChange;

foreach( double timeChange in timeChangeQueue ) {

     totalTime += timeChange;

// Convert time change from milliseconds to minutes
double timeChangeMinutes = e.TimeChange / 60000.0;
// Calculate RPM based on the positionChange, timeChange, and encoder CPR (specified by the user)
double rpm = (((double)e.PositionChange / CPR) / timeChangeMinutes);


Check out this project for even more information on encoder velocity.

What to do Next

  • Programming Languages - Find your preferred programming language here and learn how to write your own code with Phidgets!
  • Phidget Programming Basics - Once you have set up Phidgets to work with your programming environment, we recommend you read our page on to learn the fundamentals of programming with Phidgets.

Product Specifications

Board Properties
Controlled By VINT
Encoder Interface
Number of Encoder Inputs 1
Count Rate Max 400000 pulses/s
Encoder Interface Resolution x4
Time Resolution 1 μs
Encoder Input Low Voltage Max 2.4 V DC
Encoder Input High Voltage Min 2.6 V DC
Sampling Interval Min 20 ms/sample
Sampling Interval Max 1 s/sample
Pull-up Resistance (Open Collector) 2.2 kΩ or 10 kΩ
Pull-down Resistance (Line Driver) 2.2 kΩ or 10 kΩ
Electrical Properties
Current Consumption Min (unconfigured) 24.6 μA
Current Consumption Max encoder current + 4.2 mA
Physical Properties
Operating Temperature Min -40 °C
Operating Temperature Max 85 °C


Product History

Date Board Revision Device Version Comment
June 20170101Product Release

Software Objects

Channel NameAPIChannel
Encoder Input Encoder 0


Back Forward
Print this API

Code Samples

Example Options


				Make your selections to display sample code.

Code Samples


Encoder Visual Studio GUI C# Windows Download
Encoder Java Android Download
Encoder JavaScript Browser Download
Encoder Objective-C macOS Download
Encoder Swift macOS Download
Encoder Swift iOS Download
Encoder Visual Basic .NET Windows Download
Encoder Max/MSP Multiple Download

Have a look at our encoder interfaces:

Product Encoder Interface
Image Part Number Price Number of Encoder Inputs Count Rate Max
1047_1B $75.00 4 1E+06 pulses/s
1057_2B $50.00 1 2E+06 pulses/s
ENC1000_0 $15.00 1 400000 pulses/s