Thread 中讨论的其他器件:controlSUITE
工具/软件:Code Composer Studio
您好!
我使用的是 F28027 DSP、我正在从事一个制作三相 SPWM 闭环逆变器的大学项目。
我已经在 DSP 上生成了 SPWM 信号、但我不知道如何在项目中实现 ADC (仅编码而不是概念)。
我已经看到了一些 ADC 程序的示例、并尝试将它们添加到单个程序中、但它不起作用。
我尝试实现 ADC 程序的代码如下所示。 我找不到这方面的问题。
感谢您的任何帮助。
用户通过适当设置
// EPWM1_TIMER_TBPRD 变量来设置 SPWM 的频率。 PWM、递增和递减模式的频率、
//遵循以下公式:TPWM=2xTBPRDxTTBCLK、TTBCLK=SYSCLKOUT/(HSPCLKDIVxCLKDIV)。
//默认情况下:HSPCLKDIV=2、CLKDIV=1。
//
//芯片 ROM 读取 PWM 的正弦。 正弦表由
// 512个元素组成。
//正弦 PWM 的频率由 timer0中断的周期定义。
//对于50Hz,必须读取正弦表,整个时间为20msec。 这意味
着// timer0中断必须每20/512毫秒发生一次。
//的常规类型为 ttimer=Tsin*FCPU/index。
////
正弦的120度差由以下变量设定:
//索引= 0,零度
//索引2= 170,120度
//索引3=340,240度
//
//
////////---
///--------------------------------------------
#include
#include
#include "DSP28x_Project.h"// DSP28x 头文件
#include "F2802x_common/include/f2802x_IQPrototypes.h"
#include "F2802x_common/include/exclk.h"#include "f2802x_common/包含
"#f2802x_包含"#f2802x_common/包含"#f2802x/exclk.h/include
#include #f2802x_common/包含"#f2802x/包含"#f2802x_gpio.h/include #include #include #f2802x/包含#include #f2802x_common.h/包含#f2802x/包含#include #f2802x/包含#f2802x/包含#f2802x/包含#include #f2802x/包含#include #f2802x_common.h/包含#f280n.h/包含#include #f2802x/包含#include #include "#f2802x/包含#f280n.包含#.包含#f2802x/包含#f2802x_common.h/包含#f280n.包含#.h
// timer0
中断的中断原型函数 void CPU_timer0_ISR (void);
void update_compare (void);
//全局 PWM 变量
#define EPWM1_TIMER_TBPRD 14634 // 2050.2Hz 的周期寄存
器#define PHASE 120.0 //定义相位间的实数相位、120deg
#define TTIMEREG 2343 // 50Hz SPWM
UINT16 EPWM_PHASE=(EPWM1_TIMER_TBPRD* PHASE/180.0)的定时器中断;//从 ePWM 模块
UINT16 DUTAY_CYCLE = 1000看到的相位;//初
始设置占空比50% UINT16 DUTAY_B=1000;//初始设置占空比50%
UINT16索引= 0; //零度正弦
uint16 index2=170; // 120度正弦差
uint16 index3=340; // 240度正弦扩散
UINT16死区时间_R=5.0; //死区时间5usec
UINT16死区时间_F=5.0; //死区时间5usec
//处理设置
cpu_handle myCpu;
pll_handle myPll;
wDOG_handle myWedDog;
clk_handle myClk;
adc_handle myAdc;
FLASH_Handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
// SCI_Handle mySCI;
PWM_Handle PWMA、PWMB、PWMC;
Timer_handle myTimer0;
//本示例中使用的 ADC 全局变量:
uint16_t ADC0、ADC1、ADC2、ADC3、sp、 平均值;
双误差、积分;
浮点 ma = 0.8;
浮点 Kp = 0.5;
浮点 Ki = 0.5;
//处理初始
化 void setup_handles ()
{
myClk = CLK_init ((void *) CLK_base_ADDR、sizeof (CLK_Obj));
myPll = PLL_init ((void *) PLL_base_ADDR、sizeof (PLL_Obj));
myWdDog = WDOG_INIT ((void *) WDOG_BASE_ADDR、sizeof (WDOG_Obj));
myCpu = cpu_init ((void *) NULL、sizeof (cpu_Obj));
myFlash = flash_init ((void *) flash_base_ADDR、sizeof (flash_Obj));
myGpio = GPIO_init ((void *) GPIO_base_ADDR、sizeof (GPIO_Obj));
myPie = PI_init ((void *) PI_BASE_ADDR、sizeof (PI_Obj));
// mySCI = SCI_init (((void *) SCIA_BASE_ADDR、sizeof (SCI_Obj)));
myAdc = ADC_init ((void *) ADC_base_ADDR、sizeof (ADC_Obj));
PWMA = PWM_init (((void *) PWM_ePWM1_base_ADDR、sizeof (PWM_Obj));
PWMB = PWM_init (((void *) PWM_ePWM2_base_ADDR、sizeof (PWM_Obj));
PWMC = PWM_init (((void *) PWM_ePWM3_base_ADDR、sizeof (PWM_Obj));
myTimer0 = TIMER_INIT ((void *) TIMER0_BASE_ADDR、sizeof (timer_Obj));
}
//系统初始
化 void init_system ()
{
//禁用看门狗
WDOG_DISABLE (myWdog);
// ADC 的器件校准
(* Device_cal);
//系统初始化 void init_system ();//禁用看门狗 WDOG_disable (myCLK
)* 2
);* 100MHz (rul_clrul_cld);* 2)内部振荡器设置为 PLL_clrul_clrul_clrul_clrulk (2);* 2 (针对 myclrul_clrulk_clrul_clrul_clrul_clk * 2);(1)
//禁用 PIE 外设和所有中断 PI_disable
(myPie);
PI_disableAllInts (myPie);
CPU_disableGlobalIntts (myCpu);
CPU_clearIntFlags (myCpu);
#ifdef _FLASH
memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadSize);
#endif
}
//GPIO 初始
化 void GPIO_init ()
{
//初始化 EPWM1A 和 EPWM1B 的 GPIO
GPIO_setPullUp (myGpio、GPIO_Number_0、GPIO_PULLUP_Disable);
GPIO_setPullUp (myGpio、GPIO_Number_1、GPIO_PULLUP_Disable);
GPIO_setMode (myGpio、GPIO_Number_0、GPIO_0_Mode_EPWM1A);
GPIO_setMode (myGpio、GPIO_Number_1、GPIO_1_Mode_EPWM1B);
GPIO_setDirection (myGpio、GPIO_Number_0、GPIO_Direction_Output);
GPIO_setDirection (myGpio、GPIO_Number_1、GPIO_Direction_Output);
//初始化 EPWM2A 和 EPWM2B 的 GPIO
GPIO_setPullUp (myGpio、GPIO_Number_2、GPIO_PULLUP_Disable);
GPIO_setPullUp (myGpio、GPIO_Number_3、GPIO_PULLUP_Disable);
GPIO_setMode (myGpio、GPIO_Number_2、GPIO_2_Mode_EPWM2A);
GPIO_setMode (myGpio、GPIO_Number_3、GPIO_3_Mode_EPWM2B);
GPIO_setDirection (myGpio、GPIO_Number_2、GPIO_Direction_Output);
GPIO_setDirection (myGpio、GPIO_Number_3、GPIO_Direction_Output);
//初始化 EPWM2A 和 EPWM2B 的 GPIO
GPIO_setPullUp (myGpio、GPIO_Number_4、GPIO_PULLUP_Disable);
GPIO_setPullUp (myGpio、GPIO_Number_5、GPIO_PULLUP_Disable);
GPIO_setMode (myGpio、GPIO_Number_4、GPIO_4_Mode_EPWM3A);
GPIO_setMode (myGpio、GPIO_Number_5、GPIO_5_Mode_EPWM3B);
GPIO_setDirection (myGpio、GPIO_Number_4、GPIO_Direction_Output);
GPIO_setDirection (myGpio、GPIO_Number_5、GPIO_Direction_Output);
}
//PWM 设置
void pwma_init ()
{
// PWMA 初始化
CLK_enablePwmClock (myClk、PWM_NUMBER_1);
//PWMA 初始化
//设置 TBCLK
PWM_setCounterMode (PWMA、PWM_CounterMode_UpDown);//递增-递减计数
PWM_setPeriod (PWMA、EPWM1_TIMER_TBPRD); //设置计时器周期
PWM_DisableCounterLoad (PWMA); //禁用相位加载
PWM_setSyncMode (PWMA、PWM_SyncMode_Disable);
PWM_setCount (PWMA、0x0000); //清除计数器
PWM_setClkDiv (PWMA、PWM_ClkDiv);
PWM_setHighSpeedClkDiv (PWMA、PWM_HspClkDiv_BY_1); //时钟与 SYSCLKOUT 的比率
//设置隐藏
PWM_setShadowImage Mode_cmpA (PWMA、PWM_ShadowImage Mode_Shadow);
PWM_setShadowImage Mode_CMPB (PWMA、PWM_ShadowImage Mode_Shadow);
PWM_setLoadMode_cmpA (PWMA、PWM_LoadMode_Zero);
PWM_setLoadMode_CMPB (PWMA、PWM_LoadMode_Zero);
PWM_setCmpA (PWMA、1000);//初始占空比
PWM_setCmpB (PWMA、1000);
//设置操作
PWM_setActionQual_CntUp_CmpA_PwmA (PWMA、PWM_ActionQual_set); //在事件 A 上设置 PWM1A、递增计数
PWM_setActionQual_CntDown_CmpA_PwmA (PWMA、PWM_ActionQual_clear);//在事件 A 上清除 PWM1A、递减计数
PWM_setActionQual_CntUp_CMPB_PwmB (PWMA、PWM_ActionQual_clear); //在事件 B 上设置 PWM1B,向上计数
PWM_setActionQual_CntDown_CMPB_PwmB (PWMA、PWM_ActionQual_set);//在事件 B 上清除 PWM1B、递减计数
//设置死区控制
PWM_setDeadBandOutputMode (PWMA、PWM_DeadBandOutputMode_EPWMxA_Rising EPWMxB_Falling);
PWM_setDeadBandPolarity (PWMA、PWM_DeadBandPolarity _EPWMxB_Inverted);
PWM_setDeadBandInputMode (PWMA、PWM_DeadBandInputMode_EPWMxA_rising_and_Falling);
PWM_setDeadBandRisingEdgeDelay (PWMA、DeadTime_R);
PWM_setDeadBandFallingEdgeDelay (PWMA,DeadTime_F);
//---------------
///--------------------------------------------------------------
//PWMB 初始化
CLK_enablePwmClock (myClk、PWM_NUMBER_2);
//设置 TBCLK
PWM_setCounterMode (PWMB、PWM_CounterMode_UpDown);//递增-递减计数
PWM_setPeriod (PWMB、EPWM1_TIMER_TBPRD);//设置定时器周期
PWM_enableCounterLoad (PWMB);
PWM_setPhaseDir (PWMB、PWM_PhaseDir_倒 计数);
PWM_setSyncMode (PWMB、PWM_SyncMode_Disable);
PWM_setCount (PWMB、0x0000); //清除计数器
PWM_setClkDiv (PWMB、PWM_ClkDiv);
PWM_setHighSpeedClkDiv (PWMB、PWM_HspClkDiv_BY_1); //时钟与 SYSCLKOUT 的比率
//设置隐藏
PWM_setShadowImage Mode_cmpA (PWMB、PWM_ShadowImage Mode_Shadow);
PWM_setShadowImage Mode_CMPB (PWMB、PWM_ShadowImage Mode_Shadow);
PWM_setLoadMode_cmpA (PWMB、PWM_LoadMode_Zero);
PWM_setLoadMode_CMPB (PWMB、PWM_LoadMode_Zero);
PWM_setCmpA (PWMB、1000);//初始占空比
PWM_setCmpB (PWMB、1000);
//设置操作
PWM_setActionQual_CntUp_CmpA_PwmA (PWMB、PWM_ActionQual_set); //在事件 A 上设置 PWM2A、递增计数
PWM_setActionQual_CntDown_CmpA_PwmA (PWMB、PWM_ActionQual_clear);//在事件 A 上清除 PWM2A、递减计数
PWM_setActionQual_CntUp_CMPB_PwmB (PWMB、PWM_ActionQual_clear); //在事件 B 上设置 PWM2B、向上计数
PWM_setActionQual_CntDown_CMPB_PwmB (PWMB、PWM_ActionQual_set);//在事件 B 上清除 PWM2B、递减计数
//设置死区控制
PWM_setDeadBandOutputMode (PWMB、PWM_DeadBandOutputMode_EPWMxA_Rising EPWMxB_Falling);
PWM_setDeadBandPolarity (PWMB、PWM_DeadBandPolarity _EPWMxB_Inverted);
PWM_setDeadBandInputMode (PWMB、PWM_DeadBandInputMode_EPWMxA_rising_and_Falling);
PWM_setDeadBandRisingEdgeDelay (PWMB、死区时间_R);
PWM_setDeadBandFallingEdgeDelay (PWMB、DeadTime_F);
//---------------
///------------------------------------------------------------
//PWMC 初始化
CLK_enablePwmClock (myClk、PWM_NUMBER_3);
//设置 TBCLK
PWM_setCounterMode (PWMC、PWM_CounterMode_UpDown);//递增-递减计数
PWM_setPeriod (PWMC、EPWM1_TIMER_TBPRD);//设置定时器周期
PWM_enableCounterLoad (PWMC);
PWM_setPhaseDir (PWMC、PWM_PhaseDir_CountUp);
PWM_setSyncMode (PWMC、PWM_SyncMode_Disable);
PWM_setCount (PWMC、0x0000); //清除计数器
PWM_setClkDiv (PWMC、PWM_ClkDiv_BY_1);
PWM_setHighSpeedClkDiv (PWMC、PWM_HspClkDiv_BY_1); //时钟与 SYSCLKOUT 的比率
//设置隐藏
PWM_setShadowImage Mode_cmpA (PWMC、PWM_ShadowImage Mode_Shadow);
PWM_setShadowImage Mode_CMPB (PWMC、PWM_ShadowImage Mode_Shadow);
PWM_setLoadMode_cmpA (PWMC、PWM_LoadMode_Zero);
PWM_setLoadMode_CMPB (PWMC、PWM_LoadMode_Zero);
PWM_setCmpA (PWMC、1000);//初始占空比
PWM_setCmpB (PWMC、1000);
//设置操作
PWM_setActionQual_CntUp_CmpA_PwmA (PWMC、PWM_ActionQual_set); //在事件 A 上设置 PWM3A、递增计数
PWM_setActionQual_CntDown_CmpA_PwmA (PWMC、PWM_ActionQual_clear);//在事件 A 上清除 PWM3A、递减计数
PWM_setActionQual_CntUp_CMPB_PwmB (PWMC、PWM_ActionQual_clear); //在事件 B 上设置 PWM3B、递增计数
PWM_setActionQual_CntDown_CMPB_PwmB (PWMC、PWM_ActionQual_set);//在事件 B 上清除 PWM3B、递减计数
//设置死区控制
PWM_setDeadBandOutputMode (PWMC、PWM_DeadBandOutputMode_EPWMxA_Rising EPWMxB_Falling);
PWM_setDeadBandPolarity (PWMC、PWM_DeadBandPolarity _EPWMxB_Inverted);
PWM_setDeadBandInputMode (PWMC、PWM_DeadBandInputMode_EPWMxA_rising_and_Falling);
PWM_setDeadBandRisingEdgeDelay (PWMC、死区时间_R);
PWM_setDeadBandFallingEdgeDelay (PWMC、死区时间_F);
clk_enableTbClockSync (myClk);
}
//pie 设置
void PI_init ()
{
PIE_ENABLE (myPie);
EALLOW;
EDIS;
PI_registerPieIntHandler (myPie、PI_GroupNumber_1、PI_SubGroupNumber_7、(intVec_t)&CPU_timer0_ISR);
EDIS;
}
//Timer 设置
无效 timer0_init()
{
Timer_stop (myTimer0);
Timer_setPeriod (myTimer0、TTIMERREG);
Timer_setPrescaler (myTimer0、0);
Timer_reload (myTimer0);
Timer_setEmulationMode (myTimer0、timer_EmulationMode_StopAfterNextDecrement);
Timer_enableInt (myTimer0);
Timer_start (myTimer0);
/******** 启用 ADC 中断******** /
//清除 ADCINT1标志为下一个 SOC 重新初始化
ADC_clearIntFlag (myAdc、ADC_IntNumber_1);
//启用指定的 ADC 中断
PIE_enableAdcInt (myPie、ADC_IntNumber_1);
/******** 启用计时器中断******** /
//启用指定的中断编号
CPU_enableInt (myCpu、CPU_IntNumber_1);// CPU INT1、在 CPU 定时器0上触发
//启用指定的中断编号
// cpu_enableInt (myCpu、cpu_IntNumber_13);//在 CPU 定时器1上触发 CPU INT13
//启用 CPU 定时器0中断
PIE_enableTimer0Int (myPie);
//启用全局中断
cpu_enableGlobalInts (myCpu);
}
// ADC 初始化
void adc_init()
{
/****** 初始化 ADC ******** /
//启用 ADC 带隙电路
adc_enableBandGap (myAdc);
//启用 ADC 基准缓冲器电路
ADC_enableRefBuffers (myAdc);
//为 ADC 加电
ADC_POWERUP (myAdc);
//启用 ADC
ADC_ENABLE (myAdc);
//设置电压基准源
// ADCCTL1 - ADC_ADCCTL1_ADCREFSEL_BITS
ADC_setVoltRefSrc (myAdc、ADC_VoltageRefSrc_Int);
//清除 ADCINT1标志为下一个 SOC 重新初始化
ADC_clearIntFlag (myAdc、ADC_IntNumber_1);
//启用指定的 ADC 中断
PIE_enableAdcInt (myPie、ADC_IntNumber_1);
//启用 ADC 中断
ADC_enableInt (myAdc、ADC_IntNumber_1);
//设置中断脉冲生成模式
// ADCCTL1 - ADC_ADCCTL1_INTPULSEPOS_BITS
// param[in] adcHandle ADC 对象句柄
// param[in] pulseMode 脉冲生成模式
ADC_setIntPulseGenMode (myAdc、ADC_IntPulseGenMode_Prior); //ADCINT1在 AdcResults 锁存后跳闸
//启用 ADC 中断
// INTSELxNy - ADC_INTSELxNy_Inte_BITS
// param[in] adcHandle ADC 对象句柄
// param[in] intNumber 中断编号
ADC_enableInt (myAdc、ADC_IntNumber_1);
//设置中断模式
// INTSELxNy - ADC_INTSELxNy_INTCONT_Bits
// param[in] adcHandle ADC 对象句柄
// param[in] intNumber 中断编号
// param[in] intMode 中断模式
ADC_setIntMode (myAdc、ADC_IntNumber_1、ADC_IntMode_ClearFlag);//禁用 ADCINT1连续模式
//设置中断源
// INTSELxNy - ADC_INTSELxNy_INTSEL_BITS
// param[in] adcHandle ADC 对象句柄
// param[in] intNumber 中断编号
// param[in] intSrc 中断源
ADC_setIntSrc (myAdc、ADC_IntNumber_1、ADC_IntSrc_EOC3); //设置 EOC3以触发 ADCINT1
//设置转换开始(SOC)通道编号
// ADCSOCxCTL - ADC_ADCSOCxCTL_CHSEL_BITS
// param[in] adcHandle ADC 对象句柄
// param[in] socNumber SOC 编号
// param[in]通道编号通道编号
ADC_setSockChanNumber (myAdc、ADC_SockNumber_0、ADC_SockChanNumber_A0);//将 SOC0通道选择设置为 ADCINA0
ADC_setSockChanNumber (myAdc、ADC_SockNumber_1、ADC_SockChanNumber_A1);//将 SOC1通道选择设置为 ADCINA1
ADC_setSockChanNumber (myAdc、ADC_SockNumber_2、ADC_SockChanNumber_A2);//将 SOC2通道选择设置为 ADCINA2
ADC_setSockChanNumber (myAdc、ADC_SockNumber_3、ADC_SockChanNumber_A3);//将 SOC3通道选择设置为 ADCINA3
//设置转换开始(SOC)触发源
// ADCSOCxCTL - ADC_ADCSOCxCTL_TRIGSEL_BITS
// param[in] adcHandle ADC 对象句柄
// param[in] socNumber SOC 编号
// param[in]通道编号通道编号
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_0、ADC_SockTrigSrc_CpuTimer_0);//设置 CpuTimer_0上的 SOC0启动触发器、因为轮询 SOC0先转换、然后 SOC1
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_1、ADC_SockTrigSrc_CpuTimer_0);//在 CpuTimer_0上设置 SOC1启动触发器、因为轮询 SOC1先转换、然后再转换 SOC2
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_2、ADC_SockTrigSrc_CpuTimer_0);//设置 CpuTimer_0上的 SOC2启动触发器、因为轮询 SOC2先转换、然后再转换 SOC3
ADC_setSockTrigSrc (myAdc、ADC_SockNumber_3、ADC_SockTrigSrc_CpuTimer_0);//在 CpuTimer_0上设置 SOC4起始触发
//设置转换开始(SOC)采样延迟
// ADCSOCxCTL - ADC_ADCSOCxCTL_ACQPS_Bits
// param[in] adcHandle ADC 对象句柄
// param[in] socNumber SOC 编号
// param[in] samplpleDelay the sample delay
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_0、ADC_SockSampleWindow_7_cycles);//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_1、ADC_SockSampleWindow_7_cycles);//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_2、ADC_SockSampleWindow_7_cycles);//将 SOC2 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
ADC_setSockSampleWindow (myAdc、ADC_SockNumber_3、ADC_SockSampleWindow_7_cycles);//将 SOC3 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
/********* /
//等待 ADC 中断
while (1)
{
while (AdcRegs.ADCINTFlG.bit.ADCINT1 = 0){}//等待 ADCINT1跳闸
ADC0 = AdcResult.ADCRESULT0;
ADC1 = AdcResult.ADCRESULT1;
ADC2 = AdcResult.ADCRESULT2;
ADC3 = AdcResult.ADCRESULT3;
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 ADCINT1
//清除 ADCINT1标志为下一个 SOC 重新初始化
//ADC_clearIntFlag (myAdc、ADC_IntNumber_1);
}
}
void main()
{
setup_handles();
init_system();
GPIO_init();
pwma_init();
PI_init();
timer0_init ();
//启用 CPU 中断
CPU_enableInt (myCpu、CPU_IntNumber_1);
//启用 PIE 模块
PIE_enableTimer0Int (myPie)的 Timer0中断;
CPU_enableDebugInt (myCpu);
cpu_enableDebugInt (myCpu);
//永久查看 enableLoop;//查看 GlobalLoop;
{
}
}
中断 void cpu_timer0_isr (void)
{
mean =(ADC0 + ADC1 + ADC2)/3;
error = sp - mean;
integral = error + integral;
ma =(KP*error)+(ki*error)+(ki*integral);
update_compare ();
//确认此中断以接收来自组1
PI_clearint (myPIE、void 1)的更多中断
PWM_setCmpA (PWMA、_IQsat (_IQ30mpy ((sine_table[索引]+_IQ30 (0.9999)))/2、EPWM1_TIMER_TBPRD)、EPWM1_TIMER_TBPRD、0);
PWM_setcmpB (PWMA、_IQsat (_IQ30mpy ((sine_table[索引]+_IQ30 (0.9999)))/2、EPWM1_TIMER_TBPRD)、EPWM1_TIMER_TBPRD、0);
PWM_setCmpA (PWMB、_IQsat (_IQ30mpy ((sine_table[index2]+_IQ30 (0.9999)))/2、EPWM1_TIMER_TBPRD)、EPWM1_TIMER_TBPRD、0);
PWM_setcmpB (PWMB、_IQsat (_IQ30mpy ((sine_table[index2]+_IQ30 (0.9999)))/2、EPWM1_TIMER_TBPRD)、EPWM1_TIMER_TBPRD、0);
PWM_setCmpA (PWMC、_IQsat (_IQ30mpy ((sine_table[index3]+_IQ30 (0.9999)))/2、EPWM1_TIMER_TBPRD)、EPWM1_TIMER_TBPRD、0);
PWM_setCmpB (PWMC、_IQsat (_IQ30mpy ((sine_table[index3]+_IQ30 (0.9999)))/2、EPWM1_TIMER_TBPRD)、EPWM1_TIMER_TBPRD、0);
如果(index++>511)索引=0;
如果(index2++>511)索引2=0;
if (index3++>511) index3=0;
}//---------------