FOC Example Structure Guide

Introduction

This article is prepared to give information about FOC-based (Field-Oriented Control) “Motor Control Example”. We aim to offer solutions in this field and to introduce the capabilities of netX 90 in Motion.

FOC Architecture

What is FOC?

Field-oriented control (FOC), also known as vector control, is a technique used to control Permanent Magnet Synchronous Motor (PMSM) and Brushless-DC Motor (BLDC). FOC provides good control capability over the full torque and speed ranges. The FOC implementation requires the transformation of stator currents from the stationary reference frame to the rotor flux reference frame (also known as the d-q reference frame).

Speed control and torque control are the most commonly used FOC control modes. The position control mode is less common. Most of the traction applications use the torque control mode in which the motor control system follows a reference torque value. In the speed control mode, the motor controller follows a reference speed value and generates a torque reference for the torque control, which forms an inner subsystem. In the position control mode, the speed controller forms the inner subsystem.

FOC algorithm implementation requires real-time feedback of the currents and rotor position angle. Measure the current and position by using sensors. The sensorless techniques can be used to estimate feedback values (by motor hall sensors and phase angles) instead of the actual sensor-based measurements. This technique is called Sliding-mode based rotor estimation.

More detailed information about FOC can be found on the https://www.mathworks.com/solutions/electrification/field-oriented-control.html, https://www.trinamic.com/technology/motor-control-technology/field-oriented-control/, https://www.pmdcorp.com/resources/type/articles/get/field-oriented-control-foc-a-deep-dive-article.

FOC Block Diagram

In Figure 1, the block diagram of the FOC is seen in detail. The Clarke transform converts the time domain components of a three-phase system (in abc frame) into two components in an orthogonal stationary frame (αβ). The Park transform converts the two components in the αβ frame to an orthogonal rotating reference frame (dq). Consecutively implementing these two transforms simplifies computations by converting AC and voltage waveforms into DC signals. Thanks to the DC quantities obtained by these transformations, we obtain the possibility of PI current control (on Id and Iq vectors) facility which allows for performing torque control.

Thanks to the feedback provided by the motor, the speed feedback(Encoder, Resolver, Hall Sensor, … ) is sent to the speed PI controller for the speed control of the motor. Likewise, after motor PI controls, these two components in the orthogonal rotating reference frame (dq) are converted to the two components in the orthogonal stationary frame (αβ) using the Inverse Park Transform. It is converted into time-domain components (in abc frame) using the Space Vector PWM Generator. You may have noticed the absence of the Inverse Clarke Transform. The Inverse Clarke Transform takes place indirectly during the Space Vector Modulation computation. Park Transform and Inverse Park Transform need the instantaneous rotor electrical angle[Θ]'s sin and cos values. Respectively, the instantaneous rotor’s mechanical angle is converted to its electrical angle with relevant calculations, and the sin and cos values of this angle are calculated.

Field-weakening or flux-weakening is a technique for increasing the speed of an electric motor above its rating at the expense of reduced torque. This concept is especially evident when operating at high motor speeds. More information can be found at the .

  • ωref - Reference angular speed [rad/s]

  • ωfb - Angular speed feedback of rotor [rad/s]

  • Tref - Reference torque [N.m]

  • idref, iqref - Orthogonal rotating reference frame current components [A]

  • id, iq - Orthogonal rotating reference frame current feedbacks [A]

  • vdref, vqref - Orthogonal rotating reference frame voltage components [V]

  • Vα, Vβ - Orthogonal stationary frame voltage components [V]

  • ia, ib, ic - Currents flowing in the stator windings [A]

  • va, vb, vc - Applied voltages to the motor [V]

  • Vdc - DC Bus Voltage [V]

  • θm - Instantaneous rotor mechanical angle [rad]

  • θe - Instantaneous rotor electrical angle [rad]

  • Gah, Gal, Gbh, Gbl, Gch, Gcl - A,B,C phase MOSFETs' Gate PWM duty cycles [%]

Figure 1 - Block Diagram of Field-Oriented Control

Changes in V1.1.0.0

  1. The ”Motion Control State Machine” in “MCL layer Motion component” is removed and the motion control architecture has been transformed into an event-based architecture. Thus, the "Set Motor Speed", "Get Motor Speed" and “Get position” functions can be executed cyclically from the external application layer (such as ProfiDrive or EtherCat Motion) using hardware-assisted bus cycle (XCTRIGGERs) or logically defined timers. Thus, FOC works synchronously with the hardware-assisted bus cycle. This brings IRT mode support to FOC. (Operations such as Calibration and Coast Stop are called cyclically).

  2. The HAL QEI (Quadrature Encoder Interface) capture position architecture has been modified to work properly with different bus-cycle periods. In the V1.0.0.0, the encoder position capture process was performed automatically with the timer interrupt which also drove the Motion Control State Machine. This timer was removed due to the change in the motion control structure and the need for flexible operation with different bus cycle periods. Now this capture function is indirectly triggered by using the Get Motor Speed function from the external application layer, thus positions are calculated according to the time elapsed between two consecutive capture functions.

  3. MPWM synchronization support has been implemented. Thus, the PWM frequency is tuned dynamically and synchronization of MPWM with the hardware-assisted bus-cycle (XCTRIGGER) is ensured. So, the bus cycle jitter is compensated. As the MPWM frequency is compensated according to the bus cycle, the MPWM callback is always called at the same timeframe. This provides the deterministic operation required for IRT mode (see FOC Runtime Analysis).

  4. Get position support has been added to FOC. The motor position feedback (currently encoder) information is get and processed. So this position information is provided directly to the external application layer thanks to the FOC API. It is currently being tested using the ProfiDrive AC4 example. However, it is designed to be universal and is expected to be compatible with EtherCat Motion (see FOC Position Interface Details).

  5. Due to issues with the PLC in isochronous mode compatibility, the automatic encoder direction estimation algorithm has been temporarily removed. It will undergo reassessment in the next version, and a decision will be made regarding its future.

  6. Motor calibration support is provided via the API function. Motor calibration can now be performed by setting calibration parameters externally (Motor self-calibration can pose a safety risk when the motors are linked to a mechanical mechanism because the drives begin to move).

Software Details

This chapter describes how the software is structured and how to configure it according to the requirements.

Folder structure

While the layers are in separate folders by design, the components of that layer are separated as *.c, *.h pair. The folder structure of the FOC project is shown in Figure 2.

 

Foc-Folder-File-Tree-Structure.png
Figure 2 - Field-Oriented Control Software project’s folder structure

