作者:车
邮箱:692604135@qq.com
学校:西安工程大学硕士研究生
方向:机器视觉、图像分割、深度学习
1. 硬件设计–灰度循迹模块电路设计
- 灰度循迹传感器是主要用于小车沿黑色赛道循迹的传感器。
- 灰度传感器利用不同颜色的检测面对光的反射程度不同,灰度感应接收管对不同检测面返回的光,其阻值也不同的原理进行颜色深浅检测。
- 灰度传感器LED状态指示,传感器的管子照到灰度值较高的,输出电平由高变低,对应LED亮。此种输出方式为数字输出,即1或0输出。
2. 软件设计–循迹程序设计
- 循迹模块的设计就是要完成小车沿黑线的循迹。在循迹的过程中,要用L298N直流电机驱动模块驱动直流电机进行前进、后退停止操作;并且要通过两个轮子的差速进行左转和右转的转向动作。
- L298N驱动板可驱动2路直流电机,使能端ENA、ENB为高电平时有效,控制方式及直流电机状态表如下表所示。
在灰度巡检模块的设计中,需要通过根据R、M、L三个引脚反馈给主控板数字信号0或1,对小车做出相应的操作。对应的逻辑关系如下表所示。
执行一次循迹程序的流程图如下图所示。
下图(a)~(f)是模拟的灰度巡线传感器在循迹过程中的几种情况,模拟的灰度巡线模块也代表了小车的方向。
循迹模块配了三个GPIO_Input引脚,分别命名为L_Pin、M_Pin、R_Pin引脚,分别与主控板的PE11、PE12、PD10引脚相连。
循迹程序设计的部分代码如下:
if(HAL_GPIO_ReadPin(GPIOE,R_Pin))//读取R_Pin的值;
dir = dir | 1;//把R_Pin的值放在dir第八位;
else dir = dir & 0xFE;//给R_Pin置零;
if(HAL_GPIO_ReadPin(GPIOE,M_Pin))//读取M_Pin的值;
dir = dir | 2;//把M_Pin的值放在dir第七位;
else dir = dir & 0xFD;//给M_Pin置零;
if(HAL_GPIO_ReadPin(GPIOD,L_Pin))//读取L_Pin的值;
dir = dir | 4;//把L_Pin的值放在dir第六位;
else dir = dir & 0xFB;//给L_Pin置零;
case 0: LEFT(); //左转;
case 1: RIGHT(); //右转;
case 2: GO(); //直行;
case 5: STOP(); //停止。
在循迹的过程中,需要用到很多控制函数:直行GO函数、停止STOP函数、左转LEFT函数、右转RIGHT函数。举例左转函数如下。
左转LEFT()函数部分代码如下:
HAL_GPIO_WritePin(GPIOA, IN1_Pin|IN4_Pin, GPIO_PIN_RESET);
//给IN1_Pin、IN4_Pin引脚赋值0;
HAL_GPIO_WritePin(GPIOA, IN2_Pin|IN3_Pin, GPIO_PIN_SET);
//给IN2_Pin、IN3_Pin引脚赋值1;
HAL_Delay(5);//延迟5ms,使电机受到的损伤更小。
3. 烧录程序
3.1 编写各部分代码
在Keil ARM中写程序的时候,由于一些初始化和配置在STM32CubeMX的原因,必须在BEGIN和END之间写代码,如图所示。如果写错地方,代码在点击编译Rebuild之后就会被吞噬。
3.2 配置所用到的主芯片(STM32F407VET6)
点击Options for Target,在Device里选择用到的主芯片,本设计里用到的主芯片是STM32F407VET6,所以在这里选择STM32F407VETx,点击OK。
3.3 配置仿真器ST-Link
- 选择完器件之后,继续选择Options for Target的Debug,选择Use并且根据自己的仿真器选择ST-Link Debugger。
- 点击ST-Link Debugger右边的setings,左边一列自动选择了ST-LINK/V2
- 如果可以识别到仿真器,那么SW Devive会出现0x2BA01447 ARM CoreSight SW-DP(ARM Core),然后点击确定,
仿真器配置成功。演示如图所示。
3.4 添加Flash
选择Options for Target的Utilities页面的Settings,然后点击Settings页面里面的Add,选择512k的STM32F4xx 512kB Flash。然后点击确定,这时候会返回上一页面,点击这个界面的OK。演示如图所示。
3.5 编译代码
- 如果编译后有问题,那么可以去Build Output窗口中看出现的错误,并根据出现错误的行提示和关键字提示去修改代码,修改完成后继续保存下载编译代码,直至没有出现错误为止;
- 如果编译后没有错误,Build Output会显示0 Error(s),工程文件编译成功。
3.6下载程序
将ST-LINK仿真器一端插进STM32的SWD接口,另一端与电脑相连,这时候红灯亮起,下载时实物连接图如图所示。
点击Keil ARM软件中的LOAD,下载时,仿真器会红黄灯交叉闪烁。如图所示。
工程文件下载成功后,Build Output窗口会显示Programming Done、Verify OK、Flash Load Finished,表示下载完成,工程文件下载成功如图所示。
工程文件下载完成之后,就可以给STM32主控板和L298N直流电机驱动模块上电。
4. 测试
4.1 直流电机驱动模块测试
4.1.1 前进、后退和停止
在直流电机驱动模块的测试中,需要给IN1-IN4引脚赋值高、低电平,确保直流电机会正转、反转以及制动。首先给STM32主控板和L298N直流电机驱动模块通电。
STM32供电实物展示
L298N直流电机驱动模块通电后实物展示
在这里,直接给IN1~IN4引脚赋值高、低电平来驱动小车前进、后退以及停止。
-
代码中给IN1~IN4引脚赋值RESET(0)、SET(1)、RESET(0)、SET(1);小车可以前进。
-
给IN1-IN4引脚赋值SET(1)、RESET(0)、SET(1)、RESET(0);小车可以后退。
4.1.2 左转、右转
STM32主控板输出两路PWM波形到L298N电机驱动模块的ENA和ENB使能端口,通过调节两路PWM波形占空比以此控制小车的车速。用示波器来显示测得的占空比的大小和输出频率的大小。示波器与STM32的连接实物图如图所示。
-
当两个脉冲为Pulse=320,根据公式计算占空比为59.9%输出的两路PWM波的占空比=60.00%,频率=10.00kHz。输出的PWM波用示波器显示如图所示。
-
当脉冲1为Pulse=320,脉冲2为Pulse=479,两路PWM波的占空比为59.9%和49.9%。输出的两路PWM波的占空比分别为60.00%和40.00%。这时,小车右转。
-
当脉冲1为Pulse=479,脉冲2为Pulse=320,输出的两路PWM波的占空比分别为40.00%和60.00%。输出的PWM波用示波器显示如图所示。这时,小车左转。
4.2 灰度循迹模块测试
设计了一个椭圆形环道的循迹。循迹赛道如图所示。
在灰度循迹模块的测试中,需要先编写这一模块的代码,然后根据前面的步骤下载、编译代码,给STM32上电、下载工程文件。这时候,给STM32和L298N直流电机驱动模块上电,然后把小车放在赛道上,让其进行循迹。正常情况如图所示,这时灰度传感器的返回值为010,电机正转,小车直行。
小车在循迹过程中会一直进行调整,图5-23小车循迹过程中偏右,这时灰度传感器的返回值为110,右电机正转,左电机反转,小车进行左转;图5-23小车偏左的,这时灰度传感器的返回值为001,左电机正转,右电机反转,小车进行右转操作。
(经过多次反复测试,小车在弯度比较大的赛道上难以进行循迹。原因本次实验使用的小车是没有转向功能的小车,必须通过两个轮子进行差速转弯。当弯度太大时,小车还没反应过来,就已经冲出赛道了,还有就是小车的车体比较重,转弯原本就需要更大的动力。所以此实验中不能在弯度较大的赛道上循迹。)文章来源:https://www.toymoban.com/news/detail-470379.html
5. 结论
测试结果表明,小车可以在弯度比较平缓的赛道上进行循迹。文章来源地址https://www.toymoban.com/news/detail-470379.html
到了这里,关于基于STM32的智能巡检小车系统设计--循迹模块设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!