基于单片机的温度控制直流电动机转速系统设计 - 图文

更新时间:2024-04-13 06:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

!!!学院毕业设计

设计总说明

在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用。据资料统计,现在有的90%以上的动力源自于电动机,电动机与人们的生活息息相关,密不可分。随着现代化步伐的迈进,人们对自动化的需求越来越高,使电动机控制向更复杂的控制发展。

近年来由于微型机的快速发展,国外交直流系统数字化已经达到实用阶段由于以微处理器为核心的数字控制系统硬件电路的标准化程度高,制作成本低,且不受器件温度漂移的影响,且单片机具有功能强、体积小、可靠性好和价格便宜等优点,现已逐渐成为工厂自动化和各控制领域的支柱之一。其控制软件能够进行逻辑判断和复杂运算,可以实现不同于一般线性调节的最优化、自适应、非线性、智能化等控制规律。所以微机数字控制系统在各个方而的性能都远远优于模拟控制系统且应用越来越广泛。

现在市场上通用的电机控制器大多采用单片机和DSP。但是以前单片机的处理能力有限,对采用复杂的反馈控制的系统,由于需要处理的数据量大,实时性和精度要求高,往往不能满足设计要求。近年来出现了各种单片机,其性能得到了很大提高,价格却比DSP低很多。其相关的软件和开发工具越来越多,功能也越来越强,但价格却在不断降低。现在,越来越多的厂家开始采用单片机来提高产品性价比。

本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。

AT89C51是美国ATMEL公司生产的低电压高性能CMOS8位单片机,片内含4K bytes的可反复檫写的只读程序存储器(PEROM) 和128 bytes的随机存取数据存储器(RAM), 器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MSC-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。

温度采集模块可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求 。

利用单片机的一个I/O口的引脚,通过软件对这个引脚不断地输出高低电平来实现PWM波的输出,51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。

第I页 51页

基于单片机的温度控制直流电动机转速系统设计

对精度要求不高的场合,非常实用。

MCS - 51系列典型产品8051具有两个定时器T0和T1。通过控制定时器初值T0和T1,,从而可以实现从8051的任意输出口输出不同占空比由于PWM信号软件实现的核心是单片机内部的定时器,而不同单片机的定时器具有不同的特点,即使是同一台单片机由于选用的晶振不同,选择的定时器工作方式不同,其定时器的定时初值与定时时间的关系也不同。

温度是一种最基本的环境参数,在工农业生产及日常生活中对温度的测量及控制具有重要意义。本设计将介绍一种基于单片机的温度控制直流电机转速系统。该系统采用AT89C51单片机为核心,通过AT89C51 单片机驱动数字温度传感器DS18B20,进行温度数据采集,通过温度的比较和温度范围设定的程序控制产生PWM(脉宽调制)信号;通过L298驱动芯片来控制直流电机的启动、速度、方向的变化;通过LM016L显示温度。

所谓脉冲宽度调制是指用改变电机电枢电压接通与断开的时间的占空比来控制电机转速的方法,称为脉冲宽度调制(PWM)。PWM驱动装置是利用全控型功率器件的开关特性来调制固定电压的直流电源,按一个固定的频率来接通和断开,并根据需要改变一个周期内“接通”与“断开”时间的长短,改变直流电动机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,这种装置又称为“开关驱动装置”。对于直流电机调速系统,其方法是通过改变电机电枢电压导通时间与通电时间的比值(即占空比)来控制电机速度。

本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、正反转控制和顺序控制外,还要进行转速控制。为以后复杂控制设计做基础。 关键词:PWM; 单片机;温度;控制

第II页 共51页

!!!学院毕业设计

1.1引言

在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用,无论在工业农业生产、交通运输、国防航空航天、医疗卫生、商务与办公设备,还是在日常生活中的家用电器,都在大量地使用着各式各样的电动机。据资料统计,现在有的90%以上的动力源来自于电动机,我国生产的电能大约有60%用于电动机。电动机与人们的生活息息相关,密不可分。随着现代化步伐的迈进,人们对自动化的需求越来越高,使电动机控制向更复杂的控制发展。

1.2研究意义

对电动机的控制可分为简单控制和复杂控制两种,简单控制是对电动机进行启动、制动、正反转控制和顺序控制,复杂控制是对电动机的转速转速、转角、转矩、电压、电流等物理量进行控制。本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、制动、正反转控制和顺序控制外,还要进行转速控制。为以后复杂控制做为基础学习。

直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广。

随着单片机技术的日新月异,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的性能。采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率,可以实现复杂的控制,控制灵活性和适应性好,无零点漂移,控制精密高,可提供人机界面,多机联网工作。

采用智能功率电路驱动比传统的分立功率器件组成的驱动体积小,功能强;减少了

第III页 51页

基于单片机的温度控制直流电动机转速系统设计

电路元器件数量,提高了系统的可靠性;监控更容易实现;集成化使电路的连线减少,减少了布线电容和电感以及信号传输的延时,增加了系统抗干扰的能力;集成化使系统成本大大降低。

1.3系统设计内容

本设计将介绍一种基于单片机的温度控制直流电机转速系统。该系统采用AT89C51单片机为核心,通过AT89C51 单片机驱动数字温度传感器DS18B20,进行温度数据采集通过温度的比较和温度范围设定的程序控制产生PWM(脉宽调制)信号;通过L298驱动芯片来控制直流电机的启动、速度、方向的变化;通过LM016L显示温度。论文包括对单片机的功能及各个管脚和晶振复位电路的介绍,整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及电机驱动模块。

2系统方案设计

2.1系统的设计要求及主要技术指标

本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。

2.2系统总体方案

系统总体方案设计,如下图2.1

第IV页 共51页

!!!学院毕业设计

单 片 机 PWM输出 温度显示 电机驱动 L298 温度采集 DS18B20 直流电动机 系统供电

图2.1 系统总体方案图

2.3总体方案论述

该系统采用AT89C51单片机为核心,通过DS18B20进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的PWM(脉冲宽度调制)信号,送给电机驱动芯片L298的使能端口,通过L298驱动芯片来控制直流电机的启动、速度、方向的变化;单片机将温度数据传送给LM016L显示温度。整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及电机驱动模块。

第V页 51页

基于单片机的温度控制直流电动机转速系统设计

3硬件电路设计

3.1.1AT89C51单片机

AT89C51是美国ATMEL公司生产的低电压高性能CMOS 8位单片机,片内含4Kbytes的可反复檫写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM), 器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MSC-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。

89C51单片机基本组成包括有: ? 一个8位的微处理器;

? 片内数据存储器RAM有128B, 21个特殊功能寄存器SFR;

? 片内程序存储器Flash ROM 有4KB;可寻址片内外统一编址的64KB的ROM, ? 可寻址片外64KB的RAM;

? 4个8位并行I/O接口(P0—P3); ? 一个全双工通用异步串行接口UART; ? 两个16位的定时器/计数器;

