小弟初学DSP,所以选择这款初学入门,看了官网有关AD的例程基本都是PWM触发或者是ADC1触发,还有是强制转换,感觉很乱,以为有的场合在ADC采样的时候是不能影响到PWM的工作,我单次转换,专为ADC写了一个采样函数带参数的,如果调用这个函数则相对的AD进行采样工作,而且不产生中断,在ADC触发的时候PWM就受到了影响,请教一下社区
1:我是否可以修改中断向量表,把PWM设置为较高于ADC的中断优先级别:如果可以 如何修改向量表?
2:如果我不适用中断时AD如何适用?
以下是我采样函数,当AD不停采样时PWM波形收到严重影响,如果我延时一段时间采样发现是AD工作时造成的!
unsigned int ADC(unsigned char channel)
{ unsigned char i;
unsigned int jieguo=0;
switch(channel)
{
case 0: AdcRegs.ADCSOC0CTL.bit.CHSEL=0x00; break; //set SOC1 channel select to ADCINA2
case 1: AdcRegs.ADCSOC1CTL.bit.CHSEL=0x01; break;
case 2: AdcRegs.ADCSOC2CTL.bit.CHSEL=0x02; break;
case 3: AdcRegs.ADCSOC3CTL.bit.CHSEL=0x03; break;
default:break;
}
AdcRegs.ADCSOCFRC1.all= 0X0F;//软件强制转换SOC0及SOC1;
for(i=0;i<100;i++); // 延时一段时间,
while( AdcRegs.ADCCTL1.bit.ADCBSY==0){}
Hank Zhao:
1,c2000的中断向量表是固定的,不能修改。2,ADC模块和PWM模块是相互独立的,它们之间不会相互干扰,检查一下看是否是在外部电路中相互干扰造成的。
jinli pan:
回复 Hank Zhao:
仔细检查了好几天了,其他中断一个都没有开,只是开了PWM中断,SOC触发ADC,触发时严重影响到PWM,如果程序中加入延时一段时间触发ADC很明显PWM产生很大的毛刺,波形严重变形,我想主要是ADC1中断优先级比PWM的高,但是看中断向量表分到第10组,问题依旧,还请TI工程师帮忙分析一下这个到底是怎么回事,调了很长时间了,之前用PIC的DSPIC没有遇到这种问题过,
jinli pan:
回复 Hank Zhao:
关闭所有ADC中断最终还是会这种问题,最后发现是在进行浮点运算时导致的问题,请问一下28027运行浮点运算会打断中断吗?其应用是将采样回来的AD值进行运算反馈给占空比寄存器
读取AD值:AD1 = AdcResult.ADCRESULT0;计算占空比:D_max=(float )(AD1/4090);//就是运行这句时PWM产生了毛刺!
PWM运行时 :
EPwm4Regs.CMPA.half.CMPA =(unsigned int)(1000*D_max);
请教一下,浮点运算时需要注意什么还是只能使用浮点型28035
Hank Zhao:
回复 jinli pan:
检查一下在程序运行中D_max的值是多少,浮点运算不是一定要用带浮点单元的芯片,编译器会自动进行编译的,而且TI还提供有IQmath以便于用定点DSP进行浮点运算。