c51单片机温度传感器控制电机转动.docx

上传人:b****7 文档编号:25178947 上传时间:2023-06-05 格式:DOCX 页数:18 大小:566.86KB
下载 相关 举报
c51单片机温度传感器控制电机转动.docx_第1页
第1页 / 共18页
c51单片机温度传感器控制电机转动.docx_第2页
第2页 / 共18页
c51单片机温度传感器控制电机转动.docx_第3页
第3页 / 共18页
c51单片机温度传感器控制电机转动.docx_第4页
第4页 / 共18页
c51单片机温度传感器控制电机转动.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

c51单片机温度传感器控制电机转动.docx

《c51单片机温度传感器控制电机转动.docx》由会员分享,可在线阅读,更多相关《c51单片机温度传感器控制电机转动.docx(18页珍藏版)》请在冰豆网上搜索。

c51单片机温度传感器控制电机转动.docx

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.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1