Encoder Guide
Encoders measure the movement of mechanical parts. This guide discusses how encoders work, encoder interfaces, types of encoders, and more.
The ENC1001 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 the rotation angle of your motor, which then allows you to control the position and velocity in your code. This Phidget connects to your computer through a VINT Hub.
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 Overview page. You can use a Phidget Cable to simply and easily connect the two devices. In order to use the ENC1001 to its full potential, you should get a VINT Hub capable of 1Mbit/s communication speed. Here's a list of all of the different VINT Hubs currently available:
Product | Board Properties | |||
---|---|---|---|---|
Part Number | Price | Number of VINT Ports | VINT Communication Speed Max | Controlled By |
VINT Hub Phidget
|
$40.00 | 6 | 1 Mbit/s | USB (Mini-USB) |
1-Port VINT Hub Phidget
|
$24.00 | 1 | 1 Mbit/s | USB (USB-A) |
VINT Hub Phidget
|
$35.00 | 6 | 1 Mbit/s | USB (Mini-USB) |
VINT Hub Phidget
|
$30.00 | 6 | 100 kbit/s | USB (Mini-USB) |
Wireless VINT Hub
|
$60.00 | 6 | 100 kbit/s | Local Network (Ethernet or Wi-Fi) |
PhidgetSBC4
|
$120.00 | 6 | 100 kbit/s | — |
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 | |
---|---|---|
Part Number | Price | Cable Length |
Phidget Cable 10cm
|
$1.50 | 100 mm |
Phidget Cable 30cm
|
$1.75 | 300 mm |
Phidget Cable 60cm
|
$2.00 | 600 mm |
Phidget Cable 60cm
|
$2.00 | 600 mm |
Phidget Cable 90cm
|
$2.00 | 900 mm |
Phidget Cable 120cm
|
$2.25 | 1.2 m |
Phidget Cable 150cm
|
$2.50 | 1.5 m |
Phidget Cable 180cm
|
$2.75 | 1.8 m |
Phidget Cable 350cm
|
$3.00 | 3.5 m |
Phidget Cable Kit
|
$10.00 | 80 mm |
For an easy way to connect an encoder to the 5-pin connector on the ENC1001, you can use these handy cables.
Product | Physical Properties | ||
---|---|---|---|
Part Number | Price | Cable Length | Cable Gauge |
HighSpeed Encoder Cable 50cm
|
$5.00 | 500 mm | 26 AWG |
The ENC1001 can be used with any incremental quadrature encoder. For more details on the different kinds of encoders, have a look at the Encoder Guide. All of the rotary encoders listed below are compatible with this Phidget:
Product | Encoder Properties | |||
---|---|---|---|---|
Part Number | Price | Output Circuit Type | Encoder Resolution | Encoder Speed Max |
Rotary Encoder - 8mm Hollow Shaft 1000CPR with Index
|
$50.00 | Push-Pull | 1000 CPR | 6000 RPM |
Rotary Encoder - 12mm Hollow Shaft 1000CPR with Index
|
$50.00 | Push-Pull | 1000 CPR | 6000 RPM |
Rotary Encoder - 12mm Solid Shaft 1000CPR with Index
|
$60.00 | Push-Pull | 1000 CPR | 2000 RPM |
Rotary Encoder - 4mm Solid Shaft 360CPR
|
$40.00 | Push-Pull | 360 CPR | 6000 RPM |
Rotary Encoder - 6mm Solid Shaft 1000CPR with Index
|
$40.00 | Push-Pull | 1000 CPR | 6000 RPM |
Rotary Encoder - 6mm Solid Shaft 600CPR
|
$25.00 | Push-Pull | 600 CPR | 6000 RPM |
Rotary Encoder - 8mm Solid Shaft 1000CPR with Index
|
$45.00 | Push-Pull | 1000 CPR | 6000 RPM |
Rotary Encoder - For 4mm Motor Shaft 300 CPR
|
$25.00 | Push-Pull | 300 CPR | 6000 RPM |
Rotary Encoder - For 4mm Motor Shaft 40 CPR
|
$10.00 | Push-Pull | 40 CPR | 6000 RPM |
Rotary Encoder - For 5mm Motor Shaft 1000CPR
|
$30.00 | Push-Pull | 1000 CPR | 5000 RPM |
These linear encoders can all be used with the ENC1001:
Product | Physical Properties | |
---|---|---|
Part Number | Price | Travel |
Linear Encoder - 300mm
|
$90.00 | 300 mm |
Linear Encoder - 500mm
|
$95.00 | 500 mm |
Linear Encoder - 700mm
|
$100.00 | 700 mm |
Linear Encoder - 900mm
|
$110.00 | 900 mm |
Linear Encoder - 1100mm
|
$120.00 | 1.1 m |
Linear Encoder - 1400mm
|
$340.00 | 1.4 m |
Linear Encoder - 1700mm
|
$360.00 | 1.7 m |
Linear Encoder - 2000mm
|
$380.00 | 2 m |
Here are all of the draw-wire encoders that can be used with the ENC1001:
Interface with any 5V quadrature encoder with the Quadrature Encoder Phidget. 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.
You can use your Control Panel to explore your Phidget's channels.
1. Open your Control Panel, and you will find the following channel:
2. Double click on the channel to open the example program. This channel belongs to the Encoder channel class:
In your Control Panel, double click on "Quadrature Encoder Phidget":
Before you open a Phidget channel in your program, you can set these properties to specify which channel to open. You can find this information through the Control Panel.
1. Open the Control Panel and double-click on the red map pin icon:
2. The Addressing Information window will open. Here you will find all the information you need to address your Phidget in your program.
See the Phidget22 API for your language to determine exact syntax for each property.
Note: Graphing and logging is currently only supported in the Windows version of the Phidget Control Panel.
In the Phidget Control Panel, open the channel for your device and click on the icon next to the data type that you want to plot. This will open up a new window:
If you need more complex functionality such as logging multiple sensors to the same sheet or performing calculations on the data, you'll need to write your own program. Generally this will involve addressing the correct channel, opening it, and then creating an Event Handler and adding graphing/logging code to it.
The quickest way to get started is to download some sample code for your desired programming language and then search google for logging or plotting in that language (e.g. "how to log to csv in python") and add the code to the existing change handler.
You can perform filtering on the raw data in order to reduce noise in your graph. For more information, see the Control Panel Graphing page.
You can perform a transform on the incoming data to get different graph types that may provide insights into your sensor data. For more information on how to use these graph types, see the Control Panel Graphing page.
The Change Trigger is the minimum change in the sensor data needed to trigger a new data event.
The Data Interval is the time (in ms) between data events sent out from your Phidget.
The Data Rate is the reciprocal of Data Interval (measured in Hz), and setting it will set the reciprocal value for Data Interval and vice-versa.
You can modify one or both of these values to achieve different data outputs. You can learn more about these properties here.
Firmware Upgrade
MacOS users can upgrade device firmware by double-clicking the device row in the Phidget Control Panel.
Linux users can upgrade via the phidget22admin tool (see included readme for instructions).
Windows users can upgrade the firmware for this device using the Phidget Control Panel as shown below.
Firmware Downgrade
Firmware upgrades include important bug fixes and performance improvements, but there are some situations where you may want to revert to an old version of the firmware (for instance, when an application you're using is compiled using an older version of phidget22 that doesn't recognize the new firmware).
MacOS and Linux users can downgrade using the phidget22admin tool in the terminal (see included readme for instructions).
Windows users can downgrade directly from the Phidget Control Panel if they have driver version 1.9.20220112 or newer:
Firmware Version Numbering Schema
Phidgets device firmware is represented by a 3-digit number. For firmware patch notes, see the device history section on the Specifications tab on your device's product page.
If your device has a icon printed on the enclosure, it means that it has an improved filter on its VINT connection that upgrades performance when plugged into a port on a VINT Hub that also has the icon:
For details on how the maximum cable length is impacted, see the specifications tab on the product page for this device.
This device supports faster VINT communication speeds when plugged into a HUB that has the icon printed on the enclosure.
Effects of changing VINT Speed:
For more details on these tradeoffs, see the Specifications tab on the product page.
In order to change the speed, close all of the channels and ensure it's plugged into a high-speed port. Right click on your device (not the Hub port or the channel):
Once set, the selected VINT speed will persist until the device is unplugged or a new speed is set. You can also set the VINT speed in your program using the HubPortSpeed
property. See the Phidget22 API for details.
The encoder input on the ENC1001 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.
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 ENC1001) 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 are 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 ENC1001
// add the newest sample to the queue
positionChangeQueue.Enqueue(e.PositionChange);
timeChangeQueue.Enqueue(e.TimeChange);
// If we've exceeded our desired window size, remove the oldest element from the queue
if ( positionChangeQueue.Count >= n ) {
positionChangeQueue.Dequeue();
timeChangeQueue.Dequeue();
}
// 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);
}
Board Properties | |
---|---|
Controlled By | VINT |
VINT Communication Speed Max | 1 Mbit/s |
Encoder Interface | |
Number of Encoder Inputs | 1 |
Count Rate Max | 1E+06 pulses/s |
Encoder Interface Resolution | x4 |
Time Resolution | 15 ns |
Encoder Input Low Voltage Max | 1 V DC |
Encoder Input High Voltage Min | 3 V DC |
Sampling Interval Min | * 1 ms/sample |
Sampling Interval Max | 1 s/sample |
Pull-up Resistance (Open Collector) | N/A |
Pull-down Resistance (Line Driver) | N/A |
Electrical Properties | |
Current Consumption Min | (unconfigured) 30 μA |
Current Consumption Max | encoder current + 6.5 mA |
Physical Properties | |
Operating Temperature Min | -40 °C |
Operating Temperature Max | 85 °C |
Customs Information | |
Canadian HS Export Code | 8471.80.00 |
American HTS Import Code | 8471.80.40.00 |
Country of Origin | CN (China) |
Date | Board Revision | Device Version | Comment |
---|---|---|---|
January 2024 | 0 | 100 | Product Release |
Channel Name | API | Channel |
---|---|---|
Encoder Input | Encoder | 0 |
Product | Encoder Interface | ||
---|---|---|---|
Part Number | Price | Number of Encoder Inputs | Count Rate Max |
Quadrature Encoder Phidget
|
$15.00 | 1 | 1E+06 pulses/s |
PhidgetEncoder HighSpeed
|
$50.00 | 1 | 1E+06 pulses/s |
PhidgetEncoder HighSpeed 4-Input
|
$75.00 | 4 | 1E+06 pulses/s |
PhidgetEncoder HighSpeed
|
$40.00 | 1 | 2E+06 pulses/s |
PhidgetEncoder HighSpeed 4-Input
|
$65.00 | 4 | 1E+06 pulses/s |