The FOC, MCL, and HAL components are initialized into the main.c file from lower to upper layers (HAL → MCL → CORE). The desired API function is used via handles obtained after FOC initialization. The MATH library is accessible from all layers. The public folder specifies the header files available to the user. The public folders contain the user-accessible header files.

Program Structure

The FOC application consists of four layers. The “Hardware Abstraction Layer“ (HAL) provides 6 components to communicate with the hardware. The “Timer” manages the motor self-calibration process and measures elapsed time for the timeout feature. It is also designed to be highly flexible and adaptable to future requirements (e.g. diagnostics). The “Analog-to-Digital Converter“ (ADC) provides information from the board sensors (input voltage, phase voltages, phase current, SinCos Resolver, board potentiometer, etc.). The “Motion Pulse-Width Modulation“ (MPWM) serves as the configured PWM for the motor. The “Gate Driver“ controls the driver chip that drives the motor. The “Quadrature Encoder Interface“ (QEI) accurately determines the rotor position and speed. The “Hall Sensors“capture information from the GPIOs connected to the Hall-Effect sensors built into the motor and indicate the current state of the rotor. They are mainly combined with the encoders to determine the rotor position. Their role is to determine the rotor starting angle. They are also used for speed estimation in the absence of an encoder. However, they don’t provide precise position control due to their poor resolution. The main purpose of the HAL layer is to provide feedback information to the higher layers and to transmit the control request it receives from there to the motor. And in doing so, the aim is to create an abstraction with hardware.

The “Motor Control Layer” (MCL) retrieves the latest speed setpoint and operation mode from the “Core Layer“ (FOC API). Depending on the active operation mode, it retrieves relevant feedback from the HAL, to process according to the FOC algorithm. This algorithm includes various blocks such as PI controllers, Transformation blocks, Space Vector Modulators, Low-pass filters, etc. The latest set speed is kept at the desired value by the Speed PI Controller using the motor's speed feedback. In addition, the motor’s torque is tried to be held at the maximum level thanks to the d and q Current Vector PI controller. The feedback given to the current PI controllers is the current vectors Id and Iq obtained by transformations using the measured motor current values and the electrical angle[Θ]. Then the calculated dq vectors are converter into 3-phase modulated amplitudes and thus motor rotation is provided. The algorithm described above is executed in the MCL layer. The “Motion“ component includes motion-related functions. It is actually where all FOC application is coordinated. Motor Speed and Operation functions from the FOC API layer are received by this component, processed, and transmitted to the relevant components. It also coordinates the motor position determination in self-calibration and calibration with parameters. The “FOC Control” component provides the main FOC control. Operations such as Torque control, vector transformations, Space Vector Modulation, etc. are done. The “Calibration“ component provides the self-calibration and calibration using user calibration parameters. The self-calibration process associates the hall sensor sectors with the electrical rotor position angles. Calibration with user parameters is done using predetermined self-calibration parameters without any physical movement. The “Position & Speed Estimation“ (PSE) component makes the data received from HAL QEI and HAL Hall Sensors processed. It contains all position and speed estimation functions.

The “Mathematical Library“ (MATH) provides the FOC-based mathematical functionality used by all layers.

The “Foc Api(Core) Layer” contains the necessary API functions for FOC initialization and control.

Figure 3 - Block Diagram of netX90 Field-Oriented Control Software

The block diagram depicted in Figure 3 visually represents the components, their functionalities, and their interconnections.

Hardware Abstraction Layer (HAL)

The “Hardware Abstraction Layer“ (HAL) contains 6 components to communicate with the hardware. The HAL layer uses motor control-related peripherals embedded in the netX90 IC. More detailed information about these peripherals can be obtained from netMOTION and netX 90 in Motion. For even more detailed information, see section 5.14 from netX 90 - Technical data reference guide.

Timer

It manages the motor self-calibration process, measures elapsed time for the timeout feature and generates delay. It is also designed to be highly flexible and adaptable to future requirements (e.g. diagnostics).

ADC(Analog-to-Digital Converter)

It provides information from the netX90-MC board sensors (Temperature, Reference voltages, …), motor position feedbacks (Hall sensor sectors, Resolver, …), board voltages (DC bus voltage,…), and Gate driver feedbacks (Measured phase currents, measured phase voltages, …). In Table 1, the signals connected to the MADC matrix of the netX90-MC Rev. 3 board are shown. Green cells indicate signals used in this project are described in Table 1.

Unit

Channel 0

Channel 1

Channel 2

Channel 3

Channel 4

Channel 5

Channel 6

Channel 7

Unit

Channel 0

Channel 1

Channel 2

Channel 3

Channel 4

Channel 5

Channel 6

Channel 7

ADC 0

SIN240_HC (X901)

ISENA (DRV8323R)

TSENS (INTERNAL)

VREF_ADC (INTERNAL)

-

-

-

-

ADC 1

-

ISENB (DRV8323R)

VDDIO/2 (INTERNAL)

VREF_ADC (INTERNAL)

-

-

-

-

ADC 2

SIN0_HA (X901)

AIM (X901)

POT (R33)

VSENA (J5)

VSENVM (J1)

-

NTC (R39)

-

ADC 3

SIN120_HB (X901)

AI (X901)

ISENC (DRV8323R)

VSENB (J5)

-

VSENC (J5)

-

-

Table 1 - MADC matrix

Signal

Description

Note

Signal

Description

Note

SIN0_HA (X901)

Hall Sensor - Sector A

These signals differ depending on the type of motor connected (Hall Sensor Sector, Resolver, EnDat, Biss). For more detailed information check out the X901 - Sensor connector section in 2.6.5 of NXHX 90-MC.

SIN120_HB (X901)

Hall Sensor - Sector B

SIN240_HC (X901)

Hall Sensor - Sector C

ISENA (DRV8323R)

Current measured and amplified by Gate Driver - Phase A

-

ISENB (DRV8323R)

Current measured and amplified by Gate Driver - Phase B

ISENC (DRV8323R)

Current measured and amplified by Gate Driver - Phase C

VSENVM (J1)

DC-Bus Voltage

-

POT (R33)

Soldered board potentiometer used with FOC Demo application.

-

Table 2 - ADC-sampled signals used by the FOC application.

Gate Driver

It provides a Gate Driver control interface. The Gate Driver used in our netX90-MC Rev. 3 board is Texas Instruments DRV8323RSRGZR, 6 to 60V Three-Phase Smart Gate Driver. This driver also drives Texas Instruments' 60-V Half-Bridge Power Block Mosfets named CSD88599Q5DC (1 for each motor phase). More detailed information can be obtained from DRV832x 6 to 60-V Three-Phase Smart Gate Driver and CSD88599Q5DC 60-V Half-Bridge NexFET™ Power Block. It communicates with netX90 via the SPI channel. The Gate Driver component contains important functions such as fault detection, enabling/disabling the gate driver, coast stop, brake mode and auto current measurement offset trim mode (see Auto Current Offset Trim using DRV8323RS Gate Driver). Especially thanks to fault detection, the burning of the motor windings can be prevented in cases such as over-current conditions.

MPWM (Motion Pulse-Width Modulation)

The MPWM component is used to modulate the 3-phase PWM signal required for the motor control. Thanks to the “Event Counter Zero (ECZ)“, it generates events so that measurements, transformations, and PI controls are made and new SVPWM duty cycle values are adjusted. Event Counter Zero (ECZ) is the reduced frequency of the “Beginning of Period (BOP)” events variant. If the field evt_cnt_top of register mpwm_cfg is set to a value N, an ECZ event will be sent every N+1 period. MPWM can be synchronized to hardware-assisted cyclic network events. In this way, since the MPWM callback event will be synchronized with the Bus Cycle, jitter problems will be partially prevented and motor control will be realized in a determined way. For detailed information, see FOC Runtime Analysis and section 5.14.3 from netX 90 - Technical data reference guide.

QEI (Quadrature Encoder Interface)

The QEI component provides information from the Quadrature Encoder, which is mounted on the motor. Method 4 was used as the speed estimation method (see section 5.14.4.11 from netX 90 - Technical data reference guide). It supports working with ENC0(QEI 5V TTL) and ENC1(RS422) encoder sources. The NXHX-DH adapter module serves to connect digital transmitters as TTL or RS422 (see section 3.4 from NXHX 90-MC). Also, this component supports the encoder direction inversion functionality. For detailed information, see section 5.14.4 from netX 90 - Technical data reference guide. Unlike V1.0.0.0, the QEI capture structure is changed. In the previous version, the encoder positions were captured using the GPIO TIMER trigger internally. But, because of the IRT compatibility reasons, this capturing is realized with a specialized function asynchronously. So, it must be synchronized with the external bus cycle. In this way, flexible operation with different bus cycle periods will be ensured.

Hall Sensor

The Hall Sensor component provides information from the Hall Sensors, which are integrated into the motor. The Rotor position can be known by the currently active Hall Sensor. The hall sensor inputs are directly connected to GPIOs and used to determine the active hall state.

Motor Control Layer (MCL)

The “Motor Control Layer“ (MCL) contains 4 components.

Motion

The “Motion“ component provides basic motion functionality. Unlike the previous FOC version V1.0.0.0, the structure of the Motion component had been changed. The main purpose of the change is to ensure motion synchronization with the Bus Cycle on the Application layer instead of Hal Timer. In this way, Isochronous mode support is provided.

At the new FOC, the Motion layer commands are categorized under two command types.

  1. Acyclic: The first goal here is to make FOC ready for use with relevant operation mode commands and calibration is one of these examples. The second one is changing the operation modes dynamically: Coast mode, Start operation, etc. In Figure 4, the acyclic operations are depicted.

 

Figure 4 - MCL Layer Motion Component’s handled processes by the Application (ProfiDrive, EtherCat Motion, etc.) acyclically through FOC API.

These functions are called directly from the Application through FOC API functions.

  • MOTION - Coast Stop: The Coast Stop mode is designed to bring the MOSFET gates to Hi-Z (Gate driver outputs are switched to Hi-Z) and ensure that the motor will spin down at whatever speed the load imposes. It is generally used to perform the Pulse Disable operation on ProfiDrive. Likewise, the same process is performed on EtherCat Motion and its equivalents.

  • MOTION - Start Operation: It disables the coast stop mode. In this way, the motor control PWM pulses are enabled. The speed controller starts to handle the speed setpoint value set by a related application. So speed and position control are activated.

  • MOTION - Calibration with user parameters: Motor calibration can now be performed by setting calibration parameters externally (Motor self-calibration can pose a safety risk when the motors are linked to a mechanical mechanism because the drives begin to move). The calibration parameters acquired after a successful motor self-calibration are stored in the Remanent area on the Application (e.g. PLC). As long as there is valid calibration data in the remanent data on Application start-up, the calibration will be executed instantly by configuring these parameters (the motor will not move). More detailed information can be found here: PDMC AC1/4 Motor Calibration.

  • MOTION - Start self-calibration: The operation of the Field-oriented control (FOC) component is highly dependent on determining the rotor position angle. For this, the FOC needs to know the hall sensor sequence and the corresponding rotor position for each hall sensor. The motor self-calibration is achieved by providing the FOC with the correct values of these parameters (given the specific motor and load). During the self-calibration process, the motor turns at low RPMs in clockwise (capture the start points) and counterclockwise (capture the endpoints) directions and the following parameters are measured. In addition, the hall sensor sequences of the motor are determined. The Start self-calibration function starts the internal timer when triggered from an App via the FOC API. Thanks to the timer callback, the self-calibration process starts to be performed cyclically. All necessary Foc Control, Calibration and PSE components are handled through timer callback within the scope of the self-calibration process. The started internal timer automatically stopped with the completed calibration process.

 

  1. Cyclic: The associated cyclic process provides the motor speed and position control processes. In contrast to the V1.0.0.0, the timer performing the cyclic control has been moved into the external application layer. In this way, all motion control processes are synchronized with the Application. Full synchronization support is provided indirectly with the hardware-assisted bus cycle(by XCTRIGGER). In this way, IRT (Isochronous Real-Time) mode support is provided and jitters occurring in the Bus Cycle can be tolerated to a certain level (by MPWM Synchronization - FOC Run-Time Analysis). In Figure 5, the acyclic operations are depicted.

 

Figure 5 - MCL Layer Motion Component’s handled processes by the Application (ProfiDrive, EtherCat Motion, etc.) cyclically through FOC API.

 

  • MOTION - Set motor speed: The set motor speed is called cyclically by the external application timer. It is fully compatible with the different timer periods (The response of the speed and position control will vary depending on the period of the relevant external timer). The position control mentioned above is realised by the external application through the position feedback from the encoder. It logically generates a position path integrating the set motor speed including the ramp-up and ramp-down.

  • MOTION - Get motor speed: The get motor speed is called cyclically by the external application timer the same way. It returns the actual estimated motor speed. Triggering this component cyclically is of vital importance as it performs the speed and position estimation process by the PSE component. The PSE component has been modified to work flexibly with different bus cycle periods. Unlike V1.0.0.0, the PSE component calls the capture QEI (Quadrature Encoder Interface) function by the PSE estimate speed function to calculate estimate speed. Please don’t forget the trigger Get Motor Speed function through FOC API cyclically to ensure error-free motion control.

