如果用pid编程实现pid温控器调节方法(降温),那实际温度高于预设温度,会得出负值吗,会的话怎么变换为正值呢

谁知道这样的温控仪怎么校正温度(显示温度跟实际温度相差十三度)_百度知道
谁知道这样的温控仪怎么校正温度(显示温度跟实际温度相差十三度)
有个传感器误差修正菜单,调节下仔细看是控温不好,那仪表PID自整定下
采纳率:100%
检测一下探头,再检测一下传感器和仪表型号是否一致。在或者就需要开说明书调表了
为您推荐:
其他类似问题
温控仪的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。温度控制 pid参数自整定怎么进行_百度知道
温度控制 pid参数自整定怎么进行
我有更好的答案
温度控制采用PID控制器时,由于温度过程一般都存在较大的死区和滞后时间,所以设置PID参数时尽可能使用P作用和D作用进行调节,而将I作用降到最低(甚至不使用I作用)。这样可以避免超调震荡和积分饱和。
采纳率:76%
为您推荐:
其他类似问题
温度控制的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。论文发表、论文指导
周一至周五
9:00&22:00
PLC的PID控制在温度控制系统中的应用
  【摘 要】目前现代工业自动化控制领域中温度控制系统在大范围得实现与应用,可编程控制器即PLC的PID控制在该系统的应用。这些应用主要用在比如钢铁厂、化工厂、冶炼厂等加热锅炉控制系统的中。控制加热炉体的温度曲线,采用温控表或者PLC做为主要的核心。当然采用PLC控制方式是最佳的选择,系统采用PLC对加热炉体进行温度,能够大幅提高生产的效率和提高系统的稳定性。主要介绍了在温度控制系统研究现状的基础上,通过对加热炉体的温度控制的工作原理和现场工况,利用PLC的PID控制技术与人机界面即HMI,实现工业自动化的加热炉体温度的自动加热控制,同时结合实际经验对PID的参数整定的研究分析。 中国论文网 /8/view-6954311.htm  【关键词】PLC;温度控制;PID;温度传感器   1 温度控制系统研究现状   工业自动化生产过程中加热炉的温度控制系统在实际应用中是相当广泛的,而温度参数是工业控制中的被控参数之一,对物料或产品的加热处理,是工业生产当中的一个重要工序,对生产物料或加工产品进行实时的温度控制与调节。传统的加热炉体的温度控制系统,主要通过使用继电器来控制加热,其控制柜的接线比较复杂,而且系统的运行故障率比较高,再加上耗电量也比较大,在现代复杂的工业生产过程,不能采用比较传统的继电器控制方式来控制温度。   经过工业革命的技术发展,可编程控制器PLC可以完美代替继电器来控制工业生产过程中的温度。PLC是一个集成的控制器,它本身就具有自动处理模拟信号、数字信号和工业网络的处理能力,正因为这个优点,PLC在我国的温度控制系统加热生产中得到大幅的应用与实现,所以PLC逐渐能够在过程控制中得到应用。PLC能够应用在远程的控制系统与现地控制系统,同时具有应用面相当广,可靠性也相当高,编程相当简单的特点。PLC具有开关量控制输出也就是具有继电器控制功能的特点,同时具备各种模拟信号的采集,以及各种高功能模块的数据输入与控制,将开关量信号与模拟量信号综合为一体,实现远程控制,开环控制,闭环控制等控制能力,能够适应各种复杂生产工艺与自动化生产线。PLC在配合人机界面的操作界面的应用,在实现工业自动化生产中加热炉的温度控制系统将起到关键的作用,实现与满足加热控制工艺的需要。   2 温度控制系统设计   本文温度控制系统设计的控制参数是温度,温度的采集是有时间滞后的因素。温度会随着炉体的加热随时发生改变,温度变化通过温度传感器接入系统的控制器。本系统设计采用松下品牌PLC来控制系统的加热与温度采集,温度传感器接入到PLC控制器的输入模块,将温度信号转化成电信号,再经过PLC数据信号转化成数字信号,并保持到PLC存储器中,通过软件编程与用户在人机界面上设定的目标温度值进行对比,数字量输出模块按一定方式输出控制量,然后接通固态继电器控制炉体加热器的通断,进而控制炉体的升温加热。系统的人机界面通过其串口可以与松FP2系列进行实时数据通信,能够实时显示加热控制系统的温度数值。本文温度控制系统设计包括以下几个设计步骤:硬件选型设计、软件编程设计、参数整定等。   2.1 硬件选型设计   温度控制系统设计的硬件选型是设计控制系统的关键一步。在设计温度控制之前要根据该系统的受控对象、参数和控制要求,选择合适系统的控制器、控制方式、温度传感器和适合用户的操作界面等等。本系统CPU型号选FP2-C2L作为系统的核心控制器模块,与温度输入模块进行数据交换。温度的实时监控则选用松下的模拟量输入模块FP2-AD8X,温度传感器选择S型热电偶输入可以检测加热炉体1300度以内的温度,热电偶传感器接到模拟量输入模块,模拟量信号转化成数字量信号传输到PLC,经过处理后数据保存到CPU的数据存储器WX通道中。固态继电器选用台湾阳明,型号为SSR-F40LA,温度输入模块采集的温度送到PLC后会与系统设计的目标值进行对比并进行PID调节,PID控制器数字输出转化成占空比输出,实现加热器的加热升温。前面的数字量输出模块可以选用16个开关量输出的FP2-Y16T。温度控制系统中的人机界面选用经济实用的威纶7寸屏TK6070IP,松下PLC控制器与威纶人机界面的通讯方式采用串口无协议通讯自助完成数据交换,松下PLC能够时刻读取的加热炉体的温度数据,威纶人机界面将显示加热炉体的温度数值。本系统的硬件设计架构如图1所示:   图1   2.2 软件编程设计   PLC的软件编程设计,首先PLC上电后应该执行初始化内存寄存器,通过R9013特殊继电器初次上电扫描执行产生初始化脉冲进行程序初始化。实时将温度通道WX的温度值写入到DT寄存器中,同时PID控制指令F355各PID参数设定值指定给DT寄存器,写入相应的寄存器,使程序启动后系统开始对加热炉体进行温度PID采集控制。温度传感器即本系统使用S型热电偶传感器将炉体测量的实际温度经过接入温度模块AD8X单元后产生一个电信号,温度模块经过模拟量输入通道CH0的模数转换后成为对应的数字量,PLC内存会得到实际的温度值为寄存器通道WX除以10的商。这样PLC内部的PID过程控制会自动计算出实际温度值与温度目标值的偏差值在一定周期内输出一定占空比通断固态继电器,接通炉体的加热器,实现PLC系统自动进行内部PID过程控制和自动加热控制温度。   3 PID的参数整定   软件编程中PLC内部的PID参数整定也是温度控制系统的重要内容。PLC的PID参数包括温度过程控制中的比例P参数,积分I时间参数,微分D时间参数的数值。在广泛的PID调节器工程应用中,PID参数整定方法主要有两类,一类是理论计算法,一类是工程整定法。理论计算法当然是通过理论计算得出被控对象的PID参数值,而工程整定法则是通过实际工程控制调节各参数。从而我们就利用了工程整定法进行PID现场自动整定方式,对本加热炉体进行一次PLC内部过程控制的自整定PID参数。   本系统能够通过PLC自身的PID运算指令F355进行完成PID参数自整定控制。这种控制方式是根据加热炉体的实际温度、温度传感器的响应速度及系统的滞后特性等工艺特性曲线,由PLC自动计算出与加热器匹配的调节参数,自动约束加热器的加热功率,进而对加热炉体进行温度工艺调节,并能够在升温过程进行优化。首次使用加热系统前需要对系统进行一次PID参数自整定升温过程,根据此系列的PLC参数设置方法,需要将F355参数控制模式改成H8000自整定控制模式,进行升温控制,达到稳定状态后,完成整个自整定过程后参数会自动反映到PID参数区域,通过修改这三个参数后直接写入到温度控制系统的实际加热中,系统实现在用户设定温度目标值的准确控温。   经过系统进一步的参数测试,温度控制系统的可能会因为加热器或者热电偶的原因会产生系统一定温度波动,这种情况需要更进一步进行参数调整,再对系统重新进行一次PID参数自整定。   【参考文献】   [1]努尔哈孜?朱玛力.可编程序控制器在电炉温度控制系统中应用的研究[J].新疆大学学报,):267-268.(下转第320页)   (上接第318页)[2]宋乐鹏.基于PLC控制的加热炉温度控制系统[J].可编程控制器与工厂自动化,2007(5):70-71、76.   [3]倪涛.基于PLC控制的加热炉温度控制系统[J].产业与科技论坛,2011(20):75-76.   [4]张英寿,朱红梅.基于PLC控制的加热炉温度控制系统[J].电子技术,2012(7):73-75.   [责任编辑:邓丽丽]
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。一、PID控制算法
  PID是比例、积分、微分的简称,PID控制的难点不是编程,而是控制器的参数整定。参数整定的关键是正确地理解各参数的物理意义,PID
