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

6 chapter 6 QEI module

13 160 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

Nội dung

MICROCONTROLLERS CHAPTER QEI QUADRATURE ENCODER INTERFACE Dr Vo Tuong Quan HCMUT - 2011 QEI 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  2011 – Vo Tuong Quan QEI Encoder structure The index occurs only once per revolution and is used to establish an absolute position  2011 – Vo Tuong Quan QEI - 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  2011 – Vo Tuong Quan 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  2011 – Vo Tuong Quan QEI 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:  2011 – Vo Tuong Quan 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  2011 – Vo Tuong Quan QEI QEI in x4 mode  2011 – Vo Tuong Quan 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  2011 – Vo Tuong Quan QEI MCU with QEI module 10  2011 – Vo Tuong Quan QEI #include #include #include Example code 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 QEA and QEB not swapped QEICONbits.PCDOUT = 0; // bit Normal I/O pin operation QEICONbits.TQGATE= 1; // bit Timer gated time accumulation disabled QEICONbits.TQCKPS= 0; // bit 4-3 Timer Input Clock Prescale Select bits QEICONbits.POSRES = 0; // bit Index pulse does not reset position counter QEICONbits.TQCS=0; // bit 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 } 11  2011 – Vo Tuong Quan QEI Exercise: DC Servo Motor Control Control motor that follow the desired profile 12  2011 – Vo Tuong Quan QEI PID Code for motor control // 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; } 13  2011 – Vo Tuong Quan

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

TỪ KHÓA LIÊN QUAN