搜索
您的当前位置:首页正文

王健_数码管显示的温控电动机设计详解

来源:易榕旅网
 中北大学计算机控制技术课程设计说明书

1 引言

1.1 设计任务与要求

(1)使用AT89C51单片机为核心,使用4位集成式数码管显示当前温度,温度传感器使用DS18B20。

(2)用4位集成式数码管显示当前温度,当温度在-200 ~ 700范围之外时,直流电动机开始旋转。 1.2 实用价值与理论意义

电动机作为电能转换的传动装置被广泛应用于机械、冶金、石油化学、国防等工业部门中,随着对生产工艺、产品质量的要求不断提高和产量的增长,越来越多的生产机械要求能实现自动调速。

在现代工业中,电动机作为电能转换的传动装置被广泛应用于机械、冶金、石油化学、国防等工业部门中,随着对生产工艺、产品质量的要求不断提高和产量的增长,越来越多的生产机械要求能实现自动调速。

数码管温控电机是多种技术知识的结合,不仅涉及到软件的设计,而且还将应用电子技术与单片机的应用技术有机结合,使其具有精度高、测量误差小、稳定性好等特点。电路板的设计技术和机械加工工艺的巧妙结合,使其具备了显示直观、体积做工精细等特点,能为它在其它领域的广泛应用打下良好的基础。因为经过我们调查发现许多应用场合原来就有测温控温仪器,只是随着对生产质量与生产需要的要求在不断地提高,以往的那些测温控温的仪器根本不能满足现在的要求。其中,有部分应用场合对精度提高的幅度要求也不是特别高。因此,为了提高性价比,我所设计的系统提出在原有系统的基础上进行一些简单的改良,以此为出发点,主要阐述的是一种数码管显示的温控电动机的实现方法。现代各种家用电器以及生产机械都广泛应用电动机来驱动,电动机的作用是将电能转换为机械能,但是传统的电动机只是机械的按照其工作原理来工作,需要依靠人手动操作电动机的运行、停止、反向等操作,这样需要消耗大量的人力资源,在操作过程中也有很多不便,有时会因为外界环境和温度的因素使电动机造成不必要的损坏。所以,为了减少这种不必要的损失,在电动机上添加温控装置,可以通过温控装置来监控当前温度,当温度达到要求的温度时,电动机产生相应的操作,

第1 页 共29页

中北大学计算机控制技术课程设计说明书

以达到工程机械或家用电器的功能要求,而添加数码管可以更加直观的监测当前温度。

2 单片机简介

2.1 单片机的定义

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

2.2 AT89C51单片机简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 1.主要特性

AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部

RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 2.AT89C51管脚图

第2 页 共29页

中北大学计算机控制技术课程设计说明书

图2.1 AT89C51管脚图

3 Keil软件和Proteus软件简介

3.1 Keil软件简介

单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种 是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。 3.1.1 Keil软件系统概述

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。

第3 页 共29页

中北大学计算机控制技术课程设计说明书

Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。

3.1.2 Keil C51单片机软件开发系统的整体结构

C51工具包的整体结构中uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

使用独立的Keil仿真器时,注意事项:

(1)仿真器标配11.0592MHz的晶振,但用户可以在仿真器上的晶振插孔中换插其他频率的晶振。

(2)仿真器上的复位按钮只复位仿真芯片,不复位目标系统。

(3)仿真芯片的31脚(/EA)已接至高电平,所以仿真时只能使用片内ROM,不能使用片外ROM;但仿真器外引插针中的31脚并不与仿真芯片的31脚相连,故该仿真器仍可插入到扩展有外部ROM(其CPU的/EA引脚接至低电平)的目标系统中使用。 3.2 Proteus软件简介

Proteus 软件是来自英国Labcenter electronics 公司的EDA 工具软件,Proteus 软件有近20年的历史,在全球广泛使用。它除了具有和其它EDA 工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,它的电路仿真是交互的,可视化的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,可以

第4 页 共29页

中北大学计算机控制技术课程设计说明书

测量仿真的波形及记录仿真数据。在不需要硬件设备投入的情况下,Proteus 软件可以建立完整的电子学习设计开发环境,缩短研发周期,并且降低开发成本。 3.2.1 Proteus软件的构成

Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于多年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“The Route to PCB CAD”。Proteus 产品系列也包含了我们革命性的VSM 技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。

