APP下载

单片机PID电机转速与位置控制系统设计

2022-08-12李帅波

工业仪表与自动化装置 2022年4期
关键词:编码器增量偏差

赵 鹏,钱 美,李帅波

(新疆理工学院 机电工程学院,新疆 阿克苏 843000)

0 引言

在运动控制系统中,如智能车由于受到载重、地面摩擦力、坡度等的影响,如果按照传统的PWM开环调速其速度非常不稳定,甚至会导致电机堵转的情况;在温度控制系统中,要使温度恒定通过加热或制冷来实现,但由于惯性的影响,控制温度只能在某一个范围内波动,无法达到相对精确的控制[1]。PID控制是根据设定值与被测值的偏差,通过比例、积分、微分环节实现精确的控制,是一个二阶线性控制器,适用于对被控对象模型了解不清楚的场合,其实质是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出。鉴于此,本设计提出以单片机为控制器,以直流电机为被控对象,设计了利用上位机监控的直流电机转速与位置的控制系统,结合PID控制算法,实现对电机的转速和位置的精确控制。

1 系统结构与原理分析

1.1 系统结构分析

该设计中使用的单片机STC8A8K64S4A12为国产增强型1T系列,其一个时钟周期为一个单指令周期,是传统51单片机的12倍,内含24 MHz高精度IRC,ISP编程时可上下调整。其内部存储空间也较为充裕,数据存储器和程序存储器分别为8 KB和64 KB。包含4路输入捕获输出比较单元,可实现对电机编码器数据的获取。驱动电路采用L298N模块,电机选择370减速电机,减速比为1:30。采用330线的光电编码器[2],即电机转一圈可产生330×30=9900个脉冲,以串口的形式通过上位机虚拟示波器实时显示PWM输出信号、电机测量转速、设定速度等信息,以便直观的对比控制效果达到最佳控制。L298模块内部含有+5 V低压差线性直流稳压器,其输出电压可供编码器正常工作。具体系统结构图如图1所示。

图1 系统结构图

1.2 位置式PID原理分析

PID控制规律数学表达式为:

(1)

经离散化后得到PID控制表达式为:

(2)

上式子称为全量式或位置式PID。如果为运动控制,利用PWM调节电机转速,其位置式PID算法公式也可表示为:

Pwm=Kp×e(k)+Ki×e(k)+Kd×[e(k)-e(k-1)]

(3)

1.3 增量式PID原理分析

增量式PID控制算法是指其输出只是被控制量的增量ΔU(k),只使用前后三次测量的偏差值,就可以求出控制的增量,其增量式PID控制算法公式为:

ΔU(k)=Kp[e(k)-e(k-1)]+Kie(k)+Kd[e(k)-2e(k-1)+e(k-2)]

它表示在两次采样时间间隔内执行器的位置变化量。与位置式相比,增量式计算量小得多。位置式与增量式关系如下:

(4)

后续的直流电机的速度与位置控制也是按上式进行算法实现的[3-4]。

1.4 编码器原理分析

光电编码器是利用光栅衍射原理实现位移-数字变换,通过光电转换,将输出轴上的机械几何位移量转换成脉冲数字量的传感器。编码器A、B两相输出为相位相差90度的正交编码信号,其中输出脉冲如下图所示。

图2 电机顺时针运行编码器输出波形图

图3 电机逆时针运行编码器输出波形图

电机转向与A、B相相位关系如表1所示。

表1 电机转向与编码器输出关系表

由以上分析可知,求出编码器输出的A或B相中的一相单位时间内的脉冲数即可求取电机的转速;根据编码器A、B相的相位差,可判断出电机的转向,当A相相位超前B相相位90°时,电机顺时针运动,当A相相位滞后B相相位90°时,电机逆时针运动[5]。

2 软硬件设计

2.1 硬件设计

设计中所选择的STC8A系列单片机有四通道可编程计数器阵列PCA模块,可用于脉宽测量、脉冲捕获计数、高速脉冲输出及PWM输出四项功能。对于编码器的输出采用脉冲捕获计数模式,电机选择带编码器输出的370直流电机,编码器A、B相的输出分别接单片机P17、P16引脚;单片机将PWM输出数据、电机测量转速或位置、设定转速或位置通过单片机串口1传输至上位机虚拟示波器实时显示;电机的驱动、PWM转速控制及转向控制通过H桥驱动模块L298N实现,具体驱动电路与单片机接口连接如图4所示。

图4 电机驱动电路图

2.2 软件设计

单片机晶振设置为24 MHz,与上位机通信的波特率为115 200,单片机每隔20 ms获取脉冲数量并判断转向,单位时间内脉冲数量即为转速或速度的累加即为位置,调用位置式或增量式PID函数实现速度或位置的控制,通过修改PID参数加载至PWM输出函数中调节电机转速或位置[6]。PWM输出频率设置为10 kHz,具体主程序流程图如图5所示。

图5 软件流程图

2.3 位置式PID的C语言模块化程序

采用模块化程序编写,无需将PID参数独立在函数之外定义,方便程序的移植。函数返回值为有符号整型,其正负为电机转向,大小为具体PWM输出值,实现对转速的调节。其模块化接口函数的设计是对式(3)的C语言实现,具体程序如下:

int Position_PID (int Target,int Encoder)

{

float Position_KP=15.0,Position_KI=13.0;

float Position_KD=12.0;

static float Bias=0,Integral_Bias=0,Last_Bias=0;

int Pwm;

Bias=Target-Encoder;

Integral_Bias+=Bias;

Integral_Bias=Integral_Bias>1000?1000:(Integral_Bias<(-1000)?(-1000):Integral_Bias);

Pwm=Position_KP*Bias+Position_KI*Integral_Bias+Position_KD*(Bias-Last_Bias);

Pwm=Pwm>9800?9800:(Pwm<(-9800)?(-9800):Pwm);

Last_Bias=Bias;

return Pwm;

}

