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.

[参考译文] TMS320F28379D:在每个周期中的特定事件上启用跳闸区域并再次清除

Guru**** 2595805 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1120869/tms320f28379d-enable-trip-zone-at-a-particular-event-in-each-cycle-and-clear-again

器件型号:TMS320F28379D

尊敬的 TI 成员:

我尝试仅在检测到 ADC 并从 ADC 读取的输入交流电压的过零处实现跳闸区域。 如果 Vin (输入交流电压)介于-3<Vin<3、则使用 TZ 强制 PWM 信号为低电平、如果 Vin>3或 Vin<-3、则 PWM 信号应继续常规 PWM 操作。 为了实现这一点、我使用了以下代码、

中断 void adca1_ISR (void)

random=random+1;
if (random=2048)
random=0;


VIN[2]=(0.1690*(AdcaResultRegs.ADCRESULT3)-348);//调节感测到的电压

if (Vin[2]>3)(输入电压[2]>3)

D_八分之一= 0;
D_80B = 500;
DIS=0;

if (Vin[2]<-3)

D_八分 线 A = 500;
D_80B = 0;
DIS=0;

if ((-3<=Vin[2])&&(Vin[2]<=3))

DIS = 1;
EALLOW;
EPwm8Regs.TZCTL.bit.TZA = TZ_FORCE_LO;
EPwm8Regs.TZCTL.bit.TSB = TZ_FORCE_LO;
EDIS;


其他

DIS = 0;

EPwm8Regs.CMPA.bit.CMPA = d_eutA;
EPwm8Regs.CMPB.bit.CMPB = d_eutb;

AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志
PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

空配置 ADC (空)

EALLOW;

//写入配置
//
AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);

//
//将脉冲位置设置为晚期
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1;

//
//为 ADC 加电
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;

//
//延迟1ms 以允许 ADC 加电时间
//
DELAY_US (1000);

EDIS;

void SetupADCepwm (uint16通道)

uint16 acqps;

//
//根据分辨率确定最小采集窗口(在 SYSCLKS 中)
//
if (adc_resolution_12bit = AdcaRegs.ADCCTL2.bit.resolution)

acqps = 14;//75ns

否则、//分辨率为16位

acqps = 63;//320ns

//
//选择要转换的通道和转换结束标志
//
EALLOW;
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;//SOC3将转换引脚 A3
AdcaRegs.ADCSOC2CTL.bit.ACQPS = acqps;//采样窗口为100个 SYSCLK 周期
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 3;// SOC0结束将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;
//AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
//AdcaRegs.ADCINTSEL1N2.bit.INT1CONT = 1;//启用 INT1标志

EDIS;

 空 InitEPwm8Examples()

EPwm8Regs.TBPRD = 500;//设置定时器周期
EPwm8Regs.TBPHS.bit.TBPHS = 0;//相位为0
EPwm8Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm8Regs.TBCTR = 0x0000;//清除计数器

//
//设置 TBCLK
//
EPwm8Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
EPwm8Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
EPwm8Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm8Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm8Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
EPwm8Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm8Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm8Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

EPwm8Regs.AQCTLA.bit.CAD = AQ_CLEAR;//将 PWM1A 设置为零
EPwm8Regs.AQCTLA.bit.CAU= AQ_SET;

EPwm8Regs.AQCTLB.bit.CBD = AQ_CLEAR;//将 PWM1A 设置为零
EPwm8Regs.AQCTLB.bit.CBU = AQ_SET;

中断空 RESET_ISR (空)

EALLOW;
如果(dis = 1)
EPwm8Regs.TZFRC.bit.CBC = 1;
其他
EPwm8Regs.TZCLR.bit.CBC = 1;
EDIS;

我使用的上述代码使所有 ePWM 信号变为低电平、但当输入电压大于3V 或小于-3V 时、无法使它们正常运行。 所需的 PWM 应该是这样的、

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

    您好 Naveed、

    以下代码可放置在 ePWM 初始化中。 这只是为了设置当跳闸发生时 EPWM 将采取的操作。

    EPwm8Regs.TZCTL.bit.TZA = TZ_FORCE_LO;
    EPwm8Regs.TZCTL.bit.TSB = TZ_FORCE_LO;

    [引用 userid="528083" URL"~/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1120869/tms320f28379d-enable-trip 区域-it-a-partical-event-ine-cycle-and-clear-again"]当我使用的上述代码使它们在 Vpwm 中运行的电压小于3V 或大于3V 时无法正常运行电压时,但无法使其正常运行。]

    我注意 到、您设置的比较值与 d_八分之一 A 和 d_八分 B 的值始终为500或0。 我认为您可能会看到基于此的冲突行动限定符事件。 请尝试将比较值固定为 PRD 或 ZRO 以外的值、以确保您的跳闸逻辑正常工作、然后我们可以查看您的比较值。  

    此致、

    Marlyn