控制的原理可以用人对炉温的手动控制来理解。阅读本文不需要高深的数学知识。
注:整个控制流程是PID控制器函数与被控对象的传递函数、一个负反馈结合完成的,在保证被控对象的传递函数与负反馈结合的闭环系统能够达
到稳态的前提下(可以采用阶跃信号实验来测试),在前面加上PID控制器,能够很好地实现快速、准确的调节系统,达到预期值。
PID的简介如下:
&& 1.比例控制
  有经验的操作人员手动控制电加热炉的炉温,可以获得非常好的控制品质,PID控制与人工控制的控制策略有很多相似的地方。
  下面介绍操作人员怎样用比例控制的思想来手动控制电加热炉的炉温。假设用热电偶检测炉温,用数字仪表显示温度值。在控制过程中,操
作人员用眼睛读取炉温,并与炉温给定值比较,得到温度的误差值。然后用手操作电位器,调节加热的电流,使炉温保持在给定值附近。
  &操作人员知道炉温稳定在给定值时电位器的大致位置(我们将它称为位置L),并根据当时的温度误差值调整控制加热电流的电位器的转角。炉
温小于给定值时,误差为正,在位置L的基础上顺时针增大电位器的转角,以增大加热的电流。炉温大于给定值时,误差为负,在位置L的基础上反
时针减小电位器的转角,并令转角与位置L的差值与误差成正比。上述控制策略就是比例控制,即PID控制器输出中的比例部分与误差成正比。
  &闭环中存在着各种各样的延迟作用。例如调节电位器转角后,到温度上升到新的转角对应的稳态值时有较大的时间延迟。由于延迟因素的存在,
