• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

基于STC89C52单片机与DS18B20的恒温闭环增量式PI控制

斯塔特 2015-04-08 浏览量:2785

基于STC89C52单片机与DS18B20的恒温闭环增量式PI控制

根据此硬件电路图,设计出闭环的增量式P控制程序,使I数码管显示实时温度并且用PWM控制固态继电器进行水浴加热至软件所设定的温度。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 呵呵,开玩笑的,都是电子爱好者吗!当然,如果你真给ic币我也不能客气的!

    具体pi控制和显示没加入。我也在上班,刚才又来个领导。你先看看是这个意思不。

    备注:

    1、10个等级0-100度。每10度为一个等级。增加10度,占空比缩减1一个格。

    2、程序还有个地方,就是控制pwm绝对权的问题。需要用定时器处理,这里没给你做。

    • 发布于 2015-04-08
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:29
  • 这东西我喜欢啊!

    上传你的仿真图呗和具体控制比例系数。

    • 发布于2015-04-08
    • 举报
    • 评论 0
    • 0
    • 0

  • P I都是经验参数,通过不断试验调整的,是不能通过仿真获得的
    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 我的程序和我的问题我上传不了,说里面有非法字符。。。能不能麻烦你去这个地址看看,我在其他论坛也发了求助的。麻烦你了。
    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 参数可以先不调,现在是没有能够反馈温度变化的PWM波输出。这一步解决不了参数也调不成。
    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 修正的程序和原理图.rar

    上一个压缩文件里的程序中第二个C文件里的Kp参数错了。没有修正的文件Kp=20。我修正了下Kp改为Kp=2。新的压缩文件我更新了一下。其他都没变。

    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 下午或者晚上找时间帮你弄!这个200IC币你准备好,我收了!
    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 行,没问题。要是问题解决了并且也可以用增量PI输出PWM进行恒温控制,别说200IC,2000IC都行。在这儿先谢谢你了。
    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 说好没!但我看你没有那么多IC币啊!我这就去弄去!
    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 放心吧,解决了你会看到的。

    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • “10个等级0-100度。每10度为一个等级。增加10度,占空比缩减1一个格”这个精度不行啊,那假如我设定需要加热的温度是55摄氏度,那么程序输出的PWM波要不就是加热50度时,要不就是加热60度时的PWM波。我需要PWM是根据温度连续变化的。还有就是我的程序,温度显示在仿真上没效果,但是在硬件上是可以显示温度的。所以显示没加入那是不可能的。至于说PI控制没加入我也不太懂,我的PI控制是在定时器计时到了之后就可以进入了的。这点我也用keil软件debug过。PWM的绝对控制权这个我的确不懂。。。。我觉得我的程序就是出在PI()函数那块吧,因为程序是在一个实时显示温度的程序上改的,主程序里就加了PI()函数,然后18B20的程序我就加了PI()函数和一个定时器。我一直想能不能调出硬件上单片机内部的变量值来看看,这样我就知道到底是那一步出了问题,但是硬件仿真keil似乎不行吧,proteus我也没查到。

    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 1、精度吗!简单。你说个想法,比如上面你提到的0-100度,对应0-100个精度等等吧。我改。

    2、程序我现做的,没看你程序。你看看就知道了。我没做显示!是通过串口调试过的。uart.c里面带协议。如果想要显示,简单,数码管呗,可以加!数码管显示温度吗?

    3、PI吗,就是控制占空比的。

    Uk=Kp*(ek1-ek0+Ki*ek1);把这个东西加入到温度和占空比换算中是不?我才看到你程序里面有这个。

    4、PWM的绝对控制。就是保证波形的稳定性,利用中断用处理。这个我也可以处理。

    5、还有别的要求吗?

    我先吃饭去了。等你回帖

    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 在啰嗦一句啊!

    如果要高精度的,显示有可能会抖动或者影响温度采集速度等。这个事,我们要商量一下。具体你是要仿真着实验一下还是要做产品!

    如果是实验的话,可以换arm7,就是lpc21系类仿真。他倍频后CCLK可以达到10-70M。然后通过改进仿真速度来保证时效性。

    如果是商业产品吗,而且要采用51之类的东西,我们要坐下来合计合计。我设计过pwm产品,当然给你人家设备当搭下手的

    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 我没表达清楚我的意思,这个是我的问题。我细说一下嘛。我要做的题目是增量式PID在温度控制中的应用。需要设定一个目标温度,然后根据反馈的实时温度去采用PI调节调整PWM让电炉丝发热至目标温度并维持水温不变。PWM波占空比是由反馈的温度利用PI调节得到的,并不是说每个固定的温度对应一个固定的PWM波。

    显示的话用数码管就行了,我原来的程序就已经可以了的。

    没别的要求,不过我比较希望你可以看看我的程序,我想知道自己那个地方错了,毕竟我自己是个新手,也想学点东西。嘿嘿。

    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 不是,我还是学生。是做课程设计。。是我没有表达清楚我的意思。
    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 亲,坑啊!

    1、

    float  idata TempSum1=0, Kp=2,Ki=0.5;//存放前5次温度和

    这谁写的注释?


    if(flag1==1)
                   {
              ArrayTempe[m]=SetTemperature-Temperature;
               m=m+1;
          }
          if(m==2)
                {
            if(flag1==1)
            {
              ek0=ArrayTempe[0];
              ek1=ArrayTempe[1];
            }
            if(flag1==0)
            {
              ek1=SetTemperature-Temperature;
            }
                        Uk=Kp*(ek1-ek0+Ki*ek1);

    就看到这。不是你截取了人家代码,就是他瞎写的!完全和定义不符合。

    ek1中心温度!ek1-ek0偏差!求个平均值!这不是糊弄老师吗!毕业设计是不!找个专业论文参考一下吧。这个确实差点意思,你想想毕业设计说啥!太空洞了。

    2、至于你的波形吗!有几种可能:第一、时间太长。你在细看看示波器;第二、PWM时效性不好,即使你做出来了,那pwm也是不规则的。还真不如我这个程序呢!

    你如果想要规则pwm两点:

    第一、在加一个定时器,并考虑定时器起停和嵌套问题。(三套定时器:控制采样;控制pwm周期;控制pwm发生)

    第二、比如哈,pic带交错的,msp430带各种时钟源,等等吧。可控性都比他强,仿真效果好。

    3、说了半天,是纠正并帮你完善,自己合计合计我说对不。我要做的是这几件事:第一、加入显示;第二、加入你那个定时采样和在和设定值取平均偏差,并给pwm。对吧!OK!

    • 发布于2015-04-09
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

基于STC89C52单片机与DS18B20的恒温闭环增量式PI控制