基于STM32的自动跟踪小车

2023-01-11  

概述

小车外形:

功能简介

利用摄像头识别前车尾部的AprilTag,得到前车位置,传回stm32主控板处理,使两车在行驶时保持恒定距离,实现自动跟车。

openMV4摄像头

1.1 Apriltag识别与串口传输

AprilTag是一个视觉基准库,在AR,机器人,相机校准领域广泛使用。通过特定的标志(与二维码相似,但是降低了复杂度以满足实时性要求),可以快速地检测标志,并计算相对位置。

Apriltag示例:

通过识别Apriltag,可以得到x,y,z三个方向的距离以及偏移角度。这里只需要三维的距离即可,通过串口传回stm32.

STM32主控板(型号为F407)

2.1 时钟与中断配置

附上stm32时钟示意图:

定时器示意图:

定时器分配:


所有时钟初始化的函数:(每个函数的详细内容在后面)

2.2 串口收发与数据处理

串口中断:USART1,USART2
串口初始化函数(以USART1为例):

串口中断处理函数:

字符串接收与处理(从openMV接收到的数据):

字符串转化为两位小数浮点数(用于后续PID控制):


2.3 LCD显示模块

LCD模块用于调试时观察数据,调试完成可以删去,因为显示屏很耗时,使处理速度变慢
驱动函数总览:

TFT屏幕初始化:

字符串显示函数;

2.4 电机、舵机与编码器

定时中断:TIM2,用于修改电机和舵机的PWM占空比
初始化函数:

TIM2中断处理函数:

PWM输出:TIM3(舵机),TIM8(电机)

初始化函数(以TIM8为例):

编码器初始化函数:

编码器返回速度值:

定时从编码器取数,注意,时间不一样,取回的数值也不一样,取决于实际速度以及编码器线数。这里50ms取一次:

2.5 PID控制

PID库函数:

主函数中的PID调节:

定时器TIM2中断里改变占空比:

电源与电机驱动

3.1 L298N电机驱动板

电源与电机驱动

因为后面两路电机要求同速,故把AB两通道用线短接,用一路PWM控制两路电机。
下面是使用说明:

具体控制代码见上面TIM2中断处理函数中,利用两路定时器轮流输出PWM(另一路为零),即可控制电机正反转。

3.2 LM2596降压模块

手册中的典型连接:

原理图如下:

3.3 电源部分注意事项

1.电池用的是12v航模锂电池,为了防止过放导致电池损坏,必须要在电池输入端加一个电压表模块,如下图:

2.控制部分电源和电机舵机电源分开,因为电机舵机启动时会过大电流,导致电压不稳定,影响芯片供电。这里LM2596给电机供电,一个LM2596给舵机供电,另一个LM2596给单片机和openMV供电。

3.控制电源和电机舵机电源分别加开关,下程序的时候先关闭电机和舵机的电源。因为此时控制器没有给信号,电机和舵机可能会不受控制的运动。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。