调节电位器转角后不能马上看到调节的效果,因此闭环控制系统调节困难的主要原因是系统中的延迟作用。
  比例控制的比例系数如果太小,即调节后的电位器转角与位置L的差值太小,调节的力度不够,使系统输出量变化缓慢,调节所需的总时间过长。
比例系数如果过大,即调节后电位器转角与位置L的差值过大,调节力度太强,将造成调节过头,甚至使温度忽高忽低,来回震荡。
  增大比例系数使系统反应灵敏,调节速度加快,并且可以减小稳态误差。但是比例系数过大会使超调量增大,振荡次数增加,调节时间加长,动
态性能变坏,比例系数太大甚至会使闭环系统不稳定。
  单纯的比例控制很难保证调节得恰到好处,完全消除误差。
&& 2.积分控制
  PID控制器中的积分对应于图1中误差曲线 与坐标轴包围的面积(图中的灰色部分)。PID控制程序是周期性执行的,执行的周期称为采样周期。
计算机的程序用图1中各矩形面积之和来近似精确的积分,图中的TS就是采样周期。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图1& 积分运算示意图&
  每次PID运算时,在原来的积分值的基础上,增加一个与当前的误差值ev(n)成正比的微小部分。误差为负值时,积分的增量为负。
  手动调节温度时,积分控制相当于根据当时的误差值,周期性地微调电位器的角度,每次调节的角度增量值与当时的误差值成正比。温度低于
