打印

stc89c52PID温控系统问题

[复制链接]
2963|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nczywq|  楼主 | 2013-3-12 19:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我如何也调不好。
有没有大神帮帮忙,我非常想搞懂PID,和pwm波。
PID算法是什么?如何算出最后的输出量
  PWM波形到底是怎么一回事?
  比如10MS中断一次。在进入中断后。高电平持续3MS,低电平持续6MS。然后就出中断程序,是不是再过1MS ,又会进入中断。
想学没人教的痛苦谁能懂

相关帖子

沙发
dirtwillfly| | 2013-3-12 19:48 | 只看该作者
在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制。
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
遇到问题多搜索,网上有很多资料的。另外要多来论坛和大家交流,交流才能进步

使用特权

评论回复
板凳
nczywq|  楼主 | 2013-3-12 20:04 | 只看该作者
我看了很多例子啊。还是不懂PID的算法

使用特权

评论回复
地板
YDCMAN| | 2013-3-12 20:52 | 只看该作者
好像换成等效近似公式吧,要是算完整的积分单片机忙不来

使用特权

评论回复
5
nczywq|  楼主 | 2013-3-12 22:11 | 只看该作者
void PID_ys()
{
        if(temp<settemp)
        {
                if(settemp-temp>10)
                {
                        hightime=100;
                }
                else
                {
                        e1=settemp-temp;
                        duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3))/10;
                        uk=uk+duk;
                        if(uk>100)
                        {
                                uk=100;
                        }
                        else if(uk<-100)
                        {
                                uk=-100;
                        }
                        if(uk<0)
                        {
                                hightime=-uk;
                        }
                        else
                        {
                                hightime=uk;
                        }
                        e3=e2;
                        e2=e1;
                }

        }
        if(temp>=settemp)
        {
                if(temp-settemp>1)
                {
                        hightime=0;
                }
                else
                {
                        e1=settemp-temp;
                        duk=(kp*(e1-e2)+ki*e1+kd*(e1-e2*2+e3))/10;
                        uk=uk+duk;
                        if(uk>100)
                        {
                                uk=100;
                        }
                        else if(uk<-100)
                        {
                                uk=-100;
                        }
                        if(uk<0)
                        {
                                hightime=100-(-uk);
                        }
                        else
                        {
                                hightime=100-uk;
                        }       
                        e3=e2;
                        e2=e1;
                }
        }
}
我是这样算的。别人的方法。但是我发现<35度时。运算出来的占空比。始终是100.有没有什么其它算法呢

使用特权

评论回复
6
gx_huang| | 2013-3-13 09:12 | 只看该作者
你是浮点还是定点?
注意公式计算是否溢出。
PID,从头开始,没有2年,你搞不清楚了。
只有天才才可以在1年内搞清楚原理和工程实际问题。

使用特权

评论回复
7
刘骁奖| | 2013-3-13 09:36 | 只看该作者
stc89c52,干吗用这么烂的芯片!

使用特权

评论回复
8
nczywq|  楼主 | 2013-3-13 17:54 | 只看该作者
刘骁奖 发表于 2013-3-13 09:36
stc89c52,干吗用这么烂的芯片!

版主,有没有什么好芯片啊?   

使用特权

评论回复
9
nczywq|  楼主 | 2013-3-13 17:55 | 只看该作者
gx_huang 发表于 2013-3-13 09:12
你是浮点还是定点?
注意公式计算是否溢出。
PID,从头开始,没有2年,你搞不清楚了。

不知道头在哪里啊。他的公式真难弄。有没有PID基础书推荐一下。谢谢了。

使用特权

评论回复
10
gx_huang| | 2013-3-14 08:34 | 只看该作者
nczywq 发表于 2013-3-13 17:54
版主,有没有什么好芯片啊?

STC89C52作为PID控制,不算烂的的。
到市场上看看别人用的是什么芯片,量大的还是51类芯片。

使用特权

评论回复
11
nczywq|  楼主 | 2013-3-14 21:14 | 只看该作者
gx_huang 发表于 2013-3-14 08:34
STC89C52作为PID控制,不算烂的的。
到市场上看看别人用的是什么芯片,量大的还是51类芯片。 ...

那不知道斑竹有没有好的PID书籍呢

使用特权

评论回复
12
fly1974| | 2013-3-15 11:51 | 只看该作者
百度一下,例如:PID控制经典培训教程.pdf之类的很多的

使用特权

评论回复
13
tracymoon| | 2014-4-29 11:20 | 只看该作者
你好 我先跟一下 PID温度控制中 在温度比较程序中调用PID子程序后 的 输出high-time=rout/800  是根据什么来的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

60

帖子

2

粉丝