打印
[应用方案]

基于PID控制算法的管热熔机

[复制链接]
1252|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-6-27 17:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
实做项目:基于PID控制算法的管热熔机

一、K型热电偶

①作用:K型热电偶作为一种温度传感器,K型热电偶通常和显示仪表,记录仪表和电子调节器配套使用。K型热电偶可以直接测量各种生产中从0℃到1300℃范围的液体蒸汽和气体介质以及固体的表面温度。
②原理:热电偶测温必须由热电偶、连接导线及显示仪表三部分组成。下图是最简单的热电偶测温示意图。



按上图组成的热电偶蕊及测温电偶丝1 ,如果将热电偶的热端加热,使得冷、热两端的温度不同,则在该热电偶回路中就会产生热电势,这种物理现象就称为热电现象(即热电效应)。在热电偶回路中产生的电势由温差电势和接触电势两部分组成。接触电势:它是两种电子密度不同的导体相互接触时产生的一种热电势。当两种不同的导体A和B相接触时,假设导体A和B的电子密度分别为Na和Nb并且Na>Nb,则在两导体的接触面上,电子在两个方向的扩散率就不相同,由导体A扩散到导体B的电子数比从B扩散到A的电子数要多。导体A失去电子而显正电,导体B获得电子而显负电。因此,在A、B两导体的接触面上便形成一个由A到B的静电场,这个电场将阻碍扩散运动的继续进行,同时加速电子向相反方向运动,使从B到A的电子数增多,最后达到动态平衡状态。此时A、B之间也形成一电位差,这个电位差称为接触电势。此电势只与两种导体的性质相接触点的温度有关,当两种导体的材料一定,接触电势仅与其接点温度有关。温度越高,导体中的电子就越活跃,由A导体扩散到B导体的电子就越多,接触面处所产生的电动势就越大,即接触电势越大。

③K型热电偶电压转温度系数:

//K型电压转温度系数
float code Var_VtoT_K[3][10]=
{
        {0,2.5173462e1,-1.1662878,-1.0833638,-8.9773540/1e1,-3.7342377/1e1,
        -8.6632643/1e2,-1.0450598/1e2,-5.1920577/1e4},
        {0,2.508355e1,7.860160/1e2,-2.503131/1e1,8.315270/1e2,        -1.228034/1e2,9.804036/1e4,-4.413030/1e5,1.057734/1e6,-1.052755/1e8},
        {-1.318058e2,4.830222e1,-1.646031,5.464731/1e2,-9.650715/1e4,
        8.802193/1e6,-3.110810/1e8}
};


④K型热电偶电压转温度函数:

/*********************************************
*函数描述:K型电压转温度(冷端温度为0)
        毫伏范围:-5.891~+54.819
        温度范围:-199.933℃~+1370.057℃
*输入变量:mV毫伏
*返回变量:value温度
*********************************************/
float K_VtoT(float mV)
{
        u8 i=0;
        float value=0;
       
        if((mV>=-6.478)&&(mV<0))
        {
                value=Var_VtoT_K[0][8];
                for(i=8;i>0;i--)
                        value=mV*value+Var_VtoT_K[0][i-1];
        }
        else if(mV>=0&&mV<20.646)
        {
                value=Var_VtoT_K[1][9];
                for(i=9;i>0;i--)
                        value=mV*value+Var_VtoT_K[1][i-1];
        }
        else if(mV>=20.646&&mV<=54.900)
        {
                value=Var_VtoT_K[2][6];
                for(i=6;i>0;i--)
                        value=mV*value+Var_VtoT_K[2][i-1];
        }
        return value;
}



二、温度控制算法——PID算法

①PID控制传递函数:
通过热电偶采集的被测温度偏离所希望的给定值时,PID控制可根据测量信号与给定值的偏差进行比例(P)、积分(I)、微分(D)运算,从而输出某个适当的控制信号给执行机构,促使测量值恢复到给定值,达到自动控制的效果。

