1、 摘 要本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。单片机对某个位置进行温度监控,当外部温度45时,电动机加速正转,当温度75时,电动机全速正转;当外部温度10时,电动机加速反转,当温度0时,电动机全速反转;当温度回到 1045之间时电动机逐渐停止转动。温度采集模块可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值, 利用单片机的一个 I/O 口的引脚,通过软件对这个引脚不断地输出高低电平来实现 PWM 波的输出,51 系列单片机无 PWM 输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用。所谓脉冲宽度调制是指用改变电机
2、电枢电压接通与断开的时间的占空比来控制电机转速的方法,称为脉冲宽度调制(PWM)。 PWM 驱动装置是利用全控型功率器件的开关特性来调制固定电压的直流电源,按一个固定的频率来接通和断开,并根据需要改变一个周期内“接通”与“断开”时间的长短,改变直流电动机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,这种装置又称为“开关驱动装置” 。对于直流电机调速系统,其方法是通过改变电机电枢电压导通时间与通电时间的比值(即占空比)来控制电机速度。本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、正反转控制和顺序控制外,还要进行转速控制。为以后复杂控制设计做基础。关键词:
3、PWM;单片机;温度控制1 设计总说明1.1 引言在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用,无论在工业农业生产、交通运输、国防航空航天、医疗卫生、商务与办公设备,还是在日常生活中的家用电器,都在大量地使用着各式各样的电动机。据资料统计,现在有的 90%以上的动力源来自于电动机,我国生产的电能大约有 60%用于电动机。电动机与人们的生活息息相关,密不可分。随着现代化步伐的迈进,人们对自动化的需求越来越高,使电动机控制向更复杂的控制发展。1.2 研究意义对电动机的控制可分为简单控制和复杂控制两种,简单控制是对电动机进行启动、制动、正反转控制和顺序控制,复杂控制是对电动机
4、的转速转速、转角、转矩、电压、电流等物理量进行控制。本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、制动、正反转控制和顺序控制外,还要进行转速控制。为以后复杂控制做为基础学习。直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广。随着单片机技术的日新月异,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的性能。采用单
5、片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率,可以实现复杂的控制,控制灵活性和适应性好,无零点漂移,控制精密高,可提供人机界面,多机联网工作。采用智能功率电路驱动比传统的分立功率器件组成的驱动体积小,功能强;减少了电路元器件数量,提高了系统的可靠性;监控更容易实现;集成化使电路的连线减少,减少了布线电容和电感以及信号传输的延时,增加了系统抗干扰的能力;集成化使系统成本大大降低。1.3 系统设计内容本设计将介绍一种基于单片机的温度控制直流电机转速系统。该系统采用 AT89C51单片机为核心,通过 AT89C51 单片机驱动数字温度传感器 DS18B20,进行温度数据采
6、集通过温度的比较和温度范围设定的程序控制产生 PWM(脉宽调制)信号;通过 L298驱动芯片来控制直流电机的启动、速度、方向的变化;通过 LM016L 显示温度。论文包括对单片机的功能及各个管脚和晶振复位电路的介绍,整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及电机驱动模块。2 系统方案设计2.1 系统的设计要求及主要技术指标本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。单片机对某个位置进行温度监控,当外部温度45时,电动机加速正转,当温度75时,电动机全速正转;当外部温度10时,电动机加速反转,当温度0时,电动机全速反转;当温度回到 1045之间时电动
7、机逐渐停止转动。2.2 系统总体方案系统总体方案设计,如下图 1单片机温度显示温度采集DS18B20PWM 输出电机驱动L298直流电动机 系统供电图 1 系统总体方案图2.3 总体方案论述该系统采用 AT89C51 单片机为核心,通过 DS18B20 进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的PWM(脉冲宽度调制)信号,送给电机驱动芯片 L298 的使能端口,通过 L298 驱动芯片来控制直流电机的启动、速度、方向的变化;单片机将温度数据传送给 LM016L 显示温度。整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及
8、电机驱动模块。3 硬件电路设计3.1 温度采集模块的电路连接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 软件仿真图如图 2 所示。图
9、2 DS18B20 的 Protues 仿真图3.2 转速控制模块设计A(IN1 ) 、B(IN2)分别与 AT89C51 单片机的 P1.0、P1.1 相连接,输入控制电位来控制电机的正反转。ENA 与单片机的 P1.2 口相连接,P1.2 口输出控制电动机转速的PWM 信号,来控制电动机的加速、减速,启动、停止。由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的安全。上面接电源那个是当 VS 断电后,电机的产生的磁场产生很大的电动势保护电机(因为电机可能正
10、传或者反转,所以两个方向均要设计二极管),接地那个作用在于保护单片机等元件。图 3 转速控制模块 protues 仿真的电路图3.3 温度显示模块设计数据手册中可能介绍 LM1602 内部 D0D7 已有上拉,可以使用 P0 口直接驱动。在Proteus 里 LM016L 内部可能没有,应该人为加上拉电阻。图 5 温度显示模块设计 proteus 仿真图4 系统软件设计4.1 系统软件构架端口初始化液晶显示程序DS18B20 函数初始化读取温度值并显示延时开启中断T0 定时器控制电动机正/反转,并通过 PWM 信号控制电动机转速等待中断开始返回图 6 系统软件总框图5 元器件清单表 2 元器件
11、清单学 名称 型号 毕 数量 备注单片机 AT89C51 1二极管 1N4007 1 电容 CAP 2 220pF2 100nF电解电容 CAP-ELEC 1 10uF晶振 CRYSTAL 1 12MHZ温度采集器 DS18B20 1电机控制元件 L298 1LCD 显示器 LM016L 1电机转子 MOTOR-DC 1 电阻排阻RESPESPACK11110K4.7K6 电路设计仿真图 7 设计电路的 proteus 仿真结论本方案实现了单片机通过对温度的采集和比较对直流电机进行转速控制,以及利用软件模拟实现直流电机 PWM 调速的方法。以 AT89C51 单片机为控制核心,通过DS18B2
12、0 进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的 PWM(脉冲宽度调制)控制信号,送给电机驱动芯片 L298 的使能端口,通过 L298 驱动芯片来控制直流电机的启动、速度、方向的变化实现了对普通直流电机的转速调节,为进一步研究和优化直流电机控制方法提供了基础。达到了系统的设计要求:单片机对某个位置进行温度监控,当外部温度45时,电动机加速正转,当温度75时,电动机全速正转;当外部温度10时,电动机加速反转,当温度0时,电动机全速反转;当温度回到 1045之间时电动机逐渐停止转动。从这次的设计中,我真真正正的意识到,在以后的学习中,要理论联
13、系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获。参考文献1 王 之 道 ,周 靖 ,刘 旭 ,一 种 基 于 AT89C2051单 片 机 的 直 流 电 机 调 速 装 置, J机 械 工 程 与 自 动 化 2009(5) 2 茹 占 军 ,谢 家 兴 ,基 于 AT89S52单 片 机 直 流 电 机 调 速 系 统 的 设 计, J.软 件 导 刊 2010, 9(8)3 赵 鸿 图 ,基 于 单 片 机 AT89C51的 直 流 电 机 PWM调 速 系 统 J.电 子 技 术 , 2008, 4
14、5(10)4 周 润 景 ,张 丽 娜 .基 于 Proteus的 电 路 及 单 片 机 系 统 设 计 与 仿 真M.北 京 :北 京 航 空 航 天 大 学 出 版 社,2006. 5 宁 成 军 ,张 江 霞 .基 于 Proteus和 Keil接 口 的 单 片 机 外 围 硬 件 电 路 仿 真J.现 代 电 子 技 术 ,2006,29(18):142-143,146. 6 陈 良 光 , 管 聪 慧 .由 数 字 式 传 感 器 DS18B20 构 成 的 多 点 测 温 系 统 J.传 感 器 世 界 , 1999, 9.7 杜 洋 ,DS18B20温 度 传 感 器 应 用
15、 解 析 ,2007.3.168 马 忠 梅 , 张 凯 , 等 .单 片 机 的 C语 言 应 用 程 序 设 计 (第 四 版 ).北 京 航 空 航 天 大 学 出 版 社实验程序#include#include#difine uchar ;unsigned char#difine uint ; unsigned int#define delayNOP() _nop_();_nop_();_nop_();_nop_();sbit DQ =p33;sbit LCD_RS=p20;sbit LCD_RW=p21;sbit LCD_EN=p22;sbit MA =P10;sbit MB =p1
16、1;sbit PWM1 =p12;uchar code temp_DISP_Title =“Current temp : “;uchar current_temp_Display_Buffer=“TEMP: “;/温度字符uchar code_temperature_char8 =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; /当前读取的温度整数部分char Signed_Tem
17、p = 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=1;DQ=1; _nop_();_nop_();if(DQ) dat1=0x80;Delay(30);D
18、Q=1;return dat;/-/写一字节/-void WriteOnebyte (uchar dat)uchar i;for (i=0;i=1;/-/读取温度值/-void Read_Temperature()if(Init_DS18B20() = 1) /DS18B20 故障DS18B20_IS_OK = 0;elsewriteoneByte(0xCC); /跳过序列号writeoneByte(0x44); /启动温度转换Init_DS18B20();writeoneByte(0xCC);writeoneByte(0xBE); /读取温度寄存器Temp_Value0 = ReadOneB
19、yte(); /温度低 8 位Temp_Value1 = ReadOneByte(); /温度高 8 位DS18B20_IS_OK = 1; /-/在 LCD 上显示当前温度/-void Display_Temperature()uchar i;uchar t=150;/延时值uchar ng = 0;/负数标识/如果为负数则取反加 1,并设置负数标识if(Temp_Value1 Temp_Value0 = Temp_Value0 + 1;if(Temp_Value0 =0x00) Temp_Value1+;ng= 1;/查表得到温度小数部分Display_Digit0 = df_Table
20、Temp_Value0 /获取温度整数部分(无符号)Current = (Temp_Value0) MB = 0; /正转if (Signed_Temp = 45) /PWM 输出(占空比:0%) PWM1 = 0; DelayXus(30); return;elseif (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
21、/10时加速反转,0时全速运行if ( Signed_Temp 10 )MA = 0; MB = 1; /反转if (Signed_Temp = 10) /PWM 输出(占空比:0%)PWM1 = 0; DlayXus(10); return;elseif (Signed_Temp = 0 ) /PWM 输出(占空比:100%)PWM = 1; DelayXus(10); return;PWM = 1; /PWM 输出(占空比:0%100%)DelayXus(10 - Signed_Temp);PWM = 0;DelayXus(Signed_Temp);/否则由惯性运动过渡到停止elseMA = 0; MB = 0;/-/主函数/-void main ()LCD_Intialise();Read_Temperature();Delay(5000);Delay(5000);TMOD = 0x01;TH0 = -50000 / 256;TL0 = -50000 % 256;IE = 0x82;TR0 = 1;While(1);