These related functions are implemented in the “Components\Hal\Sources\Mcl_Motion.c”.

FOC Control

The “FOC Control“ component takes care of the vector part of the FOC application. It allows the motor to be driven with closed-looped(current vector control) and open-looped(voltage vector control). With the closed-loop control, it is ensured that the maximum torque value is reached by making the Id and Iq vectors orthogonal by the current PI controllers for the set speed (Figure 1). In open-looped control, on the other hand, the vd and vq vectors are directly determined and given to the Inverse Park Transform block to control the motor, and maximum torque cannot be guaranteed. It is used in our application during calibration and will be implemented for more precise position control. Above, the MPWM ECZ event is mentioned while explaining the MPWM component. The ECZ counter value is 2 in your application. That is, 1 ECZ event will occur in every 2 BOP events and the MPWM Event Callback will be handled. The functions handled (Figure 6) each time the MPWM event callback is invoked are described below.

Figure 6 - MCL Layer FOC Control component’s MPWM event task

 

  • HAL GATE DRV - Gate Driver Operation State Machine: The Gate Driver component plays a crucial role in controlling the FOC. This state machine processes the operation control command given to the Gate Driver. These are respectively to enable/disable the Gate Driver, write the desired configuration registers, read the status registers, and perform fault detection. Since the Gate Driver is responsible for measuring the current flowing through the motor windings, it's essential to trim this offset value to minimize any potential measurement errors. For trimming these offset values, The current offset compensation algorithm trims these offset values into the Foc Control component. However, this algorithm compensates for all cascaded offsets generated by the ADC input offset and other onboard components. When compensating the gate driver's current measurement offset value before entering the ADC, reduces the risk of measurement error. Because this separated offset values from ADC and other parasitic effects, only ADC errors and these parasitic effects will be filtered with the offset compensation algorithm in Foc Control. More detailed information can be accessed at the relevant link: Auto Current Offset Trim using DRV8323RS Gate Driver. The corresponding HAL Gate Driver operation state machine is shown in Figure 7, and the states' behaviour is explained in detail in Table 3. HAL Gate Driver Operation State Machine is implemented in the Hal_GateDrvCyclicRoutine(…) function in the “Components\Hal\Sources\Hal_GateDrv.c”.

 

Figure 7 - HAL Gate Driver operation state machine

State

Description

State

Description

INIT

The Set Gate Driver operation command is directed.

WAIT FOR WAKEUP

“HAL_GATEDRV_OPERATION_START“ command has arrived. Gate Driver is enabled and waiting for it to wake up.

WAIT FOR SLEEP

“HAL_GATEDRV_OPERATION_STOP“ command has arrived. Gate Driver is disabled and waiting for it to sleep.

AUTO OFFSET CAL

Activating the automatically current measurement offset calibration to compensate it automatically. MPWM is disabled during this process.

WRITE CONFIG REGS

All configuration registers are being written.

READ CONFIG REGS

It performs the reading process for the verification purposes of the written configuration registers.

READ STATUS REGS

“HAL_GATEDRV_GET_STATUS“ command has arrived or verification is successes. All status registers will be read.

DONE

The operation is successful. Stay in this state until the new set operation command arrives.

FAILED

SPI communication error. Stay in this state until the new set operation command arrives.

Table 3 - HAL Gate Driver operation state machine’s state definitions.

 

  • MCL FOC Control - FOC Control Main State Machine: This state machine is a large-scale state machine providing the FOC control. The state transitions of this state machine are indirectly controlled by the Motion component using the Transit state function. That is, its control is performed indirectly by the MCL Motion component. Please keep this in mind when examining it. The corresponding FOC Control Main state machine is shown in Figure 8, and the states' behaviour is explained in detail in Table 4. IDLE state stops all FOC operation including stopping MPWM when the motor is not operating. The purpose of the VOLTAGE CONTROL state is to provide open-loop vector control for the calibration process (It will be used with implemented torque control). The aim is not to reach the maximum torque but to keep the torque constant for accurate measurement during calibration. The CURRENT CONTROL state provides the desired closed-loop vector control. This is the behaviour we want during motor control. It keeps the motor torque at the maximum level at set speed thanks to the dq current PI controllers it contains. It is the state that is active when the motor is operating. The FAILED state is triggered after a critical error in the Motion Control State and MPWM is stopped. Then it is checked whether there is an error in the Gate Driver Unit and if there is an error, Fault Handling is performed. If necessary, the Gate Driver Unit is restarted. MCL Foc Control Main State Machine is implemented in the Mcl_FocCtrlMainSMCtrl(…) function in the “Components\Mcl\Sources\Mcl_FocCtrl.c”. It is transited with the Mcl_FocCtrlTransitMainSMState(…) function on the same path.

Figure 8 - MCL FOC Control main state machine

State

Description

State

Description

IDLE

DQ request voltage and current vectors are set to 0. Disable the MPWM outputs.

VOLTAGE CONTROL

Open-looped vector control of the motor. It is used for the control of the motor without current vector feedback during calibration. Enable the MPWM outputs.

CURRENT OFFSET

Current offset bias calculation is performed. MPWM outputs will be enabled by inheritance.

CURRENT CONTROL

Closed-looped vector control of the motor is performed. Enable the MPWM outputs.

FAILED

Disable the MPWM outputs. If there is an error due to Gate Driver, restart it.

Table 4 - MCL Foc Control state machine’s state definitions

 

The CURRENT OFFSET state is used for current offset bias calculation. Phase currents are AC by nature, that is they are bidirectional currents. However, the integrated ADC we measured is DC, so it is unidirectional. Measuring the phase currents with the ADC and interpreting it assigned in the variable, we need to make the Current Offset Bias calculation and compensate for the measured values. The state machine manages the current offset bias calculation in the CURRENT OFFSET state. The corresponding FOC Control Main state machine is shown in Figure 9 and its states' behaviours are explained in detail in Table 5. MCL Current Offset Bias Calculation State Machine is implemented in the mcl_FocCtrlCurrentOffsetSMCtrl(…) function in the “Components\Mcl\Sources\Mcl_FocCtrl.c”.

