单片机课程设计温控直流电机转速_第1页
单片机课程设计温控直流电机转速_第2页
单片机课程设计温控直流电机转速_第3页
单片机课程设计温控直流电机转速_第4页
单片机课程设计温控直流电机转速_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/摘要本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。温度采集模块可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,利用单片机的一个I/O口的引脚,通过软件对这个引脚不断地输出高低电平来实现PWM波的输出,51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。对精度要求不高的场合,非常实用。所谓脉冲宽度调制是指用改变电机电枢电压接通与断开的时间的占空比来控制电机转速的方法,称为脉冲宽度调制(PWM)。PWM驱动装置是利用全控型功率器件的开关特性来调制固定电压的直流电源,按一个固定的频率来接通和断开,并根据需要改变一个周期内“接通”与“断开”时间的长短,改变直流电动机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。因此,这种装置又称为“开关驱动装置”。对于直流电机调速系统,其方法是通过改变电机电枢电压导通时间与通电时间的比值(即占空比)来控制电机速度.本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、正反转控制和顺序控制外,还要进行转速控制。为以后复杂控制设计做基础。关键词:PWM;单片机;温度控制1设计总说明1.1引言在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用,无论在工业农业生产、交通运输、国防航空航天、医疗卫生、商务与办公设备,还是在日常生活中的家用电器,都在大量地使用着各式各样的电动机。据资料统计,现在有的90%以上的动力源来自于电动机,我国生产的电能大约有60%用于电动机。电动机与人们的生活息息相关,密不可分。随着现代化步伐的迈进,人们对自动化的需求越来越高,使电动机控制向更复杂的控制发展。1.2研究意义对电动机的控制可分为简单控制和复杂控制两种,简单控制是对电动机进行启动、制动、正反转控制和顺序控制,复杂控制是对电动机的转速转速、转角、转矩、电压、电流等物理量进行控制.本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、制动、正反转控制和顺序控制外,还要进行转速控制。为以后复杂控制做为基础学习。直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广.随着单片机技术的日新月异,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的性能.采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率,可以实现复杂的控制,控制灵活性和适应性好,无零点漂移,控制精密高,可提供人机界面,多机联网工作。采用智能功率电路驱动比传统的分立功率器件组成的驱动体积小,功能强;减少了电路元器件数量,提高了系统的可靠性;监控更容易实现;集成化使电路的连线减少,减少了布线电容和电感以及信号传输的延时,增加了系统抗干扰的能力;集成化使系统成本大大降低。1.3系统设计内容本设计将介绍一种基于单片机的温度控制直流电机转速系统。该系统采用AT89C51单片机为核心,通过AT89C51单片机驱动数字温度传感器DS18B20,进行温度数据采集通过温度的比较和温度范围设定的程序控制产生PWM(脉宽调制)信号;通过L298驱动芯片来控制直流电机的启动、速度、方向的变化;通过LM016L显示温度。论文包括对单片机的功能及各个管脚和晶振复位电路的介绍,整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及电机驱动模块.2系统方案设计2.1系统的设计要求及主要技术指标本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动.2。2系统总体方案系统总体方案设计,如下图1单单片机温度显示温度采集DS18B20PWM输出电机驱动L298直流电动机系统供电图1系统总体方案图2.3总体方案论述该系统采用AT89C51单片机为核心,通过DS18B20进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的PWM(脉冲宽度调制)信号,送给电机驱动芯片L298的使能端口,通过L298驱动芯片来控制直流电机的启动、速度、方向的变化;单片机将温度数据传送给LM016L显示温度。整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及电机驱动模块.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所示。图2DS18B20的Protues仿真图3.2转速控制模块设计A(IN1)、B(IN2)分别与AT89C51单片机的P1.0、P1。1相连接,输入控制电位来控制电机的正反转。ENA与单片机的P1。2口相连接,P1.2口输出控制电动机转速的PWM信号,来控制电动机的加速、减速,启动、停止.由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的安全.上面接电源那个是当VS断电后,电机的产生的磁场产生很大的电动势保护电机(因为电机可能正传或者反转,所以两个方向均要设计二极管),接地那个作用在于保护单片机等元件.图3转速控制模块protues仿真的电路图3。3温度显示模块设计数据手册中可能介绍LM1602内部D0~D7已有上拉,可以使用P0口直接驱动。在Proteus里LM016L内部可能没有,应该人为加上拉电阻.图5温度显示模块设计proteus仿真图系统软件设计4.1系统软件构架端口初始化端口初始化液晶显示程序DS18B20函数初始化读取温度值并显示延时开启中断T0定时器控制电动机正/反转,并通过PWM信号控制电动机转速等待中断开始返回图6系统软件总框图元器件清单表2元器件清单学名称型号毕数量备注单片机AT89C511二极管1N40071电容CAP2220pF2100nF电解电容CAP-ELEC110uF晶振CRYSTAL112MHZ温度采集器DS18B201电机控制元件L2981LCD显示器LM016L1电机转子MOTOR—DC1电阻排阻RESPESPACK11110K4.7K6电路设计仿真图7设计电路的proteus仿真结论本方案实现了单片机通过对温度的采集和比较对直流电机进行转速控制,以及利用软件模拟实现直流电机PWM调速的方法.以AT89C51单片机为控制核心,通过DS18B20进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的PWM(脉冲宽度调制)控制信号,送给电机驱动芯片L298的使能端口,通过L298驱动芯片来控制直流电机的启动、速度、方向的变化实现了对普通直流电机的转速调节,为进一步研究和优化直流电机控制方法提供了基础。达到了系统的设计要求:单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。从这次的设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获.参考文献实验程序#include〈reg51.h>#include<intrins.h>#difineuchar;unsignedchar#difineuint;unsignedint#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}sbitDQ=p3^3;sbitLCD_RS=p2^0;sbitLCD_RW=p2^1;sbitLCD_EN=p2^2;sbitMA=P1^0;sbitMB=p1^1;sbitPWM1=p1^2;ucharcodetemp_DISP_Title[]={"Currenttemp:"};ucharcurrent_temp_Display_Buffer[]={"TEMP:"};//温度字符ucharcode_temperature_char[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00,0x00,};//温度小数位对照表uchuarcodedf_Table[]={0,1,1,2,2,3,3,4,4,5,6,6,7,8,8,9,9};ucharCurrenT=0;//当前读取的温度整数部分charSigned_Temp=0;//有符号温度值ucharTemp_Value[]={0x00,0x00};//从DS18B20读取温度值ucharBack_Temp_Value[]={0xFF,0xFF};//温度数据备份ucharDisplay_Digit={0,0,0,0};//待显示的各温度数位bitDS18B20_IS_OK=1;//传感器正常标志uinttCount=0;//—--——---——-----—————----—--————--———--—--—-—--——-—-—---——-———--//延时1//——--—--—-—--—-—-——-—--——-—--—-------——--—----—-———-———--—--voidDelayXus(intx){uchari;while(x--)for(i=0;i〈200;i++);}//—-————---—---—----—----—-------——-—------—--——-—-——---———-—-—-—//液晶控制函数—--———-—--——-———---——-—-—--—-—--——-—-—-——-——---—-——---—--//ucharLCD_Busy_Check()reentrant//voidWrite_LCD_Command(ucharcmd)//voidWrite_LCD_Data(uchardata)//voidLCD_Initialise()//voidSet_LCD_POS(ucharpos)//voidWrite_NEW_LCD_Char()//-———----—-—--—-----—----—————-————--——-—-—--—-—-——-———--—--——-—//-----—--——-—-—---—---—-——-—-----————--—---——-—------—-—-—-—//延时2//——-—-———---—--—----—--—-——-————--——--—-—-—-——-——————-------—---voidDelay(unitx){while(-—x);}//-—-——----——---———-——--—---——--—--——----———-—-—--—-—-—--—-———-——--———-//初始化DS18B20//--—-——---——--—----—--—---—-—--——--——--———-—--—-—-----—-——ucharInit_DS18B20(){ucharDQ=1;Delay(8);DQ=0;Delay(90);DQ=1;Delay(8);status=DQ;Delay(100);DQ=1;returnstatus;//初始化成功返回0}//—------------—--—--—--——-—--——---———-——--—-----—-——----—————//读一字节//--————--———-——-———--—-—-————----—-——-----——-—--———--—-—ucharReadOneByte(){uchari,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;}returndat;}//———-—--—-——-—--—--—------—---———----—-—------—-——--—---——//写一字节//--——————--———---—--—----————-——---—-——-————-—--—-——-——-——voidWriteOnebyte(uchardat){uchari;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>〉=1;}}//——--—-————--———--——-————-——-—--—------—-—-----——-——------------//读取温度值//--—-—-——-----———-----—---——-—--———----—-——-—----—-----—-—-——voidRead_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上显示当前温度//--—-——-——-—--—-—-——--———----—----—--—-—--——----—-------------——---voidDisplay_Temperature(){uchari;uchart=150;//延时值ucharng=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时,次高位不显示if(Display_Digit[2]==0&&Display_Digit[3]==0)//负数符号显示在恰当位置if(ng){if(Current_Temp_Display_Buffer[8]==’')Current_Temp_Display_Buffer[8]==’—';elseif(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信号控制转速//-———---—-—-—-—-----—--——--—----—--—-——-—-—-—--——-——--------—VoidT0_INT()interrup1{TH0=-50000/256;TL0=-50000%256;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;}elseif(Signed_Temp==75)//PWM输出(占空比:100%){PWM=1;DelayX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论