pid温度控制程序

合集下载

模糊PID控制温控系统设计C语言程序代码

模糊PID控制温控系统设计C语言程序代码

模糊PID控制温控系统设计C语言程序代码介绍本文介绍了使用模糊PID控制方法来设计温控系统的C语言程序代码。

本温控系统使用传感器读取室内温度,然后根据读取的数值对应调整冷风机的风速和加热器的加热时间,从而控制室内温度达到一个设定值。

系统设计本温控系统采用模糊PID控制方法,具体实现流程如下:1.根据设定温度和当前室内温度计算出误差值2.使用模糊控制方法将误差值转化为温度调节量3.根据模糊控制输出的温度调节量计算出PID控制器的输出4.根据PID控制器的输出调节冷风机的风速和加热器的加热时间系统设计中需要使用的传感器,冷风机和加热器的具体型号及参数需要根据实际情况进行选择。

此处不做详细说明。

程序代码实现以下代码实现了上述系统设计,包括模糊控制和PID控制。

// 温控系统C语言程序代码#include<stdio.h>#include<stdlib.h>// 模糊控制double GetTemperatureByFuzzy(double error){double delta = 0.5; // 设定的温度调节步长double result = 0;if (error <= -5){result = 1;}else if (error > -5 && error < 0){result = (error + 5) / 5.0;}else if (error >= 0 && error < 5){result = (5 - error) / 5.0;}else{result = 0;}return result * delta;}// PID控制double GetTemperatureByPID(double error, double lastError, double integ ral){double Kp = 0.5; // 比例系数double Ki = 0.01; // 积分系数double Kd = 0.1; // 微分系数double deltaT = 0.1; // 采样时间double derivate = (error - lastError) / deltaT;double result = Kp * error + Ki * integral + Kd * derivate;return result;}// 主函数int main(){double setTemp = 25; // 设定温度double curTemp = 24; // 当前温度,需要从传感器读取double lastError = 0; // 上一次的误差值double integral = 0; // 积分项while (1){double error = setTemp - curTemp; // 计算当前误差值double fuzzyTemp = GetTemperatureByFuzzy(error); // 模糊控制integral += error; // 更新积分项double pidTemp = GetTemperatureByPID(error, lastError, integra l); // PID控制lastError = error; // 更新上一次误差值// 根据pidTemp和fuzzyTemp调节冷风机的风速和加热器的加热时间,省略// 读取传感器更新当前温度,省略// curTemp = GetCurTemp();// 采样时间,省略// sleep(1);}}本文介绍了使用模糊PID控制方法来设计温控系统的C语言程序代码。

PID温控程序

PID温控程序

以下为PID温控程序,没有采用SFB41是因为些模块比较大,影响系统反应速度。

些温度控制系统不用微分(D)控制,只用PI控制Kc 为回路的增Ts 为采样的时间间隔Ti 为积分时间MDSPn 为采样时刻n的设定值PVn 为采样时刻n的过程变量值MX 为采样时刻n-1的积分项(又称为积分前项)PID运算公式1:MPN=KC*(SPN-PVN)PID运算公式2;MIN=KC*TS/TI*(SPN-PVN)+MXPID运算公式3:MN=MPN+MIN不用微分(D)控制,原工式为:MN=MPN+MIN+MDNPI运算程序对应的DB1:主程序对应的DB2:模拟输入量:IW2模拟输出量:PQDOKc 为回路的增Ts 为采样的时间间隔Ti 为积分时间MDSPn 为采样时刻n的设定值PVn 为采样时刻n的过程变量值MX 为采样时刻n-1的积分项(又称为积分前项)对应地址:网络1和 2 是模拟采集的“模拟输入量:IW2”和组态画面上Kc Ts Ti SPn PVn 的设定值。

实际操作中不需要。

改变模拟输入量:IW2观察模拟输出量变化:PQDO观察模拟输出量变化:PQDO观察模拟输出量变化:PQDO观察模拟输出量变化:PQDOOK!其他变量改变后一样能回到平衡:如改以下值:Kc 为回路的增Ts 为采样的时间间隔Ti 为积分时间MDSPn 为采样时刻n的设定值以下为PID运算温控程序,没有采用SFB41是因为些模块比较大,影响系统反应速度。

些温度控制系统不用微分(D)控制,只用PI控制下面是主程序:FB2下面是各电机启动程序模拟量输入,数据格式转换模拟量输出,数据格式转换限制输出范围:0~32767停止后全部清零,为组态画面变量编写的程序以下为模拟给PN当前值,SP设定值,TI积分时间,TS采样时间,KC增益量,结果:FB2我们看一下温度显示:Kc DB2。

DBD 66 为回路的增Ts DB2。

DBD74 为采样的时间间隔Ti DB2。

PID温度控制的实现

PID温度控制的实现

PID温度控制的实现PID温度控制是一种常用的控制方法,可以应用于各种温度调节的场景,如炉温控制、恒温器控制、温室控制等。

PID是比例、积分、微分的简称,它通过不断调整输出信号的大小来控制温度的变化,以使温度尽可能稳定在设定值。

PID控制器的实现需要以下几个关键步骤:1.设置控制目标:在开始实施PID控制之前,需要首先设定好控制的目标温度和误差范围。

例如,我们要将温度控制在25摄氏度左右,可以设置误差范围为±0.5摄氏度。

2.采集温度信号:温度控制器需要实时监测被控对象的温度变化情况,因此需要使用温度传感器来采集温度信号。

温度传感器可以是热电偶、热敏电阻或红外线传感器等。

3.根据误差计算PID输出信号:PID控制的核心是根据温度误差来计算输出信号。

误差是设定温度与实际温度之间的差异,可以通过对差值取绝对值或者平方等方法来表示。

PID控制器根据误差值来调整控制量的大小,使得误差尽可能地减小。

3.1比例控制(P控制):比例控制是根据误差的大小,通过乘以一个比例系数Kp来调整控制量的大小。

具体计算公式为:P = Kp * Error。

其中,Kp是比例系数,Error是温度设定值与实际温度的差异。

3.2积分控制(I控制):积分控制是对误差进行累计,以减小稳态误差。

它通过乘以一个积分系数Ki来调整控制量的大小。

具体计算公式为:I = Ki * ∑(Error * dt)。

其中,Ki是积分系数,∑(Error * dt)是误差的积分值,dt为采样时间间隔。

3.3微分控制(D控制):微分控制是根据误差变化的速率来调整控制量的大小,以抑制温度的过冲或超调。

它通过乘以一个微分系数Kd来调整控制量的大小。

具体计算公式为:D = Kd * (dError/dt)。

其中,Kd是微分系数,(dError/dt)为误差的微分值,表示误差的变化速率。

