单片机控制直流电机的调速设计方案_第1页
单片机控制直流电机的调速设计方案_第2页
单片机控制直流电机的调速设计方案_第3页
单片机控制直流电机的调速设计方案_第4页
单片机控制直流电机的调速设计方案_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

XTAL2:来自反向振荡器的输出。3振荡器特性

XTAL1和XTAL2分别为反向放大器的输入和输出.该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用.如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。4芯片擦除

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成.在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行.

此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式.在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作.在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。第三章直流电机驱动电路一H桥由两个三极管,一个可以对正极导通实现上拉,另一个可以对负极导通实现下拉.由两套这样的电路,在同一个电路中,同时一个上拉,另一个下拉,或相反,两者总是保持相反的输出,这样可以在单电源的情况下使负载的极性倒过来.由于这样的接法加上中间的负载画出来经常会像一个H的字样,故得名H桥。二H桥驱动电路图8中所示为一个典型的直流电机控制电路。电路得名于“H桥驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而电机就是H中的横杠(注意:图8及随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。如图所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管.根据不同三极管对的导通情况,电流可能会从左至右或从右至左流过电机,从而控制电机的转向.图8H桥驱动电路要使电机运转,必须使对角线上的一对三极管导通。例如,如图9所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动(电机周围的箭头指示为顺时针方向)。图9H桥电路驱动电机顺时针转动图10所示为另一对三极管Q2和Q3导通的情况,电流将从右至左流过电机。当三极管Q2和Q3导通时,电流将从右至左流过电机,从而驱动电机沿另一方向转动(电机周围的箭头表示为逆时针方向).图10H桥驱动电机逆时针转动三使能控制和方向逻辑驱动电机时,保证H桥上两个同侧的三极管不会同时导通非常重要。如果三极管Q1和Q2同时导通,那么电流就会从正极穿过两个三极管直接回到负极。此时,电路中除了三极管外没有其他任何负载,因此电路上的电流就可能达到最大值(该电流仅受电源性能限制),甚至烧坏三极管。基于上述原因,在实际驱动电路中通常要用硬件电路方便地控制三极管的开关。图11所示就是基于这种考虑的改进电路,它在基本H桥电路的基础上增加了4个与门和2个非门.4个与门同一个“使能”导通信号相接,这样,用这一个信号就能控制整个电路的开关。而2个非门通过提供一种方向输人,可以保证任何时候在H桥的同侧腿上都只有一个三极管能导通.(与本节前面的示意图一样,图11所示也不是一个完整的电路图,特别是图中与门和三极管直接连接是不能正常工作的.)图11具有使能控制和方向逻辑的H桥电路采用以上方法,电机的运转就只需要用三个信号控制:两个方向信号和一个使能信号.如果DIR-L信号为0,DIR-R信号为1,并且使能信号是1,那么三极管Q1和Q4导通,电流从左至右流经电机(如图12所示);如果DIR-L信号变为1,而DIR-R信号变为0,那么Q2和Q3将导通,电流则反向流过电机。图12使能信号与方向信号的使用实际使用的时候,用分立元件制作H桥是很麻烦的,好在现在市面上有很多封装好的H桥集成电路,接上电源、电机和控制信号就可以使用了,在额定的电压和电流内使用非常方便可靠。比如常用的L293D、L298N、TA7257P、SN754410等。附两张分立元件的H桥驱动电路:第四章PWM脉宽调制原理一PWM调速原理PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM可以应用在许多方面,比如:电机调速、温度控制、压力控制等等。在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开"时间的长短.通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。也正因为如此,PWM又被称为“开关驱动装置”,见图13所示。图13PWM信号的占空比设电机始终接通电源时,电机转速最大为Vmax,设占空比为D=t1/T,则电机的平均速度为Va=Vmax*D,其中Va指的是电机的平均速度;Vmax是指电机在全通电时的最大速度;D=t1/T是指占空比。由上面的公式可见,当我们改变占空比D=t1/T时,就可以得到不同的电机平均速度Va,从而达到调速的目的。严格来说,平均速度Va与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似的看成是线性关系。二PWM调速方法基于单片机类由软件来实现PWM:在PWM调速系统中占空比D是一个重要参数在电源电压Ud不变的情况下,电枢端电压的平均值取决于占空比D的大小,改变D的值可以改变电枢端电压的平均值从而达到调速的目的。改变占空比D的值有三种方法:A、定宽调频法:保持t1不变,只改变t2,这样使周期(或频率)也随之改变.B、调宽调频法:保持t2不变,只改变t1,这样使周期(或频率)也随之改变。C、定频调宽法:保持周期T(或频率)不变,同时改变t1和t。前两种方法在调速时改变了控制脉冲的周期(或频率),当控制脉冲的频率与系统的固有频率接近时,将会引起振荡,因此常采用定频调宽法来改变占空比从而改变直流电动机电枢两端电压。利用单片机的定时计数器外加软件延时等方式来实现脉宽的自由调整,此种方式可简化硬件电路,操作性强等优点。三PWM实现方式方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。故采用方案一。四显示模块在本设计课题中采用的是7段4位共阳极LED数码管,它的引脚图如图14所示。7段LED数码管是利用7个LED(发光二极管)外加一个小数点的LED组合而成的显示设备,7段数码管分共阴和共阳两种显示方式,本设计中采用共阳极显示器。共阳极显示器的发光二极管的阳极连接在一起,当公共阳极接电源+5V时,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示.通常将控制发光二极管发光的8位字节数据编码称为LED显示的段选码,要构成多位LED显示时,除需要段选线外,还需要位选线,以确定段选码对应的显示位,位选线控制第几个LED显示。段选线控制显示字形。8个阴极分别与8个限流电阻相连,在接到相应的电路中(发光二极管的工作电流选取在10—20ma,限流电阻太大,数码管会太亮),其连接图如图15所示。图157段共阳极LED连接图因为单片机的输出端口输出的电流小,点亮数码管的能力不大,所以需要采用三极管放大输出电流,此次三极管采用的是C9013,具体放大电路如图16所示。图16数码管放大电路五控制模块正转、反转、急停、加速、减速五个开关分别与单片机的P1.0,P1。1,P1。2,P1。3,P1。4相连,然后再与地相连.急停实现直流电机的停转,正转实现直流电机的正转,反转实现直流电机的反转,加速实现直流电机的加速,减速实现直流电机的减速,其电路如图17所示。图17按键电路第五章C语言软件编程在单片机系统的程序的设计开发中,单片机就如同整个系统的交通中枢,而程序就是组成交通中枢的条条大道,各个部分的模块化的程序就是整个系统的组成成份。软件编写的好坏,语句运用的是否简洁直接关系单片机的工作效率。在各个模块化的程序中尽量用最少的语句作最多的事情,不让语句出现歧义,这样就可以使整个程序可以在系统中更好的运行,使单片机工作效率大大的提高。该课题的软件设计采用了模块化设计的思想即将程序划分为若干个相对独立的功能模块,画出每一个功能模块的详细流程图,并根据流程图编写程序,最后按照软件设计的总体结构框图,将各模块连接成一个完整的主程序。在主程序的设计中要合理地调用各模块程序。模块化设计的优点是:无论是硬件还是软件,每一个模块都相对独立,故能独立地进行设计、研制、调试和修改,从而使复杂的工作得以简化.模块之间的相互独立也有助于研制任务的分解和设计人员之间的分工合作,这样可提高工作效率和仪表的研制速度。本利用P3口,编制程序输出一串脉冲,经放大后驱动直流电机,改变输出脉冲的电平的持续时间,达到使电机正转、反转、加速、减速、停转等目的[10—11]。由软件编程从P3.0/P3.1管脚产生PWM信号,经驱动电路输出给电机,从而控制电机得电与失电。软件采用延时法进行设计。单片机上电后,系统进入准备状态。当按动启动按钮后,根据P3。0为高电平时实现电机正转,P3。1为高电平时实现电机反转。根据不同的加减速按钮,调整P3。0/P3.1输出高低电平时的占空比,从而可以控制P3.0/P3。1输出高低电平时的有效值,进而控制电机的加减速.软件流程图如下:开始初始化(定时器)扫描键盘(行列式)是否有键按下去抖动延时根据扫描值查转移表YN返回开始初始化(定时器)扫描键盘(行列式)是否有键按下去抖动延时根据扫描值查转移表YN返回正转反转停止加速档1~5减速档1~5一系统功能调试与仿真1调试软件介绍KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。KEILC51编译器由uVision2集成开发环境与编辑器和调试器以及C51编译器组成。其中uVision2集成开发环境中的工程(project)是由源文件、开发工具选项以及编程说明三部分组成的;编辑器和调试器包括源代码编辑器、断点设置、调试函数语言、变量和存储器.Proteus软件是一种低投资的电子设计自动化软件,提供可仿真数字和模拟、交流和直流等数千种元器件和多达30多个元件库。Proteus软件提供多种现实存在的虚拟仪器仪表。此外,Proteus还提供图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗,尽可能减少仪器对测量结果的影响,Proteus软件提供丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。提供SchematicDrawing、SPICE仿真与PCB设计功能,同时可以仿真单片机和周边设备,可以仿真51系列、AVR、PIC等常用的MCU,并提供周边设备的仿真,例如373、led、示波器等。Proteus提供了大量的元件库,有RAM、ROM、键盘、马达、LED、LCD、AD/DA、部分SPI器件、部分IIC器件,编译方面支持Keil和MPLAB等编译器.一台计算机、一套电子仿真软件,在加上一本虚拟实验教程,就可相当于一个设备先进的实验室.以虚代实、以软代硬,就建立一个完善的虚拟实验室。在计算机上学习电工基础,模拟电路、数字电路、单片机应用系统等课程,并进行电路设计、仿真、调试等。当电路设计完成之后,为了减少在电路板上调试时的难度,保证电路设计的正确性,将Keilc51编译生成的*.HEX文件载入Proteus软件,实现电路仿真.2系统调试在程序编写的过程中,出现了很多问题,包括PWM信号发生电路的控制、以及单片机控制直流电机的转动方向等问题,虽然问题不是很大,但是也让我研究了好长时间,在解决这些问题的时候,我不断向老师和同学请教,希望能通过大家一块的努力把软件编写的更完整,让系统的功能更完备。经过多天的努力探索,也经过老师的指导,大部分问题都已经解决,就是程序还是不能实现应该实现的功能,这让我很着急。后来经过一点一点的调试,并认真总结,发现了问题其实在编写中断处理程序时出现了错误,修改后即可实现直流电机调速的目的.总结这次软件调试,让我认识到了做软件调试的基本方法与流程:(1)认真检查源代码,看是否有文字或语法错误(2)逐段子程序进行设计,找出错误出现的部分,重点排查(3)找到合适的方法,仔细检查程序,分步调试直到运行成功3仿真图形初始状态,直流电机有如图示18运行效果图18电机半速运转按下急停键,直流电机有图19的停止运行结果。图19电机停转按下加速键,直流电机有图20的正向加速运行结果。图20电机正转加速按下减速键,直流电机有图21正向减速运行结果。图21电机正转减速按下反转键,直流电机有图22反向加速运行结果。图22电机反转加速结束语该课题的主要任务是设计一个以89C51单片机为核心的直流电机调速系统。通过联调,实验验证了系统的可行,能满足设计要求,达到设计的指标,最后实现了对转速的控制和LED显示转速。这个开发过程主要包括了硬件电路仿真设计和软件编程两个部分。从确定课设题目,到查阅质料确定总体方案设计,硬件电路仿真的设计,硬件电路的优化,软件的设计,软件的优化,检验仿真电路,调试软件程序,到最后的软硬件联调,其中的每一个过程都是精心设计、仔细完成的。附录单片机控制程序/*******************************************************************单片机控制直流电机*李达*2013。03.09*KeiluVision3调试通过/******************************************************************/#include<reg52。h>#include〈intrins。h>#defineuintunsignedint#defineucharunsignedchar/********************************************************************/ucharled_code[10]={0xa0,0xf9,0xc4,0xd0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码0,1,2,3,4,5,6,7,8,9ucharled_bit[4]={1,2,4,8};//位码ucharled_buf[4];//显示缓存ucharkey_buf[4];intnum=50;//显示数据intn=0;//当前显示位inti=4;//位消隐参数intm=0;//按键次数ucharkey_code;sbitMOTOR0=P3^0;sbitMOTOR1=P3^1;intMOTORPORT0=0;uintMOTORPORT1;intMOTORDIR=0;intMOTORSTOP=0;intcounter=0;sbitp10=P1^0;sbitp11=P1^1;sbitp12=P1^2;sbitp13=P1^3;/*********************************************************************名称:delayms*说明:延时子程序*功能:产生一定时间的延时*输入:ms延时时间1ms的倍数*返回值:无********************************************************************/voiddelayms(uintms){uinta,b;for(a=0;a<ms;a++){for(b=0;b〈125;b++);//1ms}}/*********************************************************************名称:numToBuf*说明:数据转换*功能:把数据按位存入显示缓存*输入:无*返回值:无********************************************************************/voidnumToBuf(void){led_buf[0]=led_code[num%10];//个位led_buf[1]=led_code[num/10%10];//十位led_buf[2]=led_code[num/100%10];//百位led_buf[3]=led_code[num/1000];//千位}/*********************************************************************名称:keyToNum*说明:数据转换*功能:把键盘缓存转换为数据*输入:无*返回值:无********************************************************************/voidkeyToNum(void){num=key_buf[0]+key_buf[1]*10+key_buf[2]*100+key_buf[3]*1000;}/*********************************************************************名称:int_0*说明:定时器0中断服务程序*功能:数码管动态扫描程序*输入:无*返回值:无********************************************************************/voidint_0(void)interrupt1{TH0=0xD8;TL0=0xf0;//定时器0赋初值/*消隐位*/if(num>=1000){//数据在于等于10000i=4;//显示4位}elseif(num<1000&&num〉=100){//数所小于1000大于100i=3;//显示3位}elseif(num<100&&num>=10){//数据小于100大于10i=2;//显示两位}elseif(num<10){//数据小10i=1;//显示1位}/*显示输出*/numToBuf();P2=~led_bit[n];//调用位码P0=~led_buf[n];//调用段码n++;//移位n=n%i;}/*********************************************************************名称:int_1*说明:定时器1中断服务程序*功能:键盘扫描*输入:无*返回值:无********************************************************************/voidint_1(void)interrupt3{TH1=0xfe;TL1=0x0c;//定时器0赋初值if(counter<=num){ MOTORPORT1=1; }elseif(counter<=100&&counter>num){MOTORPORT1=0;}counter++; counter=counter%100;}/*********************************************************************名称:Key_Scan*说明:*功能:键盘扫描*输入:*返回值:按键对应值(0~15);无键按下返回0x7f********************************************************************/unsignedcharKey_Scan(void)//{unsignedchari,n;unsignedcharkey_temp;P1=0xf0;if((P1&0xf0)!=0xf0){if((P1&0xf0)!=0xf0){delayms(100);for(i=0;i〈4;i++){P1=~(1〈〈i);n=P1;n&=0xf0;if(n!=0xf0){switch(n){case(0xe0):key_temp=i*4;break;case(0xd0):key_temp=1+i*4;break;case(0xb0):key_temp=2+i*4;break;case(0x70):key_temp=3+i*4;break;default:key_temp=0x7f;}returnkey_temp;}}}}return0x7f;//如果未按任何键}/*********************************************************************名称:key_dectde*说明:*功能:按键释放检测*输入:*返回值:********************************************************************/unsignedcharkey_dectde(void){unsignedchartemp1,temp2;temp1=Key_Scan();if(temp1==0x7f)return0x7f;do{temp2=Key_Scan();}while(temp1==temp2);returntemp1;}/*主程序*/voidmain(){/*初始化*/TMOD=0x11;TH0=0xD8;//定时器T0为方式1TL0=

温馨提示

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

评论

0/150

提交评论