Figure 9 - MCL Current Offset Bias Calculation state machine

State

Description

State

Description

INIT

Reset Measurement Index counter and Sum of the Current Offset measurement variables on phases U, V, W.

MEASURE

Add measured phase currents(U,V,W) to the Sum of Current Offset measurements on phases. Increase Measurement Index counter. This state is active until the measurement index is equal to the 8 (number of measurement parameters that is defined in MCL config parameters).

CALC

Check whether the Sum of Current Offsets of each phase (U,V,W) are inside defined borders. If Sum of Current Offsets is inside the defined borders, set the offsets as the average of the sum of current offsets.

DONE

Current offsets of the phases(U,V,W) are calculated successfully.

FAILED

An error occurred during the measurement. It will be tried again after the specified waiting time. Disable the MPWM outputs.

Table 5 - MCL Foc Control current offset bias calculation state machine’s state definitions

Calibration

The purpose of the MCL Calibration component is to make the correct position estimation. It can be performed in two different ways.

  1. Motor self-calibration: The motor self-calibration provides associate position information from the feedback device (Encoder, Resolver, etc.) related to each motor hall sensor sector for both rotation directions(CW and CCW). The purpose of rotating the motor in two directions is to compensate for the Hysteresis effect by determining the start and end positions of each Hall Sensor sector. Then it is validated whether the position values obtained for the six Hall Sensor sectors are within certain limits in both directions. After successful validation, the values obtained in both directions in each Hall Sensor sector are averaged and recorded for the correct position estimation. The corresponding Calibration state machine is shown in Figure 10, and the states' behaviour is explained in detail in Table 6. MCL Calibration State Machine is implemented in the Mcl_CalCyclicRoutine(…) function in the “Components\Mcl\Sources\Mcl_Cal.c”.

 

Figure 10 - MCL Calibration state machine

State

Description

State

Description

INIT

Reset the calibration Electrical Rotor Position Angle[θ], Mechanical Speed[RPM] and set the calibration Vd and Id vectors with defaults(Defined in MCL config parameters). Transit the Foc Control Main State to Voltage Control. Set the elec. rotor position manually. Set requested DQ voltage vectors. Set initial alignment waiting time to 500ms(Config parameter).

WAIT FOR INITIAL ALIGNMENT

Wait until the waiting time becomes 0. Just before switching to TURN CW state, save last captured Hall Sensor Sector and Electrical Rotor Position Angle[θ], set the calibration Mechanical Speed[RPM] to 12(Defined in MCL config parameters). Set calibration speed manually.

TURN CW

This state is active until the rotor completes the 4(Config parameter) CW revolutions. Thus, when Hall Sensor sector change occurs, its current electrical rotor position angle value is associated with that sector. Reset the calibration Electrical Rotor Position Angle[θ], Mechanical Speed[RPM]. Set the direction change alignment waiting time to 500ms(Config parameter). Thus, preparations are made for the next state.

WAIT FOR DIR CHANGE ALIGNMENT

Before changing the direction, the rotor is kept at a standstill. It is similar to the “WAIT FOR INITIAL ALIGNMENT” state. Differently, Mechanical Speed[RPM] is set to -12.

TURN CCW

It is similar to “TURN CW” state, except that the motor rotates in the opposite direction.

VALIDATE

Hall sector sequences, hall position alignment trend and position deviation values are checked respectively.

EVALUATE

After successful validation, the values obtained in both directions in each sector are averaged and these values are recorded to be used in correct position estimation.

DONE

Calibration is successful. Transit the Foc Control Main State to Idle.

FAILED

Calibration is failed. Transit the Foc Control Main State to Idle.

Table 6 - MCL Calibration state machine’s state definitions

 

  1. Motor calibration using user parameters: This feature was implemented with V1.1.0.0. Hall Sector sequence and position values obtained through previously successful self-calibration are required to perform this functionality. These values can be obtained and recorded in the remanent area in the external Application. This allows the motor to be calibrated instantaneously without moving the rotor. (Motor self-calibration can pose a safety risk when the motors are linked to a mechanical mechanism because the drives begin to move)

PSE (Position & Speed Estimation)

The PSE component transforms the data it receives from the relevant feedback devices(Encoder, Resolver, Hall Sensor from HAL layer) into meaningful and provides speed and position information for FOC control. Speed and position information is currently only provided by the encoder (with the QEI interface) and the Hall sensors.

The PSE component has been modified to work flexibly with different bus cycle periods. Unlike V1.0.0.0, the PSE component calls the capture QEI (Quadrature Encoder Interface) function by the PSE estimate speed function to calculate estimate speed. Thus, synchronization with the external Application is possible.

In the future, various encoder interfaces and resolvers (SinCos) will be supported.

FOC API Layer (CORE)

The “Foc Api Layer“ provides an interface for the user to control the FOC application. The following functions can be accessed from the “Targets\Common\Include\Foc_Api.h” file.

Initialize FOC layer

FOC_H /* FOC handle*/ Foc_Init(FOC_INIT_PRM_T* ptFocInitPrm); /* FOC initalization parameters */

Initializes the FOC. After successful initialization, creates resources, starts the FOC, and returns the handle to the user.

The FOC_INIT_PRM_T stores the low layers' handles.

 

Deinitialize FOC layer

uint32_t /* Hilscher status code */ Foc_DeInit(FOC_H hFoc); /* FOC handle */

Deinitializes the FOC. It stops the FOC and frees up the resources for the corresponding handle.

Hilscher status codes are defined into the Hil_Results.h file.

 

Set Motor Speed

uint32_t /* Hilscher status code */ Foc_SetMotorSpeed( FOC_H hFoc, /* FOC handle */ const int32_t lSpeed); /* Motor speed request[RPM] Positive values - CW direction Negative values - CCW direction */

Sets the motor speed in RPM. This function must be set cyclically using either the hardware-assisted bus cycle callback (XCTRIGGER) or a timer callback you have created. Because the speed controller indirectly handled using these callbacks.

 

Get Motor Speed

Gets the actual motor speed in RPM. The get speed is estimated through the encoder by default. The Hall sensor can also be used for speed estimation, although this is not our recommendation. Resolver support will be available in the future as well. This function must be set cyclically using either the hardware-assisted bus cycle callback (XCTRIGGER) or a timer callback you have created. Because the speed is indirectly estimated using these callbacks.

 

Set Operation Mode

Sets the FOC’s operation mode. It allows FOC to perform different operations. The function ”Set operation mode” activates the related mode acyclically. Related operation mode descriptions can be found in Table 7.