其功能模块:—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。

PROSPICE 仿真器的一个扩展PROTEUS VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED甚至LCD显示CPU模型。 3.2.2 Proteus的主要特征

(1)支持许多通用的微控制器,如ARM、PIC、AVR、以及8051。 (2)交互的装置模型包括:LED和LCD显示、RS232终端、通用键盘。 (3)强大的调试工具,包括寄存器和存储器、断点和单步模式。 (4)IAR C-SPY 和Keil uVision2 等开发工具的源层调试。 (5)应用特殊模型的DLL界面-提供有关元件库的全部文件。

4 DS18B20的软件设计

4.1 DS18B20的简介

4.1.1 DS18B20的主要特性

1.适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电 。 2.独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯 。

3. DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。

第5 页 共29页 中北大学计算机控制技术课程设计说明书

4.DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内。

5.温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。

6.可编程 的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温 。

7.在9位分辨率时最多在 93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 。

8.测量结果直接输出数字温度信号,以\"一 线总线\"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。

9.负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工作。 4.1.2 DS18B20的外形和内部结构

1. DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非

挥发的温度报警触发器TH和TL、配置寄存器。 2.DS18B20的外形及管脚排列如下图4.1:

图4.1 DS18B20外形及引脚排列图 3.DS18B20引脚定义

(1)DQ为数字信号输入/输出端; (2)GND为电源地;

(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

DS18B20寄生电源供电方式电路图如下面图4所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在内

第6 页 共29页

中北大学计算机控制技术课程设计说明书

部 电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1)进行远距离测温时,无需本地电源。

2)可以在没有常规电源的条件下读取ROM 。 3)电路更加简洁,仅用一根I/O口实现测温。

要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由 于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。因此,图4电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。

图 4.2 DS18B20寄生电源工作方式(电源从IO口上获得)

图 4.3 DS18B20外接电源工作方式

第7 页 共29页

中北大学计算机控制技术课程设计说明书 4.2 单片机实现温度转换流程图

单片机实现温度转换读取温度数值程序的流程如图4.4所示 开始 初始化DS18B20 否 应答脉冲 是 发起skip rom的命令 发起Convert T的命令 延时1s等待温度转换完成 初始化DS18B20 否 应答脉冲 是 发起read scratchpad命令 读取第一二字节即为温度数据

图4.4单片机实现温度转换读取温度数值程序的流程图

第8 页 共29页

中北大学计算机控制技术课程设计说明书

5 数码管显示的温控电动机

5.1 设计要求

(1)使用AT89C51单片机为核心,使用4位集成式数码管显示当前温度,温度传感器使用DS18B20。

00(2)用4位集成式数码管显示当前温度,当温度在20C~70C范围之外

时,直流电动机开始旋转。 5.2 设计过程 5.2.1 设计程序及编写

先建立一个新的工程,保存到一个位置,如图5.1所示:

图5.1 新建工程

接下来会弹出如下对话框,选择处理器,这里选择AT89S51或AT89S52。

第9 页 共29页

中北大学计算机控制技术课程设计说明书

图5.2 选择处理器

接下来对话框提示是否把Startup Code加入到工程,选否即可。工程就建立完了。

图5.3 对话框提示

接下来可以新建一个文档用来编辑程序。

图5.4 新建文档

将数码管显示的温控电动机的程序输入到新建文档中,编辑完存为.asm(汇编源文件)或 .h(C语言头文件)或.c(C语言实现文件)即可。

第10 页 共29页

中北大学计算机控制技术课程设计说明书

图5.5 编辑程序

接下来把保存的.asm, .c或.h文件加入到工程里即可。如图5.6所示:

图5.6 将文件加入工程

下面进行工程配置。点击Project菜单下的Options for Target ‘Target 1’。 在弹出对话框的Target 项里输入晶振为12M,然后勾上Use On-chip ROM。

第11 页 共29页

中北大学计算机控制技术课程设计说明书

图5.7 工程配置(1)

在Output项里勾上Create HEX File。这就是产生要烧写的.hex文件。

图5.8 工程配置(2)

然后点击Project菜单里的build target或Rebuild all target files以编译要烧写的.hex文件。编译完会在下面Output Window里显示编译成功与否的信息和错误提示。

第12 页 共29页

中北大学计算机控制技术课程设计说明书

图5.9 程序编译

5.2.2 电路绘制及调试

添加元件,单击“P”按钮入AT89C51,得到以下结果:

,在对话框的KEYWORDS中输

图5.10 查找元件

单击OK,关闭对话框,这时元件列表中列出AT89C51,用同样的方法找出其他元件。如图5.11所示:

第13 页 共29页

中北大学计算机控制技术课程设计说明书

图5.11 所需元件

放置元件,在元件列表中左键选取AT89C51,在原理图编辑窗口中单击左键,这样AT89C51就被放到原理图编辑窗口中了,用同样的方法放置其他元件,如图5.12所示:

图5.12 放置元件

按照数码管显示的温控电动机的原理连接电路,如图5.13所示:

第14 页 共29页

中北大学计算机控制技术课程设计说明书

图5.13 电路原理图

完成控制电路的绘制,将Proteus与Keil开发工具结合,搭建单片机开发平台,实现二者的联调,然后仿真出控制电路,如图5.14所示:

第15 页 共29页

中北大学计算机控制技术课程设计说明书

图5.14 电路原理图

6 结论

本课程设计阐述了以AT89C51单片机为核心,使用DS18B20温度传感器以及4位集成式数码管显示温度的数码管显示的温控电动机。实现了通过数码管监

00测温度,当温度在20C~70C范围之外时,直流电动机开始旋转的要求。本设

计着重运用单片机原理设计数码管显示的温控电动机的程序,并用Keil软件编写程序,用Proteus软件进行控制电路的仿真操作。

在课程设计过程中,遇到一些问题,例如:从网上查找到相关程序和本设计题目一样,但是用到这个程序是出现错误,自己查找不出错误所在,最后经过问老师得到了解决。设计过程中由于对单片机理论知识的欠缺,使得对一些指令不是很了解,导致程序编写错误,期间花费了大量时间找资料和同学探讨调试,最终编

第16 页 共29页

中北大学计算机控制技术课程设计说明书

写出正确的程序;此外,由于初次接触Proteus软件,对其使用不是很熟悉,又查阅了大量该软件的资料和使用教程来完成控制电路的绘制;在进行控制电路仿真过程中最重要的就是Keil软件和Proteus软件的联调,对此我也查阅了很多相关资料,以保证该课程设计的正确性和可行性。

附录A: 设计所用的C语言程序清单

#include #include

#define uchar unsigned char #define uint unsigned int sbit DS=P1^6;

sbit IN1=P1^0; //P1.0与电机驱动IN1相连 sbit IN2=P1^1;

//P1.1与电机驱动IN2相连

sbit ENA=P1^4; uint temp,t; uchar flag,count; uchar data dis_buf[8]; uchar data dis_digit,dis_index; uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f

};

uchar code table1[]={

0xbf,0x86,0xdb,0xcf,0xe6,

第17 页 共29页

中北大学计算机控制技术课程设计说明书

0xed,0xfd,0x87,0xff,0xef

};

void delay(uint ms) { uint i,j;

for(i=ms;i>0;i--) for(j=110;j>0;j--);

}

void init() { TMOD=0x11;

TH0=(65536-1000)/256; TL0=(65536-1000)%256; TH1=(65536-5000)/256; TL1=(65536-5000)%256; EA=1; ET0=1; TR0=1; ET1=1; TR1=1;

flag=0;

ENA=0;

第18 页 共29页

中北大学计算机控制技术课程设计说明书 count=0;

}

void dsreset(void) { uint i; DS=1; i++; DS=0; i=103; while(i>0)i--; DS=1; i=4;

while(i>0)i--; DS=1; }

bit tmpreadbit(void) { uint i; bit dat; DS=1;

DS=0;i++;i++; DS=1;i++;

第19 页 共29页

中北大学计算机控制技术课程设计说明书 dat=DS;

i=8;while(i>0)i--; return (dat); }

uchar tmpread(void) {

uchar i,j,dat; dat=0;

for(i=1;i<=8;i++) {

j=tmpreadbit(); dat=(j<<7)|(dat>>1); }

return(dat); }

