找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1670|回复: 3
收起左侧

关于PID算法程序参数理解的疑问

[复制链接]
ID:771581 发表于 2020-6-7 13:19 | 显示全部楼层 |阅读模式
最近在看PID相关文档时,一直想不明白一个问题,希望论坛的朋友帮帮忙。

使用PID算法计算出来的结果,与控制量怎么联系起来?
比如我用PWM控制无刷电机,目前是控制在1万转,引用PID算法计算出来一个变量PID_output,控制PWM的占空比用PWM_value写入单片机寄存器,这两个变量怎么关联起来呢?

我看别人的程序是这样的
if (PID_output > PWM_max)
     PWM_value = PWM_max;
else if (PID_output < 0)
     PWM_value = 0;
else
     PWM_value = PID_output;

为什么PWM_value = PID_output呢,我不理解是因为PWM_value是有范围的,比如0~1024,而PID_output 可能很大或很小,与PID参数和目标值1万转等有关,那计算结果PID_output可能会一直是很大的值或负数,远远超出PWM_value的范围。

回复

使用道具 举报

ID:123289 发表于 2020-6-8 10:50 | 显示全部楼层
PID算法计算出来一个变量PID_output,不是一个定值,它是会变的。
PID的稳态输出,原则是,当设定值与目标值(采样)一样时,保持当前的输出值不变。
否则就将输出,反向增减。
PID的算法,与历史采样记录都相关。你的程序中提到的,不属于PID计算方式。
回复

使用道具 举报

ID:311846 发表于 2020-6-8 16:23 | 显示全部楼层
你所复制出来的是计算过后的结果,不是PID计算的过程,PID_output是会变动的,你这个计算后限制PID_output输出的最大值和最小值。
if (PID_output > PWM_max)//限制上限
     PWM_value = PWM_max;
else if (PID_output < 0)//限制下限
     PWM_value = 0;
else
     PWM_value = PID_output;//容许范围内才能赋值给PWM
回复

使用道具 举报

ID:450608 发表于 2020-6-10 13:12 | 显示全部楼层
除了 PWM_value的值有范围限制之外,积分部分的值因为每次计算后都会保存,它的取值范围也应该和 PWM_value的取值范围相同,这样就不会出现你说的情况了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表