51温度PID调节实验报告

合集下载

pid控制实验报告

pid控制实验报告

pid控制实验报告实验报告:PID控制一、实验目的通过本实验,我们的目的是深入了解PID(比例、积分、微分)控制算法,理解其在实际控制中的应用,掌握PID参数的调整方法。

二、实验原理PID控制是依据被控对象的误差(偏差)与时间的积分、微分关系来确定控制器输出的控制方式。

具体来说,PID控制器输出的控制量=Kp*(当前误差+上次误差*dt+所有误差的积分),其中Kp、Ki和Kd分别为比例系数、积分系数和微分系数。

它通过对偏差的补偿,使得被控对象能够在振荡绕过设定值、稳定达到设定值的过程中快速、准确定位设定值。

三、实验设备本实验采用的设备为PID控制器、液晶显示屏、电压控制电机和传感器。

四、实验步骤1. 首先,我们需要将系统设为手动调节状态,关闭控制器。

2. 然后,我们将传感器和记录仪建立起连接。

3. 将系统调整为自动控制状态,让控制器自行计算控制量、作出相应控制。

4. 调整PID控制器的Kp系数,以调整控制精度。

5. 调整PID控制器的Ki系数,以调整控制的灵敏度。

6. 调整PID控制器的Kd系数,以调整控制器的稳定性。

7. 最终完成调整后,我们可以用振荡器数据展示出来实验结果。

五、实验结果在完成调整后,我们得出的控制器输出的控制量稳定在理论值附近,在控制精度与控制的灵敏度达到较好平衡的情况下,控制器的稳定性得到了保证。

实验结果具有较好指导意义。

六、结论本实验通过掌握PID控制算法的实际应用方法,以及对参数的合理设置为基础,完成了对PID控制器各参数调整技巧的掌握,极大地丰富了实验基础技能。

同时,实验结果为之后的实际应用提供了参考,有着极其重要的现实意义。

pid实验报告

pid实验报告

pid实验报告PID实验报告引言:PID控制器是一种常用的自动控制器,它通过调整输出信号来使被控对象的实际值与期望值尽可能接近。

在本次实验中,我们将通过设计一个PID控制器来控制一个温度系统,以验证PID控制器的性能和效果。

实验目的:1. 理解PID控制器的原理和工作方式;2. 掌握PID控制器的参数调节方法;3. 验证PID控制器在温度控制系统中的应用效果。

实验装置:1. 温度传感器:用于测量被控对象的温度;2. 控制器:采用PID控制算法,根据测量值和设定值计算控制信号;3. 加热器:根据控制信号调节加热功率;4. 温度系统:被控对象,通过加热器调节温度。

实验步骤:1. 搭建实验装置:将温度传感器放置在温度系统中,连接到控制器的输入端;将控制器的输出端连接到加热器;2. 参数调节:根据实际情况,初步设定PID控制器的参数,包括比例系数Kp、积分时间Ti和微分时间Td;3. 实验运行:设置温度设定值,观察温度系统的响应,并记录数据;4. 参数优化:根据实验结果,调整PID控制器的参数,使温度系统的响应更加稳定和准确;5. 重复实验:反复进行参数调节和实验运行,直到达到满意的控制效果。

实验结果:通过多次实验和参数调节,我们得到了一个较为理想的PID控制器参数设置,使温度系统的响应速度较快且稳定。

实验结果表明,PID控制器能够有效地控制温度系统,使其实际温度与设定值之间的误差保持在可接受范围内。

讨论与分析:1. 比例系数Kp的调节:较大的Kp值会使系统响应速度快,但可能导致系统震荡;较小的Kp值则会使系统的稳定性提高,但响应速度较慢。

因此,在实际应用中需要根据具体要求进行调节。

2. 积分时间Ti的调节:较大的Ti值可以减小系统的稳态误差,但可能导致系统响应速度变慢和超调现象;较小的Ti值则会使系统的响应速度提高,但可能导致稳态误差增大。

因此,需要在稳态误差和响应速度之间进行权衡。

3. 微分时间Td的调节:较大的Td值可以提高系统的稳定性,减小超调现象,但可能导致系统响应速度变慢;较小的Td值则会使系统的响应速度提高,但可能导致系统震荡。

基于51单片机的水温测控系统实验报告

基于51单片机的水温测控系统实验报告
if(duty_tem<0)
duty_tem=0;
if(duty_tem>=100)
duty_tem=100;
duty=floor(duty_tem)/2;//u最大值为50
if(duty_tem<0) pout=1;
else pout=0;
return (pout);
}
///////////////////////
uchar num2[13]={0x4E,0x4F,0x57,0x54,0x3A,0,0,0,0x2E,0,0xDF,0x43};
unsigned int settemp=500,nowtemp;
unsigned char timecount=0;
bit adflag,showflag; //ad标志位
{
while(XBYTE[0xa001]&0x80);//等待可写
XBYTE[0xa002]=(data1);//向数据端口写入数据
}
void writeString(uchar data1[],int len)
{
int k=0;
for(k=0;k<len;k++)//写入字符串
writeData(data1[k]);
摘要
本次实验是软硬件相结合的实验,通过传感器得到的阻值与其它电阻,可以搭建一个电桥,将水温转化为电压,然后通过放大器将电压放大到所需要的值,将所得的电压送入单片机的AD转换电路,将模拟信号转换成数字信号,从而在单片机的液晶屏上显示当前的温度。此烧水壶是可控制的,即设定温度,使水加热到设定温度且保温,此控制算法采用PID控制算法来控制继电器的通断,来保证水温恒定在设定温度处。
}

PID实验报告范文

PID实验报告范文

PID实验报告范文PID(Proportional-Integral-Derivative)是一种常用于控制系统的算法,它根据当前的误差值和历史误差值的积累来调整控制量,从而实现系统的稳定性和精确性。

在本次实验中,我们将学习如何使用PID算法来控制一个简单的温度控制系统。

实验步骤:1.实验准备:准备一个温度传感器、一个发热器以及一个温度控制器。

将温度传感器安装在控制对象上,将发热器与温度控制器连接,并将温度控制器连接到计算机。

2.确定控制目标:我们的目标是将系统的温度稳定在一个特定的温度值。

在本次实验中,我们将目标温度设定为50°C。

3.参数调整:调整PID控制器的三个参数,即比例系数Kp、积分系数Ki和微分系数Kd。

开始时,我们可以将这些参数设置为一个合理的初始值,例如Kp=1,Ki=0.1,Kd=0.014.实验记录:记录系统的温度变化过程。

在开始实验之前,将控制对象的温度设定为初始温度,并将PID控制器的输出设定为零。

记录系统的温度、控制量和误差值。

5.PID计算:根据当前的误差值、历史误差值和时间间隔,计算PID控制器的输出。

6.控制实施:根据PID控制器的输出,控制发热器的加热功率。

根据输出值的大小调整发热器的功率大小。

7.实验分析:观察系统的温度变化过程,并分析PID控制器的参数调整对系统性能的影响。

根据实验结果,调整PID参数,使系统的稳态和动态响应性能都较好。

实验结果:我们进行了多组实验,可以观察到系统温度在初始阶段有较大的波动,但随着时间的推移,温度开始逐渐稳定在目标温度附近。

通过对PID参数进行调整,我们发现参数的选择对系统的稳定性和响应速度有很大影响。

当比例系数Kp较大时,系统对误差的响应速度很快,但也容易引起过冲现象,导致系统产生振荡。

因此,我们需要根据实际需求进行调整,找到一个合适的值。

当积分系数Ki较大时,系统对积累误差的反应较快,可以很好地消除稳态误差,但也容易引起系统的超调。

pid控制实验报告

pid控制实验报告

pid控制实验报告PID控制实验报告引言PID控制是一种常用的控制算法,广泛应用于工业自动化系统中。

本实验旨在通过实际的PID控制实验,验证PID控制算法的效果和优势,并对PID控制的原理、参数调节方法等进行探讨和分析。

一、实验目的本次实验的目的是通过一个简单的温度控制系统,使用PID控制算法来实现温度的稳定控制。

通过实验,验证PID控制算法的有效性和优越性,掌握PID控制的基本原理和参数调节方法。

二、实验设备和原理本实验所用的设备为一个温度控制系统,包括一个温度传感器、一个加热器和一个控制器。

温度传感器用于实时检测环境温度,加热器用于调节环境温度,控制器用于实现PID控制算法。

PID控制算法是基于误差的反馈控制算法,其主要原理是通过不断地调整控制器的输出信号,使得系统的实际输出与期望输出之间的误差最小化。

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

比例控制通过比例系数调整控制器的输出信号与误差的线性关系;积分控制通过积分系数调整控制器的输出信号与误差的积分关系;微分控制通过微分系数调整控制器的输出信号与误差的微分关系。

通过合理调节这三个系数,可以实现对系统的精确控制。

三、实验步骤1. 搭建温度控制系统:将温度传感器、加热器和控制器连接在一起,确保信号传输的正常。

2. 设置期望温度:根据实验要求,设置一个期望的温度作为控制目标。

3. 调节PID参数:根据实验的具体要求和系统的特性,调节PID控制器的比例系数、积分系数和微分系数,使得系统的响应速度和稳定性达到最佳状态。

4. 开始实验:启动温度控制系统,观察实际温度与期望温度的变化情况,记录实验数据。

5. 数据分析:根据实验数据,分析PID控制算法的效果和优势,总结实验结果。

四、实验结果与讨论通过实验,我们得到了一系列的实验数据。

根据这些数据,我们可以进行进一步的分析和讨论。

首先,我们观察到在PID控制下,温度的稳定性得到了显著的提高。

PID自控原理实验报告范文pid调节实验报告范文

PID自控原理实验报告范文pid调节实验报告范文

PID自控原理实验报告范文pid调节实验报告范文自动控制原理实验——第七次实验实验目的了解数字PID控制的特点,控制方式。

理解和掌握连续控制系统的PID控制算法表达式。

了解和掌握用试验箱进行数字PID控制过程。

观察和分析在标PID控制系统中,PID参数对系统性能的影响。

实验内容1、数字PID控制一个控制系统中采用比例积分和微分控制方式控制,称之为PID控制。

数字PID控制器原理简单,使用方便适应性强,可用于多种工业控制,鲁棒性强。

可以用硬件实现,也可以用软件实现,也可以用如见硬件结合的形式实现。

PID控制常见的是一种负反馈控制,在反馈控制系统中,自动调节器和被控对象构成一个闭合回路。

模拟PID控制框图如下:U(s)U(s)E(s)KpKiKd输出传递函数形式:其中Kp为调节器的比例系数,Ti为调节器的积分常数,Td是调节器的微分常数。

2、被控对象数学模型的建立1)建立模型结构在工程中遇到的实际对象大多可以表示为带时延的一阶或二价惯性环节,故PID整定的方法多从这样的系统入手,考虑有时延的单容被控过程,其传递函数为:这样的有时延的单容被控过程可以用两个惯性环节串联组成的自平衡双容被控过程来近似,本实验采用该方式作为实验被控对象,如图3-127所示。

2)被控对象参数的确认对于这种用两个惯性环节串联组成的自平衡双容被控过程的被控对象,在工程中普遍采用单位阶跃输入实验辨识的方法确认和τ,以达到转换成有时延的单容被控过程的目的。

单位阶跃输入实验辨识的原理方框如图3-127所示。

对于不同的T1、T2和K值,得到其单位阶跃输入响应曲线后,由和得到和,再利用拉氏反变换公式得到To=To=t2-t1Ln1-Yoτ=t2Ln1-Yot13、采样周期的选择采样周期选择0.05s。

4、数字PID调节器控制参数的工程整定方法虽然PID调节可全面、综合的考虑系统的各项性能,但在工程实际中,考虑到工程造价和调节器的易于实现,长采用PID三个参数来对系统进行校正。

PID温度控制实验

PID温度控制实验

PID 温度控制实验PID(ProportionalIntegralDerivative)控制是最早发展起来的控制策略之一,它根据系统的误差,利用比例、积分、微分计算出控制量对系统进行控制。

当我们不彻底了解一个系统和被控对象,或者不能通过有效的测量手段来获得系统参数时,最适合用 PID 控制技术。

由于其算法简单、鲁棒性好和可靠性高,被广泛应用于工业过程控制。

PID 调节控制是一个传统控制方法,它合用于温度、压力、流量、液位等几乎所有现场,不同的现场,仅仅是 PID 参数应设置不同,只要参数设置得当均可以达到很好的效果。

本实验以 PID 温度控制为例,通过此实验可以加深对检测技术、自动控制技术、过程控制等专业知识的理解。

2、掌握正校实验的方法,并用正交实验法来确定最佳 P、I、D 参数3、会求根据温度变化曲线求出相应的超调量、稳态误差和调节时间的方法二、仪器与用具加热装置、加热控制模块、单片机控制及显示模块、配套软件、电脑。

三、实验原理1、数字 PID 控制原理数字 PID 算法是用差分方程近似实现的,用微分方程表示的 PID 调节规律的理想算式为:1de(t)u(t)KP[e(t)e(t)dtTD] (1)TI0dt 单片机只能处理数字信号,上式可等价于:tTUnKP[enTIeii0nTD(enen1)] (2) TTTenD(en2en1en2)] (3) TIT (2) 式为位置式 PID 算法公式。

也可把(2)式写成增量式 PID 算法形式: UnUnUn1KP[enen1 其中,en 为第 n 次采样的偏差量; en-1 为第 n-1 次采样的偏差量; T 为采样周期; TI 为积分时间;TD 为微分时间; KP 为比例系数。

2、PID 温度控制的框图设定温度(SV)温度偏差(EV)(EV=SV-PV)PID 调节器按周期调节脉冲宽度输出加热装置实际温度(PV)图 1PID 温度控制的框图温度 PID 控制是一个反馈调节的过程:比较实际温度(PV)和设定温度(SV)的偏差,偏差值经过 PID 调节器运算来获得控制信号,由该信号控制加热丝的加热时间,达到控制加热功率的目的,从而实现对系统的温度控制。

51温度PID调节实验报告

51温度PID调节实验报告

成绩:重庆邮电大学自动化学院综合实验报告题目:51系列单片机闭环温度控制实验学生姓名:***班级:0811103学号:**********同组人员:黄酉指导教师:***完成时间:2014年12月一、实验要求及分工情况51系列单片机闭环温度控制实验——基于Protuse仿真实验平台实现要求:1. 设计硬件电路:温度检测:采用热电偶或热电阻温度给定:采用电位器进行模拟电压给定,0——5VAD转采用12位转换显示采用8位LED,或者LCD1602显示键盘4X4,PID等参数通过键盘设置。

2. 软件控制算法:数字PID,参数在线修改。

显示窗口:显示温度的设置值SV、温度的实际值PV。

实际温度值,温度峰值、峰值时间等通过串口上传到上位机(选做)具体分工:黄酉负责系统设计思想导向与编程;霍栋博负责辅助编程与编写报告与Proteus仿真。

二、实验内容(实验原理介绍)1、电路的总体工作原理温度控制系统采用AT89S51八位机作为微处理单元进行控制。

采用4X4键盘把设定温度的最高值和最低值存入单片机的数据存储器,还可以通过键盘完成温度检测功能的转换。

温度传感器把采集的信号与单片机里的数据相比较来控制温度控制器。

机AT89S51为测控系统的核心来完成数据采集、处理、显示、报警等功能。

选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。

该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到AT89S51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器为点阵字符LCD,1602液晶模块。

检测范围5摄氏度到60摄氏度。

本系统除了显示温度以外还可以设置一个温度值,对所测温度进行监控,当温度高于或低于设定温度时,开始报警并启动相应程序(温度高于设定温度时,风扇开;当温度低于设定温度时,加热器开)。

pid控制实验报告[最新版]

pid控制实验报告[最新版]

pid控制实验报告pid控制实验报告篇一:PID控制实验报告实验二数字PID控制计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。

因此连续PID控制算法不能直接使用,需要采用离散化方法。

在计算机PID控制中,使用的是数字PID控制器。

一、位置式PID控制算法按模拟PID控制算法,以一系列的采样时刻点kT代表连续时间t,以矩形法数值积分近似代替积分,以一阶后向差分近似代替微分,可得离散PID位置式表达式:Tu T ?kpeu=para; J=0.0067;B=0.1; dy=zeros= y= -+ = k*ts; %time中存放着各采样时刻rineu_1=uerror_1=error;%误差信号更新图2-1 Simulink仿真程序其程序运行结果如表2所示。

Matlab输出结果errori = error_1 = 表2 例4程序运行结果三、离散系统的数字PID控制仿真1.Ex5 设被控对象为G?num 仿真程序:ex5.m%PID Controller clear all; close all;篇二:自动控制实验报告六-数字PID控制实验六数字PID控制一、实验目的1.研究PID控制器的参数对系统稳定性及过渡过程的影响。

2.研究采样周期T对系统特性的影响。

3.研究I型系统及系统的稳定误差。

二、实验仪器1.EL-AT-III型自动控制系统实验箱一台 2.计算机一台三、实验内容1.系统结构图如6-1图。

图6-1 系统结构图图中 Gc(s)=Kp(1+Ki/s+Kds) Gh(s)=(1-e)/s Gp1(s)=5/((0.5s+1)(0.1s+1)) Gp2(s)=1/(s(0.1s+1))-TS 2.开环系统(被控制对象)的模拟电路图如图6-2和图6-3,其中图6-2对应GP1(s),图6-3对应Gp2(s)。

图6-2 开环系统结构图1 图6-3开环系统结构图2 3.被控对象GP1(s)为“0型”系统,采用PI控制或PID控制,可使系统变为“I型”系统,被控对象Gp2(s)为“I型”系统,采用PI控制或PID控制可使系统变成“II型”系统。

51单片机PID控制直流电机实验报告

51单片机PID控制直流电机实验报告
char code table[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, //0~7 对应数码 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //8~F 对应数码 long int n=num; P0 = 0; P2 =0x7f; P0 = table[n % 1000/100]; delayms(2);//百位 加小数点 P0 = 0; P2 =0xbf; P0 = table[n % 100 / 10]; delayms(2);//十位
iError = sptr->SetPoint - NextPoint; //计算增加量
iIncpid = sptr->Proportion * iError //E[k]项
- sptr->Integral * sptr->LastError //E[k-1]项
+ sptr->Derivative * sptr->PrevError; //E[k-2]项
static PID *sptr = &sPID;
void IncPIDInit()
{
sptr->SumError = 0;
sptr->LastError =0; //Error[-1]
sptr->PrevError =0; //Error[-2]
sptr->Proportion =0.5; //比例系数
sptr->Integral =0.3; //积分系数
sptr->Derivative = 0.3; //微分系数
sptr->SetPoint =sudu_lilun; Nhomakorabea}

pid 实验报告

pid 实验报告

pid 实验报告PID 实验报告引言在自动控制领域中,PID(比例-积分-微分)控制器是一种常见且广泛应用的控制算法。

本实验旨在通过实际应用和实验验证,探讨PID控制器的原理、特点以及在工程领域中的应用。

一、PID控制器的原理PID控制器是一种反馈控制算法,其基本原理是根据系统的误差信号进行调整,以达到期望的控制效果。

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

1.1 比例控制(P)比例控制是根据误差的大小来调整输出信号的幅度,其公式为:P = Kp * e(t)其中,P为比例控制的输出,Kp为比例增益,e(t)为当前时刻的误差。

1.2 积分控制(I)积分控制是根据误差的累积值来调整输出信号的幅度,其公式为:I = Ki * ∫e(t)dt其中,I为积分控制的输出,Ki为积分增益,∫e(t)dt为误差的累积值。

1.3 微分控制(D)微分控制是根据误差变化的速率来调整输出信号的幅度,其公式为:D = Kd * de(t)/dt其中,D为微分控制的输出,Kd为微分增益,de(t)/dt为误差的变化率。

综合以上三个部分,PID控制器的输出为:PID = P + I + D二、PID控制器的特点2.1 稳定性PID控制器具有良好的稳定性,能够在系统受到外界扰动时,通过调整输出信号来保持系统的稳定运行。

2.2 响应速度PID控制器能够根据误差的大小和变化率来调整输出信号,从而实现快速响应。

当误差较大且变化迅速时,PID控制器会加大输出信号的幅度,以尽快达到期望值。

2.3 鲁棒性PID控制器对于系统参数的变化和外界干扰具有一定的鲁棒性。

通过合理设置PID参数,可以使系统在一定范围内保持稳定性和良好的控制效果。

三、PID控制器在工程领域中的应用PID控制器广泛应用于各个工程领域,如温度控制、速度控制、位置控制等。

3.1 温度控制在工业生产中,许多过程需要对温度进行控制,以确保产品质量和生产效率。

《温度控制实训报告PID控制的PLC编程》

《温度控制实训报告PID控制的PLC编程》

实训名称实训五PID控制的PLC编程实训日期一、实训目的:(1)进一步熟悉PLC的模拟量输入输出端的电路连接;(2)掌握PID控制原理;(3)运用PID向导生成PID子程序,实现模拟量输出的PID控制;(4)进一步熟悉S7-Smart编程软件的编程及调试;二、实训要求:PID控制的程序设计。

从AIW18读入PID控制的给定温度,电位器中心头0~10V,对应温度0~100度,并在触摸屏的AI1显示读数。

PID实际温度从AIW16读入,同时在触摸屏的AI0显示读数。

三、实训设备:计算机、PLC、Demo实训箱四、实训内容:(1) 写出PID控制的向导操作过程;(1)首先在项目树中双击PID向导,弹出PID回路向导对话框,选择到组态的回路数,如图所示:第 1 页共 6 页指导老师签名苏州市职业大学实训报告院系电子信息工程学院班级12电气4 姓名颜泽凯学号 127301436 实训名称实训五PID控制的PLC编程实训日期三、实训小结在这次实训中学到了许多细节上的问题,比如,参数配置,模块功能参数。

通过实训老师的指导我们把这问题都解决了,收获很大。

这是一个系统的组建,调试,运行以达到预先设定目标。

每一个步骤都必须准确,每一操作都必须到位。

通信的连接不能输入错误的地址,必须输入相应的正确可用地址,否则设备无法连接,不能工作,甚至损坏系统。

在做工程时,我们应该懂得团结的力量,不要只靠自己一人的力量去解决很多问题,这样既会耗费自己的能量也会浪费时间。

要有团队意识,分工合作,每个人充分发挥自己的长处,为整个集体做最大的贡献。

只有这样才能提高工程的效率和质量。

我们相互合作,共同努力,攻克难关,展现了团队精神。

第 6 页共 6 页指导老师签名。

pid的控制作用实验报告

pid的控制作用实验报告

pid的控制作用实验报告一、实验目的本次实验的主要目的是深入研究和理解 PID(比例积分微分)控制器在控制系统中的作用,并通过实际实验观察和分析其对系统性能的影响。

二、实验原理PID 控制器是一种常见的反馈控制算法,它由比例(P)、积分(I)和微分(D)三个部分组成。

比例控制部分根据误差的大小成比例地调整控制输出,其作用是快速减少误差,但不能完全消除稳态误差。

积分控制部分则对误差进行积分,随着时间的积累,积分项可以消除稳态误差,但可能会导致系统响应变慢。

微分控制部分根据误差的变化率来调整控制输出,它能够预测误差的变化趋势,提前进行调整,从而改善系统的动态性能,减少超调量和调节时间。

PID 控制器的输出为这三个部分的总和:$u(t) = K_p e(t) + K_i\int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt}$其中,$u(t)$是控制器的输出,$e(t)$是设定值与实际值之间的误差,$K_p$ 是比例系数,$K_i$ 是积分系数,$K_d$ 是微分系数。

三、实验设备与环境1、实验设备控制器:采用可编程逻辑控制器(PLC)或微控制器作为 PID 控制器。

执行机构:例如电机、阀门等。

传感器:用于测量系统的输出,如温度传感器、压力传感器等。

数据采集卡:用于采集传感器的数据并传输给计算机。

计算机:用于运行控制算法和数据分析软件。

2、实验环境温度:室温(约 25℃)湿度:50% 70%四、实验步骤1、系统建模首先,对实验对象进行建模,确定其传递函数或状态空间模型。

通过实验测量或理论分析,获取系统的参数,如时间常数、增益等。

2、参数整定采用试凑法或 ZieglerNichols 等整定方法,初步确定 PID 控制器的参数$K_p$、$K_i$ 和$K_d$。

观察系统的响应,根据性能指标(如超调量、调节时间、稳态误差等)对参数进行调整,直到获得满意的控制效果。

pid温度控制实验报告

pid温度控制实验报告

pid温度控制实验报告本实验旨在设计和实现PID温度控制系统,通过控制电热水壶水温,检验PID控制系统在温度控制方面的效果。

一、设计和建立PID温度控制系统本实验采用Arduino开发板作为控制器,其中温度传感器采用DS18B20数字温度传感器,用于感知电热水壶内部的温度。

为了控制电热水壶的加热和停止加热,我们采用继电器模块,通过控制继电器的开关状态来实现电热水壶的加热和停止加热。

本实验还采用了LCD1602液晶显示屏,显示实时温度数据和PID控制结果。

PID控制器由三个部分组成,分别是P(proportional)、I(integral)、D(derivative),它能够根据被控对象的反馈信号及预设值,计算出控制量,实现控制目标。

在本实验中,我们需要控制电热水壶加热时的水温,设定的目标温度为40℃。

二、实验步骤1、硬件连接连接Arduino开发板和其他硬件模块,电热水壶的加热和停止加热分别由继电器的开关状态来实现。

2、编程实现编写程序,包括温度检测、PID控制计算、控制电热水壶加热和停止加热、LCD显示等功能模块。

具体的程序实现细节见下文。

3、调试进行调试,测试温度控制系统的效果。

三、实验结果电热水壶温度控制的PID算法具体实现如下:``` c++// 定义PID控制器struct PID{float Kp; // P参数float Ki; // I参数float Kd; // D参数float pre_error; //上次误差float integral; //积分值} pid;pid.Kp = 5; // 由系统特性等确定pid.Ki = 0.1;pid.Kd = 1;const int relayPin = 2; // 继电器控制引脚2const int ledPin = 13; // LED控制引脚13void setup(){Serial.begin(9600);lcd.begin(16,2);pinMode(relayPin, OUTPUT);lcd.display();lcd.clear();// 变量初始化pid.pre_error = 0;pid.integral = 0;}void loop(){// 读取温度float temp = getTemperature();// 计算PIDfloat error = setpoint - temp;pid.integral += error * sampleTime;float derivative = (error - pid.pre_error) / sampleTime;float output = pid.Kp * error + pid.Ki * pid.integral + pid.Kd *derivative;// 控制电热水壶if(output > 0){digitalWrite(relayPin, HIGH); digitalWrite(ledPin, HIGH); }else{digitalWrite(relayPin, LOW); digitalWrite(ledPin, LOW); }// 保存本次误差pid.pre_error = error;// 显示温度和PID值lcd.setCursor(0, 0);lcd.print("Temp:");lcd.print(temp, 1);lcd.setCursor(0, 1);lcd.print("PID :");lcd.print(output, 1);// 延时一段时间delay(sampleTime);}// 读取温度float getTemperature(){byte data[12];byte addr[8];if ( !ds.search(addr)){ds.reset_search();delay(250);return -1000;}if ( OneWire::crc8( addr, 7) != addr[7]){Serial.println("CRC is not valid!");return -1000;}if ( addr[0] != 0x28){Serial.println("Device is not a DS18B20 family device."); return -1000;}ds.reset();ds.select(addr);ds.write(0x44,1);byte present = ds.reset();ds.select(addr);ds.write(0xBE);for (int i = 0; i < 9; i++){data[i] = ds.read();}int16_t raw = (data[1] << 8) | data[0];if (type_s){raw = raw << 3;if (data[7] == 0x10){raw = (raw & 0xFFF0) + 12 - data[6];}}else{byte cfg = (data[4] & 0x60);if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms// default is 12 bit resolution, 750 ms conversion time}float celsius = (float)raw / 16.0;return celsius;}```实验通过控制器成功将水温控制在设定值40℃左右,且温度波动很小,表明PID控制器具有很好的控制效果。

数字pid实验报告

数字pid实验报告

数字pid实验报告数字PID实验报告引言:PID控制器是一种常见的控制器,广泛应用于工业自动化领域。

它通过不断调整输出信号,使被控对象的实际值与设定值尽可能接近,从而实现稳定控制。

本实验旨在通过数字PID控制器的设计与实现,探索其在控制系统中的应用。

一、实验目的本实验的主要目的是通过设计与实现数字PID控制器,研究其在控制系统中的性能与应用。

具体目标如下:1. 了解PID控制器的原理与基本结构;2. 掌握数字PID控制器的设计方法;3. 通过实验验证数字PID控制器的性能与稳定性。

二、实验原理PID控制器由比例控制器(P)、积分控制器(I)和微分控制器(D)组成。

其输出信号由这三个部分的加权和构成,分别对应于控制器的比例、积分和微分作用。

比例控制器根据被控对象的偏差大小进行调整,积分控制器根据偏差的积分进行调整,而微分控制器则根据偏差的变化率进行调整。

数字PID控制器是对传统PID控制器的一种改进,其主要特点是使用数字计算器来实现控制算法。

在数字PID控制器中,连续的时间变量被离散化为离散的时间变量,通过采样和量化,将控制信号转换为数字信号进行处理。

离散化的控制算法可以通过计算机进行实现,从而提高控制精度和稳定性。

三、实验器材与方法1. 实验器材:- 控制系统实验平台- 数字PID控制器模块- 电源供应器- 电压表、电流表等测量仪器2. 实验方法:(1) 搭建控制系统实验平台,将被控对象与数字PID控制器模块连接;(2) 设定被控对象的目标值,并调整PID控制器的参数;(3) 启动实验平台,观察被控对象的实际值与目标值的变化,并记录数据;(4) 根据实验数据,分析PID控制器的性能与稳定性。

四、实验结果与讨论在本实验中,我们选择了一个温度控制系统作为被控对象,通过数字PID控制器来实现温度的稳定控制。

在实验过程中,我们调整了PID控制器的参数,并记录了被控对象的实际温度值与目标温度值。

通过实验数据的分析,我们可以得出以下结论:1. 比例控制器的参数对系统的响应速度有重要影响。

pid控制实验报告

pid控制实验报告

pid控制实验报告引言:PID(Proportional-Integral-Derivative)控制是一种常用的控制算法,广泛应用于自动控制系统中。

PID控制器通过不断调整控制量,使得被控对象的输出尽可能接近所期望的目标值。

本文将对PID控制实验进行详细介绍。

实验目的:通过实验,掌握PID控制器的基本原理和工作方式,熟悉PID 参数的调节方法,了解PID控制器在不同系统中的应用。

实验器材:1. 一台计算机2. 编程软件(如MATLAB)3. 实验装置(可选项,如温度控制装置、电机等)实验步骤:1. 确定实验对象:可以选择温度控制装置、水位控制装置或电机等,根据实际需求进行选择。

2. 设计PID控制器:根据实验对象的特性和目标,设计合适的PID控制器,包括确定比例系数KP、积分系数KI和微分系数KD。

3. 参数调节:通过试验和分析,调节PID参数,使得控制系统的性能最优。

4. 实验记录和分析:记录实验数据,并进行分析,评估PID控制器的性能和稳定性。

实验结果:实验结果将根据实际情况有所不同,这里以温度控制装置为例进行讨论。

1. 初始状态:实验开始时,温度控制装置处于初始状态,温度与目标温度存在误差。

2. 比例控制作用:PID控制器根据比例系数KP对误差进行处理,并输出相应的控制量。

当误差较大时,控制量较大,加快系统的响应速度。

随着误差减小,控制量逐渐减小,使系统温度逐渐接近目标温度。

3. 积分控制作用:当误差存在积累时,积分控制作用发挥作用,通过积分系数KI 对误差进行处理。

积分控制可以消除稳态误差,使得系统温度更加稳定。

4. 微分控制作用:微分控制主要处理误差的变化率,通过微分系数KD对误差变化的斜率进行处理。

微分控制可以提高系统的稳定性和响应速度。

5. 参数调节:在实验过程中,根据实际的系统响应和性能要求,通过试验和分析逐步调节PID参数,使得系统的控制响应更加稳定和准确。

实验分析:PID控制器在实验中的表现取决于PID参数的选择和调节。

基于51单片机的PID调温(热得快)资料

基于51单片机的PID调温(热得快)资料

《自动控制原理》课程设计指导老师:邹恩年级专业:13 自动化 4 班姓名学号(分工) 韩锦澎 201330280107(电路设计) 韦伊玲 201330280219 (程序编写) 徐敏芳 201330280723 (焊接调试) 王可欣 201330280102 (论文)2015年1月7 日1目录1. 系统设计方案......................................................3 1.1 方案一........................................................3 1.2 方案二 .......................................................3 1.3 方案三........................................................3 1.4 方案的比较和确定..............................................3 2.系统硬件部分设计...................................................3 2.1 系统硬件电路图 ...............................................3 2.1.1 单片机 AT89C52 ..........................................4 2.1.2 单片机与 LCD 通信连接 ....................................4 2.1.3 其他电路模块及总电路 .......................................5 3 系统软件部分 .......................................................5 3.1 系统的主流程图如下............................................5 4.温度控制系统 PID 调节...............................................6 4.1 PID 控制传递函数..............................................6 4.2 PID 参数调节方法..............................................6 4.3 PID 参数设定..................................................6 5.实验与调试.........................................................7 6.总论...............................................................8 附 录.............................................................8参 考 文 献.........................................................2421. 系统设计方案1.1 方案一 选用铂电阻温度传感器。

PID实验报告范文

PID实验报告范文

PID实验报告范文一、实验目的本实验旨在通过PID控制算法的应用,实现对温度的自动控制,并掌握PID控制算法的原理和实现方法。

二、实验装置1.温度传感器:用于实时检测待控温度的数值。

2.加热器:用于提供热源,调节温度。

3.控制器:利用PID控制算法对加热器的工作进行调节。

4.显示器:实时显示当前温度和设定温度。

5.电源:为实验装置供电。

三、实验原理PID控制器是一种常见的闭环控制算法,它通过计算误差的比例、积分和微分部分来调节控制器的输出,从而实现对被控对象的控制。

1.比例部分(P):根据当前误差,控制器输出与误差成正比的值。

2.积分部分(I):根据误差的累积值,控制器输出与误差积分成正比的值。

3.微分部分(D):根据误差变化的速率,控制器输出与误差微分成正比的次方值。

PID控制器输出的总和即为最终控制器的输出值。

四、实验步骤1.确定待控温度的设定值,并将设定值输入到控制器中。

2.控制器读取当前温度传感器的数值,并将数值与设定值进行比较得到误差。

3.根据误差,分别计算比例、积分和微分部分的输出值。

4.将三个部分的输出值相加得到最终控制器的输出值,并将输出值转化为控制器对加热器的控制信号。

5.加热器根据控制信号进行开关操作,调节温度。

6.重复步骤2-5,直到实际温度与设定值之间的误差小于预设的误差范围,控制循环结束。

五、实验结果与分析在实验中,我们将待控温度设定值设置为25℃,并通过PID控制器对温度进行控制。

实验结果显示,在不同的环境条件下,PID控制器能够稳定地将实际温度控制在设定值附近。

通过对比实验中不同的PID参数设定,我们发现比例参数的变化对于控制效果的影响最为明显。

比例参数较小时,控制器对误差的修正速度较慢,温度波动较大;而比例参数较大时,控制器对误差的修正速度较快,但容易发生超调现象。

此外,积分参数和微分参数的设定也会对控制效果产生一定的影响。

积分参数较小时,控制器对误差的累积效果较小;而积分参数较大时,控制器可能对误差的累积过度敏感,导致控制器过度调整。

温度pid控制实验报告

温度pid控制实验报告

温度pid控制实验报告温度PID控制实验报告引言:温度控制是工业生产中非常重要的一个环节,对于保证产品质量和提高生产效率有着至关重要的作用。

PID控制器是一种常用的温度控制方法,本实验旨在通过对PID控制器的实际应用,探究其在温度控制中的有效性和稳定性。

一、实验目的本实验旨在通过调整PID控制器的参数,实现对温度的精确控制,验证PID控制器在温度控制中的有效性。

二、实验器材和方法1. 实验器材:- 温度控制系统:包括温度传感器、加热器和PID控制器。

- 数据采集仪:用于记录和分析实验数据。

- 电脑:用于控制PID控制器和进行数据处理。

2. 实验方法:- 设置目标温度:根据实验要求,设定目标温度为X摄氏度。

- 参数调整:通过调整PID控制器的比例系数(P)、积分系数(I)和微分系数(D),找到最佳参数组合。

- 实验记录:记录实验过程中的温度变化和PID控制器的输出信号。

- 数据分析:通过对实验数据的分析,评估PID控制器的性能。

三、实验结果与分析在实验过程中,我们首先设定了目标温度为X摄氏度,并通过调整PID控制器的参数来实现对温度的控制。

在初始阶段,我们选择了一个较小的比例系数,以避免温度波动过大。

随着实验的进行,我们逐渐增加了比例系数,同时调整了积分系数和微分系数,以达到更精确的温度控制。

通过实验数据的分析,我们发现PID控制器能够有效地控制温度,并在设定的目标温度附近保持稳定。

当温度偏离目标温度时,PID控制器会根据偏差大小和变化趋势来调整输出信号,以实现温度的快速调整和稳定控制。

尤其是积分和微分项的引入,使得PID控制器具有了更好的稳定性和抗干扰能力。

在参数调整过程中,我们发现比例系数的增加会加快温度的响应速度,但也容易引起过冲现象;积分系数的增加可以减小温度的稳态误差,但过大的积分系数可能导致系统不稳定;微分系数的增加可以提高系统的动态响应速度,但过大的微分系数可能引起噪声干扰。

综合考虑,我们通过实验得出了最佳的PID控制器参数组合,实现了对温度的精确控制。

pid控制实验报告

pid控制实验报告

pid控制实验报告PID控制实验报告。

一、实验目的。

本实验旨在通过对PID控制器的调试和实验验证,掌握PID控制器的工作原理和调节方法,加深对控制原理的理解,提高实际控制系统的设计和调试能力。

二、实验原理。

PID控制器是一种常用的控制器,它由比例(P)、积分(I)、微分(D)三个部分组成。

在实际控制系统中,PID控制器通过对控制对象的测量值和设定值进行比较,产生误差信号,然后根据比例、积分和微分三个部分的参数进行计算,输出控制信号,使控制对象的输出值逼近设定值,实现控制目标。

三、实验装置。

本实验采用了PLC控制器和温度传感器作为控制系统,通过对温度传感器的测量值进行反馈控制,调节加热器的功率输出,控制温度在设定值附近波动。

四、实验步骤。

1. 首先,设置PID控制器的比例、积分和微分参数为初始值,将控制系统接通,使加热器开始工作。

2. 然后,通过监测温度传感器的测量值,观察加热器的工作状态和温度的变化情况。

3. 接着,根据实际情况,逐步调节PID控制器的参数,使控制系统的响应速度和稳定性达到最佳状态。

4. 最后,记录和分析不同参数下控制系统的响应曲线,比较不同参数对控制系统性能的影响,总结调节经验。

五、实验结果与分析。

经过一系列的实验调节,我们得到了不同参数下的控制系统响应曲线。

通过对比分析,我们发现:1. 比例参数的增大会加快系统的响应速度,但会引起超调和振荡现象;2. 积分参数的增大可以减小稳态误差,但会增加超调和振荡的幅度;3. 微分参数的增大可以减小超调和振荡,但会降低系统的响应速度。

六、实验结论。

通过本次实验,我们深入理解了PID控制器的工作原理和调节方法,掌握了控制系统的设计和调试技巧。

在实际工程中,我们可以根据实际需求,通过调节PID 控制器的参数,使控制系统达到最佳的性能指标。

七、实验心得。

通过本次实验,我们不仅学习了PID控制器的基本原理和调节方法,还提高了实际控制系统的设计和调试能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

成绩:重庆邮电大学自动化学院综合实验报告题目:51系列单片机闭环温度控制实验学生姓名:***班级:0811103学号:**********同组人员:黄酉指导教师:***完成时间:2014年12月一、实验要求及分工情况51系列单片机闭环温度控制实验——基于Protuse仿真实验平台实现要求:1. 设计硬件电路:温度检测:采用热电偶或热电阻温度给定:采用电位器进行模拟电压给定,0——5VAD转采用12位转换显示采用8位LED,或者LCD1602显示键盘4X4,PID等参数通过键盘设置。

2. 软件控制算法:数字PID,参数在线修改。

显示窗口:显示温度的设置值SV、温度的实际值PV。

实际温度值,温度峰值、峰值时间等通过串口上传到上位机(选做)具体分工:黄酉负责系统设计思想导向与编程;霍栋博负责辅助编程与编写报告与Proteus仿真。

二、实验内容(实验原理介绍)1、电路的总体工作原理温度控制系统采用AT89S51八位机作为微处理单元进行控制。

采用4X4键盘把设定温度的最高值和最低值存入单片机的数据存储器,还可以通过键盘完成温度检测功能的转换。

温度传感器把采集的信号与单片机里的数据相比较来控制温度控制器。

机AT89S51为测控系统的核心来完成数据采集、处理、显示、报警等功能。

选用数字温度传感器DS18B20,省却了采样/保持电路、运放、数/模转换电路以及进行长距离传输时的串/并转换电路,简化了电路,缩短了系统的工作时间,降低了系统的硬件成本。

该系统的总体设计思路如下:温度传感器DS18B20把所测得的温度发送到AT89S51单片机上,经过51单片机处理,将把温度在显示电路上显示,本系统显示器为点阵字符LCD,1602液晶模块。

检测范围5摄氏度到60摄氏度。

本系统除了显示温度以外还可以设置一个温度值,对所测温度进行监控,当温度高于或低于设定温度时,开始报警并启动相应程序(温度高于设定温度时,风扇开;当温度低于设定温度时,加热器开)。

2、PID算法的数字实现本次试验通过8031通过OVEN 是模拟加热的装置,加一定的电压便开始不停的升温,直到电压要消失则开始降温。

仿真时,U形加热器为红色时表示正在加热,发红时将直流电压放过来接,就会制冷,变绿。

T端输出的是电压,温度越高,电压就越高。

8031对温度的控制是通过可控硅调控实现的。

可控硅通过时间可以通过可控硅控制板上控制脉冲控制。

该触发脉冲想8031用软件在P1.3引脚上产生,受过零同步脉冲后经光偶管和驱动器输送到可控硅的控制级上。

偏差控制原理是要求对所需温度求出偏差值,然后对偏差值处理而获得控制信号去调节加热装置的温度。

PID控制方程式:式中e是指测量值与给定值之间的偏差TD 微分时间T 积分时间KP 调节器的放大系数将上式离散化得到数字PID位置式算法,式中在位置算法的基础之上得到数字PID增量式算法:3、系统的硬件设计3.1 单片机最小系统的设计目前的单片机开发系统只能够仿真单片机,却没有给用户提供一个通用的最小系统。

由设计的要求,只要做很小集成度的最小系统应用在一些小的控制单元。

其应用特点是:(1)全部I/O口线均可供用户使用。

(2)内部存储器容量有限(只有4KB地址空间)。

(3)应用系统开发具有特殊性图 3.1 最小系统图单片机最小系统如图3.1所示,其中有4个双向的8位并行I/O端口,分别记作P0、P1、P2、P3,都可以用于数据的输出和输入,P3口具有第二功能为系统提供一些控制信号。

3.2键盘电路的设计用AT89C51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;液晶显示器上显示每个按键的“0-F”序号。

对应的按键的序号排列如图3.5图3.4中微处理单元是AT89C51单片机,X1和X2接12M的两脚晶振,接两个30PF的起振电容,J1是上拉电阻.单片机的P1口8位引脚与行列式键盘输出脚相连,控制和检测行列式键盘的输入.行线通过上拉电阻接到+5V上,无按键按下时,行线处于高电平状态,有键按下时,行线的电平状态将由与此行线相连接的列线的电平决定.键盘输入的信息主要进程是:1 CPU判断是否有键按下.2 确定是按下的是哪个键.3 把此键所代表的信息翻译成计算机可以识别的代码或者其他的特征符号.图 3.4 键盘硬件电路图3.3显示电路的设计液晶显示器是一种将液晶显示器件,连接器件,集成电路,PCB线路板,背光源,结构器件装配在一起的组件。

根据显示内容和方式的不同可以分为,数显LCD,点阵字符LCD,点阵图形LCD在此设计中我们采用点阵字符LCD,这里采用常用的2行16个字的1602液晶模块。

1602采用标准的14脚接口,其中:第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15~16脚:空脚。

与单片机的连接如图3.7所示。

图 3.5 液晶显示电路图:3、电路原理图仿真结果:附录#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define ulong unsigned long/*****************引脚定义*********************************/ sbit output=P2^5;/********************************/ sbit CLOCK=P3^1;sbit D_IN=P2^7;sbit D_OUT=P2^6;sbit _CS=P3^0;/********************************/ sbit lcdrs=P2^0;sbit lcdrw=P2^1;sbit lcden=P2^2;/********************************/ sbit in1=P2^3;sbit in2=P2^4;/********************************/ sbit led=P3^2;sbit speaker=P3^3;/*****************引脚定义*********************************//*****************变量定义(申明)*********************************/int freq=500,pwm=0;uchar setflag=0,pageflag=0,ok=0;float pwm_temp=0;float KP=100,KI=10,KD=0;uint pul_count=0;float ek=0,ek1=0,ek2=0;uchar code str[16]=" welcome! "; uchar code str1[16]=" temperature PID"; uchar code str2[16]="set-T pra-T " ; uchar code str3[16]="P: I: D:" ; uchar code str4[16]="set-P: " ; uchar code str5[16]="set-I: " ;uchar code str6[16]="set-D: " ;void Init(void); uint adcread(uchar port);void delay(uint n);void writecom(uchar com);void writedata(uchar date);void initlcd();float keyscan(void);uchar keyscans(void);void lcdnumdisplay(uchar pos,double f); void lcdnumdisplays(uchar pos,double f); uint read_pul();void mypid(float Kp,float Ki,float Kd,uint count,uint point);/*****************变量定义(申明)*********************************/void main(){uchar i;float scantemp;float adnum0=0;float adnum1=0;bit init0,init1,init2,init3,init4;Init();initlcd();writecom(0x80);for(i=0;i<16;i++)writedata(str[i]);//huanyinwritecom(0x80+0x40);for(i=0;i<16;i++)writedata(str1[i]);//shumingdelay(200);while(1){pwm_temp=500*(float)(adnum0)/4095;//pwm=pwm_temp;mypid(KP,KI,KD,adnum1,pwm_temp);scantemp=keyscan();if(adnum1>=pwm_temp-1.5&&adnum1<=pw m_temp+1.5){led=0;speaker=1;}else{led=1;speaker=0;}if(setflag==0){adnum0=adcread(0);adnum1=adcread(1)/10;if(init0==0){initlcd();writecom(0x80);for(i=0;i<16;i++)writedata(str2[i]);//shuminginit0=1;init1=0;init2=0;init3=0;init4=0;}lcdnumdisplays(0x80+0x40,(float)pwm_temp);//pwm_templcdnumdisplays(0x80+0x4a,(float)adnum1);}if(setflag!=0&&pageflag==0){if(init1==0){initlcd();writecom(0x80);for(i=0;i<16;i++)writedata(str3[i]);//PIDinit0=0;init1=1;init2=0;init3=0;init4=0;}lcdnumdisplays(0x80+0x40,KP);lcdnumdisplays(0x80+0x46,KI);lcdnumdisplays(0x80+0x4D,KD);}if(setflag!=0&&pageflag==1){if(init2==0){initlcd();writecom(0x80);for(i=0;i<16;i++)writedata(str4[i]);//Pinit0=0;init1=0;init2=1;init3=0;init4=0;}lcdnumdisplays(0x80+0x40,scantemp);if(ok==1)KP=scantemp;}if(setflag!=0&&pageflag==2){if(init3==0){initlcd();writecom(0x80);for(i=0;i<16;i++)writedata(str5[i]);//iinit0=0;init1=0;init2=0;init3=1;init4=0;}lcdnumdisplays(0x80+0x40,scantemp);if(ok==1)KI=scantemp;}if(setflag!=0&&pageflag==3){if(init4==0){initlcd();writecom(0x80);for(i=0;i<16;i++)writedata(str6[i]);//dinit0=0;init1=0;init2=0;init3=0;init4=1;}lcdnumdisplays(0x80+0x40,scantemp);if(ok==1)KD=scantemp;}}}void mypid(float Kp,float Ki,float Kd,uint count,uint point){static float Uk;ek=point-count;// if(ek>=5&&ek<=-5) //积分分离{Uk=Kp*(ek-ek1)+Ki*ek+Kd*(ek-2*ek1+ek2 );} //增量PID// else// Uk=Kp*ek;pwm=pwm+Uk;if(pwm>freq)pwm=freq;if(pwm<=0){pwm=0;in1=0;in2=1;}if(pwm>0) {in1=1;in2=0;}ek2=ek1;ek1=ek;}uint read_pul(){uint t1,th1,th2;uint val;while(1){th1=TH1;t1=TL1;th2=TH1;if(th1==th2)break;}val=th1*256+t1;return val;} void delay(uint n){uint i,j;for(i=n;i>0;i--)for(j=1;j>0;j--);}void Init(void)//初始化函数{TMOD=0x51;TH0=(65536-10)/256;TL0=(65536-10)%256;EA=1;ET0=1;TR0=1;//T1计数TH1=0;TL1=0;TR1=1;}void Timer_0(void) interrupt 1//中断函数{static ulong t_count=0;static uint num_count=0;TR0=0;TH0=(65536-10)/256;TL0=(65536-10)%256;TR0=1;num_count++;// t_count++;// if(t_count==2320)// {// t_count=0;// TR1=0;// pul_count=read_pul();// TH1=0;// TL1=0;// TR1=1;// }if(num_count>freq)num_count=0; //1khz;if(num_count<pwm)output=1;else output=0;}void writecom(uchar com) {lcdrs=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;}void writedata(uchar date) {lcdrs=1;P0=date;delay(1);lcden=1;delay(1);lcden=0;}void initlcd(){lcdrw=0;writecom(0x38);delay(1);writecom(0x0c);delay(1);writecom(0x06);delay(1);writecom(0x01);delay(5); }uint adcread(uchar port){uint ad=0,i;CLOCK=0;_CS=0;port<<=4;for(i=0;i<12;i++){if(D_OUT) ad|=0x01;D_IN=(bit)(port&0x80); CLOCK=1;delay(1);CLOCK=0;delay(1);port<<=1;ad<<=1;}_CS=1;ad>>=1;return(ad);}void lcdnumdisplays(uchar pos,float f)//(0.001-99999) 精度低但方便数据更新{uchar i;writecom(pos);if(f>65535&&f<0.001)for(i=0;i<5;i++)writedata(0x23);//超出范围显示#elseif(f==0){writedata(0x30);for(i=0;i<4;i++)writ edata(0x20);}else{if((uint)f/10000!=0){writedata((uint)f/10000+0x30);writedata((uint)f%10000/1000+0x30);writedata((uint)f%1000/100+0x30);writedata((uint)f%100/10+0x30);writedata((uint)f%10+0x30);}else{if((uint)f/1000!=0){writedata(0+0x30);writedata((uint)f/1000+0x30);writedata((uint)f%1000/100+0x30);writedata((uint)f%100/10+0x30);writedata((uint)f%10+0x30);}else{if((uint)f/100!=0){writedata((uint)f/100+0x30);writedata((uint)f%100/10+0x30);writedata((uint)f%10+0x30);writedata(0x2e);writedata((uint)(f*10)%10+0x30);}else{if((uint)f/10!=0){writedata((uint)f/10+0x30);writedata((uint)f%10+0x30);writedata(0x2e);writedata((uint)(f*10)%10+0x30);writedata((uint)(f*100)%10+0x30);}else{writedata((uint)f%10+0x30);writedata(0x2e);writedata((uint)(f*10)%10+0x30);writedata((uint)(f*100)%10+0x30);writedata((uint)(f*1000)%10+0x30);}}}}}}void lcdnumdisplay(uchar pos,float f0) //(0.00001-99999.99999){uchar temp;ulong f;writecom(pos);f=(ulong)f0;temp=f/10000; //整数部分if(temp!=0){writedata(temp+0x30);writedata(f%10000/1000+0x30);writedata(f%1000/100+0x30);writedata(f%100/10+0x30);writedata(f%10+0x30);}else{temp=f%10000/1000;if(temp!=0){writedata(temp+0x30);writedata(f%1000/100+0x30);writedata(f%100/10+0x30);writedata(f%10+0x30);}else{temp=f%1000/100;if(temp!=0){writedata(temp+0x30);writedata(f%100/10+0x30);writedata(f%10+0x30);}else{temp=f%100/10;if(temp!=0){writedata(temp+0x30);writedata(f%10+0x30);}else{temp=f%10;if(temp!=0){writedata(temp+0x30);}elsewritedata(0+0x30);}}}}if((ulong)(f0*10)%10!=0||(ulong)(f0*100)%1 0!=0||(ulong)(f0*1000)%10!=0||(ulong)(f0*10 000)%10!=0) //小数部分{writedata(0x2e);temp=(ulong)(f0*10000)%10;if(temp!=0){writedata((ulong)(f0*10)%10+0x30); writedata((ulong)(f0*100)%10+0x30);writedata((ulong)(f0*1000)%10+0x30);writedata(temp+0x30);}else{temp=(ulong)(f0*1000)%10;if(temp!=0){writedata((ulong)(f0*10)%10+0x30);writedata((ulong)(f0*100)%10+0x30);writedata(temp+0x30);}else{temp=(ulong)(f0*100)%10;if(temp!=0){writedata((ulong)(f0*10)%10+0x30);writedata(temp+0x30);}else{temp=(ulong)(f0*10)%10;if(temp!=0)writedata(temp+0x30);}}}}}uchar keyscans(void)//矩阵键盘扫描{uchar i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};for(j = 0; j < 4; j++) //循环四次{P1 = Buffer[j]; //在P1高四位分别输出一个低电平temp = 0x01; //计划先判断P1.0位for(i = 0; i < 4; i++){if(!(P1 & temp)) //从P1低四位,截取1位return (i + j * 4); //返回取得的按键值temp <<= 1; //判断的位,左移一位}}return 16; //判断结束,没有键按下,返回}float keyscan(void)//矩阵键盘扫描{static float keytemp=0;static uchar dianflag=0;static uchar diancount=0;static uchar k=0;uchar temp;P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(1);if(temp!=0xf0){switch(temp){case 0xe0: {k=1;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0xd0: {k=2;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0xb0: {k=3;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0x70: if(setflag==1){pageflag++;dianflag=0;diancount=0;ok=0;ke ytemp=0;if(pageflag==4)pageflag=0;}break;}}}P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(1);if(temp!=0xf0){switch(temp){case 0xe0: {k=4;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ; if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0xd0: {k=5;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0xb0: {k=6;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0x70: if(setflag==1){pageflag--;dianflag=0;diancount=0;ok=0;key temp=0;if(pageflag==0)pageflag=4;}break;}}}P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(1);if(temp!=0xf0){switch(temp){case 0xe0: {k=7;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001; if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0xd0: {k=8;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01; if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0xb0: {k=9;if(dianflag==0)keytemp=keytemp*10+k ;if(dianflag==1){diancount++;if(diancount==1)keytemp=keytemp+k*0.1;if(diancount==2)keytemp=keytemp+k*0.01;if(diancount==3)keytemp=keytemp+k*0.001;if(diancount==4)keytemp=keytemp+k*0.0001 ;if(diancount==5)keytemp=keytemp+k*0.0000 1;}}break;case 0x70: {setflag=!setflag;pageflag=0;ok=0;}break;}}}P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(1);if(temp!=0xf0){switch(temp){case 0xe0:dianflag=1;break;case 0xd0:{k=0;if(dianflag==0)keytemp=keytemp*10+k ;}break;case 0xb0: {dianflag=0;diancount=0;ok=1;keytemp= 0;pageflag++;}break;case 0x70: {dianflag=0;diancount=0;keytemp=0;ok= 0;}break;}}}return keytemp;}。

相关文档
最新文档