温控课程设计张洪彬Word文档格式.docx
《温控课程设计张洪彬Word文档格式.docx》由会员分享,可在线阅读,更多相关《温控课程设计张洪彬Word文档格式.docx(35页珍藏版)》请在冰豆网上搜索。
第二章原理分析
2.1温度控制器的结构
运用protues软件进行仿真,keil软件与其调试
2.2各电路的原理分析
本设计采用上电按钮复位电路:
首先经过上电复位,当按下按键时,RST直接与VCC相连,为高电平形成复位,同时电解电容被电路放电;
按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,单片机芯片正常工作。
其中电阻R2决定了电容充电的时间,R2越大则充电时间长,复位信号从VCC回落到0V的时间也长。
本设计晶振电路采用12M的晶振。
晶振的作用是给单片机正常工作提供稳定的时钟信号。
单片机的晶振并不是只能用12M,只要不超过20M就行,在准许的范围内,晶振越大,单片机运行越快,还有用12M的就是好算时间,因为一个机器周期为1/12时钟周期,所以这样用12M的话,一个时钟周期为12us,那么定时器计一次数就是1us了,电容范围在20-40pF之间,这里连接的是22pF的电容。
机器周期=10*晶振周期=12*系统时钟周期
电路接法:
三极管选定PNP型,基极B连接5V电压,发射极E连接一个1K左右的电阻后接I/O口,集电极C连接蜂鸣器后接地。
单片机在复位后的个I/O口是高电平,此时三极管是截止的,编写程序使选定的I/O为低电平,此时三极管导通,导通后蜂鸣器与电源正极连通,构成一个工作回路,从而发出滴滴的响声。
其中电阻R1在电路里起分压限流的作用,PNP三极管起到模拟开关的作用。
第三章原理图绘制
3.1原理图设计的一般步骤
1.创建一个工程文档:
file,new,project,pcbproject(创建工程文档很重要,为后面原理图的检错,产生网络表和PCB设计奠定基础,否则不能进行设计);
2.创建一个原理图文件:
file,new,schematic,并且保存全部文件;
3.设置图纸的大小:
右击图纸,options,documentoptions,standardstyles选择图纸大小;
4.放置元件图符号:
libraries,选择miscellaneousdevices原理图库,寻找原理图元件图符号,并且,注意元件的封装(一般都带有封装,没有的话,可以按TAB键进行选择合适的封装后再放置元件,这样每放一个元件,就有相应的封装了),可以先放置好一类符号元件,然后放另外一类的元件,直至一一放完所有的元件,例如,放置完所有的电阻元件等等);
在放置元件图符号时,对于已经装载的库中没有的,或找不到的元件,必须查找。
查找元件图:
点击原理图纸空白处,在弹出的下拉菜单中,选择findcomponent,在librariessearch中,输入要查找的元件名称,选中clearexistingquery,scope中,选择librariesonpath,path定位于安装2004的文件夹,按查找即可进行查找中;
5.给元件规划流水号(系统给元件自动编号,注意一般不手动编号,否则容易发生错误!
):
tools,annotatequiet(如果没有规划好,可以复位后重来规划:
tools,resetdesignators);
6.元件布局与电气连接:
手工拖放布局。
布局的优劣以方便电气连接为佳(电气连接有两种方式:
用导线连接和NET连接。
导线连接一定要从元件脚端点开始连线,连接不能重叠,否则会出来多余的点),放置导线与网络电气连接;
7.检查错误:
右击原理图的空白处,workspacepanels,designcompilers,compile
errors,在弹出的compileerrors卡上没有错误,说明编译通过。
保存全部文档;
8.元件的选择,旋转,删除、排列和元件相关参数的修改等等在元件的布局或修改时,经常要用到;
9.产生网络表:
design,netlistfordocument,protel.项目文件夹中可以看到网络表文件,打开,可以看到元件的说明与电路原理图的电连接网络情况;
10.保存并且打印输出原理图纸。
3.2元件库的设计
libraries,选择miscellaneousdevices原理图库,寻找原理图元件图符号,并且,注意元件的封装;
5.给元件规划流水号:
tools,annotatequiet;
第四章PCB图的绘制
1.创建一个PCB文档:
file,new,PCB,SAVEALL;
2.PCB参数设置:
右击PCB的空白处,选择options,boardoptions,选择测量单位;
在keepoutlayer层,选择place,dimension,dimension画标尺的长度,以规划电路版的长宽大小,再选择place,line,画版的大小;
再右击PCB的空白处,选择design,rules,在弹出的卡中点击routing,width进行设置连接导线的宽度,和布线板层的层数routinglayers,单面板,只选择bottomlayer,双面板,还要选择toplayer;
3.将原理图中各元件的电气连接关系,导入PCB文档中各元件封装的连接关系,为元件布局的连线提供保证。
步骤:
在PCB文档中,选择design,updateschematicinPCBproject.prjpcb,在弹出的confirm中选择YES,在弹出的differencesbetweenschematicdocumentandPCBdocument卡中右击,点击updateallinPCBdocument,再点击createengineeringchangeorder,再点击validatechanges,STATUS栏全部打勾后,说明基本没有问题,最后点击executechanges,在PCB板中导入了连接;
4.将元件选中并拖入PCB板框内,检查元件的封装是否合适后,手工布局。
布局时要用到元件封闭的选择、旋转、排列和封装的更换与查找。
为布线提供良好的环境,使布线布通的概率提高,尽量少用跳线;
5.规划焊盘的大小与打孔孔径大小:
选择相似的焊盘:
右击该焊盘,findsimilarobjects,在弹出的卡中,在该焊盘尺寸的X和Y座标栏中选择SAME,点击OK,再在Inspector卡中,修改X和Y座标相关焊盘参数和holesize参数后,点击左键,系统即会对相关参数进行修改。
6.手工布线:
对哪层布线前,就要先选择该层后进行布线:
interactivelyroute
connections;
7.保存并且输出PCB板图;
总结:
通过这次课程设计对EDA设计有了更深的了解。
在设计的时候会出现些错误,培养了自己运用科学的方法分析问题、解决问题的能力。
第五章软件的设计
本课程设计使用的软件为keil,通过不断的调试,最后完成了软件的设计:
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P2^0;
//18B20数据线引脚
sbitsp=P2^1;
//蜂鸣器端口
sbitd1=P2^2;
//继电器
sbitled1=P2^3;
//上限温度指示
sbitled2=P2^4;
//正常温度指示
sbitled3=P2^5;
//下限温度指示
sbitSET=P3^0;
uchardispbuf[4];
//显示缓冲区
uchartemper[2];
//存放温度
ucharcodetable[]={
0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,};
ucharcodetable1[]={//只定义个位带小数部分
0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voiddelay1(uintz)//小延时,用于对DS18B20的操作
while(z--);
voidreset(void)//复位操作
ucharx=0;
DQ=1;
delay1(8);
//稍做延时10us
DQ=0;
delay1(80);
//精确延时大于480us
//拉高总线
delay(14);
x=DQ;
delay1(20);
ucharreadbyte(void)//从DS18B20读一字节
{uchari=0;
uchardat=0;
for(i=8;
i>
i--)
{
dat>
>
=1;
//00000001//10000000//01000000//...
DQ=1;
if(DQ)//判断数据线dq是0还是1
dat|=0x80;
//或,如果dat为1则为1,为0则为0
delay1(4);
}
return(dat);
voidwritebyte(unsignedchardat)//向DS18B20写一字节
uchari=0;
i>
i--)
DQ=dat&
0x01;
//00000001发送1
delay1(5);
//延时45us
voidreadtemp(void)//CPU读取温度值
uchara=0,b=0;
reset();
writebyte(0xCC);
//跳过序列号
writebyte(0x44);
//启动温度转换
writebyte(0xBE);
//读9个寄存器,前两个为温度
a=readbyte();
//低位
b=readbyte();
//高位
temper[0]=a&
0x0f;
a=a>
4;
//低位右移4位,舍弃小数部分
temper[1]=b<
<
//高位左移4位,舍弃符号位
temper[1]=temper[1]|a;
voidsaomiao()
P0=table[dispbuf[0]];
//十位
P1=0xfe;
delay
(2);
P1=0xff;
P0=table1[dispbuf[1]];
//个位
P1=0xfd;
P0=table[dispbuf[2]];
//十分位
P1=0xfb;
P0=table[dispbuf[3]];
//百分位
P1=0xf7;
//温度控制
if(dispbuf[0]>
5)//设置上线
{d1=1;
led1=0;
led3=1;
led2=1;
sp=1;
delay
(1);
sp=0;
elseif(dispbuf[0]<
3)//设置下线
led3=0;
led1=1;
else//设置正常状态
{d1=0;
led2=0;
voidmain()
uchari;
uchartemp;
floatbackbit;
ucharcounter;
counter=5;
sp=1;
for(i=0;
i<
i++)
dispbuf[i]=0;
while
(1)
//温度测量频率没有必要太高,太高反而影响数码显示
//所以用计数器加以控制
if(SET==0)
{d1=0;
sp=0;
delay(2000);
do{}while(SET==0);
}
if(counter--==0)
readtemp();
counter=2;
//readtemp();
//读18B20
backbit=temper[0];
//换成浮点数
backbit=backbit*6.25;
//乘以0.0625*100
temp=backbit;
//取低2位整数部分
dispbuf[3]=temp%10;
temp=temp/10;
dispbuf[2]=temp%10;
temp=temper[1];
//取整数部分
dispbuf[1]=temp%10;
dispbuf[0]=temp%10;
saomiao();
通过本次课程设计,逐渐的掌握了keil、protues、dxp等软件的应用方法及温度传感器DS18B20的读取和写入。
进一步的了解51单片机的应用。
在模拟仿真的过程中,学到了在课堂上不会学习到的知识,有的时候虽然原理是可行的,但是,在实际当中却相差很远,比如蜂鸣器、电机的使用,虽然说在原理仿真上是可行的,但是在实际过程中要考虑它的功率以及驱动电流。
此外在制作的PCB的时候要考虑诸多的因素,之前要考虑封装的可行性,再到后来的板子大小,器件的布局,布线的方法等等。
总而言之,经过老师的严格要求下,使我有了制作PCB的基本经验,对今后的自己制作以及毕业设计有很大的帮助。
附录:
温度控制器仿真图:
温度控制器原理图:
温度控制器PCB:
温度控制器网络表:
[
8SEG-LED1
LEDSHUMAYIN
SHUMA_YIN
]
8SEG-LED2
0.5INCH-DISP
8SEG-LED3
8SEG-LED4
12M
BCY-W2/D3.1
XTAL
B1
RB5-10.5
Motor
C1
RAD-0.3
Cap
C2
C3
RB7.6-15
CapPol1
D1
LED
D2
D3
D4
K1
DIP-P5/X1.65
Relay-SPDT
LS1
PIN2
Speaker
P1
HDR1X4
USB
Q1
BCY-W3/E4
2N3906
Q2
R1
AXIAL-0.4
Res2
R2
R3
R4
R5
R6
RP1
SIP9
RESPACK8COMMON
S1
SPST-2
SW-PB
S2
U1
DIP-40
AT89C52
U2
PR35
DS1820
(
VCC
B1-1
C3-1
P1-4
Q1-1
Q2-1
R4-1
RP1-1
S1-2
U1-31
U1-40
U2-3
)
P1.3
8SEG-LED4-9
U1-4
P1.2
8SEG-LED3-9
U1-3
P1.1
8SEG-LED2-9
U1-2
P1.0
8SEG-LED1-9
U1-1
Net12M_1
12M-1
C1-2
U1-19
Net12M_2
12M-2
C2-2
U1-18
NetB1_2
B1-2
D4-A
NetD1_K
D1-K
R3-2
NetD2_K
D2-K
R4-2
NetD3_K
D3-K
R5-2
NetD4_K
D4-K
K1-3
NetK1_5
K1-5
Q1-3
NetLS1_1
LS1-1
Q2-3
NetQ2_2
Q2-2
R6-1
NetR1_1
R1-1
R2-2
U1-9
NetR1_2
R1-2
S1-1
NetR3_1
R3-1
R5-1
NetS2_2
S2-2
U1-10
GND
C1-1
C2-1
C3-2
K1-1
K1-4
LS1-2
P1-1
R2-1
S2-1
U1-20
U2-1
D7
8SEG-LED1-8
8SEG-LED2-8
8SEG-LED3-8
8SEG-LED4-8
RP1-9
U1-32
D6
8SEG-LED1-7
8SEG-LED2-7
8SEG-LED3-7
8SEG-LED4-7
RP1-8
U1-33
D5
8SEG-LED1-6
8SEG-LED2-6
8SEG-LED3-6
8SEG-LED4-6
RP1-7
U1-34
8SEG-LED1-5
8SEG-LED2-5
8SEG-LED3-5
8SEG-LED4-5
RP1-6
U1-35
8SEG-LED1-4
8SEG-LED2-4
8SEG-LED3-4
8SEG-LED4-4
RP1-5
U1-36
8SEG-LED1-3
8SE