void tmpwritebyte(uchar dat) { uint i; uchar j; bit testb;

for(j=1;j<=8;j++) {

第20 页 共29页

中北大学计算机控制技术课程设计说明书 testb=dat&0x01; dat=dat>>1;

if(testb) //write 1 { DS=0; i++;i++; DS=1;

i=8;while(i>0)i--; } else { DS=0;

i=8;while(i>0)i--;//write 0 DS=1;

i++;i++;

} } }

void tmpchange(void) {

dsreset(); delay(1);

第21 页 共29页

中北大学计算机控制技术课程设计说明书 tmpwritebyte(0xcc); tmpwritebyte(0x44); }

uint tmp() {

float tt; uchar a,b,b1; dsreset(); delay(1);

tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; b1=b;

temp<<=8; temp=temp|a; if(b1<8) {

flag+=1; tt=temp*0.0625;

temp=tt*10+0.5;

第22 页 共29页

中北大学计算机控制技术课程设计说明书

dis_buf[0]=0;

} else { flag-=1; temp=~temp; temp=temp+1; tt=temp*0.0625; temp=tt*10+0.5;

dis_buf[0]=0x40;

}

return temp; }

void display(uint temp) {

uchar A1,A2,A3; A1=temp/100; A2=temp%100/10; A3=temp%10; t=A1*10+A2;

dis_buf[3] = table[A3];

第23 页 共29页

中北大学计算机控制技术课程设计说明书 dis_buf[2] = table1[A2]; dis_buf[1] = table[A1]; }

void Turn_t(void) {

ENA=0; IN1=0;

IN2=0; }

void Turn_z(void) {

ENA=1; IN1=1; IN2=0; } void main() { init();

dis_buf[7]=table[0]; dis_buf[6]=table[0]; dis_buf[5]=table[0];

dis_buf[4]=table[0];

第24 页 共29页

中北大学计算机控制技术课程设计说明书

dis_buf[3]=table[0]; dis_buf[2]=table[0]; dis_buf[1]=table[0]; dis_buf[0]=table[0]; dis_digit=0xfe;

dis_index=0;

while(1) {

if(flag==1) { flag=0; if(t>=70)

Turn_z();

else Turn_t();

}

else

if(flag==-1)

{ flag=0; if(t>20)

Turn_z();

第25 页 共29页

中北大学计算机控制技术课程设计说明书 else

Turn_t(); }

}

}

void timer0() interrupt 1 { TH0 = (65536-500)/256; TL0 = (65536-500)%256; P2=0xff;

P0=dis_buf[dis_index]; P2=dis_digit;

dis_digit = _crol_(dis_digit,1); dis_index++;

dis_index &= 0x07;

}

void timer1() interrupt 3 { TH1=(65536-5000)/256; TL1=(65536-5000)%256; count++;

if(count==4)

第26 页 共29页

}

{

count=0;

中北大学计算机控制技术课程设计说明书

tmpchange();

display(tmp()); }

附录B:直流电机在-200 C ~700 范围之内外的旋转情况

第27 页 共29页

中北大学计算机控制技术课程设计说明书

附图1在-20C ~70 范围之内时电机不旋转

0 0

第28 页 共29页

中北大学计算机控制技术课程设计说明书

附图4在-20C ~70 范围之外时电机继续旋转

0

0

参考文献

[1]彭伟. 单片机C语言程序设计实训――基于8051+Protues仿真[M].电子工业出版社.2010

[2]徐玮,徐富军,沈建良. C51单片机高效入门[M].机械工业出版社.2010 [3]林志琦. 郎建军.基于Proteus 的单片机可视化软硬件仿真. 北京航空航天

大学出版社. 2006

[4]郁有文. 传感器原理及工程应用.西安电子科技大学出版社.2000.6 [5]李朝青. 单片机原理及接口技术. 北京航空航天大学出版社.2005 [6]李全利. 单片机原理及应用技术. 高等教育出版社. 2004.11

[7]耿德根. 高速嵌入式单片机原理与应用. 北京航空航天大学出版社.2003

第29 页 共29页

因篇幅问题不能全部显示,请点此查看更多更全内容

Top