|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
请教一下这个程序最后通过D/A脚输出的精度是多少啊?uk在这次运算中的精度会和从A/D进来的数值精度一样吗?
int PID(float A,float B,float C) //PID增量算法
{
float ek,UVGA;
uint32 ADC_data;//,R0,R1;
float ck,rk,uk;
while(1)
{
AD0CR=0x01200004; //4表示采样管脚选择AD0.2,2表示处于正常工作模式,1表示立即启动转换
while((AD0DR &(0x80000000))==0); //等待转换结束
ADC_data=(AD0DR>>6)&0x000003FF;
Pindet=((ADC_data*1500)/1024);
ck=Pindet;
rk=Pstepin;
ek=rk-ck;
uk=A*(ek-e1)+B*ek+C*(ek-2*e1+e2); //uk=d0*ek+d1*e1+d2*e2;
uk=uk+cz;
e2=e1;
e1=ek; //此处视情况可能需要加延时程序
cz=uk;
DACR=((int)(uk*1024/1500))<<6;
cz=uk;
}
} |
|