? 五个中断源、两个优先级的中断控制系统; ? 具有位操作功能的布尔处理机及位寻址功能; ? 片内振荡器和时钟产生电路。

第VI页 共51页

!!!学院毕业设计

图1单片机管脚图

3.1.2管脚介绍

如图1所示:

(1)电源引脚: Vcc(40脚):电源端,接+5V电源。

Vss(20脚):接地端,接+5V电源地端。 (2)时钟振荡器外接晶体引脚:XTAL1和XTAL2 AT89C51内部有一个振荡器和时钟产生电路。 XTAL1(19脚):片内振荡电路反相放大器输入 。 XTAL2(18脚):片内振荡电路反相放大器输出。 (3) 控制信号引脚:RST、ALE、PSEN、EA

RST (9脚):复位信号输入端,高电平有效。保持两个机器周期高电平时,完成复位操作。

ALE/PROG (30脚):地址锁存允许输出端/编程脉冲输入端,正常时,连续输出振荡器频率的1/6正脉冲信号。访问片外存储器时:作为锁存P0口低8位地址的控制信号。

对89C51片内 ROM编程写入时:作为编程脉冲输入端。PSEN (29脚): 外部程序存储器读选通输出信号访问片外ROM时,输出负脉冲作为读ROM选通常连接到片外ROM芯

第VII页 51页

基于单片机的温度控制直流电动机转速系统设计

片的输出允许端(OE)作外部ROM的读选通信号。

EA/Vpp (31脚):外部程序存储器地址使能输入/编程电压输入端。

平常,接“1”时,CPU访问片内4KB的ROM,当地址超4KB时,自动转向片外ROM中的程序。

当接“0”时,CPU只访问片外ROM。 第2功能Vpp对8751编程时,编程电压输入端。 (4)输入/输出端口引脚 P0、P1、P2、P3

4个8位的并行输入/输出端口,共32个引脚。作为通用输入/输出端口,P0、P2和P3端口又各自有第2功能。 ①通用输入/输出端口

准双向口: 作输入时要先对锁存器写“1”。 P0端口(P0.0—P0.7,第39—32脚):

漏极开路的准双向口,输出能驱动8个74LS类型的负载。 P1端口(P1.0—P1.7,第1—8脚):

内部带上拉电阻的准双向口,输出能驱动4个74LS负载。 P2端口(P2.0—P2.7,第21—28脚):

内部带上拉电阻的准双向口,输出能驱动4个74LS负载。 P3端口(P3.0—P3.7,第10—17脚):

内部带上拉电阻的准双向口,输出能驱动4个74LS负载。 ②P0、P2、P3端口的第二功能

P0端口:在CPU访问外部存储器或I/O接口时,P0口分时提供低8位地址(A0-A7)和8位数据(D0-D7)总线。这时,需要一个8位锁存器,利用ALE(地址锁存允许)来锁存P0口低8位地址信号。

P2端口:在CPU访问外部存储器或I/O接口时,P2口提供高8位地址(A8-A15)的总线信号。

P3端口:在CPU访问外部存储器或I/O接口时,P3口提供读、写控制总线信号。还提供串行通信、外部中断、计数器的外部计数输入信号等。如表1所示。

表1 P3口的第二功能

第VIII页 共51页

!!!学院毕业设计

口 线 信 号 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 RXD TXD INT0 INT1 T0 T1 WR RD 功 能 串行口数据输入(接收数据) 串行口数据输出(发送数据) 外部中断0输入 外部中断1输入 定时器0的外部输入(计数输入) 定时器1的外部输入(计数输入) 外部数据存储器写选通控制输出 外部数据存储器读选通输出控制

3.1.3单片机晶振电路

单片机系统里都有晶振,如图2所示(左图为内部振荡方式,右图为外部振荡方式)在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。

图2 晶振电路

在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率

第IX页 51页

基于单片机的温度控制直流电动机转速系统设计

的方法保持同步。

当采用内部时钟时,片外连接石英晶体(或陶瓷振荡器)和微调电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2起稳定振荡频率、快速起振的作用。虽然没有十分严格的要求但电容容量的大小会轻微影响振荡频率的高低、振荡工作的稳定性、起振的难易程度及温度稳定性,如果使用石英晶体,推荐使用30pf±10pf,而如使用陶瓷振荡器最好选择40pf±10pf,产生原始的振荡脉冲信号。

采用外部时钟时, XTAL1输入即内部时钟发生器的输入端外部时钟脉冲信号, XTAL2悬空。仿真如图3所示。

3.1.4单片机复位电路

复位是单片机的初始化操作。单片机启运运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。

当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。

根据应用的要求,复位操作通常有两种基本形式:上电复位和手动复位。 上电复位:上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容相当于开路,RST端为低电平,程序正常运行。

手动复位:首先经过上电复位,当按下按键时,RST直接与VCC相连,为高电平形成复位,同时电解电容被短路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,正常工作,仿真如图3所示。

第X页 共51页

!!!学院毕业设计

图3 Protues仿真的晶振及复位图

3.2温度采集模块设计

温度是一种最基本的环境参数,在工农业生产及日常生活中对温度的测量及控制具有重要意义。本模块的功能是进行温度采集,获取温度数据然后经过单片机处理,由单片机来控制PWM的输出。 3.2.1方案论证:

方 案一

由于本模块是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行 A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换电路 , 其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。

方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求 。

从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。

DS18B20 的主要特征:

第XI页 51页

基于单片机的温度控制直流电动机转速系统设计

? 全数字温度转换及输出。 ? 先进的单总线数据通信。

? 最高 12 位分辨率,精度可达土 0.5摄氏度。 ? 12 位分辨率时的最大工作周期为 750 毫秒。 ? 可选择寄生工作方式。

? 检测温度范围为–55℃ ~+125℃ (–67°F ~+257°F) ? 内置 EEPROM,限温报警功能。

? 64 位光刻 ROM,内置产品序列号,方便多机挂接。 ? 多样封装形式,适应不同硬件系统。

该模块通过AT89C51 单片机驱动数字温度传感器DS18B20,进行温度数据采集、读取、处理,并通过LCD显示出来。

温度传感器是该模块的关键器件,本系统选用的是美国Dallas 半导体公司生产的数字化温度传感器 DS18B20。DS18B20 支持“一线总线”接口,测量温度范围为-55℃~+125℃,被测温度用符号扩展的16 位数字量方式串行输出,在-10~+85℃ 范围内,精度为±0.5℃。DS18B20 采集到的现场温度直接以先进的单总线数据通信方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。DS18B20 可程序设定9~12 位的分辨率,精度可达±0.5℃。DS18B20具有内置的EEPROM,用户设定的分辨率和报警温度都可存储在其中,且掉电后依然存在。 3.2.2 DS18B20的内部结构

DS18B20内部结构由64bit闪速ROM、温度传感器、非易失性温度报警触发器TH和TL配置寄存器等4个数字器件组成,如图4。