设定值时误差为正,积分项增大,使加热电流逐渐增大,反之积分项减小。因此只要误差不为零,控制器的输出就会因为积分作用而不断变化。积
分调节的“大方向”是正确的,积分项有减小误差的作用。一直要到系统处于稳定状态,这时误差恒为零,比例部分和微分部分均为零,积分部分
才不再变化,并且刚好等于稳态时需要的控制器的输出值,对应于上述温度控制系统中电位器转角的位置L。因此积分部分的作用是消除稳态误差,
提高控制精度,积分作用一般是必须的。
  PID控制器输出中的积分部分与误差的积分成正比。因为积分时间TI在积分项的分母中,TI越小,积分项变化的速度越快,积分作用越强。
&& 3.PI控制
  控制器输出中的积分项与当前的误差值和过去历次误差值的累加值成正比,因此积分作用本身具有严重的滞后特性,对系统的稳定性不利。如
果积分项的系数设置得不好,其负面作用很难通过积分作用本身迅速地修正。而比例项没有延迟,只要误差一出现,比例部分就会立即起作用。因
此积分作用很少单独使用,它一般与比例和微分联合使用,组成PI或PID控制器。
  PI和PID控制器既克服了单纯的比例调节有稳态误差的缺点,又避免了单纯的积分调节响应慢、动态性能不好的缺点,因此被广泛使用。
  如果控制器有积分作用(例如采用PI或PID控制),积分能消除阶跃输入的稳态误差,这时可以将比例系数调得小一些。
  如果积分作用太强(即积分时间太小),相当于每次微调电位器的角度值过大,其累积的作用会使系统输出的动态性能变差,超调量增大,甚至
使系统不稳定。积分作用太弱(即积分时间太大),则消除稳态误差的速度太慢,积分时间的值应取得适中。
&& 4.微分作用
  误差的微分就是误差的变化速率,误差变化越快,其微分绝对值越大。误差增大时,其微分为正;误差减小时,其微分为负。控制器输出量的微分
部分与误差的微分成正比,反映了被控量变化的趋势。
  有经验的操作人员在温度上升过快,但是尚未达到设定值时,根据温度变化的趋势,预感到温度将会超过设定值,出现超调。于是调节电位器的转
角,提前减小加热的电流。这相当于士兵射击远方的移动目标时,考虑到子弹运动的时间,需要一定的提前量一样。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 图2 & 阶跃响应曲线&
  图2中的c (∞)为被控量c (t)的稳态值或被控量的期望值,误差e(t) = c (∞) - c (t)。在图2中启动过程的上升阶段,当 时,被控量尚未超过其稳态值。
但是因为误差e(t)不断减小,误差的微分和控制器输出的微分部分为负值,减小了控制器的输出量,相当于提前给出了制动作用,以阻碍被控量的上升,
所以可以减少超调量。因此微分控制具有超前和预测的特性,在超调尚未出现之前,就能提前给出控制作用。
  闭环控制系统的振荡甚至不稳定的根本原因在于有较大的滞后因素。因为微分项能预测误差变化的趋势,这种“超前”的作用可以抵消滞后因素的影
响。适当的微分控制作用可以使超调量减小,增加系统的稳定性。
  对于有较大的滞后特性的被控对象,如果PI控制的效果不理想,可以考虑增加微分控制,以改善系统在调节过程中的动态特性。如果将微分时间设置
为0,微分部分将不起作用。
  微分时间与微分作用的强弱成正比,微分时间越大,微分作用越强。如果微分时间太大,在误差快速变化时,响应曲线上可能会出现“毛刺”。
  微分控制的缺点是对干扰噪声敏感,使系统抑制干扰的能力降低。为此可在微分部分增加惯性滤波环节。
&& 5.采样周期
  PID控制程序是周期性执行的,执行的周期称为采样周期。采样周期越小,采样值越能反映模拟量的变化情况。但是太小会增加CPU的运算工作量,相
