#ifdef BIPOLAR//
//看看混合衰减如何产生
if(uGF.currentControlLoop == OFF && uGF.decayMode == ALTERNATE_DECAY)//OFF的话,不用PI控制模式,如果设定为混合衰减的话,执行
{
stepChangeRate = stepAmplitudeRef1*(1-2*setDir1)-stepAmplitudeRef1temp*(1-2*setDir1temp);//设置爬坡率,比如高细分当然爬的少
if(stepChangeRate > 0) //旧的值减去新的值大于0,则表示电流在衰减。
{
stepChangeDecayNumber1 = stepChangeRate>>altDecayScale;//快衰减的周期计算
if(stepChangeDecayNumber1>0) //当然大于0,电流衰减
{
if(stepAmplitudeRef1temp == 0)
stepChangeDecayNumber1 = 32767;//如果是衰减到0,也就是衰减的最后一梯,则尽快衰减
decay1 = alternateDecay; //因为是电流的下降,所以要用快衰减
stepChangeDecayCounter1 = 1; //衰减计数用来开始计,在ADC程序里面有用到此参数
}
}
else //如果电流是爬升阶段。
{
stepChangeDecayNumber1 = 0;
decay1 = baseDecay; //默认的电流衰减模式为慢衰减
}
//下面计算第二轴,计算方法相同
stepChangeRate = stepAmplitudeRef2*(1-2*setDir2)-stepAmplitudeRef2temp*(1-2*setDir2temp);
if(stepChangeRate > 0)
{
stepChangeDecayNumber2 = stepChangeRate>>altDecayScale;
if(stepChangeDecayNumber2>0)
{
if(stepAmplitudeRef2temp == 0)
stepChangeDecayNumber2 = 32767;
decay2 = alternateDecay;
stepChangeDecayCounter2 = 1;
}
}
else
{
stepChangeDecayNumber2 = 0;
decay2 = baseDecay;
}
}
else //如没有设置为混合衰减,则默认为慢衰减
{
decay1 = baseDecay;
decay2 = baseDecay;
}
#endif //#ifdef BIPOLAR
//先关掉AD,先赋值完成再打开
IEC0bits.AD1IE = 0; //关AD
//把上面计算结果保存到全局变量
voltageOut1 = voltageOut1temp;
voltageOut2 = voltageOut2temp;
stepAmplitudeRef1 = stepAmplitudeRef1temp;
stepAmplitudeRef2 = stepAmplitudeRef2temp;
//如果采用了PI控制模式,则不需要设定参考值和方向,如果是衰减模式,则把方向值赋值给全局变量。
if(uGF.currentControlLoop == OFF)
{
setDir1=setDir1temp;
setDir2=setDir2temp;
//并根据上面设置的值来计算衰减。此函数看后面的内容。
CalcDecay();
}
//再把AD打开。
IEC0bits.AD1IE = 1;
}
文章评论(0条评论)
登录后参与讨论