基于STM32的巡线小车系统设计

known 发布于 2025-08-24 阅读(235)

吴凯,刘洁,张晶晶,李军,朱方明

(杭州师范大学 信息科学与技术学院,浙江 杭州 311121)

0 引 言

移动机器人集环境感知、动态决策与规划、行为控制与执行等多种功能于一体,在军事侦察、扫雷排险、防核化污染等危险与恶劣环境以及民用的物品搬运等方面具有广阔的应用前景。轮式移动机器人即智能小车,因其构造简单、控制相对方便以及工作效率高等因素,成为移动机器人研究领域的重要分支,受到人们的普遍关注。

巡线是智能小车控制行动路径的方法之一。采用红外检测电路采集路径信息可以较好地实现自动巡线。传统智能小车通常采用较为单一的传感器来采集迹线信息,容易导致信息采集不完整,小车偏离预定路线等,基于多传感器协同的方式,可以完成小车对迹线和障碍物的探测。本文设计了一种基于STM32 单片机的巡线小车系统,采用七路灰度传感器采集灰度值,采用双H 桥电机驱动模块对电机进行驱动,通过两侧的电机转速差调整和控制小车的姿态,从而实现巡线功能,并保持较快的运行速度。

1 系统工作原理

巡线小车的系统结构如图1所示,主要分为主控制器模块、灰度传感器模块、电机模块和电源模块四部分。小车的巡线主要通过对灰度传感器采集的数据进行分析,并由主控制器进行处理,最后通过调节两侧车轮的速度差来实现巡线的功能。

图1 系统结构图

2 系统硬件设计

系统硬件设计框图如图2所示,包括主控制器、灰度传感器、电机驱动板、电机、电源和稳压模块等。其中,电源和稳压模块组成电源模块,电机驱动板和电机则组成电机模块。电源通过稳压模块LM2596S 将12 V 电压降至5 V,给主控制器单片机供电,电机驱动板由电源直接供电。主控制器输出PWM 波给电机驱动板,用于控制电机转速和方向。灰度传感器用于识别白线所在位置和偏移角度,并由主控制器进行读取分析,通过读取传感器的数值对电机的速度进行调整。

图2 系统硬件设计框图

2.1 主控制器

主控制器采用的是STM32F103ZET6,该款单片机采用主流的Cortex 内核,拥有72 MHz 的主频以及丰富的外设,具有三个精度为12 位的ADC 和8 路定时器,并且搭载了DMA 模块以方便数据的搬运处理。

系统利用灰度传感器来对小车路径进行采集,而STM32 的高速运算及ADC 采集能力为此提供了保障,同时通过STM32 所提供的DMA 功能,可以有效地将灰度传感器的数据采集到CPU 中并对其进行处理。通过对STM32的通用定时器进行配置可以有效地输出PWM 波,设置比较值对PWM 的占空比进行调节,并由通用I/O 口输出电平对电机驱动板进行控制,从而实现对电机转速以及方向的调节。

2.2 传感器模块设计

传感器模块采用的是七路灰度传感器,用来采集路面的灰度信息。灰度传感器是一种模拟传感器,主要由一个发光二极管和一个光敏电阻组成,由于不同的检测面对光的反射程度不同,反射至光敏电阻的光线强度也不同,通过光敏电阻的光照特性,即随着光照的增强,光敏电阻的阻值变小,可以实现对不同的检测面颜色深浅的检测。由于场地为黑底白线,所以采用灰度传感器可以满足系统功能需求。

灰度传感器的电路原理图如图3所示,其中LED1 照射地面,同时光敏二极管接收地面的反光,在电阻R2 上获得分压输出。若采用模拟输出模式,则将该输出电压直接接到主控制器;若采用数字输出模式,则将模拟电压接入比较器进行比较,比较器的另一端由电源在电位器RP1 的分压获得。通过对电位器RP1 的调节,可以实现对线路的识别。最后,比较运放的输出通过一个上拉电阻接入主控制器。设计采用数字输出的模式,通过在软件中设置阈值来实现对线路的识别。不仅调节方便且对环境的适应性强,免去了不同环境下需要调节电位器的麻烦。

图3 灰度传感器电路原理图

在小车的正前方放置传感器模块,便于提前对小车的行进方向进行调整。同时在车的两侧也各装有一个单路的灰度传感器,用于判断场地中的十字路口。

2.3 电机驱动电路设计

电机驱动电路采用ZS-H1B 模块,该模块为双H 桥直流有刷电机驱动方式,采用两片的半桥驱动芯片和低内阻的N沟道MOSFET 进行驱动,可以对电机进行有效控制。控制信号主要有三类,两路电机使能信号,两路方向控制信号和两路PWM 输出。控制信号的真值表如表1所示。

表1 电机控制信号真值表

2.4 电源电路设计

系统电源电路的设计采用了LM2596S 芯片,实现对输入电压的降压及稳压。输入为锂电池,其输出电压和电池容量分别为12.6 V 和2 200 mAH。接入电源模块后通过电位器对输出的电压大小进行调节,并通过数码管显示。

小车采用两种供电方式。其中,主控制板及传感器模块采用5 V 供电,电机则采用12 V 供电。电机的12 V 电压由电池直接供给,主控制板和传感器的供电由电池通过稳压模块后的输出供给。为了供电方便,采用一块转接板对各电路进行供电。

3 系统软件设计3.1 系统主程序设计

系统主程序流程图如图4所示,主程序开始运行后,先对小车进行初始化,之后就开始读取传感器的数值,当检测到出现异常情况,就对小车进行修正,若为正常情况就让小车直行。最后返回读取的传感器值,如此循环往复。

