求一个C语言的算法,最近脑袋不够用了。

2020-01-25 15:33发布

本帖最后由 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楼更新了我找到的一个工程师写的代码,但是不同的编译环境执行的结果大相径庭啊,大家帮忙出个主意吧
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
hck2llj
1楼-- · 2020-01-25 20:49
 精彩回答 2  元偷偷看……
hck2llj
2楼-- · 2020-01-25 22:44
我看到一个工程师写的是这样子的,他用得成功了,但是我移植过来,总是达不到我要的效果。
unsigned long current_value;    // 逐次逼近值
unsigned long target_value;      // 目标值

void opera()
{
       if( time_3ms_ok ) // 3ms时间到
       {
              time_3ms_ok = 0;
              current_value = current_value - (unsigned int)(*((unsigned int *)&current_value ))  * 0x300L + target_value * 0x300L ;
       }
}
albert_w
3楼-- · 2020-01-25 23:04
这就是比例控制吧
y595906642
4楼-- · 2020-01-26 04:46
就是PID控制里面 只用到了P 控制周期3ms
current_value =  target_value*p2 -  current_value * p1;
hck2llj
5楼-- · 2020-01-26 08:42
y595906642 发表于 2013-11-22 15:17
就是PID控制里面 只用到了P 控制周期3ms
current_value =  target_value*p2 -  current_value * p1; ...

是很像,但是又不完全是。我看到的应用是这个样子的:
unsigned long a;//当前值
unsigned long b;//目标值
a = a - (unsigned int)(*(( unsigned int *)&a))*0x300L + b *0x300L;

这个句子每3ms执行一次,一通计算下来,a总能无限逼近b。
你所说的p1,这个值一直在变化。这个难道是模糊PID?
关于以后
6楼-- · 2020-01-26 11:35
 精彩回答 2  元偷偷看……

一周热门 更多>