【《直流调速系统的AT89C52单片机程序设计分析案例》8800字】_第1页
【《直流调速系统的AT89C52单片机程序设计分析案例》8800字】_第2页
【《直流调速系统的AT89C52单片机程序设计分析案例》8800字】_第3页
【《直流调速系统的AT89C52单片机程序设计分析案例》8800字】_第4页
【《直流调速系统的AT89C52单片机程序设计分析案例》8800字】_第5页
已阅读5页,还剩14页未读, 继续免费阅读

下载本文档

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

文档简介

第第页共29页直流调速系统的AT89C52单片机程序设计分析案例目录TOC\o"1-3"\h\u242直流调速系统的AT89C52单片机程序设计分析案例 1183901.1主程序设计 1119641.2按键子程序 252531.3PWM输出子程序 3276901.1.1PWM控制原理 329181.1.2PWM输出程序部分 4322101.4PID控制器子程序 5278151.4.1PID算法原理 570561.4.2PID控制的程序部分 10295791.5定时器中断子程序 12308911.6系统软件稳定性设计 13206161.7Protues中的程序调试 14102151.7.1串口通信程序 1417461.7.2PID控制器的参数整定与调试 15299911.7.3积分分离式PID控制器 18本系统是控制并调节直流电机转速快速响应给定值的直流调速系统,它主要通过对电机转速信号的实时监测和计算PWM控制信号的输出实现对电机的启动及转速的控制。因此,其对系统的实时性、快速性、精确性有着十分高的要求。在充分考虑上述要求后,本系统程序设计的主要目的确定为实现如下功能:直流电机转速的检测,转速PID控制器,根据PID控制器的输出值生成PWM信号来调节电机转速,实现数码管的显示,使调速系统显示电机当前的给定转速和实际转速。根据上述所需实现的功能,本设计采用主程序循环调用各个子程序和中断程序结合的方式对系统实现控制。主程序主要实现了初始化设置、对各个子程序的循环调用,这样就能实时监测电机的转速并对其进行控制。主程序调用的子程序包括:系统初始化子程序、延时子程序、按键子程序、串口数据传输子程序、PID调节器子程序、转速显示子程序以及PWM输出子程序。1.1主程序设计 主程序的流程如图3-1所示。主程序主要用于系统的子程序和变量的初始化以及不断循环调用各个模块的子程序,其中初始化包括对定时器T0、按键扫描模块、PID控制器、外部中断INT0、PWM输出模块子程序、数码管转速显示模块和串口等子程序的初始化。图3-1主程序流程图 当单片机系统开始运行时,首先就需要利用主程序来初始化所有的参数和变量的设置,然后按顺序查找各个子程序,每个被调用的子程序会进入主程序的循环体。各项子程序将采用直接调用寄存器法来进行编写,即根据软件编译的环境来定义所使用到的寄存器,以此来进行各个子程序的编写工作。1.2按键子程序按键程序的主要功能是通过软件来对硬件电路中的机械按键进行消抖,切换电机的正反转以及增加或减小电机的转速。首先应先选择按键要输入的IO端口,这里选择P1.1、P1.2、P1.3分别作为系统加速、减速、换向按键,接着通过设置端口P1.1、P1.2、P1.3分别为AddSpeed、SubSpeed、Turnside,最后对相应输出端口进行设置,完成按键模块子程序的初始化,其流程如图3-2所示。 根据所需要通过按键实现的功能来完成对按键函数的编写,本设计定义当单片机的I/O端口接收到一个低电平信号时,即按键按下时认为发出控制信号,此时判断为按键被按下一次,按键程序完成一次运行。然而实际中,按键动作时由于触点的弹性作用,电平信号会出现多次抖动,这就可能导致误识别为多次动作,为了消除抖动带来的影响,应设置延时程序和自锁程序来消除抖动,此处考虑在Protues仿真模型中运行程序,故设置按键的消抖延时时间为20ms,实际硬件电路中应大于20ms;主程序也通过在每个循环进行按键扫描来接收案件信号。此处采用顺序扫描,防止同时误触按键。图3-2按键子程序流程图 软件去抖动的程序如下:if(AddSpeed==0)//判断是否有按键按下 { delay(200);//延时20ms去除前沿抖动 if(AddSpeed==0)//判断是否有按键确实被按下 { SpeedSet+=100;//执行所需要执行的指令 …… } }1.3PWM输出子程序1.1.1PWM控制原理脉宽调制,即“PulseWidthModulation”,使脉冲宽度调制的简称,其英文缩写为PWM,是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式;根据面积等效法则,即在惯性系统中,任意波形的信号均可以由一系列等幅不等宽的矩形脉冲方波替代,它们在惯性系统中的作用效果相同,可以通过对改变脉冲的时间宽度,来获得与所需要合成波形具有等效幅值和频率的波形。PWM控制技术,是一种保持频率不变,改变电源开关开通和关断时间的控制方法。其本质是:当输入电压、内部参数及外界负荷改变时,由闭环系统进行闭环控制,在维持脉冲的周期不改变的情况下,使输出电压得到稳定。PWM的反馈控制的优点是能够进行数字控制,这样就可以防止PWM的不稳定以及PWM的发展;因此,该系统采用PWM技术来实现对直流电动机的转速调节。1.1.2PWM输出程序部分 PWM输出子程序应配合PID调节器共同作用调节电机转速,当加速或减速信号输入到单片机时,则PWM输出程序将跟随PID控制器的作用,采用控制PWM信号的占空比的方式来控制输出电压的平均值,从而调节电机转速;该调速系统通过在MCU中利用定时器T0产生的PWM控制信号来生成PWM信号,并利用P1.0口作为PWM控制信号的输出端口。因此首先通过设置定时器工作方式寄存器TMOD使定时器T0工作于16位定时/计数器模式,通过自动重装初值实现定时中断。本设计将一个周期内的PWM信号分为若干个等宽的部分,通过一个比较器和预设的变量cnt离散地控制占空比和PWM周期。PID控制器输出的值会与cnt进行比较,每当定时中断发生时,cnt的值对应加一,然后于PID控制器输出值比较,当小于PID控制器的输出值时为高电平,当低于输出值时为低电平,由此可以实现PWM的输出跟随PID控制器的输出而变化。PWM输出程序流程如图3-3所示。PWM输出子程序如下:voidPWMOUT(){ if(cnt<PWMTime) { PWM_FC=1;//若PID输出值大于当前时间值,则输出高电平 } else { PWM_FC=0;//若PID输出值大于当前时间值,则输出高电平 } if(cnt>100)cnt=0;//将当前时间值置零}图3-3PWM输出子程序流程图1.4PID控制器子程序本设计中的PID控制器是用来对电动机的转速进行控制的。PID控制器的主要任务是利用对实际转速和给定转速的大小进行作差后得到的三次转速偏差信号进行PID计算,最后将输出的值送入PWM输出子程序产生控制电机转速的PWM信号。1.4.1PID算法原理PID即Proportional、Integral、Differential的缩写,这三个单词分别表示控制器中的比例、积分、微分环节。PID是非常经典的闭环控制算法,其具有适用面十分广泛,控制参数相对独立,原理简单易懂,易于实现和改进,参数的选定比较简单等优点。凡是需要将某一物理量维持稳定的场合,如直流电机调速,PID都具有很大的用处。PID算法流程如图3-4所示。图3-4PID算法流程图在实际编程应用中,都需要使用离散化的数字式PID算法,以适应计算机的环境;数字式PID算法是广泛应用于数字式控制系统的一种算法,其主要有两种:位置式PID和递进型PID。在数字PID控制中,P代表比例控制环节,控制器所输入的误差信号与输出信号成比例,这也是最简单常用的控制方式,但是在仅使用比例控制的闭环系统中一定会存在稳态误差,因此,比例控制器的精确度和稳定性不佳。如图3-5所示,在一般情况下,在PID控制器中通过调整比例环节的比例系数Kp可以改变系统的响应速度,能够实现系统的快速响应。当比例系数较大时,系统的响应特性更像是纯比例控制器的响应特性,系统在达到纯比例控制器作用的稳态值之前响应十分快速,而在之后积分环节的作用才开始明显,最终系统缓慢趋于给定值;而过小的比例系数又会使系统中比例控制环节的作用被弱化,时系统调节时间增大,超调量变大并产生振荡。图3-5比例系数Kp对系统的影响比例调节器的微分方程为:y=式(3-1)式中y表示控制器的输出量;Kp是比例系数;e(t)以本设计中的直流调速系统为例,当电机开始旋转,单片机就会根据接收到的测速模块所发出的脉冲信号,每隔一段时间根据所采集的脉冲信号计算转速数据,将所有测得的转速数据记为y1,y2,...,yk−1E式(3-2)根据Ek的值有三种情况:当Ek>0时,表示当前时刻的转速还未达到稳态值;当Ek=0时,表示当前时刻的转速已经达到稳态值;当Ek<0时,表示当前时刻的转速已经超过稳态值。这说明PID控制器中的比例控制环节是通过Ek的大小作为控制依据来控制输出量的;为了达到更好的控制效果,通常将当前误差P式(3-3)根据表达式我们不难得出,比例控制环节的正常运行必须是在系统存在误差的前提下才能实现的,而当误差值Ek=0时,则必须通过加入常数I所表示的是积分控制环节,积分控制器的输出信号与输入到控制器偏差信号的积分量成正比关系。对闭环系统而言,如果存在稳态误差,则称这个闭环控制系统是有差系统。入上文所述,虽然纯比例控制的有差系统响应时间很快,但是其精确度和稳定性不佳,在调速系统中显然不能满足要求。所以,要想能够消除稳态误差,就必须在加入积分控制环节。积分项是误差对应时间的积分函数,随着时间的增加,积分项会不断累积。这样,即使在输入积分控制器的偏差数值非常小的情况下,由于积分的影响,该偏差的积分项会随着时间的增长而逐渐累积,从而进一步降低了控制器的稳态误差,直至稳定误差为0为止。积分控制器的积分调节器的积分方程为:y=式(3-4)式中Ti是积分时间常数,积分的速度随着Ti的值不断减小而减小。在PID控制器中,积分环节的积分速度越快,积分的作用也就会越明显。由于积分控制器的系数Ki与积分时间常数Ti图3-6积分系数Ki对系统的影响同样,若应用到本系统的设计中,即为将所有通过单片机和测速模块测得的转速数据记为y1,y2,...,S式(3-5)类比上文中所介绍的Ek,Sk也会存在三种情况:当Sk>0时,说明到当前时刻为止,大于零的误差值之和要大于小于零的误差值之和,根据式(3-2)可知在当前时刻为止,控制量的输出在总体上偏低;当Sk=0时,表示当前时刻所有误差值中大于零部分的代数和等于小于零部分的代数和,即此时控制量恰好达标;而当Sk<0时,表示到当前时刻为止,大于零的误差值之和要小于小于零的误差值之和,此时控制量的输出在总体上偏低。根据这些情况对积分控制器的控制方式作如下调整,当Sk>0即在过去一段时间总体上控制信号未达标时,通过将SkI式(3-6)积分控制环节具有滞后控制的特点,这是因为积分控制是对当前所有的误差值的总和进行响应。D代表的是微分控制环节,其作用是改善系统的动态特性。微分控制器改善系统动态特性的原理是预测偏差信号来发出超前系统变化的控制信号来进行控制。微分控制器的微分时间常数Tdy=式(3-7)微分控制器是根据到当前时刻为止所有的误差值E1D式(3-8)Dk指的是误差值变化的速率,于上文中的Ek和Sk一样存在三种情况,即Dk>0,Dk<0及DD式(3-9)需要注意的是,由于微分环节所响应的不是偏差值信号,而是偏差值的变化率,故在控制系统中不可独立地发挥作用。根据上述对比例、积分、微分环节的单独分析,可以得到PID调节器的方程,如下式所示:y(t)=式(3-10)其中r(t)为目标输入,y(t)为系统输出,输入值与系统输出的偏差e式(3-11)经过离散化处理后,可得典型的数字式PID控制器的表达式如下:PIDout=Pout式(3-12)接着对式(3-12)中的变量做进一步解释说明:对于积分项SkS式(3-13)其中T为单片机的计算周期,Ti为积分时间常数,它是控制积分环节和比例环节作用的时间常数;T对于微分项DkD式(3-14)Td为微分时间常数,即控制微分环节和比例环节对系统作用的时间,T总结上述分析可以得出应用于单片机上的位置式PID控制器表达式如下:PID式(3-15)但位置式PID的积分环节会累积大量历史数据,对于本设计所选用的AT89C52单片机而言会占用大量片内资源,所以本设计将选择增量式PID控制算法,其具体表达式如下:△式(3-15)其中PID式(3-16)故△PIDout式(3-17)其中Ek、Ek−1、Ek−2分别为第k、k-11.4.2PID控制的程序部分电机转速PID调节器的工作原理为:当转速发生变化或转速与给定转速有偏差时,转速反馈电路将通过P1.2口即INT0外部中断口将检测的脉冲信号输入单片机,由T0定时器和循环程序共同作用对脉冲个数进行计数,并存放于预先设定好的一个变量(Inpluse)中,然后根据采样周期计算出实际转速存入另一个设定好的变量(num)中,再将这个转速值与给定值(SpeedSet)进行比较,根据PID调节器的算法,得到调节好的值;同时,为了防止再电机转速突然改变时PID调节器的输出过大,因此必须设置控制量的上下限,以保证系统正常工作。结合上述数字式PID控制器的原理可知其流程如图3-7所示图3-7PID控制器子程序流程图 PID控制器子程序如下: voidPIDControl()//pid计算{ e=SpeedSet-num;//计算偏差值 duk=(Kp*(e-e1)+K1*(Ki*e+Kd*(e-2*e1+e2)))/K2; //增量式PID计算 uk=uk1+duk; out=(int)uk; if(out>100)//判断输出是否超过上限 { out=100; } elseif(out<0)//判断输出是否低于下限 { out=0; } uk1=uk; e2=e1; e1=e;//将当前误差记为上一次误差值,为下一次计算做准备 PWMTime=out;}1.5定时器中断子程序 在本设计中定时器T0扮演了十分重要的角色,它既控制着PWM输出的最小单元时间,也决定着PID计算的周期,同时也决定着数码管显示的刷新频率。这样设计的好处是将多个功能集中于一个定时器下可以大大节省对单片机内部资源的利用,方便后续系统的再升级。 首先在初始化程序中设定T0的工作模式,使其工作在方式1下。该模式下当计数溢出时将进入中断执行程序,由于AT89C52单片机所外接的晶振频率为11.0592MHz,故机器周期约为1μs,所以每过1μs,计数器计数加一,由于方式1为16位计数模式,则当计数器计满65535时定时器计数溢出,进入定时器中断子程序。方式1下定时器最大计时时间约为65.5ms,于是可以通过改变每次装填的初值来该模计时时间。本设计中设计装填初值为65035,即0.5ms的计时周期。 在进入中断后需要执行重装初值、数码管显示刷新、脉冲计数和进入PID控制器等操作,大致流程如图3-8所示图3-8定时器中断子程序流程图1.6系统软件稳定性设计软件的可靠性和稳定性是系统安全稳定运行的关键。必须使软件及时响应系统所受的干扰和变化,使系统尽可能快速地恢复到稳定运行状态。与此同时,还应保证当系统不受外界干扰时,系统能够正确的运行。因此,在软件的设计中应当进行模块化的设计软件应用,当需要时直接从主程序调用,这样只需将主程序设计成循环调用子程序即可实现功能。在编写程序时必须使用简洁的语言并且加上详细的注释,这样才能降低系统的错误率。最后,因为程序开始调试后就要不断地进行反复的试验,所以为了能够便于修改调试和改进程序,就需要在设计软件时提前考虑,设计出良好的程序结构。1.7Protues中的程序调试完成程序设计后首先在Protues中进行程序可行性的仿真和调试。图3-9Protues中对电机的设置如图3-9所示,设置电机模型的参数,将电机模型的空载转速设置为800rpm,电机每圈发出的脉冲个数为96,由此确定了程序中的设定转速SpeedSet为500rpm,转速公式num=Inpulse×2.5式(3-18) 然后为了方便调试,还需给单片机加上串口输出程序,并在计算机上设置虚拟串口,借助虚拟串口和串口调试软件可以获得不同一系列的电机转速数据,最后将数据导入Matlab进行处理就可以直接分析系统的动态稳定性和稳态特性。1.7.1串口通信程序在本系统中设计串口通信程序主要是为了利用单片机的串口功能发送电机的转速数据至上位机,更方便后续对系统的调试、PID调节器参数的整定以及分析系统的稳定性。首先,由于Protues仿真直接与计算机之间进行数据传输,因此需要设置虚拟串口;然后计算机要进行数据的接收、显示和记录,因此需要使用串口调试软件接收和显示数据;最后设计单片机内的串口通信程序,让单片机每间隔相同的时间向计算机发送当前的转速数据。设置串行口寄存器SCON=0x50,此时串行口工作在方式1即串行口为10位通用异步接口。设置功率控制寄存器PCON=0x00即设置波特率不加倍;设置工作方式寄存器TMOD=0x21即设置波特率发生器为8位自动重装定时器,该模式下设置波特率位9600,并根据此得到定时器T1的初始值;完成串口设计后开始设计串口传输程序。需要注意的是,在串口调试程序中输出的是ASCⅡ码或是16进制数,均不方便直接使用,所以串口输出数据需要分为不同的数位输出,具体程序如下所示: voiduart_data(){ SBUF=num/1000+'0';%传输转速的千位数据 while(TI==0); TI=0; SBUF=num%1000/100+'0';%传输转速的百位数据 while(TI==0); TI=0; SBUF=num%100/10+'0';%传输转速的十位数据 while(TI==0); TI=0; SBUF=num%10+'0';%传输转速的个位数据 while(TI==0); TI=0; SBUF=',';%传输分割数据符号 while(TI==0); TI=0; data_num++;}串口波特率为9600,而转速是每0.25s计算一次,所以在每轮传输过程中转速数据不会改变,可以保证数据的准确性。1.7.2PID控制器的参数整定与调试在设计完串口程序后,就可以开始通过传输的转速数据在Matlab中绘制响应曲线,并以此为根据对PID控制器的参数进行确定和验证。本设计的PID参数整定采用等幅振荡法。采用等幅振荡法的步骤为:首先切除PID控制器中的积分环节与微分环节的作用,同时选取比例增益Kp为较小值,并将系统投入到闭环运行中;通过不断调整上述控制器的比例增益Kp不断增大,在不断增大Kp的过程中会得到某一确定的Kp的值,此时系统响应为小范围的等幅振荡;通过观察图像得出在系统等幅振荡时的振荡周期Tcr和控制器增益Kpr,再通过查询表3-1中不同控制器类型得到PID参数。最后再根据实际系统的响应曲线对上述得到的PID参数进行微调。参数类型控制器类型KpTiTdP0.5KprPI0.45Kpr0.83TcrPID0.6Kpr0.5Tcr0.12Tcr表3-1等幅振荡法PID参数整定表根据上述方法和式(3-17)进行调试,经过多次试验得到比较理想的PID控制器参数(具体调试过程中的响应曲线见附录2),得到取Kp=5,Ki=1.2,Kd=1.5时电机的调速性能和稳定性有较大提升。该参数下对应的系统的时间-转速曲线如图3-10所示。图3-10Kp=5,Ki=1.2,Kd=1.5时的响应曲线图像纵轴表示转速,单位为转每分钟(rpm);横轴表示时间,单位为秒(s)。通过分析图像可知,系统在点(8,582)处达到峰值ntp=582rpm,即峰值;尽管系统有小的振荡,但是可以判断:当时间足够大时系统稳态值等于给定输入值即500rpm,所以系统的终值nσ%=式(3-18)可以计算得到超调量σ%=16.4%。 图中的红色虚线分别表示终值±2%的值所对应的转速,由此不难看出系统的调节时间约为15s。 图3-11为PID控制下的闭环调速系统和纯比例控制下的闭环调速系统的对比图,其中蓝色曲线为比例控制闭环调速系统的响应曲线,红色曲线为PID控制的闭环调速系统的响应曲线。可以看出,比例控制的闭环系统的上升时间很快并且超调量很小,但是稳态值不等于输入值,属于有静差的系统,控制精度和抗扰动性能都较差,可以应用在需要系统快速启动且对系统控制精度要求不高的场合;而虽然PID控制的闭环系统的上升时间较长且超调量较大,但是该系统是无静差系统,并且一定限度内的超调量,对于工程应用系统而言是可以允许存在的。综上而言,本调速系统具有优秀的抗扰动性能、很高的控制精度和较好的动态性能。 图3-12所示为在PID控制下的闭环系统进入稳态运行后(500rpm)在箭头所指处改变转速时(800rpm)的响应

温馨提示

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

最新文档

评论

0/150

提交评论