Operation mode

Description

Operation mode

Description

CTRL_START_SELF_CALIBRATION

Start the self-calibration process. Thus, the calibration request is created and processed by the state machine.

CTRL_START_OPERATION

Coast stop mode is disabled and pulse is enabled. The speed controller handles the speed setpoint value.

CTRL_COAST_STOP

Activate the coast stop mode. Pulse disabled.

Table 7 - FOC Operation modes

 

Get Operation Mode

Gets the motion control state machine's state. The enum type “MCL_MOTION_CTRL_STATE_E“ shows the current operation mode. Related motion control states' descriptions can be found in Table 8.

Motion Control State

Description

Motion Control State

Description

MCL_MOTION_CTRL_UNINITIALIZED

The motion layer is uninitialized.

MCL_MOTION_CTRL_INITIALIZED

The motion layer is initialized and ready for the calibration process.

MCL_MOTION_CTRL_CALIBRATION_IN_PROGRESS

The self-calibration process is started. Wait until it completed.

MCL_MOTION_CTRL_READY_TO_OPERATE

The calibration process is completed successfully. (self-calibration or calibration using user parameters). It is ready to operate. (Pulse disabled)

MCL_MOTION_CTRL_OPERATING

FOC is operating. Set the desired motor speed. (Pulse enabled)

MCL_MOTION_CTRL_COAST_STOP

The coast stop is activated. Applying Hi-Z to the MOSFET gates. (Pulse disabled)

MCL_MOTION_CTRL_CRITICAL_FAULT

A critical error has occurred. It will make sense after fault handling integration.

Table 8 - Motion control states

 

Set Reference External Trigger Period

Set the reference external trigger period. The reference external trigger (XCTRIGGER or Timer callback) period information set by the user is used to synchronize the PWM event with the external trigger. As mentioned above, the IRT mode was introduced with FOC V1.1.0.0 and must be synchronised with MPWM to ensure deterministic synchronised operation.

 

Get Reference External Trigger Period

Get the reference external trigger period. This is the reference external trigger (XCTRIGGER or Timer callback) period last set by the user.

 

Get Motor Position

Gets the provided position information obtained and processed by the relevant peripheral modules. In V1.1.0.0 this peripheral module is QEI (Quadrature Encoder Interface). The position information data details are described in Тable 9.

Parameter

Data Type

Description

Parameter

Data Type

Description

ptMotorPos

MCL_PSE_MOTOR_POS_T

Motor position information data

  • bFineResolution

uint8_t

Fine resolution

  • bQuadrantInfo

uint8_t

Quadrant information (signs of sine and cosine)

  • usNumOfPulses

uint16_t

Number of pulses in one revolution

  • ulNumOfRevolutions

uint32_t

Number of revolutions

Table 9 - Motor position information data structure

 

Get Motor Position Format

Gets the provided motor position format information. It gives automatically calculated bit lengths depending on the resolution of the position estimation sensor integrated into the motor. This format’s structure details are described in Тable 10.

Parameter

Data Type

Description

Parameter

Data Type

Description

ptMotorPosFormat

MCL_PSE_MOTOR_POS_FORMAT_T

Motor position format information

  • eSensorType

MCL_PSE_POS_SENSOR_TYPE_E

Motor position sensor type

MCL_PSE_INCREMENTAL_ENCODER - Incremental encoder

MCL_PSE_ABSOLUTE_ENCODER - Absolute encoder

MCL_PSE_RESOLVER - Resolver

  • bFineResBitLen

uint8_t

Fine resolution bit length

  • bQuadrantInfoBitLen

uint8_t

Quadrant info bit length

  • bNumOfPulsesBitLen

uint8_t

Number of pulses bit length

  • bNumOfRevoBitLen

uint8_t

Number of revolution bit length

Table 10 - Motor position format information structure

 

Set Motor Calibration Parameters

As mentioned above, V1.1.0.0 supports motor calibration using the User Parameters feature. This function sets the motor calibration parameters. It should not be forgotten that the motor calibration parameters must be obtained during the previous self-calibration process (MCL_PSE_NUM_OF_HALL_SECTORS: 6) and must be valid. The calibration parameters' structure is described in Table 12.

Parameter

Data Type

Description

Parameter

Data Type

Description

ptMotorCalParams

 

MCL_MOTION_MOTOR_CAL_PARAMS_T

Motor calibration parameters

  • ausHallSectorPosCw[MCL_PSE_NUM_OF_HALL_SECTORS]

uint16_t[6]

Hall sector positions during clockwise motor rotation

  • ausHallSectorPosCcw[MCL_PSE_NUM_OF_HALL_SECTORS]

uint16_t[6]

Hall sector positions during counter-clockwise motor rotation

  • abHallSectorSequence[MCL_PSE_NUM_OF_HALL_SECTORS]

uint8_t[6]

Hall sector order during clockwise motor rotation

Table 11 - Motor calibration parameters' structure.

 

Get Motor Calibration Parameters

This function gets the motor calibration parameters obtained by previous valid calibration. (MCL_PSE_NUM_OF_HALL_SECTORS: 6). The calibration parameters' structure is described in Table 11.

Mathematical Library(MATH)

Contains all the transform and calculation functions of the FOC. You may be wondering why some general mathematical functions are also included here. They are optimized for speed.

This layer is accessible from all layers. In Figure 3, the functions included in the MATH library are shown.

Targets

It is the place where all layers of the FOC component are initialized, configured, started, etc.

The “Targets\Common\Include\McBoardHwConfig.h” file contains the board definitions (voltage divider resistors, shunt resistors, etc.) associated with the netX90-MC board used by the FOC. Thus, definitions can be configured easily after new board revisions.

The “Targets\NXHX90-MC\Sources\main.c” file is where all the initialization, configuration, and motor demo functionality resides. Only the parameters that users can modify will be discussed here.

Board configuration

The MCL_MC_BOARD_CFG_PRM_T structure contains some board-specific parameters. It provides the ability to change configurations based on hardware changes and is initialized in “Targets\NXHX90-MC\Sources\main.c”. Normally these parameters are not supposed to be modified because they are tuned for the current NXHX90-MC board which is not expected to be changed once configured properly. Related parameters are shown in Table 12.

Parameter

Data Type

Defaults

Description

Note

Parameter

Data Type

Defaults

Description

Note

tMcBoardCfgPrm

MCL_MC_BOARD_CFG_PRM_T

 

Motor control board's configuration structure

flAdcVrefExtPin

float

3.3f

ADC external reference voltage. The reference voltage determines the highest signal level that the ADC can convert, and all quantized digital outputs from an ADC will be some ratio of this input reference voltage.

  1. Maximum Vref is 3.3V.

  2. For more detailed information, refer to the datasheet.

tMotorPhaseShuntRes

MCL_MOTOR_PHASE_SHUNT_RES_T

 

Motor phases shunt resistor structure

  1. These resistors are used to measure the current flowing through the phases in terms of voltage.

  2. These provide feedback to the gate driver. It is multiplied by 20 using the internal operational amplifier inside the Gate driver and read by the netX90's ADCs.

  3. Formula: V

meas_curr = Iph_curr x Rsh x Gcurr_gain

Iph_curr: Phase current[A];

Rsh: Shunt resistor[Ω];

Gcurr_gain: Current amp. gain

  • flPhaseAOhm

float

0.007f

Phase A - Current measurement shunt resistor[Ω].

  • flPhaseBOhm

float

0.007f

Phase B - Current measurement shunt resistor[Ω].

  • flPhaseCOhm

float

0.007f

Phase C - Current measurement shunt resistor[Ω].

tMotorPhaseVoltageDivRes

MCL_MOTOR_PHASE_VOLTAGE_DIV_T

 

Motor phases voltage divider structure

  1. Since the motor operating voltage is between 12V and 36 volts, the voltage must be attenuated to be read by the microcontroller's ADC.

  2. Formula: Vout = Vinx[Rlow_side/(Rlow_side+Rhigh_side)]

Vin: Input voltage

Vout: Attenuated signal voltage

Rlow_side: Low-side resistor

Rhigh_side: High-side resistor

  • tPhaseA

MCL_VOLTAGE_DIV_T

 

Phase A voltage divider structure

I. flHighSideResOhm

float

82000.0f

Phase A voltage divider high-side.

II. flLowSideResOhm

float

4990.0f

Phase A voltage divider low-side.

  • tPhaseB

MCL_VOLTAGE_DIV_T

 

Phase B voltage divider structure

I. flHighSideResOhm

float

82000.0f

Phase B voltage divider high-side.

II. flLowSideResOhm

float

4990.0f

Phase B voltage divider low-side.

  • tPhaseC

MCL_VOLTAGE_DIV_T

 

Phase C voltage divider structure

I. flHighSideResOhm

float

82000.0f

Phase C voltage divider high-side.

II. flLowSideResOhm

float

4990.0f

Phase C voltage divider low-side.

flManualCtrlPotValOhm

float

50000.0f

NXHX90-MC board potentiometer resistance [Ω].

  1. Look at the NXHX90-MC board’s schematics for detailed information

tMcBoardLimits

MCL_MC_BOARD_LIMIT_T

 

NXHX90-MC Board’s limits

 

  • flMaxAdcVrefPinVoltage

float

3.3f

Maximum ADC pin reference voltage [V].

  1. Maximum Vref is 3.3V for NXHX90-MC.

  • flMaxPhaseCurrentAmp

float

40.0f

Maximum phase current [A].

1. It is related to the used output MOSFETs' current handling.

  • flMaxPhaseShuntResOhm

float

12.0f

Maximum phase shunt resistance [Ω].

 

Table 12 - Board configuration parameters

Motor-specific Configuration

The Motor-specific parameters are typically found in the Manufacturer's specification for the motor. In the PROFIdrive example, this configuration is found in the structure. Related parameters are shown in Table 13.

The parameters defined by the following structure affect fundamental motor behaviour - torque, speed, etc. A few of the parameters require experimental fine-tuning to acquire the best results. All parameters have already been checked and fine-tuned for the predefined motors supplied with this example. However, if a new motor is to be adapted those parameters might/should be changed accordingly. If not set properly the motor can emit strange noises and heat. Please keep the motor under continuous supervision until the parameters are adapted and approved.

(in Targets/NXHX90-MC/main.c).

Parameter

Data Type

Description

Note

Parameter

Data Type

Description

Note

bMotorPolePairs

uint8_t

Number of Motor pole pairs.

 

flMaxPhaseCurrAmp

float

Max continuous motor phase current[A].

 

usMotorSvpwmFreqHz

uint16_t

Space-Vector modulation PWM working frequency[Hz].

  1. It is generally greater than 10 kHz and differs depending on the motor.

tMotorSpeedCfg

MCL_MOTOR_SPEED_CFG_T

Motor speed configuration structure

 

  • usMinSpeedRpm

uint16_t

Minimum speed value - used for “stall” detection.

 

  • usNominalSpeedRpm

uint16_t

Nominal speed of the Motor [rpm].

 

  • usMaxSpeedRpm

uint16_t

Maximum speed of the Motor [rpm]. Setting speed to greater values will result in error.

 

tSpeedPiCtrlCfg

MCL_PI_CTRL_CFG_T

Motor speed PI control parameters structure

  1. They varies depending on the motor and must be tuned.

  • flKp

float

Proportional gain - Kp

  • flKi

float

Integral gain - Ki

tTorquePiCtrlCfg

MCL_PI_CTRL_CFG_T

Motor torque PI control parameters structure

  1. They varies depending on the motor and must be tuned.

  • flKp

float

Proportional gain - Kp

  • flKi

float

Integral gain - Ki

usQeiNumOfSlots

uint16_t

Maximum counts per revolution (Encoder resolution).

 

eQeiMotorEncSrc

MCL_QEI_MOTOR_ENC_SRC_E

Connected encoder source to the NXHX-DH adapter.

  • Single-ended encoder(QEI_TTL) - MCL_QEI_MOTOR_ENC_SRC_ENC0

  • Differential encoder(QEI__RS422) - MCL_QEI_MOTOR_ENC_SRC_ENC1

  1. Since these encoders are connected to the NXHX-DH adapter, the encoder source differs according to the electrical characteristics of the encoder.

  2. Single-ended encoder is connected directly to ENC0 input, and differential encoder is connected to ENC1 input via transiever. This routing is provided by NXHX-DH.

eQeiInvMotorEncDir

HAL_QEI_INV_ENC_DIR_E

Invert encoder direction.

  • Not inverted - MCL_QEI_INV_ENC_DIR_DISABLE

  • Inverted - MCL_QEI_INV_ENC_DIR_ENABLE

 

  1. It is used if the direction of the encoder connected to the motor is opposite to the hall sensor.

  2. The factory-installed encoder direction may be reversed, or the cables may be installed backwards.

fInvMotorDir

bool

