AD转换配置成PWM1H来触发中断,目前是采集INA0,INA1,INA2三个通道,分别对应电机的三个相电流,我用示波器看了电机相电流,基本上算是满意的正弦波,跑的是开环控制,但我AD转换出来,这个三个通道显示的值完全一样,变换也是同样的,不知道是哪里配置没有搞对
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;//连续转换模式从初始状态开始,对于SEQ1和级联模式从CONV00开始,SEQ2从CONV08开始
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;//使能在MAX CONVn设置的转换完成后环绕覆盖序列发生器转换结果
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;//双序列发生器模式,SEQ1和SEQ2作为两个8状态序列发生器操作
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0;//SEQ1每一个EOS结束都置位INT_SEQ1中断标志位
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;//使能SEQ1中断
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0;//关闭SEQ1软件触发
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;//使能EPWM1SOCA触发ADC
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 2;//设置最大转换通道数
//AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0;//SEQ2每一个EOS结束都置位INT_SEQ2中断标志位
//AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1;//使能SEQ2中断
//AdcRegs.ADCTRL2.bit.SOC_SEQ2 = 0;//关闭SEQ2软件触发
//AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ2 = 1;//使能EPWM1SOCA触发ADC
//AdcRegs.ADCTRL2.bit.RST_SEQ2 = 1;
//AdcRegs.ADCMAXCONV.bit.MAX_CONV2 = 0;//设置最大转换通道数
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//清除SEQ1中断标志位INT_SEQ1
AdcRegs.ADCST.bit.INT_SEQ2_CLR = 1;//清除SEQ2中断标志位INT_SEQ2
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0;//
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 2;
//AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 3;
//AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 4;
AdcRegs.ADCREFSEL.bit.REF_SEL = 0;//ADC参考电压,为内部参考
SysCtrlRegs.HISPCP.all = 1;//高速外设时钟预分频系数HISPCP
AdcRegs.ADCTRL3.bit.SMODE_SEL = 0;
AdcRegs.ADCTRL3.bit.ADCCLKPS = 4;//ADC核时钟分频器系数ADCCKLPS
AdcRegs.ADCTRL1.bit.CPS = 1;//ADC核预订标器系数CPS
AdcRegs.ADCTRL1.bit.ACQ_PS = 1;//采集窗口
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3;//ADC带隙电路和参考电路加电
//DELAY_US(100000);//延时10MS
AdcRegs.ADCTRL3.bit.ADCPWDN = 1;//ADC模块加电
DELAY_US(100000);
以上是AD模块的配置代码
//配置事件触发寄存器
EPwm1Regs.ETSEL.bit.SOCASEL = 2;//当TBCTR计数值为0时,启动ADC转换
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//使能EPWM1A脉冲触发ADC转换
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在第一个事件上生成EPWM1ASCOA脉冲
以上是PWM触发AD转换的代码,劳烦大家帮我看看是哪里的问题,谢谢了