第四章 软件设计
本次设计的软件部分包括主程序、参数设定、PWM程序、PID调速程序、中断处理程序和上位机VB显示程序。
STC52单片机的内部资源分配为:定时器T0工作于方式1,用于在P1^6和P1^7引脚输出PWM波;若设定定时器工作于方式2,当定时器溢出时,定时器能够自动重装初值,从而减少计时误差,可以采用定时器T1工作于方式2,进行串口通信;定时器T2工作于计数方式,可用于测定电机转速;利用P0口向LCD1602写入显示内容,P3^6和P3^7用于LCD1602的控制;利用P2口进行键盘扫描并利用外部中断1进行参数的重新设定。
4.1 系统主程序设计
主程序主要包括系统初始化、参数设定、开外部中断1和PID调速程序。在系统初始化程序中,主要进行LCD1602初始化串口工作方式、定时器工作方式和中断触发方式设置,并进行中断优先级设置,由于系统需要在不停车的情况下重新设定转速,因此应当将外部中断1设置为低优先级。其中在电机运行之前通过键盘设定参数时,并未开外部中断1,采用扫描方式处理按键。系统主程序流程图如图4.1
开始初始化PID调节参数设定转速显示开外部中断1向上位机发送转速值
图4.1主程序流程图
4.2 数字PID控制算法
在模拟控制系统中,PID控制器的控制规律为:
?1tde?t????u?t??KP*?e?t??etdt?TD??u0 ?0TIdt??式中 Kp—比例系数;Ti—积分常数;TD—微分常数u0—系统初值;ut—系统输出。
将模拟控制器进行离散化即可得到数字控制器,离散化处理的方法为:以T为
PID
控制器表达式为:
采样周期,k为采样序号,则离散采样时间对应连续时间t,用求和的形式代替积分,用增量的形式代替微分,则数字
kuk?KP*ek?Ki*?ej?Kd?ek?ek?1??u0 式中 Ki—积分系数;Kd—微分系数;ek—
第k次采样时刻偏差值。
此表达式给出了全部控制量的大小,被称为位置式PID控制算法,但是这种算法的工作量很大,在实际控制中多采用增量式算法,增量式PID表达式可由位置式算法推导得到即:?uk?uk?uk?1=KP*(ek?ek?1)?Ki*ek?Kd(ek?2*ek?1)?ek?2
目前应用最广泛的位置式与增量式的结合形成的数字递推PID控制算法即
uk?uk?1??uk。本次设计采用递推式控制算法,PID程序流程图如图4.2所示:
j?0本次设计中控制器输出限幅值为min=50,max=450。
PID调节程序如下: e1=key_speed-speed;
duk=Kp*(e1-e2)+Ki*e1+Kd*(e1-2*e2+e3); uk=uk+duk;
if(uk>=450) uk=450; if(uk<=50) uk=50; e3=e2; e2=e1;
Y开始计算当前误差e1计算UkYUk≧最大值?NUk≦最小值?NUk=最大值Uk=最小值更新e2、e3返回图4.2 PID程序流程图
4.3 矩阵键盘设计
矩阵键盘原理图如图3.5所示,按键设置在行、列线的交点上,行线通过上拉电阻接+5V电压,当按键未按下时,行线呈现高电平。当某键按下后,该行线的电平由被短接的列线电平决定。判断键盘有无按键按下以及按下的是哪一个键的方法如下:
(1)判断有无按键按下
将所有列线置低电平,然后读取行线状态,若行线均为高电平,则没有按键按下;
若行线状态不全为高电平,则有按键按下。
(2)判断哪个键按下
若有键按下,则列线依次置低,然后读取行线状态,如果全为高电平,则按下的键不在此列;如果不全为高电平,则按键一定在此列,而且是在与低电平行线的交点上的那个键。
在给按键赋值的方法较多,本次设计中采用键值=所在列号*4+所在行号(行号、列号分别为0,1,2,3),另外为了消除按键误动作需要通过软件延时消除按键抖动。
本设计中参数设定步骤为:设置转速值,按下确定键后再设置转速方向,然后启动电机。参数设定流程图见4.3
开始正转键是否按下按键是否按下Y确认按键值转速值清零NNN反转键是否按下Y向上位机发送转向信息清除方向显示YY显示按键值删除键是否按下NN确认键是否按下YY删除键是否按下N启动键是否按下Y返回
图4.3参数设定流程图
4.4 中断处理程序
本系统软件中断部分由定时器T0中断和外部中断1组成,前者用于产生PWM波,后者则用于电机运行时重新设定参数。
4.4.1 PWM波生成程序
由于本系统需要控制电机的正转和反转,因此应该采用双极性PWM波驱动电机,利用单片机生成PWM波有两种方法。
(1)软件延时法:在软件中设计一个基准延时程序,并在延时程序中改变输出单片机端口输出电平,通过反复调用延时程序,从而得到不同占空比可调的PWM波,但是在
本系统中单片机要执行不同的功能程序,若采用软件延时法,则误差较大。
(2)定时器法:利用定时器初值设定PWM波频率,,在中断处理程序中确定高低电平的持续时间,此方法准确性较好。
本设计采用定时器法生成PWM波,PWM波周期为1ms,P1口的第6、7引脚输出PWM波,T0L和T0H分别为低、高电平持续时间。 PWM波生成程序如下:
void T0_timer() interrupt 1 {if(P1_6==1)
{TL0=T0L_L; TH0=T0L_H; P1_6=0; P1_7=1; }
} else
{TL0=T0H_L; TH0=T0H_H; P1_6=1; P1_7=0; }
由于本次设计中PID调节器的输出只能确定电机正转时的PWM占空比,为实现电机反转必须对调节器输出进行处理 D=500+uk;
if(flag1==1) {D=1000-D;} 其中flag1为反转标志位 因此对PWM波生成程序中的变量进行如下操作: T0L_L=(64536+D)%6; T0L_H=(64536+D)/256; T0H_L=(65536-D)%6; T0H_H=(65536-D)/256; 4.4.2 重设参数程序
在本次设计中当电机运行时可以通过键盘重新设定运行参数,包括在维持电机转速
基本不变的情况下改变电机转向,控制电机启停以及重新设定转速。利用外部中断1进行重设参数。 外部中断1的处理程序流程如图4.4所示:
开始关外部中断1保存高低电平持续时间正转键是否按下N反转键是否按下NYY显示并发送转向信息Y关定时器0停车键是否按下N启动键是否按下NN是否重设转速Y参数设定Y开定时器0开外部中断1返回 图4.4 外部中断1处理程序流程图
4.5 转速测量及数字滤波
4.5.1 转速测量
直流电机转速的测量主要有两种方法:定时法(M法)和间隔法(T法)。定时法是在一定的时间内检测光电码盘输出的脉冲个数,再通过计算得出电机的转速;间隔法是检测光电码盘输出的前后两个上升沿(或下降沿)的间隔即脉冲宽度,通过这个时间得到电机转速。本系统中电机转速在1000rpm~3000rpm,转速相对较高,因此采用定时法测速误差较小。
采用定时法进行程序设计时需要考虑采样时间间隔,这可以根据采样定理选择,但也应该考虑控制量的时间间隔,从单片机本身的精度和一个采样周期内要完成的工作量来考虑,过短的采样周期是不实际的;如果间隔时间过长,会造成电机无法正常运行。
本系统中光电码盘每圈输出334个脉冲,经过计算当采用170ms作为时间间隔时,定时器T2所累计的脉冲数即为电机转速,又因为单片机执行程序造成延迟,因此选择160ms作为采样间隔。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于单片机的运动控制系统(5)在线全文阅读。
相关推荐: