- A Quadrature Encoder or incremental encoder, or optical encoder is used to detect the position and speed of rotors, enabling closed loop control in many motor control applications like
Trang 1CHAPTER 6
QEI QUADRATURE ENCODER INTERFACE
Dr Vo Tuong Quan
Trang 2What is QEI?
- A Quadrature Encoder (or incremental encoder, or optical encoder) is used to detect the position and speed of rotors, enabling closed loop control in many motor control applications like switched reluctance and induction motors
Encoder structure
Trang 3QEI
Encoder structure
The index occurs only once per revolution and is used to
establish an absolute position
Trang 4- Since these signals are heavily affected by noise a digital
filter is available on each input The filtered phase edges are
counted by a dedicated 16 bit up/down counter, also referred to
as the Position Counter (POSCNT)
- To establish a reference point for position and speed measurements the counter can be reset either by the index signal or by a counter period match
QEI Block Diagram
Trang 5QEI
INITIALIZING THE QEI MODULE
ENABLE DIGITAL FILTERS
- Enabling the digital filters is desirable to filter any possible glitches on the incremental encoder signals
- if and only if three consecutive samples have the same value the input is considered stable and the value is output from the filter
QEI Filter
Trang 6CALCULATE THE MINIMUM PULSE WIDTH
Configure the filter to reject any signal lower than 15 MIPS will be fine for the application
Suppose that we are running at 14.75 MIPS, the closest
filter configuration to achieve our requirement is calculated as:
Trang 7QEI
QUADRATURE DECODER
Determine the direction of rotation looking at the two incoming phase signals, and generate the clock that will be used by the position counter
• (x2) mode: the decoder only generates a clock impulse at the rising and falling edges of Phase A signal
• (x4) mode: the clock pulses are generate at each edge of phase A and Phase B
The position counter can be reset either by the index pulse coming from the encoder or by the matching of the current position counter value with the number in the Maximum Count Register
Trang 8QEI in x4 mode
Trang 9QEI
POSITION COUNTER
The position counter can be used either for position or speed
measurement
To measure motor position, we must know the relationship between the displacement and the number of phase pulses we get from the encoder
For speed measurement application, the time interval between two index pulses or count match events gives a measure of the angular velocity
Trang 10MCU with QEI module
Trang 11QEI
Example code
#include <p30f4011.h>
#include <pwm.h>
#include <qei.h>
void QEI_Init()
{
ADPCFG = 0xFFFF; // Configure QEI pins as digital inputs
QEICONbits.QEIM = 7; // (bit 10-8 Disable QEI Module) x4 mode
QEICONbits.QEISIDL = 0; // bit 13 Continue operation during sleep
QEICONbits.SWPAB = 0; // bit 7 QEA and QEB not swapped
QEICONbits.PCDOUT = 0; // bit 6 Normal I/O pin operation
QEICONbits.TQGATE= 1; // bit 5 Timer gated time accumulation disabled QEICONbits.TQCKPS= 0; // bit 4-3 Timer Input Clock Prescale Select bits
QEICONbits.POSRES = 0; // bit 2 Index pulse does not reset position counter QEICONbits.TQCS=0; // bit 1 Timer Clock Source Select bit=Internal clock
DFLTCONbits.CEID = 1; // Count error interrupts disabled
DFLTCONbits.QEOUT = 0; // Digital filters output disabled for QEn pins DFLTCONbits.QECK = 0; // clock divide for digital filter for QEn
}
Trang 12Exercise: DC Servo Motor Control
Control motor that follow the desired profile
Trang 13QEI
// PID Code for motor control
void pid_cal()
{
EncoderCount = POSCNT - Count;
Count = POSCNT;
mposition += EncoderCount ; // Encoder mode x4
u = position - mposition ; Ypid = ceilf(u*Kp) ;// Làm tròn số xung Intergral =Intergral + u;
Ypid = Ypid + ceilf(Ki*Intergral);
Ypid = Ypid + ceilf(Kd*EncoderCount);
PDC1 = PDC2 = Ypid;
}
PID Code for motor control