This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28032:PWM 频率

Guru**** 2512775 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1059925/tms320f28032-pwm-frequency

器件型号:TMS320F28032

在 Control_Suite 内的示例 HVPM_Sensorless 项目中、软件中指定的 PWM 频率与实际的 PWM 频率不匹配。

在软件中、PWM 频率被指定为10kHz。 但实际上、我们将其测量为10.08KHz。 这会导致实际 电机速度为1008 RPM、而在软件中被处理为1000 rpm。

无论我们使用内部时钟还是晶体振荡器、情况都不会改变。  期待您就此问题提供帮助。

我将在下面添加软件的相关部分。  

#define   PWM_FREQ_CUSTOM      10000

float32 T = (float32)1 / (float32)PWM_FREQ_CUSTOM; 

****@主函数

// Initialize PWM module           

pwm1.PeriodMax = SYSTEM_FREQUENCY*1000000*T/2;     

pwm1.HalfPerMax=pwm1.PeriodMax/2;   

pwm1.Deadband  = 0.9*SYSTEM_FREQUENCY;              

PWM_INIT_MACRO(1,2,3,pwm1)

****

 

和 Device_Init 函数如下所示:

 

void DeviceInit(void)
{
    WDogDisable(); // Disable the watchdog initially
    DINT;           // Global Disable all Interrupts
    IER = 0x0000;   // Disable CPU interrupts
    IFR = 0x0000;   // Clear all CPU interrupt flags


// Switch to Internal Oscillator 1 and turn off all other clock
// sources to minimize power consumption
    EALLOW;
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL=0;  // Clk Src = INTOSC1
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF=1;     // Turn off XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF=1;    // Turn off XTALOSC
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF=1;    // Turn off INTOSC2

//    SysCtrlRegs.CLKCTL.bit.XCLKINOFF=1;//Turn off XCLKIN
//    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF =0;// OSC on (default on reset)
//    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL=1;  // Clk Src = INTOSC1
//    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF=1;    // Turn off INTOSC2
//    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL=0;

    EDIS;


// SYSTEM CLOCK speed based on internal oscillator = 10 MHz
// 0xC =  60    MHz        (12)
// 0xB =  55    MHz        (11)
// 0xA =  50    MHz        (10)
// 0x9 =  45    MHz        (9)
// 0x8 =  40    MHz        (8)
// 0x7 =  35    MHz        (7)
// 0x6 =  30    MHz        (6)
// 0x5 =  25    MHz        (5)
// 0x4 =  20    MHz        (4)
// 0x3 =  15    MHz        (3)
// 0x2 =  10    MHz        (2)

    PLLset(0xC);    // choose from options above
//    PLLset(0x6);
// Initialise interrupt controller and Vector Table
// to defaults for now. Application ISR mapping done later.
    PieCntlInit();
    PieVectTableInit();

  EALLOW; // below registers are "protected", allow access.

// LOW SPEED CLOCKS prescale register settings
  SysCtrlRegs.LOSPCP.all = 0x0002;         // Sysclk / 4 (15 MHz)
  SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2;


// ADC CALIBRATION 
//---------------------------------------------------
// The Device_cal function, which copies the ADC & oscillator calibration values
// from TI reserved OTP into the appropriate trim registers, occurs automatically
// in the Boot ROM. If the boot ROM code is bypassed during the debug process, the
// following function MUST be called for the ADC and oscillators to function according
// to specification.

    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // Enable ADC peripheral clock
    (*Device_cal)();                        // Auto-calibrate from TI OTP
    SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0; // Return ADC clock to original state


// PERIPHERAL CLOCK ENABLES 
//---------------------------------------------------
// If you are not using a peripheral you may want to switch
// the clock off to save power, i.e. set to =0 
// 
// Note: not all peripherals are available on all 280x derivates.
// Refer to the datasheet for your particular device. 

  SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;    // ADC
  //------------------------------------------------
  SysCtrlRegs.PCLKCR3.bit.COMP1ENCLK = 1;  // COMP1
  SysCtrlRegs.PCLKCR3.bit.COMP2ENCLK = 1;  // COMP2
  SysCtrlRegs.PCLKCR3.bit.COMP3ENCLK = 1;  // COMP3
  //------------------------------------------------
  SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;  //eCAP1
  //------------------------------------------------
  SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=0;   // eCAN-A
  //------------------------------------------------
  SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;  // eQEP1
  //------------------------------------------------
  SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1
  SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;  // ePWM2
  SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;  // ePWM3
  SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;  // ePWM4
  SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;  // ePWM5
  SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;  // ePWM6
  SysCtrlRegs.PCLKCR1.bit.EPWM7ENCLK = 1;  // ePWM7
  SysCtrlRegs.PCLKCR0.bit.HRPWMENCLK = 0;    // HRPWM
  //------------------------------------------------
  SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 0;   // I2C
  //------------------------------------------------
  SysCtrlRegs.PCLKCR0.bit.LINAENCLK = 1;   // LIN-A
  //------------------------------------------------
  SysCtrlRegs.PCLKCR3.bit.CLA1ENCLK = 0;   // CLA1
  //------------------------------------------------
  SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;  // SCI-A
  //------------------------------------------------
  SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 0;   // SPI-A
  SysCtrlRegs.PCLKCR0.bit.SPIBENCLK = 0;     // SPI-B
  //------------------------------------------------
  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;   // Enable TBCLK
  //------------------------------------------------


//--------------------------------------------------------------------------------------
// GPIO (GENERAL PURPOSE I/O) CONFIG
//--------------------------------------------------------------------------------------
//-----------------------
// QUICK NOTES on USAGE:
//-----------------------
// If GpioCtrlRegs.GP?MUX?bit.GPIO?= 1, 2 or 3 (i.e. Non GPIO func), then leave
//   rest of lines commented
// If GpioCtrlRegs.GP?MUX?bit.GPIO?= 0 (i.e. GPIO func), then:
//   1) uncomment GpioCtrlRegs.GP?DIR.bit.GPIO? = ? and choose pin to be IN or OUT
//   2) If IN, can leave next to lines commented
//   3) If OUT, uncomment line with ..GPACLEAR.. to force pin LOW or
//                 uncomment line with ..GPASET.. to force pin HIGH or
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
//  GPIO-00 - PIN FUNCTION = PWM1A
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;         // 0=GPIO,  1=EPWM1A,  2=Resv,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO0 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-01 - PIN FUNCTION = PWM1B
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;         // 0=GPIO,  1=EPWM1B,  2=Resv,  3=COMP1OUT
//   GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO1 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO1 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-02 - PIN FUNCTION = PWM2A
    GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;         // 0=GPIO,  1=EPWM2A,  2=Resv,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO2 = 0;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO2 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-03 - PIN FUNCTION = PWM2B
    GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1;         // 0=GPIO,  1=EPWM2B,  2=SPISOMI-A,  3=COMP2OUT
//   GpioCtrlRegs.GPADIR.bit.GPIO3 = 0;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO3 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO3 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-04 - PIN FUNCTION = PWM3A
    GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1;         // 0=GPIO,  1=EPWM3A,  2=Resv,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO4 = 0;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO4 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO4 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-05 - PIN FUNCTION = PWM3B
    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;         // 0=GPIO,  1=EPWM3B,  2=SPISIMO-A,  3=ECAP1
//   GpioCtrlRegs.GPADIR.bit.GPIO5 = 0;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO5 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO5 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-06 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;         // 0=GPIO,  1=EPWM4A,  2=SYNCI,  3=SYNCO
//   GpioCtrlRegs.GPADIR.bit.GPIO6 = 0;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO6 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO6 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-07 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;         // 0=GPIO,  1=EPWM4B,  2=SCIRX-A,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO7 = 0;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO7 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO7 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-08 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;         // 0=GPIO,  1=EPWM5A,  2=Resv,  3=ADCSOC-A
//   GpioCtrlRegs.GPADIR.bit.GPIO8 = 0;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO8 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO8 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-09 - PIN FUNCTION = LIN_Tx
    GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 2;         // 0=GPIO,  1=EPWM5B,  2=LINTX-A,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO9 = 1;          // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO9 = 1;  // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO9 = 1;          // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-10 - PIN FUNCTION = --PWMdebug--
    GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0;  // 0=GPIO,  1=EPWM6A,  2=Resv,  3=ADCSOC-B
   GpioCtrlRegs.GPADIR.bit.GPIO10 = 1;         // 1=OUTput,  0=INput
   GpioDataRegs.GPACLEAR.bit.GPIO10 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO10 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-11 - PIN FUNCTION = --unused--
    GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 0;  // 0=GPIO,  1=EPWM6B,  2=LINRX-A,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO11 = 1;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO11 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO11 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-12 - PIN FUNCTION = POE
    GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 1;  // 0=GPIO,  1=TZ1,  2=SCITX-A,  3=SPISIMO-B
//   GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO12 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO12 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
//  GPIO-16 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;  // 0=GPIO,  1=SPISIMO-A,  2=Resv,  3=TZ2
//   GpioCtrlRegs.GPADIR.bit.GPIO16 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO16 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-17 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;  // 0=GPIO,  1=SPISOMI-A,  2=Resv,  3=TZ3
//   GpioCtrlRegs.GPADIR.bit.GPIO17 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO17 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO17 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-18 - PIN FUNCTION = AC info
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;  // 0=GPIO,  1=SPICLK-A,  2=LINTX-A,  3=XCLKOUT
    GpioCtrlRegs.GPADIR.bit.GPIO18 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO18 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO18 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-19 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;  // 0=GPIO,  1=SPISTE-A,  2=LINRX-A,  3=ECAP1
//   GpioCtrlRegs.GPADIR.bit.GPIO19 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO19 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-20 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;  // 0=GPIO,  1=EQEPA-1,  2=Resv,  3=COMP1OUT
//   GpioCtrlRegs.GPADIR.bit.GPIO20 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO20 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO20 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-21 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0;  // 0=GPIO,  1=EQEPB-1,  2=Resv,  3=COMP2OUT
//   GpioCtrlRegs.GPADIR.bit.GPIO21 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO21 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO21 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-22 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0;  // 0=GPIO,  1=EQEPS-1,  2=Resv,  3=LINTX-A
//   GpioCtrlRegs.GPADIR.bit.GPIO22 = 1;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO22 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO22 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-23 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 0;  // 0=GPIO,  1=EQEPI-1,  2=Resv,  3=LINRX-A
//   GpioCtrlRegs.GPADIR.bit.GPIO23 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO23 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO23 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-24 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0;  // 0=GPIO,  1=ECAP1,  2=Resv,  3=SPISIMO-B
//   GpioCtrlRegs.GPADIR.bit.GPIO24 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO24 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO24 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------


//  GPIO-28 - PIN FUNCTION = SCI-RX
    GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;  // 0=GPIO,  1=SCIRX-A,  2=I2CSDA-A,  3=TZ2
//   GpioCtrlRegs.GPADIR.bit.GPIO28 = 1;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO28 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO28 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-29 - PIN FUNCTION = SCI-TX
    GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;  // 0=GPIO,  1=SCITXD-A,  2=I2CSCL-A,  3=TZ3
//   GpioCtrlRegs.GPADIR.bit.GPIO29 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO29 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO29 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-30 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 0;  // 0=GPIO,  1=CANRX-A,  2=Resv,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO30 = 0;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO30 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO30 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-31 - PIN FUNCTION = unused
    GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0;  // 0=GPIO,  1=CANTX-A,  2=Resv,  3=Resv
//   GpioCtrlRegs.GPADIR.bit.GPIO31 = 1;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPACLEAR.bit.GPIO31 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPASET.bit.GPIO31 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
//  GPIO-32 - PIN FUNCTION = unused
    GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;  // 0=GPIO,  1=I2CSDA-A,  2=SYNCI,  3=ADCSOCA
//   GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPBCLEAR.bit.GPIO32 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPBSET.bit.GPIO32 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-33 - PIN FUNCTION = unused
    GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;  // 0=GPIO,  1=I2CSCL-A,  2=SYNCO,  3=ADCSOCB
//   GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1;         // 1=OUTput,  0=INput
//   GpioDataRegs.GPBCLEAR.bit.GPIO33 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPBSET.bit.GPIO33 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//  GPIO-34 - PIN FUNCTION = LED3 on controlCARD
    GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;  // 0=GPIO,  1=Resv,  2=Resv,  3=Resv
    GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;         // 1=OUTput,  0=INput
    GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; // uncomment if --> Set Low initially
//   GpioDataRegs.GPBSET.bit.GPIO34 = 1;         // uncomment if --> Set High initially
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
// GPIO 35-38 are defaulted to JTAG usage, and are not shown here to enforce JTAG debug
// usage. 
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------
    EDIS; // Disable register access
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    需要注意的几件事:

    首先要检查振荡器的精度。 确保它是 xx.0000MHz。 如果晶体有偏差、它肯定会出现在输出中、因为 MCU 外设基本上是基于其输入时钟的计时器。

    2、PRD 寄存器中加载的计数值应代表向上/向下计数模式下的100/2微秒、向上计数50us、向下计数50us。 计数器从0递增计数到 PRD 并返回到0。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们如何测量 MCU 使用的 system_frequency?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不确定所有控制卡是否都有助于推出 SYSCLK。  ePWM 本身可以帮助您了解这一点。 只需将计数器设置为从0到9的摆幅、然后下拉至0并再次计数至9。 将其置于向上计数模式 ADn 根据 comp 值4在 ISR 中通过位切换查看输出或 ePWM 输出。 请参见输出频率、并将其乘以10以获得 SYSCLK 频率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据软件中给出的公式、

    pwm1.PeriodMax = system_frequency *1000000*T/2;

    我们测量的 PWM 频率为10.08kHz。 这意味 着 system_frequency 60.480MHz。 也就是说、它不是软件中设置的60MHz。

    这有什么问题? 您的建议是什么?

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想这是您的示波器测量关闭了0.08kHz。

    NIMA

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    电机的极数是多少、您尝试获得的正弦频率是多少?