📄 epower_28x_interrupt.c.bak
字号:
samplen ++;
samplen_temp = 1;
}
}
else // 其他点开始采集插值程序
{
phaze = 0;
adcdata_time[timen] = adcdata_timef - adcdata_time[timen];
if(adcdata_time[timen] < realtime)
{
if((samplen == 0)||(samplen == 64)||(samplen == 128)||(samplen == 192))
{
if(dcyc > (cyclen/2)) dcyc --;
else if(dcyc < (cyclen/2)) dcyc ++;
}
samplen_temp = 0;
//插入其它程序30uS以内完成
}
else
{
if(adcdata_time[timen] == realtime)
{
adcdata_ua[samplen] = adc_ua[tempn];
adcdata_ub[samplen] = adc_ub[tempn];
adcdata_uc[samplen] = adc_uc[tempn];
adcdata_ia[samplen] = adc_ia[tempn];
adcdata_ib[samplen] = adc_ib[tempn];
adcdata_ic[samplen] = adc_ic[tempn];
}
else
{
time1 = realtime - adcdata_time[timen - 1];
time2 = adcdata_time[timen] - adcdata_time[timen - 1];
if(tempn == 0) tempn_1 = 1;
else tempn_1 = 0;
adcdata_ua[samplen] = (adc_ua[tempn] - adc_ua[tempn_1])*time1/time2 + adc_ua[tempn_1];
adcdata_ub[samplen] = (adc_ub[tempn] - adc_ub[tempn_1])*time1/time2 + adc_ub[tempn_1];
adcdata_uc[samplen] = (adc_uc[tempn] - adc_uc[tempn_1])*time1/time2 + adc_uc[tempn_1];
adcdata_ia[samplen] = (adc_ia[tempn] - adc_ia[tempn_1])*time1/time2 + adc_ia[tempn_1];
adcdata_ib[samplen] = (adc_ib[tempn] - adc_ib[tempn_1])*time1/time2 + adc_ib[tempn_1];
adcdata_ic[samplen] = (adc_ic[tempn] - adc_ic[tempn_1])*time1/time2 + adc_ic[tempn_1];
}
realtime += dcyc;
samplen_temp = 1;
samplen ++;
}
}
}
/* 实时插值程序 */
if(sample_cap == 1)
// 仅捕获一次,CAPB捕获下降沿,开始插值
{
samplen = samplen_1;
adcdata_ua[samplen] = adc_ua[tempn];
adcdata_ub[samplen] = adc_ub[tempn];
adcdata_uc[samplen] = adc_uc[tempn];
adcdata_ia[samplen] = adc_ia[tempn];
adcdata_ib[samplen] = adc_ib[tempn];
adcdata_ic[samplen] = adc_ic[tempn];
time_temp = ReadCpuTimer0Counter();
time_temp = adcdata_time[timen] - time_temp;
ReloadCpuTimer0();
StartCpuTimer0();
adcdata_timef = ReadCpuTimer0Counter() + time_temp;
timen = 0;
adcdata_time[timen] = 0;
realtime = dcyc;
samplen_temp = 1;
samplen ++;
sample_cap = 0;
sampleflag = 1;
}
/* 纠正串扰程序 */
if((McbspaRegs.MFFRX.bit.RXFFST != 0)&&(McbspaRegs.MFFRX.bit.RXFFST != 6))
{
if(tempn == 0)
{
adc_ua[0] = adc_ua[1];
adc_ub[0] = adc_ub[1];
adc_uc[0] = adc_uc[1];
adc_ia[0] = adc_ia[1];
adc_ib[0] = adc_ib[1];
adc_ic[0] = adc_ic[1];
}
else
{
adc_ua[1] = adc_ua[0];
adc_ub[1] = adc_ub[0];
adc_uc[1] = adc_uc[0];
adc_ia[1] = adc_ia[0];
adc_ib[1] = adc_ib[0];
adc_ic[1] = adc_ic[0];
}
if(samplen_temp == 1)
{
if(tempn == 0) tempn_1 = 255;
else tempn_1 = samplen - 1;
if(tempn == 0)
{
adcdata_ua[tempn_1] = adc_ua[1];
adcdata_ub[tempn_1] = adc_ub[1];
adcdata_uc[tempn_1] = adc_uc[1];
adcdata_ia[tempn_1] = adc_ia[1];
adcdata_ib[tempn_1] = adc_ib[1];
adcdata_ic[tempn_1] = adc_ic[1];
}
else
{
adcdata_ua[tempn_1] = adc_ua[0];
adcdata_ub[tempn_1] = adc_ub[0];
adcdata_uc[tempn_1] = adc_uc[0];
adcdata_ia[tempn_1] = adc_ia[0];
adcdata_ib[tempn_1] = adc_ib[0];
adcdata_ic[tempn_1] = adc_ic[0];
}
}
McbspaRegs.MFFRX.bit.RXFIFO_RESET = 0; // Reset Receive channel
McbspaRegs.MFFRX.bit.RXFIFO_RESET = 1; // Enable Receive channel
}
/* 纠正串扰程序结束 */
timen ++;
tempn ++;
if(tempn == 2) tempn =0;
if(samplen == 256 ) samplen = 0;
/* 零点时修正程序段 */
/* if((samplen == 129)&&(samplen_temp == 1)) // 下降沿时修正
{
if((xxua_old > 0)&&(xxua > 0)) // 采样慢修正
{
if(samplen_1 == 0) samplen_1 = 255;
else samplen_1 --; // 对于起始取值数修正
}
else
{
if((xxua_old < 0)&&(xxua < 0)) // 采样快修正
{
if(samplen_1 == 255) samplen_1 = 0;
else samplen_1 ++; // 对于起始取值数修正
}
}
}
// 下降沿修正结束
if((samplen == 2)&&(samplen_temp == 1)) // 上降沿时修正
{
if((xxua_old < 0)&&(xxua < 0)) // 采样慢修正
{
if(samplen_1 == 0) samplen_1 = 255;
else samplen_1 --; // 对于起始取值数修正
}
if((samplen == 0)&&(samplen_temp == 1))
{
if((xxua_old > 0)&&(xxua > 0)) // 采样快修正
{
if(samplen_1 == 255) samplen_1 = 0;
else samplen_1 ++; // 对于起始取值数修正
}
}*/ // 上降沿修正结束
/* 零点修正程序段结束 */
if((fftflag == 0)&&(fftstart == 0)&&(phaze == 1))
{
fftstart = 1;
}
phaze =0;
/* 取FFT运算所需的数组 */
if(fftstart == 1)
{
if(fftn == 0)
{
if(arc_temp > up_t_old) arc_temp -= up_t_old;
else arc_temp = 65536 + arc_temp - up_t_old;
arc = arc_temp;
if(samplen == 0)
{
fftdata_ua[0] = adcdata_ua[255];
fftdata_ub[0] = adcdata_ub[255];
fftdata_uc[0] = adcdata_uc[255];
fftdata_ia[0] = adcdata_ia[255];
fftdata_ib[0] = adcdata_ib[255];
fftdata_ic[0] = adcdata_ic[255];
}
else
{
fftdata_ua[0] = adcdata_ua[samplen - 1];
fftdata_ub[0] = adcdata_ub[samplen - 1];
fftdata_uc[0] = adcdata_uc[samplen - 1];
fftdata_ia[0] = adcdata_ia[samplen - 1];
fftdata_ib[0] = adcdata_ib[samplen - 1];
fftdata_ic[0] = adcdata_ic[samplen - 1];
}
samplen_2 = samplen;
fftn++;
}
else
{
if(samplen != samplen_2)
{
if(samplen == 0)
{
fftdata_ua[fftn] = adcdata_ua[255];
fftdata_ub[fftn] = adcdata_ub[255];
fftdata_uc[fftn] = adcdata_uc[255];
fftdata_ia[fftn] = adcdata_ia[255];
fftdata_ib[fftn] = adcdata_ib[255];
fftdata_ic[fftn] = adcdata_ic[255];
}
else
{
fftdata_ua[fftn] = adcdata_ua[samplen - 1];
fftdata_ub[fftn] = adcdata_ub[samplen - 1];
fftdata_uc[fftn] = adcdata_uc[samplen - 1];
fftdata_ia[fftn] = adcdata_ia[samplen - 1];
fftdata_ib[fftn] = adcdata_ib[samplen - 1];
fftdata_ic[fftn] = adcdata_ic[samplen - 1];
}
samplen_2 = samplen;
fftn++;
}
}
}
if(fftn == 1024)
{
fftflag = 1;
fftstart = 0;
fftn = 0;
}
/* 取FFT运算所需数组结束 */
if((samplen == samplen_1)&&(samplen_temp == 1))
{
for(i=0;i<6;i++) z_ui[i] = sum_ui[i]/256;
for(i=0;i<6;i++) sum_ui[i] = 0;
}
}
xxua_old = xxua;
McbspaRegs.MFFRX.bit.RXFFOVF_CLEAR=1; // Clear Overflow flag
McbspaRegs.MFFRX.bit.RXFFINT_CLEAR=1; // Clear Interrupt flag
PieCtrlRegs.PIEACK.all|=0x20; // Issue PIE ACK
GpioDataRegs.GPBDAT.bit.GPIOB15 = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -