本设计要求:本温度控制系统为以单片机为核心,实现了对温度实时监测和控制,实现了控制的智能化。设计恒温箱温度控制系统,配有温度传感器,采用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算法实现温度控制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)