1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

6 chapter 6 QEI module

13 161 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 13
Dung lượng 1,27 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

- 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 1

CHAPTER 6

QEI QUADRATURE ENCODER INTERFACE

Dr Vo Tuong Quan

Trang 2

What 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 3

QEI

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 5

QEI

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 6

CALCULATE 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 7

QEI

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 8

QEI in x4 mode

Trang 9

QEI

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 10

MCU with QEI module

Trang 11

QEI

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 12

Exercise: DC Servo Motor Control

Control motor that follow the desired profile

Trang 13

QEI

// 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

Ngày đăng: 07/11/2017, 14:16

TỪ KHÓA LIÊN QUAN