关于dsp2812的ccs3.3.中出现error: a void function may not return a value
关于2812dsp中的pid程序,error:avoidfunctionmaynotreturnavalue,不能输出adjust值,不知道改如何是好。我的偏差值是ek=...
关于2812dsp中的pid程序,error: a void function may not return a value,不能输出adjust值,不知道改如何是好。我的偏差值是ek=sina[i]-sinb[i];//标准值-采样值,采样值不是ad采样得来的,为了方便自己先假设了一个sinb函数表。
interrupt void T1PINT_ISR(void) // 通用定时器T1的周期中断
{
//变量初始化,根据实际情况初始化
float Kp=4;
float Ti=0.005;
float T=0.001;
float Td=0.0002;
float a0=5.6;
float a1=5.6;
float a2=0.8;
// Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数
float ek=0;
float ek1=0;
float ek2=0;
float uk=0;
int uk1=0;
int adjust=0;
int i=0;
ek=sina[i]-sinb[i];//标准值-采样值
if(ek<0.1) //ee 为误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡。ee的值可自己设
{
adjust=0;
}
else
{
uk=a0*ek+a1*ek1+a2*ek2;
ek2=ek1;
ek1=ek;
uk1=(int)uk;
if(uk>0)
{
if(uk-uk1>=0.5)
{
uk1=uk1+1;
}
}
if(uk<0)
{
if(uk1-uk>=0.5)
{
uk1=uk1-1;
}
}
adjust=uk1;
}
return adjust;
sina[i]=sina[i]- adjust;
if((i>=0)&&(i<N/2)) //前半周期
{
EvaRegs.CMPR1=EvaRegs.T1PR*((1.0+M*sina[i])/2.0); //A相
}
if((i>=N/2)&&(i<N)) //后半周期
{
EvaRegs.CMPR1=EvaRegs.T1PR*((1.0-M*sina[i-30])/2.0); //A相
}
i++;
{
if(i>=N)
{
i=0;
}
}
PieCtrl.PIEACK.bit.ACK2=1; //响应同组中断
EvaRegs.EVAIFRA.bit.T1PINT=1;//清除中断标志位
EINT; //开全局中断
} 展开
interrupt void T1PINT_ISR(void) // 通用定时器T1的周期中断
{
//变量初始化,根据实际情况初始化
float Kp=4;
float Ti=0.005;
float T=0.001;
float Td=0.0002;
float a0=5.6;
float a1=5.6;
float a2=0.8;
// Ki=KpT/Ti=0.8,微分系数Kd=KpTd/T=0.8,Td=0.0002,根据实验调得的结果确定这些参数
float ek=0;
float ek1=0;
float ek2=0;
float uk=0;
int uk1=0;
int adjust=0;
int i=0;
ek=sina[i]-sinb[i];//标准值-采样值
if(ek<0.1) //ee 为误差的阀值,小于这个数值的时候,不做PID调整,避免误差较小时频繁调节引起震荡。ee的值可自己设
{
adjust=0;
}
else
{
uk=a0*ek+a1*ek1+a2*ek2;
ek2=ek1;
ek1=ek;
uk1=(int)uk;
if(uk>0)
{
if(uk-uk1>=0.5)
{
uk1=uk1+1;
}
}
if(uk<0)
{
if(uk1-uk>=0.5)
{
uk1=uk1-1;
}
}
adjust=uk1;
}
return adjust;
sina[i]=sina[i]- adjust;
if((i>=0)&&(i<N/2)) //前半周期
{
EvaRegs.CMPR1=EvaRegs.T1PR*((1.0+M*sina[i])/2.0); //A相
}
if((i>=N/2)&&(i<N)) //后半周期
{
EvaRegs.CMPR1=EvaRegs.T1PR*((1.0-M*sina[i-30])/2.0); //A相
}
i++;
{
if(i>=N)
{
i=0;
}
}
PieCtrl.PIEACK.bit.ACK2=1; //响应同组中断
EvaRegs.EVAIFRA.bit.T1PINT=1;//清除中断标志位
EINT; //开全局中断
} 展开
1个回答
易捷测试
2024-10-23 广告
2024-10-23 广告
load pull的简单原理是使用一个叫tuner的东西,可理论模拟任意阻抗的负载,(你可以把tuner想像成一个一段并联传输线和一段串联传输线的组合器件,而传输线的长度和阻抗都是可调的,那么通过调节即可遍历smith原图的任意位置)实际测...
点击进入详情页
本回答由易捷测试提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询