4.计算总的输出信号:总的输出信号可以通过加权求和来计算,即 Output = P + I + D。

基于PID的温度控制系统设计

基于PID的温度控制系统设计

基于PID的温度控制系统设计PID(比例-积分-微分)控制系统是一种常见的温度控制方法。

它通过测量实际温度和设定温度之间的差异,并相应调整加热器或冷却器的输出来控制温度。

在本文中,将介绍PID控制系统的基本原理、设计步骤和实施细节,以实现一个基于PID的温度控制系统。

一、基本原理PID控制系统是一种反馈控制系统,其核心思想是将实际温度值与设定温度值进行比较,并根据差异进行调整。

PID控制器由三个部分组成:比例控制器(P),积分控制器(I)和微分控制器(D)。

比例控制器(P):根据实际温度与设定温度之间的差异,产生一个与该差异成正比的输出量。

比例控制器的作用是与误差成正比,以减小温度偏差。

积分控制器(I):积分控制器是一个与误差积分成比例的系统。

它通过将误差累加起来来减小持续存在的静态误差。

积分控制器的作用是消除稳态误差,对于不稳定的温度系统非常有效。

微分控制器(D):微分控制器根据温度变化速率对输出进行调整。

它通过计算误差的变化率来预测未来的误差,并相应地调整控制器的输出。

微分控制器的作用是使温度系统更加稳定,减小温度变化速率。

二、设计步骤1.系统建模:根据实际温度控制系统的特点建立数学模型。

这可以通过使用控制理论或系统辨识技术来完成。

将得到的模型表示为一个差分方程,包含输入(控制输入)和输出(测量温度)。

2.参数调整:PID控制器有三个参数:比例增益(Kp)、积分时间(Ti)和微分时间(Td)。

通过试验和调整,找到最佳的参数组合,以使系统能够快速稳定地响应温度变化。

3.控制算法:根据系统模型和参数,计算控制器的输出。

控制器的输出应是一个与实际温度偏差有关的控制信号,通过改变加热器或冷却器的输入来调整温度。

4.硬件实施:将控制算法实施到硬件平台上。

这可以通过使用微控制器或其他可编程控制器来实现。

将传感器(用于测量实际温度)和执行器(用于控制加热器或冷却器)与控制器连接起来。

5.调试和测试:在实际应用中,进行系统调试和测试。

PID温度控制的PLC程序设计(梯形图语言)教学文案

PID温度控制的PLC程序设计(梯形图语言)教学文案

P I D温度控制的P L C 程序设计(梯形图语言)PID温度控制的PLC程序设计(梯形图语言)PID温度控制的PLC程序设计温度控制是许多机器的重要的构成部分。

它的功能是将温度控制在所需要的温度范围内,然后进行工件的加工与处理。

PID控制系统是得到广泛应用的控制方法之一。

在本文中,将详细讲叙本套系统。

l 系统组成本套系统采用Omron的PLC与其温控单元以及Pro-face的触摸屏所组成。

系统包括CQM1H-51、扩展单元TC-101、GP577R以及探温器、加热/制冷单元。

l 触摸屏画面部分(见图1-a)1-a如图所见,数据监控栏内所显示的002代表现在的温度,而102表示输出的温度。

如按下开始设置就可设置参数。

需要设置的参数有六个,分别是比例带、积分时间、微分时间、滞后值、控制周期、偏移量。

它们在PLC的地址与一些开关的地址如下所列。

比例带 : DM51积分时间 : DM52微分时间 : DM53滞后值 : DM54控制周期 : DM55偏移量 : DM56数据刷新 : 22905l PLC程序部分002:PID的输入字102:PID的输出字[NETWORK]Name="Action Check" //常规检查[STATEMENTLIST]LD 253.13 //常ONOUT TR0CMP 002 #FFFF //确定温控单元是否完成初始化字串1AND NOT 255.06 //等于OUT 041.15 //初始化完成LD TR0AND 041.15OUT TR1AND NOT 040.10 //不在参数设置状态MOV DM0050 102 //将设置温度DM50传送给PID输出字 LD TR1MOV 002 DM0057 //将002传送到DM57[NETWORK]Name="Setting Start"//设置开始[STATEMENTLIST]LD 253.13OUT TR0AND 229.05 //触摸屏上的开始设置开关DIFU 080.05 //设置微分LD TR0AND 041.15AND 080.05SET 040.01 //开始设置标志位1SET 040.10 //开始设置标志位2[NETWORK]Name="Poportion"//比例带设置[STATEMENTLIST]LD 040.01OUT TR0AND NOT 042.01MOV #C110 102 //读输出边与输入边的比例带CMP 002 #C110 //比较输入字是否变成C110AND 255.06 //等于SET 042.01 //设置比例带标志LD TR0AND 042.01MOV DM0051 102 //将比例带的设定值写入输出字 CMP 002 DM0051 //是否写入AND 255.06 字串4RSET 040.01 //复位标志1RSET 042.01 //复位比例带标志SET 040.02 //向下继续设置标志[NETWORK]Name="Integral"//积分时间设置[STATEMENTLIST]LD 040.02OUT TR0AND NOT 042.02MOV #C220 102 //读输出边与输入边的积分CMP 002 #C220 //比较输入字是否变成C220AND 255.06SET 042.02 //设置积分标志LD TR0AND 042.02MOV DM0052 102 //将积分的设定值写入输出字 CMP 002 DM0052 //是否写入AND 255.06RSET 040.02RSET 042.02SET 040.03 //向下继续设置标志[NETWORK]Name="differential"//微分时间设置[STATEMENTLIST]LD 040.03OUT TR0AND NOT 042.03MOV #C330 102 //读输出边与输入边的微分CMP 002 #C330 //比较输入字是否变成C330AND 255.06SET 042.03 //设置微分标志LD TR0AND 042.03MOV DM0053 102 /将微分的设定值写入输出字CMP 002 DM0053 //是否写入字串3AND 255.06RSET 040.03RSET 042.03SET 040.04 //向下继续设置标志[NETWORK]Name="Hysteresis"//滞后值设置[STATEMENTLIST]LD 040.04OUT TR0AND NOT 042.04MOV #C440 102 //读输出边与输入边的滞后值CMP 002 #C440 //比较输入字是否变成C440AND 255.06SET 042.04 设置滞后值标志LD TR0AND 042.04MOV DM0054 102 /将滞后值的设定值写入输出字 CMP 002 DM0054 //是否写入AND 255.06RSET 040.04RSET 042.04SET 040.05 //向下继续设置标志[NETWORK]Name="Period"//控制周期设置[STATEMENTLIST]LD 040.05OUT TR0AND NOT 042.05MOV #C550 102 //读输出边与输入边的控制周期CMP 002 #C550 //比较输入字是否变成C550AND 255.06SET 042.05 //设置控制周期标志LD TR0AND 042.05MOV DM0055 102 将控制周期的设定值写入输出字CMP 002 DM0055 是否写入AND 255.06RSET 040.05RSET 042.05SET 040.06 //向下继续设置标志[NETWORK]Name="Shift"//偏移量设置[STATEMENTLIST]LD 040.06OUT TR0AND NOT 042.06MOV #C660 102 //读输出边与输入边的偏移量CMP 002 #C660 //比较输入字是否变成C660AND 255.06SET 042.06 //设置偏移量标志LD TR0AND 042.06MOV DM0056 102 //将偏移量的设定值写入输出字 CMP 002 DM0056 //是否写入AND 255.06RSET 040.06RSET 042.06SET 040.00[NETWORK]Name="Return"//返回[STATEMENTLIST]LD 040.00OUT TR0AND NOT 042.00MOV #C070 102 //读输入边的处理值CMP 002 #C070 比较输入字变成C070AND 255.06SET 042.00 //返回标志LD TR0AND 042.00MOV DM0050 102 将设定温度值写入输出字RSET 040.00RSET 042.00RSET 040.10以上是本套系统的全部内容,经过反复试验,此系统可以维持温度在1°C 之间变化。

