PID温控器的设计.docx
《PID温控器的设计.docx》由会员分享,可在线阅读,更多相关《PID温控器的设计.docx(15页珍藏版)》请在冰豆网上搜索。
PID温控器的设计
成都理工大学工程技术学院
PID温控器的设计
[基于单片机的课程设计]
+
目录
一.设计目的3
二.实际要求:
3
三.设计过程:
3
1.原理图3
2.PID温控器储存系统设计4
3.LED静态显示5
3.1硬件连接图5
3.2仿真程序5
3.3LED静态显示仿真图6
4.PID温控器LED显示及仿真6
4.1硬件连接图6
4.2仿真程序7
4.3LED显示仿真9
5.PID温控器的键盘设计及仿真10
5.1硬件连接图10
5.2仿真程序10
5.3仿真电路12
四.设计总结:
12
一.设计目的
温控器设计是一项综合性的专业实践活动,有用到单片机,程序设计,接口技术等,其目的是让学生将所学的基础知识和专业知识运用到具体的工程实践中,以培养学生的综合运用能力时间动手能力,为以后的毕业设计打下良好的基础。
二.实际要求:
1.进行温度测量,测量范围-10~+50度;
2.将温度测量值在液晶显示模块上显示;
3.可以通过按键进行温度上下限报警设置;
4.扩展功能:
(1).具有温度控制输出执行功能;
(2).具有数据通信和传输功能。
三.设计过程:
1.原理图
图一
图一是PID温控器的工作原理图。
电炉内的热电阻温度传感器测出的温度信号经运算放大器放大和模/数转换后,由8051读出电阻炉炉温,控制程序根据当前炉温和目标温度的偏差,按照一定的控制方法控制开关K的开与断,提供适当的加热功率,以使炉温尽快趋近目标温度。
PID温控器还通过串口与PC通信,以实现远程控制。
LED和键盘用于人机接口,交流电过零检测部分可使8051只在正弦交流电零点附近控制开关K的通与断,以避免对交流电斩波而造成干扰。
2.PID温控器储存系统设计
2.1温控系统扩展图
图2
PID温控器的存储系统设计中使用了一片3-8译码器74LS138来产生个芯片所需要的片选信号。
6264的CE非信号来自于74LS138的Y3非输出(后续设计中8255A、ADC0808等口芯片的片选信号也来自74LS138)。
要使Y3非为低电平选中6264,则C、B、A的输入应为011,由此可计算出6264的二进制地址范围0110000000000000~01111111111111,写成十六进制为0x6000~0x7FFF,2764的十六进制地址范围为0x0000~0x1FFF。
3.LED静态显示
3.1硬件连接图
图3.1
3.2仿真程序
#include"absacc.h"
unsignedcharcodeLED_CODES[]={0xc0,0xf9,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e,0xff,0x0c,0x89,0x7f,0xbf
};
voidmain()
{
XBYTE[0x0000]=LED_CODES[1];
XBYTE[0X0100]=LED_CODES[2];
XBYTE[0X0200]=LED_CODES[3];
while
(1);
}
3.3LED静态显示仿真图
图3.2
4.PID温控器LED显示及仿真
4.1硬件连接图
图4.1
8255A是较复杂的并行接口芯片,在PID温控器主要用作I/O口扩展,用于LED的显示。
在编程时注意,由于8255A的复位时间较长,在应用程序访问8255A之前,应该有足够的延时保证8255A以正确复位,仿真时可不延时,但实际电路中必须加足够的延时。
4.2仿真程序
/*****display.h*****/
/*8255*/
#defineBASE0x0000
#definePOPT_A(BASE)
#definePOPT_B(BASE+1)
#definePOPT_C(BASE+2)
#definePOPT_CONTROL(BASE+3)
#defineLEDS6
#defineCA0
#defineCC1
voidturn_On(charled,charChNumber,charmode);
voidLedsOff();
voidOneByOne(chardatas[]);
externvoidInit8255();
unsignedcharcodeSelect[];
unsignedcharcodeLED_CODES[];
/******display.c*******/
#include"absacc.h"
#include"reg51.h"
#include"display.h"
unsignedcharcodeSelect[]={0x01,0x02,0x04,0x08,0x10,0x20};
unsignedcharcodeLED_CONES[]={0xc0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,
0x8E,0xFF,0x0C,0x89,0x7F,0XBF
};
voidInit8255()
{
unsignedchari,j;
for(j=0;j<10;j++)
for(i=0;i<255;i++);
XBYTE[POPT_CONTROL]=0x90;
LedsOff();
}
voidturn_On(charled,charChNumber,charmode)
{
if(mode==CA)
XBYTE[POPT_C]=~LED_CODES[ChNumber];
else
XBYTE[POPT_C]=LED_CODES[ChNumber];
XBYTE[POPT_B]=Select[led];
}
voidLedsOff()
{
XBYTE[POPT_B]=0x00;
}
/*******main.c*****/
#include"reg51.h"
#include"display.h"
voidmain()
{
unsignedintm;
unsignedchari;
Init8255();
i=LEDS-1;
while
(1)
{
LedsOff();
for(m=50;m!
=0;m--);
turn_On(i,i,CC);
for(m=50;m!
=0;m--);
if(i==0)i=LEDS-1;
elsei--;
}
}#include"reg51.h"
#include"display.h"
voidmain()
{
unsignedintm;
unsignedchari;
Init8255();
i=LEDS-1;
while
(1)
{
LedsOff();
for(m=50;m!
=0;m--);
turn_On(i,i,CC);
for(m=50;m!
=0;m--);
if(i==0)i=LEDS-1;
elsei--;
}
}
4.3LED显示仿真
图4.2
5.PID温控器的键盘设计及仿真
5.1硬件连接图
图5.1
图5.1中右上角是键盘矩阵,行扫描信号R0~R3来自于51单片机P1口的P1.0~P1.3,列扫描信号来自于51单片机的P1.4、P1.7,LED的为位驱动部分封装在LEDDRIVER中,除了用ULA2003A以外,也可以用三极管驱动。
由于三极管是模拟器件,仿真速度慢,所以在PID温控器的仿真设计时采用ULA2003A,但在实际电路板上可采用三极管作位驱动。
5.2仿真程序
#include"absacc.h"
#include"display.h"
#include"Reg51.h"
voiddelay()
{chari;
for(i=255;i!
=0;i--);
}
charkeyCheck(char*row,char*col)
{
unsignedcharp1,t1,t2,t3,i;
unsignedcharResult=0;
p1=0xF0;t1=p1;
if(t1==0xf0)gotoexit;
for(i=11;i!
=0;i--)
delay();
t1=p1;
if(t1==0xf0)gotoexit;
Result=1;
t2=0x80;t1=~t1;
for(i=4;i!
=0;i--)
{t3=t2&t1;
if(t3!
=0){*col=i-1;break;}
elset2=t2>>1;
}
t1=~t1;
t1=t1|0x0f;
p1=t1;
t1=p1;
t2=0x08;t1=~t1;
for(i=4;i!
=0;i--)
{t3=t2&t1;
if(t3!
=0){*row=i-1;break;}
elset2=t2>>1;
}
exit:
returnResult;
}
#include"stdio.h"
#include"absaCC.h"
#include"Reg51.h"
externcharkeyCheck(char*row,char*col);
voidmain()
{charrow,col,r;
charstrIndexs[6]={20,20,20,20,20,20};
unsignedchari,k;
voidInit8255();
while
(1)
{
r=keyCheck(&row,&col);
if(r==0)
{strIndexs[5]=20;strIndexs[4]=20;
strIndexs[1]=20;strIndexs[0]=20;
}
else
{strIndexs[5]=0;strIndexs[1]=0;
strIndexs[4]=row;strIndexs[0]=col;
}
for(k=6;k!
=0;k--)
{voidLedsoff();
for(i=50;i!
=0;i--);
turn_On(k-1,strIndexs[k-1],CC);
for(i=50;i!
=0;i--);
}
}
}
5.3仿真电路
图5.2
四.设计总结:
通过此次课程设计,使我更进一步掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考以及与同学的探讨,一遍又一遍的检查终于查出了原因所在,也暴露出了前期我在这方面的知识的欠缺和经验不足。
实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
在课程设计中我们不断发现错,不断改正,不断领悟,不断获取,这让我们获得了不少人生经验。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,同学的帮助下,都得到了解决。
在今后的学习实践过程中,一定要不懈努力,不能遇到问题就想到退缩,,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的人生道路上披荆斩棘,而不是知难而退,那样永远不可能获得成功,收获喜悦,也永远不可能得到社会及他人对你的认可。