怎样用PID算法对恒温箱的温度进行控制,求相关的51单片机汇编程序

怎样用PID算法对恒温箱的温度进行控制,求相关的51单片机汇编程序,第1张

本设计要求:本温度控制系统为以单片机为核心,实现了对温度实时监测和控制,实现了控制的智能化。设计恒温箱温度控制系统,配有温度传感器,采用DS18B20数字温度传感器,无需数模拟∕数字转换,可直接与单片机进行数字传输,采用了PID控制技术,可以使温度保持在要求的一个恒定范围内,配有键盘,用于输入设定温度;配有数码管LED用来显示温度。

技术参数和设计任务:

1、利用单片机AT89C2051实现对温度的控制,实现保持恒温箱在最高温度为110℃。

2、可预置恒温箱温度,烘干过程恒温控制,温度控制误差小于±2℃。

3、预置时显示设定温度,恒温时显示实时温度,采用PID控制算法显示精确到01℃。

4、温度超出预置温度±5℃时发出声音报警。

5、对升、降温过程没有线性要求。

6、温度检测部分采用DS18B20数字温度传感器,无需数模拟∕数字转换,可直接与单片机进行数字传输

7、人机对话部分由键盘、显示和报警三部分组成,实现对温度的显示、报警。

需要的话联系用户名扣扣

我做过DS18B20温控设备,单总线传感这是一个不错的选择哦。下面是C语言程序,硬件接线如下:

(1)把“单片机系统”区域中的P00-P07用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。

(2)把“单片机系统”区域中的P20-P27用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。

(3)把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。

(4)把“四路单总线”区域中的对应的DQ端子连接到“单片机系统”区域中的P37/RD端子上。

#include <REG52h> //at89c52

#include <INTRINSh>

unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00,0x40};

unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,

25,28,31,34,38,41,44,48,

50,53,56,59,63,66,69,72,

75,78,81,84,88,91,94,97};

unsigned char displaycount;

unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};

unsigned char timecount;

unsigned char readdata[8];

sbit DQ=P3^7;

bit sflag;

bit resetpulse(void)

{

unsigned char i;

DQ=0;

for(i=255;i>0;i--);

DQ=1;

for(i=60;i>0;i--);

return(DQ);

for(i=200;i>0;i--);

}

void writecommandtods18b20(unsigned char command)

{

unsigned char i;

unsigned char j;

for(i=0;i<8;i++)

{

if((command & 0x01)==0)

{

DQ=0;

for(j=35;j>0;j--);

DQ=1;

}

else

{

DQ=0;

for(j=2;j>0;j--);

DQ=1;

for(j=33;j>0;j--);

}

command=_cror_(command,1);

}

}

unsigned char readdatafromds18b20(void)

{

unsigned char i;

unsigned char j;

unsigned char temp;

temp=0;

for(i=0;i<8;i++)

{

temp=_cror_(temp,1);

DQ=0;

_nop_();

_nop_();

DQ=1;

for(j=10;j>0;j--);

if(DQ==1)

{

temp=temp | 0x80;

}

else

{

temp=temp | 0x00;

}

for(j=200;j>0;j--);

}

return(temp);

}

void main(void)

{

TMOD=0x01;

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

ET0=1;

EA=1;

while(resetpulse());

writecommandtods18b20(0xcc);

writecommandtods18b20(0x44);

TR0=1;

while(1)

{

;

}

}

void t0(void) interrupt 1 using 0

{

unsigned char x;

unsigned int result;

TH0=(65536-4000)/256;

TL0=(65536-4000)%256;

if(displaycount==2)

{

P0=displaycode[displaybuf[displaycount]] | 0x80;

}

else

{

P0=displaycode[displaybuf[displaycount]];

}

P2=displaybit[displaycount];

displaycount++;

if(displaycount==8)

{

displaycount=0;

}

timecount++;

if(timecount==150)

{

timecount=0;

while(resetpulse());

writecommandtods18b20(0xcc);

writecommandtods18b20(0xbe);

readdata[0]=readdatafromds18b20();

readdata[1]=readdatafromds18b20();

for(x=0;x<8;x++)

{

displaybuf[x]=16;

}

sflag=0;

if((readdata[1] & 0xf8)!=0x00)

{

sflag=1;

readdata[1]=~readdata[1];

readdata[0]=~readdata[0];

result=readdata[0]+1;

readdata[0]=result;

if(result>255)

{

readdata[1]++;

}

}

readdata[1]=readdata[1]<<4;

readdata[1]=readdata[1] & 0x70;

x=readdata[0];

x=x>>4;

x=x & 0x0f;

readdata[1]=readdata[1] | x;

x=2;

result=readdata[1];

while(result/10)

{

displaybuf[x]=result%10;

result=result/10;

x++;

}

displaybuf[x]=result;

if(sflag==1)

{

displaybuf[x+1]=17;

}

x=readdata[0] & 0x0f;

x=x<<1;

displaybuf[0]=(dotcode[x])%10;

displaybuf[1]=(dotcode[x])/10;

while(resetpulse());

writecommandtods18b20(0xcc);

writecommandtods18b20(0x44);

}

}

Good luck!

第一步:把器件等各种实物连上

第二步:开环,对PWM的控温信号加阶跃(改变PWM的占空比),由输入输出的结果大致得出加热器的数学模型

第三部:由理论公式整定出PID参数

第四部:根据实际结果调节PID以达到你想要的指标

可选用两种控制方式温控器:1上下限控制方式温控器:即,可对温控器设点两个温度点,当温度高于某一温度时停止给加热丝供电;当温度低于某一设定温度时启动加热丝供电加热。这种方式烘箱内温度可控制在02度的波动。

2PID调节控制方式温控器:即,可对温控器设定一个恒温点,温控器会根据箱内温度与设定恒温值得差的大小,以及两者温差的变化速度通过PID算法,自动调节加热丝的加热功率,使烘箱内温度恒定为设定温度。这种方式可控制温度在01度内波动。

呵呵,兄弟啊,你OUT了,OMRON的CQM1H的PLC有专用的温度控制模块。温度控制模块内自带CPU来做PID运算,需要你做的工作就是设置P/I/D三个参数值,其他的运算什么的都是他自己做的

系统功率越大,热容量越小。

p1值越小。p2越小,积分作用越明显。

rt越小,响应越快。

对于多数系统,调整rt、P1参数即可获得满意的效果。

对于多数系统,P1的取值范围在千位数,P2的取值范围在百位数,rt的取值范围在十位数或百位数, 一般可先取P1=2000,P2=200,rt=100进行试验,然后根据输出百分比来调整。

在调整参数时,调整范围应先从大到小。若出现21现象可把P1由2000调为1000,把rt由100调为200,如果调整后的控制效果如22,则说明P1的取值在1000-2000之间,rt取值在100-200之间。逐渐减小调整范围,即可得到理想的参数。

由于仪表采用的是模糊PID控制算法,输出百分比的变化是振荡式的,因此观察输出百分比的变化趋势应以总体趋势为准。输出百分比变化时的振荡幅度大小主要是由P1决定的,P1越大,振荡的幅度越大。

以上就是关于怎样用PID算法对恒温箱的温度进行控制,求相关的51单片机汇编程序全部的内容,包括:怎样用PID算法对恒温箱的温度进行控制,求相关的51单片机汇编程序、求一温度控制的C语言程序、用PID算法实现温度控制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10083757.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存