C语言编写PID温度控制器程序

C语言编写PID温度控制器程序

C语言编写PID温度控制器程序姓名:况武(07421236)班级:自二系别:通控系#include <stdio.h>#include<math.h>struct _pid {int pv; /*integer that contains the process value*/int sp; /*integer that contains the set point*/float integral;float pgain;float igain;float dgain;int deadband;int last_error;};struct _pid warm,*pid;int process_point, set_point,dead_band;float p_gain, i_gain, d_gain, integral_val,new_integ;;/*------------------------------------------------------------------------pid_initDESCRIPTION This function initializes the pointers in the _pid structureto the process variable and the setpoint. *pv and *sp areinteger pointers.------------------------------------------------------------------------*/void pid_init(struct _pid *warm, int process_point, int set_point){struct _pid *pid;pid = warm;pid->pv = process_point;pid->sp = set_point;}/*------------------------------------------------------------------------pid_tuneDESCRIPTION Sets the proportional gain (p_gain), integral gain (i_gain),derivitive gain (d_gain), and the dead band (dead_band) ofa pid control structure _pid.------------------------------------------------------------------------*/void pid_tune(struct _pid *pid, float p_gain, float i_gain, float d_gain, int dead_band){pid->pgain = p_gain;pid->igain = i_gain;pid->dgain = d_gain;pid->deadband = dead_band;pid->integral= integral_val;pid->last_error=0;}/*------------------------------------------------------------------------pid_setintegDESCRIPTION Set a new value for the integral term of the pid equation.This is useful for setting the initial output of thepid controller at start up.------------------------------------------------------------------------*/void pid_setinteg(struct _pid *pid,float new_integ){pid->integral = new_integ;pid->last_error = 0;}/*------------------------------------------------------------------------pid_bumplessDESCRIPTION Bumpless transfer algorithim. When suddenly changingsetpoints, or when restarting the PID equation after anextended pause, the derivative of the equation can causea bump in the controller output. This function will helpsmooth out that bump. The process value in *pv shouldbe the updated just before this function is used.温度PID控制的C语言程序?------------------------------------------------------------------------*/void pid_bumpless(struct _pid *pid){pid->last_error = (pid->sp)-(pid->pv);}/*------------------------------------------------------------------------pid_calcDESCRIPTION Performs PID calculations for the _pid structure *a. This function uses the positional form of the pid equation, and incorporates an integral windup prevention algorithim. Rectangular integration is used, so this function must be repeated on a consistent time basis for accurate control.RETURN V ALUE The new output value for the pid loop.USAGE #include "control.h"*/float pid_calc(struct _pid *pid){int err;float pterm, dterm, result, ferror;err = (pid->sp) - (pid->pv);if (abs(err) > pid->deadband){ferror = (float) err; /*do integer to float conversion only once*/pterm = pid->pgain * ferror;if (pterm > 100 || pterm < -100){pid->integral = 0.0;}else{pid->integral += pid->igain * ferror;if (pid->integral > 100.0){pid->integral = 100.0;}else if (pid->integral < 0.0) pid->integral = 0.0;}dterm = ((float)(err - pid->last_error)) * pid->dgain;result = pterm + pid->integral + dterm;}else result = pid->integral;pid->last_error = err;return (result);}void main(void){float display_value;int count=0;pid = &warm;// printf("Enter the values of Process point, Set point, P gain, I gain, D gain \n");// scanf("%d%d%f%f%f", &process_point, &set_point, &p_gain, &i_gain, &d_gain);process_point = 30;set_point = 40;p_gain = (float)(5.2);i_gain = (float)(0.77);d_gain = (float)(0.18);dead_band = 2;integral_val =(float)(0.01);printf("The values of Process point, Set point, P gain, I gain, D gain \n");printf(" %6d %6d %4f %4f %4f\n", process_point, set_point, p_gain, i_gain, d_gain);printf("Enter the values of Process point\n");while(count<=20){scanf("%d",&process_point);pid_init(&warm, process_point, set_point);pid_tune(&warm, p_gain,i_gain,d_gain,dead_band);pid_setinteg(&warm,0.0); //pid_setinteg(&warm,30.0);//Get input value for process pointpid_bumpless(&warm);// how to display outputdisplay_value = pid_calc(&warm);printf("%f\n", display_value);//printf("\n%f%f%f%f",warm.pv,warm.sp,warm.igain,warm.dgain); count++;}}。

pid算法温度控制c语言程序

pid算法温度控制c语言程序

pid算法温度控制c语言程序PID算法是一种常用的温度控制算法,广泛应用于各种温度控制系统中。

在C语言中,我们可以通过编写程序来实现PID算法的温度控制功能。

我们需要了解PID算法的基本原理。

PID算法是通过对系统的反馈信号进行不断调整,使得系统的输出达到期望值。

PID算法由三个部分组成:比例控制、积分控制和微分控制。

比例控制根据反馈信号与期望值的差异来调整输出;积分控制根据反馈信号与期望值的累积差异来调整输出;微分控制根据反馈信号的变化率来调整输出。

在C语言中,我们可以使用变量来表示系统的输入、输出和期望值。

