1.1 PMSM FOC using Quadrature Encoder with SAMRH71-EK and LX7720 boards
This example shows how to perform motor control using the SAMRH71-EK board connected to the LX7720 board. The control strategy is the sensored FOC, in which rotor position is determined by the Quadrature Encoder and speed is calculated from the position.
Description
Permanent Magnet Synchronous Motor (PMSM) is controlled using Field Oriented Control (FOC). Rotor position and speed is determined from quadrature encoder in LX7720. Motor start/stop operation and motor speed are controlled by the switches on the external control board. Waveforms and variables can be monitored at runtime using X2CScope.
Key features enabled in this project are:
- Dual shunt current measurement
- Speed control loop
MCC Project Configurations
- PWM Peripheral:
- This peripheral is used to generated three phases synchronous PWM waveforms. Fault functionality is also enabled to switch off the output waveforms asynchronously.
- TC Peripherals:
- TC0
- Channel 0 to trigger periodic PWM duty updates.
- Channel 1 to trigger periodic interrupt for current sampling in TC3.
- TC1
- This peripheral is used in quadrature encoder mode for position measurement.
- TC3
- Used for sampling the sigma delta modulators signals from LX7720 board.
- TC0
- FLEXCOM Peripheral:
- The UART is used for X2CScope communication to observe graphs and variable values in run time.
Algorithm and Current Measurement
The control algorithm is the same as in the PMSM using an Encoder based Field Oriented Control (FOC) in the SAME70 microcontroller example
An additional algorithm is used to get the currents on phase A and B from the LX7720. A decimation filter is used to convert the sigma delta modulators output from LX7720.
Current conversion with decimation filter
The second order sigma delta modulator output of the LX7720 is a noise shaped signal where low frequency noise is pushed toward the high frequencies.
The SAMRH71 provide a 25MHz clock to the LX7720 modulator which in turn generates modulated signals that can be sampled by the SAMRH71.
The sampling is done with one timer counter per motor phase (A and B). The timer counters use two channels clocked at 50MHz. For each channel we use the “Burst signal” selection to have respectively XC0 (TCLK3) or (TCLK4) XC1 ANDed with the counting clock. The channel 0 of the same timer is used as reference to trigger a periodic interrupt for sampling, here every 4µs. This first sampling act as first SINC1 filter with OSR1=50.
A digital third order CIC filter (also known as SINC3) is used to do anti-aliasing filtering and decimate to the desired data-rate. This filter is applied on every SINC1 samples (OSR2=5). With this configuration we get SINC3 samples every 20µs which corresponds to 2.5 samples per PWM periods.
The final calculation for phases A and B currents is performed in the FOC control interrupt routine. The currents are calculated with a weighted average on the last 4 samples.
Development Kits
SAM RH71 Evaluation Kit and LX7720 Daughter Board
DOWNLOADING AND BUILDING THE APPLICATION
To clone or download this application from Github, go to the main page of this repository and then click Clone button to clone this repository or download as zip file. This content can also be downloaded using content manager by following these instructions.
Path of the application within the repository is apps/pmsm_foc_encoder_lx7720_sam_rh71_ek.
To build the application, refer to the following table and open the project using its IDE.
Project Name | Description | Demo User Guide |
---|---|---|
sam_rh71_ek.X | MPLABX project for SAM RH71 Evaluation Kit and LX7720 Daughter Board | Hardware Setup and Running The Application on SAM RH71 Evaluation Kit with LX7720 Daughter Board |