基于单片机的温度控制电机转速课程设计.doc

上传人:小飞机 文档编号:4043384 上传时间:2023-04-02 格式:DOC 页数:21 大小:542KB
返回 下载 相关 举报
基于单片机的温度控制电机转速课程设计.doc_第1页
第1页 / 共21页
基于单片机的温度控制电机转速课程设计.doc_第2页
第2页 / 共21页
基于单片机的温度控制电机转速课程设计.doc_第3页
第3页 / 共21页
基于单片机的温度控制电机转速课程设计.doc_第4页
第4页 / 共21页
基于单片机的温度控制电机转速课程设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《基于单片机的温度控制电机转速课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的温度控制电机转速课程设计.doc(21页珍藏版)》请在三一办公上搜索。

1、 目 录1 引言22 设计要求22.1 设计目的22.2 基本要求33 方案设计33.1 温度传感器方案论证33.1.1 方案一33.1.2 方案二33.2 总体设计框图34 硬件设计44.1 单片机系统44.2 数字温度传感器模块54.2.1 DS18B20性能64.2.2 DS18B20外形及引脚说明64.2.3 DS18B20接线原理图64.2.4 DS18B20时序图74.2.5 数据处理84.3 L298电机驱动模块94.4 LCD显示电路模块95应用软件介绍105.1 Proteus仿软真件的介绍105.2 Keil软件106 软件设计106.1 主程序模块106.2 读温度值模块

2、116.3 中断模块136.4 仿真模块147 源程序168 总结19参考文献:201 引言随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。其中温度控制电机转速就是利用单片机实现的典型实例。测量温度时使用数字温度计,其与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用STC89C51单片机作控制器,数字温度传感器DS18B20测量温度,单片机接受传感器输

3、出,经处理用LCD实现温度值显示。电机由L298电机驱动芯片控制,实现电机的正反转和加速减速.2 设计要求 2.1设计目的 设计一个基于温度的电动机转速控制电路,在相应的软件控制下可以完成要求的功能,即外部温度大于65C时,直流电动机在L298驱动下加速正转,温度大于75C全速正转,当外部温度小于0C时电动机加速反转,温度小于-10C时电动机全速反转。温度回到0C-65C时电动机逐渐停止转动。在液晶显示屏1602LCD上显示当前的温度值。 2.2 基本要求控制电机正反转即加速减速,实现实时温度显示,测温范围-551280C,误差50C以内。画出基于温度的电动机转速控制电路的原理图,通过仿真软件

4、来检测所写程序实现功能的正确与否.3 方案设计3.1 温度传感器方案论证3.1.1 方案一由于本设计是测温电路,可以使用热敏电阻之类的器件,将随被测温度变化的电压或电流采样,进行A/D转换后就可以用单片机进行数据处理,实现温度显示。这种设计需要用到A/D转换电路,增大了电路的复杂性,而且要做到高精度也比较困难。3.1.2 方案二考虑到在单片机属于数字系统,容易想到数字温度传感器,可选用DS18B20数字温度传感器,此传感器为单总线数字温度传感器,起体积小、构成的系统结构简单,它可直接将温度转化成串行数字信号给单片机处理,即可实现温度显示。另外DS18B20具有3引脚的小体积封装,测温范围为-5

5、5+125摄氏度,测温分辨率可达0.0625摄氏度,其测量范围与精度都能符合设计要求。以上两种方案相比较,第二种方案的电路、软件设计更简单,此方案设计的系统在功耗、测量精度、范围等方面都能很好地达到要求,故本设计采用方案二。3.2 总体设计框图本方案设计的系统由单片机系统、DS18B20数字温度传感器、LCD温度显示模块、L298电机驱动模块、电机组成,其总体架构如下图1。单片机测温电路时钟、复位电路L298电机驱动LULU路电路电机转动电路LCD温度显示电路图1 系统总体方框图4 硬件设计 4.1 单片机系统1. 本设计采用STC89C52单片机作为控制器,完成所有功能的控制,包括:l DS

