历史上的今天
今天是:2026年01月11日(星期日)
2023年01月11日 | 基于STM32的自动跟踪小车
2023-01-11 来源:zhihu

概述
小车外形:

功能简介
利用摄像头识别前车尾部的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.控制电源和电机舵机电源分别加开关,下程序的时候先关闭电机和舵机的电源。因为此时控制器没有给信号,电机和舵机可能会不受控制的运动。
上一篇:STM32 定时器详解
下一篇:新手入门之stm32中断系统
史海拾趣
|
电路如下,测得TXD和TXA的波形如图中所示,TXD接单片机TXD,TXA为光耦输出波形,TXD波形还算理想,但TXA波形上升沿上升缓慢,请问各位大虾如何改善TXA波形? … 查看全部问答> |
|
1架太阳能飞机样机于上周完成其处女航,开创了无燃料、无碳飞行新时代。推出这架飞机样机的Solar Impulse SA(瑞士,洛桑)公司计划将在2011年或2012年进行一次仅凭借太阳能环绕地球一周的飞行。 Solar Impulse公司的 HB-SIA(样机型号) 于在欧 ...… 查看全部问答> |
|
我在一个窗口中添加一个button, 在WM_COMMAND中, 点击这个button, button处于按下的状态, 松开鼠标的时候, 弹出一个窗口, 关闭这个弹出的窗口之后, button才被弹起来, 我想要的是松开鼠标的同时, button进入弹起的状态, 也就是说, 这个弹出窗口被关 ...… 查看全部问答> |
|
Window ce.net 4.0 如何开发屏幕保护程序,并指定快捷键Ctrl+Alt+Q Window ce.net 4.0 如何开发屏幕保护程序,并指定快捷键Ctrl+Alt+Q 是一台设备上的系统,我想按下快捷键显示屏幕保护程序,并在中间显示几行字 知道的请帮助我一下… 查看全部问答> |
|
请教一个问题: 在WinCE环境下,使用eVC编程 定义了2个字节的数据 TCHAR buf1[3]=_T(\"7A\"); SetDlgItemText(IDC_EDIT3,buf1); 显示的ASCII 现在我想用十进制显示出来,怎么转换呢?… 查看全部问答> |
|
用RS232串口实现最简单,但是速度慢; 用EPP/ECP并口传输数据和用USB总线传输数据两种方案从开发难易程度、通信速度方面各有哪些优势呢? 开发难易程度需要考虑FPGA端的开发以及PC端软件的开发两方面; 谢谢各位,目前正在方案选择中,希望大家 ...… 查看全部问答> |




