Microchip
直播中

梁艳

8年用户 262经验值
私信 关注
[问答]

如何使用PID控制pic18f2550?

我正在尝试理解和使用PID。该应用将是一个简单的温度控制器(理解后,我将与其他传感器一起工作)。这将通过读取一个NTC和加热器将是一个电阻器。它将在PIC18F2550@HS 20MHz下运行;我阅读了AN937和AN964,试图理解PID,但还有一些事情需要理解:一般公式是V=(Kp*E)+(T*Ki*(E1+E2+E3...)+(Kd *(EN -E(N-1))/T),对吗?V是我需要多少来改变我的PWM值,以点偏移值,E是值读偏移,对不对?是否需要时间来获取N个样品或得到每个样品?我知道Kp、Kd和Ki是我需要手动发现或实现自动调优例程的常量。这些常量可能不是一个整数,所以,如何避免使用浮点呢?(我知道我必须避开他们)。

回帖(19)

王璨

2019-8-15 10:34:52
嗨,我知道你是一名EE学生。所以我假设我可以从一个相当高的水平开始:V是PID控制器输出。它是“思想”是控制输出-从而传递PWM值本身。(不是变化率-这将实现一个额外的积分器阶段)。大多数回路需要一个附加的开环控制元件来与PID控制器一起工作。这可以是一个简单的P控制器,以设置点(而不是循环误差)作为输入变量……您可以忘记T(也就是控制循环的循环时间——与采样时间几乎没有关系的设计决策):Ki*T resp Kd/T可以替换为Ki'resp。对于简单的温度控制器,这是过度设计的:一个简单的开关控制器(参见https://en.wikipedia.org/wiki/Bang%E2%80%93bang_control)在大多数加热应用中都能够平稳地执行。有些运气需要一个16位的控制值。如果你对缩放的概念有所了解:0…100% PWM由0…0xFFFF值表示。因此,您有一些允许整数常量的分辨率。并且允许它具有32位的临时结果-截断到16位的值,以获得对PWM控制的贡献。希望这能有所帮助,不要增加太多的混乱:)
举报

李子跃

2019-8-15 10:51:15
我通常把它表示为:-V=(kp*e)+((t/kI)*(e1+e2+e3)…E n)+((Kd/T)*(E n-E(n-1)))使得增加Ki减慢了循环(Ki通常称为积分时间)E(错误)是过程值-setpoint如果使用浮点则通常将输入、设置点和输出从工程单元缩放为0-1.0。系统的采样率。为了使Ki和Kd常数变得有意义,通常设置T=1/(以Hz为单位的采样率),因此Ki和Kd的单位分别是秒和1/秒。但是,如果使用整数计算,则将T设置为适合整数数学的任何值,并计算关系。为了简单起见,尤其是当学习时,并且由于温度是一个缓慢的过程(至少在MCU的速度方面),所以最好坚持浮点这里是我通常使用的代码:-PID.HPID.CI通常在接收到来自定时器中断的标志时从我的主循环调用PIDIterate()。PIDDATA结构允许我运行多个PID循环。通常将循环更新速率设置为至少比实际处理时间快10倍。
举报

段丽

2019-8-15 10:56:49
谢谢。你回答了我关于V和float的问题。我知道PID过于工程化,但我认为这是一个应用PID的快速例子(我将在空气中设置一个电阻器,所以,我没有像水那样吸收大量的热量),但是我后来假装用加速度计和电机来使用它。稳定某些表面。我不明白,关于T的部分,可以用Ki的替代来代替。KD“”RESP是什么意思?(抱歉,我是巴西人,所以别指望我什么都懂:p)而且正如你所想的,我从8岁起就是个EE学生。我14, 15岁时开始使用MCU。现在我20岁,电子工程师。我在电子课上的时间很长,我想我不会到达这里。谢谢你的帮助:D
举报

王璨

2019-8-15 11:02:47
嗨,好的,首先是“RESP”,这是各自的缩写。所以Ki*t可以用Ki’,kd/t的kd'代替,如果你想把它用作某种“扩展的研究”:好的。这个相对缓慢的控制回路的基本调整会给你一些经验。(在水中,环路会更慢,所以用一个加热电阻平分NTC是一个合理的选择。)玩得开心——有很多东西要发现!顺便说一句:论坛中的“位置”信息并不像预期的那样运作:我来自德国。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分