6、18B20数字温度传感器的初始化和读取温度值l LCD显示驱动与控制l L298电机驱动芯片驱动电机l 温度值的存储和读取2. 单片机系统电路原理图:图2 单片机系统原理图 4.2 数字温度传感器模块 4.2.1 DS18B20性能l 独特的单线接口仅需一个端口引脚进行通信l 简单的多点分布应用l 无需外部器件l 可通过数据线供电l 零待机功耗l 测温范围-55+128,以1递增l 可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625l 温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字l 应用包括温度控制、工业系统、消费品、温

7、度计和任何热感测系统l 负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作 4.2.2 DS18B20外形及引脚说明图3 DS18B20外形及引脚l GND:地l DQ:单线运用的数据输入/输出引脚l VD:可选的电源引脚 4.2.3 DS18B20接线原理图单总线通常要求接一个约4.7K左右的上拉电阻,这样,当总线空闲时,其状态为高电平。图4 DS18B20接线原理图 4.2.4 DS18B20时序图主机使用时间隙来读写DS18B20的数据位和写命令字的位。1. 初始化时序如下图:图5 DS18B20初始化时序2. DS18B20读写时序:图6 DS18B20读写时序 4.2.

8、5 数据处理高速暂存存储器由9个字节组成,其分配如表5所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在 高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。图7 字节分配下表为12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0, 这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际 温度。 例如+125的数字输出为07D0H,实际温度=07D0H*0.0625=2000*0.06

9、25=125。例如-55的数字输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作运算),实际温度=370H*0.0625=880*0.0625=55。可见其中低四位为小数位。图8 DS18B20温度数据表 4.3关于L298电机驱动芯片的简介L298是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片的主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器、线圈等感性负载;采用标准TTL逻辑电平信号控制;具有两个使能控制端,在不受输入信号

10、影响的情况下允许或禁止器件工作;有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。 4.4 显示电路LCD显示简单明了,可以直接读出温度值。图9 LCD驱动显示电路5应用软件介绍 5.1Proteus仿软真件的介绍Proteus是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。该软件的特点:(1)全部满足我们提出的单片机软件仿真系统的标准,并在同类产品中具有明显的优势。(2)具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS一2

11、32动态仿真、1C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。支持大量的存储器和外围芯片。总之该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大,可仿真51、AVR、PIC。5.2Keil软件KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过

12、汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。6 软件设计6.1 主程序模块主程序流程图:主程序流程图6.2 读温度值模块读温度值模块需要调用4个子程序,分别为:l DS18B20初始化子程序:让单片机知道DS18B20在总线上且已准备好操作l DS18B20写字节子程序:对DS18B20发出命令l DS18B20读字节子程序:读取DS1

13、8B20存储器的数据l 延时子程序:对DS18B20操作时的时序控制1. 读温度值模块流入口数据转换处理读取温度值高低位跳过读序列号DS18B20初始化延时DS18B20初始化跳过读序列号启动温度转换 返回 读温度值子程序流程图 2. DS18B20初始化子程序流程图:入口DQ为低电平?延时1560msDQ拉高电平延时480msDQ复位0稍延时DQ置高电平N返回Y DS18B20初始化子程序流程图3. DS18B20写字节和读字节子程序流程图: DS18B20写字节子程序流程图 DS18B20读字节子程序流程图6.3 中断模块中断采用T0方式1,初始值定时为50ms。中断模块需调用两个子程序:

14、l 读温度值子程序:定时读取温度值,实时更新温度值l 记录温度值子程序:定时记录温度值,供查询使用把这两个子程序放在中断的原因是,不会因为调整报警温度或查询历史温度值而停止更新温度值和记录温度值。中断模块流程图:1秒?计数值加1定时器重置初值中断入口读温度值Y中断返回记录温度值 N中断模块流程图6.3 中断模块 仿真图65 - 125 0 - 6535 - 07 源程序#include#include#include#define INT8U unsigned char#define INT16U unsigned intextern INT8U Temp_Value;extern INT8U

15、 read_Temperature();extern void delay_ms(INT16U x);extern void LCD_Initialise();extern void LCD_ShowString(INT8U,INT8U,INT8U*) reentrant;sbit MA=P10;sbit MB=P11;sbit PWM1=P12;INT8U Back_Temp_Value=0xFF,0XFF;char Temp_Disp_Buff17;float f_Temp=35.0;void T0_INT() interrupt 1 static INT8U t_Count=0; TH0

16、=(INT16U)(-11.0592/12*500)/256; TL0=(INT16U)(-11.0592/12*500)%256; if(+t_Count=100) t_Count=0; if(Read_Temperature() ) if(Temp_Value0!=Back_Temp_Value0|Temp_Value1=Back_Temp_Value1) Back_Temp_Value0=Temp_Value0; Back_Temp_Value1=Temp_Value1; f_Temp=(int)(Temp_Value1=75) f_Temp=75; if (f_Temp=45) MA=

17、1;MB=0; #include#include#include#define INT8U unsigned char#define INT16U unsigned intextern INT8U Temp_Value;extern INT8U read_Temperature();extern void delay_ms(INT16U x);extern void LCD_Initialise();extern void LCD_ShowString(INT8U,INT8U,INT8U*) reentrant;sbit MA=P10;sbit MB=P11;sbit PWM1=P12;INT

18、8U Back_Temp_Value=0xFF,0XFF;char Temp_Disp_Buff17;float f_Temp=35.0;void T0_INT() interrupt 1 static INT8U t_Count=0; TH0=(INT16U)(-11.0592/12*500)/256; TL0=(INT16U)(-11.0592/12*500)%256; if(+t_Count=100) t_Count=0; if(Read_Temperature() if(Temp_Value0!=Back_Temp_Value0|Temp_Value1!=Back_Temp_Value

19、1) Back_Temp_Value0=Temp_Value0; Back_Temp_Value1=Temp_Value1; f_Temp=(int)(Temp_Value10)i-; return (dat); uchar tmpread(void) uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=tmpreadbit(); dat=(j1); return(dat); void tmpwritebyte(uchar dat) uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 DS=0; i+

20、;i+; DS=1; i=8;while(i0)i-; else DS=0; i=8;while(i0)i-;/write 0 DS=1; i+;i+; if (f_Temp=75) f_Temp=75; if (f_Temp=45) MA=1;MB=0; if(f_Temp=45) PWM1=0;delay_ms(30);return; else if(f_Temp=75) PWM1=1;delay_ms(30);return; PWM1=1;delay_ms(f_Temp-45); PWM1=0;delay_ms(75-f_Temp);else if(f_Temp=10) MA=0;MB=

21、1; if (f_Temp=10) PWM1=0;delay_ms(10);return; else if(f_Temp=0) PWM1=1;delay_ms(10);return; PWM1=1;delay_ms(10-f_Temp); PWM1=0;delay_ms(f_Temp); else MA=0;MB=0;void main() LCD_Initialise(); LCD_ShowString(0,0,Curren Temp:); Read_Temperature();delay_ms(800); TMOD=0x01; TH0=(INT16U)(-11.0592/12*500)/2

22、56; TL0=(INT16U)(-11.0592/12*500)%256; IE=0x82; TR0=1; while(1);8 总结此次课程设计中,难点在于DS18B20的使用,即对它的时序控制、初始化以及字节读写方法,任何一个环节出错或是时序控制不到位的话就不能得到正确的数据。一旦学会了正确的使用方法,就能感觉到它带来的便利是热电偶不能比拟的,以后再次使用的话就能很快上手了。软件设计中,把程序按功能分模块的话能提高编程效率,把问题一一解决,同时画流程图能帮助理清思路,使问题简单化。另一方面,取变量名时也要讲究技巧,应尽量使其见名知意,同样地,写程序时加注释确是非常必要的,否则隔一段时间后,想再改进或做扩展的话就比较困难了,因为即使是自己写的程序也变得难读难懂了。 参考文献:1. 徐玮. C51单片机高效入门(第2版). 北京:机械工业出版社,2010.2. 龙脉工作室,刘鲲,孙春亮(修订版). 北京:人们邮电出版社,2010.3. 彭伟,单片机C语言程序设计实训100例(第二版)。北京:电子工业出版社,2012.4. 朱清慧,Proteus教程电子线路设计,制版与仿真. 北京:清华大学出版社,2008.5. 江世明,基于Proteus的单片机应用技术. 北京:电子工业出版社,2009.

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号