完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
基于STM32F103C8T6的循迹避障小车完整制作过程 本文适合小白观看
由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程中也参考了很多大神分享的资料,学到很多的东西。但是资料都比较分散,有些东西也不好找,在这里就想把自己制作小车的一个整体过程记录分享一下,希望能够帮到你。 我自己也算是一个小白,之前有做过arduino的循迹避障小车,对于stm32也只是看过一点视频,还不算很熟练,这次制作也相当于学习stm32了,所以本文适合刚入门的同学参考,也虚心接受各大神的指导。 如果你一点基础都没有,建议先看下原子哥F1开发板的视频,他们的资料都是开源的,看完你才有基础可以做这个小车。 资料链接: 正点原子资料下载. 话不多说,下面开始制作小车了 **我的讲解的流程是: //第123点是基本的设置;第456点是做循迹小车;第789点是做避障小车。 1,罗列需要的硬件 2,如何使用STM32F103C8T6(编写和烧录程序) 3,如何使电机动起来(使车子前进后退和转弯) 4,如何通过pwm调整电机的转速(调节小车的快慢) 5,如何设置IO口读取循迹模块的信号(检测黑线) 6,完成循迹小车的制作(编写循迹主函数) 7,如何用使用pwm让舵机旋转到相应的角度 8,如何配置定时器使用超声波模块测距 9,完成避障小车的制作** 我这一周差不多每天花一点时间挨个解决这些问题,就完成了小车的制作,还是很轻松的 一,制作小车需要的硬件 [tr]1STM32F103C8T6最小系统板[/tr]
它们大概长这样(淘宝都搜得到): 二,如何使用STM32F103C8T6(编写和烧录程序) 拿到这块最小系统板,怎么用MDK来给它写程序驱动,因为我也是第一次实践用stm32,在用这块板子时也走了一些弯路,下面说说我遇到的几个问题,一般解决了这几个问题,正常的编写和烧录程序是没有问题的。 1,keil4编写的工程在MDK5上编写警告 就是用老版本写的工程在MDK5上打开会有这么个提示: 解决方法很简单,根据上面的提示来做就行了。我是直接下载了Legacy Support这个支持包,安装完就可以直接用MDK5编程了,具体操作可以参考下面这位博主的介绍: 链接: ARM-IDE MDK5不兼容MDK工程. 2,如何使用SWD模式下载程序 我们可以看到,手上的这块F1最小系统板有4根向外支出来的引脚:SWIO,SWCLK,3V3,GND(可能引脚的名字被简化成了IO,CLK,G,V3,他们是一样的)。使用SWD 模式下载程序,只需要SWIO,SWCLK这两根线就可以完成程序下载了,很方便。 我们将最小系统板的这4个引脚连接到jlink ob下载器对应的这4个引脚这里,再通过下载器与电脑连接,再在MDK5上进行相应的设置就可以下载了。 就像下面这样连接,u***口接上电脑就行。 在MDK上需要进行以下设置: 点击上图的Settings进入下图的选项: 此时要把板子连接上电脑才看得到界面。 3,STM32F103C8T6设置跳线帽为FLASH模式 把程序下载到flash是为了掉电再上电后程序任然可以运行。 我是将两个跳线帽都放到了0这边,设置为FLASH模式。 好了,到此为止你应该可以正常的编写和下载程序了,最开始编写程序最好拿一个卖家给的测试工程改写,因为你拿别的工程可能一编译就出现一大堆错误,很打击自信心。你可以先尝试写一个将某个IO口拉高的程序,下载进板子里,再用万用表测一下那个引脚的电平看是不是3.6v左右,如果是的话,就说明你已经会用这块板子了,可以进行下一步的程序编写了。 比如这段程序: int main(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIO的外设时钟 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1;//选择要用的GPIO引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为推免输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置引脚速度为50MHZ GPIO_Init(GPIOA, &GPIO_InitStructure);//调用库函数,初始化GPIO GPIO_SetBits(GPIOA,GPIO_Pin_1); //将GPIOA1拉高} 编译后烧录到板子上,测试A1引脚的电压为3.6V就ok。 我这里上传了卖家给的最小系统板测试资料: 链接: https://download.csdn.net/download/weixin_43924857/11647457. 三,如何使电机动起来(使车子前进后退和转弯) 要想让电机动起来,就需要电机驱动了,如下: 我这里只讲一下这个驱动怎么接线,以及它的工作方式和使用方法等,会用就行,要看更详细的介绍可以看这位博主的博客:链接: https://blog.csdn.net/singular_man/article/details/87285597. 1,这个驱动怎么用呢? 我们只需要做以下操作即可: 1,12v输入和电源地接2节18650供电 2,单片机IO控制输入接最小系统版的4个IO口,待会我们再写程序控制这几个IO口 3,OUT1和OUT2是一对,分别接小车一侧电机两级,至于电机的两级具体该怎么接,等后面我们设置完程序运行后,要使它们转动的方向一直就行了。OUT3和OUT4同理。 4,我们通过IN1,IN2,IN3,IN4分别控制OUT1,OUT2,OUT3,OUT4。其中IN1,IN2,IN3,IN4与单片机连接,设置他们的高低电平即可完成对电机驱动简单的控制。 它的工作方法是这样的: 首先我们将OU1和OUT2分别接电机的两极,这时我们控制单片机使输入端IN1接入高电平,则相应的OUT1端也就变为高电平;将IN2接入低电平后相应的OUT2也就变为低电平,OUT1和OUT2间有了电位差,这样电机就能转起来了,很简单。 2,如何写程序使小车前进后退和转弯呢? 设计思路就是设置4个IO口的高低电平 我的IO口与电机驱动是这样连接的:A1–IN1;A2–IN2;A3–IN3;A4–IN4; 再看下面这个代码,我简单的写了一个前进和一个左转函数 void car_go(void);void car_left(void); int main(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIO的外设时钟 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//选择要用的GPIO引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为推免输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置引脚速度为50MHZ GPIO_Init(GPIOA,&GPIO_InitStructure);//调用库函数,初始化GPIO car_go();//前进}void car_go(void) //前进{ GPIO_SetBits(GPIOA,GPIO_Pin_1); //控制左边轮胎 GPIO_ResetBits(GPIOA,GPIO_Pin_2); GPIO_SetBits(GPIOA,GPIO_Pin_3); //控制右边轮胎 GPIO_ResetBits(GPIOA,GPIO_Pin_4);}void car_left(void) //左转{ GPIO_SetBits(GPIOA,GPIO_Pin_1); //控制左边轮胎 GPIO_ResetBits(GPIOA,GPIO_Pin_2); GPIO_ResetBits(GPIOA,GPIO_Pin_3); //控制右边轮胎 GPIO_SetBits(GPIOA,GPIO_Pin_4); } 由于主函数里调用的是car_go函数,这个代码编译下载后车子就会向前走,如果你的轮子转反了的话,简单的方法就是把电机的正负极换个位置接就行了。 好了,这篇文章已经很长了,今天就先码到这里,整个完整过程会分为上中下三篇,剩下两篇过两天慢慢码完再发。 下面是我所制作的小车成品图,因为模块都是独立的,所以线比较多。 下面是我写的已经测试完成了的工程,主函数里有两个循环,分别是循迹和避障循环,他们是单独工作的,引用掉一个再打开另一个就行。 https://download.csdn.net/download/weixin_43924857/11650617 当然循迹和避障的策略都是我自己为了完成任务写的,比较简单,能够实现循迹避障功能,到后面你已经会操作各个模块后,自己写个更好的循迹避障策略是完全没有问题的,或者是用我的工程,里面的各模块函数也都写好了,直接调用就行。 下面是中篇地址: 基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----中篇(第456点) 工程文件已经放到百度网盘: 链接:https://pan.baidu.com/s/1VSRC418Tz8uLCF8cjrIY1g 提取码:7m9y |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1135 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1160 浏览 1 评论
589 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
439 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1055 浏览 2 评论
1632浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
298浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
304浏览 3评论
295浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
270浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-24 08:21 , Processed in 0.627307 second(s), Total 45, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号