基于STM32的智能巡检小车系统设计 |
您所在的位置:网站首页 › 循迹模块与单片机连接 › 基于STM32的智能巡检小车系统设计 |
作者:车 邮箱:[email protected] 学校:西安工程大学硕士研究生 方向:机器视觉、图像分割、深度学习 循迹模块设计目录 1. 硬件设计--灰度循迹模块电路设计2. 软件设计--循迹程序设计3. 烧录程序3.1 编写各部分代码3.2 配置所用到的主芯片(STM32F407VET6)3.3 配置仿真器ST-Link3.4 添加Flash3.5 编译代码3.6下载程序 4. 测试4.1 直流电机驱动模块测试4.1.1 前进、后退和停止4.1.2 左转、右转 4.2 灰度循迹模块测试 5. 结论 1. 硬件设计–灰度循迹模块电路设计 灰度循迹传感器是主要用于小车沿黑色赛道循迹的传感器。灰度传感器利用不同颜色的检测面对光的反射程度不同,灰度感应接收管对不同检测面返回的光,其阻值也不同的原理进行颜色深浅检测。灰度传感器LED状态指示,传感器的管子照到灰度值较高的,输出电平由高变低,对应LED亮。此种输出方式为数字输出,即1或0输出。 2. 软件设计–循迹程序设计 循迹模块的设计就是要完成小车沿黑线的循迹。在循迹的过程中,要用L298N直流电机驱动模块驱动直流电机进行前进、后退停止操作;并且要通过两个轮子的差速进行左转和右转的转向动作。L298N驱动板可驱动2路直流电机,使能端ENA、ENB为高电平时有效,控制方式及直流电机状态表如下表所示。
循迹模块配了三个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之后就会被吞噬。 点击Options for Target,在Device里选择用到的主芯片,本设计里用到的主芯片是STM32F407VET6,所以在这里选择STM32F407VETx,点击OK。 仿真器配置成功。演示如图所示。 选择Options for Target的Utilities页面的Settings,然后点击Settings页面里面的Add,选择512k的STM32F4xx 512kB Flash。然后点击确定,这时候会返回上一页面,点击这个界面的OK。演示如图所示。
![]() 将ST-LINK仿真器一端插进STM32的SWD接口,另一端与电脑相连,这时候红灯亮起,下载时实物连接图如图所示。 在直流电机驱动模块的测试中,需要给IN1-IN4引脚赋值高、低电平,确保直流电机会正转、反转以及制动。首先给STM32主控板和L298N直流电机驱动模块通电。 STM32供电实物展示 代码中给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波用示波器显示如图所示。这时,小车左转。 设计了一个椭圆形环道的循迹。循迹赛道如图所示。
(经过多次反复测试,小车在弯度比较大的赛道上难以进行循迹。原因本次实验使用的小车是没有转向功能的小车,必须通过两个轮子进行差速转弯。当弯度太大时,小车还没反应过来,就已经冲出赛道了,还有就是小车的车体比较重,转弯原本就需要更大的动力。所以此实验中不能在弯度较大的赛道上循迹。) 5. 结论测试结果表明,小车可以在弯度比较平缓的赛道上进行循迹。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |