基于STM32的智能巡检小车系统循迹模块设计

作者:车
邮箱:692604135@qq.com
学校:西安工程大学硕士研究生
方向:机器视觉、图像分割、深度学习

循迹模块设计目录

  • 1. 硬件设计–灰度循迹模块电路设计
  • 2. 软件设计–循迹程序设计
  • 3. 烧录程序
  • 3.1 编写各部分代码
  • 3.2 配置所用到的主芯片(STM32F407VET6)
  • 3.3 配置仿真器ST-Link
  • 3.4 添加Flash
  • 3.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为高电平时有效,控制方式及直流电机状态表如下表所示。

  • 在灰度巡检模块的设计中,需要通过根据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供电实物展示
    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的连接实物图如图所示。

    1. 当两个脉冲为Pulse=320,根据公式计算占空比为59.9%输出的两路PWM波的占空比=60.00%,频率=10.00kHz。输出的PWM波用示波器显示如图所示。

    2. 当脉冲1为Pulse=320,脉冲2为Pulse=479,两路PWM波的占空比为59.9%和49.9%。输出的两路PWM波的占空比分别为60.00%和40.00%。这时,小车右转。

    3. 当脉冲1为Pulse=479,脉冲2为Pulse=320,输出的两路PWM波的占空比分别为40.00%和60.00%。输出的PWM波用示波器显示如图所示。这时,小车左转。

    4.2 灰度循迹模块测试

    设计了一个椭圆形环道的循迹。循迹赛道如图所示。


    在灰度循迹模块的测试中,需要先编写这一模块的代码,然后根据前面的步骤下载、编译代码,给STM32上电、下载工程文件。这时候,给STM32和L298N直流电机驱动模块上电,然后把小车放在赛道上,让其进行循迹。正常情况如图所示,这时灰度传感器的返回值为010,电机正转,小车直行。

    小车在循迹过程中会一直进行调整,图5-23小车循迹过程中偏右,这时灰度传感器的返回值为110,右电机正转,左电机反转,小车进行左转;图5-23小车偏左的,这时灰度传感器的返回值为001,左电机正转,右电机反转,小车进行右转操作。

    (经过多次反复测试,小车在弯度比较大的赛道上难以进行循迹。原因本次实验使用的小车是没有转向功能的小车,必须通过两个轮子进行差速转弯。当弯度太大时,小车还没反应过来,就已经冲出赛道了,还有就是小车的车体比较重,转弯原本就需要更大的动力。所以此实验中不能在弯度较大的赛道上循迹。)

    5. 结论

    测试结果表明,小车可以在弯度比较平缓的赛道上进行循迹。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于STM32的智能巡检小车系统循迹模块设计

    发表评论