Haawking DSC28027实例程序开发教程——ADC_PWM_INT
中科昊芯
2021年11月17日 17:02
收录于文集
共36篇

导语:

ADC采样的触发采样方式很多:定时器、外部中断、ePWM、EOC等。而在电机控制中ADC采样时刻的选择直接影响电流重构的精度,利用ePWM丰富的SOC功能,可以方便利用控制周期,选择ADC采样点。本期我们做一个ePWM_ADC例程,利用PWM的PRD事件触发ADC采样,ADC采样结束后进入ADC中断。

ePWM_ADC时序如下图:

其中ePWM采用up-down三角计数模式,CAU时置高,CAD时置低。当TBCTR=TBPRD时产生SOCA信号触发ADC采样,采样后EOC触发中断。

本程序继续中科昊芯Core_DSC28027核心板,相关资料可以在中科昊芯官网下载

http://www.haawking.cn/kfb

运行效果:

其中CH1为中断运行时间,CH2为ePWM1输出。

例程主要代码:

代码块
clike
自动换行
复制代码
//
// 主函数:
//
int main(void)
{

  //
  // Step 1. Initialize System Control:
  //
  InitSysCtrl();     //120Mhz

  //
  // Step 2. Initialize GPIO:
  //
  GpioConfig();

  //
  // Step 3. Clear all interrupts and initialize PIE vector table:
  //
  DINT;

  InitPieCtrl();

  IER = 0x0000;
  IFR = 0X0000;

  InitPieVectTable();

  EALLOW;
  PieVectTable.ADCINT1 = &AdcIsr;
  EDIS;

  //
  // Step 4. Initialize all the Device Peripherals:
  //
  ePwmConfig();
  AdcConfig();

  PieCtrlRegs.PIEIER1.bit.INTx1 = 1;
  IER |= M_INT1;
  EINT;
  ERTM;

  while(1)
  {

  }

  return 0;
}

//
// ADC中断函数:
//
__interrupt void AdcIsr()
{
  GpioDataRegs.GPASET.bit.GPIO2 = 1;
  AdcCount ++;
  DELAY_US(1);
  AdcNum = AdcResult.ADCRESULT0;
  GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;

  AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
  AdcRegs.ADCINTOVFCLR.bit.ADCINT1 = 1;
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

//
// ePWM配置函数
//
void ePwmConfig()
{
  EALLOW;
  GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;
  GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;
  EDIS;

  EALLOW;
  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;

  EPwm1Regs.TBCTL.bit.SYNCOSEL  = 0;
  EPwm1Regs.TBCTL.bit.PHSEN     = 1;
  EPwm1Regs.TBPHS.half.TBPHS     = 0;
  EPwm1Regs.TBCTL.bit.CTRMODE   = 2;  //向上向下计数模式设置为CTR的计数方式  2
  EPwm1Regs.TBCTL.bit.PHSEN     = 0;
  EPwm1Regs.TBCTL.bit.HSPCLKDIV   = 0;
  EPwm1Regs.TBCTL.bit.CLKDIV     = 0;
  EPwm1Regs.TBCTL.bit.FREE_SOFT   = 1;
  EPwm1Regs.TBPRD = 1200;

  EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
  EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
  EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
  EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

  EPwm1Regs.CMPA.half.CMPA =600;
  EPwm1Regs.CMPB = 600;

  EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
  EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
  EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;
  EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;

  EPwm1Regs.TZSEL.bit.CBC6   = 1;
  EPwm1Regs.TZCTL.bit.TZA   = 2;
  EPwm1Regs.TZCTL.bit.TZB   = 2;

  EPwm1Regs.ETSEL.bit.SOCAEN   = 1;
  EPwm1Regs.ETSEL.bit.SOCASEL = 2;
  EPwm1Regs.ETPS.bit.SOCAPRD   = 1;
  EPwm1Regs.ETCLR.bit.SOCA   = 1;

  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
  EDIS;
}

//
// ADC配置函数:
//
void AdcConfig()
{
  InitAdc();
  EALLOW;
  AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1;
  AdcRegs.ADCSAMPLEMODE.all=0;
  AdcRegs.ADCCTL1.bit.INTPULSEPOS=1;    //中断脉冲产生:在ADC转换结果产生之后
  AdcRegs.ADCSOC0CTL.bit.CHSEL=1;
  AdcRegs.ADCSOC0CTL.bit.TRIGSEL=5;
  AdcRegs.ADCSOC0CTL.bit.ACQPS=6;
  AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1;
  AdcRegs.INTSEL1N2.bit.INT1CONT=1;
  AdcRegs.INTSEL1N2.bit.INT1SEL=0;     //EOC1 TRIG
  AdcRegs.INTSEL1N2.bit.INT1E=1;
  EDIS;
}
复制成功


关于中科昊芯

“智由芯生 创享未来”,中科昊芯是数字信号处理器专业供应商。作为中国科学院科技成果转化企业,瞄准国际前沿芯片设计技术,依托多年积累的雄厚技术实力及对产业链的理解,以开放积极的心态,基于开源指令集架构RISC-V,打造多个系列数字信号处理器产品,并构建完善的处理器产品生态系统。产品具有广阔的市场前景,可广泛应用于数字信号处理、工业控制及电机驱动、数字电源、消费电子、白色家电等领域。