乐万德,任静,张琛玥,易朝韩,王旭升,闫润龙,党帅
(西安航空学院 计算机学院,陕西西安,710077)
Arduino是高校在创新创业过程中广泛使用的开发平台,在实际使用中能激发学生浓厚的探索兴趣,深受大学生的欢迎。直流电机作为广泛使用的智能产品核心部件,其PID(Proportional Integral Derivative)控制算法对学生有强烈的吸引力。PID广泛应用于控制领域。调速系统要求以动态稳定和稳态精度为主,而微分D部分容易对系统造成扰动,所以传统速度控制常用PI调节器。PID算法本身并不复杂,但对于PID参数整定,尽管有不少参数整定的方法和口诀,但在实际应用中不尽人意。在参数整定过程中往往显得盲目,甚至因为调参过程中参数选择不合适,导致电机强烈振动等,具有一定的安全隐患。
Arduino仿真实验[1]及仿真平台[2]是解决上述问题的有效方案。本文基于Proteus构建Arduino控制电机的参数整定仿真平台,通过串口仿真将PID控制数据传到Arduino串口监视器进行可视化显示[3],帮助初学者及大学生创客实现PI调节器的可视化调参,形象直观,并且排除了不合适参数可能引起的安全隐患。
Proteus是世界上著名的EDA仿真软件,融合了电路仿真、PCB设计和虚拟模型仿真等功能,使用异常方便。Proteus支持大多数单片机仿真,也支持Arduino[4]。
实验硬件参考设计如图1所示,包括:主控板Arduino Mega2560、电机驱动板L298、编码电机moterencoder、串口物理端口模型COMPIM。示波器可选。
图1 仿真硬件平台
Arduino硬件开发板是一个单片机集成电路,它的核心是一个单片机,开发板上的其他电路用来供电和转换信号。官方Arduino使用的是megaAVR系列的芯片,主要是ATmega8、ATmega168、ATmega328、ATmega1280以及ATmega2560,可根据项目需求进行选用。
Arduino Mega2560在Arduino系列开发板中具有较强的性能及丰富的接口,具有广泛的适应性,因而作为本实验平台选定的开发板。Arduino Mega2560处理器核心是ATmega2560, 同时具有54路数字输入/输出口,其中15路可作为PWM输出,15路模拟输入,4路UART接口,一个16MHz晶体振荡器,一个USB口,一个电源 插座,一个ICSP header和一个复位按钮。Arduino Mega2560也能兼容为Arduino UNO设计的扩展板。
电机驱动板L298是一款常用的双路全桥式电机驱动芯片,工作电压可达46V,输出电流可达4A。L298通过控制主控芯片上的I/O输入端,调节输出电压,实现电机的正转、反转、停止。通常情况下L298可直接驱动继电器、直流电机以及步进电机。
L298的四个输出引脚OUT1、OUT2和OUT3、OUT4分别接两个直流电机Motor1、Motor2。四个输入引脚IN1、IN2、IN3、IN4从单片机接入控制电平,控制电机的正反转。另外两个引脚ENA、ENB控制电机调速。
PI控制器根据电机反馈的速度进行控制,因而需要测得电机的实时转速,转速单位是rpm(转每分)。本实验平台选用编码电机MOTOR-ENCODER。该电机有五根线,左右两侧两根线接电源。上面有三根线,左右两侧两根线输出相位差90度的脉冲,据此可以测得电机旋转方向;每旋转一圈输出多少个脉冲可以在设置对话框中设置,中间那根线,每圈输出一个脉冲;利用其中任何一个可以测出转速[5]。示波器可以显示对应波形及相位关系。
为了可视化观察PI控制过程中的现象和参数,实验平台通过串口物理端口模型COMPIM(COM Port Physical Interface model)将需要显示的数据传递到串口监视器。Proteus中的COMPIM是标准的RS232端口,可设置占用计算机上哪一个串口,可以是“实际串口”,也可以是“虚拟串口”,可以实现虚拟仿真电路与外部实际电路的双向串行通信。
本实验中电脑通过虚拟串口接收COMPIM的数据,并通过Arduino IDE中串口监视器将数据以文本或图像方式显示出来,据此调整PI参数。
系统软件设计如图2所示。在Arduino框架函数setup()中设置初始目标转速Target,绑定编码器脉冲中断,并设置定时中断。脉冲中断触发时调用中断函数Code(),该函数在编码电机旋转过程中对脉冲计数,为计算转速做准备。定时中断触发时调用中断处理函数revolution_measure(),该函数根据脉冲数计算转速,并将脉冲数清零,为下次计算转速做准备。
图2 系统软件设计
在loop()函数里,每隔时间tSample,根据当前速度与目标速度采用PI速度控制器,计算PI调节器的输出Output并作为电动机驱动PWM值并更新。
在新的PWM驱动下,电机转速发生变化,此时将需要观察的数据通过串口进行输出,特别是实际转速与目标转速的对比情况。结合实际转速达到目标转速的快慢、是否有超调等情况,进一步调整PI参数。
编码器测速是分析超调的基础。旋转设备测量转速,一般采用和速度成正比的脉冲信号进行测量。通过测量脉冲信号的频率,进而计算实际转速。本文研究的PI调速主要以较高转速为研究对象,采用M法测速,即通过单位时间内脉冲的个数推算转速。这种测量方法转速越高精度越高。两次采样计时中断间采样的脉冲数计算公式为:
式中cs为采样数,revolution为转速,单位为rpm。pulse为编码器脉冲数。tSample为采样时间,单位为ms。采样时长及编码器频数都对测速精度有影响:较长的采样时长和较高的编码器频数有利于提高转速的测量精度。电机调速PWM的调节与采样同频,因此采样时长过长,对PWM的平滑性有影响。本文中取采样时间tSample为150ms,编码器脉冲数为360。以每分钟100转的转速为例,根据公式1,150ms采样数为90。按每次采样最大有两个脉冲测量误差计,测速误差为2%左右,满足实验要求。
PWM(Pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM调速就是在一定的频率下,通过控制一周期内的开通与关断时间,即调节占空比来调整直流电机两端的电压大小,从而调节电机转速。因其相比于直接调整电压,显得方便快捷,广泛应用于通信、工控等方面。
PWM本质上是一种方波,并不是连续的模拟信号。开关的通断频率不仅直接决定了等效电压的高低和电机的转速,还影响到电机的转矩特性、机械特性及效率特性等。一般来说,PWM的频率越高,直流电机转动越流畅;PWM的频率越低,直流电机转动越卡顿。但是频率越高则需要的启动占空比越高,使调节范围变窄。因此,使用PWM控制电机时,应综合硬件设计选取合适的频率。一般PWM频率需大于1kHz,才能稳定地控制电机。但Arduino控制板很多引脚输出的默认PWM频率是480Hz。这就意味着需要根据电机的实际要求对PWM频率进行调节。
有多种方式可以让Arduino引脚输出不同频率,本文使用Arduino PWM频率库。这种方法避免了直接对芯片寄存器逐位操作的繁琐和易错。
Arduino PWM频率库有五个全局函数,分别是InitTimers() ,InitTimersSafe(),pwmWrite(),SetPinFrequency() ,SetPinFrequencySafe()。此外还有针对各个timer的函数。
值得注意的是Arduino的开发系统中,millis()和delay()等计时相关函数基于Timer 0时钟。所以如果修改了Timer 0的时钟周期,这两个计时函数也会受到影响。因此本文系统中用Arduino Mega 2560 引脚12进行PWM输出。12号引脚受Timer 1控制,改变12号引脚的频率不会影响millis()和delay()等函数。另外,本文编码器函数使用Timer 2时钟。因此,本系统中各个时钟互不影响。
PWM频率调节见图3。首先导入PWM库,然后用InitTimersSafe()函数对系统时钟进行初始化。为了不影响delay()和millis()函数,这个函数不初始化timer0。调用SetPinFrequency()函数对受Timer1控制的12号引脚进行频率设置。如果成功,返回值success为真,则通过12号引脚输出频率调整后的PWM信号对电机进行调速;如果不成功,则提示用户频率调节不成功,是否用原频率调速。
图3 PWM频率调节
PI调节器基于PID。PID广泛应用于控制领域,对一个控制系统的性能一般用稳、准、快来衡量,即稳定性、快速性、准确性。具体的评估指标有最大超调量、上升时间、静差等。在实践生产工程中,不同的控制系统对控制器效果的要求不一样。P值影响系统的快速性,I值影响系统的静差及准确性,D值虽然影响稳定性,但也会放大噪声误差。调速系统要求以动态稳定和稳态精度为主,传统速度控制常用PI调节器。
PI调节器如图4所示, PI调节器的基本原理是在对比目标转速与实际转速的差值的基础上,通过算法动态产生调节量PWM驱动直流电机。直流电机的目标转速在设置界面设定,实际转速通过前述编码测速获得。
图4 PI调速器
设t时刻目标转速为target(t),实际转速为real(t),转速误差为e(t)=target(t)-real(t),则连续PI调节器公式可表示为:
其中Kp为比例常数,Ti为积分常数。
为方便程序实现,PI调节器写成离散形式:
其中kp为比例常数,ki为积分常数。
公式(2),(3)被称为位置式PI调节器,在程序实现中也常常采用成增量形式:
位置式PI调节器与增量式PI调节器的本质是一样的,位置式PI调节器需要对误差进行累加,增量式PI调节器需要对调节量进行累加,为了减小计算量,可将这两个累加量在程序中设置为静态变量。
电机PI参数整定过程中可遵循一些经验总结,一般先调节比例系数kp,再调节积分系数ki,各个参数采用由小到大进行尝试。对于虚拟实验平台,初学者调参过程中可以做更加大胆地试调,以便加深各个系数对系统贡献的理解。
系统基本参数采样时间间隔与PWM重新计算间隔均为tSample=150 ms,目标调节速度为Target=200 rpm。
图5各子图中水平线为目标转速200 rpm,曲线为PI控制的实际转速。图5(a)中,kp等于2时,响应速度较慢,且无法达到目标转速,需增大比例系数kp。图5(b)中,kp等于12,响应速度很快,但最终转速与目标转速间仍有静差,需引入积分环节。图5(c)中,kp等于12,ki等于0.1,响应速度较快,且最终速度没有静差,但过程中有超调,需降低积分参数。图5(d)中,kp=12,ki=0.075,响应速度快,最终速度没有静差,也没有超调,调参结果比较满意。
图5 PI控制器参数整定
直流电机PI参数调节是PI调节器落地应用的一个重点,对初学者又是一个难点。文中仿真实验平台有效地解决了这一难点,让学生及初学者可视化地体会到运用Arduino控制板调节电机转速时PI参数调节的效果,并减少实际调节中因参数不合适可能导致的安全隐患。