以下是一个简单的示例代码:```c#include <stdio.h>// 定义PID参数float Kp = 1.0; // 比例系数float Ki = 0.5; // 积分系数float Kd = 0.2; // 微分系数// 定义系统变量float setpoint = 25.0; // 期望值float input = 0.0; // 输入值float output = 0.0; // 输出值// 定义误差变量float error = 0.0; // 当前误差float last_error = 0.0; // 上一次误差float integral = 0.0; // 累积误差// PID算法函数float pid_algorithm(float setpoint, float input) {// 计算误差error = setpoint - input;// 计算比例控制float proportional = Kp * error;// 计算积分控制integral += error;float integral_control = Ki * integral;// 计算微分控制float derivative = Kd * (error - last_error); // 计算输出output = proportional + integral_control + derivative;// 更新误差last_error = error;return output;}int main(){// 模拟温度传感器的输入input = 23.5;// 调用PID算法函数output = pid_algorithm(setpoint, input);// 打印输出结果printf("Output: %.2f\n", output);return 0;}```在上述代码中,我们首先定义了PID算法的参数和系统变量。

温度的PID控制及程序示例

温度的PID控制及程序示例

温度的PID 控制一.温度检测部分首先要OK.二、PID 调节作用PID 控制时域的公式1 de(t)y(t) Kp(e(t) e(t) Td )Ti dt分解开来:(1) 比例调节器y(t) = Kp * e(t)e(k) 为当前的温差(设定值与检测值的插值)y(k) 为当前输出的控制信号(需要转化为PWM 形式)# 输出与输入偏差成正比。

只要偏差出现,就能及时地产生与之成比例的调节作用,使被控量朝着减小偏差的方向变化,具有调节及时的特点。

但是,Kp 过大会导致动态品质变坏,甚至使系统不稳定。

比例调节器的特性曲线.(2) 积分调节器y(t) = Ki * ∫(e(t))dt Ki = Kp/Ti Ti为积分时间#TI 是积分时间常数,它表示积分速度的大小,Ti 越大,积分速度越慢,积分作用越弱。

只要偏差不为零就会产生对应的控制量并依此影响被控量。

增大Ti 会减小积分作用,即减慢消除静差的过程,减小超调,提高稳定性。

(3) 微分调节器y(t) = Kd*d(e(t))/dt Kd = Kp*Td Td 为微分时间#微分分量对偏差的任何变化都会产生控制作用,以调整系统输出,阻止偏差变化。

偏差变化越快,则产生的阻止作用越大。

从分析看出,微分作用的特点是:加入微分调节将有助于减小超调量,克服震荡,使系统趋于稳定。

他加快了系统的动作速度,减小调整的时间,从而改善了系统的动态性能。

三.PID 算法:由时域的公式离散化后可得如下公式:y(k) = y(k-1)+(Kp+Ki+Kd)*e(k)-(Kp +2*Kd)*e(k-1) + Kd*e(k-2)y(k) 为当前输出的控制信号(需要转化为PWM 形式) y(k-1)为前一次输出的控制信号e(k) 为当前的温差(设定值与检测值的插值) e(k-1) 为一次前的温差e(k-2) 为二次前的温差Kp 为比例系数Ki = Kp*T/Ti T 为采样周期Kd = Kp*Td/T四.PID 参数整定(确定Kp,Ts,Ti,Td ):温度控制适合衰减曲线法,需要根据多次采样的数据画出响应曲线。

PID温度控制的PLC程序设计

PID温度控制的PLC程序设计

PID温度控制的PLC程序设计PID(比例-积分-微分)温度控制是一种常用的控制方法,可以通过PLC(可编程逻辑控制器)实现。

本文将详细介绍PID温度控制的PLC程序设计过程。

1.确定控制系统需求:首先要确定所需的控制系统的基本要求,包括控制温度范围、精度要求、控制方式等。

2.确定传感器和执行机构:选择合适的温度传感器和执行机构,例如热电偶或热电阻作为温度传感器,控制阀门或加热器作为执行机构。

3.确定控制算法:PID控制算法是一种经典的温度控制方法,可在PLC中实现。

PID控制算法由比例、积分和微分三个参数组成,可以通过自整定或手动调整获得最佳参数值。

4.确定控制模式:根据实际需求,选择合适的控制模式,比如开环控制、闭环控制或自适应控制。

对于温度控制,一般采用闭环控制。

5. PLC软件设计:根据控制系统需求和算法确定的参数,设计PLC 软件。

PLC软件可以使用Ladder Diagram(梯形图)或Function Block Diagram(功能块图)等语言编程。

下面是一个基本的PID温度控制的PLC程序设计示例(以Ladder Diagram为例):```ladder====主程序====-,----[]----[]----[]----()PID----[]----]----[]----[]----,[]----温度输入设置温度温度差系数K----[+]=--------]--------]-----------温度设定温度差积分控制值----[/K]------]--------------------------[]----------------[+]=---------控制值累计量----[]----[]----[]----()KpKiKd```上述Ladder Diagram中,PID控制算法的三个参数Kp、Ki和Kd通过输入设置,通过调整这些参数可以改善控制系统的响应速度和稳定性。

温度控制的PID算法与C程序实现

温度控制的PID算法与C程序实现

温度控制的PID算法与C程序实现PID (Proportional-Integral-Derivative) 是一种经典的反馈控制算法,被广泛应用于温度控制中。

在温度控制中,PID算法可以根据实际温度与设定温度之间的差异来调整控制器的输出,以达到稳定的温度控制。

下面将介绍PID算法的原理及其在C程序中的实现。

PID算法是通过对三个控制参数的不同组合调整,来实现对控制系统的精确控制。

这三个参数分别是比例项(P),积分项(I)和微分项(D)。

比例项(P)是根据实际温度与设定温度的差异计算出来的,并且与这个差异成比例。

比例项主要用于对系统的快速响应进行调整。

如果比例项过大,可能会导致系统产生震荡,如果比例项过小,则可能导致控制系统响应迟缓。

积分项(I)用于校正持续的误差,通过对误差的积分来进行控制系统的调整。

积分项主要用于对系统的稳定性进行调整。

如果积分项过大,可能会导致系统产生超调和振荡,如果积分项过小,则可能导致系统无法快速地消除误差。

微分项(D)用于预测系统未来变化的趋势,并根据这个趋势来进行控制系统的调整。

微分项主要用于对系统的响应速度进行调整。

如果微分项过大,可能会导致系统产生过度的抖动,如果微分项过小,则可能导致系统响应迟缓。

PID算法的输出是三个控制参数的加权和,即 control = P * error + I * integral + D * derivative。

其中,error为实际温度与设定温度的差异,integral为误差的累积和,derivative为误差的变化率。

下面是一个使用PID算法实现温度控制的C程序的示例:```c#include <stdio.h>//PID参数float Kp = 0.5;float Ki = 0.2;float Kd = 0.1;//温度设定值float setpoint = 50.0;//初始化float errorSum = 0;float lastError = 0;//计算PID控制量float calculateOutput(float currentTemperature) float error = setpoint - currentTemperature; errorSum += error;//计算PID控制量float proportional = Kp * error;float integral = Ki * errorSum;float derivative = Kd * (error - lastError);float output = proportional + integral + derivative; lastError = error;return output;int mai//模拟当前温度float currentTemperature = 40.0;//模拟控制循环while (1)//获取温度传感器读数// float currentTemperature = readTemperature(;//计算PID控制量float controlOutput = calculateOutput(currentTemperature); //执行控制动作,例如根据控制量控制加热器或冷却器// executeControlAction(controlOutput);//模拟温度变化currentTemperature += 0.5;//输出当前温度和控制量printf("Current temperature: %.2f, Control output: %.2f\n", currentTemperature, controlOutput);}return 0;```上述C程序中,首先定义了PID参数Kp、Ki和Kd,以及温度设定值setpoint。

基于PID算法的温度控制系统设计

基于PID算法的温度控制系统设计

基于PID算法的温度控制系统设计随着科技的不断发展,温度控制系统得到了广泛的应用。

无论是工业制造还是家庭生活,都会用到温度控制系统。

在这个系统中,PID算法是最常用的控制算法之一。

本文将介绍基于PID算法的温度控制系统的设计。

一、系统概述温度控制系统可以用于控制温度控制在一定范围内。

该系统包括一个温度传感器、一个控制器、一个执行器和一个热源。

其中,温度传感器用于将温度信号转换成电信号,控制器用于处理电信号,执行器用于控制热源加热或停止加热。

在温度控制系统中,PID算法是控制器中使用的一种算法。

二、PID算法原理PID控制算法分别根据偏差、积分错误和微分错误来控制系统。

PID算法控制器包括控制模块、时间模块、输出模块、PID模块和作用模块。

该算法可以通过增大或减少控制器的输出来控制系统的状态,以便实现温度控制。

模型中包含比例项、积分项和微分项。

控制器采用增益因子对其中的每一个部分进行调整,以便更好地控制系统。

三、系统设计在设计基于PID算法的温度控制系统时,需要首先将传感器连接到控制器。

控制器可以收集从温度传感器中收集的温度信号并将其转换成电信号。

然后,该信号将被发送到PID算法控制器,该控制器可以使用PID算法来计算输出信号。

输出信号可以通过执行器来控制加热或停止加热的热源,从而实现温度控制。

四、系统的优点基于PID算法的温度控制系统可以实现更准确和更稳定的温度控制。

相对于其他控制算法来说,该算法具有更优秀的响应特性和更敏感的响应速度。

此外,该算法可以进行现场校准,更容易进行二次开发。

五、系统的应用基于PID算法的温度控制系统广泛应用于各个领域。

在工业制造领域,该系统可以用于控制各种设备和工具的温度,以保证生产质量。

在医疗领域,该系统可以用于监控体温,并确保患者在治疗过程中保持稳定的体温。

此外,在家庭生活中,基于PID算法的温度控制系统可以帮助人们更好地控制室内温度,从而提高生活舒适度。

总之,基于PID算法的温度控制系统可以广泛应用于各种领域。

基于PID的温度控制系统设计

基于PID的温度控制系统设计

基于PID的温度控制系统设计PID(Proportional-Integral-Derivative)是一种常见的控制算法,被广泛应用于各种工业自动化系统中,其中包括温度控制系统。

本文将基于PID算法设计一个温度控制系统。

1.温度控制系统概述温度控制系统是一种典型的反馈控制系统,用于维持系统的温度在预定范围内。

温度传感器将感测到的温度信号反馈给控制器,控制器根据反馈信号与设定的温度进行比较,并根据PID算法计算出控制信号,通过执行器(例如加热器或冷却器)改变环境温度,以使温度保持在设定值附近。

2.PID控制算法原理2.1 比例控制(Proportional Control)比例控制根据设定值与反馈值之间的偏差大小来调整控制信号。

偏差越大,控制信号的改变越大。

比例控制能够快速减小偏差,但无法消除稳态误差。

2.2 积分控制(Integral Control)积分控制通过累积偏差来调整控制信号。

积分控制可以消除稳态误差,但过大的积分参数会引起控制系统的不稳定。

2.3 微分控制(Derivative Control)微分控制根据偏差的变化率来调整控制信号。

微分控制可以快速响应温度的变化,但不适用于快速变化的温度。

3.PID控制器设计PID控制器的输出可以表示为:u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt其中,u(t)为控制器的输出,Kp、Ki、Kd为比例、积分和微分增益,e(t)为温度的偏差,即设定值与反馈值之差,de(t)/dt为温度偏差的变化率。

3.1比例增益的选择比例增益决定了系统对偏差的响应速度。

如果比例增益太大,系统会产生超调现象;如果比例增益太小,系统的响应速度会变慢。

因此,在实际应用中需要通过试验来选择合适的比例增益。

3.2积分时间的选择积分时间决定了系统对稳态误差的补偿能力。

如果积分时间太大,系统对稳态误差的补偿能力会增强,但会导致系统的响应速度变慢,甚至产生振荡现象;如果积分时间太小,系统对稳态误差的补偿能力会减弱。

模糊PID控制温控系统设计C语言程序代码

模糊PID控制温控系统设计C语言程序代码

模糊PID控制温控系统设计C语言程序代码请注意,由于1200字的限制,下面的代码只是模糊PID控制温控系统的一个简单示例。

如果您需要更详细和完整的代码,请提供更多的细节和规格要求。

```c#include <stdio.h>//PID参数float kp = 0.5; // 比例系数float ki = 0.2; // 积分系数float kd = 0.1; // 微分系数//PID变量float integral = 0; // 积分累计float previous_error = 0; // 上一次的误差//温度传感器读取函数,返回当前温度float read_temperatur//实现温度传感器读取的代码逻辑//返回当前温度值//控制器输出函数,将控制信号发送给执行机构void control_output(float control_signal)//实现将控制信号发送给执行机构的代码逻辑int mai//设置设定温度float setpoint = 25.0;//主循环while (1)//获取当前温度float current_temperature = read_temperature(;//计算误差float error = setpoint - current_temperature;//计算PID控制信号float p_term = kp * error;integral += ki * error;float d_term = kd * (error - previous_error);float control_signal = p_term + integral + d_term; //更新上一次的误差previous_error = error;//输出控制信号control_output(control_signal);}return 0;```上述代码中,我们首先定义了PID参数和变量,以及温度传感器读取函数和控制器输出函数。

基于PLC的PID温度控制系统设计(附程序代码)

基于PLC的PID温度控制系统设计(附程序代码)

基于PLC的PID温度控制系统设计(附程序代码)摘要自动控制系统在各个领域尤其是工业领域中有着及其广泛的应用,温度控制是控制系统中最为常见的控制类型之一。

随着PLC技术的飞速发展,通过PLC对被控对象进行控制日益成为今后自动控制领域的一个重要发展方向。

温度控制系统广泛应用于工业控制领域,如钢铁厂、化工厂、火电厂等锅炉的温度控制系统。

而温度控制在许多领域中也有广泛的应用。

这方面的应用大多是基于单片机进行PID 控制, 然而单片机控制的DDC 系统软硬件设计较为复杂, 特别是涉及到逻辑控制方面更不是其长处, 然而PLC 在这方面却是公认的最佳选择。

根据大滞后、大惯性、时变性的特点,一般采用PID调节进行控制。

随着PLC功能的扩充,在许多PLC 控制器中都扩充了PID 控制功能, 因此在逻辑控制与PID控制混合的应用场所中采用PLC控制是较为合理的。

本设计是利用西门子S7-200PLC来控制温度系统。

首先研究了温度的PID调节控制,提出了PID的模糊自整定的设计方案,结合MCGS监控软件控制得以实现控制温度目的。

关键词:PLC;PID;温度控制沈阳理工大学课程设计论文目录1 引言...................................................................... (1)1.1 温度控制系统的意义...................................................................... .. (1)1.2 温度控制系统背景...................................................................... .................. 1 1.3 研究技术介绍...................................................................... .. (1)1.3.1 传感技术...................................................................... (1)1.3.2PLC .................................................................... . (2)上位机...................................................................... ............................1.3.3 31.3.4 组态软件...................................................................... ........................ 3 1.4 本文研究对象...................................................................... .. (4)2 温度PID控制硬件设计...................................................................... (5)2.1 控制要求...................................................................... .................................. 5 2.2 系统整体设计方案...................................................................... .................. 5 2.3 硬件配置...................................................................... . (6)2.3.1 西门子S7-200CUP224 ................................................................. .. (6)2.3.2 传感器...................................................................... . (6)2.3.3 EM235模拟量输入模块.....................................................................72.3.4 温度检测和控制模块...................................................................... .... 8 2.4 I/O分配表 ..................................................................... ................................ 8 2.5 I/O接线图 ..................................................................... .. (8)3 控制算法设计...................................................................... .. (9)3.1 P-I-D控制...................................................................... .............................. 9 3.2 PID回路指令 ..................................................................... .. (11)3.2.1 PID算法 ..................................................................... .. (11)3.2.2 PID回路指令 ..................................................................... (14)3.2.3 回路输入输出变量的数值转换 (16)3.2.4 PID参数整定 ..................................................................... (17)4 程序设计...................................................................... .. (19)4.1 程序流程图...................................................................... .............................. 19 4.2 梯形图...................................................................... .. (19)I沈阳理工大学课程设计论文5 调试...................................................................... . (23)5.1 程序调试...................................................................... .. (23)5.2 硬件调试...................................................................... .. (23)结束语...................................................................... .................................................... 24 附录程序代码...................................................................... ........................................ 25 参考文献...................................................................... (27)II沈阳理工大学课程设计论文1引言1.1 温度控制系统的意义温度及湿度的测量和控制对人类日常生活、工业生产、气象预报、物资仓储等都起着极其重要的作用。

PID温度控制程序

PID温度控制程序
=====================================================================================================*/
void PIDInit (struct PID *pp)
{
memset ( pp,0,sizeof(struct PID));
}
/***********************************************************
写一位数据子程序
***********************************************************/
void write_bit(unsigned char bitval)
dError = pp->LastError - pp->revError; // 当前微分
pp->revError = pp->LastError;
pp->LastError = Error;
return (pp->roportion * Error//比例
+ pp->Integral * pp->SumError //积分项
unsigned int Proportion; // 比例常数 Proportional Const
unsigned int Integral; // 积分常数 Integral Const
unsigned int Derivative; // 微分常数 Derivative Const
+ pp->Derivative * dError); // 微分项

温度控制的PID算法的C语言程序

温度控制的PID算法的C语言程序

温度控制的PID算法的C语⾔程序结合⼯程实践选题相关的⼀套源代码,根据其编程语⾔或项⽬特点,分析其在源代码⽬录结构、⽂件名/类名/函数名/变量名等命名、接⼝定义规范和单元测试组织形式等⽅⾯的做法和特点;我的⼯程实践是《服务器风扇转速智能控制》主要任务是开发⼀个应⽤,根据服务器内的版卡的功耗和温度,智能的调控服务器的风扇转速。

主要涉及风扇转速智能控制算法设计,linux系统下的应⽤开发,服务器风扇控制编成,板卡温度读取编成技术。

编程语⾔是c语⾔或者汇编语⾔。

这次我选择的源代码是基于pid算法的温度控制系统。

因为是编写的是底层的函数库,要求程序速度快,空间⼩,因此代码较为简短,⽬录结构⽐较简单,只有两个⽂件。

⽂件名⽐较简单。

由于没有使⽤⾯向对象语⾔,所以不存在类名。

函数名和变量名都是符合c语⾔变量与函数命名规范。

普通变量使⽤⼩写英⽂单词,较长单词使⽤缩写,多个单词⽤下划线相连。

常量使⽤⼤写。

函数名英⽂单词⾸字母⼤写。

变量名和函数名直观可以拼读,从名字可以⼤致知晓变量与函数作⽤。

接⼝定义要求简洁明了,能⽤传地址就不传值。

尽量数据耦合减少控制耦合。

单元测试组织形式,由于本程序是由⼀个函数调⽤其他函数组织⽽成,单元测试从最⼩的每个函数开始测试,从底向上进⾏测试。

列举哪些做法符合代码规范和风格⼀般要求;程序中有清晰的注释程序头部有程序整体的说明每个函数都有注释和说明函数的功能代码中有适当的注释说明代码段的功能标识符命名要尽量能直观的反映该标识符的功能标识符都⽤英⽂不⽤汉语拼⾳列举哪些做法有悖于“代码的简洁、清晰、⽆歧义”的基本原则,及如何进⼀步优化改进;在该源码中缩进并不是很规范有⼀部分变量没有注释说明其功能改进:缩进的宽度为四个字符,使⽤tab或者四个空格两者之⼀凡函数 if while for do-while switch 都要使⽤缩进总结同类编程语⾔或项⽬在代码规范和风格的⼀般要求。

c类语⾔或者项⽬在代码规范和风格中⼀般对于以下七个⽅⾯有要求:1) 空⾏定义变量或者函数后就要空⾏,两个相对独⽴的程序块、变量说明之后必须要加空⾏。

pid控制温度实例 c语言

pid控制温度实例 c语言

pid控制温度实例 c语言以下是一个简单的PID温度控制器的C语言实现示例:```c#include <stdio.h>// PID参数结构体typedef struct {double Kp; // 比例系数double Ki; // 积分系数double Kd; // 微分系数double integral; // 积分项double pre_error; // 上一次误差} PID_t;// PID温度控制器函数double pid_temperature_control(PID_t *pid, double setpoint, double actual_temperature) {double error = setpoint - actual_temperature; // 计算误差pid->integral += error; // 计算积分项double derivative = error - pid->pre_error; // 计算微分项double output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative; // 计算输出值pid->pre_error = error; // 保存上一次误差值return output;}int main() {PID_t pid = {1.0, 0.5, 0.1, 0.0, 0.0}; // PID参数初始化 double setpoint = 100.0; // 设定温度值double actual_temperature = 0.0; // 实际温度值double output = 0.0; // 输出值int i;for (i = 0; i < 100; i++) { // 模拟控制过程,迭代100次 output = pid_temperature_control(&pid, setpoint, actual_temperature); // 计算输出值printf("Time: %d, Setpoint: %f, ActualTemperature: %f, Output: %f\n", i, setpoint,actual_temperature, output); // 输出结果actual_temperature += output * 0.1; // 根据输出值调整实际温度值,模拟控制过程}return 0;}```在上面的示例中,我们首先定义了一个PID参数结构体,其中包含了比例系数、积分系数、微分系数、积分项和上一次误差等参数。

温度控制的PID算法-及C程序实现

温度控制的PID算法-及C程序实现

温度控制的PID算法-及C程序实现温度控制与PID算法温度控制与PID算法j较为复杂,下面结合实际浅显易懂的阐述一下PID控制理论,将温度控制及PID算法作一个简单的描述。

1.温度控制的框图这是一个典型的闭环控制系统,用于控制加热温区的温度(PV)保持在恒定的温度设定值(SV)。

系统通过温度采集单元反馈回来的实时温度信号(PV)获取偏差值(EV),偏差值经过PID调节器运算输出,控制发热管的发热功率,以克服偏差,促使偏差趋近于零。

例如,当某一时刻炉内过PCB板较多,带走的热量较多时,即导致温区温度下降,这时,通过反馈的调节作用,将使温度迅速回升。

其调节过程如下:温度控制的功率输出采用脉宽调制的方法。

固态继电器SSR的输出端为脉宽可调的电压U OUT 。

当SSR的触发角触发时,电源电压U AN通过SSR的输出端加到发热管的两端;当SSR的触发角没有触发信号时,SSR关断。

因此,发热管两端的平均电压为U d=(t/T)* U AN=K* U AN其中K=t/T,为一个周期T中,SSR触发导通的比率,称为负载电压系数或是占空比,K 的变化率在0-1之间。

一般是周期T固定不便,调节t, 当t在0-T的范围内变化时,发热管的电压即在0-U AN之间变化,这种调节方法称为定频调宽法。

下面将要描述的PID调节器的算式在这里的实质即是运算求出一个实时变化的,能够保证加热温区在外界干扰的情况下仍能保持温度在一个较小的范围内变化的合理的负载电压系数K。

2.温度控制的两个阶段温度控制系统是一个惯性较大的系统,也就是说,当给温区开始加热之后,并不能立即观察得到温区温度的明显上升;同样的,当关闭加热之后,温区的温度仍然有一定程度的上升。

另外,热电偶对温度的检测,与实际的温区温度相比较,也存在一定的滞后效应。

这给温度的控制带来了困难。

因此,如果在温度检测值(PV)到达设定值时才关断输出,可能因温度的滞后效应而长时间超出设定值,需要较长时间才能回到设定值;如果在温度检测值(PV)未到设定值时即关断输出,则可能因关断较早而导致温度难以达到设定值。

PID温度控制的PLC程序设计(梯形图语言)

PID温度控制的PLC程序设计(梯形图语言)

PID温度控制的PLC程序设计(梯形图语言)PID温度控制的PLC程序设计温度控制是许多机器的重要的构成部分。

它的功能是将温度控制在所需要的温度范围内,然后进行工件的加工与处理。

PID控制系统是得到广泛应用的控制方法之一。

在本文中,将详细讲叙本套系统。

l 系统组成本套系统采用Omron的PLC与其温控单元以及Pro-face的触摸屏所组成。

系统包括CQM1H-51、扩展单元TC-101、GP577R以及探温器、加热/制冷单元。

l 触摸屏画面部分(见图1-a)1-a如图所见,数据监控栏内所显示的002代表现在的温度,而102表示输出的温度。

如按下开始设置就可设置参数。

需要设置的参数有六个,分别是比例带、积分时间、微分时间、滞后值、控制周期、偏移量。

它们在PLC的地址与一些开关的地址如下所列。

比例带: DM51积分时间: DM52微分时间: DM53滞后值: DM54控制周期: DM55偏移量: DM56数据刷新: 22905l PLC程序部分002:PID的输入字102:PID的输出字[NETWORK]Name="Action Check" //常规检查[STATEMENTLIST]LD 253.13 //常ONOUT TR0CMP 002 #FFFF //确定温控单元是否完成初始化字串1AND NOT 255.06 //等于OUT 041.15 //初始化完成LD TR0AND 041.15OUT TR1AND NOT 040.10 //不在参数设置状态MOV DM0050 102 //将设置温度DM50传送给PID输出字LD TR1MOV 002 DM0057 //将002传送到DM57[NETWORK]Name="Setting Start"//设置开始[STATEMENTLIST]LD 253.13OUT TR0AND 229.05 //触摸屏上的开始设置开关DIFU 080.05 //设置微分LD TR0AND 041.15AND 080.05SET 040.01 //开始设置标志位1SET 040.10 //开始设置标志位2[NETWORK]Name="Poportion"//比例带设置[STATEMENTLIST]LD 040.01OUT TR0AND NOT 042.01MOV #C110 102 //读输出边与输入边的比例带CMP 002 #C110 //比较输入字是否变成C110AND 255.06 //等于SET 042.01 //设置比例带标志LD TR0AND 042.01MOV DM0051 102 //将比例带的设定值写入输出字CMP 002 DM0051 //是否写入AND 255.06 字串4RSET 040.01 //复位标志1RSET 042.01 //复位比例带标志SET 040.02 //向下继续设置标志[NETWORK]Name="Integral"//积分时间设置[STATEMENTLIST]LD 040.02OUT TR0AND NOT 042.02MOV #C220 102 //读输出边与输入边的积分CMP 002 #C220 //比较输入字是否变成C220AND 255.06SET 042.02 //设置积分标志LD TR0AND 042.02MOV DM0052 102 //将积分的设定值写入输出字CMP 002 DM0052 //是否写入AND 255.06RSET 040.02RSET 042.02SET 040.03 //向下继续设置标志[NETWORK]Name="differential"//微分时间设置[STATEMENTLIST]LD 040.03OUT TR0AND NOT 042.03MOV #C330 102 //读输出边与输入边的微分CMP 002 #C330 //比较输入字是否变成C330 AND 255.06SET 042.03 //设置微分标志LD TR0AND 042.03MOV DM0053 102 /将微分的设定值写入输出字CMP 002 DM0053 //是否写入字串3AND 255.06RSET 040.03RSET 042.03SET 040.04 //向下继续设置标志[NETWORK]Name="Hysteresis"//滞后值设置[STATEMENTLIST]LD 040.04OUT TR0AND NOT 042.04MOV #C440 102 //读输出边与输入边的滞后值CMP 002 #C440 //比较输入字是否变成C440 AND 255.06SET 042.04 设置滞后值标志LD TR0AND 042.04MOV DM0054 102 /将滞后值的设定值写入输出字CMP 002 DM0054 //是否写入AND 255.06RSET 040.04RSET 042.04SET 040.05 //向下继续设置标志[NETWORK]Name="Period"//控制周期设置[STATEMENTLIST]LD 040.05OUT TR0AND NOT 042.05MOV #C550 102 //读输出边与输入边的控制周期CMP 002 #C550 //比较输入字是否变成C550AND 255.06SET 042.05 //设置控制周期标志LD TR0AND 042.05MOV DM0055 102 将控制周期的设定值写入输出字CMP 002 DM0055 是否写入AND 255.06RSET 040.05RSET 042.05SET 040.06 //向下继续设置标志[NETWORK]Name="Shift"//偏移量设置[STATEMENTLIST]LD 040.06OUT TR0AND NOT 042.06MOV #C660 102 //读输出边与输入边的偏移量CMP 002 #C660 //比较输入字是否变成C660AND 255.06SET 042.06 //设置偏移量标志LD TR0AND 042.06MOV DM0056 102 //将偏移量的设定值写入输出字CMP 002 DM0056 //是否写入AND 255.06RSET 040.06RSET 042.06SET 040.00[NETWORK]Name="Return"//返回[STATEMENTLIST]LD 040.00OUT TR0AND NOT 042.00MOV #C070 102 //读输入边的处理值CMP 002 #C070 比较输入字变成C070AND 255.06SET 042.00 //返回标志LD TR0AND 042.00MOV DM0050 102 将设定温度值写入输出字RSET 040.00RSET 042.00RSET 040.10以上是本套系统的全部内容,经过反复试验,此系统可以维持温度在1°C之间变化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
unsigned int Integral; // 积分常数 Integral Const
unsigned int Derivative; // 微分常数 Derivative Const
unsigned int LastError; // Error[-1]
unsigned int PrevError; // Error[-2]
pp->LastError = Error;
return (pp->Proportion * Error // 比例项
+ pp->Integral * pp->SumError // 积分项
+ pp->Derivative * dError); // 微分项
}
/***********************************************************
delay(4); /*延时80us以完成此次都时序,之后再读下一数据*/
}
EA=1;
return(value);
}
/***********************************************************
复位子程序
***********************************************************/
unsigned char reset()
{
unsigned char presence;
EA=0;
DQ=0; /*拉低DQ总线开始复位*/
delay(30); /*保持低电平480us*/
void write_bit(unsigned char bitval)
{
EA=0;
DQ=0; /*拉低DQ以开始一个写时序*/
if(bitval==1)
{
_nop_();
DQ=1; /*如要写1,则将总线置高*/
void PIDInit (struct PID *pp)
{
memset ( pp,0,sizeof(struct PID));
}
/*====================================================================================================
sbit data1=P1^0;
sbit clk=P1^1;
sbit plus=P2^0;
sbit subs=P2^1;
sbit stop=P2^2;
sbit output=P3^4;
sbit DQ=P3^3;
unsigned char flag,flag_1=0;
unsigned char high_time,low_time,count=0;//占空比调节参数
value_bit=DQ;
EA=1;
return(value_bit);
}
/***********************************************************
读一字节数据子程序
***********************************************************/
}
/*====================================================================================================
Initialize PID Structure
=====================================================================================================*/
温度比较处理子程序
***********************************************************/
compare_temper()
{
unsigned char i;
if(set_temper>temper)
{
if(set_temper-temper>1)
for(n=0;n<time;n++)
for(m=0;m<2;m++){}
}
/***********************************************************
写一位数据子程序
***********************************************************/
写一字节数据子程序
***********************************************************/
void write_byte(unsigned char val)
{
unsigned char i;
unsigned char temp;
unsigned int SumError; // Sums of Errors
};
struct PID spid; // PID Control Structure
unsigned int rout; // PID Response (Output)
unsigned int rin; // PID Feedback (Input)
PID计算部分
=====================================================================================================*/
unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
DQ=1; /*释放总线*/
delay(3);
presence=DQ; /*获取应答信号*/
delay(28); /*延时以完成整个时序*/
EA=1;
return(presence); /*返回应答信号,有芯片应答返回0,无芯片则返回1*/
{
unsigned int dError,Error;
Error = pp->SetPoint - NextPoint; // 偏差
pp->SumError += Error; // 积分
dError = pp->LastError - pp->PrevError; // 当前微分
pp->PrevError = pp->LastError;
}
delay(7); /*延时120us后*/
// TR0=1;
EA=1;
}
/***********************************************************
读一位数据子程序
***********************************************************/
unsigned char read_bit()
{
unsigned char i,value_bit;
EA=0;
DQ=0; /*拉低DQ,开始读时序*/
_nop_();
_nop_();
DQ=1; /*释放总线*/
for(i=0;i<2;i++){}
}
delay(5); /*延时90us供DA18B20采样*/
DQ=1; /*释放DQ总线*/
_nop_();
_nop_();
EA=1;
}
/***********************************************************
延时子程序,延时时间以12M晶振为准,延时时间为30us×time
***********************************************************/
void delay(unsigned char time)
{
unsigned char m,n;
j=read_byte();
i=read_byte();
i=(i<<4)&0x7f;
s=(unsigned int)(j&0x0f);
s=(s*100)/16;
j=j>>4;
temper=i|j; /*获取的温度放在temper中*/
#include<reg51.h>
#include<intrins.h>
#include<math.h>
#include<string.h>
struct PID {
unsigned int SetPoint; // 设定目标 Desired Value
unsigned t Proportion; // 比例常数 Proportional Const
{
high_time=100;
low_time=0;
}
else
{
for(i=0;i<10;i++)
{ get_temper();
EA=0;
相关文档
最新文档