邻两次采样的差值几乎没有什么变化,将使PID控制器输出的微分部分接近为零,所以也不宜将采样周期取得过小。
  应保证在被控量迅速变化时(例如启动过程中的上升阶段),能有足够多的采样点数,不致因为采样点数过少而丢失被采集的模拟量中的重要信息。
  PID系统分为两类:模拟PID(一般由硬件组成,比如电子原件)和数字PID(通过AD/DA,结合数字编程来实现):
  模拟PID:
  数字PID:
  PID调节会遇到饱和的情况,一般有以下几种抑制的方法:
遇限削弱积分法
有效偏差法
二、PID整定算法
PID手动整定
1.试凑法,试凑法就是人工选择PID参数,使控制系统响应达到预定要求,这种方法既简单又复杂,说简单是,如果你有经验和运气的话,
那么在SIMULINK中,可能很快就达到了目标,说难的是,在现场实战中,可能费了很大时间和精力来调整三个参数,也没有完成任务。
2.临界比例度法,临界比例度法就是仅在P作用下,调整比例度使系统等幅振荡,然后根据公式算出PID值,效果如图1所示,图中左半部分
是系统等幅振荡,右半部分是控制效果。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图1
3.衰减曲线法, 衰减曲线法 就是仅在P作用下,调整比例度使系统响应曲线以4:1或10:1比率衰减 ,然后根据公式算出PID值,效果如图2所
示,图中左半部分是系统衰减曲线 , 右半部分是控制效果。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图2
4.反应曲线法,反应曲线法就是在开环状态下,加阶跃信号,然后用一阶加纯滞后系统逼近原系统,然后根据由Z-N或C-C公式算出PID值,
效果如图3所示,图中左半部分是系统 响应曲线 , 右半部分是控制效果。图4是一个三阶系统,临界比例度法 求得的有关参数。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图3
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 图4
注:第1种方法,需要调整三个参数,第2-4种方法仅需调整一个参数,已经使问题大为简单,我们在这里用的是一维搜索算法,寻找合适的比
例度,但实际上在现场这仍然是一件费力费时话,无疑自动整定是更方便的方法。
PID自动整定
5.继电反馈法自整定
继电反馈法自整定 ,就是用一个继电器取代调节器,从而使系统强制振荡,然后根据振荡频率和幅值,计算出PID值,这个一种比较简单,也比
较靠谱的方法,应用比较广泛,由于现场存在有干扰,如用于实战,则需要重点考虑干扰问题, 如果继电器带有回滞,一定程度上可以克服干扰
影响,图5继电反馈法自整定效果。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图5
6.模式识别法
模式识别法是提取暂态过程中的一些特征向量,并据此不断修正PID值,模式识别法PID整定开始前,先要预整定,然后在预整定的基础上再进行
模式识别法 PID整定,本人做的模式识别法效果如图7所示,在预整定PID参数基本合适的情况下,经过3次整定就得到满意的效果,如图6所
示,否则整定次数将增加,如图7所示 ,模式识别法 颇像经验法,当然它是冠名为专家系统 ,而我玩的连“砖家系统”也算不上,勉强算个“本(笨)
人系统”吧。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 图6
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图7
7.自校正PID控制
自校正PID控制,实质上是一种极点配置法,就是通过调整PID控制器的结构和参数,使闭环系统的特征多项式变成预定的式子,这种PID控制表达式
离原本的PID表达式已经很远了,尽管冠名PID控制,图8是这种控制的效果,为实现自校正PID控制 ,需解丢番图方程。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图8
8.模糊自适应整定PID控制
自动整定好了是否就一劳永逸了呢?也不是,因为大部分的工业对象不是线性时不变(LTI)系统,负荷变化、设备老化等因素会使得对象特性发生变
化,此时,模糊自适应PID控制就有了用武之地,模糊自适应PID控制有点类似模式识别法PID整定,模式识别法PID整定需要预整定, 模糊自适应PID
控制需要有一个基础PID值,模式识别法PID整定根据专家规则调整PID值, 模糊自适应PID控制根据模糊规则调整PID值,模糊自适应整定PID控制的
效果如图9所示,被控对象是个大纯滞后系统。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 图9
9.神经网络PID控制
如果,被控对象有强烈的非线性且有时变特性,那么.神经网络PID控制是合适的,&&神经网络PID控制 的效果如图10所示,被控对象是个非线性时变系统。&
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图10
10.PID参数优化&
模糊自适应PID控制和神经网络PID控制对时变,非线性和大纯滞后等系统有较好效果,但对特定的优化指标,如ISE,IAE,ITAE等无能为力,此时,就需
要用到最优化技术了,实际上很多时候,控制问题就是一个最优化问题,如最优控制,最小方差控制,预测控制,系统辨识等,神经网络实际上也是一
个优化的过程,PID参数优化,也是一个优化问题。优化一般来说,可以用传统的分析方法,也可以用群体智能算法,MATLAB中也有多个非线性寻优
函数,我们这里用了4中方法寻优,优化指标除了上面提到的3个外,还有工程上常用的4:1衰减,及特殊情况下有用的无超调控制,见图11-图15,图16
则是显示一个大纯滞后系统用PID控制效果,通常情况下,此时要用预估补偿控制或内模控制,但在这里我们看到PID控制仍然威力十足,控制效果相当
& & & & & & & & & & & & & & & & & & & & & & & & & & & & &图11
& & & & & & & & & & & & & & & & & & & & & & & & & & & & &图12
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 图13
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &图14
& & & & & & & & & & & & & & & & & & & & & & & & & & & &图15
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 图16
阅读(...) 评论()如何用PID算法编程,使单片机通过控制继电器来实现恒温功能。_百度知道
如何用PID算法编程,使单片机通过控制继电器来实现恒温功能。
我有更好的答案
/***********************************************************************
PID温度控制程序程序说明:
系统上电后显示 “--温度”
表示需要先设定温度才开始进行温度检测
温度设定完毕后程序才开始进行PID温控***********************************************************************/#include &reg52.h&#include &absacc.h&#include&DS18B20.H&#include&PID.H&#define uchar unsigned char#define uint unsigned intunsigned char code tab[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF};/*个位0~9的数码管段码*/unsigned char code sao[]={
0x7f,0xbf,0xdf,0xef};//扫描码uchar set=30,keyflag=1 ; //set初始化为30° keyflag为进入温度设定的标志位//4个按键使用说明sbit key_out=P1^0 ; //用于温度设定后的退出sbit key_up=P1^1 ; //设定温度加sbit key_down=P1^2 ; //设定温度减sbit key_in=P1^3 ; //在程序的运行中如需要重新设定温度 按下此键才能进入设置模式并且此时是停在温度控制的,按下key_out键后才表示设定完毕void Show_key();/***********************************************************/void delays(unsigned char k){
unsigned char i,
for(i=0;i&k;i++)
for(j=0;j&50;j++);}/*********************************************************//数码管显示函数P0口 作为数据口P2口的低四位作为扫描口变量 x表示扫描d表示是否要加小数点 为1是 为0不加y表示传递的数值*********************************************************/LCD_disp_char(uchar x,bit d,uchar y){
P0=tab[y];
P0=tab[y]&0x7 //与上0x7f表示是否要加小数点
P2=sao[x]; //打开扫描端号
}/*********************************************************按键扫描*********************************************************/void keyscan(void){
if(key_in==0) //按键进入函数
delays(10);
//延时消抖 (以下同)
if(key_in==0)
while(key_in==0)
Show_key(); //如果一直按着键不放 就一直显示在当前状态 (以下同)
keyflag=1 ; //按键标志位
/***********************/
if(key_out==0)
//按键退出
delays(10);
if(key_out==0)
while(key_out==0)
Show_key();
keyflag=0 ;
set_temper=
/*************************/
if(key_up==0)
//设定温度的加
delays(10);
if(key_up==0)
while(key_up==0)
Show_key();
if(keyflag==1)
if(set&90) //如果大于90°就不在加
/*************************/
if(key_down==0)
//温度设定的减
delays(10);
if(key_down==0)
while(key_down==0)
Show_key();
if(keyflag==1)
if(set&30) //温度减到30°时不在往下减
}}/*********************************************************************按键按下时的显示函数***********************************************************************/void Show_key()
output=1 ;
LCD_disp_char(3,0,10); //显示 -
delays(3);
LCD_disp_char(2,0,10); //显示- (表示温度设定 )
delays(3);
LCD_disp_char(1,0,set/10); //显示温度十位
delays(3);
LCD_disp_char(0,0,set%10); //显示温度个位
delays(3);}/*****************************************************************/void main(){ //声明温度中间变量
unsigned char counter=0 ;
PIDBEGIN(); //PID参数的初始化
output=1 ; //关闭继电器输出
keyscan();
if(keyflag)
Show_key(); //显示温度设定
if(counter--==0)
tmp=ReadTemperature();//每隔一段时间读取温度值
counter=20 ;
LCD_disp_char(3,0,tmp/1000);
//显示温度十位
delays(3);
LCD_disp_char(2,1,tmp/100%10); //显示温度个位
//显示小数点
delays(3);
LCD_disp_char(1,0,tmp/10%10); //显示温度小数后一位
delays(3);
LCD_disp_char(0,0,tmp%10);//显示温度小数后二位
delays(3);
compare_temper(); //比较温度}
}}/**********************************************************************************************************************************************///PID算法温控C语言 18:58#ifndef _PID_H__#define _PID_H__#include&intrins.h&#include&math.h&#include&string.h&struct PID{
unsigned int SetP
// 设定目标 Desired Value
unsigned int P
// 比例常数 Proportional Const
unsigned int I
// 积分常数 Integral Const
unsigned int D
// 微分常数 Derivative Const
unsigned int LastE
// Error[-1]
unsigned int PrevE
// Error[-2]
unsigned int SumE
// Sums of Errors};struct PID// PID Control Structure// PID Response (Output)// PID Feedback (Input)sbit output=P1^4;unsigned char high_time,low_time,count=0 ;//占空比调节参数unsigned char set_void PIDInit(struct PID*pp){
memset(pp,0,sizeof(struct PID)); //PID参数初始化全部设置为0}unsigned int PIDCalc(struct PID*pp,unsigned int NextPoint){
unsigned int dError,E
Error=pp-&SetPoint-NextP
pp-&SumError+=E
dError=pp-&LastError-pp-&PrevE
// 当前微分
pp-&PrevError=pp-&LastE
pp-&LastError=E
return(pp-&Proportion*Error+pp-&Integral*pp-&SumError+pp-&Derivative*dError);
// 微分项}/***********************************************************温度比较处理子程序***********************************************************/void compare_temper(){
if(set_temper&temper)
if(set_temper-temper&1)
high_time=100 ; //大于1°不进行PID运算
low_time=0 ;
//在1°范围内进行PID运算
for(i=0;i&10;i++)
//get_temper();
// Read Input
rout=PIDCalc(&spid,rin); //执行PID运算
// Perform PID Interation
if(high_time&=100) //限制最大值
high_time=(unsigned char)(rout/800);
high_time=100;
low_time=(100-high_time);
}/****************************************/
else if(set_temper&=temper) //当实际温度大于设置温度时
if(temper-set_temper&0)//如果实际温度大于设定温度
high_time=0 ;
low_time=100 ;
for(i=0;i&10;i++)
//get_temper();
// Read Input
rout=PIDCalc(&spid,rin);
// Perform PID Interation
if(high_time&100) //此变量是无符号字符型
high_time=(unsigned char)(rout/10000);
high_time=0 ;//限制不输出负值
low_time=(100-high_time);
}}/*****************************************************T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期******************************************************/void serve_T0()interrupt 1 using 1{
if(++count&=(high_time))
output=0 ;
else if(count&=100)
output=1 ;
TL0=0xe0 ;}void PIDBEGIN(){
TMOD=0x01 ;
TL0=0x40 ;
high_time=50 ;
low_time=50 ;
PIDInit(&spid);
// Initialize Structure
spid.Proportion=10 ;
// Set PID Coefficients
spid.Integral=8 ;
spid.Derivative=6 ;
spid.SetPoint=100 ;
// Set PID Setpoint
}#endif 转自他人程序。
采纳率:80%
为您推荐:
其他类似问题
pid算法的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 pid温控器调节方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信