②PID参数调节方法及参数设定:
PID模块的温度控制精度主要受P、I、D这三个参数影响。其中P代表比例,I代表积分,D代表微分。
  比例运算(P)
  比例控制是建立与设定值(SV)相关的一种运算,并根据偏差在求得运算值(控制输出量)。如果当前值(PV)小,运算值为100%。如果当前值在比例带内,运算值根据偏差比例求得并逐渐减小直到SV和PV匹配(即,直到偏差为0),此时运算值回复到先前值(前馈运算)。若出现静差(残余偏差),可用减小P方法减小残余偏差。如果P太小,反而会出现振荡。
  积分运算(I)
  将积分与比例运算相结合,随着调节时间延续可减小静差。积分强度用积分时间表示,积分时间相当于积分运算值到比例运算值在阶跃偏差响应下达到的作用所需要的时间。积分时间越小,积分运算的校正时间越强。但如果积分时间值太小,校正作用太强会出现振荡。
  微分运算(D)
  比例和积分运算都校正控制结果,所以不可避免地会产生响应延时现象。微分运算可弥补这些缺陷。在一个突发的干扰响应中,微分运算提供了一个很大的运算值,以恢复原始状态。微分运算采用一个正比于偏差变化率(微分系数)的运算值校正控制。微分运算的强度由微分时间表示,微分时间相当于微分运算值达到比例运算值在阶跃偏差响应下达到的作用所需的时间。微分时间值越大,微分运算的校正强度越强。

③PID部分程序:

//pid.c
#include"pid.h"
#include"temp.h"

struct PID spid; // PID Control Structure
unsigned int rout; // PID Response (Output)
unsigned int rin; // PID Feedback (Input)

int i=0,j=0,flag2=0,tem=0;

sbit output=P1^6;
unsigned char flag,flag_1=0;
unsigned char high_time,low_time,count=0;//占空比调节参数
float set_temper=40;

void PIDInit (struct PID *pp)
{
        high_time=50;
        low_time=50;
        memset ( pp,0,sizeof(struct PID));
}

/*=================================================================
PID计算部分
==================================================================*/
unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
{
                unsigned int dError,Error;
                Error = pp->SetPoint - NextPoint; // 偏差
                pp->SumError += Error; // 积分
                dError = pp->LastError - pp->PrevError; // 当前微分
                pp->PrevError = pp->LastError;
                pp->LastError = Error;
                return (pp->Proportion * Error//比例
                + pp->Integral * pp->SumError  //积分项
                + pp->Derivative * dError); //   微分项
}




extern struct PID spid; // PID Control Structure
PIDInit ( &spid );
spid.Proportion = 10; // Set PID Coefficients
spid.Integral = 8;
spid.Derivative =6;
spid.SetPoint = 100; // Set PID Setpoint



三、系统原理图



该系统主要由HC89S003F4作为主控芯片,HC89S003F4 是一颗采用高速低功耗 CMOS 工艺设计开发的增强型 8 位单片机,内部有 16K Bytes FLASH 程序存储器,256 Bytes IRAM 和 256 Bytes XRAM,最多 18 个双向 I/O口,1 个外设功能引脚全映射模块 PTM,5 个 16 位定时器/计数器,3 组 12 位带死区控制互补 PWM,1 个 8 位 PWM,2 个 UART,1 个 SPI,16 个外部中断,11+2 路 12 位 ADC,四种系统工作模式(正常、低频、掉电和空闲)和 16个中断源。通过该芯片自带的12位ADC可以将K型热电偶当前电压状态下代表的温度读取出来;芯片IO口P2.4通过发送PWM波来控制三极管的导通,从而控制可控硅的导通;系统有三个按键用于设定温度参数等;3位数码管显示当前状态下管热熔机金属探头的实际温度。

四、管热熔机成品,可以正常使用



————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/masudong/article/details/108014511

使用特权

评论回复
沙发
suncat0504| | 2024-6-29 09:46 | 只看该作者
好资料,谢谢分享!

使用特权

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

本版积分规则

1931

主题

15611

帖子

11

粉丝