增量式PID是有偏差的累加和求取的,其公式如下所示,程序结构与位置式相似。

Pwm+=Kp[e(k)-e(k-1)]+Ki×e(k)+Kd[e(k)-2e(k-1)+e(k-2)]

(5)

2.4 电机位置的控制

PID位置控制的实质是对速度的积分,积分的实质为分割、求和、取极限,设计中每隔20 ms对速度累加一次,累加到一定值后停止,即位置已经确定。其调用的位置式PID函数和通过增量式改进的全量式PID函数完全相同,只是在主程序中要对采集的数据每隔20 ms累加一次,且PID函数的实参为设定的位置值和测量的具体的脉冲累加的位置值而非速度值[7]。

3 系统调试

3.1 电机转向的确定

硬件设计中L298N模块是随机接至直流电机的两个绕组上的,给电机通以不同极性的电源其输出方向就会变化,对于转速或位置的控制要求为负反馈,如设定速度和初始速度均为0即电机静止,PID控制实质是对偏差的控制,设置比例系数,如果为正反馈,用手扭动电机,单片机通过编码器检测到有偏差产生,会由初始的0转速加速到最大值,此时与设定的静止态刚好相反。可以通过硬件或软件方案解决,硬件方法为交换驱动模块接至电机绕组的相序;软件方法为在程序中根据PID函数返回的PWM值的正负修改转向控制。如果为负反馈,且设置了比例系数,当设定速度和初始速度均为0时,使用外力使其产生偏差时电机就有反作用力阻值偏差的产生,说明电机转向符合设置的负反馈的控制要求[8]。

3.2 位置式PID转速调节

通过调节位置式PID函数中的比例、积分、微分环节的参数,为了便于观察控制效果,设计中每隔2秒,使编码器连接的电机每20 ms测量的转速由500修改为-500。采用串口1将PID函数返回值、测量速度、设定速度上传至上位机虚拟示波器[9-11],其控制效果如图6所示。

图6 位置式PID转速调节效果图

3.3 位置式PID位置调节

由于电机转一圈会产生9900个脉冲,因此为了便于观察,设定位置每隔2秒,由9900修改为-9900,其控制效果为每隔2秒由正转切换至反转,其控制效果如图7所示。

图7 位置式PID位置控制效果图

从以上两图可以看出位置式PID能有效实现转速和位置的调节,且控制效果良好[12-13]。增量式PID与位置式相似,只不过其PID算法的实现是按增量Δu(i)的累加和求取的。

4 调试过程中问题分析

4.1 积分限幅与输出限幅

设计中电机空载时转速为333 r/min,减速比为1∶30,编码器为330线,主程序每隔20 ms读取一次编码器的值以确定电机转速和转向。则20 ms内读取的最大值为:(333÷60)×30×330×(20÷1000)≈1099,因此积分限幅值设置为±1000。

单片机程序设计中占空比为100%时的PWM的值为10 000,因此输出限幅绝对值略小于PWM的最大值,从而设置为±9800[14]。

4.2 程序移植时PID参数的兼容性

相同硬件条件下,相同程序其控制效果差异较大,导致要重新调节PID参数,其原因在于编译软件Keil目标设置不同,导致执行效率不同,设计中为使程序兼容,应将编译软件的配置保持一致。具体编译软件中Code Rom Size空间设置的含义如下[15-16]。

SMALL模式:只用低于2 KB的程序空间。

COMPACT模式:单个函数程序大小不超过2 KB,总程序不超过64 KB,效率比LARGE高。

LARGE模式:可用全部64 KB空间。

4.3 当PWM输出端口为P14时无PWM输出

STC8A8K64S4A12单片机的PCA与PWM模块部分端口是复用的,PCA的端口为高阻输入,而PWM为准双向I/O或强推挽输出,结果导致如果PCA端口都设置为高阻输入复用的PWM就无法输出。设计中采用非复用端口加以解决。

4.4 模块化程序设计中偏差值的保存

传统的非模块化程序设计,将偏差、偏差的积分和上次的偏差定义为全局变量,实现整个程序调用过程中的数据保持不丢失。此方案降低了程序的集成度,移植过程中还要考虑全局变量。本设计通过将以上变量定义为static类型,使三个变量在下一次调用时其值仍然保持。

5 结束语

传统电机由于制造误差,当同频率同占空比的信号加载到两个同一型号的电机时,电机转速可能有偏差。如果为小车,则可能出现该直行的时候逐渐偏离的情况,因此必须结合传感器一般为正交编码器与单片机结合控制算法使其根据偏差实时调节,达到运行稳定的效果。该文基于单片机设计了一款PID电机转速与位置控制系统,从系统结构和原理分析、软硬件设计、系统调试及存在问题分析方面层层深入,通过实践验证,该方案有效解决了传统直流电机转速和位置的精确控制的问题。

猜你喜欢

编码器增量偏差
融合CNN和Transformer编码器的变声语音鉴别与还原
导弹增量式自适应容错控制系统设计
提质和增量之间的“辩证”
50种认知性偏差
全现款操作,年增量1千万!这家GMP渔药厂为何这么牛?
转炉系统常用编码器选型及调试
如何走出文章立意偏差的误区
舞台机械技术与设备系列谈(二)
——编码器
“价增量减”型应用题点拨
真相