温度传感器DS18B20是通过温度对振荡器的频率影响来测量温度,如图5。DS18B20内部有2个不同温度系数的振荡器,低温度系数振荡器输出的时钟脉冲信号在高温度系数振荡器产生的门周期内进计数。计数初值被预置-55℃相对的基数值,如计数器在高温度系数振荡器输出的门周期结束前计数为零,表示测量温度值高于-55℃,被预置在-55℃的温度寄存器的值加1,重复该过程,直到高温度系数振荡器门周期结束止,温度寄存器中的值就是被测的温度值。该值由主机通过发读存储器命令读出,经取补和十

第XII页 共51页

!!!学院毕业设计

进制转换,得到实测的温度值。斜率累加器用于补偿和修正温度振荡器的非线性,以产生高分辨率的温度测量。通过改变温度每升高1℃,计数器须经计数值实行补偿。为获得所需分辨率,必须知道该数值及在给定温度处每1℃的计数值(斜率累加器的值)。

图4 DS18B20的内部结构

图5 DS18B20测温原理图

DS18B20的管脚排列如下图6所示:

图6管脚及实物图

DQ为数字信号输入/输出端;GND为电源地;VCC为外接供电电源输入端(在寄生电源接线方式时接地)。

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个

第XIII页 51页

基于单片机的温度控制直流电动机转速系统设计

DS18B20的目的。

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

图7 DS18B20的RAM

这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中如图7所示,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H,温度代码对照如图8所示。

图8 温度代码对照

3.2.3 DS18B20温度传感器的存储器

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的ERAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

暂存存储器包含了8个连续字节如图7所示,前两个字节是测得的温度信息,第一

2第XIV页 共51页

!!!学院毕业设计

个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。

图9 DS18B20的寄存器

该字节各位的意义如下:TM R1 R0

低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表2所示:(DS18B20出厂时被设置为12位)分辨率设置表:

表2 DS18B20分辨率设置表

R1 0 0 1 1 R0 分辨率 0 1 0 1 9位 10位 11位 12位 温度最大转换时间 93.75ms 187.5ms 375ms 750ms 根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

CPU 只需一根端口线就能与DS18B20 进行通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。与前一代产品(DS1820 温度传感器)不同,DS18B20支持3.0V~5.5V的电压范围,使系统设计更灵活、方便,而且DS18B20 价格更便宜,体积更小。

第XV页 51页

基于单片机的温度控制直流电动机转速系统设计

(1)DS18B20 芯片存储器操作指令表:

Write Scratchpad (向 RAM中写数据)[4EH]

这是向 RAM 中写入数据的指令,随后写入的两个字节的数据将会被存到地址 2 (报警RAM 之 TH)和地址 3(报警 RAM 之 TL)。写入过程中可以用复位信号中止写入。

Read Scratchpad(从RAM 中读数据)[BEH]

此指令将从RAM中读数据,读地址从地址0开始,一直可以读到地址9,完成整个RAM 数据的读出。芯片允许在读过程中用复位信号中止读取,即可以不读后面不需要的字节以减少读取时间。

Copy Scratchpad(将 RAM 数据复制到 EEPROM中)[48H]

此指令将RAM中的数据存入EEPROM中,以使数据掉电不丢失。此后由于芯片忙于 EEPROM储存处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持 10MS,来维持芯片工作。

Convert T(温度转换)[44H]

收到此指令后芯片将进行一次温度转换,将转换的温度值放入 RAM 的第 1、2 地址。此后由于芯片忙于温度转换处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持500MS,来维持芯片工作。

Recall EEPROM(将 EEPROM中的报警值复制到 RAM)[B8H]

此指令将 EEPROM中的报警值复制到RAM中的第 3、4个字节里。由于芯片忙于复制处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。另外,此指令将在芯片上电复位时将被自动执行。这样 RAM 中的两个报警字节位将始终为 EEPROM中数据的镜像。

Read Power Supply(工作方式切换)[B4H]

此指令发出后发出读时间隙,芯片会返回它的电源状态字,“0”为寄生电源状态,“1”为外部电源状态。 b.DS18B20 芯片 ROM 指令表:

Read ROM(读 ROM)[33H](方括号中的为16进制的命令字)

这个命令允许总线控制器读到DS18B20的64位ROM。只有当总线上只存在一个

第XVI页 共51页

!!!学院毕业设计

DS18B20的时候才可以使用此指令,如果挂接不只一个,当通信时将会发生数据冲突。 Match ROM(指定匹配芯片)[55H]

这个指令后面紧跟着由控制器发出了 64 位序列号,当总线上有多只 DS18B20 时,只有与控制发出的序列号相同的芯片才可以做出反应,其它芯片将等待下一次复位。这条指令适应单芯片和多芯片挂接。

Skip ROM(跳跃 ROM 指令)[CCH]

这条指令使芯片不对 ROM 编码做出反应,在单总线的情况之下,为了节省时间则可以选用此指令。如果在多芯片挂接时使用此指令将会出现数据冲突,导致错误出现。

Search ROM(搜索芯片)[F0H]

在芯片初始化后,搜索指令允许总线上挂接多芯片时用排除法识别所有器件的 64位 ROM。

Alarm Search(报警芯片搜索)[ECH]

在多芯片挂接的情况下,报警芯片搜索指令只对附合温度高于 TH 或小于 TL报警条件的芯片做出反应。只要芯片不掉电,报警状态将被保持,直到再一次测得温度什达不到报警条件为止。

(2)DS18B20 芯片存储器操作指令表:

Write Scratchpad(向 RAM中写数据)[4EH]

这是向 RAM 中写入数据的指令,随后写入的两个字节的数据将会被存到地址 2 (报警RAM之TH)和地址3(报警 RAM之TL)。写入过程中可以用复位信号中止写入。

Read Scratchpad(从RAM 中读数据)[BEH]

此指令将从RAM中读数据,读地址从地址0开始,一直可以读到地址9,完成整个RAM 数据的读出。芯片允许在读过程中用复位信号中止读取,即可以不读后面不需要的字节以减少读取时间。

Copy Scratchpad(将 RAM 数据复制到 EEPROM中)[48H]

此指令将 RAM 中的数据存入 EEPROM中,以使数据掉电不丢失。此后由于芯片忙于 EEPROM储存处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持 10MS,来维持芯片工作。

Convert T(温度转换)[44H]

收到此指令后芯片将进行一次温度转换,将转换的温度值放入RAM的第 1、2 地址。

第XVII页 51页

基于单片机的温度控制直流电动机转速系统设计

此后由于芯片忙于温度转换处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持 500MS,来维持芯片工作。

Recall EEPROM(将 EEPROM中的报警值复制到 RAM)[B8H]

此指令将 EEPROM中的报警值复制到RAM中的第3、4个字节里。由于芯片忙于复制处理,当控制器发一个读时间隙时,总线上输出“0”,当储存工作完成时,总线将输出“1”。另外,此指令将在芯片上电复位时将被自动执行。这样 RAM 中的两个报警字节位将始终为 EEPROM中数据的镜像。

Read Power Supply(工作方式切换)[B4H]

此指令发出后发出读时间隙,芯片会返回它的电源状态字,“0”为寄生电源状态,“1”为外部电源状态。

3.2.5 温度采集模块的电路连接

DS18B20 有三个管脚:GND 为电源地,DQ 为数字信号输入/输出端,VCC 为外接供电电源接入端(用寄生电源方式时接地)。在硬件上,DS18B20与单片机的连接有两种方法,一种是VCC接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时VCC、GND接地,I/O接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电阻。本系统中DS18B20的DQ口与单片机的 P3.3口连接,GND 接地。Protues软件仿真图如图10所示。

图10 DS18B20的Protues仿真图

第XVIII页 共51页

!!!学院毕业设计

3.3转速控制模块设计

3.3.1直流电机转速调节原理

直流电动机的转速n和其他参量的关系可表示为:

n?Ua?IaRa (公式1)

CE?式中 Ua——电枢供电电压(V); Ia ——电枢电流(A); Ф——励磁磁通(Wb); Ra——电枢回路总电阻(Ω); CE——电势系数,CE?可知调速方法:

(1)改变电枢回路总电阻Ra; (2)改变电枢供电电压Ua; (3)改变励磁Ф。

由第二种方法知道,直流电机转速与加在电机两端电压有关,故可选用单片机产生PWM方波,经驱动电路放大后驱动电机旋转。 3.3.2电机调速控制方案论证

方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。

方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对电机的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。

方案三:采用专用芯片L298的PWM控制。用单片机控制PWM信号的输出给L298驱动芯片使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路效率非常高;单片机和芯片L298保证了可以简单地实现转速和方向的控制。

PN,p为电磁对数,a为电枢并联支路数,N为导体数。 60a第XIX页 51页

基于单片机的温度控制直流电动机转速系统设计

兼于方案三调速特性优良、调整平滑、调速范围广、过载能力大,因此本设计采用方案三。

PWM系统在很多方面具有较大的优越性: ? 主电路线路简单,需用的功率元件少;

? 开关频率高,电流容易连续,谐波少,电机损耗和发热都较小; ? 低速性能好,稳速精度高,调速范围宽;

? 系统频带宽,快速响应性能好,动态抗干扰能力强; ? 主电路元件工作在开关状态,导通损耗小,装置效率高; ? 直流电源采用不控三相整流时,电网功率因数高。 3.3.3 PWM方式选择

在PWM调速时,占空比D是一个重要的参数。以下3种方法都可以改变占空比的值。 (1)定宽调频法:

这种保持t1 不变,只改变t2, 这样使得周期T也随之改变。 (2)调宽调频法:

这种是保持t2 不变,而改变t1 这样使得周期T或频率也随之改变 (3)定频调宽法:

这种是周期T不变,而改变t1 和 t2

前两种方法由于在调速是改变了控制脉冲的周期或频率,当控制脉冲的频率与系统的固有频率接近时,将会引起震荡,因此这2种方法用得很少。目前在直流电机的控制中,主要用定频调宽法。 3.3.4 PWM控制信号的产生方式

(1)分立电子元件组成的PWM信号发生器

这种方法是用分立的逻辑电子元件组成PWM信号发生器,其为早期的方法,现在逐渐被淘汰。

(2)专用PWM集成电路

从PWM控制技术出现以来就有芯片制造商生产专用PWM集成电路芯片,现在市场上有多种这样的芯片,这些芯片除了具有PWM发生器以外,还具有死区调节功能,保护功

第XX页 共51页

!!!学院毕业设计

能。在用单片机直接控制的电路中,使用专用的PWM芯片可以减轻单片机的负担,工作可靠。

(3)软件模拟法

利用单片机的一个I/O口的引脚,通过软件对这这个引脚不断地输出高低电平来实现PWM波的输出,51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用。

MCS - 51系列典型产品8051具有两个定时器T0和T1。通过控制定时器初值T0和T1,,从而可以实现从8051的任意输出口输出不同占空比由于PWM信号软件实现的核心是单片机内部的定时器,而不同单片机的定时器具有不同的特点,即使是同一台单片机由于选用的晶振不同,选择的定时器工作方式不同,其定时器的定时初值与定时时间的关系也不同。

3.3.5直流电机PWM调速原理

所谓脉冲宽度调制是指用改变电机电枢电压接通与断开的时间的占空比来控制电机转速的方法,称为脉冲宽度调制(PWM)。PWM驱动装置是利用全控型功率器件的开关特性来调制固定电压的直流电源,按一个固定的频率来接通和断开,并根据需要改变一个周期内“接通”与“断开”时间的长短,改变直流电动机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,这种装置又称为“开关驱动装置”。

对于直流电机调速系统,其方法是通过改变电机电枢电压导通时间与通电时间的比值(即占空比)来控制电机速度。PWM调速原理如图11所示。

在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。只要按一定规律改变通、断电时间,即可让电机转速得到控制。设电机永远接通电源时,其转速最大为Vmax,设占空比为D=t1/T,则电机的平均速度为

Vd=Vmax?D (公式2) 式中,Vd——电机的平均速度 Vmax——电机全通时的速度(最大) D=t1/T——占空比

平均速度Vd与占空比D的函数曲线,如图11所示。

第XXI页 51页

基于单片机的温度控制直流电动机转速系统设计

电压(V)t1平均速度VdVmax0通电断电t2T0时间(t)0.51占空比 (D)

图11平均速度和占空比的关系

由图11可以看出,Vd与占空比D并不是完全线性关系(图中实线),理想情况下,可以将其近似地看成线性关系(图中虚线)。因此也就可以看成电机电枢电压Ua与占空比D成正比,改变占空比的大小即可控制电机的速度。占空比决定输出到直流电机电枢电压的平均电压,进而决定了直流电机的转速。如果能够实现占空比的连续调节即可实现直流电机无级调速。

由以上叙述可知:电机的转速与电机电枢电压成比例,而电机电枢电压与控制波形的占空比成正比,因此电机的速度与占空比成比例,占空比越大,电机转得越快,当占空比α=1时,电机转速最大。

3.4直流电机

直流电机主要有直流有刷电机和无刷直流电机两种。 3.4.1有刷直流电机

直流电机以良好的启动性能、调速性能等优点著称,其中属于直流电机一类的有刷直流电

机采用机械换向器,使得驱动方法简单,其模型示意图如图12所示。 电机主要由永磁材料制造的定子、绕有线圈绕组的转子(电枢)、换向器和电刷等构成。只要在电刷的A和B两端通入一定的直流电流,电机的换向器就会自动改变电机转子的磁场方向,这样,直流电机的转子就会持续运转下去。

第XXII页 共51页

!!!学院毕业设计

图12有刷直流电机模型

由些可见,换向器和电刷在直流电机中扮演着重要的角色,虽然它可以简化电机控制器的结构,但是,它自身却存在一定的缺点:

? 结构相对复杂,增加了制造成本;

? 容易被环境(如灰尘等)影响,降低了工作的可靠性; ? 换向时会产生火花,限制了使用范围; ? 容易损坏,增加了维护成本等。 3.4.2无刷直流电机

图13无刷直流电机模行

无刷直流电机(Brushless Direct Current Motor, BLDCM)的诞生,克服了有刷直流电机的先天性缺陷,以电子换向器取代了机械换向器,所以无刷直流电机既具有直流电机良好的调速性能等特点,又具有交流电机结构简单、无换向火花、运行可靠和易于维护等优点。图 13所示无刷直流电机模型,它是从图 12转化过来的模型。它主要由用永磁材料制造的转子、带有线圈绕组的定子和位置传感器(可有可无)组成。可见,

第XXIII页 51页

基于单片机的温度控制直流电动机转速系统设计

它和直流电机有着很多共同点,定子和转子的结构差不多(原来的定子变为转子,转子变为定子),绕组的连线也基本相同。但是,结构上它们有一个明显的区别:无刷直流电机没有直流电机中的换向器和电刷,取而代之的是位置传感器。这样,电机结构就相对简单,降低了电机的制造和维护成本,但无刷直流电机不能自动换向(相),牺牲的代价是电机控制器成本的提高(如同样是三相直流电机,有刷直流电机的驱动桥需要 4 只功率管,而无刷直流电机的驱动桥则需要 6 只功率管)。图 13所示为其中一种小功率三相、星形连接、单副磁对极的无刷直流电机,它的定子在内,转子在外,结构和图 12所示的直流电机很相似。另一种无刷直流电机的结构和这种刚刚相反,它的定子在外,转子在内,即定子是线圈绕组组成的机座,而转子用永磁材料制造。

无刷直流电机有以下的特点:

? 无刷直流电机的外特性好,能够在低速下输出大转矩,使得它可以提供大的起

动转矩;

? 无刷直流电机的速度范围宽,任何速度下都可以全功率运行;

? 无刷直流电机的效率高、过载能力强,使得它在拖动系统中有出色的表现; ? 无刷直流电机的再生制动效果好,由于它的转子是永磁材料,制动时电机可以

进入发电机状态;

? 无刷直流电机的体积小,功率密度高;

? 无刷直流电机无机械换向器,采用全封闭式结构,可以防止尘土进入电机内部,

可靠性高;

? 无刷直流电机比异步电机的驱动控制简单。 无刷直流电机的工作原理

无刷直流电机的定子是线圈绕组电枢,转子是永磁体。如果只给电机通以固定的直流电流,则电机只能产生不变的磁场,电机不能转动起来,只有实时检测电机转子的位置,再根据转子的位置给电机的不同相通以对应的电流,使定子产生方向均匀变化的旋转磁场,电机才可以跟着磁场转动起来。如图14所示为无刷直流电机的转动原理示意图,为了方便描述,电机定子的线圈中心抽头接电机电源POWER,各相的端点接功率管,位置传感器导通时使功率管的G极接12V,功率管导通,对应的相线圈被通电。由于三个位置传感器随着转子的转动,会依次导通,使得对应的相线圈也依次通电,从而定子产生的磁场方向也不断地变化,电机转子也跟着转动起来。

这就是无刷直流电机的基本转动原理——检测转子的位置,依次给各相通电,使定

第XXIV页 共51页

!!!学院毕业设计

子产生的磁场的方向连续均匀地变化。

图14无刷电动机转动原理

3.5直流电机驱动模块的选择

3.5.1方案选择

方案一:采用继电器对电动机的开和关进行控制,通过开关的切换对电机的速度进行调整。这个方案的优点是电路较为简单,实现容易;缺点是继电器的响应速度慢、机械结构易损坏、寿命较短。

方案二: 采用DSP芯片,配以电机控制所需要的外围功能电路,通过数控电压源调节电机运行速度,实现控制物体的运动轨迹。该方案优点是体积小、结构紧凑、使用便捷、可靠性提高。但系统软硬件复杂、成本高。

方案三: 采用专用芯片L298。L298是一个具有高电压大电流的全桥驱动芯片,它响应频率高,且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。

基于上述理论分析和实际情况,拟定选择方案三。 3.5.2 L298驱动芯片

L298 为SGS-THOMSON Microelectronics 所出产的双全桥直流电机专用驱动芯片( Dual Full-Bridge Driver ) ,内部包含4信道逻辑驱动电路,是一种二相和四相电机的专用驱动器,可同时驱动2个二相或1个四相电机,内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,

第XXV页 51页

基于单片机的温度控制直流电动机转速系统设计

且可以直接透过电源来调节输出电压;此芯片可直接由单片机的I/O端口来提供模拟时序信号,但在本驱动电路中用L297 来提供时序信号,节省了单片机I/O 端口的使用。L298N 之接脚如图15所示,Pin1 和Pin15 可与电流侦测用电阻连 接来控制负载的电路; OUTl、OUT2 和OUT3、OUT4 之间分别接2 个步进电机;input1~input4 输入控制电位来控制电机的正反转;Enable 则控制电机停转。

图15 L298引脚图

其实物图如下图16所示:

图16 L298实物图

(1)L298内部的原理如图17

第XXVI页 共51页

!!!学院毕业设计

图17 L298 内部逻辑图

(2)L298的逻辑功能如下表3

表3 L298的逻辑功能 IN1 X 1 0 0 1 IN2 X 0 1 0 1 ENA 0 1 1 0 0

电机状态 停止 顺时针 逆时针 停止 停止 (3)用protues仿真的电路如图18

图18 protues仿真的电路图

3.5.3电机及驱动模块电路连接

A(IN1)、B(IN2)分别与AT89C51单片机的P1.0、P1.1相连接,输入控制电位来控

第XXVII页 51页

基于单片机的温度控制直流电动机转速系统设计

制电机的正反转。ENA与单片机的P1.2口相连接,P1.2口输出控制电动机转速的PWM信号,来控制电动机的加速、减速,启动、停止。由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的安全。上面接电源那个是当VS断电后,电机的产生的磁场产生很大的电动势保护电机(因为电机可能正传或者反转,所以两个方向均要设计二极管),接地那个作用在于保护单片机等元件。

3.6温度显示模块设计

3.6.1液晶显示简介

(1)液晶显示原理

液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。

(2)液晶显示器的分类

液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。

(3)液晶显示器各种图形的显示原理: a.线段的显示

点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,??(00EH)

第XXVIII页 共51页

!!!学院毕业设计

=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。这就是LCD显示的基本原理。

b.字符的显示

用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。 3.6.2 LM016L的结构及功能

LM016L液晶模块采用HD44780控制器,HD44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM但愿,LM016L液晶模块的引脚功能如下表3.6.2(1)所示:

LM016L字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是

背光电源线,模型如图19所示:

第XXIX页 51页

基于单片机的温度控制直流电动机转速系统设计

图19 LM016L模型

VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。

LCD的引脚功能表,如下表4所示

第XXX页 共51页

!!!学院毕业设计 表4 引脚功能表 引脚 1 2 3 符号 VSS VDD V0 一般接地 接电源(+5V) 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4 RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 5 R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 6 7 8 9 10 11 12 13 14 15 16 E DB0 DB1 DB2 DB3 DB4 DB5 DB6 E(或EN)端为使能(enable)端,下降沿使能。 底4位三态、 双向数据总线 0位(最低位) 底4位三态、 双向数据总线 1位 底4位三态、 双向数据总线 2位 底4位三态、 双向数据总线 3位 高4位三态、 双向数据总线 4位 高4位三态、 双向数据总线 5位 高4位三态、 双向数据总线 6位 功能说明 DB7 高4位三态、 双向数据总线 7位(最高位)(也是busy flang) BLA BLK 背光电源正极 背光电源负极 寄存器选择控制如表5

表5 寄存器选择控制表 RS 0 0 R/W 0 1 操作说明 写入指令寄存器(清除屏等) 读busy flag(DB7),以及读取位址计数器(DB~DB6)值 写入数据寄存器(显示各字型等) 第XXXI页 51页

1 0 基于单片机的温度控制直流电动机转速系统设计

1 1 从数据寄存器读取数据

注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.

busy flag(DB7):在此位为被清除为0时,LCD将无法再处理其他的指令要求。 液晶模块内部的控制器共有11条控制指令,如表6所示:

表6 控制命令表

序号 1 2 3 4 5 6 7 8 9 10 11 指令 清显示 光标返回 置输入模式 显示开/关控制 光标或字符移位 置功能 置数据存贮器地址 读忙标志或地址 RS R/W D7 D6 D5 D4 D3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 BF 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 D2 0 0 1 D F D1 0 1 C * D0 1 * B * * I/D S S/C R/L * DL N 置字符发生存贮器地址 0 字符发生存贮器地址 显示数据存贮器地址 计数器地址 要写的数据内容 读出的数据内容 写数到CGRAM或DDRAM) 1 从CGRAM或DDRAM读数 1

LM016L液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)

指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H。

指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。

指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。

第XXXII页 共51页

!!!学院毕业设计

指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:写数据。 指令11:读数据。

respack-8是protues仿真软件中的片组, P0口要上拉电阻原因有: 1. P0口片内无上拉电阻

2. P0为I/O口工作状态时,上方FET被关断,从而输出脚浮空,因此P0用于输出线时为开漏输出。

3. 由于片内无上拉电阻,上方FET又被关断,P0输出1时无法拉升端口电平。P0是双向口,其它P1,P2,P3是准双向口。单片机在读准双向口的端口时,现应给端口锁存器赋1,目的是使FET关断,不至于因片内FET导通使端口钳制在低电平。

上下拉一般选10k,上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!

接在51单片机的P0口,因为P0口内部没有上拉电阻,不能输出高电平,所以要接上拉电阻。排阻就是好多电阻连载一起,他们有一个公共端 ,1端为公共端接VCC或地。

3.6.3 液晶显示模块的电路连接

数据手册中可能介绍LM1602内部D0~D7已有上拉,可以使用P0口直接驱动。在Proteus里LM016L内部可能没有,应该人为加上拉电阻。

第XXXIII页 51页

基于单片机的温度控制直流电动机转速系统设计

图20液晶显示模块仿真图

4系统软件设计

4.1系统软件构架

系统软件构架如图21

第XXXIV页 共51页

!!!学院毕业设计

开始 端口初始化 液晶显示程序 DS18B20函数初始化 读取温度值并显示 延时 开启中断 等待中断 T0定时器控制电动机正/反转,并通过PWM信号控制电动机转速 返回

图21 系统软件总框图

温度控制电机转速软件构架如图22

第XXXV页 51页

基于单片机的温度控制直流电动机转速系统设计

温度范 T≥45℃ T≤10℃ 10℃<T<45℃ 正转 反转 停止 全速 ≥75 加速 45≤T加速 0<T≤全速 T≤0 返回

图22温度控制电机转速

4.2各模块程序说明

4.2.1温度采集模块

(1) DS18B20初始化程序 uchar Init_DS18B20() { uchar

DQ=1;Delay(8);DQ = 0;Delay(90);

DQ=1;Delay(8);status = DQ;Delay(100);DQ=1; return status; //初始化成功返回0

第XXXVI页 共51页

!!!学院毕业设计

}

(2)温度字符

uchar code_temperature_char[8]

={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,};

(3)温度小数位对照表

uchar code df_Table[] ={0,1,1,2,2,3,3,4,4,5,6,6,7,8,8,9,9 }; uchar CurrenT = 0; //当前读取的温度整数部分 char Signed_Temp = 0; //有符号温度值 uchar Temp_Value[] = {0x00,0x00}; //从DS18B20读取温度值 uchar Back_Temp_Value[] = {0xFF,0xFF}; //温度数据备份 uchar Display Digit = {0,0,0,0}; //待显示的各温度数位 bit DS18B20_IS_OK = 1; //传感器正常标志 unit tCount = 0;

4.2.2电动机转速及转向控制模块

T0定时器控制电动机正/反转,并输出PWM信号控制转速 Void T0_INT() interrup 1 {

TH0 = -50000/256; TL0 = -50000%6;

Read_Temperature(); //读取温度 if ( !DS18B20_IS_OK )return; //读错时退出 //读取正常且温度发生变化则刷新显示 if (Temp_Value[0] != Back_Value[0] || Temp_Value[1] != Back_Value[1] ) {

Back_Temp_Value[0] =Temp_Value[0]; Back_Temp_Value[1] =Temp_Value[1]; Disply_Temperature();

第XXXVII页 51页

基于单片机的温度控制直流电动机转速系统设计

}

//≥75℃或<=0℃时,电动机全速转动,占空比为100%. if (Signed_Temp≥ 75 ) Signed_Temp = 75; if (Signed_Temp≤ 0 ) Signed_Temp = 0; //≥45℃时加速正转,75℃时全速运行 if ( Signed_Temp ≥ 45) {

MA = 1; MB = 0; //正转

if (Signed_Temp == 45) //PWM输出(占空比:0%) {

PWM1 = 0; DelayXus(30); return; } else

if (Signed_Temp == 75) //PWM输出(占空比:100%) {

PWM = 1; DelayXus(30); return; }

PWM1 = 1; //PWM输出(占空比:0%~100%) DelayXus(Signed_Temp - 45); PWM1 = 0;

DelayXus(75 - Signed_Temp ); } else

//≤10℃时加速反转,0℃时全速运行 if ( Signed_Temp≤ 10 ) {

MA = 0; MB = 1; //反转

if (Signed_Temp == 10) //PWM输出(占空比:0%) {

PWM1 = 0; DlayXus(10); return;

第XXXVIII页 共51页

!!!学院毕业设计

} else

if (Signed_Temp == 0 ) //PWM输出(占空比:100%) {

PWM = 1; DelayXus(10); return; }

PWM = 1; //PWM输出(占空比:0%~100%) DelayXus(10 - Signed_Temp); PWM = 0;

DelayXus(Signed_Temp); }

//否则由惯性运动过渡到停止 else {

MA = 0; MB = 0; } }

4.2.3温度显示模块 在LCD上显示当前温度 void Display_Temperature() {

uchar i;

uchar t=150;//延时值 uchar ng = 0;//负数标识

//如果为负数则取反加1,并设置负数标识 if((Temp_Value[1] & 0xF8) ==0xF8) {

Temp_Value[1] = ~Temp_Value[1];

第XXXIX页 51页

基于单片机的温度控制直流电动机转速系统设计

Temp_Value[0] = ~Temp_Value[0] + 1; if(Temp_Value[0] ==0x00) Temp_Value[1]++; ng= 1; }

//查表得到温度小数部分

Display_Digit[0] = df_Table[ Temp_Value[0] & 0x0F ]; //获取温度整数部分(无符号)

Current = ((Temp_Value[0]) & 0xF0)>>4) | ((Temp_Value[1] & 0x07)<<4); //获取有符号温度值(忽略小数位)

Signed_Temp = !ng ? CurrenT : - CurrenT; //将整数部分分解为三位待显示数字 Display_Digit[3] = CurrenT / 100; Display_Digit[2] = CurrenT % 100 / 10; Display_Digit[1] = CurrenT % 10; //刷新LCD显示缓冲

Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0'; Current_Temp_Display_Buffer[10] = '.';

Current_Temp_Display_Buffer[ 9] = Display_Digit[1] + '0'; Current_Temp_Display_Buffer[ 8] = Display_Digit[2] + '0'; Current_Temp_Display_Buffer[ 7] = Display_Digit[3] + '0'; //高位为0时不显示

if (Diplay_Digit[3] == 0) Current_Temp_Display_Buffer[7] = ' '; //高位为0且次高位为0时,次高位不显示

if (Display_Digit[2] == 0 && Display_Digit[3] == 0) //负数符号显示在恰当位置 if (ng) {

if (Current_Temp_Display_Buffer[8] == ' ') Current_Temp_Display_Buffer[8] == '-'; else

第XL页 共51页

!!!学院毕业设计

if (Current_Temp_Display_Buffer[7] == ' ') Current_Temp_Display_Buffer[7] == '-';) else

(Current_Temp_Display_Buffer[6] == '-'; }

//在第一行显示标题 Set_LCD_POS(0x00);

for(i = 0; i<16; i++) Write_LCD_Data( Temp_Disp_Title[i] ); //在第二行显示当前温度 Set_LCD_POS(0x40);

for(i = 0; i<16; i++) Write_LCD_Data (Current_Temp_Display_Buffer[i] ); //显示温度符号℃

Set_LCD_POS (0x4D); Write_LCD_Data (0x00); Set_LCD_POS (0x4E); Write_LCD_Data ('C'); }

5结论

本方案实现了单片机通过对温度的采集和比较对直流电机进行转速控制,以及利用软件模拟实现直流电机PWM调速的方法。以AT89C51单片机为控制核心,通过DS18B20进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的PWM(脉冲宽度调制)控制信号,送给电机驱动芯片L298的使能端口,通过L298驱动芯片来控制直流电机的启动、速度、方向的变化实现了对普通直流电机的转速调节,为进一步研究和优化直流电机控制方法提供了基础。达到了系统的设计要求:单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。

第XLI页 51页

基于单片机的温度控制直流电动机转速系统设计

从这次的设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获。

参考文献

[1] 王之道,周靖,刘旭,一种基于AT89C2051单片机的直流电机调速装置, [J]机械工程与自动化2009(5)

[2] 茹占军,谢家兴,基于AT89S52单片机直流电机调速系统的设计, [J].软件导刊2010, 9(8)

[3] 赵鸿图,基于单片机AT89C51的直流电机PWM调速系统[J].电子技术 ,2008, 45(10)

[4] 周润景,张丽娜.基于Proteus的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.

[5] 宁成军,张江霞.基于Proteus和Keil接口的单片机外围硬件电路仿真[J].现代电子技术,2006,29(18):142-143,146.

[6] 陈良光,管聪慧.由数字式传感器 DS18B20 构成的多点测温系统[J].传感器世界, 1999, 9.

[7] 杜洋,DS18B20温度传感器应用解析,2007.3.16

[8] 马忠梅,张凯,等.单片机的C语言应用程序设计(第四版).北京航空航天大学出版社

第XLII页 共51页

!!!学院毕业设计

附录A系统总程序

//-------------------------------------------------------- // 名称:温度控制直流电动机转速

//--------------------------------------------------------------------- // 说明: ≥45℃度时加速正传/≤10℃时加速反转, // ≥75℃时全速正传/≤0℃时达到全速反转, // 温度回到10~45℃之间时电动机逐渐停止转动。

//--------------------------------------------------------------------- #include #include

#difine uchar ;unsigned char #difine uint ;unsigned int

#define delayNOP() {_nop_();_nop_();_nop_();_nop_();} sbit DQ =p3^3; sbit LCD_RS=p2^0; sbit LCD_RW=p2^1; sbit LCD_EN=p2^2; sbit MA =P1^0; sbit MB =p1^1; sbit PWM1 =p1^2;

uchar code temp_DISP_Title[] ={%uchar current_temp_Display_Buffer[]={\//温度字符

uchar code_temperature_char[8]

={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,};

// 温度小数位对照表

uchuar code df_Table[] ={0,1,1,2,2,3,3,4,4,5,6,6,7,8,8,9,9 }; uchar CurrenT = 0; //当前读取的温度整数部分

第XLIII页 51页

基于单片机的温度控制直流电动机转速系统设计

char Signed_Temp = 0; //有符号温度值 uchar Temp_Value[] = {0x00,0x00}; //从DS18B20读取温度值 uchar Back_Temp_Value[] = {0xFF,0xFF}; //温度数据备份 uchar Display_Digit = {0,0,0,0}; //待显示的各温度数位 bit DS18B20_IS_OK = 1; //传感器正常标志 uint tCount = 0;

//--------------------------------------------------------------------- //延时 1

//--------------------------------------------------------------------- void DelayXus(int x) {

uchar i;

while(x--) for (i=0;i<200;i++); }

//--------------------------------------------------------------------- //液晶控制函数

------------------------------------------------------------------

//uchar LCD_Busy_Check() reentrant //void Write_LCD_Command (uchar cmd) //void Write_LCD_Data (uchar data) //void LCD_Initialise () //void Set_LCD_POS (uchar pos) //void Write_NEW_LCD_Char ()

//--------------------------------------------------------------------- //--------------------------------------------------------------------- //延时2

//--------------------------------------------------------------------- void Delay(unit x) {

while (--x);

第XLIV页 共51页

!!!学院毕业设计

}