Invert the direction of rotation. If “false” positive speed values refer to clockwise rotation, negative - counter clockwise. If “true” - positive speed values refer to counter clockwise direction of rotation.

 

Table 13 - Motor-specific configuration parameters

 

FOC System Configuration

These parameters, situated in the lower layers (MCL, HAL) of the FOC, are crucial for ensuring the effective operation of its algorithms. The MCL_FOC_SYS_CFG_PRM_T structure contains these parameters.

They are initialized in “Targets\NXHX90-MC\Sources\main.c”. Normally they are not supposed to be modified because they are tuned for the current FOC algorithm. Related parameters are shown in Table 14.

(in Targets/NXHX90-MC/main.c).

Parameter

Data Type

Defaults

Description

Note

Parameter

Data Type

Defaults

Description

Note

tHallPiCtrlCfg

MCL_FIXEDPT_PI_CTRL_CFG_T

 

Hall sensor position estimation PI control parameters structure.

 

  • lKp

int32_t

1062

Proportional gain - Kp

  • lKi

int32_t

49

Integral gain - Ki

tFieldWeakPiCtrlCfg

MCL_PI_CTRL_CFG_T

 

Motor Field-weakening PI control parameters structure.

 

  • flKp

float

0.0f

Proportional gain - Kp

  • flKi

float

0.15f

Integral gain - Ki

flFieldWeakStartVoltageRatio

float

1.1f

Threshold voltage vector magnitude to start field-weakening.

  1. Value is less than maximum voltage vector magnitude to allow a transition region..

chDcBusVoltageOffsetAdcDig

int8_t

10

Experimentally determined DC-bus Voltage offset value.

 

bNumOfCurrentOffsetMeas

uint8_t

8

Number of measurements to calculate average current offset.

 

bCurrentOffsetThresholdAdcDig

uint8_t

88

It is the threshold value that defines the range where the average Current Offset value can be found.

Ideal current offset = 2048 (The half of the 12-bit ADC’s max range)
Minimum current offset range = (2048 - 88)
Maximum current offset range = (2048 + 88)

 

flSvpwmMaxDutyCyclePercent

float

96.0f

Maximum allowed duty cycle percentage.

 

eSpeedEstMethod

MCL_SPEED_EST_METHOD_E

MCL_SPEED_EST_QEI

Speed estimation method.

  • Quadrature Encoder Interface - MCL_SPEED_EST_QEI

  • Hall Sensor - MCL_SPEED_EST_HALL_SENSOR

 

flCalRqstVdVector

float

0.12f

Length of the voltage vector(vd) used for calibration in units of the commutation.

 

sCalSamplingSpeedRPM

int16_t

12

Rotor speed at calibration stage. Slow speeds are generally more accurate.

 

bCalNumOfTurns

uint8_t

4

Number of turns (mechanical angle, electrical angle) of the linear regression in one direction.

 

usCalMaxDeviationAngleDig

uint16_t

4000

Deviation angle of hall sensor position when turning CW and CCW.

  1. Angle is in digits (2^16 is 360 degrees).

  2. Maximum electrical angle deviation when validating the calibration values, unit complies with Angle definition above.

usCalWaitTimeBetweenEachSample

uint16_t

0

Adding wait time[ms] when turing CW and CCW before performing linear regression on another sample of (mechanical angle, electrical angle).

  1. During the calibration process, the motor rotating occurs using the samples of the mechanical and electrical angles.

  2. This parameter specifies the waiting time between two samples.

  3. It is one of the parameters that should be checked when proper calibration doesn't occur.

usCalWaitTimeAfterAlignment

uint16_t

500

Add wait time[ms] delay after each alignment process.

  1. During the calibration process, motor positioning alignment is performed during initial alignment, direction change and validation states.

  2. This parameter represents the waiting time after each motor alignment..

  3. It is one of the parameters that should be checked when proper calibration doesn't occur.

Table 14 - FOC system configurations

FOC Demo

Demo behaviours

There are two demo modes:

  1. Cyclical demo mode: This demo is created to demonstrate the speed control capabilities of the FOC. Additionally, the coast-stop functionality is added to the demo to be understood and observed by the user. Figure 11 shows the exact behaviour of the demo. The specific times from t1 to t14 are not provided due to the possibility of changes with new updates.

  2. Demo mode with potentiometer: The motor speed is adjusted with the potentiometer on the board.

The desired demo mode is activated from the “Targets\wscript” file by manipulating the __USE_DEMO_POTENTIOMETER parameter.

 

FOC Ramp Demo Loop.png
Figure 11 - FOC Ramp Demo motor speed variation diagram over time.

 

Figure 12 shows the FOC Demo Run-time diagram including the behaviour of the FOC. Using two job timers is to adapt the Demo to isochronous mode. The Bus Cycle Emulation process was performed with these two timers. Additionally, the FOC details mentioned above are summarized in Figure 12.

 

Initialization

  1. Configures the structures mentioned in Targets according to the selected target.

  2. Initializes the FOC modules and gives the user the FOC handle after the successful initialization.

  3. Initializes the FOC job timers.

  4. Sets the reference external trigger period to give feedback for MPWM synchronization.

  5. Realizes the calibration process dependent on the __USE_MOTOR_CALIBRATION_WITH_PARAMS parameter’s value and waits until it is completed.

  6. Sets the operation mode with the Start Operation parameter and waits unit it is completed.

  7. Start selected demo mode dependent on the __USE_DEMO_POTENTIOMETER parameter’s value.

Abbreviations

Abbreviation

Description

Abbreviation

Description

FOC

Field-Oriented Control

HAL

Hardware Abstraction Layer

ADC

Analog-to-Digital Converter

MPWM

Motion Pulse-Width Modulation

RPM

Revolutions per minute

MTPA

Maximum Torque per Ampere

MTPV

Maximum Torque per Voltage

PI

Proportional Integral

PMDC

Permanent Magnet Direct Current

BLDC

Brushless Direct Current

QEI

Quadrature Encoder Interface

MCL

Motor Control Layer

API

Application Programming Interface

CW

Clockwise

CCW

Counter-Clockwise

ECZ

Event Counter Zero

BOP

Beginning of Period

DIR

Direction

MC

Motor Control

Hi-Z

High Impedance

NTC

Negative Temperature Coefficient

MECH

Mechanical

ELEC

Electrical

GPIO

General-Purpose Input/Output

SVM

Space Vector Modulation

GDU

Gate Driver Unit

PSE

Position and Speed Estimation

MENC

Motion Encoder

IRT

Isochronous Real-Time