本帖最后由 hck2llj 于 2013-11-22 16:17 编辑
如题,大概是这样的:
1、定义一个目标值 unsigned long target_value;
2、还有一个逐次逼近的值 unsigned long current_value;
===============================================
我希望的效果是,
当目标值target_value确定以后,
逐次逼近的值current_value从最大值FFFF_FFFFH以3ms的时间间隔逐次逼近target_value(即current_value的值3ms改变一次)。
一开始current_value的变化可以大点,但是随着它的值越来越靠近target_value,它的变化也越来越小。
而且current_value的值最终会与target_value相等。
多谢大家的关注,诚心求指导。
10楼更新了我找到的一个工程师写的代码,但是不同的编译环境执行的结果大相径庭啊,大家帮忙出个主意吧
给楼主一个温控例子:
(注意这里面全是有符号数)
void pid(void)
{
static S16 err1,err2;
S16 err0,add;
err0=Ts-Tr;//设定值减实际值
add=Pid_p*(err0-err1)+Pid_i*err0+Pid_d*((err0-err1)-(err1-err2));//计算输出的增量
Iout=Iout+add;//改变加热器的输出电流
err2=err1;
err1=err0;//保存本次误差
}
当Pid_p=Pid_d=0,Pid_i=0x300L,与楼主的程序有相似之处,但是楼主的程序中缺了输出量
一周热门 更多>