发帖子主要在FOC在芯片具体实现过程中几点疑惑:
第一,程序中该变量不需要清理吗?
// Verifying the ISR
IsrTicker++;
第二,TI的官方例程中的软件结构不是太清楚,具体为:
interrupt void OffsetISR(void)
{
// Verifying the ISR
IsrTicker++;
// DC offset measurement for ADC
if (IsrTicker>=5000)
{ offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); //Phase A offset
offsetB= _IQmpy(K1,offsetB)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT2)); //Phase B offset
offsetC= _IQmpy(K1,offsetC)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT3)); //Phase C offset
}
if (IsrTicker > 20000)
{
EALLOW;
PieVectTable.ADCINT1=&MainISR; EDIS;
}
// Enable more interrupts from this timer
AdcRegs.ADCINTFLG.bit.ADCINT1=1;
// Acknowledge interrupt to recieve more interrupts from PIE group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
该中断函数和FOC运算的mainISR()这两个函数都是每次FOC运算时必须要进入的吗?
因为才接触TI的dsp芯片 其次没有找到关于原理介绍性的资料 所以还望做过的大神 予以解答
我目前认为是不是在每个PWM周期上溢处触发ADC中断 在变量IsrTicker > 20000时进入mainISR()进行FOC 运算
可是问题是变量IsrTicker不需要清零吗? 还是我的理解有误 还望各位网友答疑解惑 小弟不胜感激
Young Hu:
OffsetISR是计算通道的偏差的,计算完成以后切换到mainISR,不再进入OffsetISR了。
发帖子主要在FOC在芯片具体实现过程中几点疑惑:
第一,程序中该变量不需要清理吗?
// Verifying the ISR
IsrTicker++;
第二,TI的官方例程中的软件结构不是太清楚,具体为:
interrupt void OffsetISR(void)
{
// Verifying the ISR
IsrTicker++;
// DC offset measurement for ADC
if (IsrTicker>=5000)
{ offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); //Phase A offset
offsetB= _IQmpy(K1,offsetB)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT2)); //Phase B offset
offsetC= _IQmpy(K1,offsetC)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT3)); //Phase C offset
}
if (IsrTicker > 20000)
{
EALLOW;
PieVectTable.ADCINT1=&MainISR; EDIS;
}
// Enable more interrupts from this timer
AdcRegs.ADCINTFLG.bit.ADCINT1=1;
// Acknowledge interrupt to recieve more interrupts from PIE group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
该中断函数和FOC运算的mainISR()这两个函数都是每次FOC运算时必须要进入的吗?
因为才接触TI的dsp芯片 其次没有找到关于原理介绍性的资料 所以还望做过的大神 予以解答
我目前认为是不是在每个PWM周期上溢处触发ADC中断 在变量IsrTicker > 20000时进入mainISR()进行FOC 运算
可是问题是变量IsrTicker不需要清零吗? 还是我的理解有误 还望各位网友答疑解惑 小弟不胜感激
user4881649:
回复 Young Hu:
多谢 我帖子里第二个问题我周末想通了 现在主要的是程序中变量isrticker不需要清零吗?
该变量在以下中断中是为了切换到mainisr()中程序如下,此外在程序中有这样的一句话
// Enable more interrupts from this timerAdcRegs.ADCINTFLG.bit.ADCINT1=1;
不应该是AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Clear ADCINT1 flag reinitialize for next SOC 吗
interrupt void OffsetISR(void){// Verifying the ISR IsrTicker++; // DC offset measurement for ADC
if (IsrTicker>=5000) { offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); //Phase A offset offsetB= _IQmpy(K1,offsetB)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT2)); //Phase B offset offsetC= _IQmpy(K1,offsetC)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT3)); //Phase C offset }
if (IsrTicker > 20000) { EALLOW; PieVectTable.ADCINT1=&MainISR; EDIS; } // Enable more interrupts from this timer AdcRegs.ADCINTFLG.bit.ADCINT1=1; // Acknowledge interrupt to recieve more interrupts from PIE group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
问题是在mainisr中也有IsrTicker++操作 我就不明白 这句话是用来干嘛的
// MainISR interrupt void MainISR(void){
// Verifying the ISR IsrTicker++;
由于才接触DSP 而且才分析TI的源码 有的语句我看的不太懂 验证算法是可以 可是如果做项目的话 弄不清 还真不敢上手用 还望大神不吝赐教 小弟感激不尽
发帖子主要在FOC在芯片具体实现过程中几点疑惑:
第一,程序中该变量不需要清理吗?
// Verifying the ISR
IsrTicker++;
第二,TI的官方例程中的软件结构不是太清楚,具体为:
interrupt void OffsetISR(void)
{
// Verifying the ISR
IsrTicker++;
// DC offset measurement for ADC
if (IsrTicker>=5000)
{ offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); //Phase A offset
offsetB= _IQmpy(K1,offsetB)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT2)); //Phase B offset
offsetC= _IQmpy(K1,offsetC)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT3)); //Phase C offset
}
if (IsrTicker > 20000)
{
EALLOW;
PieVectTable.ADCINT1=&MainISR; EDIS;
}
// Enable more interrupts from this timer
AdcRegs.ADCINTFLG.bit.ADCINT1=1;
// Acknowledge interrupt to recieve more interrupts from PIE group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
该中断函数和FOC运算的mainISR()这两个函数都是每次FOC运算时必须要进入的吗?
因为才接触TI的dsp芯片 其次没有找到关于原理介绍性的资料 所以还望做过的大神 予以解答
我目前认为是不是在每个PWM周期上溢处触发ADC中断 在变量IsrTicker > 20000时进入mainISR()进行FOC 运算
可是问题是变量IsrTicker不需要清零吗? 还是我的理解有误 还望各位网友答疑解惑 小弟不胜感激
Eric Ma:
回复 user4881649:
这个IsrTicker 只是一个计数值,用来让你观察中断有一直在运行而已,不用清零,溢出自动清零。
ERIC
发帖子主要在FOC在芯片具体实现过程中几点疑惑:
第一,程序中该变量不需要清理吗?
// Verifying the ISR
IsrTicker++;
第二,TI的官方例程中的软件结构不是太清楚,具体为:
interrupt void OffsetISR(void)
{
// Verifying the ISR
IsrTicker++;
// DC offset measurement for ADC
if (IsrTicker>=5000)
{ offsetA= _IQmpy(K1,offsetA)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT1)); //Phase A offset
offsetB= _IQmpy(K1,offsetB)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT2)); //Phase B offset
offsetC= _IQmpy(K1,offsetC)+_IQmpy(K2,_IQ12toIQ(AdcResult.ADCRESULT3)); //Phase C offset
}
if (IsrTicker > 20000)
{
EALLOW;
PieVectTable.ADCINT1=&MainISR; EDIS;
}
// Enable more interrupts from this timer
AdcRegs.ADCINTFLG.bit.ADCINT1=1;
// Acknowledge interrupt to recieve more interrupts from PIE group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
该中断函数和FOC运算的mainISR()这两个函数都是每次FOC运算时必须要进入的吗?
因为才接触TI的dsp芯片 其次没有找到关于原理介绍性的资料 所以还望做过的大神 予以解答
我目前认为是不是在每个PWM周期上溢处触发ADC中断 在变量IsrTicker > 20000时进入mainISR()进行FOC 运算
可是问题是变量IsrTicker不需要清零吗? 还是我的理解有误 还望各位网友答疑解惑 小弟不胜感激
Rong Zhan:
你好,我刚刚开始用,TI的官方例程怎么找,我想找DSP2812 电机磁链观测的程序,,电流模型之类,,,怎么找呢