//--------------------------------------------------------------------- //初始化DS18B20

//--------------------------------------------------------------------- uchar Init_DS18B20() { uchar

DQ=1; Delay(8);DQ = 0;Delay(90);

DQ=1; Delay(8);status = DQ;Delay(100);DQ=1; return status; //初始化成功返回0 }

//--------------------------------------------------------------------- //读一字节

//--------------------------------------------------------------------- uchar ReadOneByte() {

uchar i,dat = 0; DQ = 1; _nop_(); for (i=0;i<8;i++) {

DQ=0; data>>=1;DQ=1; _nop_();_nop_(); if(DQ) dat1=0x80;Delay(30);DQ=1; }

return dat; }

//--------------------------------------------------------------------- //写一字节

//--------------------------------------------------------------------- void WriteOnebyte (uchar dat) {

第XLV页 51页

基于单片机的温度控制直流电动机转速系统设计

uchar i;

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

DQ=0;DQ=dat&0x01; Delay(5);DQ=1;dat>>=1; } }

//--------------------------------------------------------------------- //读取温度值

//--------------------------------------------------------------------- void Read_Temperature() {

if(Init_DS18B20() == 1) //DS18B20故障 DS18B20_IS_OK = 0; else {

writeoneByte(0xCC); //跳过序列号 writeoneByte(0x44); //启动温度转换 Init_DS18B20(); writeoneByte(0xCC);

writeoneByte(0xBE); //读取温度寄存器 Temp_Value[0] = ReadOneByte(); //温度低8位 Temp_Value[1] = ReadOneByte(); //温度高8位 DS18B20_IS_OK = 1; } }

//--------------------------------------------------------------------- //在LCD上显示当前温度

//--------------------------------------------------------------------- void Display_Temperature() {

第XLVI页 共51页

!!!学院毕业设计

uchar i;

uchar t=150;//延时值 uchar ng = 0;//负数标识

//如果为负数则取反加1,并设置负数标识 if((Temp_Value[1] & 0xF8) ==0xF8) {

Temp_Value[1] = ~Temp_Value[1]; Temp_Value[0] = ~Temp_Value[0] + 1; if(Temp_Value[0] ==0x00) Temp_Value[1]++; ng= 1; }

//查表得到温度小数部分

Display_Digit[0] = df_Table[ Temp_Value[0] & 0x0F ]; //获取温度整数部分(无符号)

Current = ((Temp_Value[0]) & 0xF0)>>4) | ((Temp_Value[1] & 0x07)<<4); //获取有符号温度值(忽略小数位) Signed_Temp = !ng ? CurrenT : - CurrenT; //将整数部分分解为三位待显示数字 Display_Digit[3] = CurrenT / 100; Display_Digit[2] = CurrenT % 100/10; Display_Digit[1] = CurrenT % 10; //刷新LCD显示缓冲

Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0'; Current_Temp_Display_Buffer[10] = '.';

Current_Temp_Display_Buffer[ 9] = Display_Digit[1] + '0'; Current_Temp_Display_Buffer[ 8] = Display_Digit[2] + '0'; Current_Temp_Display_Buffer[ 7] = Display_Digit[3] + '0'; //高位为0时不显示

if (Diplay_Digit[3] == 0) Current_Temp_Display_Buffer[7] = ' '; //高位为0且次高位为0时,次高位不显示

第XLVII页 51页

基于单片机的温度控制直流电动机转速系统设计

if (Display_Digit[2] == 0 && Display_Digit[3] == 0) //负数符号显示在恰当位置 if (ng) {

if (Current_Temp_Display_Buffer[8] == ' ') Current_Temp_Display_Buffer[8] == '-'; else

if (Current_Temp_Display_Buffer[7] == ' ') Current_Temp_Display_Buffer[7] == '-';) else

(Current_Temp_Display_Buffer[6] == '-'; }

//在第一行显示标题 Set_LCD_POS(0x00);

for(i = 0; i<16; i++) Write_LCD_Data( Temp_Disp_Title[i] ); //在第二行显示当前温度 Set_LCD_POS(0x40);

for(i = 0; i<16; i++) Write_LCD_Data(Current_Temp_Display_Buffer[i] ); //显示温度符号℃

Set_LCD_POS(0x4D); Write_LCD_Data(0x00); Set_LCD_POS(0x4E); Write_LCD_Data('C'); }

//--------------------------------------------------------------------- //T0定时器控制电动机正/反转,并输出PWM信号控制转速

//--------------------------------------------------------------------- Void T0_INT() interrup 1 {

TH0 = -50000/256;

第XLVIII页 共51页

!!!学院毕业设计

TL0 = -50000%6;

Read_Temperature(); //读取温度 if ( !DS18B20_IS_OK )return; //读错时退出 //读取正常且温度发生变化则刷新显示 if (Temp_Value[0] != Back_Value[0] || Temp_Value[1] != Back_Value[1] ) {

Back_Temp_Value[0] =Temp_Value[0]; Back_Temp_Value[1] =Temp_Value[1]; Disply_Temperature(); }

//≥75℃或≤0℃时,电动机全速转动,占空比为100%. if (Signed_Temp≥75 ) Signed_Temp = 75; if (Signed_Temp≤ 0 ) Signed_Temp = 0; //>=45℃时加速正转,75℃时全速运行 if ( Signed_Temp ≥ 45) {

MA = 1; MB = 0; //正转

if (Signed_Temp == 45) //PWM输出(占空比:0%) {

PWM1 = 0; DelayXus(30); return; } else

if (Signed_Temp == 75) //PWM输出(占空比:100%) {

PWM = 1; DelayXus(30); return; }

PWM1 = 1; //PWM输出(占空比:0%~100%) DelayXus(Signed_Temp - 45); PWM1 = 0;

第XLIX页 51页

基于单片机的温度控制直流电动机转速系统设计

DelayXus(75 - Signed_Temp ); } else

//≤10℃时加速反转,0℃时全速运行 if ( Signed_Temp≤ 10 ) {

MA = 0; MB = 1; //反转

if (Signed_Temp == 10) //PWM输出(占空比:0%) {

PWM1 = 0; DlayXus(10); return; } else

if (Signed_Temp == 0 ) //PWM输出(占空比:100%) {

PWM = 1; DelayXus(10); return; }

PWM = 1; //PWM输出(占空比:0%~100%) DelayXus(10 - Signed_Temp); PWM = 0;

DelayXus(Signed_Temp); }

//否则由惯性运动过渡到停止 else {

MA = 0; MB = 0; } }

//--------------------------------------------------------------------- //主函数

//---------------------------------------------------------------------

第L页 共51页

本文来源:https://www.bwwdw.com/article/icsp.html

Top