完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
如题,PID的输出数据如何转换为控制变量。
×××××××××× 模型一:加热箱 设定值SV, 检测值PV,PID计算结果MV。 执行结构是加热块。 MV是一个数值,无单位。 执行结构通常是PWM控制的固态继电器。 PWN和MV之间是如何转换的? ××××××××××× 模型二:调速电机(电压调速) 设定值SV(转速),检测值PV(编码器返回的速度),PID计算结果MV,执行结构:可编程电源 MV是一个数值,无单位。MV和如何和可编程电源的的输出电压建立关系? ××××××××××××××××× 参考资料:http://www.docin.com/p-220191301.html |
|
相关推荐
9个回答
|
|
1.实际PID工作时是根据检测值与设定值的偏差进行调节的,直到偏差接近0。
2.PID计算值其实是PWM的占空比,模型一、模型二都是。 PID程序你可以参考https://bbs.elecfans.com/jishu_1147002_1_1.html float PID_Regulator(float Reference, float PresentFeedback, _pid *PID_Struct) 模型1中国设定值SV为Reference,检测值PV为PresentFeedback,函数的输出值为MV即PWM 模型2同理 |
|
|
|
PID输出值与PWM对应关系需要自己去处理,通常我们是直接将PID的输出值作为PWM的值。值得注意的地方是需要对输出值进行限幅,不要超过让PWM的占空比超出100%或者低于0%(不同系统有不同要求)。
|
|
|
|
各家的PID算法会有些区别,所以我让认为抛开算法谈 输出值(MV)如何使用是空中楼阁。 ×× 目前做基于三菱PID的张力控制,模型是: 设定值(SV):张力100N, 检测值(PV)。 PV和SV之间的差值(CV)是PID的输入参数。注意这个CV是有符号的。 主动轴的速度恒定, 通过调节从动轴的速度来实现张力的调整。 从动轴速度大于主动轴速度,则产品变得松弛。 从动轴速度小于主动轴度,则产品被拉伸,张力就会变大。 ×××××××××××××××××××××××××××××× 张力函数如下: ×××××××××××××× 根据直接测试的效果: 当误差值在正的方向越大(10->100->1000)这样的变化后,PID输出值也会变大(例如:10-20-30.。。。。) 当误差在负的方向越大(-10-》-100-》-1000)这样的变化后,PID的输出值也这样变化(例如-10--》-100--》-1000) ×××××××××××××××××××××× 这个输出值的用法很多,可以的用法是: 从动轴转速=主轴转速+MV 。 当然了也可以给MV乘上一个比例关系,在添加到运算里面。 从动轴转速=主轴转速+MV*@ 。 |
|
|
|
liqijian101 发表于 2017-7-20 09:00 对于同一个PID系统: 当误差值在正方向不断增加的时候(10 20 30 50 60 ),PID的输出值是不是也会不断加大(10 20 60 ). 当误差值在负方向不断增加的时候(-10 -20 -30 -50 -60 ),PID的输出值是不是也会不断加大(-10 -20 - 60 ). ××××××××××××××××××××× PID的输出值MV,如何转化为占空比,比如说,MV的值是13,那么对应的占空比是多少? 13%吗? 还是其他的什么。 另外占空比自身的时间需要设定为多少比较合适。是1S 还是2S, 还是说使用 PID的采样周期呢? 谢谢 |
|
|
|
liqijian101 发表于 2017-7-20 09:00 float PID_Regulator(float Reference, float PresentFeedback, _pid *PID_Struct) { float Error; float output; /* 偏差计算 */ Error= (Reference - PresentFeedback); /* 积分计算 */ if (PID_Struct->Ki == 0) { PID_Struct->Integral = 0; } else { PID_Struct->Integral += PID_Struct->Ki * Error; if (PID_Struct->Integral > PID_Struct->Upper_Limit_Integral) { PID_Struct->Integral = PID_Struct->Upper_Limit_Integral; } else if (PID_Struct->Integral < PID_Struct->Lower_Limit_Integral) { PID_Struct->Integral = PID_Struct->Lower_Limit_Integral; } else { } } output= (PID_Struct->Kp * Error + PID_Struct->Integral + PID_Struct->Kd*(Error - PID_Struct->PreviousError) ); PID_Struct->PreviousError = Error; // store value if (output >= PID_Struct->Upper_Limit_Output) { return(PID_Struct->Upper_Limit_Output); } else if (output < PID_Struct->Lower_Limit_Output) { return(PID_Struct->Lower_Limit_Output); } else { return output; } } ×××××××××××××××××××××××××××××××××× output= (PID_Struct->Kp * Error + PID_Struct->Integral + PID_Struct->Kd*(Error - PID_Struct->PreviousError) ); 输出= 误差*比例 +积分+微分(当前误差-上次误差) ×××××××××××××××××××× 这个积分项 似乎没有和误差建立计算关系。 |
|
|
|
wenluderen 发表于 2017-7-20 18:11 积分相那不和误差相关吗ki*偏差 |
|
|
|
wenluderen 发表于 2017-7-20 18:02 PID是一个自动调节的过程,当误差越来越大时,输出值会越来越使输出减少。甚至输出可以为0或者负值(反转) 你不用管到底PID输出对应的是多少,先做一个小的实验理解下PID控制 |
|
|
|
要看实际情况,他们之间会有个函数关系,看看上限,看看下限,输出百分比就可以了。
|
|
|
|
pid重点就是输出内个百分比来调节,
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
643 浏览 2 评论
NI Vision有个图片打不开其他图都能打开(用NI Vision Assistant也打开不了)
1073 浏览 1 评论
labview2015使用Excel报表程序打包生成后打开程序要选一个vi才能使用,否则软件就会报错,这是什么问题?
1648 浏览 2 评论
LabVIEW与单片机无法串口通信 提示串口打开错误 端口设置有问题吗?
1591 浏览 3 评论
1854 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 01:22 , Processed in 0.843448 second(s), Total 93, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号