图4 系统主程序流程图

当小车左右两侧的传感器位于线上时,则表示小车处在十字路口。程序判读出小车位于十字路口之后,小车开始执行转弯。小车转弯主要采用两侧车轮进行相反方向的旋转,以实现小车的原地旋转。当前方的传感器模块最外侧的传感器检测到黑线时,小车转动速度减慢,直至最中央的传感器检测到黑线,小车停止,转弯结束。系统采用了两段式的转弯,可以较好地提高转弯的精准度和成功率。

为了实现小车前往方格场地的任意白线交叉点的功能,我们主要采用两个程序对小车进行控制,一个是方向选择程序,另一个是路径选择程序。为了更好地表示场地的任意点位和移动路径,将小车出发点设为原点,并设置一个坐标轴,横坐标为X,纵坐标为Y(小车朝向正前方视为与+Y 轴方向一致),前往任意坐标点所要走的线路可以分为横向移动量和纵向移动量。路径采用数组(横坐标)和数组(纵坐标)进行表示,例如,向前4格,再向右4格,可以表示为:(0,0),(0,4),(4,4)。用数组表示即为[2]={0,0,4},[2]={0,4,4}。

基于坐标的路径选择程序,主要用于计算当前位置和下一个位置的横向距离diff或纵向距离diff。一般diff和diff其中一个为0,最后将距离填入方向选择函数。

方向选择程序有两个输入参数,分别为横向距离diff和纵向距离diff。程序中用mode 表示车辆的朝向,1 表示车头朝前,3 表示车头朝右,5 为车头朝后,7 则为车头朝左。当小车车头朝前,即mode=1 时,若diff=0,diff=(≠0),则小车执行走格子程序GO_Grid(),其中,代表小车向前走N 格。若diff=(>0),diff=0,则代表小车下一个目标点位于小车右侧个格子的位置,小车就会先执行右转程序GO_Right(),然后再向前走格。由于执行了右转程序,导致车头转向右侧,所以将车辆朝向标志mode 设为3。通过多次执行类似操作,就可以实现小车按照任意路径到达场地的指定位置。

3.2 循迹子程序设计

循迹子程序流程图如图5所示,主要用于走给定数量的方格。依靠前置灰度传感器来实时调整车辆以实现直行的稳定。传感器读取灰度值,主控制器通过ADC 对灰度值进行采集,并将ADC 数值用DMA 进行搬运,实现传感器数值的快速读取,减少对CPU 资源的占用。传感器按从左到右的顺序分别赋值为-8,-4,-2,0,2,4,8。当传感器检测到白线时,传感器的数值就为对应的数值,当检测到黑色时就为0。

图5 循迹子程序流程图

将各路传感器数据之和设为变量,如图5所示。在行进过程中对数值进行判断,若数值大于0,则表示右侧传感器位于线上,车辆偏向左,所以调整车辆向右偏转。数值越大,调整的幅度也越大。当数值小于0 时,则表示左侧传感器位于线上,车辆偏右,需要调整车辆向左偏转,根据数值的大小,来调节小车偏转的幅度。当数据为0 时,则表示小车处于正常直行状态。

4 测试结果

测试场地如图6所示,主要为贴有白色循线的黑色方格场地。集成开发环境为Keil5。前期采用分模块测试方法,首先对电机的驱动及速度调节进行测试,然后对灰度传感器模块进行测试。电机的驱动主要是PWM 波及控制信号的输出。采用14.4 kHz 的PWM 输出,改变占空比大小以实现对电机的速度调控,驱动成功后,对两侧电机速度差进行矫正。在占空比为26%的情况下,左轮慢0.2%。

图6 测试场地

传感器模块的测试,首先对传感器与地面的高度进行调节。对不同的高度,在场地的不同位置多次采集取平均,如表2所示,随着传感器高度的提高,传感器的/数值普遍提高,且由于STM32ADC 采集的最大值为4 096,高度过高会使黑白之间的差别过小,导致无法实现区分黑白功能。

表2 传感器高度与A/D 值关系

其次传感器的数据通过ADC 进行采集,并设置一个阈值对采入的数据进行二值化。为了调试便利,将传感器的A/D 值通过串口屏进行显示。对场地的不同区域进行测试,采集黑色区域与白色区域的/值,经过取平均值后,设置合适的阈值采入的数据二值化。

后期采用整体测试方法,对巡线稳定性进行测试,通过小车的持续运作,观察小车运行稳定性;并设计不同复杂程度的线路对小车进行测试用以验证小车面对复杂情况的处理能力。

小车在有白色循线的黑色方格场地进行测试,分别按“日”字形,左右转绕圈路线进行20 次绕圈测试。最后测试结果显示,出错率约5%。表明小车的出错概率较小,工作稳定性高。另外,系统可以通过调整灰度传感器的阈值来实现对巡线线路的快速区分,对不同环境的适应性强。

5 结 论

本文设计的基于STM32 单片机的巡线小车系统,选用了七路灰度传感器采集灰度值,并用双H 桥电机驱动模块对电机进行驱动实现了巡线以及路径选择、前往场景特定位置等功能。小车整体结构简单,工作稳定性高,能够适应不同环境快速准确地巡线与自主行驶。基于网格线的巡线方式,可以方便地应用到仓库,快递中转站等便于布线且物品整齐排放的场所实现货物的搬运及存放。对不同重量的货物搬运,系统还可以通过改变小车的尺寸和规模来实现,应用前景广阔。

标签:  小车 

免责声明

本文来自网络,不代表本站立场。如有不愿意被转载的情况,请联系我们。

iidomino cuppor