完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
使用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 |------------------------------------------------------ 至此,程序配置结束了,然后编译,选择下载接口,之后下载到开发板中就可以了。硬件电路也要接好。 |
|
|
|
只有小组成员才能发言,加入小组>>
4248个成员聚集在这个小组
加入小组3267 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4213 浏览 1 评论
4217 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 10:35 , Processed in 0.658243 second(s), Total 76, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号