STM32 Cube MX实现超声波避障工程

STM32 Cube MX实现超声波避障工程

使用STM32 F103C8T6芯片,设计超声波避障小车的算法,工具是STM32 Cube MX生成初始程序,keil v5中添加控制逻辑。小车主要硬件:左右前轮各一个直流电机;一个继电器(条件限制没有焊电路板,采用继电器机械换向)控制左侧电机的通断电;一个超声波模块;一个直流电源(蓄电池,电压保证足够5V输出)。

材料限制,只有一个大电池,杜邦线也稀缺,所以硬件都是糊在上面的。
在这里插入图片描述

|--------------------------------

超声波模块的介绍:

工作原理参考链接:https://blog.csdn.net/qq_27312943/article/details/51591347

在这里插入图片描述

图 超声波雷达。

具有4个引脚:其中VCC电源一定要接5V,我之前不小心接了3V,超声波雷达是没有返回信号的,即Echo引脚一直低电平。另外,如何判断超声波雷达正常工作了:可以在Echo引脚上外接一个LED灯的正极,LED灯闪烁就说明雷达正常工作了。

|--------------------------------

继电器介绍:
在这里插入图片描述

图 继电器

继电器很简单,在连接电路时,当成一个开关串联进供电电路就可以。继电器控制端有一个“IN”引脚,连接开发板,用于控制继电器通断。

|

|

|

下面说一下控制程序:

(一)、Cube MX生成源码:

程序目标:利用超声波雷达的测距功能,实现当障碍物距离小于一定值时,触发继电器断开,使小车原地转向。

用到的芯片功能:(1)GPIO 输入;(2)GPIO输出;(3)TIM3定时器的时基。

引脚分配:主要是配置3各引脚——超声波雷达的Trig、Echo和继电器的IN引脚。其余电源引脚“VCC和GND”按要求接入电路。超声波的VCC接5V;继电器的VCC可以接3V,也可以接5V;一般开发板上会标出对应引脚的电压,我的开发板预留了两个5V接口。

PA1——Trig;

PA2——Echo;

PA3——IN。

Cube软件具有可视化配置单片机的界面,相比配置标准STM32库函数要省心很多,同时也有缺点,Cube生成的程序源码可读性很差,需要多熟悉。

下面是软件中操作步骤:

1、新建工程
在这里插入图片描述

图1

电机根据单片机型号建立工程。

2、选择对应STM芯片型号
在这里插入图片描述

图2

我采用的是STM32F103 C8T6,在搜索框中输入你所对应的芯片型号。然后右侧列表中双击后打开新界面:
在这里插入图片描述

图3

3、设置RCC

RCC(Reset Clock Controller)复位与时钟控制器。
在这里插入图片描述

图4

我这里选择高速时钟源为 Crystal/。低速时钟源可选可不选。

4、配置引脚

配置PA1为GPIO Output功能。

配置PA3为GPIO Output功能
在这里插入图片描述

图5

配置PA2为GPIO Input功能。
在这里插入图片描述

图6

图6-1

给GPIO命名Trig和Echo,方便在代码中管理。

5、设置TIM3定时器

根据前文链接中的超声波测距原理,需要Trig引脚输出一个很短时间20微秒的触发信号(高电平脉冲),因此,利用TIM3定时器实现微秒计时的功能。
在这里插入图片描述

图7

TIM3配置选中Internal Clock。

关于定时器如何设置时基的问题,其实也不是很复杂,主要是设置两个值。一个是预分频值prescaler,另一个是重装载值counter period(计数周期)。本文所用芯片的系统频率是72 MHz。下面以一个设置1ms时基的例子说明prescaler和counter period分别取多少:


首先设置prescaler=72-1,即得到计时器的计数频率等于 1 MHz(每秒计数1000 000次);

之后设置计数周期counter
period=1000-1;即从0往上数数,数到999。大家可以想一想,如果你每秒能数1000 000个数,我想让你每隔1 ms报时一次(也就是触发你做一件事),那你的计数周期应该是1000个数。

芯片定时器的计时也是通过不断向上计数,达到计数周期之后会发生一次溢出中断,溢出后会运行一次中断函数中的内容,也就是上面所说的触发你做一件事。


上面说的定时器是我自己的理解,肯定会有不恰当之处。定时器的详细介绍参考链接:https://blog.csdn.net/as480133937/article/details/99201209
在这里插入图片描述

图8

图8中设置的预分频值和重装载值分别为72-1和2-1。这样配置得定时器时基为2微秒
在这里插入图片描述

图9

图9开启TIM3的全局中断NVIC。

6、设置时钟树
在这里插入图片描述

图10

7、代码生成设置
在这里插入图片描述
在这里插入图片描述

图11

图12

8、生成代码
在这里插入图片描述

图13

点击 generate code,

然后点击open project。


(二)、Keil v5添加用户代码:

先简单看一下Cube生成的源码主要的部分:目录 复制
在这里插入图片描述

图14 main()函数

在这里插入图片描述

图15 TIM3中断函数

我们主要编辑的就是上面两个部分。

1、声明用户定义的函数和变量
在这里插入图片描述
在这里插入图片描述

图16

2、距离计算函数的定义
在这里插入图片描述

图17

3、中断函数文件(stm32f10xxx_it.c)中添加计数变量TIM3_Count
在这里插入图片描述
在这里插入图片描述

图18 图19

在中断文件stm32f10xxx_it.c中找到中断函数void TIM3_IRQHandler(void),在其中添加计数,别忘了文件前面的外部变量声明。

4、主函数的while(1)中添加控制逻辑
在这里插入图片描述

图20

|------------------------------------------------------

至此,程序配置结束了,然后编译,选择下载接口,之后下载到开发板中就可以了。硬件电路也要接好。
源码网盘地址:链接:https://pan.baidu.com/s/17k4YIe64x4fJk2uWP7FMuw
提取码:zxmd

  • 9
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
STM32红外循迹和超声波在原理上并不会冲突,但在实际运用中可能存在一些问题需要考虑。 红外循迹和超声波都是基于不同的传感器技术,用于检测和碍物,以实现机器人的移动控制。 红外循迹原理是利用红外线传感器感知地面上的红外反射信号,通过检测黑线和白地之间的差异,从而确定机器人的运动方向。 超声波则是利用超声波传感器发射超声波信号,并通过接收返回的超声波信号来检测与物体之间的距离,以确定是否有碍物。 在使用过程中,如果同时使用红外循迹和超声波,需要注意以下几点: 1.传感器选用:要选择不同的接口或引脚连接红外与超声波传感器,确保它们能够正常工作,不存在硬件上的冲突。 2.信号干扰:因为红外传感器和超声波传感器都属于接收和发送传感器,可能会对彼此的信号产生干扰。在设计电路时,要合理分离它们的供电与信号线,以减少干扰的可能性。 3.算法设计:机器人的控制算法需要根据红外循迹和超声波传感器返回的数据进行判断和决策。需要设计合适的算法,使机器人能够同时检测和处理两种传感器的数据,实现循迹和功能。 综上所述,STM32红外循迹和超声波可以同时使用,但在硬件连接和算法设计方面需要注意一些细节,以确保它们能够正常工作,并免可能出现的冲突。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值