毕业设计(论文)-步进电机设计.doc_第1页
毕业设计(论文)-步进电机设计.doc_第2页
毕业设计(论文)-步进电机设计.doc_第3页
毕业设计(论文)-步进电机设计.doc_第4页
毕业设计(论文)-步进电机设计.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计说明书(论文) 第 40 页 共 40 页1 引言 步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度f(称为“步距角”);它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的1。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100)的特点,广泛应用于各种开环控制。步进电机系统由控制器、驱动器及步进电机构成。三者缺一不可。目前的驱动器一般都为集成产品,价格昂贵,结构复杂,主要应用于各种工业场合。而对于学校教学实验研究及要求较低的步进电机控制场合,使用专用驱动器来控制步进电机有一定局限性。故提出软件设计方案,方法灵活可靠、成本低廉,也具有一定工程实用价值,应用于实验教学、科研中效果良好1。1.1 课题背景随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。1.2 课题意义步进电机是一种将脉冲信号转换成直线位移或角位移的控制微电机,其机械角位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成比例;它易于实现与计算机或其它数字元件接口,适用于数字控制系统2。通过一种设计方案,包括硬件的介绍和组建、硬件原理图和软件流程图的设计、源程序的编写等,介绍一种基于单片机的步进电机运行控制系统。1.3 课题要求选用at89c51单片机设计控制电路,系统由按键控制部分、51单片机控制部分、步进电机和led状态显示等4部分组成,按下开始键,电机可以正转或反转。按下停止键,电机可以停止转动。按下正转可以让电机正转。按下反转可以让电机反转。按一次加速,显示上加一,速度变快。按一次减速,显示上面的数字减一,速度变慢。完成该系统的硬件和软件的设计和调试工作。系统框图如图1.1所示。数码管显示电路步进电机驱动电路振荡电路和复位电路51单片机控制核心按键控制电路图1.1 系统框图2 硬件部分本课题用到的元器件有at89c51的芯片、led显示器、l297的芯片、l298的芯片和步进电机,通过软硬件的结合,达到对步进电机的控制。以下便是对各元件的介绍。2.1 at89c51引脚功能说明at89c51的引脚结构图如图2.1所示,有双列直插封装(dip)方式和方形封装方式,下面分别叙述这些引脚的功能3。图2.1 at89c51引脚结构图(1)主电源引脚3。vcc:电源端。gnd:接地端。(2) 外接晶体引脚xtal1和xtal2。xtal1:接外部晶体的一个引脚。在单片机内部,它是构成片内振荡器的反相放大器的输入端。当采用外部振荡器时,该引脚接受振荡器的信号,即把此信号直接接到内部时钟发生器的输入端4。xtal2:接外部晶体的另一个引脚。在单片机内部,它是上述振荡器的反相放大器的输出端。采用外部振荡器时,此引脚应悬浮不连接。时钟产生产生和复位电路,时钟产生电路如图2.2所示,复位电路如图2.3。时钟电路连接18端、19端。复位电路连接9端。片内电路与片外器件就构成一个时钟产生电路,cpu的所有操作均在时钟脉冲同步下进行。片内振荡器的振荡频率非常接近晶振频率,一般多在1.2mhz12mhz之间选取。c1、c2是反馈电容,其值在5pf30pf之间选取,典型值为30pf。本电路选用的电容为30pf,晶振频率为12mhz。这样就确定了单片机的4个周期分别如下。振荡周期1/12s机器周期(sm)1s指令周期14s图2.2 时钟产生电路xtal1和xtal2:片内振荡电路输入线,这两个端子用来外接石英晶体和微调电容。在石英晶体的两个管脚加交变电场时,它将会产生一定频率的机械变形,而这种机械振动又会产生交变电场,上述物理现象称为压电效应。一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。这一特定频率就是石英晶体的固有频率,也称谐振频率。即用来连接at89c51片内osc的定时反馈回路,如图2.3所示。石英晶振起振后要能在xtal2线上输出一个3v左右的正弦波,以便使mcs-51片内的osc电路按石英晶振相同频率自激振荡。通常,osc的输出时钟频率fosc为0.5mhz-16mhz,典型值为12mhz或者11.0592mhz。电容c1和c2可以帮助起振,典型值为30pf,调节它们可以达到微调fosc的目的5。图2.3为单片机复位电路。单片机在开机时都需要复位,以便中央处理器cpu以及其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。单片机的复位后是靠外部电路实现的,在时钟电路工作后,只要在单片机的rst引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便可实现初始化状态复位。mcs-51单片机的rst引脚是复位信号的输入端。例如:若mcs-51单片机时钟频率为12mhz,则复位脉冲宽度至少应该为2s6。图2.3 复位电路上图为上电复位和按键复位电路。上电瞬间,rst端的电位与vcc相同,随着电容的逐步充电,rst端的电位逐渐下降,此时=2210-61103=22ms。当按下键时,rst端出现5100012004.2v,使单片机复位。(3)控制或与其它电源复用引脚rst,ale/prog,psen和ea/vpp。rst:复位输入端。当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。ale/prog:当访问外部存储器时,ale(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ale端仍以不变的频率(此频率为振荡器频率的1/6)周期性地出现正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的,然而要注意的是:每当访问外部数据存储器时,将跳过一个ale脉冲。在对flash编程期间,该引脚还用于输入编程脉冲(prog)。如果需要的话,通过对专用寄存器(sfr)区中8eh单元的d0位置数,可禁止ale操作。该位置数后,只有在执行一条movx或movc指令期间,ale才会被激活。另外,该引脚会被微弱拉高,单片机执行外部程序时,该设定禁止ale位无效。psen:程序存储允许(psen)输出是外部程序存储器的读选通信号。当at89c51由外部程序存储器取指令(或常数)时,每个机器周期两次psen有效(即输出2个脉冲)。但在此期间内,每当访问外部数据存储器时,这两次有效的psen信号将不出现。ea/vpp:外部访问允许端。要使cpu只访问外部存储器(地址为0000hffffh),则ea端外部必须保持低电平(接到gnd端)。然而要注意的是:如果保密lb1被编程,复位时在内部会锁存ea端的状态7。当ea端保持高电平(接vcc端)时,cpu则执行内部程序存储器中的程序。在flash存储器编程期间,该引脚也用于施加12v的编程允许电源vpp(如果选用12v编程)。(4)输入/输出引脚p0.0p0.7,p1.0p1.7,p2.0p2.7,p3.0p3.78。(a)p0端口(p0.0p0.7)p0是一个8位漏极开路型双向i/o端口。作为输出端口用时,每位能以吸收电流的方式驱动8个ttl输入,对端口写1时,又可作为高阻抗输入端用。在访问外部程序和数据存储器时,它是分时多路转换的地址(低8位)/数据总线,在访问期间激活了内部的上拉电阻。在flash编程时,p0端口接受指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。(b)p1端口(p1.0p1.7)p1是一个带有内部上拉电阻的8位i/o端口。p1的输出缓冲器可驱动(吸收或输出电流方式)4个ttl输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口,p1口作输入口使用时,因为有内部的上拉电阻,那些被外部信号低的引脚会输出一个电流(iil)。在flash编程和程序校验时,p1接受低8为地址。(c)p2端口(p2.0p2.7)p2是一个带有内部上拉电阻的8位双向i/o端口。p2的输出缓冲器可驱动(吸收或输出电流方式)4个ttl输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。p2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(iil)9。在访问外部程序存储器和16位地址的外部数据存储器(如执行movxdptr指令)时,p2送出高8位地址。在访问8位地址的外部数据寄存器(如执行movri指令)时,p2口引脚上的内容(就是专用寄存器(sfr)区p2寄存器的内容)在整个访问期间不会改变9。在对flash编程和程序校验期间,p2也接收高位地址和一些控制信号。(d)p3端口(p3.0p3.7)p3是一个带内部上拉电阻的8位双向i/o端口。p3的输出缓冲器可驱动(吸收或输出电流方式)4个ttl输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。p3作输入口使用时,因为内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(iil)10。在at89c51中,p3端口还用于一些复用功能。复用功能如表2.1所示。在对flash编程或程序校验时,p3还接收一些控制信号。表2.1 p3各端口引脚与复用功能表端口引脚复用功能p3.0rxd(串性输入口)p3.1txd(串性输出口)p3.2int0(外部中断0)p3.3int1(外部中断1)p3.4t0(定时器0的外部输入)p3.5t1(定时器1的外部输入)p3.6wr(外部数据寄存器写选通)p3.7rd(外部数据寄存器读选通)2.2 led显示器利用led显示器来显示步进电动机的控制速度。2.2.1 七段led显示器简介led显示器是由8个发光二极管构成。其中,7个led构成7笔字型,1个led构成小数点(故有时称为八段显示器),如图2.4(a)所示。如图2.4七段码显示器的结构及接法,led显示器有两大类产品,一类是共阴极接法如图(b)所示,另一类是共阳极接法如图(c)所示,前者是高电平点亮,后者是低电平点亮。七段led显示器显示原理很简单,只要控制其中各段led的亮与灭迹可显示相应的数字、字母或符号,控制七段led显示器进行显示信息称为七段码,如表2.2所示为共阳极接法的七段码(字行码)。本课题选用的是共阳极接法11。(a)结构 (b)共阴极接法 (c)共阳极接法图2.4 七段码显示器的结构及接法表2.2为数码管的七段码(字形码),共阳极的,本课题选用的就是共阳极显示数码管。表2.2 七段码(字形码)显示字符d7d6d5d4d3d2d1d0七码段dpgfedcba011000000c0h111111001f9h210100100a4h310110000b0h41001100199h51001001092h61o00001082h711111000f8h81000000080h91001000090ha1000100088hb1000001183hc110001100c6hd101000010ahe1000011086hf100011108eh2.2.2 显示部分的流程图显示部分的流程图如图2.5所示。开 始开千位显示开关将要显示的千位数据发送到数码管开百位显示开关将要显示的百位数据发送到数码管开十位显示开关将要显示的十位数据发送到数码管开个位显示开关将要显示的个位数据发送到数码管关显示开关结 束y图2.5 数码管程序流程图2.2.3 数码管显示流程图说明void seg7display(unsigned int num)/能显示4位的数据unsigned int num为需要显示的数据。 /开千位显示,千位的显示从10009999之间的数字。seg7_1 = 1;/开显示seg7dataport = seg7codenum/1000;delayms(5);/将要显示的数据发生到 数码管 /开百位显示,百位的显示从100999之间的数字。seg7_2 = 1; seg7dataport = seg7code(num%1000)/100;delayms(5); /开十位显示,十位的显示从1099之间的数字。seg7_3 = 1; seg7dataport = seg7code(num%100)/10;delayms(5); /开个位显示,个位的显示从19之间的数字。seg7_4 = 1; seg7dataport = seg7codenum%10;delayms(5);p2 &= 0x0f;这样就实现了从1到255步的显示。如图2.6显示器的引脚图,引脚1、2、3、4均是显示器的控制端,直接由at89c51控制端p2.4、p2.5、p2.6、p2.7控制,分别实现千、百、十、个位的开断。图2.6 显示器的引脚图2.3 l297与l298介绍2.3.1 l297的工作原理介绍l297单片步进电动机控制器集成电路适用于双极性两相步进电机或单极性四相步进电动机的控制。用l297输出信号可控制l298双h桥驱动集成电路,用来驱动电压46v每相电流为2.5a以下的步进电动机。l297也可用来控制由达林顿晶体管组成的分立电路,驱动更高电压、更大电流的步进电动机。l297采用固定斩波频率的pwm恒流斩波方式工作。2.3.2 l297步进电动机控制器l297采用模拟/数字电路兼容的i2l工艺,20脚dip塑料封装,常以+5v供电,全部信号线是ttl/cmos兼容。l297的核心是脉冲分配器。它产生三种相序信号,对应于三种不同的工作方式:半步(hale step)方式;基本步距(full step,整步),一相激励方式;基本步距,两相激励方式。它接受从上位计算机来的信号有三个:cw/ccw 正/反转(17脚);half/full 半步/基本步距(19脚);step 步进脉冲(18脚)。脉冲分配器内部是一个3bit可逆计数器,加上一些组合逻辑,产生每周期8步格雷码时序信号,这也就是半步工作方式的时序信号。此时hale/full信号为高电平。它表示8步(拍)工作,初状态(home)是abcd=0101。若half/full取低电平,得到基本步距工作方式。2.3.3 l297、l298各引脚功能说明如图2.7l297的引脚,表2.3l298各引脚功能说明框图,l297的引脚图如图2.8所示。1脚(syng)斩波器输出端。如多个297同步控制,所有的sync端都要连在一起,共用一套振荡元件。如果使用外部时钟源,则时钟信号接到此引脚上。2脚(gnd)接地端。3脚(home)集电极开路输出端。当l297在初始状态(abcd=0101)时,此端有指示。当此引脚有效时,晶体管开路。4脚(a)a相驱动信号。5脚(inh1)控制a相和b相的驱动极。当此引脚为低电平时,a相、b相驱动控制被禁止;当线圈级断电时,双极性桥用这个信号使负载电源快速衰减。若control端输入是低电平时,用斩波器调节负载电流。6脚(b)b相驱动信号。7脚(c)c相驱动信号。8脚(inh2)控制c相和d相的驱动级。作用同inh1相同。9脚(d)d相驱动信号。10脚(enable)l297的使能输入端。当它为低电平时,inh1,inh2,a,b,c,d都为低电平。当系统被复位时用来阻止电机驱动。11脚(control)斩波器功能控制端。低电平时使inh1和inh2起作用,高电平时使a,b,c,d起作用。12脚(vcc)+5v电源输入端。13脚(sens2)c相、d相绕组电流检测电压反馈输入端。14脚(sens1)a相、b相绕组电流检测电压反馈输入端。15脚(vref)斩波器基准电压输入端。加到此引脚的电压决定绕组电流峰值。16脚(osc)斩波器频率输入端。17脚(cw/ccw)方向控制端。步进电机实际旋转方向由绕组的连接方法决定。当改变此引脚的电平状态时,步进电机反向旋转。18脚(clock)步进时钟输入端。该引脚输入负脉冲时步进电机向前步进一个增量,该步进是在信号的上升沿产生。19脚(half/full)半步、全步方式选择端。此引脚输入高电平时为半步方式(四相八拍),低电平时为全步方式。如选择全步方式时变换器在奇数状态,会得到单相工作方式(单四拍)。20脚(reset)复位输入端。这个引脚输入负脉冲的时候,变换器恢复初始状态(abcd=0101)。图2.7 l297的引脚图表2.3 l298各引脚功能说明框图引脚namefunction功能说明1;15sensea;senseb电流监测端,1、15和powerso的2、19用法一样,sen1、sen2分别为两个h桥的电流反馈脚,不用时可以直接接地2;3out1;out21y1、1y2输出端4vs功率电源电压,此引脚与地必须连接100nf电容器5;7input1;input21a1、1a2输入端,ttl电平兼容6;11enablea;enablebttl电平兼容输入1en、2en使能端,低电平禁止输出8gndgnd地9vss逻辑电源电压。此引脚与地必须连接100nf电容器10;12input3;input42a1、2a2输入端,ttl电平兼容13;14out3;out42y1、2y2输出端监测引脚15n.c.not connected空图2.8 l298的引脚图2.3.4 l297与l298的连接禁止信号inh1(5脚)inh2(8脚)接l298使能输入端,其作用是使进入关断状态的相绕组电流快速衰减。此两信号是低电平有效。但在两相激励基本步距工作方式时,两禁止信号基本保持高电平,两相绕组一直处于工作状态,没有关断。两个禁止信号分别是由a、b和c、d以“或逻辑”得到的。 inh1=a+n (2.1) inh2=c+d (2.2)信号reset(20脚)是异步复位信号,其作用是将脉冲分配器复位,回到零位(home),即状态1,abcd=0101。此时状态输入信号(home)为1,用此信号和系统的机械零位传感器信号共同作用,可精确确定系统的原点。用使能信号enable(10脚)控制输出逻辑,它为低电平时,inh1、inh2、a、b、c、d均被强制为低电平,使l298驱动器不工作。l297还设有两个pwm斩波器来控制相绕组电流,实现恒流载波控制,以获得良好的转矩-频率特性。每个斩波器由一个比较器、一个rs触发器和外接采样电阻组成,本设有一个公用振荡器,向两个斩波器提供触发脉冲信号。脉冲频率f是由16脚的rc网络决定的,当r10千欧姆时。 f=1/0.69rc (2.3)当用多个l297控制多台步进电动机时,可用1脚(sync)实现其同步化。振荡器脉冲使触发器置“1”,电机绕组相电流上升,采样电阻rs的电压上升到基准电压vref时,比较器翻转,使触发器复位,功率开关关断,电流下降。等待下一个振荡器脉冲的到来。这样,触发器的输出是恒频的pwm信号,调试l297的输出信号。相绕组电流峰值由vref来整定12。control信号(11脚)用来选择斩波信号的控制。当它是低电平时,斩波信号作用于两个禁止信号,而它是高电平时,斩波信号作用于a、b、c、d信号。前者适用于单极性工作方式。而对于双极性工作方式的电机,这两种控制方式都可以采用。整体连接图2.9所示。图2.9 l297与l298的连接总框图2.4 步进电机介绍2.4.1 步进电机的概述步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其精度高等特点,广泛应用于各种工业控制系统中13。步进电机的种类繁多,按其运动方式分为有旋转型和直线型,通常使用的旋转型步进电动机又可分为反应式,永磁式,感应式。其中反应式步进电动机是我国应用最广泛的一种,它具有调速范围大、动态性能好、能快速起动、制动和反转。主要用于计算机的磁盘驱动器、绘图仪、自动记录仪及调速性能和定位要求不是非常精确的简易数控机床等的位置控制。从零件的加工过程来看,工作机械对步进电机的基本要求是:调速范围宽。尽量提高最高转速以提高劳动生产率;动态性能好。能迅速启动、正反转和停转;加工精度高。即要求一个脉冲对应的位移量小、并要精确、均匀。这就要求步进电机步距小、步距精度高、不应丢步或越步;输出转距大。可直接带动负载。2.4.2 步进电机的工作原理本课题选用的是四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动,如图2.10是该四相反应式步进电机工作原理示意图。图2.10 四相步进电机步进示意图开始时,开关sb接通电源,sa、sc、sd断开,b相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和c、d相绕组磁极产生错磁,2、5号齿就和d、a相绕组磁极产生错磁。当开关sc接通电源,sb、sa、sd断开时,由于c相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和c相绕组的磁极对齐。而0、3号齿和a、b相绕组产生错齿,2、5号齿就和a、d相绕组磁极产生错磁。依次类推,a、b、c、d四相绕组轮流供电,则转子会沿着a、b、c、d方向转动。四相步进电机按照通电顺序的不同,可分为单四拍,双四拍、八拍三种工作方式。单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转距动力距又可以提高控制精度。八拍工作方式的电源通电时序与波形如图2.11所示。脉冲 a相b相c相d相图2.11 八拍工作方式的电源通电时序与波形图2.4.3 步进电机控制步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(vr)、永磁式步进电机(pm)和混合式步进电机(hb)。步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下。(1)控制换相顺序通电换相这一过程称为脉冲分配。例如:混合式步进电机的工作方式,其各相通电顺序为a-b-c-d,通电控制脉冲必须严格按照这一顺序分别控制a,b,c,d相的通断,这就是所谓脉冲环形分配器。(2)控制步进电机的转向如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。(3)控制步进电机的速度如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。2.5 键盘接口的设计2.5.1 键盘控制本课题总共有六个键盘可以控制。分别起控制电机的起步、停止、正转、反转、加速、减速。2.5.2 键盘的工作原理按键设置在行和列线的交点上,行和列线分别连接到按键开关的两端。行线通过上拉电阻接+5v,被钳位在高电平状态。键盘的工作过程可分两步:第一步是cpu首先检测键盘上是否有键按下;第二步是识别是哪一键按下13。2.5.3 键盘的工作方式查询工作方式、定时扫描工作方式和中断工作方式。本设计选用的查询工作方式与中断工作方式两种工作方式。查询工作方式完成了对开始和停止的控制,而中断工作方式完成了对加速、减速、正转和反正的控制。2.5.4 键盘接口说明键盘分别接at89c51的p3.0、p3.1、p3.2、p3.3、p3.4、p3.5端口。相关的如表2.1p3各端口引脚与复用功能表。3 软件的设计本课题用c语言编程,从而达到本课题的最终目的。在keil中运行,生成一个“.hex”文件。3.1 设计要求为用户使用方便,需要实现人机交互。为实现对不同相数的步进电机进行控制而不更换控制器的要求,需要实现励磁方式的可控性。要求实现步进电机的转速可控和旋转角度可控。要求有足够的控制精度。3.2 软件部分设计3.2.1 程序设计语言的选用本设计中采用的处理器是at89c51单片机,由此可采用面向mcs-51的程序设计语言,包括asm51汇编语言和c51高级语言,这两种语言各有特点。汇编语言更接近机器语言,常用来编制与系统硬件相关的程序,如访问i/o端口、中断处理程序、实时控制程序、实时通信程序等;而数学运算程序则适合用c51高级语言编写,因为用高级语言编写运算程序可提高编程效率和应用程序的可靠性14。考虑到c语言的以下特点,在智能测控装置的基本功能软件开发中,全部程序均采用c51语言编写。(1)简洁紧凑、灵活方便c语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。c语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。(2)运算符丰富c的运算符包含的范围很广泛,共有种34个运算符。c语言把括号、赋值、强制类型转换等都作为运算符处理。从而使c的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。(3)数据结构丰富c的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外c语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。(4)c是结构式语言结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。c语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。(5)c语法限制不太严格、程序设计自由度大一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而c语言允许程序编写者有较大的自由度。(6) c语言允许直接访问物理地址,可以直接对硬件进行操作因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。(7)c语言程序生成代码质量高,程序执行效率高一般只比汇编程序生成的目标代码效率低1020%。(8)c语言适用范围大,可移植性好143.2.2 系统软件开发环境与以往的80c51单片机不同,at89c51具有在线调试和下载功能,它由支持at89c51的开发工具包keil uversion2.0开发系统来提供。在用户系统保留at89c51的情况下,通过开发系统与at89c51的串行接口通信,直接对用户系统进行调试,并在调试完成后将调试好的程序下载到at89c51中。keil uversion2.0开发系统提供四项功能:编译、下载、调试和模拟,分别由keil uversion2.0提供的编译器、在线串行下载器、调试器和模拟器来实现。keil uversion2.0编译器可在windows操作系统下直接使用,编译汇编源程序,并生成16进制文件和列表文件。串行下载器是一个软件程序,它允许通过标准pc机上的串口串行下载汇编程序到片内8kb的闪速程序存储器中。调试器允许用户使用at89c51的uart串行接口在芯片上调试代码执行。在典型调试对话中,调试器提供对片内所有外围设备的访问、单步和设置断点的代码执行控制方式。模拟器采用windows系统,能完全模拟at89c51的所有功能。模拟器使用简单,包括多断点、单步以及代码执行跟踪等能力15。3.3 软件部分的分析开始本系统主要由主控程序(实现系统的初始化、各个子程序的调用等),主函数流程图如图3.1所示。初始化计数器初始化转速转速控制子程序电机转动一步转速显示子程序图3.1 主函数流程图程序初始化包括以下程序,主要对单片机的变量、定时器、步进电机等做初始化设置;定时器实现外部中断,进行加速、减速、正转和反转的控制16。(1)工作方式的介绍(a)工作方式0:13位定时器/计数器方式门控信号的作用。当gate1=0时,则t/c1的启动与停止仅由t/r1控制。当gate1=1时,则只有当t/r1=1且int1=1时,t/c才开始工作。计数器的初值n的范围为:08192。计数值x为:x=8192-n。定时器常数计算公式:t=(8192-n)tcy。(b)工作方式1:16位加法计数器方式计数器的初值n的范围为:065535。计数值x为:x=65535-n。定时器常数计算公式:t=(65535-x)tcy。(c)工作方式2:8位自动重装入定时器/计数器方式当tl1计数溢出进:1)1tf1;2)th1tl1。计数器的初值n的范围为:0256。计数值x为:x=256-n。定时器常数计算公式:t=(256-n)tcy。(d)工作方式3t0工作于方式3时,分为两个独立的8位计数器tlo和th0。tl0:使用t0的控制和中断资源,计数器为8位。th0:被固定作为一个8位的定时器,借用tr1作为运行控制位,借用tf1作为溢出标志。t1工作于方式3时,t1没有运行控制和溢出中断功能,常用作串行器的波特发生器。(2) at89c51中的定时器/计数器定时器/计数器直接工作在工作方式2,t0、t1都为计数方式。当m1m2=10时,定时器/计数器设定为工作方式2。方式2是自动重装初值的8为定时器/计数器。其逻辑结构如图3.2所示。tlx作为8位加法计数器使用,thx作为初值寄存器使用,thx、tlx的初值都由软件设置。tlx计数溢出时,不仅置位tfx,而且发出重装载信号,使三态门打开,将thx中的初值自动送入tlx,并从初值开始重新计数。重装初值后,thx的内容保持不变。在工作方式2时,计数器的计数值由下式确定。n=28-x=256-x(计数范围为1256)。定时器的定时值由下式确定。t=ntcy=(256-x)tcy。如果fosc=12mhz,则tcy=1us,定时范围为1256us16。振荡器12中断申请c/t=0定时tlx(8位)控制查询位c/t=1计数tfx。 。 。重装载tx引脚trxbgatethx(8位)&注:x=0,1a 。 intx引脚图3.2 定时器/计数器方式2的逻辑结构main()/主函数。bit flag =1; /定义了一个名为flag的位变量,其值为1。定时器设置。tmod=0x66; /定时器0,1都为计数方式;方式2;01100110设置了特殊功能寄存器tmod的数据,用于操作定时/控制器的状态。此处设置了t1和t0都为计数模式,并且使用模式2状态。ea=1; /开中断。ea是中断允许总控位,此处置1说明打开中断。th0=0xff; /定时器0初值ffh;利用定时器实现外中断功能。把初值ffh赋值给定时器0。tl0=0xff; /把初值ffh赋值给8位加法计数器tl0。et0=1; /定时/计数器0的溢出中断允许位被开启,允许t0中断。tr0=1; /tr0为定时器0运行控制位。此处置1说明定时器0接通工作。th1=0xff; /定时器1初值ffh;利用定时器实现外中断功能。把初值ffh赋值给定时器1。tl1=0xff; /把初值ffh赋值给8位加法计数器tl1。et1=1; /定时/计数器0的溢出中断允许位被开启,允许t0中断。tr1=1; /tr1为定时器1运行控制位。此处置1说明定时器1接通工作。it0=1; /脉冲方式。it0是外部中断0类型控制位。此处设置为1说明是后沿触发。ex0=1; /开外部中断0:加速。ex0外部中断0的中断允许位被开启,说明允许外部中断0中断。it1=1; /脉冲方式。it1是外部中断1类型控制位。此处设置为1说明是后沿触发。ex1=1; /开外部中断1:减速。ex1外部中断1的中断允许位被开启,说明允许外部中断1中断。判断按键,是否启动步进电机。while(1) /括号内是1,说明一直循环。 if(stop = 0)|(flag =1) /控制开始停止。如果p3.1口的绝对地址位为0或者flag为1,那么执行以下循环。否则不执行。while(start = 1); /如果p3.0口的绝对地址为1,那么把0赋值给flag,否则不执行。flag =0;电机转速调整是通过设置步进电机运行时钟来实现,时钟频率越高,转速越快。clock(runspeed); /调用clock函数,并传入数值runspeed。l297_clock=l297_clock; /步进电机运行时钟。p1.0口的绝对地址取反后赋值给l297_clock。调用显示函数显示步进电机的转速。seg7display(runspeed); /调用seg7display函数,并传入数值runspeed。步进电机的转向、速度通过按键来控制,而按键接的是定时器和外中断引脚。这样只要按键有触发,就会进入中断程序执行里面的程序;程序如下所示。/定时器0中断程序:正转。流程图如下图3.3。void t_0(void) interrupt 1 /定时器0中断程序:正转。无返回值,名为t_0,无传入参数。interrupt 1为定时器0的中断号。/runstate=right_run; l297_cw=1; /控制正转信号。控制l297的cw信号引脚。p1.1口的绝对地址设置为1。 计数器0中断子程序n正转键按下y电机正转子程序返回图3.3 正转的流程图/定时器1,中断3:反转,流程图如下图3.4。void t_1(void) interrupt 3 /定时器1中断:反转。无返回值,名为t_1,无传入参数。interrupt 3为定时器1的中断号。/runstate=left_run;l297_cw=0; /控制反转信号。控制l297的cw信号引脚。p1.1口的绝对地址设置为0。计数器1中断子程序 反转键按下ny电机反转子程序返回图3.4 反转的流程图/中断0:加速程序,加速的流程图3.5。void speedup() interrupt 0 /中断0:加速程序。无返回值,名为speedup,无传入参数。interrupt 0为外部中断0的中断号。 if(runspeed255) /如果runspeed1) /如果runspeed1。runspeed=runspeed-1; /那么把runspeed减1。直到runspeed大于等于小于等于1。外部中断2中断子程序减速键按下ny减速减1ny转速减1转速大于1图3.6 减速键3.4 程序主程序#include at89x51.hvoid clock(unsigned char speed) ; /控制速度的函数void seg7display(unsigned int num);/数码管显示函数,能显示4位的数据sbit l297_cw =p11; /控制l297的cw信号引脚定义sbit l297_clock = p10; /控制l297的时钟信号引脚定义#define seg7dataport p0 /数码管数据控制端口sbit seg7_1 = p24; /数码管数据选择端口1sbit seg7_2 = p25; /数码管数据选择端口2sbit seg7_3 = p26; /数码管数据选择端口3sbit seg7_4 = p27; /数码管数据选择端口4sbit start = p30;sbit stop = p31;unsigned int runspeed=10;/初始化速度const unsigned char seg7code=0xb0,0xf9,0xa4,0xb0,0x98,0x92,0x82,0xd8,0x90,0x70,0xff;main()bit flag =1;/*定时器设置*/tmod=0x66; /定时器0,1都为计数方式;方式2。th0=0xff;/定时器0初值ffh;利用定时器实现外中断功能。tl0=0xff;et0=1;tr0=1;th1=0xff;/定时器1初值ffh;利用定时器实现外中断功能。tl1=0xff;et1=1;tr1=1;it0=1;/脉冲方式ex0=1;/开外部中断0:加速it1=1;/脉冲方式ex1=1;/开外部中断1:减速 ea=1;/开中断 while(1) if(stop = 0)|(flag =1) /控制开始停止 while(start = 1); flag =0; clo

温馨提示

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

评论

0/150

提交评论