张伟伟 丁宇豪
摘 要
本设计以安徽省机器人竞赛为背景,采用STM32单片机为核心微处理器。本设计采用模块化的设计方法,对应用于接力赛的智能小车软件部分进行设计,主要设计内容包括:信息采集模块,寻迹模块,接力模块,电机驱动模块以及控制算法的设计。在实际比赛过程中,智能小车能够自动适应直道、弯道、接力区、停止区等各种路况。通过PID算法实现智能变速,在实际行驶过程中的行进速度达到1.2m/s,达到智能小车接力赛的设计目标和要求。
关键词
智能小车;单片机;PID;STM32
中图分类号: TP242 文献标识码: A
DOI:10.19694/j.cnki.issn2095-2457.2020.07.052
0 引言
智能小车是机器人的一个分支,是一项涉及到计算机技术、传感器技术、自动控制技术、通信技术、人工智能技术等相关技术的综合性系统。它是輪式机器人的一种,很适合在人类无法生存的环境下工作。本课题 “应用于接力赛的智能小车软件部分设计”,是针对于“恩智浦智能车大赛”的要求所设计的软件系统,希望在比赛之外它也可以用于众多领域解决现实问题。
1 本课题研究的内容
本设计所述的智能车是一种循迹小车,能够在一定的区域内沿着给定的轨迹自动行驶(采用与白色地毯相反的黑色引导线作为行驶轨迹),运行过程由信息采集模块、循迹控制模块和电机控制模块三个部分完成。此外,还需要完成两辆小车之间的接力棒传递过程。小车的硬件控制核心选用的是STM32F103VET6微处理器。软件平台为Keil MDK开发环境。在本次设计中使用了数字PID软件算法来调节左右轮的转速差,实现智能小车的平滑转弯与平稳循迹。一号智能小车沿着黑色轨迹线运行,并在接力区域传递接力棒,由二号车完成到终点的运行。
2 系统软件设计
2.1 开发环境
本设计选用的微控制芯片是STM32F103VET6,该芯片基于ARM核,所以有很多基于ARM嵌入式的开发环境都适用于本设计的软件程序开发。本设计选择由德国ARM公司开发的微控制软件开发平台Keil MDK作为软件开发环境。MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。下面介绍软件开发的整个过程:
2.1.1 USB接口
智能车通过USB接口将程序下载到主控制芯片。使用一个连接PC机USB接口与智能车的USB接口相连。通过此接口将程序下载到智能车中。支持下载目标程序、检查内车寄存器、单步运行程序、在程序中插入断点运行等一系列操作。
2.1.2 Keil MDK环境下的软件开发
首先在Keil MDK中创建一个新的工程,在新的工程中选择智能车使用的主控制芯片,并进行相关配置;然后开始编写程序;程序编写完成后,在MDK中进行程序编译;如果有错误发生,则修改源程序文件,直到程序无误,此时将程序文件烧录到芯片中。
2.2 系统程序设计
智能小车的控制主程序的主要任务是完成系统的初始化、处理信息采集、小车的循迹控制、电机的控制、舵机转动、红外对管检测。当检测到一号车到达接力区的时候应该停在接力区,将接力棒传给二号车。当检测二号车接收到接力棒的时候,二号车启动循迹前进。当检测到二号车到达停止区时,二号车停在停止区内。
2.3 信息采集模块
智能车要实现循迹功能,就需要采集赛道上的黑色引导线的轨迹信息,这部分就需要信息采集模块来实现。通过光电传感器采集道路上的黑白线位置信号,根据采集到的信号将不同的信号的电压值输入到主控制器内,在主控制器内将输入的电压信号转化为所需要的工程值,根据不同的工程值大小判断黑白线。
2.4 循迹控制模块
该模块根据道路信息模块所采集的道路信息和判断的黑白线信息来判断小车在赛道中的位置,根据小车在赛道中的位置通过调节左右轮电机的转速差来控制小车的行动方向从而调节小车位置。当检测到小车在赛道偏左位置时,左电机的转速大于右电机;当检测到小车在赛道偏右位置时,右电机的转速大于左电机;当检测到小车位置在赛道中间位置时,左右电机转速一致。
2.5 接力模块
整个设计中接力模块分为两个部分。
第一部分为一号车的舵机控制模块:当一号车检测已经到达接力区并稳定停车时,控制舵机的转动,当舵机转动到一定的角度的时候,接力棒完成投递动作。
第二部分为二号车的红外对管检测模块:在二号车没有接收到接力棒的时候红外对管是导通的,这个时候程序中该位为高电平,二号车在接力区处于停止状态;当二号车检测到接收到接力棒时,红外对管是不导通的,这个时候程序中该位为低电平,二号车启动。
2.6 电机控制模块
在实际的软件算法设计中,需要对参数进行先比例,后积分,再微分的整定步骤[1]。首先整定比例部分,如果调节比例调节器参数,系统控制的效果没有达到设计要求的时候,需要使用积分环节,若同时使用比例和积分环节,能消除静差,但调试过程仍达不到设计要求时,就需要加入微分环节。调速程序中采用的是增量式PID算法。
本设计的PID算法选取比例控制单元(Kp)和微分控制单元(Td),所以在算法程序中只需要设置比例放大系数(P)和微分时间常数(D),实际算法程序如下:
PID算法程序:
wucha_d=loc-lastloc[4];//误差计算
pwm_out=P*loc+wucha_d*D;//误差处理
PWM输出:
pwm_final_L=pwm_max+pwm_out;//左电机PWM输出
pwm_final_R=pwm_max-pwm_out;//右电机PWM输出
一号车的参数设置:P=330,D=900,pwm_max=900;
二号车的参数设置:P=200,D=720,pwm_max=900;
首先对比例放大系数(P)进行整定,将P的值从零开始逐步增大,觀察小车循迹时翻译的快速性,当小车循迹时反应的快速性良好时,开始对微分时间常数(D)进行整定,最终得到上述的P、D参数。
3 系统调试
通电检查:给智能车通电,检测各模块是否供电正常,尤其是电机的驱动电压和电流,需要时电机的驱动电压和电流保持在额定范围内,才能使电机保持正常工作。
程序调试:检查程序是否已经烧录到芯片中,在各模块中能否正常运行。
整机调试:整体调试智能车的各个参数。
(1)光电传感器的参数调节:分别让光电传感器在黑色和白色的区域工作采集此时7个通道的各路参数,共采集10组计算平均值,用平均值作为所需要的参数。
(2)PID参数调节:PID的参数调节需要根据参数PID参数整定的步骤一步步进行调节,直至智能车的循迹效果和转弯效果达到设计要求。
通过优化和完善,智能车基本实现了设计和比赛的要求,在赛道上能够正常运行,并且实现了平均1.2m/s的行驶速度。
4 结论
本文从信息采集模块,寻迹模块,接力模块,电机驱动模块以及控制算法等几个方面完成了应用于接力赛的智能小车的软件部分设计,给出了软件设计流程,详细阐述了设计思路。光电传感器采集道路上的黑白线位置信号,通过左右电机的PWM控制来实现控制电机的正转、反转、停止,通过PID的参数整定一步步进行调节,直至智能车的循迹效果和转弯效果达到设计要求。经过模块调试和整机调试,本设计控制精确度高,可靠性强,具有一定的实用价值。
参考文献
[1]雷慧杰.基于STM32的直流电机PID调速系统设计[J].现代电子技术2016.08:165-167.
[2]刘松斌,王海星,李硕恒.基于STM32的直流电机PWM调速系统[J].化工自动化及仪表2016.08:834-837.
[3]朱向庆,何昌毅,朱万鸿,et al.基于STM32单片机的通信技术实验系统设计[J].实验技术与管理,2019(8).