SPRUJ26A September   2021  – April 2024

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Introduction
  5. 2Motor Control Theory
    1. 2.1 Mathematical Model and FOC Structure of PMSM
    2. 2.2 Field Oriented Control of PM Synchronous Motor
    3. 2.3 Sensorless Control of PM Synchronous Motor
      1. 2.3.1 Enhanced Sliding Mode Observer with Phase Locked Loop
        1. 2.3.1.1 Design of ESMO for PMSM
        2. 2.3.1.2 Rotor Position and Speed Estimation With PLL
    4. 2.4 Hardware Prerequisites for Motor Drive
      1. 2.4.1 Motor Phase Voltage Feedback
    5. 2.5 Additional Control Features
      1. 2.5.1 Field Weakening (FW) and Maximum Torque Per Ampere (MTPA) Control
      2. 2.5.2 Flying Start
  6. 3Running the Universal Lab on TI Hardware Kits
    1. 3.1 Supported TI Motor Evaluation Kits
    2. 3.2 Hardware Board Setup
      1. 3.2.1  LAUNCHXL-F280025C Setup
      2. 3.2.2  LAUNCHXL-F280039C Setup
      3. 3.2.3  LAUNCHXL-F2800137 Setup
      4. 3.2.4  TMDSCNCD280025C Setup
      5. 3.2.5  TMDSCNCD280039C Setup
      6. 3.2.6  TMDSCNCD2800137 Setup
      7. 3.2.7  TMDSADAP180TO100 Setup
      8. 3.2.8  DRV8329AEVM Setup
      9. 3.2.9  BOOSTXL-DRV8323RH Setup
      10. 3.2.10 BOOSTXL-DRV8323RS Setup
      11. 3.2.11 DRV8353RS-EVM Setup
      12. 3.2.12 BOOSTXL-3PHGANINV Setup
      13. 3.2.13 DRV8316REVM Setup
      14. 3.2.14 TMDSHVMTRINSPIN Setup
      15.      34
      16.      35
    3. 3.3 Lab Software Implementation
      1. 3.3.1 Importing and Configuring Project
      2.      38
      3.      39
      4. 3.3.2 Lab Project Structure
      5. 3.3.3 Lab Software Overview
    4. 3.4 Monitoring Feedback or Control Variables
      1. 3.4.1 Using DATALOG Function
      2. 3.4.2 Using PWMDAC Function
      3. 3.4.3 Using External DAC Board
    5. 3.5 Running the Project Incrementally Using Different Build Levels
      1. 3.5.1 Level 1 Incremental Build
        1. 3.5.1.1 Build and Load Project
        2. 3.5.1.2 Setup Debug Environment Windows
        3. 3.5.1.3 Run the Code
      2. 3.5.2 Level 2 Incremental Build
        1. 3.5.2.1 Build and Load Project
        2. 3.5.2.2 Setup Debug Environment Windows
        3. 3.5.2.3 Run the Code
      3. 3.5.3 Level 3 Incremental Build
        1. 3.5.3.1 Build and Load Project
        2. 3.5.3.2 Setup Debug Environment Windows
        3. 3.5.3.3 Run the Code
      4. 3.5.4 Level 4 Incremental Build
        1. 3.5.4.1 Build and Load Project
        2. 3.5.4.2 Setup Debug Environment Windows
        3. 3.5.4.3 Run the Code
  7. 4Building a Custom Board
    1. 4.1 Building a New Custom Board
      1. 4.1.1 Hardware Setup
      2. 4.1.2 Migrating Reference Code to a Custom Board
        1. 4.1.2.1 Setting Hardware Board Parameters
        2. 4.1.2.2 Modifying Motor Control Parameters
        3. 4.1.2.3 Changing Pin Assignment
        4. 4.1.2.4 Configuring the PWM Module
        5. 4.1.2.5 Configuring the ADC Module
        6. 4.1.2.6 Configuring the CMPSS Module
        7. 4.1.2.7 Configuring Fault Protection Function
      3. 4.1.3 Adding Additional Functionality to Motor Control Project
        1. 4.1.3.1 Adding Push Buttons Functionality
        2. 4.1.3.2 Adding Potentiometer Read Functionality
        3. 4.1.3.3 Adding CAN Functionality
    2. 4.2 Supporting New BLDC Motor Driver Board
    3. 4.3 Porting Reference Code to New C2000 MCU
  8.   A Appendix A. Motor Control Parameters
  9.   References
  10.   Revision History

