一种基于STM32的PID直流电机控制系统
编者按:本文是以PID(比例、积分、微分)算法为核心,基于STM32控制芯片的直流电机控制系统研究,硬件模块包括L298N电机驱动模块、编码器测速、PWM(脉冲宽度调制,Pulse Width Modulation)输出等,软件部分以Keil MDK(混合开发工具,Mix Development Kit)为开发环境,实现调速系统各子模块功能,并对结果进行分析。此次研究搭建的系统实现使直流电机的稳态误差始终保持在0.49%以下,直流电机速度精度控制在95%以上。在额定转速时,其稳态误差为0.25%。随着设定电机转速
摘 要:本文是以PID(比例、积分、微分)算法[2]为核心,基于STM32控制芯片的直流电机控制系统研究,硬件模块包括L298N电机驱动模块、编码器测速、PWM(脉冲宽度调制,Pulse Width Modulation)输出等,软件部分以Keil MDK(混合开发工具,Mix Development Kit)为开发环境,实现调速系统各子模块功能,并对结果进行分析。此次研究搭建的系统实现使直流电机的稳态误差始终保持在0.49%以下,直流电机速度精度控制在95%以上。在额定转速时,其稳态误差为0.25%。随着设定电机转速增大,稳态转速的误差率总体呈减小趋势,实物系统有较好的稳态性能和控制精度。
关键词:直流电机调速;PWM;PID;STM32
近年来,随着微机控制技术、电力电子技术等迅速发展,直流电机因为其调速性能好、起动性能好,被广泛应用在高精度、可调速的场合,如航天、工业自动化、数字化控制、工业机器人、医疗设备等。
1 增量式PID算法与位置式PID算法对比
PID 控制是指比例、积分、微分控制。将系统的输出经过比例、积分、微分三种运算后,叠加至输入中,达到控制调速目的。由于其原理简单、易于实现等优点,被应用于多种领域。
1.1 位置式PID算法
位置式PID 算法的表达式为
其中Kp 为比例放大系数,Ti 为积分时间常量,Td为微分时间常量。
位置式PID 算法是根据当前实际位置与要达到的预期位置的偏差,进行PID 控制。将每一次的误差进行累加作为积分,其运算量大,每次输出均与过去的状态相关,缺点是可能会引起大幅度超调。
1.2 增量式PID算法
增量式PID 算法的表达式为
增量式PID 算法的控制量是对应的最近3 次的位置误差的增量,只对当前误差积分,运算量较小,没有误差累加。所以增量式PID 容易通过加权处理获得比较好的控制效果,相较于位置式PID 算法,在程序实现时更简洁有效,运行时更加稳定,运算速度更快。
图1 PID控制系统图
2 硬件系统整体流程
此系统由单片机STM32F103 输出PWM 波[1],同时接收编码器计数,经处理达到控制调速目的,独立键盘进行速度的增减,LCD(液晶显示,liquid crystal display)模块进行设定值和实时速度的显示,选择L298N 模块作为直流电机驱动给电机供电。所有模块形成一个完整的速度闭环系统,能对直流电机快速精准调速。
图2 硬件系统整体流程图
2.1 电机驱动模块L298N
本文选用L298N 为驱动模块,其电路中包含有两个H 桥的高电压大电流双桥式驱动器。在使用中,STM32F103 配置的PWM 输出引脚直接给该模块提供变占空比的信号,方便控制。
其控制状态表见表1。L298N 电机驱动模块可以实现电机的调速与正反转,此次研究只使用其驱动一台二相直流电机构成闭环调速系统,根据表1 配置IN1(输入)与IN2,对使能端输出PWM 脉冲,即可实现变占空比调速。
表1 L298N驱动直流电机状态表
2.2 编码器测速模块
编码器为AB 相增量式霍尔编码器,输出标准的方波,STM32F103 自带的编码器模式可直接读取脉冲信号,AB 相编码器的A 相、B 相互相延迟四分之一周期输出脉冲。如图3 为编码器的输出波形,取A 相、B 相的上升沿和下降沿都作为脉冲,可以取得二倍频或四倍频。四倍频采样可提高系统运算时的精确性。通过每10 ms 读取处理一次编码器脉冲,可以测得电机速度和处理控制,此次使用四倍频采样,有提高系统运算精确性的优势。
图3 编码器输出脉冲波形
2.3 PWM
配置脉冲计数器TIMx_CNT 为向上计数模式,而重载寄存器TIMx_ARR 被配置为ARR(自动重装载寄存器),比较值为CCRx,在t 时刻对计数器值与比较值进行比较。如果此时计数器值小于CCRx 值,输出低电平;如果此时计数器值大于CCRx 值,输出高电平,从而调节占空比。
3 软件整体流程
此次研究以Keil MDK 作为编译开发环境,软件部分的重点是PID 控制的处理。流程图如图4,主要包括主程序、PID 处理、外部中断、定时中断、PWM 的输出和编码器的脉冲计数。
图4 调速系统软件流程图
3.1 调速系统主程序[3]
主程序包括对各模块初始化和各常量、变量的声明。包括中断外部函数的初始化、定时中断循环的初始化、独立按键配置、编码器配置初始化、显示模块初始化、PWM 配置初始化。初始化后触发由定时器6 的定时中断的循环,每隔10 ms 对系统进行一次编码器测速与PID 运算和PWM 的控制输出。期间独立按键可以触发外部中断对调速系统的设定速度值进行增加与减少。
定时中断循环实现功能包括:编码器脉冲读取,脉冲数量转化为速度显示在LCD 屏幕,进行PID 运算,更新PWM 占空比。
3.2 PID算法处理与PWM输出
PID 控制在系统中采用增量式PID 算法,经调试其比例常数为0.5、积分常数为0.0025、微分常数为0。PID 模块根据设定值与得到的编码器脉冲值经公式运算后返回增量值。PWM 的输出由定时器1 实现,指定PA8 作为PWM 输出端子。在连接硬件时,需要连接两个端子才能实现驱动,另一个端子起参考电位的作用。PWM 模块根据得到的增量值更新PWM 占空比,从而实现实时、稳定、精确地控制调速系统。
4 实验数据及分析
实物系统主要包括STM32F103 开发板[7]、带AB相霍尔式编码器的直流电机、L298N 驱动模块、STLINK、7.2 V 电源等。其中系统实物搭建图如图5。
图5 系统硬件搭建图
经过调试,在代码调试中,按照先整定Kp 再整定Ti 的顺序进行调整,最终得出在Kp = 0.5 和Ti = 200 时,系统的调速响应快,调速的范围可达170 rpm~440 rpm(圈每分钟)。通过基于STM32 的PID 直流电机控制系统对电机的输出轴分别进行转速设定[13],分别设定了190 rpm、220 rpm、250 rpm、280 rpm、310 rpm、340 rpm、370 rpm、400 rpm、410 rpm、420 rpm、430 rpm,实际测量结果如表2,数据进行了误差计算。
表2 转速数据采集及误差计算
由表2 可知,直流电机的稳态误差始终保持在0.49% 以下,其超调性很小。在额定转速时,其稳态误差为0.25% 。随着设定电机转速增大,稳态转速的误差率总体呈减小趋势,实物系统有较好的稳态性能和控制精度。
参考文献
[1] 焦玉朋.基于51单片机的PWM直流电机调速系统[D].呼和浩特:内蒙古大学,2013.
[2] 雷慧杰.基于STM32的直流电机PID调速系统设计[J].现代电子技术,2016,39(8):165-167,170.
[3] 司开波,黄健,吕林涛.基于STM32的直流电机调速新方法[J].宇航计测技术,2018,38(02):87-91.
[4] 刘松斌,王海星,李硕恒.基于STM32的直流电机PWM调速系统[J].化工自动化及仪表,2016,43(8):834-837.
[5] 王国宇.基于STM32的无刷直流电机控制系统设计及仿真研究[D].桂林:广西师范大学,2016.
[6] 张才勇,王庭有,李驰骎.基于单片机的直流电机调速控制[J].化工自动化及仪表,2019,46(11):885-890,916.
[7] 李勇.直流电动机拖动系统的电气调速方法[J].四川水力发电,2000(03):90-92.
[8] 李鹏辉.浅谈直流电动机调速[J].生物技术世界,2014(1):174.
[9] 牛丽婕.直流电机的调速方法[J].无线互联科技,2013(3):72.
[10] 阮毅,杨影,陈伯时.电力拖动自动控制—运动控制系统[M].北京:机械工业出版社:2016.
[11] 熊东海.两轮电动车用直流无刷电机调速系统的设计[D].广州:广东工业大学,2018.
[12] 张宏卫,曹志刚.基于Simulink的智能车用微型电机闭环系统的仿真研究[J].电气传动自动化,2011,33(1):30-32.
[13] 王祎晨.增量式PID和位置式PID算法的整定比较与研究[J].工业控制计算机,2018,31(5):123-124.
[14] 朱贵国,汪党.基于STM32单片机的直流电机调速系统设计[J].数字技术与应用,2013(5):2-3.
(本文来源于必威娱乐平台
杂志2022年2月期)
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码