c51单片机温度传感器控制电机转动.docx
- 文档编号:25178947
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:18
- 大小:566.86KB
c51单片机温度传感器控制电机转动.docx
《c51单片机温度传感器控制电机转动.docx》由会员分享,可在线阅读,更多相关《c51单片机温度传感器控制电机转动.docx(18页珍藏版)》请在冰豆网上搜索。
c51单片机温度传感器控制电机转动
职oi啟io亂u忡iv询iw
课程设计报告
基于单片机的DS18B20温度控制设计
学院:
专业:
班级:
计算机科学与工程
计算机科学与技术
090603
学号:
090603120
姓名:
张阳阳
指导老师:
乔永兴
1引言3
2设计要求3
2.1基本要求3
2.2扩展功能错误!
未定义书签。
3总体方案设计3
3.1方案论证3
3.1.1方案一3
3.1.2方案二3
3.2总体设计框图4
4硬件设计4
4.1单片机系统4
4.2数字温度传感器模块5
4.2.1DS18B20性能5
4.2.2DS18B20外形及引脚说明6
4.2.3DS18B20接线原理图6
4.2.4DS18B20时序图6
4.2.5数据处理8
4.3显示电路9
5软件设计9
5.1主程序模块9
5.2读温度值模块10
5.3中断模块12
5.4温度查询模块错误!
未定义书签。
6源程序13
7总结15
参考文献:
15
1引言
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。
数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。
其中数字温度计就是一个典型的例子。
数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。
其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C5单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输出,经处理用LED数码管实现温度值显示。
2设计要求
2.1基本要求
实现实时温度显示,测温范围0〜50°C,误差50C以内
3总体方案设计
3.1方案论证
3.1.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。
这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。
3.1.2方案二
考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。
另外DS18B20具有3引脚的小体积封装,测温范围为-55~+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。
以上两种方案相比较,第二种方案的电路、软件设计更简单,此方案设计的
系统在功耗、测量精度、范围等方面都能很好地达到要求,故本设计采用方案二
3.2总体设计框图
LED显示模块、按键控
本方案设计的系统由单片机系统、数字温度传感器、制模块、温度报警模块组成,其总体架构如下图1。
图1系统总体方框图
4硬件设计
4.1单片机系统
1.本设计采用STC89C5单片机作为控制器,完成所有功能的控制,包括:
DS18B20数字温度传感器的初始化和读取温度值
LED数码管显示驱动与控制按键识别和响应控制温度设置和报警温度值的存储和读取
2.单片机系统电路原理图:
图2单片机系统原理图
4.2数字温度传感器模块
4.2.1DS18B20性能
独特的单线接口仅需一个端口引脚进行通信
简单的多点分布应用无需外部器件可通过数据线供电零待机功耗
测温范围-55~+125C,以0.5C递增
可编程的分辨率为9~12位,对应的可分辨温度分别为0.5C、
0.25°C、0.125C和0.0625C
温度数字量转换时间200ms12位分辨率时最多在750ms内把温度转换为数字
应用包括温度控制、工业系统、消费品、温度计和任何热感测系统负压特性:
电源极性接反时,传感器不会因发热而烧毁,但不能正常工作
422DS18B20外形及引脚说明
图3DS18B20外形及引脚
GND地
DQ单线运用的数据输入/输出引脚
VD可选的电源引脚
4.2.3DS18B20接线原理图
单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。
MX
2l£B2OdiRll
DM
g
10ao□S1SE2:
-
图4DS18B20接线原理图
4.2.4DS18B20时序图
主机使用时间隙来读写DS18B20的数据位和写命令字的位。
1.初始化时序如下图:
UNETYPELEGENO:
BusmasleHTadtryelow
DStBBfQah榊tow
—■
Bcuhbusfnai减事andOS18B2DBd^elew
Rea«lorputt-up
图5DS18B20初始化时序
2.
DS18B20读写时序:
图6DS18B20读写时序
425数据处理
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的
第0和第1个字节。
单片机可通过单线接口读到该数据,读取时低位在前,咼位在后。
-1一
21
0
MSb
(unit=
°C)
LSb
S
s
S
S
s
图7字节分配
LSB
NLSB
下表为12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位
为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,
这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125C的数字输出为07D0H,
实际温度=07D0H*0.0625=2000*0.0625=125C。
例如-55C的数字输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作运算),
实际温度=370H*0.0625=880*0.0625=55C。
可见其中低四位为小数位。
TEMPERATURE
DIGITALOUTPUT
1Biliary)
DIGITALOUTPn(Hz)
+12化
■J000011L1101GOOD
07301k
r峠"毗
0000010101010000
0550k*
+25.0615°C
0000000110010001
019111
十10丄2刖C
0000000010190010
D0A211
ooftomoomm1cm
o°c
0000000000000000
OOOOh
;5CC
11L1111L11111003
FFFShn
-10」曰c
mimioioihid
1心
mimooiiomi
FF6F11
iiiiiionlootonoD
F「Wh
'Th#亠WU
图8DS18B20温度数据表
4.3显示电路
LED数码管显示采用动态扫描方式,能简化电路布线,节约单片机I/O端口
段码和位码由单片机P0送出,分别用74HC673N锁存。
E
LJJ
M
5软件设计
5.1主程序模块
图9数码管驱动显示电路
主程序需要调用3个子程序,分别为:
实时温度显示子程序:
驱动数码管把实时温度值送出在LED数码管显示
查询记录温度值子程序:
查询过去存储的温度值,最多可查询10个值温度设定、报警子程序:
设定报警温度值,当温度超过该值时产生报警,即驱动蜂鸣器鸣叫、8个发光二极管发光
主程序流程图:
图12主程序流程图
5.2读温度值模块
读温度值模块需要调用4个子程序,分别为:
DS18B20初始化子程序:
让单片机知道DS18B20在总线上且已准备好操作
DS18B20写字节子程序:
对DS18B20发出命令
DS18B20读字节子程序:
读取DS18B20存储器的数据
延时子程序:
对DS18B20操作时的时序控制
1.读温度值模块流程图:
返回
2.DS18B20初始化子程序流程图:
图14DS18B20初始化子程序流程图
3.DS18B20写字节和读字节子程序流程图:
5.3中断模块
中断采用T0方式1,初始值定时为50ms。
中断模块需调用两个子程序:
读温度值子程序:
定时读取温度值,实时更新温度值记录温度值子程序:
定时记录温度值,供查询使用
把这两个子程序放在中断的原因是,不会因为调整报警温度或查询历史温度值而停止更新温度值和记录温度值。
中断模块流程图:
定时器重置初值
计数值加1
1秒?
读温度值
1
HN
r
记录温度值
:
中断返回
图17中断模块流程图
6源程序
#inelude
#inelude
#defineBYTEunsignedchar
#defineWORDunsignedint
#defineAD0809XBYTE[0X8000]sbitP1_0=P1A0;
sbitP1_1=P1A1;sbitCH0=P1A0;
sbitCH1=P1A1;
//BYTEcodedis_code[]={0x03,0x9f,0x25,0x0d,0x99,0x49,
//0x41,0x1f,0x01,0x09,0x11,0xc1,
//0x63,0x85,0x61,0x71,0x00};/*字符编码*/
BYTEcodedis_code[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x00};
floatdisp(BYTEdat);voiddsend(BYTEdat);
voidstart();
voidstart(floattemp){
if(temp>30.0)
P1_0=0X00;P1_1=0X01;
CH0=P1_0;
CH1=P1_1;
}else
{
P1_0=0X00;P1_1=0X00;
CH0=P1_0;
CH1=P1_1;
}
/*显示子程序*/
floatdisp(BYTEdat)
{
WORDj;
floattemp=dat;
BYTEa,b;
temp=dat/255.0*50.0;for(j=0;j<5000;j++);
a=temp;a%=10;dsend(a);
b=temp/10;
dsend(b);
returntemp;}
voiddsend(BYTEdat)
{
BYTEi=dat;
SBUF=dis_code[i];while(TI==0);
TI=0;
/*采用查寻方式AD转换程序*/voidmain(void){
BYTEdat;
BYTEdat1;
WORDj;
7总结
此次课程设计中,难点在于DS18B20的使用,即对它的时序控制、初始化以及字节读写方法,任何一个环节出错或是时序控制不到位的话就不能得到正确的数据。
一旦学会了正确的使用方法,就能感觉到它带来的便利是热电偶不能比拟的,以后再次使用的话就能很快上手了。
软件设计中,把程序按功能分模块的话能提高编程效率,把问题一一解决,同时画流程图能帮助理清思路,使问题简单化。
另一方面,取变量名时也要讲究技巧,应尽量使其见名知意,同样地,写程序时加注释确是非常必要的,否则隔一段时间后,想再改进或做扩展的话就比较困难了,因为即使是自己写的程序也变得难读难懂了。
参考文献:
1.徐玮.C51单片机高效入门(第2版).北京:
机械工业出版社,2010.
2.龙脉工作室,刘鲲,孙春亮(修订版).北京:
人们邮电出版社,2010.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c51 单片机 温度传感器 控制 电机 转动
![提示](https://static.bdocx.com/images/bang_tan.gif)