概述
基于STM32F103C8T6的循迹避障小车完整制作过程
本文适合小白观看
由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程中也参考了很多大神分享的资料,学到很多的东西。但是资料都比较分散,有些东西也不好找,在这里就想把自己制作小车的一个整体过程记录分享一下,希望能够帮到你。
我自己也算是一个小白,之前有做过arduino的循迹避障小车,对于stm32也只是看过一点视频,还不算很熟练,这次制作也相当于学习stm32了,所以本文适合刚入门的同学参考,也虚心接受各大神的指导。
如果你一点基础都没有,建议先看下原子哥F1开发板的视频,他们的资料都是开源的,看完你才有基础可以做这个小车。
资料链接: 正点原子资料下载.
话不多说,下面开始制作小车了
**我的讲解的流程是:
//第123点是基本的设置;第456点是做循迹小车;第789点是做避障小车。
1,罗列需要的硬件
2,如何使用STM32F103C8T6(编写和烧录程序)
3,如何使电机动起来(使车子前进后退和转弯)
4,如何通过pwm调整电机的转速(调节小车的快慢)
5,如何设置IO口读取循迹模块的信号(检测黑线)
6,完成循迹小车的制作(编写循迹主函数)
7,如何用使用pwm让舵机旋转到相应的角度
8,如何配置定时器使用超声波模块测距
9,完成避障小车的制作**
我这一周差不多每天花一点时间挨个解决这些问题,就完成了小车的制作,还是很轻松的
一,制作小车需要的硬件
1 | STM32F103C8T6最小系统板 |
---|---|
2 | 4个轮子的智能小车底板 |
3 | L298N电机驱动模块 |
4 | 舵机SG90云台和超声波模块HC-SR04 |
5 | 2节18650电池 |
6 | TCRT5000循迹模块 |
7 | 面包板和杜邦线若干 |
8 | jlink ob下载器 |
9 | 5v转3.3v DC-DC模块 |
10 | 0.96寸 iic通信的oled屏幕(可选) |
以上就是我制作小车所用到的硬件了,当然其它的一些工具像电烙铁,胶枪啥的都是必备品我就不说了
它们大概长这样(淘宝都搜得到):
二,如何使用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上进行相应的设置就可以下载了。
就像下面这样连接,usb口接上电脑就行。
在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
最后
以上就是友好大神为你收集整理的基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)一,制作小车需要的硬件二,如何使用STM32F103C8T6(编写和烧录程序)三,如何使电机动起来(使车子前进后退和转弯)的全部内容,希望文章能够帮你解决基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)一,制作小车需要的硬件二,如何使用STM32F103C8T6(编写和烧录程序)三,如何使电机动起来(使车子前进后退和转弯)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复