Using PWMDAC Function

The PWMDAC module converts the software variables into PWM signals using ePWM 6A, 6B, 7A, and 7B as shown in Figure 3-25. The PWMDAC module is only supported on the high voltage kit (TMDSHVMTRINSPIN) since it has extra PWM outputs with RC filters available on the board. If the PWMDAC module is used with a motor driver board that does not support the PWMDAC module, then the PWM signals will be routed to spare PWMs on the C2000 LaunchPad and the user would need to add RC filters to those pins in order to utilize the PWMDAC solution.

 PWMDAC Module
                                        Block Diagram Figure 3-25 PWMDAC Module Block Diagram

The PWMDAC module can be used to view the signal, represented by the variable, at the outputs of the related pins through the external low-pass filters. Therefore, the external low-pass filters are necessary to view the actual signal waveforms as seen in Figure 3-26. The (1st-order) RC low-pass filter is used to filter out the high frequency component embedded in the actual low frequency signals. To select R and C values, the time constant can be expressed in terms of the cut-off frequency (fc) as shown in the following equations Equation 49 and Equation 50.

Equation 49. τ = R C = 1 2 π f c
Equation 50. f c = 2 π R C
 External RC
                                        Low-Lass Filter Connecting to a PWM Pin of the C2000
                                        MCU Figure 3-26 External RC Low-Lass Filter Connecting to a PWM Pin of the C2000 MCU

In order to enable the ePWM DAC functionality, the predefined symbol EPWMDAC_MODE must be added in the project properties as shown in Figure 3-19.

The code below shows the declaration of the PWMDAC object. This code is located in the sys_main.c file.

HAL_PWMDACData_t pwmDACData;

The code below shows the initialization and setting up of the PWMDAC object, handle and parameters. Four module inputs, ptrData[0], ptrData[1], ptrData[2], and ptrData[3] are configured to point to the addresses of four variables. The PWMDAC module inputs point to different system variables depending on the build level. This code is located in the sys_main.c file.

// set DAC parameters
pwmDACData.periodMax =
              PWMDAC_getPeriod(halHandle->pwmDACHandle[PWMDAC_NUMBER_1]);

pwmDACData.ptrData[0] = &motorVars_M1.anglePLL_rad;           // PWMDAC1
... ...
pwmDACData.ptrData[1] = &motorVars_M1.angleENC_rad;           // PWMDAC2
... ...
pwmDACData.ptrData[2] = &motorVars_M1.angleENC_rad;           // PWMDAC3
... ...
pwmDACData.ptrData[3] = &motorVars_M1.adcData.I_A.value[0];   // PWMDAC4

pwmDACData.offset[0] = 0.5f;
pwmDACData.offset[1] = 0.5f;
pwmDACData.offset[2] = 0.5f;
pwmDACData.offset[3] = 0.5f;

pwmDACData.gain[0] = 1.0f / MATH_TWO_PI;
pwmDACData.gain[1] = 1.0f / MATH_TWO_PI;
pwmDACData.gain[2] = 1.0f / MATH_TWO_PI;
pwmDACData.gain[3] = 4096.0f / USER_MOTOR1_OVER_CURRENT_A;

The code below shows the updating of the PWM outputs with new data during the execution of the motor1ctrlISR() interrupt. This code is located in the motor1_drive.c file.

// connect inputs of the PWMDAC module. HAL_writePWMDACData(halHandle, &pwmDACData);